spring
2025-03-17 2bfe437d8b30fb7d80a38875b00ebf2b222ea05f
完成车间管理
已修改10个文件
已添加3个文件
1060 ■■■■ 文件已修改
src/api/structural/capability.js 156 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/structural/structureTestObjectPart.js 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/structural/workshop.js 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Table/lims-table.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/reportPreparation/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/performance/manHour/workTimeConfig.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/capability/index.vue 332 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/capabilityComponents/testObjectEditForm.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/workshop/components/fileList.vue 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/workshop/index.vue 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/structural/capability.js
@@ -1,151 +1,159 @@
import request from '@/utils/request'
import request from "@/utils/request";
// èŽ·å–æ£€éªŒé¡¹ç›®å‚æ•°
export function selectItemParameterList(query) {
  return request({
    url: '/capacityScope/selectItemParameterList',
    method: 'get',
    params: query
  })
    url: "/capacityScope/selectItemParameterList",
    method: "get",
    params: query,
  });
}
// èŽ·å–æ£€æµ‹å¯¹è±¡
export function selectTestObjectList(query) {
  return request({
    url: '/capacityScope/selectTestObjectList',
    method: 'get',
    params: query
  })
    url: "/capacityScope/selectTestObjectList",
    method: "get",
    params: query,
  });
}
// æ–°å¢žæ£€éªŒé¡¹ç›®å‚æ•°
export function addItemParameter(query) {
  return request({
    url: '/capacityScope/addItemParameter',
    method: 'post',
    data: query
  })
    url: "/capacityScope/addItemParameter",
    method: "post",
    data: query,
  });
}
// åˆ é™¤æ£€éªŒé¡¹ç›®å‚æ•°
export function delItemParameter(query) {
  return request({
    url: '/capacityScope/delItemParameter',
    method: 'delete',
    params: query
  })
    url: "/capacityScope/delItemParameter",
    method: "delete",
    params: query,
  });
}
// ä¿®æ”¹æ£€éªŒé¡¹ç›®å‚æ•°
export function upItemParameter(query) {
  return request({
    url: '/capacityScope/upItemParameter',
    method: 'post',
    data: query
  })
    url: "/capacityScope/upItemParameter",
    method: "post",
    data: query,
  });
}
// èŽ·å–æ£€éªŒå¯¹è±¡æ ‘
export function getItemTree() {
  return request({
    url: '/capacityScope/getItemTree',
    method: 'get'
  })
    url: "/capacityScope/getItemTree",
    method: "get",
  });
}
// æ–°å¢žæ£€æµ‹å¯¹è±¡
export function addTestObject(query) {
  return request({
    url: '/capacityScope/addTestObject',
    method: 'post',
    data: query
  })
    url: "/capacityScope/addTestObject",
    method: "post",
    data: query,
  });
}
// åˆ é™¤æ£€æµ‹å¯¹è±¡
export function delTestObject(query) {
  return request({
    url: '/capacityScope/delTestObject',
    method: 'delete',
    params: query
  })
    url: "/capacityScope/delTestObject",
    method: "delete",
    params: query,
  });
}
// ä¿®æ”¹æ£€æµ‹å¯¹è±¡
export function upTestObject(query) {
  return request({
    url: '/capacityScope/upTestObject',
    method: 'post',
    data: query
  })
    url: "/capacityScope/upTestObject",
    method: "post",
    data: query,
  });
}
// æŸ¥è¯¢æ£€éªŒå¯¹è±¡çš„产品维护列表
export function selectProductListByObjectId(query) {
  return request({
    url: '/capacityScope/selectProductListByObjectId',
    method: 'get',
    params: query
  })
    url: "/capacityScope/selectProductListByObjectId",
    method: "get",
    params: query,
  });
}
// æ–°å¢žäº§å“
export function addProduct(query) {
  return request({
    url: '/capacityScope/addProduct',
    method: 'post',
    data: query
  })
    url: "/capacityScope/addProduct",
    method: "post",
    data: query,
  });
}
// åˆ é™¤äº§å“
export function delProduct(query) {
  return request({
    url: '/capacityScope/delProduct',
    method: 'delete',
    params: query
  })
    url: "/capacityScope/delProduct",
    method: "delete",
    params: query,
  });
}
// ä¿®æ”¹äº§å“
export function upProduct(query) {
  return request({
    url: '/capacityScope/upProduct',
    method: 'post',
    data: query
  })
    url: "/capacityScope/upProduct",
    method: "post",
    data: query,
  });
}
// èŽ·å–å®žéªŒå®¤åç§°
export function obtainItemParameterList() {
  return request({
    url: '/laboratoryScope/obtainItemParameterList',
    method: 'get',
  })
    url: "/laboratoryScope/obtainItemParameterList",
    method: "get",
  });
}
// æŸ¥è¯¢åŽŸå§‹è®°å½•æ¨¡æ¿æžšä¸¾
export function getStandardTemplate() {
  return request({
    url: '/StandardTemplate/getStandardTemplate',
    method: 'get',
  })
    url: "/StandardTemplate/getStandardTemplate",
    method: "get",
  });
}
// æ ¹æ®äº§å“id查询厂家密度绑定
export function selectSupplierDensityByProductId(query) {
  return request({
    url: '/productSupplierDensity/selectSupplierDensityByProductId',
    method: 'get',
    params: query
  })
    url: "/productSupplierDensity/selectSupplierDensityByProductId",
    method: "get",
    params: query,
  });
}
// æ–°å¢žäº§å“åŽ‚å®¶å¯†åº¦ç»‘å®š
export function addProductSupplierDensity(query) {
  return request({
    url: '/productSupplierDensity/addProductSupplierDensity',
    method: 'post',
    data: query
  })
    url: "/productSupplierDensity/addProductSupplierDensity",
    method: "post",
    data: query,
  });
}
// ä¿®æ”¹äº§å“åŽ‚å®¶å¯†åº¦ç»‘å®š
export function updateProductSupplierDensity(query) {
  return request({
    url: '/productSupplierDensity/updateProductSupplierDensity',
    method: 'post',
    data: query
  })
    url: "/productSupplierDensity/updateProductSupplierDensity",
    method: "post",
    data: query,
  });
}
// åˆ é™¤äº§å“åŽ‚å®¶å¯†åº¦ç»‘å®š
export function deleteProductSupplierDensity(query) {
  return request({
    url: '/productSupplierDensity/deleteProductSupplierDensity',
    method: 'delete',
    params: query
  })
    url: "/productSupplierDensity/deleteProductSupplierDensity",
    method: "delete",
    params: query,
  });
}
// ç»‘定车间
export function updateWorkShop(query) {
  return request({
    url: "/capacityScope/updateWorkShop",
    method: "post",
    data: query,
  });
}
src/api/structural/structureTestObjectPart.js
@@ -1,66 +1,66 @@
import request from '@/utils/request'
import request from "@/utils/request";
// æ£€éªŒå¯¹è±¡æ ¹æ®äº§å“id查询零件
export function selectByTestObjectId(query) {
  return request({
    url: '/structureTestObjectPart/selectByTestObjectId',
    method: 'get',
    params: query
  })
    url: "/structureTestObjectPart/selectByTestObjectId",
    method: "get",
    params: query,
  });
}
// æ£€éªŒå¯¹è±¡æ–°å¢žäº§å“é›¶ä»¶
export function addTestObjectPart(query) {
  return request({
    url: '/structureTestObjectPart/addTestObjectPart',
    method: 'post',
    data: query
  })
    url: "/structureTestObjectPart/addTestObjectPart",
    method: "post",
    data: query,
  });
}
// æ£€éªŒå¯¹è±¡ä¿®æ”¹äº§å“é›¶ä»¶
export function updateTestObjectPart(query) {
  return request({
    url: '/structureTestObjectPart/updateTestObjectPart',
    method: 'post',
    data: query
  })
    url: "/structureTestObjectPart/updateTestObjectPart",
    method: "post",
    data: query,
  });
}
// æ£€éªŒå¯¹è±¡åˆ é™¤äº§å“é›¶ä»¶
export function deleteTestObjectPart(query) {
  return request({
    url: '/structureTestObjectPart/deleteTestObjectPart',
    method: 'delete',
    params: query
  })
    url: "/structureTestObjectPart/deleteTestObjectPart",
    method: "delete",
    params: query,
  });
}
// æ ¹æ®äº§å“id查询零件
export function selectByProductId(query) {
  return request({
    url: '/productPart/selectByProductId',
    method: 'get',
    params: query
  })
    url: "/productPart/selectByProductId",
    method: "get",
    params: query,
  });
}
// æ–°å¢žäº§å“é›¶ä»¶
export function addProductPart(query) {
  return request({
    url: '/productPart/addProductPart',
    method: 'post',
    data: query
  })
    url: "/productPart/addProductPart",
    method: "post",
    data: query,
  });
}
// ä¿®æ”¹äº§å“é›¶ä»¶
export function updateProductPart(query) {
  return request({
    url: '/productPart/updateProductPart',
    method: 'post',
    data: query
  })
    url: "/productPart/updateProductPart",
    method: "post",
    data: query,
  });
}
// åˆ é™¤äº§å“é›¶ä»¶
export function deleteProductPart(query) {
  return request({
    url: '/productPart/deleteProductPart',
    method: 'post',
    params: query
  })
    url: "/productPart/deleteProductPart",
    method: "post",
    params: query,
  });
}
src/api/structural/workshop.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
import request from "@/utils/request";
// æŸ¥è¯¢è½¦é—´åç§°
export function selectWorkShop(query) {
  return request({
    url: "/workShop/selectWorkShop",
    method: "get",
    params: query,
  });
}
// åˆ é™¤æ£€éªŒå•模板
export function delWorkShop(query) {
  return request({
    url: "/workShop/delWorkShop",
    method: "delete",
    params: query,
  });
}
// æ·»åŠ è½¦é—´åç§°æ•°æ®
export function addOrUpdateWorkShop(query) {
  return request({
    url: "/workShop/addOrUpdateWorkShop",
    method: "post",
    data: query,
  });
}
// æŸ¥è¯¢è½¦é—´æ–‡ä»¶
export function fileList(query) {
  return request({
    url: "/workShop/fileList",
    method: "get",
    params: query,
  });
}
// åˆ é™¤æ–‡ä»¶
export function delFile(query) {
  return request({
    url: "/workShop/delFile",
    method: "delete",
    params: query,
  });
}
src/components/Table/lims-table.vue
@@ -13,7 +13,8 @@
        :filter-method="item.filterHandler" :filter-multiple="item.filterMultiple" :filtered-value="item.filteredValue"
        :filters="item.filters" :fixed="item.fixed" :label="item.label" :min-width="item.minWidth" :prop="item.prop"
        :show-overflow-tooltip="item.dataType === 'action' || item.dataType === 'slot' ? false : true"
        :sortable="item.sortable ? true : false" :type="item.type" :width="item.dataType === 'action' ? getWidth(item.operation) : item.width" align="center">
        :sortable="item.sortable ? true : false" :type="item.type"
        :width="item.dataType == 'action' ? btnWidth : item.width" align="center">
        <!-- <div class="123" v-if="item.type == ''"> -->
        <template v-if="item.hasOwnProperty('colunmTemplate')" :slot="item.colunmTemplate" slot-scope="scope">
          <slot v-if="item.theadSlot" :index="index" :name="item.theadSlot" :row="scope.row" />
