| | |
| | | <style scoped> |
| | | .standard { |
| | | padding-top: 10px; |
| | | display: flex; |
| | | height: calc(100vh - 90px); |
| | | } |
| | | |
| | | .left { |
| | | width: 330px; |
| | | height: calc(100% - 40px - 10px); |
| | | background-color: white; |
| | | padding: 15px; |
| | | } |
| | | |
| | | .custom-tree-node { |
| | | width: 100%; |
| | | line-height: 32px; |
| | | } |
| | | |
| | | .custom-tree-node .el-icon-delete { |
| | | color: #3a7bfa; |
| | | opacity: 0; |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .custom-tree-node:hover .el-icon-delete { |
| | | opacity: 1; |
| | | } |
| | | |
| | | .custom-tree-node .el-icon-edit { |
| | | color: #3a7bfa; |
| | | opacity: 0; |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .custom-tree-node:hover .el-icon-edit { |
| | | opacity: 1; |
| | | } |
| | | |
| | | .node_i { |
| | | color: orange; |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .right { |
| | | margin-left: 5px; |
| | | width: calc(100% - 350px); |
| | | height: calc(100% - 40px); |
| | | } |
| | | |
| | | .right .title { |
| | | height: 34px; |
| | | line-height: 34px; |
| | | padding: 0 10px; |
| | | background-color: white; |
| | | } |
| | | |
| | | .standard_table { |
| | | border-top: 1px solid #ebeef5; |
| | | background-color: white; |
| | | } |
| | | |
| | | .product_table { |
| | | border-top: 1px solid #ebeef5; |
| | | height: calc(100% - 235px); |
| | | margin-top: 5px; |
| | | background-color: white; |
| | | user-select: none; |
| | | } |
| | | |
| | | .product_table .el-table { |
| | | height: calc(100% - 35px) !important; |
| | | } |
| | | |
| | | .sort { |
| | | width: 80% !important; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | >>> .el-table__body-wrapper { |
| | | height: calc(100% - 46px) !important; |
| | | } |
| | | |
| | | >>> .header-class { |
| | | height: 40px !important; |
| | | } |
| | | |
| | | >>> .header-class th.el-table__cell > .cell { |
| | | line-height: 20px !important; |
| | | padding-top: 0 !important; |
| | | padding-bottom: 0 !important; |
| | | } |
| | | |
| | | >>> .el-table__row { |
| | | height: 35px !important; |
| | | } |
| | | |
| | | .search { |
| | | border-bottom: 1px solid #ebeef5; |
| | | margin-bottom: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | box-sizing: border-box; |
| | | padding-bottom: 10px; |
| | | } |
| | | |
| | | .search-item { |
| | | display: flex; |
| | | align-items: center; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | .search-item .el-row { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search-item .el-col { |
| | | margin-left: 0; |
| | | } |
| | | |
| | | .more-edit .dialog-footer { |
| | | position: absolute; |
| | | top: 15px; |
| | | right: 70px; |
| | | } |
| | | |
| | | >>> .is-disabled .el-textarea__inner { |
| | | background: rgba(0, 0, 0, 0.05) !important; |
| | | } |
| | | >>> .el-table__body-wrapper::-webkit-scrollbar { |
| | | height: 14px; /* 设置滚动条宽度 */ |
| | | } |
| | | </style> |
| | | <style> |
| | | .standard .el-tree-node__content { |
| | | height: 32px; |
| | | font-size: 14px; |
| | | border-radius: 2px; |
| | | } |
| | | |
| | | .standard |
| | | .el-tree--highlight-current |
| | | .el-tree-node.is-current |
| | | > .el-tree-node__content { |
| | | color: #3a7bfa; |
| | | } |
| | | |
| | | .standard .has-gutter .el-table__cell .cell { |
| | | line-height: 34px; |
| | | background-color: #f8f8f8; |
| | | } |
| | | |
| | | .standard .has-gutter .el-table__cell { |
| | | background-color: #fafafa !important; |
| | | } |
| | | |
| | | .standard .standard_table .el-table__row .cell { |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .standard .el-table .warning-row .cell { |
| | | color: #bababa; |
| | | } |
| | | |
| | | .standard .el-table-filter__list { |
| | | max-height: 400px; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | .standard .el-upload { |
| | | width: 100%; |
| | | } |
| | | |
| | | .standard .el-upload-dragger { |
| | | width: 100%; |
| | | } |
| | | |
| | | .standard .handleBtn.is-disabled .el-upload:focus { |
| | | color: #c0c4cc !important; |
| | | } |
| | | |
| | | .standard .avatar-uploader .el-upload { |
| | | height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | </style> |
| | | |
| | | <template> |
| | | <div class="standard"> |
| | | <div class="left"> |
| | | <el-row> |
| | | <el-col :span="20"> |
| | | <el-input |
| | | v-model="search" |
| | | clearable |
| | | placeholder="输入关键字进行搜索" |
| | | size="small" |
| | | style="margin-bottom: 5px" |
| | | suffix-icon="el-icon-search" |
| | | @blur="searchFilter" |
| | | @clear="searchFilter" |
| | | ></el-input> |
| | | <el-input v-model="search" clearable placeholder="输入关键字进行搜索" size="small" style="margin-bottom: 5px" |
| | | suffix-icon="el-icon-search" @blur="searchFilter" @clear="searchFilter"></el-input> |
| | | </el-col> |
| | | <el-col |
| | | v-if="checkPermi(['standard:standardLibrary:add'])" |
| | | :span="4" |
| | | style="text-align: center; line-height: 30px" |
| | | > |
| | | <el-button |
| | | circle |
| | | icon="el-icon-plus" |
| | | size="mini" |
| | | type="primary" |
| | | @click="addDia = true" |
| | | ></el-button> |
| | | <el-col v-if="checkPermi(['standard:standardLibrary:add'])" :span="4" |
| | | style="text-align: center; line-height: 30px"> |
| | | <el-button circle icon="el-icon-plus" size="mini" type="primary" @click="openAddDia" |
| | | v-if="!auditId"></el-button> |
| | | </el-col> |
| | | </el-row> |
| | | <el-tree |
| | | ref="tree" |
| | | v-loading="treeLoad" |
| | | :allow-drop="allowDrop" |
| | | :data="list" |
| | | :default-expanded-keys="expandedKeys" |
| | | :draggable="true" |
| | | :filter-node-method="filterNode" |
| | | :props="{ children: 'children', label: 'label' }" |
| | | highlight-current |
| | | node-key="label" |
| | | style=" |
| | | <el-tree ref="tree" v-loading="treeLoad" :allow-drop="allowDrop" :data="list" |
| | | :default-expanded-keys="expandedKeys" :draggable="true" :filter-node-method="filterNode" |
| | | :props="{ children: 'children', label: 'label' }" highlight-current node-key="label" style=" |
| | | height: calc(100% - 30px); |
| | | overflow-y: scroll; |
| | | scrollbar-width: none; |
| | | " |
| | | @node-click="handleNodeClick" |
| | | @node-expand="nodeOpen" |
| | | @node-collapse="nodeClose" |
| | | @node-drop="handleDrop" |
| | | > |
| | | " @node-click="handleNodeClick" @node-drop="handleDrop"> |
| | | <div slot-scope="{ node, data }" class="custom-tree-node"> |
| | | <el-row style="width: 100%"> |
| | | <el-col |
| | | :class="{ sort: node.level > 3 }" |
| | | :span="19" |
| | | :title="data.label" |
| | | style="text-align: left" |
| | | > |
| | | <el-col :class="{ sort: node.level > 3 }" :span="19" :title="data.label" style="text-align: left"> |
| | | <span> |
| | | <i |
| | | :class="`node_i ${ |
| | | data.children != undefined |
| | | ? data.code === '[1]' |
| | | ? 'el-icon-folder-opened' |
| | | : 'el-icon-folder' |
| | | : 'el-icon-tickets' |
| | | }`" |
| | | ></i> |
| | | <i :class="`node_i ${data.children != undefined |
| | | ? data.code === '[1]' |
| | | ? 'el-icon-folder-opened' |
| | | : 'el-icon-folder' |
| | | : 'el-icon-tickets' |
| | | }`"></i> |
| | | {{ data.label }} |
| | | </span> |
| | | </el-col> |
| | | <el-col |
| | | v-if=" |
| | | checkPermi(['standard:standardLibrary:delStandardTree']) && |
| | | (node.data.children === null || |
| | | node.data.children === undefined) |
| | | " |
| | | :span="2" |
| | | style="text-align: right" |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | @click="editTreeName(node.data)" |
| | | > |
| | | <el-col v-if=" |
| | | checkPermi(['standard:standardLibrary:delStandardTree']) && |
| | | data.level == 7 |
| | | " :span="2" style="text-align: right"> |
| | | <el-button size="mini" type="text" @click.stop="editTreeName(node.data)" v-if="!auditId"> |
| | | <i class="el-icon-edit"></i> |
| | | </el-button> |
| | | </el-col> |
| | | <el-col |
| | | v-if=" |
| | | checkPermi(['standard:standardLibrary:delStandardTree']) && |
| | | (node.data.children === null || |
| | | node.data.children === undefined) |
| | | " |
| | | :span="2" |
| | | style="text-align: right" |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | @click.stop="remove(node, data)" |
| | | > |
| | | <el-col v-if=" |
| | | checkPermi(['standard:standardLibrary:delStandardTree']) && |
| | | data.level == 7 |
| | | " :span="2" style="text-align: right"> |
| | | <el-button size="mini" type="text" @click.stop="remove(node, data)" v-if="!auditId"> |
| | | <i class="el-icon-delete"></i> |
| | | </el-button> |
| | | </el-col> |
| | |
| | | </div> |
| | | <div class="right"> |
| | | <el-row class="title" style="width: 100%"> |
| | | <el-col :span="20" style="font-size: 14px; color: #999">{{ |
| | | <el-col :span="19" style="font-size: 14px; color: #999"><span>{{ |
| | | selectTree |
| | | }}</el-col> |
| | | <el-col :span="4"> |
| | | <el-button |
| | | v-if="isShowCopy" |
| | | size="small" |
| | | style="position: absolute; right: 20px; top: 1px" |
| | | type="primary" |
| | | @click="openCopyDia" |
| | | >批量复制</el-button |
| | | > |
| | | }} </span></el-col> |
| | | <el-col :span="5" style="position: absolute;top: -3px;right: -25px;" v-if="!auditId && !standardCkeck"> |
| | | <el-button size="small" type="primary" @click="submitReview" :loading="submitReviewLoad">提交变更</el-button> |
| | | <el-button v-if="isShowCopy" size="small" type="primary" @click="openCopyDia">批量复制</el-button> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row v-loading="tableLoad" class="standard_table"> |
| | | <el-table |
| | | ref="standard" |
| | | :data="standardList" |
| | | class="el-table" |
| | | header-row-class-name="header-class" |
| | | height="220" |
| | | highlight-current-row |
| | | style="width: 100%; height: 220px !important" |
| | | tooltip-effect="dark" |
| | | @row-click="rowClick" |
| | | > |
| | | <el-table-column |
| | | label="标准编号" |
| | | prop="code" |
| | | show-overflow-tooltip |
| | | width="200" |
| | | > |
| | | <el-table ref="standard" :data="standardList" class="el-table" header-row-class-name="header-class" height="220" |
| | | :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border highlight-current-row |
| | | style="width: 100%; height: 220px !important" tooltip-effect="dark" @row-click="rowClick"> |
| | | <el-table-column label="标准编号" prop="code" show-overflow-tooltip width="200"> |
| | | <template slot-scope="scope"> |
| | | <span style="color: red; font-size: 14px">{{ |
| | | scope.row["code"] |
| | | }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="标准名称" |
| | | prop="name" |
| | | show-overflow-tooltip |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="备注" |
| | | prop="remark" |
| | | show-overflow-tooltip |
| | | ></el-table-column> |
| | | <el-table-column label="标准名称" prop="name" show-overflow-tooltip></el-table-column> |
| | | <el-table-column label="备注" prop="remark" show-overflow-tooltip></el-table-column> |
| | | </el-table> |
| | | </el-row> |
| | | <el-row v-loading="tableLoad2" class="product_table"> |
| | | <el-table |
| | | id="templateParamTable" |
| | | ref="productTable" |
| | | v-loading="productTableLoading" |
| | | :data="productList" |
| | | :fit="true" |
| | | :row-class-name="tableRowClassName" |
| | | border |
| | | class="productTable" |
| | | header-row-class-name="header-class" |
| | | height="100%" |
| | | row-key="id" |
| | | stripe |
| | | style="width: 100%" |
| | | tooltip-effect="dark" |
| | | @select="upProductSelect" |
| | | @selection-change="handleSelectionChange" |
| | | @select-all="handleAll" |
| | | > |
| | | <el-table-column type="selection" width="50"> </el-table-column> |
| | | <el-table-column |
| | | label="产品" |
| | | min-width="100" |
| | | prop="sample" |
| | | show-overflow-tooltip |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="型号" |
| | | min-width="100" |
| | | prop="model" |
| | | show-overflow-tooltip |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="检验项分类" |
| | | min-width="140" |
| | | prop="inspectionItemClass" |
| | | show-overflow-tooltip |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="检验项" |
| | | min-width="140" |
| | | prop="inspectionItem" |
| | | show-overflow-tooltip |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="检验项子项" |
| | | min-width="140" |
| | | prop="inspectionItemSubclass" |
| | | show-overflow-tooltip |
| | | ></el-table-column> |
| | | <el-table-column |
| | | label="子实验室" |
| | | prop="sonLaboratory" |
| | | show-overflow-tooltip |
| | | width="130" |
| | | ></el-table-column> |
| | | <el-table id="templateParamTable" ref="productTable" v-loading="productTableLoading" :data="productList" |
| | | :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }" border :fit="true" |
| | | :row-class-name="tableRowClassName" class="productTable" header-row-class-name="header-class" height="100%" |
| | | row-key="id" stripe style="width: 100%" tooltip-effect="dark" @select="upProductSelect" |
| | | @selection-change="handleSelectionChange" @select-all="handleAll" :header-cell-class-name="headerCellStyle"> |
| | | <el-table-column type="selection" width="50" :selectable="selectable"> </el-table-column> |
| | | <el-table-column label="产品" min-width="100" prop="sample" show-overflow-tooltip></el-table-column> |
| | | <el-table-column label="型号" min-width="100" prop="model" show-overflow-tooltip></el-table-column> |
| | | <el-table-column label="检验项分类" min-width="140" prop="inspectionItemClass" |
| | | show-overflow-tooltip></el-table-column> |
| | | <el-table-column label="检验项" min-width="140" prop="inspectionItem" show-overflow-tooltip></el-table-column> |
| | | <el-table-column label="检验项子项" min-width="140" prop="inspectionItemSubclass" |
| | | show-overflow-tooltip></el-table-column> |
| | | <!-- checkStatusList --> |
| | | <el-table-column label="审核状态" min-width="140" prop="checkStatus"> |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="checkStatusList.find(m => m.value == scope.row.checkStatus).type" |
| | | v-if="checkStatusList.find(m => m.value == scope.row.checkStatus) && scope.row.checkStatus !== '' && scope.row.checkStatus !== null" |
| | | size="small">{{ |
| | | checkStatusList.find(m => m.value == scope.row.checkStatus).label }}</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="要求值" min-width="200px" prop="ask"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " |
| | | v-model="scope.row.ask" |
| | | :autosize="{ minRows: 1, maxRows: 3 }" |
| | | clearable |
| | | placeholder="要求值" |
| | | size="small" |
| | | type="textarea" |
| | | @change="(value) => upStandardProductList(value, scope.row.id)" |
| | | ></el-input> |
| | | <el-input v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="要求值" size="small" |
| | | type="textarea" @change="(value) => upStandardProductList(value, scope.row.id)" |
| | | :disabled="!!auditId || standardCkeck"></el-input> |
| | | <span v-else>{{ scope.row.ask }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="要求描述" min-width="220px" prop="tell"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " |
| | | v-model="scope.row.tell" |
| | | :autosize="{ minRows: 1, maxRows: 3 }" |
| | | clearable |
| | | placeholder="要求描述" |
| | | size="small" |
| | | type="textarea" |
| | | @change=" |
| | | (value) => upStandardProductListOfTell(value, scope.row.id) |
| | | " |
| | | ></el-input> |
| | | <el-input v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="要求描述" |
| | | size="small" type="textarea" @change="(value) => upStandardProductListOfTell(value, scope.row.id) |
| | | " :disabled="!!auditId || standardCkeck"></el-input> |
| | | <span v-else>{{ scope.row.ask }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="试验方法" prop="method" width="200"> |
| | | <el-table-column label="子实验室" prop="sonLaboratory" show-overflow-tooltip width="130"></el-table-column> |
| | | <!-- <el-table-column label="试验方法" prop="method" width="200"> |
| | | <template slot-scope="scope"> |
| | | <el-select |
| | | v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " |
| | | v-model="scope.row.methodS" |
| | | clearable |
| | | placeholder="试验方法" |
| | | size="small" |
| | | @change=" |
| | | (value) => upStandardProductListOfMethodS(value, scope.row.id) |
| | | " |
| | | > |
| | | <el-option |
| | | v-for="(a, i) in scope.row.method && |
| | | JSON.parse(scope.row.method)" |
| | | :key="i" |
| | | :label="a" |
| | | :value="a" |
| | | ></el-option> |
| | | <el-select v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.methodS" clearable placeholder="试验方法" size="small" @change="(value) => upStandardProductListOfMethodS(value, scope.row.id) |
| | | "> |
| | | <el-option v-for="(a, i) in scope.row.method && |
| | | JSON.parse(scope.row.method)" :key="i" :label="a" :value="a"></el-option> |
| | | </el-select> |
| | | <span v-else>{{ scope.row.methodS }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="条件" |
| | | min-width="140" |
| | | prop="radius" |
| | | show-overflow-tooltip |
| | | > |
| | | </el-table-column> --> |
| | | <el-table-column label="试验条件" min-width="140" prop="radius" show-overflow-tooltip> |
| | | <template slot-scope="scope"> |
| | | <el-select |
| | | v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " |
| | | v-model="scope.row.radius" |
| | | clearable |
| | | placeholder="条件" |
| | | size="small" |
| | | @change=" |
| | | (value) => upStandardProductListOfRadius(value, scope.row.id) |
| | | " |
| | | > |
| | | <el-option |
| | | v-for="(a, i) in scope.row.radiusList && |
| | | JSON.parse(scope.row.radiusList)" |
| | | :key="i" |
| | | :label="a" |
| | | :value="a" |
| | | ></el-option> |
| | | <el-select v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.radius" clearable placeholder="试验条件" size="small" @change="(value) => upStandardProductListOfRadius(value, scope.row.id) |
| | | " :disabled="!!auditId || standardCkeck" allow-create filterable> |
| | | <el-option v-for="(a, i) in scope.row.radiusList && |
| | | JSON.parse(scope.row.radiusList)" :key="i" :label="a" :value="a"></el-option> |
| | | </el-select> |
| | | <span v-else>{{ scope.row.radius }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="计量单位" |
| | | prop="unit" |
| | | show-overflow-tooltip |
| | | width="100" |
| | | ></el-table-column> |
| | | <el-table-column label="计量单位" prop="unit" show-overflow-tooltip width="100"></el-table-column> |
| | | <el-table-column label="单价(元)" prop="price" width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " |
| | | v-model="scope.row.price" |
| | | placeholder="单价(元)" |
| | | size="small" |
| | | @change=" |
| | | (value) => upStandardProductListOfPrice(value, scope.row.id) |
| | | " |
| | | > |
| | | <el-input v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.price" placeholder="单价(元)" size="small" @change="(value) => upStandardProductListOfPrice(value, scope.row.id) |
| | | " :disabled="!!auditId || standardCkeck"> |
| | | </el-input> |
| | | <span v-else>{{ scope.row.price }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="工时系数" prop="manHour" width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " |
| | | v-model="scope.row.manHour" |
| | | placeholder="单价(元)" |
| | | size="small" |
| | | @change=" |
| | | (value) => upStandardProductListOfManHour(value, scope.row.id) |
| | | " |
| | | > |
| | | <el-input v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.manHour" placeholder="单价(元)" size="small" @change="(value) => upStandardProductListOfManHour(value, scope.row.id) |
| | | " :disabled="!!auditId || standardCkeck"> |
| | | </el-input> |
| | | <span v-else>{{ scope.row.manHour }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="工时分组" |
| | | prop="manHourGroup" |
| | | show-overflow-tooltip |
| | | width="100" |
| | | ></el-table-column> |
| | | <el-table-column label="工时分组" prop="manHourGroup" show-overflow-tooltip width="100"></el-table-column> |
| | | <el-table-column label="模板" prop="templateId" width="200"> |
| | | <template slot-scope="scope"> |
| | | <el-select |
| | | v-model="scope.row.templateId" |
| | | :disabled=" |
| | | !checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " |
| | | filterable |
| | | size="small" |
| | | @change=" |
| | | (value) => |
| | | upStandardProductListOfTemplate(value, scope.row.id) |
| | | " |
| | | > |
| | | <el-option |
| | | v-for="(a, ai) in templateList" |
| | | :key="ai" |
| | | :label="a.name" |
| | | :value="a.id" |
| | | ></el-option> |
| | | <el-select v-model="scope.row.templateId" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct']) || !!auditId || standardCkeck |
| | | " filterable size="small" @change="(value) => |
| | | upStandardProductListOfTemplate(value, scope.row.id) |
| | | "> |
| | | <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="区间" |
| | | prop="section" |
| | | show-overflow-tooltip |
| | | width="120" |
| | | ></el-table-column> |
| | | <el-table-column label="操作" prop="section" width="160"> |
| | | <el-table-column label="区间" prop="section" show-overflow-tooltip width="120"></el-table-column> |
| | | <el-table-column label="操作" prop="section" width="160" v-if="!auditId && !standardCkeck"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | type="text" |
| | | @click="sectionUp(scope.row)" |
| | | :disabled=" |
| | | !checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " |
| | | >区间设置</el-button |
| | | > |
| | | <el-button |
| | | type="text" |
| | | :disabled=" |
| | | !checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " |
| | | @click="bindSupplierDensitySecond(scope.row)" |
| | | >绑定厂家</el-button |
| | | > |
| | | <el-button type="text" @click="sectionUp(scope.row)" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | ">区间设置</el-button> |
| | | <el-button type="text" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " @click="bindSupplierDensitySecond(scope.row)">绑定厂家</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination |
| | | :current-page="currentPage" |
| | | :page-size="300" |
| | | :total="total" |
| | | layout="total, prev, pager, next, jumper" |
| | | style="position: absolute; right: 16px; bottom: 1px" |
| | | @current-change="handleCurrentChange" |
| | | > |
| | | </el-pagination> |
| | | <p style="text-align: right;margin-right: 20px;color: #333;">共{{ total }}条</p> |
| | | </el-row> |
| | | </div> |
| | | |
| | |
| | | <span class="required-span">* </span>型号: |
| | | </el-col> |
| | | <el-col :offset="1" :span="16"> |
| | | <el-input |
| | | v-model="addOb.model" |
| | | clearable |
| | | placeholder="请输入型号" |
| | | size="small" |
| | | @keyup.enter.native="addStandardTree" |
| | | ></el-input> |
| | | <el-input v-model="addOb.modelName" clearable placeholder="请输入型号" size="small"></el-input> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addDia = false">取 消</el-button> |
| | | <el-button :loading="addLoad" type="primary" @click="addStandardTree" |
| | | >确 定</el-button |
| | | > |
| | | <el-button :loading="addLoad" type="primary" @click="addStandardTree">确 定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="updateDia" title="分类修改" width="400px"> |
| | |
| | | <span class="required-span">* </span>型号: |
| | | </el-col> |
| | | <el-col :offset="1" :span="16"> |
| | | <el-input |
| | | v-model="addOb.model" |
| | | clearable |
| | | placeholder="请输入型号" |
| | | size="small" |
| | | @keyup.enter.native="updateStandardTree" |
| | | ></el-input> |
| | | <el-input v-model="addOb.modelName" clearable placeholder="请输入型号" size="small"></el-input> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="updateDia = false">取 消</el-button> |
| | | <el-button |
| | | :loading="updateLoad" |
| | | type="primary" |
| | | @click="updateStandardTree" |
| | | >确 定</el-button |
| | | > |
| | | <el-button :loading="updateLoad" type="primary" @click="updateStandardTree">确 定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | :close-on-click-modal="false" |
| | | :visible.sync="sectionUpDia" |
| | | title="区间设置" |
| | | width="80%" |
| | | > |
| | | <el-dialog :close-on-click-modal="false" :visible.sync="sectionUpDia" title="区间设置" width="80%"> |
| | | <div class="body" style="padding: 5px 0"> |
| | | <el-table :data="sectionList" border height="350px" style="width: 100%"> |
| | | <el-table :data="sectionList" border height="350px" style="width: 100%" |
| | | :header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }"> |
| | | <el-table-column align="center" label="序号" type="index" width="70"> |
| | | </el-table-column> |
| | | <el-table-column align="center" label="区间"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.thing" |
| | | clearable |
| | | placeholder="区间" |
| | | size="small" |
| | | ></el-input> |
| | | <el-input v-model="scope.row.thing" clearable placeholder="区间" size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" label="芯数"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.cores" |
| | | clearable |
| | | placeholder="芯数" |
| | | size="small" |
| | | ></el-input> |
| | | <el-input v-model="scope.row.cores" clearable placeholder="芯数" size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" label="要求值"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.ask" |
| | | clearable |
| | | placeholder="要求值" |
| | | size="small" |
| | | ></el-input> |
| | | <el-input v-model="scope.row.ask" clearable placeholder="要求值" size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" label="要求描述"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.tell" |
| | | :autosize="{ minRows: 1, maxRows: 2 }" |
| | | clearable |
| | | placeholder="要求描述" |
| | | size="small" |
| | | type="textarea" |
| | | ></el-input> |
| | | <el-input v-model="scope.row.tell" :autosize="{ minRows: 1, maxRows: 2 }" clearable placeholder="要求描述" |
| | | size="small" type="textarea"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" label="导体材质"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.conductorMaterial" |
| | | clearable |
| | | placeholder="导体材质" |
| | | size="small" |
| | | ></el-input> |
| | | <el-input v-model="scope.row.conductorMaterial" clearable placeholder="导体材质" size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" label="导体类型"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.conductorType" |
| | | clearable |
| | | placeholder="导体类型" |
| | | size="small" |
| | | ></el-input> |
| | | <el-input v-model="scope.row.conductorType" clearable placeholder="导体类型" size="small"></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column align="center" label="单价" width="120">--> |
| | | <!-- <template slot-scope="scope">--> |
| | | <!-- <el-input v-model="scope.row.price" clearable placeholder="单价" size="small"></el-input>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <!-- <el-table-column align="center" label="工时系数" width="120">--> |
| | | <!-- <template slot-scope="scope">--> |
| | | <!-- <el-input v-model="scope.row.manHour" clearable placeholder="工时系数" size="small"></el-input>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <el-table-column align="center" label="操作" width="70"> |
| | | <template slot-scope="scope"> |
| | | <el-button |
| | | circle |
| | | icon="el-icon-minus" |
| | | size="mini" |
| | | type="danger" |
| | | @click="sectionList.splice(scope.$index, 1)" |
| | | ></el-button> |
| | | <el-button circle icon="el-icon-minus" size="mini" type="danger" |
| | | @click="sectionList.splice(scope.$index, 1)"></el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="sectionUpDia = false">取 消</el-button> |
| | | <el-button :loading="sectionLoad" type="primary" @click="sectionLoadAdd" |
| | | >保 存</el-button |
| | | > |
| | | <el-button |
| | | icon="el-icon-plus" |
| | | type="primary" |
| | | @click="sectionList.push({ thing: '' })" |
| | | ></el-button> |
| | | <el-button :loading="sectionLoad" type="primary" @click="sectionLoadAdd">保 存</el-button> |
| | | <el-button icon="el-icon-plus" type="primary" @click="sectionList.push({ thing: '' })"></el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <bindSupplierDensityDialogAsk |
| | | v-if="bindSupplierDensityDialog" |
| | | :bindSupplierDensityDialog="bindSupplierDensityDialog" |
| | | :currentRow="currentSupplierDensityRow" |
| | | @closeBindPartDialog="closeBindSupplierDensityDialog" |
| | | ></bindSupplierDensityDialogAsk> |
| | | <BatchCopy |
| | | v-if="batchCopyDia" |
| | | ref="BatchCopy" |
| | | :selectTree1="selectTree" |
| | | :standardId="standardId" |
| | | @refreshList="refreshList" |
| | | ></BatchCopy> |
| | | <bindSupplierDensityDialogAsk v-if="bindSupplierDensityDialog" |
| | | :bindSupplierDensityDialog="bindSupplierDensityDialog" :currentRow="currentSupplierDensityRow" |
| | | @closeBindPartDialog="closeBindSupplierDensityDialog" @refreshList="refreshList"> |
| | | </bindSupplierDensityDialogAsk> |
| | | <BatchCopy v-if="batchCopyDia" ref="BatchCopy" :selectTree1="selectTree" :standardId="standardId" |
| | | @refreshList="refreshList"></BatchCopy> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | obtainItemParameterList, |
| | | selectTestObjectByName, |
| | | selectStandardMethods, |
| | | addStandardMethodList, |
| | | addStandardTree, |
| | | updateStandardTree, |
| | | selectsStandardMethodByFLSSM, |
| | | upStandardProductList, |
| | | delStandardMethodByFLSSM, |
| | | delStandardProductByIds, |
| | | addStandardProduct, |
| | | selectStandardProductListByMethodId, |
| | | updateSection, |
| | | upStandardProducts, |
| | | getStandardTemplate, |
| | | selectStandardProductByMethodId, |
| | | selectStandardProductEnumByMethodId, |
| | | productListSubmit, |
| | | standardProductListRecordRelPage, |
| | | existCheckingRecord, |
| | | } from "@/api/standard/standardLibrary"; |
| | | import { checkPermi } from "@/utils/permission"; // 权限判断函数 |
| | | import bindSupplierDensityDialogAsk from "./components/bindSupplierDensityDialogAsk.vue"; |
| | | import BatchCopy from "./components/BatchCopy.vue"; |
| | | export default { |
| | | // name: 'StandardLibrary', |
| | | components: { |
| | | BatchCopy, |
| | | bindSupplierDensityDialogAsk, |
| | |
| | | factory: [], |
| | | addDia: false, |
| | | updateDia: false, // 修改树名字弹框 |
| | | oldModel: "", |
| | | addOb: { |
| | | factory: null, |
| | | laboratory: null, |
| | | sampleType: null, |
| | | sample: null, |
| | | model: null, |
| | | id: '', |
| | | modelName: null, |
| | | parentLevel: '', |
| | | parentId: '', |
| | | }, |
| | | laboratory: [], |
| | | addLoad: false, |
| | |
| | | inspectionItem: null, |
| | | inspectionItemSubclass: null, |
| | | sonLaboratory: null, |
| | | token: null, |
| | | fileList: [], |
| | | uploading: false, |
| | | isEquipment: true, |
| | |
| | | batchCopyDia: false, |
| | | VUE_APP_BASE_API: process.env.VUE_APP_BASE_API, |
| | | moreSelects: [], |
| | | checkStatusList: [ |
| | | { |
| | | value: 0, |
| | | label: '未提交', |
| | | type: 'danger' |
| | | }, |
| | | { |
| | | value: 1, |
| | | label: '审核中', |
| | | type: 'warning' |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: '已更新', |
| | | type: 'success' |
| | | }, |
| | | ], |
| | | submitReviewLoad: false, |
| | | auditId: null,//标准变更记录ID |
| | | standardCkeck: false,//当前是否有正在审核的变更 |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.existCheckingRecord() |
| | | this.selectEnumByCategoryForFactory(); |
| | | this.selectStandardTreeList(); |
| | | this.obtainItemParameterList(); |
| | | this.selectTestObjectByName(); |
| | | this.selectStandardMethods(); |
| | | this.selectEnumByCategoryForSonLaboratory(); |
| | | this.selectEnumByCategoryForsampleType(); |
| | | this.getStandardTemplate(); |
| | | this.selectStandardMethodsSec(); |
| | | this.token = { |
| | | token: sessionStorage.getItem("token"), |
| | | }; |
| | | if (this.$route.query && this.$route.query.auditId) { |
| | | let { |
| | | auditId |
| | | } = this.$route.query |
| | | this.auditId = auditId |
| | | } else { |
| | | this.auditId = null |
| | | } |
| | | }, |
| | | methods: { |
| | | checkPermi, |
| | | // 修改最子级名字 |
| | | editTreeName(info) { |
| | | this.updateDia = true; |
| | | this.oldModel = info.label; |
| | | // 标准库变更时禁用全选 |
| | | headerCellStyle({ columnIndex }) { |
| | | if (columnIndex === 0 && (this.auditId || this.standardCkeck)) { |
| | | return 'disable-select-all'; |
| | | } |
| | | return ''; |
| | | }, |
| | | // 标准库变更时禁用多选 |
| | | selectable(row, index) { |
| | | return !this.auditId && !this.standardCkeck; |
| | | }, |
| | | // 拖拽时判定目标节点能否被放置 |
| | | // 'prev'、'inner' 和 'next',前、插入、后 |
| | |
| | | } |
| | | } |
| | | }, |
| | | filterNode(value, data) { |
| | | if (!value) return true; |
| | | return data.label.indexOf(value) !== -1; |
| | | // 调用tree过滤方法 中文英过滤 |
| | | filterNode(value, data, node) { |
| | | if (!value) { //如果数据为空,则返回true,显示所有的数据项 |
| | | return true |
| | | } |
| | | // 查询列表是否有匹配数据,将值小写,匹配英文数据 |
| | | let val = value.toLowerCase() |
| | | return this.chooseNode(val, data, node) // 调用过滤二层方法 |
| | | }, |
| | | // 过滤父节点 / 子节点 (如果输入的参数是父节点且能匹配,则返回该节点以及其下的所有子节点;如果参数是子节点,则返回该节点的父节点。name是中文字符,enName是英文字符. |
| | | chooseNode(value, data, node) { |
| | | if (data.label.indexOf(value) !== -1) { |
| | | return true |
| | | } |
| | | const level = node.level |
| | | // 如果传入的节点本身就是一级节点就不用校验了 |
| | | if (level === 1) { |
| | | return false |
| | | } |
| | | // 先取当前节点的父节点 |
| | | let parentData = node.parent |
| | | // 遍历当前节点的父节点 |
| | | let index = 0 |
| | | while (index < level - 1) { |
| | | // 如果匹配到直接返回,此处name值是中文字符,enName是英文字符。判断匹配中英文过滤 |
| | | if (parentData.data.label.indexOf(value) !== -1) { |
| | | return true |
| | | } |
| | | // 否则的话再往上一层做匹配 |
| | | parentData = parentData.parent |
| | | index++ |
| | | } |
| | | // 没匹配到返回false |
| | | return false |
| | | }, |
| | | |
| | | searchFilter() { |
| | | this.$refs.tree.filter(this.search); |
| | | }, |
| | |
| | | this.upIndex++; |
| | | }, |
| | | handleNodeClick(val, node, el) { |
| | | //树的值 |
| | | if (node.childNodes.length === 0) { |
| | | this.isShowCopy = true; |
| | | } else { |
| | | this.isShowCopy = false; |
| | | } |
| | | // 判断是否为叶子节点 |
| | | this.isShowCopy = node.childNodes.length === 0; |
| | | |
| | | // 更新父节点信息 |
| | | this.addOb.parentLevel = node.data.level; |
| | | this.addOb.parentId = node.data.value; |
| | | this.addOb.id = node.data.value; |
| | | |
| | | // 初始化分页相关变量 |
| | | this.total = 0; |
| | | this.currentPage = 1; |
| | | this.selectTree = ""; |
| | | this.getNodeParent(node); |
| | | this.selectTree = this.selectTree.replace(" - ", ""); |
| | | let data = this.selectTree.split(" - "); |
| | | let data2 = ""; |
| | | for (let index = data.length - 1; index >= 0; index--) { |
| | | data2 += " - " + data[index]; |
| | | } |
| | | this.selectTree = data2.replace(" - ", ""); |
| | | if (node.childNodes.length === 0) { |
| | | |
| | | // 拼接树路径 |
| | | this.selectTree = this.getReversedTreePath(node); |
| | | |
| | | // 如果是叶子节点,调用特定方法 |
| | | if (this.isShowCopy) { |
| | | this.selectsStandardMethodByFLSSM(); |
| | | } |
| | | let trees = this.selectTree.split(" - "); |
| | | this.addOb.factory = trees[0]; |
| | | this.addOb.laboratory = trees[1]; |
| | | this.addOb.sampleType = trees[2]; |
| | | this.addOb.sample = trees[3]; |
| | | }, |
| | | getNodeParent(val) { |
| | | if (val.parent != null) { |
| | | if (val.data.children === null) { |
| | | this.selectTree += " - " + val.label + " - " + "null"; |
| | | } else { |
| | | this.selectTree += " - " + val.label; |
| | | |
| | | /** |
| | | * 获取反向拼接的树路径字符串 |
| | | * @param {Object} node - 当前节点 |
| | | * @returns {string} - 反向拼接的树路径 |
| | | */ |
| | | getReversedTreePath(node) { |
| | | const pathParts = []; |
| | | |
| | | // 递归获取父节点路径 |
| | | const collectParentLabels = (currentNode) => { |
| | | if (currentNode && currentNode.label) { |
| | | pathParts.unshift(currentNode.label); // 将当前节点标签插入到数组开头 |
| | | } |
| | | this.getNodeParent(val.parent); |
| | | } |
| | | if (currentNode.parent) { |
| | | collectParentLabels(currentNode.parent); // 递归处理父节点 |
| | | } |
| | | }; |
| | | |
| | | collectParentLabels(node); |
| | | |
| | | // 拼接路径并返回 |
| | | return pathParts.join(" - "); |
| | | }, |
| | | remove(node, data) { |
| | | this.$confirm("是否删除该层级", "提示", { |
| | | type: "error", |
| | | }) |
| | | .then(() => { |
| | | // this.treeLoad = true |
| | | }).then(() => { |
| | | this.selectTree = ""; |
| | | // 拼接树路径 |
| | | this.selectTree = this.getReversedTreePath(node); |
| | | delStandardTree({ |
| | | tree: this.selectTree, |
| | | level: data.level, |
| | | id: data.value |
| | | }).then((res) => { |
| | | this.$message.success("已删除"); |
| | | let arr = this.selectTree.split(" - "); |
| | | this.deleteStandard(this.list, arr[arr.length - 1]); |
| | | this.selectTree = ""; |
| | | this.getNodeParent(node); |
| | | this.selectTree = this.selectTree.replace(" - ", ""); |
| | | let data = this.selectTree.split(" - "); |
| | | let data2 = ""; |
| | | for (let index = data.length - 1; index >= 0; index--) { |
| | | data2 += " - " + data[index]; |
| | | } |
| | | this.selectTree = data2.replace(" - ", ""); |
| | | delStandardTree({ tree: this.selectTree }).then((res) => { |
| | | if (res.code == 201) return; |
| | | this.$message.success("已删除"); |
| | | let arr = this.selectTree.split(" - "); |
| | | this.deleteStandard(this.list, arr[arr.length - 1]); |
| | | this.selectTree = ""; |
| | | this.standardList = []; |
| | | this.productList = []; |
| | | }); |
| | | this.standardList = []; |
| | | this.productList = []; |
| | | }) |
| | | .catch((e) => {}); |
| | | }).catch((e) => { }); |
| | | }, |
| | | deleteStandard(arr, label) { |
| | | arr.forEach((item, index) => { |
| | |
| | | item.children && this.deleteStandard(item.children, label); |
| | | } |
| | | }); |
| | | }, |
| | | nodeOpen(data, node, el) { |
| | | $($(el.$el).find(".node_i")[0]).attr( |
| | | "class", |
| | | "node_i el-icon-folder-opened" |
| | | ); |
| | | }, |
| | | nodeClose(data, node, el) { |
| | | $($(el.$el).find(".node_i")[0]).attr("class", "node_i el-icon-folder"); |
| | | }, |
| | | selectEnumByCategoryForFactory() { |
| | | this.getConfigKey("sys_factory").then((response) => { |
| | |
| | | this.standardEnum = data; |
| | | }); |
| | | }, |
| | | addStandardMethodList() { |
| | | if (this.standardId == null || this.standardId == "") { |
| | | this.$message.error("标准方法未选择"); |
| | | return; |
| | | } |
| | | this.addLoad2 = true; |
| | | addStandardMethodList({ |
| | | standardId: this.standardId, |
| | | tree: this.selectTree, |
| | | }).then((res) => { |
| | | this.addLoad2 = false; |
| | | this.addStandardDia = false; |
| | | this.$message.success("添加成功"); |
| | | this.selectsStandardMethodByFLSSM(); |
| | | }); |
| | | // 打开新增弹框 |
| | | openAddDia() { |
| | | this.addDia = true |
| | | this.addOb.modelName = '' |
| | | }, |
| | | // 提交分类添加 |
| | | addStandardTree() { |
| | | if (this.addOb.sampleType == null || this.addOb.sampleType == "") { |
| | | this.$message.error("对象不存在"); |
| | | return; |
| | | } |
| | | if (this.addOb.model == null || this.addOb.model == "") { |
| | | if (this.addOb.modelName == null || this.addOb.modelName == "") { |
| | | this.$message.error("请填写型号"); |
| | | return; |
| | | } |
| | | this.addLoad = true; |
| | | addStandardTree(this.addOb) |
| | | .then((res) => { |
| | | if (res.code === 201) { |
| | | this.addLoad = false; |
| | | return; |
| | | } |
| | | this.$message.success("添加成功"); |
| | | this.addDia = false; |
| | | this.list |
| | | .find((a) => a.label == this.addOb.factory) |
| | | .children.find((a) => a.label == this.addOb.laboratory) |
| | | .children.find((a) => a.label == this.addOb.sampleType) |
| | | .children.find((a) => a.label == this.addOb.sample) |
| | | .children.push({ |
| | | code: "[5]", |
| | | label: this.addOb.model, |
| | | value: this.addOb.model, |
| | | }); |
| | | this.addLoad = false; |
| | | }) |
| | | .catch((e) => { |
| | | this.addDia = false; |
| | | this.addLoad = false; |
| | | }); |
| | | delete this.addOb.id; |
| | | addStandardTree(this.addOb).then((res) => { |
| | | this.$message.success("添加成功"); |
| | | this.addOb.modelName = ""; |
| | | this.addDia = false; |
| | | this.selectStandardTreeList(); |
| | | this.addLoad = false; |
| | | }).catch((e) => { |
| | | this.addLoad = false; |
| | | }); |
| | | }, |
| | | // 修改型号 |
| | | // 打开修改名字弹框 |
| | | editTreeName(info) { |
| | | this.updateDia = true; |
| | | this.addOb.modelName = info.label; |
| | | }, |
| | | // 提交修改型号 |
| | | updateStandardTree() { |
| | | if (this.addOb.sampleType == null || this.addOb.sampleType == "") { |
| | | this.$message.error("对象不存在"); |
| | | return; |
| | | } |
| | | if (this.addOb.model == null || this.addOb.model == "") { |
| | | if (this.addOb.modelName == null || this.addOb.modelName == "") { |
| | | this.$message.error("请填写型号"); |
| | | return; |
| | | } |
| | | this.addOb.oldModel = this.oldModel; |
| | | this.updateLoad = true; |
| | | updateStandardTree(this.addOb) |
| | | .then((res) => { |
| | | if (res.code === 201) { |
| | | this.updateLoad = false; |
| | | return; |
| | | } |
| | | this.$message.success("添加成功"); |
| | | this.selectStandardTreeList(); |
| | | this.updateDia = false; |
| | | this.updateLoad = false; |
| | | }) |
| | | .catch((e) => { |
| | | this.updateDia = false; |
| | | this.updateLoad = false; |
| | | }); |
| | | delete this.addOb.parentLevel; |
| | | delete this.addOb.parentId; |
| | | updateStandardTree(this.addOb).then((res) => { |
| | | this.$message.success("添加成功"); |
| | | this.selectStandardTreeList(); |
| | | this.addOb.modelName = ""; |
| | | this.updateDia = false; |
| | | this.updateLoad = false; |
| | | }).catch((e) => { |
| | | this.updateLoad = false; |
| | | }); |
| | | }, |
| | | selectsStandardMethodByFLSSM() { |
| | | this.tableLoad = true; |
| | |
| | | ask: value, |
| | | }), |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | this.$message.error("未保存"); |
| | | return; |
| | | } |
| | | this.$message.success("已保存"); |
| | | this.refreshList() |
| | | }); |
| | | }, |
| | | upStandardProductListOfTell(value, index) { |
| | |
| | | tell: value, |
| | | }), |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | this.$message.error("未保存"); |
| | | return; |
| | | } |
| | | this.$message.success("已保存"); |
| | | this.refreshList() |
| | | }); |
| | | }, |
| | | // 标准库选择实验方法的回调 |
| | |
| | | methodS: value, |
| | | }), |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | this.$message.error("未保存"); |
| | | return; |
| | | } |
| | | this.$message.success("已保存"); |
| | | this.refreshList() |
| | | }); |
| | | }, |
| | | // 标准库选择条件的回调 |
| | |
| | | radius: value, |
| | | }), |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | this.$message.error("未保存"); |
| | | return; |
| | | } |
| | | this.$message.success("已保存"); |
| | | this.refreshList() |
| | | }); |
| | | }, |
| | | upStandardProductListOfPrice(value, index) { |
| | |
| | | price: value, |
| | | }), |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | this.$message.error("未保存"); |
| | | return; |
| | | } |
| | | this.$message.success("已保存"); |
| | | this.refreshList() |
| | | }); |
| | | }, |
| | | upStandardProductListOfManHour(value, index) { |
| | |
| | | manHour: value, |
| | | }), |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | this.$message.error("未保存"); |
| | | return; |
| | | } |
| | | this.$message.success("已保存"); |
| | | this.refreshList() |
| | | }); |
| | | }, |
| | | upStandardProductListOfTemplate(value, index) { |
| | |
| | | templateId: value, |
| | | }), |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | this.$message.error("未保存"); |
| | | return; |
| | | } |
| | | this.$message.success("已保存"); |
| | | this.refreshList() |
| | | }); |
| | | }, |
| | | delStandardMethodByFLSSM(id) { |
| | | this.$confirm("是否删除当前数据?", "警告", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | this.tableLoad = true; |
| | | delStandardMethodByFLSSM({ id: id }).then((res) => { |
| | | if (res.code == 201) { |
| | | return; |
| | | } |
| | | this.$message.success("已删除"); |
| | | this.selectsStandardMethodByFLSSM(); |
| | | }); |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | handleSelectionChange(val) { |
| | | this.selects = []; |
| | |
| | | this.selects.push(a.id); |
| | | }); |
| | | }, |
| | | delStandardProductByIds() { |
| | | if (this.selects.length == 0) { |
| | | this.$message.error("未选中数据"); |
| | | return; |
| | | } |
| | | this.$confirm( |
| | | "是否删除当前选中 " + this.selects.length + " 条数据?", |
| | | "警告", |
| | | { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | } |
| | | ) |
| | | .then(() => { |
| | | this.tableLoad = true; |
| | | delStandardProductByIds({ |
| | | ids: JSON.stringify(this.selects), |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | return; |
| | | } |
| | | this.$message.success("已删除"); |
| | | this.selectsStandardMethodByFLSSM(); |
| | | }); |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | addStandardProductDo() { |
| | | let selects = this.$refs.ValueTable.multipleSelection; |
| | | if (selects.length == 0) { |
| | | this.$message.error("未选择数据"); |
| | | return; |
| | | } |
| | | let select = []; |
| | | selects.forEach((a) => { |
| | | select.push(a.id); |
| | | }); |
| | | this.tableLoad = true; |
| | | addStandardProduct({ |
| | | ids: JSON.stringify(select), |
| | | tree: this.selectTree, |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | return; |
| | | } |
| | | this.$message.success("添加成功"); |
| | | this.selectsStandardMethodByFLSSM(); |
| | | }); |
| | | this.addProductDia = false; |
| | | }, |
| | | |
| | | refreshList() { |
| | | this.batchCopyDia = false; |
| | | const index = this.standardList.findIndex( |
| | |
| | | this.currentPage = 1; |
| | | this.tableLoad2 = true; |
| | | this.standardId = row.id; |
| | | selectStandardProductListByMethodId({ |
| | | id: row.id, |
| | | tree: this.selectTree, |
| | | page: this.currentPage, |
| | | }).then((res) => { |
| | | this.productList = res.data.productList; |
| | | this.total = res.data.total; |
| | | setTimeout(() => { |
| | | this.productList.forEach((a) => { |
| | | if (a.state == 1) this.toggleSelection(a); |
| | | }); |
| | | }, 300); |
| | | this.tableLoad2 = false; |
| | | const tree = this.selectTree.split(" - "); |
| | | // 选择最后一层树才可以拖拽排序 |
| | | if (tree.length === 4) { |
| | | const name = tree[3] + "[4]"; |
| | | this.hasChildWithId(this.list, name); |
| | | if ( |
| | | this.isHaveChildren.children && |
| | | this.isHaveChildren.children.length > 0 |
| | | ) { |
| | | if (this.auditId) { |
| | | // 标准库变更的检验项查询 |
| | | standardProductListRecordRelPage({ |
| | | standardMethodListId: row.id, |
| | | tree: this.selectTree, |
| | | standardProductListUpdateRecordId: this.auditId, |
| | | }).then((res) => { |
| | | this.productList = res.data.productList; |
| | | this.total = res.data.total; |
| | | setTimeout(() => { |
| | | this.productList.forEach((a) => { |
| | | if (a.state == 1) this.toggleSelection(a); |
| | | }); |
| | | }, 300); |
| | | this.tableLoad2 = false; |
| | | }); |
| | | } else { |
| | | // 正常情况下的标准查询 |
| | | selectStandardProductListByMethodId({ |
| | | id: row.id, |
| | | tree: this.selectTree, |
| | | page: this.currentPage, |
| | | }).then((res) => { |
| | | this.productList = res.data.productList; |
| | | this.total = res.data.total; |
| | | setTimeout(() => { |
| | | this.productList.forEach((a) => { |
| | | if (a.state == 1) this.toggleSelection(a); |
| | | }); |
| | | }, 300); |
| | | this.tableLoad2 = false; |
| | | const tree = this.selectTree.split(" - "); |
| | | // 选择最后一层树才可以拖拽排序 |
| | | if (tree.length === 4) { |
| | | const name = tree[3] + "[4]"; |
| | | this.hasChildWithId(this.list, name); |
| | | if ( |
| | | this.isHaveChildren.children && |
| | | this.isHaveChildren.children.length > 0 |
| | | ) { |
| | | if (this.sortTable) { |
| | | this.sortTable.destroy(); |
| | | this.sortTable = null; |
| | | } |
| | | return; |
| | | } |
| | | } else if (tree.length < 4) { |
| | | if (this.sortTable) { |
| | | this.sortTable.destroy(); |
| | | this.sortTable = null; |
| | | } |
| | | return; |
| | | } |
| | | } else if (tree.length < 4) { |
| | | if (this.sortTable) { |
| | | this.sortTable.destroy(); |
| | | this.sortTable = null; |
| | | } |
| | | return; |
| | | } |
| | | this.$nextTick(() => { |
| | | this.rowDrop(row.id); |
| | | this.$nextTick(() => { |
| | | this.rowDrop(row.id); |
| | | }); |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | }, |
| | | toggleSelection(row) { |
| | | this.$refs.productTable.toggleRowSelection(row, true); |
| | |
| | | state: row.state, |
| | | }), |
| | | }).then((res) => { |
| | | if (res.code == 201) { |
| | | this.$message.error("未保存"); |
| | | return; |
| | | } |
| | | // this.$message.success('已保存') |
| | | this.$message.success('已保存') |
| | | this.refreshList() |
| | | }); |
| | | }, |
| | | filterHandler(value) { |
| | |
| | | }), |
| | | }).then((res) => { |
| | | this.sectionLoad = false; |
| | | if (res.code == 201) { |
| | | this.$message.error("未保存"); |
| | | return; |
| | | } |
| | | this.$message.success("已保存"); |
| | | this.sectionUpDia = false; |
| | | this.refreshList() |
| | | }); |
| | | } else { |
| | | upStandardProducts({ |
| | |
| | | }, |
| | | }).then((res) => { |
| | | this.sectionLoad = false; |
| | | if (res.code == 201) { |
| | | this.$message.error("未保存"); |
| | | return; |
| | | } |
| | | this.$message.success("已保存"); |
| | | this.sectionUpDia = false; |
| | | this.currentPage0 = 1; |
| | |
| | | handleCurrentChange(val) { |
| | | this.currentPage = val; |
| | | this.tableLoad2 = true; |
| | | selectStandardProductListByMethodId({ |
| | | id: this.standardId, |
| | | tree: this.selectTree, |
| | | page: val, |
| | | }).then((res) => { |
| | | this.productList = res.data.productList; |
| | | setTimeout(() => { |
| | | this.productList.forEach((a) => { |
| | | if (a.state == 1) this.toggleSelection(a); |
| | | }); |
| | | }, 200); |
| | | this.tableLoad2 = false; |
| | | }); |
| | | if (this.auditId) { |
| | | // 标准库变更查询\ |
| | | standardProductListRecordRelPage({ |
| | | standardMethodListId: this.standardId, |
| | | tree: this.selectTree, |
| | | standardProductListUpdateRecordId: this.auditId, |
| | | }).then((res) => { |
| | | this.productList = res.data.productList; |
| | | setTimeout(() => { |
| | | this.productList.forEach((a) => { |
| | | if (a.state == 1) this.toggleSelection(a); |
| | | }); |
| | | }, 200); |
| | | this.tableLoad2 = false; |
| | | }); |
| | | } else { |
| | | selectStandardProductListByMethodId({ |
| | | id: this.standardId, |
| | | tree: this.selectTree, |
| | | page: val, |
| | | }).then((res) => { |
| | | this.productList = res.data.productList; |
| | | setTimeout(() => { |
| | | this.productList.forEach((a) => { |
| | | if (a.state == 1) this.toggleSelection(a); |
| | | }); |
| | | }, 200); |
| | | this.tableLoad2 = false; |
| | | }); |
| | | } |
| | | }, |
| | | openCopyDia() { |
| | | this.batchCopyDia = true; |
| | |
| | | }); |
| | | }); |
| | | }, |
| | | // 提交变更申请 |
| | | submitReview() { |
| | | this.$prompt('请输入变更原因', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | inputValidator: (value) => { |
| | | if (!value || value.trim() === '') { |
| | | return '请输入变更原因'; |
| | | } |
| | | return true; |
| | | } |
| | | }).then(({ value }) => { |
| | | this.submitReviewLoad = true |
| | | productListSubmit({ |
| | | remark: value |
| | | }).then(res => { |
| | | this.submitReviewLoad = false |
| | | this.selectsStandardMethodByFLSSM(); |
| | | this.existCheckingRecord() |
| | | this.refreshList() |
| | | this.$refs.productTable.doLayout() |
| | | }).catch(err => { |
| | | this.submitReviewLoad = false |
| | | }) |
| | | }).catch(() => { |
| | | }); |
| | | }, |
| | | // 获取当前有没有正在审核的变更 |
| | | existCheckingRecord() { |
| | | existCheckingRecord().then(res => { |
| | | this.standardCkeck = res.data |
| | | }) |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | | <style scoped> |
| | | .standard { |
| | | padding-top: 10px; |
| | | display: flex; |
| | | height: calc(100vh - 90px); |
| | | } |
| | | |
| | | .left { |
| | | width: 330px; |
| | | height: calc(100% - 40px - 10px); |
| | | background-color: white; |
| | | padding: 15px; |
| | | } |
| | | |
| | | .custom-tree-node { |
| | | width: 100%; |
| | | line-height: 32px; |
| | | } |
| | | |
| | | .custom-tree-node .el-icon-delete { |
| | | color: #3a7bfa; |
| | | opacity: 0; |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .custom-tree-node:hover .el-icon-delete { |
| | | opacity: 1; |
| | | } |
| | | |
| | | .custom-tree-node .el-icon-edit { |
| | | color: #3a7bfa; |
| | | opacity: 0; |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .custom-tree-node:hover .el-icon-edit { |
| | | opacity: 1; |
| | | } |
| | | |
| | | .node_i { |
| | | color: orange; |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .right { |
| | | margin-left: 5px; |
| | | width: calc(100% - 350px); |
| | | height: calc(100% - 40px); |
| | | } |
| | | |
| | | .right .title { |
| | | height: 34px; |
| | | line-height: 34px; |
| | | padding: 0 10px; |
| | | background-color: white; |
| | | } |
| | | |
| | | .standard_table { |
| | | border-top: 1px solid #ebeef5; |
| | | background-color: white; |
| | | } |
| | | |
| | | .product_table { |
| | | border-top: 1px solid #ebeef5; |
| | | height: calc(100% - 235px); |
| | | margin-top: 5px; |
| | | background-color: white; |
| | | user-select: none; |
| | | } |
| | | |
| | | .product_table .el-table { |
| | | height: calc(100% - 35px) !important; |
| | | } |
| | | |
| | | .sort { |
| | | width: 80% !important; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | >>>.el-table__body-wrapper { |
| | | height: calc(100% - 46px) !important; |
| | | } |
| | | |
| | | >>>.header-class { |
| | | height: 40px !important; |
| | | } |
| | | |
| | | >>>.header-class th.el-table__cell>.cell { |
| | | line-height: 20px !important; |
| | | padding-top: 0 !important; |
| | | padding-bottom: 0 !important; |
| | | } |
| | | |
| | | >>>.el-table__row { |
| | | height: 35px !important; |
| | | } |
| | | |
| | | .search { |
| | | border-bottom: 1px solid #ebeef5; |
| | | margin-bottom: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | box-sizing: border-box; |
| | | padding-bottom: 10px; |
| | | } |
| | | |
| | | .search-item { |
| | | display: flex; |
| | | align-items: center; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | .search-item .el-row { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search-item .el-col { |
| | | margin-left: 0; |
| | | } |
| | | |
| | | .more-edit .dialog-footer { |
| | | position: absolute; |
| | | top: 15px; |
| | | right: 70px; |
| | | } |
| | | |
| | | >>>.is-disabled .el-textarea__inner { |
| | | background: rgba(0, 0, 0, 0.05) !important; |
| | | } |
| | | </style> |
| | | <style scoped> |
| | | .standard .el-tree-node__content { |
| | | height: 32px; |
| | | font-size: 14px; |
| | | border-radius: 2px; |
| | | } |
| | | |
| | | .standard .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { |
| | | color: #3a7bfa; |
| | | } |
| | | |
| | | .standard .has-gutter .el-table__cell .cell { |
| | | line-height: 34px; |
| | | background-color: #f8f8f8; |
| | | } |
| | | |
| | | .standard .has-gutter .el-table__cell { |
| | | background-color: #fafafa !important; |
| | | } |
| | | |
| | | .standard .standard_table .el-table__row .cell { |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .standard .el-table .warning-row .cell { |
| | | color: #bababa; |
| | | } |
| | | |
| | | .standard .el-table-filter__list { |
| | | max-height: 400px; |
| | | overflow-y: auto; |
| | | } |
| | | |
| | | .standard .el-upload { |
| | | width: 100%; |
| | | } |
| | | |
| | | .standard .el-upload-dragger { |
| | | width: 100%; |
| | | } |
| | | |
| | | .standard .handleBtn.is-disabled .el-upload:focus { |
| | | color: #c0c4cc !important; |
| | | } |
| | | |
| | | .standard .avatar-uploader .el-upload { |
| | | height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | |
| | | /* 隐藏全选复选框 */ |
| | | >>>.disable-select-all .el-checkbox { |
| | | display: none !important; |
| | | } |
| | | </style> |