bug
value
2023-08-29 d6a96aaac154f87523423d8e2e0c8300adab5d5e
bug
已修改3个文件
333 ■■■■ 文件已修改
.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basicData/index.vue 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/standardLibrary/index.vue 282 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.development
@@ -2,4 +2,4 @@
ENV = 'development'
# base api
VUE_APP_BASE_API =  'http://192.168.110.107:1234/'
VUE_APP_BASE_API =  'http://localhost:1234/'
src/views/basicData/index.vue
@@ -10,7 +10,7 @@
            <span class="top_div_span">项目名称:</span>
            <el-input v-model="params.name" placeholder="请输入项目名称" style="width: 10%" size="small "></el-input>
            <el-button type="primary" class="top_div_button" size="small" @click="selectProductModelTable">查询</el-button>
            <el-button class="top_div_button" size="small" @click="params = {}">重置</el-button>
            <el-button class="top_div_button" size="small" @click="clean">重置</el-button>
            <div style="float: right">
                <el-button class="top_div_button" type="primary" size="small" icon="el-icon-folder-add"
                    @click="centerDialogVisible = true">新增</el-button>
@@ -19,21 +19,22 @@
                    <el-form :model="form" :rules="rules" ref="ruleForm" class="addForm">
                        <el-form-item prop="material" required>
                            <span>样品名称:</span>
                            <el-autocomplete class="inline-input" v-model="form.material" :fetch-suggestions="querySearch"
                                placeholder="请输入样品名称"></el-autocomplete>
                            <el-autocomplete class="inline-input" v-model="form.material" :fetch-suggestions="querySearch1"
                                placeholder="请输入样品名称" style="width: calc(100% - 70px);"></el-autocomplete>
                        </el-form-item>
                        <el-form-item>
                            <span>项目分组:</span>
                            <el-input v-model="form.father" style="width: 85%" placeholder="请输入样品分组"></el-input>
                            <el-autocomplete class="inline-input" v-model="form.father" :fetch-suggestions="querySearch2"
                                placeholder="请输入样品分组" style="width: calc(100% - 70px);"></el-autocomplete>
                        </el-form-item>
                        <el-row :gutter="24">
                            <el-col :span="12"><el-form-item prop="name" required><span>项目名称:</span>
                                    <el-input style="width: 70%" v-model="form.name"
                                    <el-input style="width: calc(100% - 70px);" v-model="form.name"
                                        placeholder="请输入项目名称"></el-input></el-form-item></el-col>
                            <el-col :span="12">
                                <el-form-item prop="unit">
                                    <span v-html="'单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;位:'"></span>
                                    <el-input style="width: 70%" v-model="form.unit"
                                    <el-input style="width: calc(100% - 70px);" v-model="form.unit"
                                        placeholder="请输入单位"></el-input></el-form-item></el-col>
                        </el-row>
                    </el-form>