@@ -62,7 +63,7 @@
          </div>
          <!-- æŒ‰é’® -->
          <div v-else-if="item.dataType == 'action'">
          <div v-else-if="item.dataType == 'action'" :style="`width:${getWidth(item.operation, scope.row)}`">
            <template v-for="(o, key) in item.operation">
              <el-button v-show="o.type != 'upload'" size="mini" v-if="o.showHide ? o.showHide(scope.row) : true"
                :disabled="o.disabled ? o.disabled(scope.row) : false" :icon="iconFn(o)" :plain="o.plain"
@@ -257,6 +258,7 @@
  data() {
    return {
      spanList: [],
      btnWidth: '120px',
    };
  },
  mounted() {
@@ -269,13 +271,14 @@
    getWidth(row) {
      let count = 0;
      row.forEach((a) => {
        if (a.showHide!==undefined && a.showHide()) {
        if (a.showHide !== undefined && a.showHide()) {
          count += a.name.length;
        } else if(!a.showHide) {
        } else if (!a.showHide) {
          count += a.name.length;
        }
      });
      return count * 15 + 70 + "px";
      this.btnWidth = count * 15 + 80 + "px";
      return count * 15 + 80 + "px";
    },
    iconFn(row) {
      if (row.name === "编辑" || row.name === "修改") {
src/main.js
@@ -66,7 +66,7 @@
Vue.prototype.HaveJson = (val) => {
  return JSON.parse(JSON.stringify(val));
};
Vue.prototype.javaApi = "http://114.132.189.42:7012";
Vue.prototype.javaApi = "http://10.21.10.74:8089";
Vue.prototype.checkPermi = checkPermi;
Vue.prototype.uploadHeader = {
  Authorization: "Bearer " + getToken(),
src/views/business/reportPreparation/index.vue
@@ -184,8 +184,8 @@
          <el-button size="small" style="height: 38px" type="primary">附件上传</el-button>
        </el-upload>
      </div>
      <lims-table :tableData="tableDataFile" :column="columnFile" height="500px"
        key="tableDataFile" :tableLoading="tableLoadingFile"></lims-table>
      <lims-table :tableData="tableDataFile" :column="columnFile" height="500px" key="tableDataFile"
        :tableLoading="tableLoadingFile"></lims-table>
    </el-dialog>
  </div>
</template>
@@ -205,7 +205,7 @@
import { mapGetters } from "vuex";
import { selectUserCondition } from "@/api/business/inspectionTask";
import limsTable from "@/components/Table/lims-table.vue";
import {delFile, downFile, getFileList} from "@/api/business/rawMaterialOrder";
import { delFile, downFile, getFileList } from "@/api/business/rawMaterialOrder";
export default {
  name: 'ReportPreparation',
  components: { limsTable, onlyoffice },
src/views/login.vue
@@ -38,7 +38,7 @@
            <router-link class="link-type" :to="'/register'">立即注册</router-link>
          </div>
        </el-form-item>
        <el-button v-if="true" type="primary" plain @click="goLogin">集团集成登录</el-button>
        <el-button v-if="false" type="primary" plain @click="goLogin">集团集成登录</el-button>
      </el-form>
    </div>
    <!--  åº•部  -->
src/views/performance/manHour/workTimeConfig.vue
@@ -277,8 +277,8 @@
      })
        .then(() => {
          deleteAuxiliaryWorkingHours({ id: row.id }).then((res) => {
            console.log('res',res)
            if (res.code == 200){
            console.log('res', res)
            if (res.code == 200) {
              this.$message.success("删除成功");
              this.refresh();
            }
src/views/structural/capabilityAndLaboratory/capability/index.vue
@@ -9,11 +9,9 @@
          </el-radio-group>
        </el-col>
        <el-col :span="12" style="text-align: right;">
          <el-upload v-if="radio === 0" ref='upload1'
                     style="display: inline;margin-right: 8px"
                     :action="uploadAction1"
                     :before-upload="beforeUpload1" :headers="token" :on-error="onError1"
                     :on-success="handleSuccessUp1" :show-file-list="false" accept='.doc,.docx,.xls,.xlsx'>
          <el-upload v-if="radio === 0" ref='upload1' style="display: inline;margin-right: 8px" :action="uploadAction1"
            :before-upload="beforeUpload1" :headers="token" :on-error="onError1" :on-success="handleSuccessUp1"
            :show-file-list="false" accept='.doc,.docx,.xls,.xlsx'>
            <el-button size="small" type="primary">导入</el-button>
          </el-upload>
          <el-button size="small" type="primary" v-if="radio === 1" @click="uploadDia = true">导入</el-button>
@@ -23,19 +21,19 @@
    </div>
    <div>
      <el-form :model="itemParameterForm" ref="itemParameterForm" size="small" :inline="true">
        <el-form-item label="检验项" prop="inspectionItem" v-if="radio===0">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="itemParameterForm.inspectionItem" @keyup.enter.native="refreshTable()">
        <el-form-item label="检验项" prop="inspectionItem" v-if="radio === 0">
          <el-input size="small" placeholder="请输入" clearable v-model="itemParameterForm.inspectionItem"
            @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item label="检验子项" prop="inspectionItemSubclass" v-if="radio===0">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="itemParameterForm.inspectionItemSubclass" @keyup.enter.native="refreshTable()">
        <el-form-item label="检验子项" prop="inspectionItemSubclass" v-if="radio === 0">
          <el-input size="small" placeholder="请输入" clearable v-model="itemParameterForm.inspectionItemSubclass"
            @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item label="检验对象" prop="sample">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="itemParameterForm.sample" @keyup.enter.native="refreshTable()">
          <el-input size="small" placeholder="请输入" clearable v-model="itemParameterForm.sample"
            @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item>
@@ -43,24 +41,22 @@
          <el-button icon="el-icon-refresh" size="mini" @click="refresh">重 ç½®</el-button>
        </el-form-item>
      </el-form>
<!--      æ£€éªŒé¡¹ç›®å‚数表格-->
      <div class="table" v-if="radio===0">
        <lims-table :tableData="tableData" :column="column" key="tableData"
                    @pagination="pagination" :height="'calc(100vh - 290px)'"
                    :page="page" :tableLoading="tableLoading"></lims-table>
      <!--      æ£€éªŒé¡¹ç›®å‚数表格-->
      <div class="table" v-if="radio === 0">
        <lims-table :tableData="tableData" :column="column" key="tableData" @pagination="pagination"
          :height="'calc(100vh - 290px)'" :page="page" :tableLoading="tableLoading"></lims-table>
      </div>
<!--      æ£€éªŒå¯¹è±¡è¡¨æ ¼-->
      <div class="table" v-if="radio===1">
      <!--      æ£€éªŒå¯¹è±¡è¡¨æ ¼-->
      <div class="table" v-if="radio === 1">
        <lims-table :tableData="testObjectTableData" :column="testObjectColumn" key="testObjectTableData"
                    @pagination="pagination" :height="'calc(100vh - 290px)'"
                    :page="testObjectPage" :tableLoading="tableLoading"></lims-table>
          @pagination="pagination" :height="'calc(100vh - 290px)'" :page="testObjectPage"
          :tableLoading="tableLoading"></lims-table>
      </div>
    </div>
    <!--产品维护弹框-->
    <el-dialog title="产品维护" :visible.sync="diaProduct" width="900px">
      <lims-table :tableData="productData" :column="productColumn" height="460"
                  @pagination="productPagination"
                  :page="productPage" :tableLoading="productableLoading"></lims-table>
      <lims-table :tableData="productData" :column="productColumn" height="460" @pagination="productPagination"
        :page="productPage" :tableLoading="productableLoading"></lims-table>
      <span slot="footer" class="dialog-footer">
        <el-button @click="diaProduct = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="editProduct('add')" :loading="productLoad">新 å¢ž</el-button>
@@ -68,7 +64,8 @@
    </el-dialog>
    <!--产品维护编辑-->
    <el-dialog title="操作产品维护" :visible.sync="productEditDia" width="400px">
      <el-form :model="productEditForm" ref="productEditForm" :rules="productRules" label-position="right" label-width="100px">
      <el-form :model="productEditForm" ref="productEditForm" :rules="productRules" label-position="right"
        label-width="100px">
        <el-form-item label="产品名称" prop="name">
          <el-input size="small" placeholder="请输入" clearable v-model="productEditForm.name"></el-input>
        </el-form-item>
@@ -84,11 +81,9 @@
    </el-dialog>
    <el-dialog :visible.sync="uploadDia" title="数据导入" width="500px">
      <div style="margin: 0 auto;">
        <el-upload ref="upload" :action="uploadAction"
                   :auto-upload="false" :file-list="fileList"
                   :headers="token" :limit="1"
                   :on-change="beforeUpload" :on-error="onError" :on-success="onSuccess" accept=".xlsx" drag
                   name="file">
        <el-upload ref="upload" :action="uploadAction" :auto-upload="false" :file-list="fileList" :headers="token"
          :limit="1" :on-change="beforeUpload" :on-error="onError" :on-success="onSuccess" accept=".xlsx" drag
          name="file">
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        </el-upload>
@@ -101,14 +96,26 @@
    <!--检验项目参数-编辑弹框-->
    <EditForm ref="editForm" @refreshList="refreshList1"></EditForm>
    <testObjectEditForm ref="testObjectEditForm" @refreshList="refreshList"></testObjectEditForm>
    <BindPartDialog v-if="bindPartDialog" :bindPartDialog="bindPartDialog"
                    :currentRow="currentRow"
                    :type="type"
                    @closeBindPartDialog="closeBindPartDialog"></BindPartDialog>
    <BindSupplierDensityDialog v-if="bindSupplierDensityDialog"
                               :bindSupplierDensityDialog="bindSupplierDensityDialog"
                               :currentRow="currentSupplierDensityRow"
                               @closeBindPartDialog="closeBindSupplierDensityDialog"></BindSupplierDensityDialog>
    <BindPartDialog v-if="bindPartDialog" :bindPartDialog="bindPartDialog" :currentRow="currentRow" :type="type"
      @closeBindPartDialog="closeBindPartDialog"></BindPartDialog>
    <BindSupplierDensityDialog v-if="bindSupplierDensityDialog" :bindSupplierDensityDialog="bindSupplierDensityDialog"
      :currentRow="currentSupplierDensityRow" @closeBindPartDialog="closeBindSupplierDensityDialog">
    </BindSupplierDensityDialog>
    <el-dialog title="车间绑定" :visible.sync="workshopVisible" width="400px">
      <el-form :model="workshopForm" ref="workshopForm" :rules="workshopRules" label-position="right"
        label-width="100px">
        <el-form-item label="车间名称" prop="workShopId">
          <el-select v-model="workshopForm.workShopId" placeholder="请选择" size="small">
            <el-option v-for="item in workshopList" :key="item.id" :label="item.name" :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="workshopVisible = false">取 æ¶ˆ</el-button>
        <el-button :loading="uploading" type="primary" @click="submitWorkshop">ç¡® è®¤</el-button>
      </span>
    </el-dialog>
  </div>
</template>
@@ -118,17 +125,17 @@
import {
  addProduct,
  delItemParameter, delProduct, delTestObject, selectItemParameterList, selectProductListByObjectId,
  selectTestObjectList, upProduct,
  selectTestObjectList, upProduct, updateWorkShop
} from "@/api/structural/capability";
import limsTable from "@/components/Table/lims-table.vue";
import EditForm from "@/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue";
import testObjectEditForm from "@/views/structural/capabilityAndLaboratory/capabilityComponents/testObjectEditForm.vue";
import {getToken} from "@/utils/auth";
import { getToken } from "@/utils/auth";
import { obtainItemParameterList } from '@/api/structural/laboratoryScope'
import { selectWorkShop } from "@/api/structural/workshop.js"
export default {
  name: 'Capability',
  components: {limsTable, EditForm, testObjectEditForm, BindPartDialog, BindSupplierDensityDialog},
  components: { limsTable, EditForm, testObjectEditForm, BindPartDialog, BindSupplierDensityDialog },
  data() {
    return {
      uploadAction: process.env.VUE_APP_BASE_API + '/capacityScope/importExcel',
@@ -136,24 +143,24 @@
      tableData: [],
      tableLoading: false,
      column: [
        {label: '检验项', prop: 'inspectionItem'},
        {label: '检验项EN', prop: 'inspectionItemEn'},
        {label: '检验子项', prop: 'inspectionItemSubclass'},
        {label: '检验子项EN', prop: 'inspectionItemSubclassEn'},
        {label: '检验项分类', prop: 'inspectionItemClass'},
        {label: '检验项分类EN', prop: 'inspectionItemClassEn'},
        {label: '检验对象', prop: 'sample'},
        {label: '单价(元)', prop: 'price'},
        {label: '试验室', prop: 'sonLaboratory'},
        {label: '要求描述', prop: 'askTell'},
        {label: '要求值', prop: 'ask'},
        {label: '计量单位', prop: 'unit'},
        {label: '工时(H)', prop: 'manHour'},
        {label: '预计时间(H)', prop: 'manDay'},
        {label: '工时分组', prop: 'manHourGroup'},
        {label: '创建时间', prop: 'createTime'},
        {label: '修改时间', prop: 'updateTime'},
        {label: '条件', prop: 'radiusList'},
        { label: '检验项', prop: 'inspectionItem' },
        { label: '检验项EN', prop: 'inspectionItemEn' },
        { label: '检验子项', prop: 'inspectionItemSubclass' },
        { label: '检验子项EN', prop: 'inspectionItemSubclassEn' },
        { label: '检验项分类', prop: 'inspectionItemClass' },
        { label: '检验项分类EN', prop: 'inspectionItemClassEn' },
        { label: '检验对象', prop: 'sample' },
        { label: '单价(元)', prop: 'price' },
        { label: '试验室', prop: 'sonLaboratory' },
        { label: '要求描述', prop: 'askTell' },
        { label: '要求值', prop: 'ask' },
        { label: '计量单位', prop: 'unit' },
        { label: '工时(H)', prop: 'manHour' },
        { label: '预计时间(H)', prop: 'manDay' },
        { label: '工时分组', prop: 'manHourGroup' },
        { label: '创建时间', prop: 'createTime' },
        { label: '修改时间', prop: 'updateTime' },
        { label: '条件', prop: 'radiusList' },
        {
          dataType: 'action',
          fixed: 'right',
@@ -178,9 +185,9 @@
        }
      ],
      page: {
        total:0,
        size:10,
        current:1
        total: 0,
        size: 10,
        current: 1
      },
      testObjectTableData: [],
      testObjectColumn: [
@@ -191,9 +198,9 @@
          minWidth: '130',
          formatData: (params) => {
            let index = this.laboratoryList.findIndex(item => item.value == params)
            if(index > -1) {
            if (index > -1) {
              return this.laboratoryList[index].label
            }else {
            } else {
              return null
            }
            // if (params == 1) {
@@ -222,34 +229,24 @@
            }
          }
        },
        {label: '检验对象', prop: 'specimenName'},
        {label: '检验对象EN', prop: 'specimenNameEn'},
        {label: '产品', prop: 'product'},
        {label: '对象代号', prop: 'code'},
        {label: '对象类型', prop: 'objectType',
        { label: '检验对象', prop: 'specimenName' },
        { label: '检验对象EN', prop: 'specimenNameEn' },
        { label: '产品', prop: 'product' },
        { label: '对象代号', prop: 'code' },
        {
          label: '对象类型', prop: 'objectType',
          dataType: 'tag',
          formatData: (params) => {
            if (params == 1) {
              return '原材料'
            } else if (params == 2) {
              return '成品'
            } else {
              return '辅材'
            let obj = this.productClassification.find(m => params == m.value)
            if (obj) {
              return obj.label
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
            } else if (params == 2) {
              return 'info'
            } else {
              return 'warning'
            }
          }},
        {label: '创建人', prop: 'createUserName'},
        {label: '更新人', prop: 'updateUserName'},
        {label: '创建时间', prop: 'createTime'},
        {label: '更新时间', prop: 'updateTime'},
        },
        { label: '创建人', prop: 'createUserName' },
        { label: '更新人', prop: 'updateUserName' },
        { label: '创建时间', prop: 'createTime' },
        { label: '更新时间', prop: 'updateTime' },
        {
          dataType: 'action',
          fixed: 'right',
@@ -277,20 +274,20 @@
                this.upProduct(row);
              },
            },
            {
              name: '零件绑定',
              type: 'text',
              clickFun: (row) => {
                this.bindPartFirst(row);
              },
            },
            // {
            //   name: '零件绑定',
            //   type: 'text',
            //   clickFun: (row) => {
            //     this.bindPartFirst(row);
            //   },
            // },
          ]
        }
      ],
      testObjectPage: {
        total:0,
        size:10,
        current:0
        total: 0,
        size: 10,
        current: 0
      },
      addOrUpdate: '',
      tree: null,
@@ -304,8 +301,9 @@
      productLoad: false,
      diaProduct: false,
      productColumn: [
        {label: '产品名称', prop: 'name'},
        {label: '产品名称EN', prop: 'nameEn'},
        { label: '产品名称', prop: 'name' },
        { label: '产品名称EN', prop: 'nameEn' },
        { label: '车间名称', prop: 'workShopName' },
        {
          dataType: 'action',
          label: '操作',
@@ -332,6 +330,20 @@
              },
            },
            {
              name: '车间绑定',
              type: 'text',
              clickFun: (row) => {
                this.bindWokshop(row);
              },
              showHide: (row) => {
                if (this.currentObj.objectType != '原材料') {
                  return false
                } else {
                  return true
                }
              }
            },
            {
              name: '厂家密度绑定',
              type: 'text',
              clickFun: (row) => {
@@ -343,9 +355,9 @@
      ],
      productData: [],
      productPage: {
        total:0,
        size:10,
        current:1,
        total: 0,
        size: 10,
        current: 1,
        layout: 'total, prev, pager, next'
      },
      productableLoading: false,
@@ -364,19 +376,32 @@
      },
      uploadDia: false,
      fileList: [],
      token: {Authorization: "Bearer " + getToken()},
      token: { Authorization: "Bearer " + getToken() },
      uploading: false,
      currentRow: {}, // é€‰æ‹©é›¶ä»¶ç»‘定本条数据的信息
      currentSupplierDensityRow: {}, // é€‰æ‹©é›¶ä»¶ç»‘定本条数据的信息
      bindSupplierDensityDialog: false,
      bindPartDialog: false,
      type: null,  // é›¶ä»¶ç»‘定的类型--0:检验对象,1:产品维护,
      laboratoryList:[]
      laboratoryList: [],
      productClassification: [],//产品类型
      currentObj: {},//当前对象
      currentProduct: {},//当前产品
      workshopVisible: false,
      workshopForm: {},
      workshopRules: {
        workShopId: [{ required: true, message: '请选择车间', trigger: 'change' }]
      },
      workshopList: [],//车间列表
    }
  },
  created() {
    this.getItemParameterList()
    this.refreshTable()
    this.getDicts("product_classification").then((response) => {
      this.productClassification = this.dictToValue(response.data);
    });
    this.selectWorkShop()
  },
  computed: {
    title() {
@@ -384,6 +409,11 @@
    }
  },
  methods: {
    selectWorkShop() {
      selectWorkShop({ size: -1, current: -1 }).then(res => {
        this.workshopList = res.data.records
      })
    },
    submitUpload() {
      if (this.$refs.upload.uploadFiles.length === 0) {
        this.$message.error('未选择文件')
@@ -432,7 +462,7 @@
        return true;
      }
    },
    handleSuccessUp1 (response, file, fileList) {
    handleSuccessUp1(response, file, fileList) {
      this.$refs.upload1.clearFiles()
      if (response.code !== 200) {
        this.$message.error(response.msg)
@@ -441,16 +471,16 @@
      this.$message.success('上传成功')
      this.refreshTable()
    },
    refreshList () {
    refreshList() {
      this.refreshTable()
    },
    refreshList1 () {
    refreshList1() {
      this.refreshTable()
    },
    refreshTable() {
      this.tableLoading = true
      if (this.radio === 0) {
        selectItemParameterList({...this.page, ...this.itemParameterForm}).then(res => {
        selectItemParameterList({ ...this.page, ...this.itemParameterForm }).then(res => {
          this.tableLoading = false
          if (res.code === 200) {
            this.tableData = res.data.records
@@ -460,7 +490,7 @@
          this.tableLoading = false
        })
      } else {
        selectTestObjectList({...this.testObjectPage, ...this.itemParameterForm}).then(res => {
        selectTestObjectList({ ...this.testObjectPage, ...this.itemParameterForm }).then(res => {
          this.tableLoading = false
          if (res.code === 200) {
            this.testObjectTableData = res.data.records
@@ -476,7 +506,7 @@
      this.page.current = 1
      this.refreshTable()
    },
    pagination (page) {
    pagination(page) {
      this.page.size = page.limit
      this.refreshTable()
    },
@@ -489,17 +519,17 @@
      }
    },
    // æ£€éªŒé¡¹ç›®å‚æ•°-打开修改弹框
    editForm (row) {
    editForm(row) {
      this.$refs.editForm.openDia('edit', row)
    },
    // æ£€éªŒé¡¹ç›®å‚æ•°-删除
    delete (row) {
    delete(row) {
      this.$confirm('此操作将删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delItemParameter({id:row.id}).then(res => {
        delItemParameter({ id: row.id }).then(res => {
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.refreshTable();
@@ -513,17 +543,17 @@
      })
    },
    // æ£€éªŒå¯¹è±¡-打开修改弹框
    editTestObjectForm (row) {
    editTestObjectForm(row) {
      this.$refs.testObjectEditForm.openDia('edit', row)
    },
    // æ£€éªŒé¡¹ç›®å‚æ•°-删除
    deleteTest (row) {
    deleteTest(row) {
      this.$confirm('此操作将删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delTestObject({id:row.id}).then(res => {
        delTestObject({ id: row.id }).then(res => {
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.refreshTable();
@@ -538,18 +568,28 @@
    },
    // äº§å“ç»´æŠ¤
    upProduct(row) {
      this.currentObj = row;
      if (this.currentObj.objectType == '原材料') {
        if (this.productColumn.length < 4) {
          this.productColumn.splice(2, 0, { label: '车间名称', prop: 'workShopName' })
        }
      } else {
        if (this.productColumn.length == 4) {
          this.productColumn.splice(2, 1)
        }
      }
      this.diaProduct = true
      this.objectId = row.id
      this.productPage.current = 1
      this.getProductList(row)
    },
    // æŸ¥è¯¢äº§å“ç»´æŠ¤åˆ—表数据
    getProductList () {
    getProductList() {
      const params = {
        objectId: this.objectId,
      }
      this.productableLoading = true
      selectProductListByObjectId({...params, ...this.productPage}).then(res => {
      selectProductListByObjectId({ ...params, ...this.productPage }).then(res => {
        this.productableLoading = false
        this.productData = res.data.records
        this.productPage.total = res.data.total
@@ -563,7 +603,7 @@
      this.getProductList()
    },
    // äº§å“ç»´æŠ¤-新增-编辑
    editProduct (type, row) {
    editProduct(type, row) {
      this.productEditDia = true
      this.operationType = type
      if (type === 'edit') {
@@ -571,7 +611,7 @@
      }
    },
    // æäº¤äº§å“ç»´æŠ¤ä¿®æ”¹
    submitProduct () {
    submitProduct() {
      this.$refs['productEditForm'].validate((valid) => {
        if (valid) {
          this.uploading = true
@@ -607,13 +647,13 @@
      this.productEditDia = false
    },
    // äº§å“ç»´æŠ¤-删除
    deleteProduct (row) {
    deleteProduct(row) {
      this.$confirm('此操作将删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        delProduct({id:row.id}).then(res => {
        delProduct({ id: row.id }).then(res => {
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.getProductList();
@@ -627,34 +667,38 @@
      })
    },
    // é›¶ä»¶ç»‘定
    bindPartFirst (row) {
    bindPartFirst(row) {
      this.bindPart(row, 0)
    },
    bindPartSecond (row) {
    bindPartSecond(row) {
      this.bindPart(row, 1)
    },
    bindWokshop(row) {
      this.currentProduct = row;
      this.workshopVisible = true
    },
    // åŽ‚å®¶å¯†åº¦ç»‘å®š
    bindSupplierDensitySecond (row) {
    bindSupplierDensitySecond(row) {
      this.bindSupplierDensity(row)
    },
    // æ‰“开厂家密度绑定弹框
    bindSupplierDensity (row) {
    bindSupplierDensity(row) {
      this.currentSupplierDensityRow = row
      this.bindSupplierDensityDialog = true
    },
    // æ‰“开零件绑定弹框
    bindPart (row, index) {
    bindPart(row, index) {
      this.type = index
      this.currentRow = row
      this.bindPartDialog = true
    },
    closeBindPartDialog () {
    closeBindPartDialog() {
      this.bindPartDialog = false
    },
    closeBindSupplierDensityDialog () {
    closeBindSupplierDensityDialog() {
      this.bindSupplierDensityDialog = false
    },
    getItemParameterList(){
    getItemParameterList() {
      obtainItemParameterList().then(res => {
        let data = []
        res.data.forEach(a => {
@@ -665,6 +709,28 @@
        })
        this.laboratoryList = data
      })
    },
    // ç»‘定车间
    submitWorkshop() {
      this.$refs['workshopForm'].validate((valid) => {
        if (valid) {
          this.uploading = true
          updateWorkShop({
            id: this.currentProduct.id,
            workShopId: this.workshopForm.workShopId,
            name: this.workshopList.find(m => m.id == this.workshopForm.workShopId).name
          }).then(res => {
            this.uploading = false
            if (res.code === 200) {
              this.$message.success('新增成功')
              this.getProductList();
              this.workshopVisible = false
            }
          }).catch(err => {
            this.uploading = false
          })
        }
      })
    }
  }
}
src/views/structural/capabilityAndLaboratory/capabilityComponents/testObjectEditForm.vue
@@ -1,10 +1,12 @@
<template>
  <div>
    <el-dialog :title="operationType === 'add' ? '新增' : '编辑'" :visible.sync="editFormDia" width="500px" @close="closeDia">
    <el-dialog :title="operationType === 'add' ? '新增' : '编辑'" :visible.sync="editFormDia" width="500px"
      @close="closeDia">
      <el-form ref="editForm" :model="editForm" :rules="editFormRules" label-width="120px" label-position="right">
        <el-form-item label="场所:" prop="laboratoryId">
          <el-select v-model="editForm.laboratoryId" clearable placeholder="请选择" size="small" style="width: 100%">
            <el-option v-for="item in laboratoryList" :key="item.value" :label="item.label" :value="item.value"></el-option>
            <el-option v-for="item in laboratoryList" :key="item.value" :label="item.label"
              :value="item.value"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="检验对象:" prop="specimenName">
@@ -18,7 +20,8 @@
        </el-form-item>
        <el-form-item label="对象类型:" prop="objectType">
          <el-select v-model="editForm.objectType" clearable placeholder="请选择" size="small" style="width: 100%">
            <el-option v-for="item in dict.type.object_type" :key="item.value" :label="item.label" :value="item.value"></el-option>
            <el-option v-for="item in dict.type.product_classification" :key="item.value" :label="item.label"
              :value="item.value"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
@@ -32,13 +35,13 @@
<script>
import {obtainItemParameterList} from "@/api/structural/laboratoryScope";
import {addTestObject, upTestObject} from "@/api/structural/capability";
import { obtainItemParameterList } from "@/api/structural/laboratoryScope";
import { addTestObject, upTestObject } from "@/api/structural/capability";
export default {
  name: "EditForm",
  // import å¼•入的组件需要注入到对象中才能使用
  dicts: ['object_type'],
  dicts: ['product_classification'],
  components: {},
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
@@ -70,22 +73,22 @@
  },
  // æ–¹æ³•集合
  methods: {
    openDia (type, row) {
    openDia(type, row) {
      this.operationType = type
      this.obtainItemParameterList()
      this.editFormDia = true
      if (type === 'add') {
        this.resetForm("editForm");
      } else {
        this.editForm = {...row}
        this.editForm = { ...row }
      }
    },
    // æäº¤ç¼–辑
    handleEdit () {
    handleEdit() {
      this.$refs.editForm.validate(valid => {
        if (valid) {
          this.editLoad = true
          if(this.editForm.id){
          if (this.editForm.id) {
            // ä¿®æ”¹
            upTestObject(this.editForm).then(res => {
              this.editLoad = false
@@ -98,7 +101,7 @@
            }).catch(e => {
              this.editLoad = false
            })
          }else{
          } else {
            // æ–°å¢ž
            addTestObject(this.editForm).then(res => {
              this.editLoad = false
@@ -116,7 +119,7 @@
      })
    },
    // å…³é—­å¼¹æ¡†
    closeDia () {
    closeDia() {
      this.editFormDia = false
      this.resetForm("editForm");
    },
@@ -137,6 +140,4 @@
}
</script>
<style scoped>
</style>
<style scoped></style>
src/views/structural/capabilityAndLaboratory/workshop/components/fileList.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,161 @@
<template>
  <div>
    <div style="margin-bottom: 10px">
      <el-upload ref='upload' :action="fileAction" :auto-upload="true" :before-upload="fileBeforeUpload"
        :data="{ id: currentId }" :headers="uploadHeader" :on-error="onError" :on-success="handleSuccessUp"
        :show-file-list="false" accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
        style="width: 80px !important;">
        <el-button size="small" style="height: 38px" type="primary">附件上传</el-button>
      </el-upload>
    </div>
    <lims-table :tableData="tableDataFile" :column="columnFile" height="500px" key="tableDataFile"
      :tableLoading="tableLoadingFile"></lims-table>
  </div>
</template>
<script>
import limsTable from "@/components/Table/lims-table.vue";
import { fileList, delFile } from "@/api/structural/workshop.js"
export default {
  components: {
    limsTable,
  },
  props: ['currentId'],
  computed: {
    fileAction() {
      return this.javaApi + '/workShop/uploadFile'
    },
  },
  data() {
    return {
      columnFile: [
        {
          dataType: 'tag',
          label: '类型',
          prop: 'type',
          formatData: (params) => {
            if (params == 1) {
              return '图片'
            } else if (params == 2) {
              return '文件'
            } else {
              return ''
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
            } else if (params == 2) {
              return 'warning'
            } else {
              return ''
            }
          }
        },
        { label: '附件名称', prop: 'fileName' },
        { label: '上传人', prop: 'name' },
        { label: '上传时间', prop: 'createTime' },
        {
          dataType: 'action',
          fixed: 'right',
          label: '操作',
          width: '170px',
          operation: [
            {
              name: '下载',
              type: 'text',
              clickFun: (row) => {
                this.handleDown(row);
              }
            },
            {
              name: '删除',
              type: 'text',
              clickFun: (row) => {
                this.delete(row);
              }
            },
          ]
        }
      ],
      tableDataFile: [],
      tableLoadingFile: false,
    }
  },
  mounted() {
    this.getFileList()
  },
  methods: {
    // æŸ¥è¯¢é™„件查看列表回调
    getFileList() {
      this.tableLoadingFile = true
      fileList({ id: this.currentId }).then(res => {
        this.tableLoadingFile = false
        if (res.code === 200) {
          this.tableDataFile = res.data
        }
      }).catch(err => {
        this.tableLoadingFile = false
      })
    },
    fileBeforeUpload(file) {
      let flag = true
      console.log('file----', file)
      if (file.size > 1024 * 1024 * 10) {
        this.$message.error('上传文件不超过10M');
        this.$refs.upload.clearFiles()
        flag = false
      }
      if (!flag) {
        return Promise.reject(flag); //正确的终止
      }
    },
    handleSuccessUp(response,) {
      this.upLoading = false;
      if (response.code == 200) {
        this.$message.success('上传成功');
        this.getFileList()
      }
    },
    // ä¸‹è½½é™„件的文件
    handleDown(row) {
      downFile({
        id: row.id,
      }).then(res => {
        this.$download.saveAs(res.data.fileUrl, row.fileName);
      }).catch(error => {
      })
    },
    // åˆ é™¤é™„件文件
    delete(row) {
      this.$confirm('此操作将删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.tableLoadingFile = true
        delFile({ id: row.id }).then(res => {
          this.tableLoadingFile = false
          this.$message.success('删除成功')
          this.getFileList()
        }).catch(err => {
          this.tableLoadingFile = false
          console.log('err---', err);
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      })
    },
    onError(err, file, fileList, type) {
      this.$message.error('上传失败')
      this.$refs.upload.clearFiles()
    },
  }
}
</script>
<style scoped></style>
src/views/structural/capabilityAndLaboratory/workshop/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,239 @@
<template>
  <div class="workshop">
    <div class="search">
      <div class="search_thing">
        <div class="search_label">名称:</div>
        <div class="search_input">
          <el-input size="small" placeholder="请输入" clearable v-model="queryParams.name"
            @keyup.enter.native="refreshTable()"></el-input>
        </div>
      </div>
      <div class="search_thing" style="padding-left: 30px">
        <el-button size="small" @click="refresh()">重 ç½®</el-button>
        <el-button size="small" type="primary" @click="refreshTable()">查 è¯¢</el-button>
      </div>
      <el-button size="small" type="primary" style="position: absolute; right: 50px" @click="openAdd('新增')">新
        å¢ž</el-button>
    </div>
    <div class="table">
      <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 260px)'"
        :page="page" @pagination="pagination"></lims-table>
    </div>
    <!-- æ–°å¢ž/编辑 -->
    <el-dialog :title="title" :visible.sync="addDia" width="500px">
      <el-form :model="addForm" ref="addForm" :rules="addRules" label-position="right" label-width="120px">
        <el-form-item label="车间名称" prop="name">
          <el-input size="small" placeholder="请输入" clearable v-model="addForm.name"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addDia = false">取 æ¶ˆ</el-button>
        <el-button :loading="uploading" type="primary" @click="submitProduct('addForm')">ç¡® è®¤</el-button>
      </span>
    </el-dialog>
    <el-dialog :visible.sync="filesDialogVisible" title="附件查看" width="80%">
      <fileList :currentId="id" />
    </el-dialog>
  </div>
</template>
<script>
import limsTable from "@/components/Table/lims-table.vue";
import fileList from "./components/fileList.vue"
import { selectWorkShop, delWorkShop, addOrUpdateWorkShop } from "@/api/structural/workshop.js"
export default {
  components: {
    limsTable,
    fileList,
  },
  data() {
    return {
      queryParams: {},
      tableData: [],
      column: [
        { label: "车间", prop: "name" },
        {
          dataType: "action",
          fixed: "right",
          label: "操作",
          // handleDelete
          operation: [
            {
              name: "附件",
              type: "text",
              clickFun: (row) => {
                this.handleLookFile(row);
              },
            },
            {
              name: "编辑",
              type: "text",
              clickFun: (row) => {
                this.openAdd('编辑', row);
              },
            },
            {
              name: "删除",
              type: "text",
              clickFun: (row) => {
                this.handleDelete(row);
              },
            },
          ],
        },
      ],
      page: {
        total: 0,
        size: 10,
        current: 0,
      },
      tableLoading: false,
      filesDialogVisible: false,
      id: null,
      addDia: false,
      addRules: {
        name: [{ required: true, message: "请输入车间名称", trigger: "blur" }],
      },
      title: '新增',
      addForm: {},
      uploading: false,
    }
  },
  mounted() {
    this.getList()
  },
  methods: {
    // æŸ¥çœ‹é™„ä»¶
    handleLookFile(row) {
      this.filesDialogVisible = true;
      this.id = row.id
    },
    // åˆ—表分页
    getList() {
      this.tableLoading = true;
      let param = { ...this.queryParams, ...this.page };
      delete param.total;
      selectWorkShop({ ...param })
        .then((res) => {
          this.tableLoading = false;
          if (res.code === 200) {
            this.tableData = res.data.records;
            this.page.total = res.data.total;
          }
        })
        .catch((err) => {
          this.tableLoading = false;
        });
    },
    pagination({ page, limit }) {
      this.page.current = page;
      this.page.size = limit;
      this.getList();
    },
    refresh() {
      this.queryParams = {};
      this.page.current = 1;
      this.getList();
    },
    refreshTable() {
      this.page.current = 1;
      this.getList();
    },
    // æ–°å¢ž/编辑车间
    openAdd(title, row) {
      this.title = title;
      if (row) {
        this.addForm = row;
      } else {
        this.addForm = {};
      }
      this.addDia = true;
    },
    submitProduct(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          this.uploading = true;
          if (this.title == "新增") {
            addOrUpdateWorkShop(this.addForm)
              .then((res) => {
                this.uploading = false;
                if (res.code != 200) {
                  return;
                }
                this.$message.success("提交成功");
                this.refresh();
                this.addDia = false;
              })
              .catch((err) => {
                this.uploading = false;
              });
          } else {
            addOrUpdateWorkShop(this.addForm)
              .then((res) => {
                this.uploading = false;
                if (res.code != 200) {
                  return;
                }
                this.$message.success("提交成功");
                this.refresh();
                this.addDia = false;
              })
              .catch((err) => {
                this.uploading = false;
              });
          }
        } else {
          return false;
        }
      });
    },
    handleDelete(row) {
      this.$confirm("是否删除该条数据?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          delWorkShop({ id: row.id }).then((res) => {
            console.log('res', res)
            if (res.code == 200) {
              this.$message.success("删除成功");
              this.refresh();
            }
          });
        })
        .catch(() => { });
    },
  }
}
</script>
<style scoped>
.search {
  background-color: #fff;
  height: 80px;
  display: flex;
  align-items: center;
}
.search_thing {
  width: 250px;
  display: flex;
  align-items: center;
}
.search_label {
  width: 70px;
  font-size: 14px;
  text-align: right;
}
.search_input {
  width: calc(100% - 70px);
}
.table {
  padding: 10px;
  padding-top: 0;
}
</style>
vue.config.js
@@ -36,7 +36,7 @@
    proxy: {
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      [process.env.VUE_APP_BASE_API]: {
        target: `http://localhost:8001`,
        target: `http://10.21.10.74:8089`,
        changeOrigin: true,
        pathRewrite: {
          ["^" + process.env.VUE_APP_BASE_API]: "",