@@ -216,8 +217,8 @@
                    this.form.father = result.father;
                    this.form.unit = result.unit;
                    this.form.id = scope.row.id;
                });
                this.centerDialogVisible = true;
                });
            },
            selectDataList() {
                this.tableData.forEach((a) => {
@@ -305,11 +306,41 @@
                    this.selectProductModelTable();
                });
            },
            querySearch(queryString, cb) {
                var restaurants = this.restaurants;
            querySearch1(queryString, cb) {
                var restaurants = []
                this.productModelSelectmater.forEach(a => {
                    restaurants.push({
                        value: a
                    })
                })
                var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
                // 调用 callback 返回建议列表的数据
                cb(results);
            },
            querySearch2(queryString, cb) {
                var restaurants = []
                this.projectGroupingOptions.forEach(a => {
                    restaurants.push({
                        value: a
                    })
                })
                var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
                // 调用 callback 返回建议列表的数据
                cb(results);
            },
            createFilter(queryString) {
                return (restaurant) => {
                    console.log(restaurant);
                    return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
                };
            },
            clean() {
                this.params = {
                    material: this.params.material,
                    father: null,
                    name: null
                }
                this.selectProductModelTable()
            }
        },
        mounted() {
src/views/standardLibrary/index.vue
@@ -2,118 +2,56 @@
  <div class="standard-library-main">
    <div class="content-main">
      <div class="library-bom" style="width: 300px">
        <el-input
          v-model="filterText"
          placeholder="输入关键字进行过滤"
        ></el-input>
                <el-input v-model="filterText" placeholder="输入关键字进行过滤"></el-input>
        <el-button type="text">全部</el-button>
        <el-tree
          ref="tree"
          style="width: 100%"
          class="filter-tree"
          :data="standardTree"
          :props="defaultProps"
          node-key="id"
          highlight-current
          default-expand-all
          :filter-node-method="filterNode"
          :render-content="renderContent"
          @node-click="nodeClick"
        />
                <el-tree ref="tree" style="width: 100%" class="filter-tree" :data="standardTree" :props="defaultProps"
                    node-key="id" highlight-current default-expand-all :filter-node-method="filterNode"
                    :render-content="renderContent" @node-click="nodeClick" />
      </div>
      <div class="library-table" style="width: 80%">
        <div class="table-header">
          <div class="serve-btn">
            <span class="tipMsg">{{ msg !== "" ? msg : "" }}</span>
            <el-select
              v-model="versionValue"
              @change="changeSelect"
              placeholder="请选择版本号"
            >
              <el-option
                v-for="item in options"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              >
                        <el-select v-model="versionValue" @change="changeSelect" placeholder="请选择版本号">
                            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
            <el-button type="primary" @click="addVersionFun"
              >新增版本号</el-button
            >
            <el-button
              type="primary"
              icon="el-icon-plus"
              @click="addTreeFormVisible = true"
              >新增</el-button
            >
            <el-button
              class="top_div_button"
              icon="el-icon-delete-solid"
              style="color: #00a5ff"
              @click="deleteListClick"
              >删除</el-button
            >
                        <el-button type="primary" @click="addVersionFun">新增版本号</el-button>
                        <el-button type="primary" icon="el-icon-plus" @click="addTreeFormVisible = true">新增</el-button>
                        <el-button class="top_div_button" icon="el-icon-delete-solid" style="color: #00a5ff"
                            @click="deleteListClick">删除</el-button>
          </div>
        </div>
        <div class="table-box">
          <el-table
            :data="tableData"
            style="width: 100%; margin-bottom: 20px"
            row-key="id"
            border
            height="calc(100vh - 250px)"
            default-expand-all
            ref="multipleTable"
            @select="selectTr"
            @select-all="selectAll"
            @selection-change="handleSelectionChange"
            :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
          >
                    <el-table :data="tableData" style="width: 100%; margin-bottom: 20px" row-key="id" border
                        height="calc(100vh - 250px)" default-expand-all ref="multipleTable" @select="selectTr"
                        @select-all="selectAll" @selection-change="handleSelectionChange"
                        :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
            <el-table-column type="selection" label="序号"> </el-table-column>
            <el-table-column
              type="index"
              width="50px"
              label="序号"
            ></el-table-column>
                        <el-table-column type="index" width="50px" label="序号"></el-table-column>
            <el-table-column label="项目名称" sortable>
              <template scope="scope">
                <el-tag
                  ><div
                    class="firstDiv"
                    :style="`color: ${
                                <el-tag>
                                    <div class="firstDiv" :style="`color: ${
                      scope.row.code == '[1]' ? '#16a7ff' : '#58c173'
                    }`"
                  >
                    }`">
                    {{ scope.row.code == "[1]" ? "01" : "02" }}
                  </div>
                  <span style="color: black">{{ scope.row.name }}</span></el-tag
                >
                                    <span style="color: black">{{ scope.row.name }}</span>
                                </el-tag>
              </template>
            </el-table-column>
            <el-table-column
              prop="unit"
              label="单位"
              sortable
            ></el-table-column>
                        <el-table-column prop="unit" label="单位" sortable></el-table-column>
            <el-table-column label="标准值" sortable>
              <template scope="scope">
                <el-input
                  v-if="scope.row.edit === true || scope.row.code === '[2]'"
                  @blur="requiredOnfocus(scope)"
                  v-model="scope.row.required"
                  placeholder="请输入标准值"
                ></el-input>
                                <el-input v-if="scope.row.edit === true || scope.row.code === '[2]'" @blur="requiredOnfocus(scope)"
                                    v-model="scope.row.required" placeholder="请输入标准值"></el-input>
              </template>
            </el-table-column>
            <el-table-column prop="internal" label="内控值" sortable>
              <template scope="scope">
                <el-input
                  v-if="scope.row.edit === true || scope.row.code === '[2]'"
                  @blur="requiredOnfocus(scope)"
                  v-model="scope.row.internal"
                  placeholder="请输入内控值"
                ></el-input>
                                <el-input v-if="scope.row.edit === true || scope.row.code === '[2]'" @blur="requiredOnfocus(scope)"
                                    v-model="scope.row.internal" placeholder="请输入内控值"></el-input>
              </template>
            </el-table-column>
          </el-table>
@@ -124,39 +62,19 @@
        </div>
      </div>
    </div>
    <el-dialog
      class="addTree"
      title="添加指标"
      width="28%"
      :visible.sync="addTreeFormVisible"
      @close="closeAddTreeForm"
    >
        <el-dialog class="addTree" title="添加标准指标" width="28%" :visible.sync="addTreeFormVisible">
      <el-form v-model="addTreeForm" label-position="top">
        <el-form-item label="上级">
          <el-cascader
            v-model="addTreeForm.addTypeArr"
            :options="formTypeOptions"
            :props="{ ...defaultProps, checkStrictly: true }"
            clearable
            @change="changeCascader"
          />
                <el-form-item label="标准类型">
                    <el-cascader v-model="addTreeForm.addTypeArr" :options="formTypeOptions"
                        :props="{ ...defaultProps, checkStrictly: true }" clearable @change="changeCascader"/>
        </el-form-item>
        <el-form-item
          v-show="addTreeForm.addTypeArr.length < 2"
          label="物料名称"
        >
                <el-form-item v-show="addTreeForm.addTypeArr.length < 2" label="物料名称">
          <el-input v-model="addTreeForm.materialName" />
        </el-form-item>
        <el-form-item
          v-show="addTreeForm.addTypeArr.length < 3"
          label="执行标准"
        >
                <el-form-item v-show="addTreeForm.addTypeArr.length < 3" label="执行标准">
          <el-input v-model="addTreeForm.standardName" />
        </el-form-item>
        <el-form-item
          v-show="addTreeForm.addTypeArr.length < 4"
          label="规格型号"
        >
                <el-form-item v-show="addTreeForm.addTypeArr.length < 4" label="规格型号">
          <el-input v-model="addTreeForm.specificationsName" />
        </el-form-item>
      </el-form>
@@ -181,7 +99,12 @@
  addVersion,
} from "@/api/standardLibrary";
import { selectproductModelApi } from "@/api/basicData/index";
    import {
        selectproductModelApi
    } from "@/api/basicData/index";
    import {
        Tree
    } from "element-ui";
export default {
  data() {
    return {
@@ -208,13 +131,13 @@
      formTypeOptions: [],
      addTreeForm: {
        addTypeArr: [],
      },
                }
    };
  },
  watch: {
    filterText(val) {
      this.$refs.tree.filter(val);
    },
            }
  },
  created() {
    this.getStandardTree();
@@ -243,7 +166,9 @@
      this.getTableByClick(this.selectData, this.versionValue);
    },
    async insertVersion() {
      const resp = await addVersion({ specificationsId: this.selectData.id });
                const resp = await addVersion({
                    specificationsId: this.selectData.id
                });
      if (resp.code === 200) {
        this.initSelect();
        this.$message({
@@ -269,7 +194,22 @@
    },
    // 获取bom树的标准数据
    async getStandardTree() {
      const { data } = await getMaterialList();
                let {
                    data
                } = await getMaterialList();
                if (data.length < 2) {
                    if (data.length == 0) {
                        data = [{
                            type: 0
                        }, {
                            type: 1
                        }]
                    } else {
                        data[1] = {
                            type: data[0].type == 1 ? 0 : 1
                        }
                    }
                }
      this.standardTree = data.map((item) => {
        let name = null;
        switch (item.type) {
@@ -295,7 +235,11 @@
        const firstNode = document.querySelector(
          ".el-tree-node .el-tree-node__children .el-tree-node .el-tree-node__children .el-tree-node .el-tree-node__children .el-tree-node"
        );
                    try {
        firstNode.click();
                    } catch (e) {
                        //TODO handle the exception
                    }
      });
    },
    getDefault(arr, index) {
@@ -356,83 +300,69 @@
      // 跳转产品规格详情页
      this.$router.push(`/standardLibrary/SpecificationDetails/${row.id}`);
    },
    renderContent(h, { node, data, store }) {
            renderContent(h, {
                node,
                data,
                store
            }) {
      // 判断是否是父节点或文件夹
      const isFolder = "children" in data;
      console.log(`output->data`, isFolder);
      return (
        <span class="tree-node">
          {isFolder ? (
            <i
              class={
                node.expanded
                  ? "el-icon-folder-opened blue-folder"
                  : "el-icon-folder blue-folder"
              }
            ></i>
          ) : (
            <i class="el-icon-document blue-folder"></i>
          )}
          <div class="tree-lable">
            [{node.level}] {data.name}
          </div>
        </span>
                return ( <
                    span class = "tree-node" > {
                        isFolder ? ( <
                            i class = {
                                node.expanded ?
                                "el-icon-folder-opened blue-folder" : "el-icon-folder blue-folder"
                            } >
                            <
                            /i>
                        ) : ( <
                            i class = "el-icon-document blue-folder" > < /i>
                        )
                    } <
                    div class = "tree-lable" > [{
                        node.level
                    }] {
                        data.name
                    } <
                    /div> < /
                    span >
      );
    },
    async subAddTreeForm() {
      this.addTreeFormVisible = false;
      let res = null;
      try {
        switch (this.addTreeForm.addTypeArr.length) {
          case 1:
            console.log(this.addTreeForm);
            res = await addMaterial({
              ...this.addTreeForm,
              type: this.addTreeForm.addTypeArr.pop(),
                                type: this.addTreeForm.addTypeArr[0],
            });
            break;
          case 2:
            console.log(this.addTreeForm);
            res = await addStandards({
              ...this.addTreeForm,
              materialId: this.addTreeForm.addTypeArr.pop(),
                                materialId: this.addTreeForm.addTypeArr[1],
            });
            break;
          case 3:
            console.log(this.addTreeForm);
            res = await addSpecifications({
              ...this.addTreeForm,
              standardId: this.addTreeForm.addTypeArr.pop(),
                                standardId: this.addTreeForm.addTypeArr[2],
            });
            break;
        }
      } catch (error) {
        this.$message.error("添加失败");
      }
      this.$message.success("添加成功");
      this.addTreeForm = {
        addTypeArr: [],
      };
                this.addTreeFormVisible = false;
      this.getStandardTree();
      this.getTableByClick(this.selectData, this.versionValue);
    },
    changeCascader(data) {
      this.addTreeForm.addTypeArr = data;
    },
    closeAddTreeForm() {
      this.addTreeForm = {
        addTypeArr: [],
      };
      console.log(this.addTreeForm);
    },
    /** 表格某行点击事件 */
    // handleRowClick(row, column, event) {
    //   // 判断当前行是否有子集,若没有则结束处理
    //   // console.log(row)
    //   if (!row.children) return
    //   this.$refs.tableData.toggleRowExpansion(row)
    // }
    selectProductModelTable() {
      selectproductModelApi(this.params).then((res) => {
        res.data.forEach((i) => {
@@ -512,10 +442,13 @@
          this.deleteList.push(v.id);
        }
      });
      console.log(`output->this.deleteList`, this.deleteList);
    },
    // 表格树全部选中配置  结束
    deleteListClick() {
                if(this.deleteList.length==0){
                    this.$message.error('请选择要删除的项目')
                    return
                }
      deleteListApi(this.deleteList).then((res) => {
        this.$message({
          message: res.message,
@@ -550,9 +483,11 @@
    padding-left: 23px !important;
  }
}
.standard-library-main {
  width: 100vh;
  height: 100%;
  // 页面中心内容区域
  .content-main {
    display: flex;
@@ -560,44 +495,52 @@
    min-height: calc(100vh - 88px);
    max-height: calc(100vh - 88px);
    padding: 15px;
    > div {
      padding: 20px;
      background: #fff;
    }
    .library-bom {
      // padding-right: 10px;
      width: 300px;
      overflow-y: auto;
      // height: 100%;
      max-height: 100%;
      // margin-right: 12px;
      // overflow-y: scroll;
      .el-tree {
        // margin-top:
        width: 100%;
        ::v-deep .el-tree-node__content {
          height: 24px !important;
          font-size: 18px;
          // display: inline-block !important;
          padding: 2px;
          // color: #333;
          .tree-node {
            display: flex;
            align-items: center;
            height: 20px;
          }
          .tree-lable {
            height: 100%;
            line-height: 23px;
            font-size: 12px;
            padding-left: 8px;
          }
          .blue-folder {
            color: rgb(64, 158, 255);
          }
        }
      }
    }
    .library-table {
      // height: 100%;
      width: 170vh;
@@ -606,15 +549,18 @@
      margin-left: 12px;
      display: flex;
      flex-direction: column;
      // overflow-y: scroll;
      .table-header {
        display: flex;
        justify-content: space-between;
        width: 100%;
        .el-form-item {
          margin-bottom: 30px !important;
        }
      }
      .table-box {
        flex: 1;
        background: #fff;
@@ -622,6 +568,7 @@
        display: flex;
        flex-direction: column;
        justify-content: space-between;
        > div:nth-child(3) {
          // height: 20px;
          display: flex;
@@ -631,15 +578,18 @@
      }
    }
  }
  .addTree {
    .el-form-item {
      margin-bottom: 10px;
    }
    .el-cascader {
      width: 100%;
    }
  }
}
.search-bar {
  .el-input {
    position: relative;
@@ -648,6 +598,7 @@
    width: 70%;
  }
}
.firstDiv {
  float: left;
  width: 20px;
@@ -660,22 +611,27 @@
  align-items: center;
  margin-right: 8px;
}
.el-tag.el-tag {
  border-color: transparent;
  background-color: transparent;
}
.el-tag.el-tag:hover {
  border-color: transparent;
  background-color: transparent;
}
.serve-btn {
  width: 100%;
  padding-bottom: 6px;
  text-align: right;
  .el-select {
    margin-right: 10px;
  }
}
.tipMsg {
  float: left;
  font-size: 16px;