src/assets/api/controller.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/do/b1-ins-order/add.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/do/b1-inspect-order-plan/Inspection.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/view/a5-capacity-scope.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/view/a5-laboratory-qualifications.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/view/b1-inspect-order-plan.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/view/b1-inspection-order.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/view/b1-report-preparation.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/view/b2-standard.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/view/index-index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/view/notice-detail.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/assets/api/controller.js
@@ -123,6 +123,7 @@ selectEquipmentOverview: "/deviceScope/selectEquipmentOverview", //获取设备总览 uploadFile: "/deviceScope/uploadFile", //上传图片 selectDevicePrincipal: "/user/getDeviceManager", //获取设备负责人 selectDeviceByCode: "/deviceScope/selectDeviceByCode", //通过设备编号获取设备列表 } const insOrder = { @@ -197,6 +198,7 @@ upReportUrl: "/insReport/upReportUrl", //报告还原 writeReport: "/insReport/writeReport", //报告提交 examineReport: "/insReport/examineReport", //报告审核 ratifyReport: "/insReport/ratifyReport", //报告批准 } const warehouse = { src/components/do/b1-ins-order/add.vue
@@ -1,701 +1,744 @@ <style scoped> .ins_order_add { width: 100%; height: 100%; overflow-y: auto; overflow-x: hidden; } .ins_order_add { width: 100%; height: 100%; overflow-y: auto; overflow-x: hidden; } .ins_order_add::-webkit-scrollbar { width: 0; } .ins_order_add::-webkit-scrollbar { width: 0; } .title { height: 60px; line-height: 60px; } .title { height: 60px; line-height: 60px; } .search { width: calc(100% - 40px); background-color: #fff; padding: 5px 40px 5px 0; } .search { width: calc(100% - 40px); background-color: #fff; padding: 5px 40px 5px 0; } .search_thing { display: flex; align-items: center; height: 50px; } .search_thing { display: flex; align-items: center; height: 50px; } .search_label { width: 120px; font-size: 14px; text-align: right; } .search_label { width: 120px; font-size: 14px; text-align: right; } .search_input { width: calc(100% - 120px); } .search_input { width: calc(100% - 120px); } .node_i { color: orange; font-size: 18px; } .node_i { color: orange; font-size: 18px; } .el-select-dropdown__item { display: flex; align-items: center; justify-content: space-between; } .el-select-dropdown__item { display: flex; align-items: center; justify-content: space-between; } </style> <style> .ins_order_add .el-input-group__append, .el-input-group__prepend { padding: 0 10px; } .ins_order_add .el-input-group__append, .el-input-group__prepend { padding: 0 10px; } .ins_order_add .el-tree-node__content { height: 32px; font-size: 14px; border-radius: 2px; } .ins_order_add .el-tree-node__content { height: 32px; font-size: 14px; border-radius: 2px; } .ins_order_add .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { color: #3A7BFA; } .ins_order_add .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { color: #3A7BFA; } .ins_order_add .has-gutter .el-table__cell .cell { line-height: 30px; background-color: #fafafa; } .ins_order_add .has-gutter .el-table__cell .cell { line-height: 30px; background-color: #fafafa; } .ins_order_add .has-gutter .el-table__cell { background-color: #fafafa !important; } .ins_order_add .has-gutter .el-table__cell { background-color: #fafafa !important; } .ins_order_add .el-table__row .cell { font-size: 12px; } .ins_order_add .el-table__row .cell { font-size: 12px; } .ins_order_add .el-table .warning-row .cell { color: #bababa; } .ins_order_add .el-table .warning-row .cell { color: #bababa; } .el-select .is-disabled{ .el-select .is-disabled { background: transparent !important; } .el-select .is-disabled .el-input__inner{ .el-select .is-disabled .el-input__inner { background: transparent !important; } </style> <template> <div class="ins_order_add"> <div> <el-row class="title"> <el-col :span="6" style="padding-left: 20px;">委托单信息</el-col> <el-col :span="18" style="text-align: right;"> <el-select v-model="template" size="medium" placeholder="下单模板" style="margin-right: 10px;" v-show="active==1" @change="selectInsOrderTemplateById"> <el-option v-for="(a, ai) in templates" :key="ai" :value="a.id" :label="a.name"> <span style="float: left">{{ a.name }}</span> <i class="el-icon-delete" style="float: right; color: #66b1ff; font-size: 16px" @click.stop="handleDelete(a)"></i> </el-option> </el-select> <el-button size="medium" @click="templateDia=true" v-show="active==1"> <span style="color: #3A7BFA;">保存模板</span> </el-button> <el-button size="medium" type="primary" @click="save" :loading="saveLoad" v-show="active==1">提交</el-button> <div class="ins_order_add"> <div> <el-row class="title"> <el-col :span="6" style="padding-left: 20px;">委托单信息</el-col> <el-col :span="18" style="text-align: right;"> <el-select v-model="template" size="medium" placeholder="下单模板" style="margin-right: 10px;" v-show="active==1" @change="selectInsOrderTemplateById"> <el-option v-for="(a, ai) in templates" :key="ai" :value="a.id" :label="a.name"> <span style="float: left">{{ a.name }}</span> <i class="el-icon-delete" style="float: right; color: #66b1ff; font-size: 16px" @click.stop="handleDelete(a)"></i> </el-option> </el-select> <el-button size="medium" @click="templateDia=true" v-show="active==1"> <span style="color: #3A7BFA;">保存模板</span> </el-button> <el-button size="medium" type="primary" @click="save" :loading="saveLoad" v-show="active==1">提交</el-button> <!-- 审核 --> <el-button size="medium" @click="upInsOrderOfState(2)" :loading="saveLoad" v-show="active==3">不通过</el-button> <el-button size="medium" type="primary" @click="upInsOrderOfState(1)" :loading="saveLoad" v-show="active==3">通过</el-button> <el-button size="medium" @click="$parent.playOrder(0)"> <span style="color: #3A7BFA;">返回</span> </el-button> </el-col> </el-row> </div> <div class="search"> <el-row> <el-col class="search_thing" :span="6"> <div class="search_label">委托编号:</div> <div class="search_input"> <el-input v-model="addObj.entrustCode" size="small" placeholder="系统生成" disabled></el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>下单客户:</div> <div class="search_input"> <el-input readonly size="small" v-model="addObj.custom"> <template slot="append"><el-button slot="append" icon="el-icon-search" @click="selectUserDia = true" :disabled="active>1"></el-button></template> </el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>下单单位:</div> <div class="search_input"> <el-input size="small" placeholder="选择下单客户" clearable disabled v-model="addObj.company"></el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>紧急程度:</div> <div class="search_input"> <el-select size="small" style="width: 100%;" clearable v-model="addObj.type" :disabled="active>1"> <el-option v-for="(a, ai) in type" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>样品名称:</div> <div class="search_input"> <el-input readonly size="small" v-model="addObj.sample"> <template slot="append"><el-button slot="append" icon="el-icon-search" @click="selectStandardTree = true" :disabled="active>1"></el-button></template> </el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>实验室:</div> <div class="search_input"> <el-input size="small" clearable disabled v-model="addObj.laboratory"></el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>样品类型:</div> <div class="search_input"> <el-input size="small" clearable disabled v-model="addObj.sampleType"></el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>样品数量:</div> <div class="search_input"> <el-input-number size="small" v-model="addObj.sampleNum" :min="1" :max="100" :precision="0" style="width: 65%;" @change="addStandardTree" :readonly="active>1"></el-input-number> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label">样品单位:</div> <div class="search_input"> <el-select v-model="addObj.unit" clearable size="small" style="width: 100%;" :disabled="active>1"> <el-option v-for="(a, i) in units" :key="i" :label="a.label" :value="a.value"></el-option> </el-select> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label">OTC订单号:</div> <div class="search_input"> <el-input size="small" placeholder="请输入" clearable v-model="addObj.otcCode" :readonly="active>1"></el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label" style="width: 175px;">是否涉及配套样品:</div> <div class="search_input" style="width: calc(100% - 175px);"> <el-radio-group v-model="addObj.mating" @change="$refs.sampleTable.doLayout()" :disabled="active>1"> <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> </div> </el-col> <el-col class="search_thing" :span="6" style="align-items: flex-start;margin: 8px 0;"> <div class="search_label">备注:</div> <div class="search_input"> <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" size="small" clearable v-model="addObj.remark" :readonly="active>1"></el-input> </div> </el-col> </el-row> </div> <div> <!-- <div style="text-align: right;line-height: 45px;" v-if="active<2"> <el-button type="primary" size="small" @click="addSampleDia = true">添加样品</el-button> <el-button size="small" @click="delSample"> <span style="color: #3A7BFA;">删除样品</span> </el-button> </div> --> <el-table class="el-table sampleTable" ref="sampleTable" :data="sampleList" height="250px" tooltip-effect="dark" border @selection-change="selectSample" highlight-current-row @row-click="rowClick" style="margin-top: 10px;" > <el-table-column type="selection" width="60" :selectable="selectable" v-if="active==1"></el-table-column> <el-table-column type="index" label="序号" width="65" align="center"></el-table-column> <el-table-column prop="sample" label="样品名称" align="center" min-width="100"> <template slot-scope="scope"> <el-input size="small" v-model="scope.row.sample" clearable :readonly="active>1"></el-input> </template> </el-table-column> <el-table-column prop="sampleCode" label="样品编号" min-width="140" align="center"> <template slot-scope="scope"> <el-input size="small" v-model="scope.row.sampleCode" clearable placeholder="不填写则系统自动生成" :readonly="active>1"></el-input> </template> </el-table-column> <!-- <el-table-column prop="factory" label="工厂" align="center" min-width="100"> </el-table-column> <el-table-column prop="laboratory" label="实验室" align="center" min-width="100"> </el-table-column> <el-table-column prop="sampleType" label="样品类型" align="center" min-width="100"> </el-table-column> --> <el-table-column prop="model" label="样品型号" align="center" min-width="100"> <template slot-scope="scope"> <el-select v-model="scope.row.model" filterable allow-create default-first-option placeholder="样品型号" size="small" @change="handleChangeModel" :disabled="active>1"> <el-option v-for="item in models" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </template> </el-table-column> <el-table-column prop="standardMethodListId" label="检验标准" align="center" min-width="100"> <template slot-scope="scope"> <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1" placeholder="检验标准" size="small" :loading="methodLoad" @change="(value)=>methodChange(value, scope.row)" @focus="methodFocus" :readonly="active>1"> <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id"> </el-option> </el-select> </template> </el-table-column> <el-table-column prop="unit" label="单位" align="center" min-width="100"> <template slot-scope="scope"> <el-select v-model="scope.row.unit" clearable size="small" style="width: 100%;" :disabled="active>1"> <el-option v-for="(a, i) in units" :key="i" :label="a.label" :value="a.value"></el-option> </el-select> </template> </el-table-column> <el-table-column prop="isLeave" label="是否留样" align="center" min-width="100"> <template slot-scope="scope"> <el-select v-model="scope.row.isLeave" size="small" :disabled="active>1"> <el-option label="留样" :value="1"></el-option> <el-option label="不留样" :value="0"></el-option> </el-select> </template> </el-table-column> <el-table-column prop="joinName" label="配套样品名称" width="140" align="center" v-if="addObj.mating==1"> <template slot-scope="scope"> <el-input size="small" type="textarea" :autosize="{ minRows: 1, maxRows: 1}" v-model="scope.row.joinName"></el-input> </template> </el-table-column> <el-table-column prop="joinModel" label="配套样品型号" width="140" align="center" v-if="addObj.mating==1"> <template slot-scope="scope"> <el-input size="small" type="textarea" :autosize="{ minRows: 1, maxRows: 1}" v-model="scope.row.joinModel"></el-input> </template> </el-table-column> <el-table-column prop="joinNum" label="配套样品数量" width="140" align="center" v-if="addObj.mating==1"> <template slot-scope="scope"> <el-input-number size="small" v-model="scope.row.joinNum" :min="1" :max="100" :precision="0" :controls="false" style="width: 80%;"></el-input-number> </template> </el-table-column> <!-- <el-table-column label="操作" width="65" align="center"> <template slot-scope="scope"> {{scope.index}} <el-button type="text" size="small" @click="delSampleAndProduct" :disabled="active!=1">删除</el-button> </template> </el-table-column> --> </el-table> <el-table class="el-table" ref="productTable" :data="productList" height="380px" tooltip-effect="dark" border @selection-change="selectProduct" style="margin-bottom: 10px;" @select="upProductSelect" :row-class-name="tableRowClassName" v-loading="getProductLoad" @select-all="handleAll"> <el-table-column type="selection" width="65" :selectable="selectable" v-if="active==1"></el-table-column> <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column> <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140" show-overflow-tooltip></el-table-column> <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip></el-table-column> <el-table-column prop="methodS" label="试验方法" min-width="120" show-overflow-tooltip> <el-button size="medium" @click="upInsOrderOfState(2)" :loading="saveLoad" v-show="active==3" :disabled="saveLoad">不通过</el-button> <el-button size="medium" type="primary" @click="upInsOrderOfState(1)" :loading="saveLoad" v-show="active==3">通过</el-button> <el-button size="medium" @click="$parent.playOrder(0)"> <span style="color: #3A7BFA;">返回</span> </el-button> </el-col> </el-row> </div> <div class="search"> <el-row> <el-col class="search_thing" :span="6"> <div class="search_label">委托编号:</div> <div class="search_input"> <el-input v-model="addObj.entrustCode" size="small" placeholder="系统生成" disabled></el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>检验类别:</div> <div class="search_input"> <el-select size="small" style="width: 100%;" clearable v-model="addObj.orderType" :disabled="active>1"> <el-option v-for="(a, ai) in orderType" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>委托客户:</div> <div class="search_input"> <el-input readonly size="small" v-model="addObj.custom"> <template slot="append"><el-button slot="append" icon="el-icon-search" @click="selectUserDia = true" :disabled="active>1"></el-button></template> </el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>委托单位:</div> <div class="search_input"> <el-input size="small" placeholder="选择委托客户" clearable disabled v-model="addObj.company"></el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>联系方式:</div> <div class="search_input"> <el-input size="small" placeholder="选择委托客户" clearable disabled v-model="addObj.phone"></el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>紧急程度:</div> <div class="search_input"> <el-select size="small" style="width: 100%;" clearable v-model="addObj.type" :disabled="active>1"> <el-option v-for="(a, ai) in type" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>样品名称:</div> <div class="search_input"> <el-input readonly size="small" v-model="addObj.sample"> <template slot="append"><el-button slot="append" icon="el-icon-search" @click="selectStandardTree = true" :disabled="active>1"></el-button></template> </el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>样品类型:</div> <div class="search_input"> <el-input size="small" clearable disabled v-model="addObj.sampleType"></el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>样品数量:</div> <div class="search_input"> <el-input-number size="small" v-model="addObj.sampleNum" :min="1" :max="100" :precision="0" style="width: 65%;" @change="addStandardTree" :disabled="active>1"></el-input-number> </div> </el-col> <!-- <el-col class="search_thing" :span="6"> <div class="search_label">样品单位:</div> <div class="search_input"> <el-select v-model="addObj.unit" clearable size="small" style="width: 100%;" :disabled="active>1"> <el-option v-for="(a, i) in units" :key="i" :label="a.label" :value="a.value"></el-option> </el-select> </div> </el-col> --> <el-col class="search_thing" :span="6"> <div class="search_label"><span class="required-span">* </span>来样方式:</div> <div class="search_input"> <el-input size="small" clearable v-model="addObj.formType" :readonly="active>1"></el-input> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label">报告发送方式:</div> <div class="search_input"> <el-radio-group v-model="addObj.send"> <el-radio :label="1">自取</el-radio> <el-radio :label="0">其他</el-radio> </el-radio-group> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label">样品处理方式:</div> <div class="search_input"> <el-radio-group v-model="addObj.processing"> <el-radio :label="0">委托单位取回</el-radio> <el-radio :label="1">实验室处理</el-radio> </el-radio-group> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label">是否留样:</div> <div class="search_input"> <el-radio-group v-model="addObj.isLeave"> <el-radio :label="0">不留样</el-radio> <el-radio :label="1">留样</el-radio> </el-radio-group> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label" style="width: 175px;">是否涉及配套样品:</div> <div class="search_input" style="width: calc(100% - 175px);"> <el-radio-group v-model="addObj.mating" @change="$refs.sampleTable.doLayout()"> <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> </div> </el-col> <el-col class="search_thing" :span="6"> <div class="search_label">OTC订单号:</div> <div class="search_input"> <el-input size="small" placeholder="请输入" clearable v-model="addObj.otcCode" :readonly="active>1"></el-input> </div> </el-col> <el-col class="search_thing" :span="6" style="align-items: flex-start;margin: 8px 0;"> <div class="search_label">备注:</div> <div class="search_input"> <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" size="small" clearable v-model="addObj.remark" :readonly="active>1"></el-input> </div> </el-col> </el-row> </div> <div> <el-table class="el-table sampleTable" ref="sampleTable" :data="sampleList" height="250px" tooltip-effect="dark" border @selection-change="selectSample" highlight-current-row @row-click="rowClick" style="margin-top: 10px;"> <el-table-column type="selection" width="60" :selectable="selectable" v-if="active==1"></el-table-column> <el-table-column type="index" label="序号" width="65" align="center"></el-table-column> <el-table-column prop="sample" label="样品名称" align="center" min-width="100"> <template slot-scope="scope"> <el-input size="small" v-model="scope.row.sample" clearable :readonly="active>1"></el-input> </template> </el-table-column> <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="price" label="单价" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="manDay" label="预计时间(天)" width="120" show-overflow-tooltip></el-table-column> <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column> <!-- <el-table-column prop="deviceGroup" label="设备组" width="120" show-overflow-tooltip></el-table-column> --> <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column> <el-table-column prop="ask" label="要求值" min-width="220px"> <template slot-scope="scope"> <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable type="textarea" :autosize="{ minRows: 1, maxRows: 3}" @change="e=>requestChange(e,scope.row)"></el-input> </template> </el-table-column> </el-table> </div> <el-dialog title="选择客户" :visible.sync="selectUserDia" width="70%"> <div class="body" style="height: 60vh;" v-if="selectUserDia"> <ValueTable ref="ValueTable2" :url="$api.user.selectCustomPageList" :componentData="componentData2" /> </div> <span slot="footer" class="dialog-footer"> <el-button @click="selectUserDia = false">取 消</el-button> <el-button type="primary" @click="selectUser">确 定</el-button> </span> </el-dialog> <el-dialog title="选择样品" :visible.sync="selectStandardTree" width="400px"> <div class="body" style="height: 60vh;overflow-y: auto;" v-if="selectStandardTree"> <el-row> <el-col :span="24"> <el-input placeholder="输入关键字进行搜索" suffix-icon="el-icon-search" v-model="search" size="small" style="margin-bottom: 5px;" clearable @blur="searchFilter" @clear="searchFilter" @keyup.enter.native="searchFilter"></el-input> </el-col> </el-row> <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }" node-key="label" :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" @node-collapse="nodeClose" :default-expanded-keys="expandedKeys"> <div class="custom-tree-node" slot-scope="{ node, data }"> <el-row> <el-col :span="24"> <span><i :class="`node_i ${data.children != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> {{ data.code }} {{ data.label }}</span> </el-col> </el-row> </div> </el-tree> </div> <span slot="footer" class="dialog-footer"> <el-button @click="selectStandardTree = false">取 消</el-button> <el-button type="primary" @click="activeStandardTree">确 定</el-button> </span> </el-dialog> <el-dialog title="添加样品" :visible.sync="addSampleDia" width="400px"> <div class="body" style="max-height: 60vh;"> <el-row> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>样品名称:</div> <div class="search_input"> <el-input readonly size="small" v-model="sample.sample"> <template slot="append"><el-button slot="append" icon="el-icon-search" @click="selectStandardTree = true"></el-button></template> </el-input> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>工厂名称:</div> <div class="search_input"> <el-input size="small" clearable disabled v-model="sample.factory"></el-input> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>实验室名称:</div> <div class="search_input"> <el-input size="small" clearable disabled v-model="sample.laboratory"></el-input> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>样品类型:</div> <div class="search_input"> <el-input size="small" clearable disabled v-model="sample.sampleType"></el-input> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>规格型号:</div> <div class="search_input"> <el-input size="small" placeholder="请输入" clearable v-model="sample.model"></el-input> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label">样品编号:</div> <div class="search_input"> <el-input v-model="sample.sampleCode" size="small" placeholder="请输入" clearable></el-input> </div> </el-col> <el-col class="search_thing" :span="24"> <div class="search_label">样品数量:</div> <div class="search_input"> <el-input-number size="small" v-model="sample.sampleNum" :min="1" :max="100" :precision="0" style="width: 50%;"></el-input-number> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label">样品留样:</div> <div class="search_input"> <el-radio-group v-model="sample.isLeave"> <el-radio :label="1">留样</el-radio> <el-radio :label="0">不留样</el-radio> </el-radio-group> </div> </el-col> </el-row> </div> <span slot="footer" class="dialog-footer"> <el-button @click="addSampleDia = false">取 消</el-button> <el-button type="primary" @click="onSample()" :loading="getProductLoad">确 定</el-button> </span> </el-dialog> <el-dialog title="保存模板" :visible.sync="templateDia" width="400px"> <div class="body" style="display: flex;align-items: center;" v-if="templateDia"> <div class="search_label" style="width: 90px;"><span class="required-span">* </span>模板名称:</div> <div class="search_input"> <el-input size="small" clearable v-model="templateName"></el-input> </div> </div> <span slot="footer" class="dialog-footer"> <el-button @click="templateDia = false">取 消</el-button> <el-button type="primary" @click="addTemplateDia" :loading="templateLoading">确 定</el-button> </span> </el-dialog> <el-dialog title="检验下发" :visible.sync="issuedDialogVisible" width="400px"> <div class="body" style="max-height: 60vh;"> <el-row> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>约定时间:</div> <div class="search_input"> <el-date-picker size="small" v-model="distributeData.appointed" type="date" placeholder="选择日期" value-format="yyyy-MM-dd" style="width: 100%;" format="yyyy-MM-dd"> </el-date-picker> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span" v-if="addObj.type == 2">* </span>指派人员:</div> <div class="search_input"> <el-select v-model="distributeData.userId" placeholder="请选择" size="small" style="width: 100%;"> <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </div> </el-col> </el-row> </div> <span slot="footer" class="dialog-footer"> <el-row> <el-button @click="issuedDialogVisible=false">取 消</el-button> <el-button type="primary" @click="submitForm2" :loading="upLoad">确 定</el-button> </el-row> </span> </el-dialog> <el-table-column prop="sampleCode" label="样品编号" min-width="140" align="center"> <template slot-scope="scope"> <el-input size="small" v-model="scope.row.sampleCode" clearable placeholder="不填写则系统自动生成" :readonly="active>1"></el-input> </template> </el-table-column> <el-table-column prop="model" label="样品型号" align="center" min-width="100"> <template slot-scope="scope"> <el-select v-model="scope.row.model" filterable allow-create default-first-option placeholder="样品型号" size="small" @change="handleChangeModel" :disabled="active>1"> <el-option v-for="item in models" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </template> </el-table-column> <el-table-column prop="standardMethodListId" label="检验标准" align="center" min-width="100"> <template slot-scope="scope"> <el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1" placeholder="检验标准" size="small" :loading="methodLoad" @change="(value)=>methodChange(value, scope.row)" @focus="methodFocus" :readonly="active>1"> <el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id"> </el-option> </el-select> </template> </el-table-column> <el-table-column prop="unit" label="单位" align="center" min-width="100"> <template slot-scope="scope"> <el-select v-model="scope.row.unit" clearable size="small" style="width: 100%;" :disabled="active>1"> <el-option v-for="(a, i) in units" :key="i" :label="a.label" :value="a.value"></el-option> </el-select> </template> </el-table-column> <!-- <el-table-column prop="isLeave" label="是否留样" align="center" min-width="100"> <template slot-scope="scope"> <el-select v-model="scope.row.isLeave" size="small" :disabled="active>1"> <el-option label="留样" :value="1"></el-option> <el-option label="不留样" :value="0"></el-option> </el-select> </template> </el-table-column> --> <el-table-column prop="joinName" label="配套样品名称" width="140" align="center" v-if="addObj.mating==1"> <template slot-scope="scope"> <el-input size="small" type="textarea" :autosize="{ minRows: 1, maxRows: 1}" v-model="scope.row.joinName"></el-input> </template> </el-table-column> <el-table-column prop="joinModel" label="配套样品型号" width="140" align="center" v-if="addObj.mating==1"> <template slot-scope="scope"> <el-input size="small" type="textarea" :autosize="{ minRows: 1, maxRows: 1}" v-model="scope.row.joinModel"></el-input> </template> </el-table-column> <el-table-column prop="joinNum" label="配套样品数量" width="140" align="center" v-if="addObj.mating==1"> <template slot-scope="scope"> <el-input-number size="small" v-model="scope.row.joinNum" :min="1" :max="100" :precision="0" :controls="false" style="width: 80%;"></el-input-number> </template> </el-table-column> </el-table> <el-table class="el-table" ref="productTable" :data="productList" height="380px" tooltip-effect="dark" border @selection-change="selectProduct" style="margin-bottom: 10px;" @select="upProductSelect" :row-class-name="tableRowClassName" v-loading="getProductLoad" @select-all="handleAll"> <el-table-column type="selection" width="65" :selectable="selectable" v-if="active==1"></el-table-column> <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column> <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140" show-overflow-tooltip></el-table-column> <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip :filters="filters" :filter-method="filterHandler"></el-table-column> <el-table-column prop="methodS" label="试验方法" min-width="120" show-overflow-tooltip> </el-table-column> <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="price" label="单价" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="manDay" label="预计时间(天)" width="120" show-overflow-tooltip></el-table-column> <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column> <!-- <el-table-column prop="deviceGroup" label="设备组" width="120" show-overflow-tooltip></el-table-column> --> <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column> <el-table-column prop="ask" label="要求值" min-width="220px"> <template slot-scope="scope"> <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable type="textarea" :autosize="{ minRows: 1, maxRows: 3}" @change="e=>requestChange(e,scope.row)" :readonly="active>1"></el-input> </template> </el-table-column> </el-table> </div> <el-dialog title="选择客户" :visible.sync="selectUserDia" width="70%"> <div class="body" style="height: 60vh;" v-if="selectUserDia"> <ValueTable ref="ValueTable2" :url="$api.user.selectCustomPageList" :componentData="componentData2" /> </div> <span slot="footer" class="dialog-footer"> <el-button @click="selectUserDia = false">取 消</el-button> <el-button type="primary" @click="selectUser">确 定</el-button> </span> </el-dialog> <el-dialog title="选择样品" :visible.sync="selectStandardTree" width="400px"> <div class="body" style="height: 60vh;overflow-y: auto;" v-if="selectStandardTree"> <el-row> <el-col :span="24"> <el-input placeholder="输入关键字进行搜索" suffix-icon="el-icon-search" v-model="search" size="small" style="margin-bottom: 5px;" clearable @blur="searchFilter" @clear="searchFilter" @keyup.enter.native="searchFilter"></el-input> </el-col> </el-row> <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }" node-key="label" :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" @node-collapse="nodeClose" :default-expanded-keys="expandedKeys"> <div class="custom-tree-node" slot-scope="{ node, data }"> <el-row> <el-col :span="24"> <span><i :class="`node_i ${data.children != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> {{ data.code }} {{ data.label }}</span> </el-col> </el-row> </div> </el-tree> </div> <span slot="footer" class="dialog-footer"> <el-button @click="selectStandardTree = false">取 消</el-button> <el-button type="primary" @click="activeStandardTree">确 定</el-button> </span> </el-dialog> <el-dialog title="添加样品" :visible.sync="addSampleDia" width="400px"> <div class="body" style="max-height: 60vh;"> <el-row> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>样品名称:</div> <div class="search_input"> <el-input readonly size="small" v-model="sample.sample"> <template slot="append"><el-button slot="append" icon="el-icon-search" @click="selectStandardTree = true"></el-button></template> </el-input> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>工厂名称:</div> <div class="search_input"> <el-input size="small" clearable disabled v-model="sample.factory"></el-input> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>实验室名称:</div> <div class="search_input"> <el-input size="small" clearable disabled v-model="sample.laboratory"></el-input> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>样品类型:</div> <div class="search_input"> <el-input size="small" clearable disabled v-model="sample.sampleType"></el-input> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>规格型号:</div> <div class="search_input"> <el-input size="small" placeholder="请输入" clearable v-model="sample.model"></el-input> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label">样品编号:</div> <div class="search_input"> <el-input v-model="sample.sampleCode" size="small" placeholder="请输入" clearable></el-input> </div> </el-col> <el-col class="search_thing" :span="24"> <div class="search_label">样品数量:</div> <div class="search_input"> <el-input-number size="small" v-model="sample.sampleNum" :min="1" :max="100" :precision="0" style="width: 50%;"></el-input-number> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label">样品留样:</div> <div class="search_input"> <el-radio-group v-model="sample.isLeave"> <el-radio :label="1">留样</el-radio> <el-radio :label="0">不留样</el-radio> </el-radio-group> </div> </el-col> </el-row> </div> <span slot="footer" class="dialog-footer"> <el-button @click="addSampleDia = false">取 消</el-button> <el-button type="primary" @click="onSample()" :loading="getProductLoad">确 定</el-button> </span> </el-dialog> <el-dialog title="保存模板" :visible.sync="templateDia" width="400px"> <div class="body" style="display: flex;align-items: center;" v-if="templateDia"> <div class="search_label" style="width: 90px;"><span class="required-span">* </span>模板名称:</div> <div class="search_input"> <el-input size="small" clearable v-model="templateName"></el-input> </div> </div> <span slot="footer" class="dialog-footer"> <el-button @click="templateDia = false">取 消</el-button> <el-button type="primary" @click="addTemplateDia" :loading="templateLoading">确 定</el-button> </span> </el-dialog> <el-dialog title="检验下发" :visible.sync="issuedDialogVisible" width="400px"> <div class="body" style="max-height: 60vh;"> <el-row> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>约定时间:</div> <div class="search_input"> <el-date-picker size="small" v-model="distributeData.appointed" type="date" placeholder="选择日期" value-format="yyyy-MM-dd" style="width: 100%;" format="yyyy-MM-dd"> </el-date-picker> </div> </el-col> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span" v-if="addObj.type == 2">* </span>指派人员:</div> <div class="search_input"> <el-select v-model="distributeData.userId" placeholder="请选择" size="small" style="width: 100%;"> <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </div> </el-col> </el-row> </div> <span slot="footer" class="dialog-footer"> <el-row> <el-button @click="issuedDialogVisible=false">取 消</el-button> <el-button type="primary" @click="submitForm2" :loading="upLoad">确 定</el-button> </el-row> </span> </el-dialog> <el-dialog title="不通过原因" :visible.sync="noDialogVisible" width="400px"> <div class="body" style="max-height: 60vh;"> <el-row> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>不通过原因:</div> <div class="search_input"> <el-input v-model="tell" size="small" placeholder="请输入不通过原因"></el-input> </div> </el-col> </el-row> </div> <span slot="footer" class="dialog-footer"> <el-row> <el-button @click="noDialogVisible=false,tell=''">取 消</el-button> <el-button type="primary" @click="submitTell" :loading="noLoading">确 定</el-button> </el-row> </span> </el-dialog> </div> <div class="body" style="max-height: 60vh;"> <el-row> <el-col class="search_thing" :span="22"> <div class="search_label"><span class="required-span">* </span>不通过原因:</div> <div class="search_input"> <el-input v-model="tell" size="small" placeholder="请输入不通过原因"></el-input> </div> </el-col> </el-row> </div> <span slot="footer" class="dialog-footer"> <el-row> <el-button @click="noDialogVisible=false,tell=''">取 消</el-button> <el-button type="primary" @click="submitTell" :loading="noLoading">确 定</el-button> </el-row> </span> </el-dialog> </div> </template> <script> import ValueTable from '../../tool/value-table.vue' export default { components: { ValueTable }, props: { active: { type: Number, default: () => 0 }, currentId: { type: Number, default: () => 0 } }, data() { return { template: null, templates: [], addObj: { entrustCode: null, custom: null, company: null, userId: null, type: '0', code: null, appointed: null, remark: null, otcCode: null, mating: 0, sample: null, factory: null, laboratory: null, sampleType: null, sampleNum: 1, unit: null, model: null, method: null }, sample: { sampleCode: null, laboratory: null, factory: null, sampleType: null, sample: null, model: null, sampleNum: 1, isLeave: 0, unit: null }, type: [], selectUserDia: false, componentData2: { entity: { orderBy: { field: 'id', order: 'asc' } }, isIndex: true, showSelect: true, select: false, do: [], tagField: { state: { select: [{ value: 1, type: 'success', label: '启用' }, { value: 0, type: 'danger', label: '停用' }] } }, selectField: {}, }, selectStandardTree: false, search: null, list: [], selectTree: null, expandedKeys: [], sampleList: [], sampleIds: [], methodList: [], addSampleDia: false, count: 1, productList: [], productIds: [], getProductLoad: false, saveLoad: false, templateDia: false, templateLoading: false, templateName: '', issuedDialogVisible: false, distributeData: { appointed: '', userId: '' }, personList: [], upLoad: false, units: [], models: [], methods: [], methodLoad: false, noDialogVisible:false, tell:'', noLoading:false } }, watch: { sampleList() { this.addObj.method = null this.productList = [] } }, mounted() { this.selectEnumByCategoryForType() this.getUserNow() this.selectStandardTreeList() this.selectInsOrderTemplate() this.getAuthorizedPerson(); this.selectEnumByCategoryForUnit() this.selectStandardMethods() if (this.active != 1) { // 查看/审核流程 // 请求接口,回显数据 this.$axios.post(this.$api.insOrder.getInsOrder, { orderId: this.currentId }).then(res => { this.addObj = { ...res.data.insOrder }; this.addObj.type = String(this.addObj.type) this.sampleList = this.HaveJson(res.data.sampleProduct); this.addObj.sampleNum = this.sampleList.length this.$nextTick(() => { this.$refs.sampleTable.doLayout() }) }) } }, methods: { getAuthorizedPerson() { this.$axios.get(this.$api.user.getUserMenu).then(res => { let data = [] res.data.forEach(a => { data.push({ label: a.name, value: a.id }) }) this.personList = data }) }, selectEnumByCategoryForType() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "紧急程度" }).then(res => { this.type = res.data }) }, selectUser() { let selects = this.$refs.ValueTable2.multipleSelection if (selects.length == 0) { this.$message.error('未选择数据') return } delete selects['orderBy'] delete selects['updateUser'] delete selects['updateTime'] this.addObj.userId = selects.id this.addObj.company = selects.company this.addObj.custom = selects.name this.addObj.code = selects.code this.selectUserDia = false }, save() { if (!this.addObj.custom) { this.$message.error('未选择下单客户') import ValueTable from '../../tool/value-table.vue' export default { components: { ValueTable }, props: { active: { type: Number, default: () => 0 }, currentId: { type: Number, default: () => 0 } }, data() { return { template: null, templates: [], addObj: { entrustCode: null, custom: null, company: null, userId: null, type: '0', code: null, appointed: null, remark: null, otcCode: null, mating: 0, sample: null, factory: null, laboratory: null, sampleType: null, sampleNum: 1, unit: null, model: null, method: null, phone: null, processing: 1, isLeave: 0, orderType: null, send: 1, formType: '送检' }, sample: { sampleCode: null, laboratory: null, factory: null, sampleType: null, sample: null, model: null, sampleNum: 1, isLeave: 0, unit: null }, type: [], selectUserDia: false, componentData2: { entity: { orderBy: { field: 'id', order: 'asc' } }, isIndex: true, showSelect: true, select: false, do: [], tagField: { state: { select: [{ value: 1, type: 'success', label: '启用' }, { value: 0, type: 'danger', label: '停用' }] } }, selectField: {}, }, selectStandardTree: false, search: null, list: [], selectTree: null, expandedKeys: [], sampleList: [], sampleIds: [], methodList: [], addSampleDia: false, count: 1, productList: [], productIds: [], getProductLoad: false, saveLoad: false, templateDia: false, templateLoading: false, templateName: '', issuedDialogVisible: false, distributeData: { appointed: '', userId: '' }, personList: [], upLoad: false, units: [], models: [], methods: [], methodLoad: false, noDialogVisible: false, tell: '', noLoading: false, orderType: [], filters: [] } }, watch: { sampleList() { this.addObj.method = null this.productList = [] } }, mounted() { this.selectEnumByCategoryForType() this.getUserNow() this.selectStandardTreeList() this.selectInsOrderTemplate() this.getAuthorizedPerson(); this.selectEnumByCategoryForUnit() this.selectStandardMethods() this.selectEnumByCategoryForOrderType() this.selectEnumByCategoryForSonLaboratory() if (this.active != 1) { // 查看/审核流程 // 请求接口,回显数据 this.$axios.post(this.$api.insOrder.getInsOrder, { orderId: this.currentId }).then(res => { this.addObj = { ...res.data.insOrder }; this.addObj.type = String(this.addObj.type) this.sampleList = this.HaveJson(res.data.sampleProduct); this.addObj.sampleNum = this.sampleList.length this.$nextTick(() => { this.$refs.sampleTable.doLayout() }) }) } }, methods: { getAuthorizedPerson() { this.$axios.get(this.$api.user.getUserMenu).then(res => { let data = [] res.data.forEach(a => { data.push({ label: a.name, value: a.id }) }) this.personList = data }) }, selectEnumByCategoryForType() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "紧急程度" }).then(res => { this.type = res.data }) }, selectUser() { let selects = this.$refs.ValueTable2.multipleSelection if (selects.length == 0) { this.$message.error('未选择数据') return } } delete selects['orderBy'] delete selects['updateUser'] delete selects['updateTime'] this.addObj.userId = selects.id this.addObj.company = selects.company this.addObj.custom = selects.name this.addObj.code = selects.code this.addObj.phone = selects.phone this.selectUserDia = false }, save() { if (!this.addObj.custom) { this.$message.error('未选择下单客户') return } if (!this.addObj.type) { this.$message.error('未选择紧急程度') } else if (this.sampleList.length < 1) { this.$message.error('请添加一个样品') } else if (!this.sampleList.every(m => m.sample)) { this.$message.error('请输入样品名称') } else if (!this.sampleList.every(m => m.model)) { this.$message.error('请输入样品型号') } else if (!this.sampleList.every(m => m.standardMethodListId)) { this.$message.error('请选择检验标准') } else if (!this.sampleList.every(m => m.unit)) { this.$message.error('请输入样品的单位') } else { this.saveLoad = true this.$axios.post(this.$api.insOrder.addInsOrder, { insOrder: this.addObj, list: JSON.stringify(this.sampleList) }, { headers: { 'Content-Type': 'application/json' } }).then(res => { this.saveLoad = false if (res.code == 201) return this.$message.success('已提交') this.$parent.playOrder(0) }) } }, upInsOrderOfState(state) { if(state == 1){ this.$message.error('未选择紧急程度') } else if (!this.addObj.formType) { this.$message.error('请输入来样方式') } else if (!this.addObj.orderType) { this.$message.error('请选择检验类别') } else if (this.sampleList.length < 1) { this.$message.error('请添加一个样品') } else if (!this.sampleList.every(m => m.sample)) { this.$message.error('请输入样品名称') } else if (!this.sampleList.every(m => m.model)) { this.$message.error('请输入样品型号') } else if (!this.sampleList.every(m => m.standardMethodListId)) { this.$message.error('请选择检验标准') } else if (!this.sampleList.every(m => m.unit)) { this.$message.error('请输入样品的单位') } else { this.saveLoad = true this.$axios.post(this.$api.insOrder.addInsOrder, { insOrder: this.addObj, list: JSON.stringify(this.sampleList) }, { headers: { 'Content-Type': 'application/json' } }).then(res => { this.saveLoad = false if (res.code == 201) return this.$message.success('已提交') this.$parent.playOrder(0) }) } }, upInsOrderOfState(state) { if (state == 1) { this.saveLoad = true this.$axios.post(this.$api.insOrder.upInsOrderOfState, { state, @@ -720,421 +763,434 @@ // } else { // this.$parent.playOrder(0) // } this.issuedDialogVisible = true; this.$axios.post(this.$api.insOrder.selectOrderManDay, { id: this.currentId }).then(ress => { this.distributeData.orderId = this.currentId this.distributeData.appointed = ress.data }) setTimeout(()=>{ this.issuedDialogVisible = true; },1000) }) }else{ } else { // 不通过 this.noDialogVisible = true } }, // 下发 submitForm2() { if (this.distributeData.appointed == null || this.distributeData.appointed == '') { this.$message.error('约定时间未填写') return } if (this.addObj.type == 2&&(this.distributeData.userId == null || this.distributeData.userId == '')) { this.$message.error('指派人员未填写') return } this.upLoad = true; this.$axios.post(this.$api.insOrder.upInsOrder, { orderId: this.distributeData.orderId, appointed: this.distributeData.appointed, userId: this.distributeData.userId }).then(res => { if (res.code === 201) { this.upLoad = false return } this.$message.success('提交成功') this.upLoad = false this.issuedDialogVisible = false this.$parent.playOrder(0) }).catch(e => { this.$message.error('提交失败') this.upLoad = false }) }, getUserNow() { this.$axios.get(this.$api.user.getUserNow).then(res => { let selects = res.data if (selects == null) return this.addObj.userId = selects.id this.addObj.company = selects.company this.addObj.custom = selects.name this.addObj.code = selects.code }) }, searchFilter() { this.$refs.tree.filter(this.search) }, 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') }, handleNodeClick(val, node, el) { //树的值 this.selectTree = '' this.models = val.children 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(' - ', '') }, getNodeParent(val) { if (val.parent != null) { this.selectTree += ' - ' + val.label this.getNodeParent(val.parent) } }, selectStandardTreeList() { this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res => { this.list = res.data this.list.forEach(a => { a.children.forEach(b => { this.expandedKeys.push(b.label) }) }) }) }, filterNode(value, data) { if (!value) return true; return data.label.indexOf(value) !== -1; }, activeStandardTree() { let trees = this.selectTree.split(" - ") if (trees.length < 4) { this.$message.error('未选择样品') return } this.addObj.factory = trees[0] this.addObj.laboratory = trees[1] this.addObj.sampleType = trees[2] this.addObj.sample = trees[3] this.addObj.model = (trees[4] == undefined ? null : trees[4]) this.selectStandardTree = false this.sampleList = [] for (var i = 0; i < this.addObj.sampleNum; i++) { this.sample.joinName = null this.sample.joinModel = null this.sample.joinNum = 1 this.sample.sample = this.addObj.sample this.sample.model = this.addObj.model this.sample.unit = this.addObj.unit this.sample.standardMethodListId = null this.sample.insProduct = [] this.sample.id = this.count this.sampleList.push(this.HaveJson(this.sample)) this.count++ } this.$refs.sampleTable.doLayout() // this.selectsStandardMethodByFLSSM() }, selectsStandardMethodByFLSSM() { this.methodLoad = true this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, { tree: this.selectTree }).then(res => { this.methodLoad = false try { if (res.data.standardMethodList.length == 0 && this.selectTree.split('-').length == 5) { let arr = this.selectTree.split('-') let arr0 = arr.slice(0, arr.length - 1) let selectTree = arr0.join('-').substring(0, arr0.join('-').length - 1) this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, { tree: selectTree }).then(ress => { this.methods = ress.data.standardMethodList }) } else { this.methods = res.data.standardMethodList } } catch (e) {} }) }, addStandardTree() { if (this.selectTree == null) return this.sampleList = [] for (var i = 0; i < this.addObj.sampleNum; i++) { this.sample.joinName = null this.sample.joinModel = null this.sample.joinNum = 1 this.sample.sample = this.addObj.sample this.sample.model = this.addObj.model this.sample.unit = this.addObj.unit this.sample.standardMethodListId = null this.sample.insProduct = [] this.sample.id = this.count this.sampleList.push(this.HaveJson(this.sample)) this.count++ } }, selectSample(val) { this.sampleIds = [] val.forEach(a => { this.sampleIds.push(a.id) }) }, onSample() { if (this.sample.sample == null || this.sample.sample == '') { this.$message.error('请选择样品') return } if (this.sample.model == null || this.sample.model == '') { this.$message.error('请输入样品型号') return } // this.getProductLoad = true /* this.$axios.post(this.$api.standardTree.selectStandardProductList, { factory: this.sample.factory, laboratory: this.sample.laboratory, sampleType: this.sample.sampleType, sample: this.sample.sample, model: this.sample.model }, { headers: { 'Content-Type': 'application/json' } }).then(res => { res.data.forEach(a => { a.state = 1 }) for (var i = 0; i < this.sample.sampleNum; i++) { this.sample.joinName = null this.sample.joinModel = null this.sample.joinNum = 1 this.sample.insProduct = res.data this.sample.id = this.count this.sampleList.push(this.HaveJson(this.sample)) this.count++ } this.$refs.sampleTable.doLayout() this.getProductLoad = false this.addSampleDia = false this.sample = { sampleCode: null, laboratory: null, factory: null, sampleType: null, sample: null, model: null, sampleNum: 1, isLeave: 0, } }) */ }, delSample() { this.sampleIds.forEach(a => { for (var i = 0; i < this.sampleList.length; i++) { if (this.sampleList[i].id == a) { this.sampleList.splice(i, 1) i -= 1 break } } }) this.$refs.sampleTable.doLayout() }, selectProduct(val) { this.productIds = [] val.forEach(a => { this.productIds.push(a.id) }) }, rowClick(row, column, event) { this.productList = row.insProduct setTimeout(() => { this.productList.forEach(a => { if (a.state == 1) this.toggleSelection(a) }) }, 200) }, toggleSelection(row) { this.$refs.productTable.toggleRowSelection(row, true); }, upProductSelect(selection, row) { row.state = row.state == 1 ? 0 : 1 this.sampleList.map(item => { if (this.sampleIds.indexOf(item.id) > -1) { item.insProduct.map(m => { if (m.id == row.id) { m.state = row.state; } return m; }) } return item }) }, tableRowClassName({ row, rowIndex }) { if (row.state === 0) { return 'warning-row'; } return ''; }, selectInsOrderTemplate() { this.$axios.get(this.$api.insOrder.selectInsOrderTemplate).then(res => { if (res.code == 201) return this.templates = res.data }) }, // 删除模板--调用接口 handleDelete(row) { this.$confirm('是否删除当前数据?', "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { this.$axios.post(this.$api.insOrder.delInsOrderTemplate, { id: row.id }).then(res => { if (res.code === 201) { return } this.$message.success('删除成功') this.selectInsOrderTemplate() }).catch(e => { this.$message.error('删除失败') }) }).catch(() => {}) }, // 保存模板 addTemplateDia() { if (this.templateName) { this.templateLoading = true; this.$axios.post(this.$api.insOrder.addInsOrderTemplate, { name: this.templateName, thing: JSON.stringify({ addObj: this.addObj, sampleList: this.sampleList }) }, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code == 201) return this.templateLoading = false; this.templateDia = false; this.$message.success('保存成功') this.selectInsOrderTemplate() this.templateName = '' }) } else { this.$message.error('请填写模板名称') } }, // 查询模板 selectInsOrderTemplateById(e) { this.$axios.post(this.$api.insOrder.selectInsOrderTemplateById + '?id=' + e).then(res => { if (res.code == 201) return let obj = JSON.parse(res.data) this.addObj = obj.addObj; this.sampleList = obj.sampleList; }) }, delSampleAndProduct() { this.sampleList.splice(scope.$index, 1) this.productList = [] }, selectEnumByCategoryForUnit() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "单位" }).then(res => { this.units = res.data }) }, methodChange(val, row) { this.getProductLoad = true this.$axios.post(this.$api.standardTree.selectStandardProductList, { model: this.addObj.model, standardMethodListId: val }, { headers: { 'Content-Type': 'application/json' } }).then(res => { res.data.forEach(a => { a.state = 1 }) row.insProduct = this.HaveJson(res.data) this.getProductLoad = false this.productList = row.insProduct this.$refs.sampleTable.setCurrentRow(row) setTimeout(() => { this.productList.forEach(a => { if (a.state == 1) this.toggleSelection(a) }) }, 200) }) }, methodFocus() { this.selectsStandardMethodByFLSSM() }, handleChangeModel(e) { let num = this.selectTree.split('-').length; if (num == 4) { this.selectTree = this.selectTree + ' - ' + e } else { let arr = this.selectTree.split('-') let arr0 = arr.slice(0, arr.length - 1) this.selectTree = arr0.join('-') + '- ' + e } }, // 要求值变化时 requestChange(e, row) { this.sampleList.map(item => { if (this.sampleIds.indexOf(item.id) > -1) { item.insProduct.map(m => { if (m.id == row.id) { m.ask = e; } return m; }) } return item }) }, selectStandardMethods() { this.$axios.get(this.$api.standardTree.selectStandardMethodEnum).then(res => { this.methods = res.data }) }, selectable(){ if(this.active>1){ }, // 下发 submitForm2() { if (this.distributeData.appointed == null || this.distributeData.appointed == '') { this.$message.error('约定时间未填写') return } if (this.addObj.type == 2 && (this.distributeData.userId == null || this.distributeData.userId == '')) { this.$message.error('指派人员未填写') return } this.upLoad = true; this.$axios.post(this.$api.insOrder.upInsOrder, { orderId: this.distributeData.orderId, appointed: this.distributeData.appointed, userId: this.distributeData.userId }).then(res => { if (res.code === 201) { this.upLoad = false return } this.$message.success('提交成功') this.upLoad = false this.issuedDialogVisible = false this.$parent.playOrder(0) }).catch(e => { this.$message.error('提交失败') this.upLoad = false }) }, getUserNow() { this.$axios.get(this.$api.user.getUserNow).then(res => { let selects = res.data if (selects == null) return this.addObj.userId = selects.id this.addObj.company = selects.company this.addObj.custom = selects.name this.addObj.code = selects.code this.addObj.phone = selects.phone }) }, searchFilter() { this.$refs.tree.filter(this.search) }, 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') }, handleNodeClick(val, node, el) { //树的值 this.selectTree = '' this.models = val.children 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(' - ', '') }, getNodeParent(val) { if (val.parent != null) { this.selectTree += ' - ' + val.label this.getNodeParent(val.parent) } }, selectStandardTreeList() { this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res => { this.list = res.data this.list.forEach(a => { a.children.forEach(b => { this.expandedKeys.push(b.label) }) }) }) }, filterNode(value, data) { if (!value) return true; return data.label.indexOf(value) !== -1; }, activeStandardTree() { let trees = this.selectTree.split(" - ") if (trees.length < 4) { this.$message.error('未选择样品') return } this.addObj.factory = trees[0] this.addObj.laboratory = trees[1] this.addObj.sampleType = trees[2] this.addObj.sample = trees[3] this.addObj.model = (trees[4] == undefined ? null : trees[4]) this.selectStandardTree = false this.sampleList = [] for (var i = 0; i < this.addObj.sampleNum; i++) { this.sample.joinName = null this.sample.joinModel = null this.sample.joinNum = 1 this.sample.sample = this.addObj.sample this.sample.model = this.addObj.model this.sample.unit = this.addObj.unit this.sample.standardMethodListId = null this.sample.insProduct = [] this.sample.id = this.count this.sampleList.push(this.HaveJson(this.sample)) this.count++ } this.$refs.sampleTable.doLayout() // this.selectsStandardMethodByFLSSM() }, selectsStandardMethodByFLSSM() { this.methodLoad = true this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, { tree: this.selectTree }).then(res => { this.methodLoad = false try { if (res.data.standardMethodList.length == 0 && this.selectTree.split('-').length == 5) { let arr = this.selectTree.split('-') let arr0 = arr.slice(0, arr.length - 1) let selectTree = arr0.join('-').substring(0, arr0.join('-').length - 1) this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, { tree: selectTree }).then(ress => { this.methods = ress.data.standardMethodList }) } else { this.methods = res.data.standardMethodList } } catch (e) {} }) }, addStandardTree() { if (this.selectTree == null) return this.sampleList = [] for (var i = 0; i < this.addObj.sampleNum; i++) { this.sample.joinName = null this.sample.joinModel = null this.sample.joinNum = 1 this.sample.sample = this.addObj.sample this.sample.model = this.addObj.model this.sample.unit = this.addObj.unit this.sample.standardMethodListId = null this.sample.insProduct = [] this.sample.id = this.count this.sampleList.push(this.HaveJson(this.sample)) this.count++ } }, selectSample(val) { this.sampleIds = [] val.forEach(a => { this.sampleIds.push(a.id) }) }, onSample() { if (this.sample.sample == null || this.sample.sample == '') { this.$message.error('请选择样品') return } if (this.sample.model == null || this.sample.model == '') { this.$message.error('请输入样品型号') return } // this.getProductLoad = true /* this.$axios.post(this.$api.standardTree.selectStandardProductList, { factory: this.sample.factory, laboratory: this.sample.laboratory, sampleType: this.sample.sampleType, sample: this.sample.sample, model: this.sample.model }, { headers: { 'Content-Type': 'application/json' } }).then(res => { res.data.forEach(a => { a.state = 1 }) for (var i = 0; i < this.sample.sampleNum; i++) { this.sample.joinName = null this.sample.joinModel = null this.sample.joinNum = 1 this.sample.insProduct = res.data this.sample.id = this.count this.sampleList.push(this.HaveJson(this.sample)) this.count++ } this.$refs.sampleTable.doLayout() this.getProductLoad = false this.addSampleDia = false this.sample = { sampleCode: null, laboratory: null, factory: null, sampleType: null, sample: null, model: null, sampleNum: 1, isLeave: 0, } }) */ }, delSample() { this.sampleIds.forEach(a => { for (var i = 0; i < this.sampleList.length; i++) { if (this.sampleList[i].id == a) { this.sampleList.splice(i, 1) i -= 1 break } } }) this.$refs.sampleTable.doLayout() }, selectProduct(val) { this.productIds = [] val.forEach(a => { this.productIds.push(a.id) }) }, rowClick(row, column, event) { this.productList = row.insProduct setTimeout(() => { this.productList.forEach(a => { if (a.state == 1) this.toggleSelection(a) }) }, 200) }, toggleSelection(row) { this.$refs.productTable.toggleRowSelection(row, true); }, upProductSelect(selection, row) { row.state = row.state == 1 ? 0 : 1 this.sampleList.map(item => { if (this.sampleIds.indexOf(item.id) > -1) { item.insProduct.map(m => { if (m.id == row.id) { m.state = row.state; } return m; }) } return item }) }, tableRowClassName({ row, rowIndex }) { if (row.state === 0) { return 'warning-row'; } return ''; }, selectInsOrderTemplate() { this.$axios.get(this.$api.insOrder.selectInsOrderTemplate).then(res => { if (res.code == 201) return this.templates = res.data }) }, // 删除模板--调用接口 handleDelete(row) { this.$confirm('是否删除当前数据?', "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { this.$axios.post(this.$api.insOrder.delInsOrderTemplate, { id: row.id }).then(res => { if (res.code === 201) { return } this.$message.success('删除成功') this.selectInsOrderTemplate() }).catch(e => { this.$message.error('删除失败') }) }).catch(() => {}) }, // 保存模板 addTemplateDia() { if (this.templateName) { this.templateLoading = true; this.$axios.post(this.$api.insOrder.addInsOrderTemplate, { name: this.templateName, thing: JSON.stringify({ addObj: this.addObj, sampleList: this.sampleList }) }, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code == 201) return this.templateLoading = false; this.templateDia = false; this.$message.success('保存成功') this.selectInsOrderTemplate() this.templateName = '' }) } else { this.$message.error('请填写模板名称') } }, // 查询模板 selectInsOrderTemplateById(e) { this.$axios.post(this.$api.insOrder.selectInsOrderTemplateById + '?id=' + e).then(res => { if (res.code == 201) return let obj = JSON.parse(res.data) this.addObj = obj.addObj; this.sampleList = obj.sampleList; }) }, delSampleAndProduct() { this.sampleList.splice(scope.$index, 1) this.productList = [] }, selectEnumByCategoryForUnit() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "单位" }).then(res => { this.units = res.data }) }, selectEnumByCategoryForOrderType() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "检验类别" }).then(res => { this.orderType = res.data if(res.data.length > 0){ this.addObj.orderType = res.data[0].value } }) }, methodChange(val, row) { this.getProductLoad = true this.$axios.post(this.$api.standardTree.selectStandardProductList, { model: this.addObj.model, standardMethodListId: val }, { headers: { 'Content-Type': 'application/json' } }).then(res => { res.data.forEach(a => { a.state = 0 }) row.insProduct = this.HaveJson(res.data) this.getProductLoad = false this.productList = row.insProduct this.$refs.sampleTable.setCurrentRow(row) setTimeout(() => { this.productList.forEach(a => { if (a.state == 1) this.toggleSelection(a) }) }, 200) }) }, methodFocus() { this.selectsStandardMethodByFLSSM() }, handleChangeModel(e) { let num = this.selectTree.split('-').length; if (num == 4) { this.selectTree = this.selectTree + ' - ' + e } else { let arr = this.selectTree.split('-') let arr0 = arr.slice(0, arr.length - 1) this.selectTree = arr0.join('-') + '- ' + e } }, // 要求值变化时 requestChange(e, row) { this.sampleList.map(item => { if (this.sampleIds.indexOf(item.id) > -1) { item.insProduct.map(m => { if (m.id == row.id) { m.ask = e; } return m; }) } return item }) }, selectStandardMethods() { this.$axios.get(this.$api.standardTree.selectStandardMethodEnum).then(res => { this.methods = res.data }) }, selectable() { if (this.active > 1) { return false }else{ } else { return true } }, handleAll(e){ if(e.length>0){ this.productList.map(m=>{ handleAll(e) { if (e.length > 0) { this.productList.map(m => { m.state = 1 return m }) }else{ this.productList.map(m=>{ } else { this.productList.map(m => { m.state = 0 return m }) } if(e.length>0){ if (e.length > 0) { this.sampleList.map(item => { if (this.sampleIds.indexOf(item.id) > -1) { item.insProduct.map(m => { @@ -1144,7 +1200,7 @@ } return item }) }else{ } else { this.sampleList.map(item => { if (this.sampleIds.indexOf(item.id) > -1) { item.insProduct.map(m => { @@ -1155,33 +1211,50 @@ return item }) } this.$nextTick(()=>{ this.$nextTick(() => { this.$refs.productTable.doLayout() }) }, submitTell(){ submitTell() { if (!this.tell) { this.$message.error('请输入不通过原因') this.$message.error('请输入不通过原因') return } } this.noLoading = true; this.$axios.post(this.$api.insOrder.upInsOrderOfState, { state:2, id: this.currentId, tell:this.tell }, { headers: { 'Content-Type': 'application/json' } }).then(res => { this.noLoading = false; this.tell = ''; if (res.code == 201) return this.$message.success('提交成功') this.issuedDialogVisible = false; this.$parent.playOrder(0) state: 2, id: this.currentId, tell: this.tell }, { headers: { 'Content-Type': 'application/json' } }).then(res => { this.noLoading = false; this.tell = ''; if (res.code == 201) return this.$message.success('提交成功') this.issuedDialogVisible = false; this.$parent.playOrder(0) }) }, selectEnumByCategoryForSonLaboratory() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "子实验室" }).then(res => { this.factory = [] res.data.forEach(a=>{ this.filters.push({ text: a.label, value: a.value }) }) }) }, filterHandler(value, row, column) { const property = column['property']; return row[property] === value; } } } } } </script> src/components/do/b1-inspect-order-plan/Inspection.vue
@@ -138,6 +138,12 @@ color: #3A7BFA; background-color: #fff; } .inspection .center-box .el-input__inner{ font-size: 12px; padding: 0 6px; text-align: center; } </style> <template> <div v-loading="loading" class="inspection"> @@ -193,9 +199,9 @@ :rowspan="n.v.mc&&n.v.mc.rs?n.v.mc.rs:1" :style="`background:${n.v.bg};color:${n.v.fc};font-size:${n.v.fs}px;width:${item.style.columnlen[n.c]}px !important;height:${item.style.rowlen[n.r]}px;font-wight:${n.v.bl?'bold':''};`"> <div class="content" :class="`content-h-${n.v.ht} content-v-${n.v.vt}`"> <template v-if="n.v.ps!=undefined && n.v.ps.value==='检验值'"> <template v-if="n.v.ps!=undefined && n.v.ps.value==='检验值' && state==1"> <el-input v-if="getInspectionValueType(n.i) == 1" class="table_input" v-model="n.v.v" :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')||state>1" :disabled="getInspectionItemType(n.i) == 1 || (n.u != userId && n.u != undefined && n.u != '')" @change="m=>changeInput(m,`${item.templateId}-${n.r}-${n.c}-${n.i}`)"> <el-button slot="append" type="primary" icon="el-icon-edit" size="mini" v-if="getInspectionItemType(n.i) == 1" @click="getSystemValue(n)"></el-button> </el-input> @@ -214,9 +220,9 @@ <span v-else-if="n.v.v===0" :style="`font-family:${n.v.ff} !important;color: red;`">不合格</span> <span v-else :style="`font-family:${n.v.ff} !important;`">待定</span> </template> <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='设备编码'"> <template v-else-if="n.v.ps!=undefined && n.v.ps.value==='设备编码' && state==1"> <el-select v-model="n.v.v" placeholder="设备" @visible-change="e=>getEquipOptions(e,n.i)" :disabled="state>1"> remote @change="(val)=>changeEquip(val, n)"> <el-option v-for="item in equipOptions" :key="item.value" :label="item.value" :value="item.value"> </el-option> </el-select> @@ -261,12 +267,12 @@ <ValueTable class="value-table" ref="insOrderPlan" :url="$api.insOrderPlan.selectInsOrderPlanList" :componentData="componentData" :key="upIndex" /> </el-drawer> <el-dialog title="检验复核" :visible.sync="reviewDia" width="400px"> <div class="body" style="display: flex;" v-if="reviewDia"> <div class="search_label" style="width: 120px;"><span class="required-span">* </span>不通过原因:</div> <div class="search_input"> <el-dialog title="检验复核" :visible.sync="reviewDia" width="500px"> <div class="body" style="display: flex;padding: 10px;" v-if="reviewDia"> <div class="search_label" style="width: 150px;"><span class="required-span">* </span>不通过的理由:</div> <div class="search_input" style="width: 100%;"> <el-input size="small" clearable v-model="noReason" type="textarea" :autosize="{ minRows: 3, maxRows: 5}"></el-input> :autosize="{ minRows: 4}"></el-input> </div> </div> <span slot="footer" class="dialog-footer"> @@ -375,6 +381,7 @@ comValue: [], resValue: null, equipValue: [], equipName: [], insResult: null } }) @@ -396,6 +403,7 @@ comValue: [], resValue: null, equipValue: [], equipName: [], insResult: null } }) @@ -616,6 +624,10 @@ b.v.v = '' this.param[b.i].equipValue.push(b) } if (b.v.ps != undefined && b.v.ps.value === '设备名称') { b.v.v = '' this.param[b.i].equipName.push(b) } if (b.v.ps != undefined && b.v.ps.value === '最终值') { b.v.v = '' if (b.i === undefined) { @@ -674,6 +686,12 @@ let equipValue = JSON.parse(a.insProductResult.equipValue) for (var i = 0; i < equipValue.length; i++) { this.param[a.id].equipValue[i].v.v = equipValue[i].v } } catch (e) {} try { let equipName = JSON.parse(a.insProductResult.equipName) for (var i = 0; i < equipName.length; i++) { this.param[a.id].equipName[i].v.v = equipName[i].v } } catch (e) {} try { @@ -893,9 +911,11 @@ }, getEquipOptions(e, id) { if (e) { let category = this.currentSample.insProduct.find(m => m.id == id).deviceGroup this.equipOptions = [] let product = this.currentSample.insProduct.find(m => m.id == id) this.$axios.post(this.$api.deviceScope.selectDeviceByCategory, { category inspectionItem: product.inspectionItem, inspectionItemSubclass: product.inspectionItemSubclass }).then(res => { if (res.code === 200 && res.data) { this.equipOptions = res.data.map(m => { @@ -989,6 +1009,17 @@ } this.$message.success('已保存') }) }, changeEquip(val,n){ for(let i in this.equipOptions){ if(this.equipOptions[i].value === val){ for(let i1 in this.param[n.i].equipName){ if(this.param[n.i].equipName[i1].i === n.i && this.param[n.i].equipName[i1].r === n.r){ this.param[n.i].equipName[i1].v.v = this.equipOptions[i].label } } } } } } } src/components/view/a5-capacity-scope.vue
@@ -210,8 +210,8 @@ }], tagField: {}, selectField: {}, requiredAdd: ['specimenName'], requiredUp: ['specimenName'] requiredAdd: ['specimenName','code'], requiredUp: ['specimenName','code'] }, itemParameterEntityCopy: {}, testObjectDataEntityCopy: {}, src/components/view/a5-laboratory-qualifications.vue
@@ -61,7 +61,7 @@ </el-radio-group> </el-col> <el-col :span="12" style="text-align: right;" v-if="radio==0"> <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">新增</el-button> <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">资质更新</el-button> <el-button size="medium" icon="el-icon-delete" @click="handleDel" v-if="delPower">删除</el-button> </el-col> </el-row> @@ -149,7 +149,7 @@ </div> <el-dialog title="资质更新" :visible.sync="qualificationsConnectVisible" width="400px"> <div class="search_thing" style="margin-bottom: 16px;"> <div class="search_label" style="width:120px">资质名称:</div> <div class="search_label" style="width:120px"><span class="required-span">* </span>资质名称:</div> <div class="search_input"> <el-select v-model="formData.name" placeholder="请选择" style="width: 100%;" size="small" clearable> <el-option @@ -162,7 +162,7 @@ </div> </div> <div class="search_thing" style="margin-bottom: 16px;"> <div class="search_label" style="width:120px">资质编码:</div> <div class="search_label" style="width:120px"><span class="required-span">* </span>资质编码:</div> <div class="search_input"> <el-input size="small" @@ -172,7 +172,7 @@ </div> </div> <div class="search_thing" style="margin-bottom: 16px;"> <div class="search_label" style="width:120px">颁发机构:</div> <div class="search_label" style="width:120px"><span class="required-span">* </span>颁发机构:</div> <div class="search_input"> <el-input size="small" @@ -191,7 +191,7 @@ v-model="formData.explanation"></el-input> </div> </div> <div class="search_thing" style="margin-bottom: 16px;"> <!-- <div class="search_thing" style="margin-bottom: 16px;"> <div class="search_label" style="width:120px">首次颁发时间:</div> <div class="search_input"> <el-date-picker style="width:100%" v-model="formData.firstTime" @@ -216,9 +216,9 @@ placeholder="选择日期"> </el-date-picker> </div> </div> </div> --> <div class="search_thing" style="margin-bottom: 16px;"> <div class="search_label" style="width:120px">到期颁发时间:</div> <div class="search_label" style="width:120px"><span class="required-span">* </span>到期时间:</div> <div class="search_input"> <el-date-picker style="width:100%" v-model="formData.expireTime" type="datetime" src/components/view/b1-inspect-order-plan.vue
@@ -229,7 +229,7 @@ type: 'text', method: 'handleInspection', disabFun: (row, index) => { return row.userId == null || row.insState == 3 return row.userId == null || row.insState == 3 || row.insState == 5 } }, { id: '', @@ -237,7 +237,7 @@ type: 'text', method: 'handleConnect', disabFun: (row, index) => { return row.userId == null || row.insState == 3 return row.userId == null || row.orderUserId == null || row.insState == 5 || row.insState == 3 } }, { src/components/view/b1-inspection-order.vue
@@ -172,7 +172,7 @@ </el-row> </span> </el-dialog> <el-dialog title="数据查看" :visible.sync="dataDialogVisible" width="70%"> <el-dialog title="数据查看" :visible.sync="dataDialogVisible" width="80%"> <div style="height: 70vh;overflow-y: auto;" v-if="dataDialogVisible"> <ValueTable ref="ValueTableDataLook" :url="$api.insOrder.selectSampleAndProductByOrderId" :componentData="componentDataDataLook"/> @@ -233,7 +233,7 @@ type: 'text', method: 'handleDataLook', disabFun: (row, index) => { return row.state != 1 return row.state != 1 && row.state != 4 } }, { id: 'download', @@ -241,7 +241,7 @@ type: 'text', method: 'download', disabFun: (row, index) => { return row.state != 1 || row.reportId == null return row.state != 4 || row.reportId == null } }, { id: 'verify', @@ -257,7 +257,7 @@ type: 'text', method: 'handlEquash', disabFun: (row, index) => { return row.state == 2 || row.state == 3 return row.state != 1 && row.state != 0 } }, { font: '分配', @@ -290,7 +290,37 @@ }, createUser: { select: [] } }, orderType: { select: [] }, processing: { select: [{ value: 1, label: '实验室处理' },{ value: 0, label: '委托单位取回' }] }, isLeave: { select: [{ value: 1, label: '留样' },{ value: 0, label: '不留样' }] }, send: { select: [{ value: 1, label: '自取' },{ value: 0, label: '其他' }] } }, selectField: {}, requiredAdd: [], @@ -322,10 +352,25 @@ label: '不合格', type: 'danger' }] }, inspectionValueType: {select: []} } }, selectField: {}, spanConfig:{ rows:[ { name:'sampleCode', index:0 }, { name:'sample', index:1 }, { name:'model', index:2 } ] }, requiredAdd: [], requiredUp: [] }, @@ -364,7 +409,7 @@ this.getUserMenu() this.getAuthorizedPerson() this.getInsStateDicts() this.selectEnumByCategoryForInspectionValueType() this.selectEnumByCategoryForOrderType() }, methods: { getAuthorizedPerson() { @@ -436,7 +481,9 @@ this.dataDialogVisible = true; }, // 下载报告 download(row) {}, download(row) { console.log(row); }, // 审核 handleVerify(row) { // this.verifyDialogVisible = true; @@ -537,13 +584,13 @@ this.componentDataDataLook.tagField.insState.select = data }) }, selectEnumByCategoryForInspectionValueType() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "检验值类型" }).then(res => { this.componentDataDataLook.tagField.inspectionValueType.select = res.data }) }, selectEnumByCategoryForOrderType() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "检验类别" }).then(res => { this.componentData.tagField.orderType.select = res.data }) }, } } </script> src/components/view/b1-report-preparation.vue
@@ -35,24 +35,24 @@ padding: 20px; } .el-form-item { margin-bottom: 16px; } .el-form-item { margin-bottom: 16px; } .full-screen{ .full-screen { position: absolute; right: 52px; top: 22px; } .btns{ .btns { position: absolute; right: 100px; top: 17px; } .fullscreen{ height:82vh .fullscreen { height: 82vh } </style> @@ -76,30 +76,33 @@ <el-input size="small" placeholder="请输入" clearable v-model="componentData.entity.entrustCode" @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> </div> <!-- <input id="input" type="file" accept=".doc,.docx"></input> --> <div class="table"> <ValueTable ref="ValueTable" :url="$api.insReport.pageInsReport" :componentData="componentData" :key="upIndex"/> </div> </div> <el-dialog title="在线编制" :visible.sync="claimVisible" width="22cm" :modal-append-to-body="false" :fullscreen="fullscreen"> <div class="full-screen"> <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i> <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" > </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> </div> <Word style="height:70vh" :class="{fullscreen:fullscreen}" v-if="claimVisible" ref="Word" :value="value"/> <span slot="footer" class="dialog-footer"> <el-button @click="claimVisible = false">取 消</el-button> <el-button type="primary" @click="confirmClaim">确 定</el-button> </span> </el-dialog> <el-dialog title="报告审核" :visible.sync="issuedVisible" width="400px" :modal-append-to-body="false" :fullscreen="fullscreen"> <!-- <input id="input" type="file" accept=".doc,.docx"></input> --> <div class="table"> <ValueTable ref="ValueTable" :url="$api.insReport.pageInsReport" :componentData="componentData" :key="upIndex" /> </div> </div> <el-dialog title="在线编制" :visible.sync="claimVisible" width="22cm" :modal-append-to-body="false" :fullscreen="fullscreen"> <div class="full-screen"> <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i> <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;"> </div> <Word style="height:70vh" :class="{fullscreen:fullscreen}" v-if="claimVisible" ref="Word" :value="value" /> <span slot="footer" class="dialog-footer"> <el-button @click="claimVisible = false">取 消</el-button> <el-button type="primary" @click="confirmClaim">确 定</el-button> </span> </el-dialog> <el-dialog title="报告审核" :visible.sync="issuedVisible" width="400px" :modal-append-to-body="false" :fullscreen="fullscreen"> <!-- <div class="full-screen"> <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i> <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" > @@ -109,18 +112,17 @@ <el-button size="small">不通过</el-button> </div> --> <span slot="footer" class="dialog-footer"> <el-button @click="issuedReasonVisible=true">不通过</el-button> <el-button @click="issuedReasonVisible=true" :disabled="loadingIssued">不通过</el-button> <el-button type="primary" @click="subIssued" :loading="loadingIssued">通 过</el-button> </span> </el-dialog> <el-dialog title="不通过原因" :visible.sync="issuedReasonVisible" width="400px" :modal-append-to-body="false"> <div class="search_thing"> <div class="search_label">不通过原因:</div> <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="reason"></el-input></div> <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="reason"></el-input></div> </div> <span slot="footer" class="dialog-footer"> <el-button @click="issuedReasonVisible=false">取消</el-button> <el-button @click="issuedReasonVisible=false" :disabled="loadingIssuedReason">取消</el-button> <el-button type="primary" @click="handleIssuedReason" :loading="loadingIssuedReason">确定</el-button> </span> </el-dialog> @@ -134,18 +136,17 @@ <el-button size="small">不批准</el-button> </div> --> <span slot="footer" class="dialog-footer"> <el-button @click="approveReasonVisible=true">不批准</el-button> <el-button @click="approveReasonVisible=true" :disabled="loadingApprove">不批准</el-button> <el-button type="primary" @click="subApprove" :loading="loadingApprove">批 准</el-button> </span> </el-dialog> <el-dialog title="不批准原因" :visible.sync="approveReasonVisible" width="400px" :modal-append-to-body="false"> <div class="search_thing"> <div class="search_label">不批准原因:</div> <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="reason"></el-input></div> <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="reason"></el-input></div> </div> <span slot="footer" class="dialog-footer"> <el-button @click="approveReasonVisible=false">取消</el-button> <el-button @click="approveReasonVisible=false" :disabled="loadingApproveReason">取消</el-button> <el-button type="primary" @click="handleApproveReason" :loading="loadingApproveReason">确定</el-button> </span> </el-dialog> @@ -156,10 +157,12 @@ import ValueTable from '../tool/value-table.vue' import Word from '../tool/word.vue' import file from '../../util/file'; import { convertToHtml } from 'mammoth'; export default { components: { ValueTable, import { convertToHtml } from 'mammoth'; export default { components: { ValueTable, Word, }, data() { @@ -177,65 +180,67 @@ showSelect: false, select: false, do: [ // { // id: 'handleWeave', // font: '在线编制', // type: 'text', // method: 'handleWeave', // disabFun: (row, index) => { // return row.isExamine != null // } // }, { id: 'download', font: '下载', type: 'text', method: 'download' }, { id: 'handleUpload', font: '上传', type: 'upload', uploadConfig:{ url:this.$api.insReport.inReport, accept:'.docx' }, method: 'handleUpload', disabFun: (row, index) => { return row.isExamine != null // { // id: 'handleWeave', // font: '在线编制', // type: 'text', // method: 'handleWeave', // disabFun: (row, index) => { // return row.isExamine != null // } // }, { id: 'download', font: '下载', type: 'text', method: 'download' }, { id: 'handleUpload', font: '上传', type: 'upload', uploadConfig: { url: this.$api.insReport.inReport, accept: '.docx' }, method: 'handleUpload', disabFun: (row, index) => { return row.isExamine != null } }, { id: 'handleRestore', font: '还原', type: 'text', method: 'handleRestore', disabFun: (row, index) => { return row.isExamine != null } }, { id: 'handleSubmit', font: '提交', type: 'text', method: 'handleSubmit', disabFun: (row, index) => { return row.state != 0 } }, { id: 'handleIssued', font: '审核', type: 'text', method: 'handleIssued', disabFun: (row, index) => { return row.state == null || row.state == 0 || row.isExamine == 1 } }, { id: 'handleApprove', font: '批准', type: 'text', method: 'handleApprove', disabFun: (row, index) => { return row.state == null || row.state == 0 || row.isExamine == 0 || row.isExamine == null || row .isRatify == 1 } } }, { id: 'handleRestore', font: '还原', type: 'text', method: 'handleRestore', disabFun: (row, index) => { return row.isExamine != null } },{ id: 'handleSubmit', font: '提交', type: 'text', method: 'handleSubmit', disabFun: (row, index) => { return row.state != 0 } }, { id: 'handleIssued', font: '审核', type: 'text', method: 'handleIssued', disabFun: (row, index) => { return row.state == null||row.state == 0 ||row.isExamine == 1 } }, { id: 'handleApprove', font: '批准', type: 'text', method: 'handleApprove', disabFun: (row, index) => { return row.state == null||row.state == 0||row.isExamine == 0||row.isExamine == null ||row.isRatify==1 } }], ], linkEvent: { // code: { // method: 'selectAllByOne' @@ -285,17 +290,17 @@ statusList: [], claimVisible: false, issuedVisible: false, issuedReasonVisible:false, issuedReasonVisible: false, approveVisible: false, approveReasonVisible:false, fullscreen:false, loadingApproveReason:false, loadingApprove:false, loadingIssuedReason:false, loadingIssued:false, value:``, reason:'', currentInfo:null, approveReasonVisible: false, fullscreen: false, loadingApproveReason: false, loadingApprove: false, loadingIssuedReason: false, loadingIssued: false, value: ``, reason: '', currentInfo: null, } }, mounted() { @@ -341,20 +346,20 @@ // this.value = await file.convertFileToHtml(row.url) // this.claimVisible = true; this.$axios.post(this.$api.insReport.wordToHtml, { path:row.urlS?row.urlS:row.url }).then(res => { if (res.code === 200) { path: row.urlS ? row.urlS : row.url }).then(res => { if (res.code === 200) { // console.log(11111111,res.data) this.value = res.data .replace(/<a [^>]*>/g, "") .replace(/<\/a>/g, "") .replace(/ /g, " "); .replace(/<a [^>]*>/g, "") .replace(/<\/a>/g, "") .replace(/ /g, " "); this.claimVisible = true; } } }).catch(error => { console.error(error) }) }).catch(error => { console.error(error) }) }, // 权限分配 getPower(radio) { @@ -401,106 +406,139 @@ confirmClaim() { // console.log(this.$refs.Word.getValue()) }, async selectAllByOne(row){ console.log(row,await file.convertFileToHtml(row.url)); async selectAllByOne(row) { console.log(row, await file.convertFileToHtml(row.url)); }, download(row){ let url = row.urlS?row.urlS:row.url; download(row) { let url = row.urlS ? row.urlS : row.url; const link = document.createElement('a'); link.href = this.javaApi + url; link.target = '_blank'; document.body.appendChild(link); link.click(); }, handleRestore(row){ handleRestore(row) { this.$axios.post(this.$api.insReport.upReportUrl, { id:row.id }).then(res => { if (res.code === 200) { id: row.id }).then(res => { if (res.code === 200) { this.$message.success('操作成功') this.refreshTable() } }) } }) }, handleIssued(row){ handleIssued(row) { this.currentInfo = row; this.issuedVisible = true; }, subIssued(){ subIssued() { this.loadingIssued = true; this.$axios.post(this.$api.insReport.examineReport, { id: this.currentInfo.id, isExamine: 1 id: this.currentInfo.id, isExamine: 1 }).then(res => { this.loadingIssued = false; if (res.code === 201) { return } this.$message.success('提交成功') this.refreshTable() this.currentInfo = null; this.issuedVisible = false; }).catch(e => { this.$message.error('提交失败') this.loadingIssued = false; }) }, handleApprove(row) { this.currentInfo = row; this.approveVisible = true; }, subApprove() { this.loadingApprove = true; this.$axios.post(this.$api.insReport.ratifyReport, { id: this.currentInfo.id, isRatify: 1 }).then(res => { this.loadingApprove = false; if (res.code == 201) { this.$message.error('批准失败') return } this.$message.success('已批准') this.refreshTable() this.currentInfo = null; this.approveVisible = false; }) }, handleSubmit(row) { this.$confirm('是否提交当前报告?', "提交", { confirmButtonText: "提交", cancelButtonText: "取消", type: "warning" }).then(() => { this.$axios.post(this.$api.insReport.writeReport, { id: row.id }).then(res => { if (res.code === 201) { return } this.$message.success('提交成功') this.refreshTable() this.loadingIssued = false; this.currentInfo = null; this.issuedVisible = false; }).catch(e => { this.$message.error('提交失败') this.loadingIssued = false; }) }).catch(() => {}) }, handleApprove(row){ this.currentInfo = row; this.approveVisible = true; }, subApprove(){ this.loadingApprove = true; }, handleSubmit(row){ this.$confirm('是否提交当前报告?', "提交", { confirmButtonText: "提交", cancelButtonText: "取消", type: "warning" }).then(() => { this.$axios.post(this.$api.insReport.writeReport, { id: row.id }).then(res => { if (res.code === 201) { return } this.$message.success('提交成功') this.refreshTable() }).catch(e => { this.$message.error('提交失败') }) }).catch(() => {}) }, handleIssuedReason(){ if(!this.reason){ handleIssuedReason() { if (!this.reason) { return this.$message.error('请输入原因') } this.loadingIssuedReason = true; this.$axios.post(this.$api.insReport.examineReport, { id: this.currentInfo.id, isExamine: 0, examineTell:this.reason }).then(res => { if (res.code === 201) { return } this.$message.success('操作成功') this.refreshTable() this.loadingIssuedReason = false; this.currentInfo = null; this.reason = ''; this.issuedVisible = false; this.issuedReasonVisible = false; }).catch(e => { this.$message.error('操作失败') this.loadingIssuedReason = false; }) id: this.currentInfo.id, isExamine: 0, examineTell: this.reason }).then(res => { this.loadingIssuedReason = false; if (res.code === 201) { return } this.$message.success('操作成功') this.refreshTable() this.currentInfo = null; this.reason = ''; this.issuedVisible = false; this.issuedReasonVisible = false; }).catch(e => { this.$message.error('操作失败') this.loadingIssuedReason = false; }) }, handleApproveReason(){ if(!this.reason){ handleApproveReason() { if (!this.reason) { return this.$message.error('请输入原因') } this.loadingApproveReason = true this.$axios.post(this.$api.insReport.examineReport, { id: this.currentInfo.id, isExamine: 0, examineTell: this.reason }).then(res => { this.loadingApproveReason = false if (res.code === 201) { return } this.$message.success('操作成功') this.refreshTable() this.currentInfo = null; this.reason = ''; this.issuedVisible = false; this.issuedReasonVisible = false; }).catch(e => { this.$message.error('操作失败') this.loadingIssuedReason = false; }) } } } src/components/view/b2-standard.vue
@@ -1,818 +1,839 @@ <style scoped> .standard { padding: 20px 0; display: flex; } .standard { padding: 20px 0; display: flex; } .left { width: 270px; height: calc(100% - 40px - 30px); background-color: white; padding: 15px; } .left { width: 270px; height: calc(100% - 40px - 30px); background-color: white; padding: 15px; } .custom-tree-node { width: 100%; line-height: 32px; } .custom-tree-node { width: 100%; line-height: 32px; } .custom-tree-node .el-icon-delete { color: #3A7BFA; opacity: 0; font-size: 18px; } .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:hover .el-icon-delete { opacity: 1; } .node_i { color: orange; font-size: 18px; } .node_i { color: orange; font-size: 18px; } .right { margin-left: 5px; width: calc(100% - 305px); height: calc(100% - 40px); } .right { margin-left: 5px; width: calc(100% - 305px); height: calc(100% - 40px); } .right .title { height: 50px; line-height: 50px; padding: 0 10px; background-color: white; } .right .title { height: 50px; line-height: 50px; padding: 0 10px; background-color: white; } .standard_table { border-top: 1px solid #ebeef5; background-color: white; } .standard_table { border-top: 1px solid #ebeef5; background-color: white; } .product_table { border-top: 1px solid #ebeef5; height: calc(100% - 275px); margin-top: 5px; background-color: white; user-select: none; } .product_table { border-top: 1px solid #ebeef5; height: calc(100% - 275px); margin-top: 5px; background-color: white; user-select: none; } .product_table .el-table { height: 100%; } .sort{ .product_table .el-table { height: 100%; } .sort { width: 80% !important; overflow: hidden; } </style> <style> .standard .el-tree-node__content { height: 32px; font-size: 14px; border-radius: 2px; } .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 .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { color: #3A7BFA; } .standard .has-gutter .el-table__cell .cell { line-height: 38px; background-color: #f8f8f8; } .standard .has-gutter .el-table__cell .cell { line-height: 38px; background-color: #f8f8f8; } .standard .has-gutter .el-table__cell { background-color: #fafafa !important; } .standard .has-gutter .el-table__cell { background-color: #fafafa !important; } .standard .standard_table .el-table__row .cell { font-size: 14px; } .standard .standard_table .el-table__row .cell { font-size: 14px; } .standard .el-table .warning-row .cell { color: #bababa; } .standard .el-table .warning-row .cell { color: #bababa; } </style> <template> <div class="standard"> <div class="left"> <el-row> <el-col :span="20"> <el-input placeholder="输入关键字进行搜索" suffix-icon="el-icon-search" v-model="search" size="small" style="margin-bottom: 5px;" clearable @blur="searchFilter" @clear="searchFilter"></el-input> </el-col> <el-col :span="4" style="text-align: center;line-height: 30px;" v-if="addPower"> <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="addDia = true"></el-button> </el-col> </el-row> <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }" node-key="label" :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" @node-collapse="nodeClose" v-loading="treeLoad" :expand-on-click-node="false" :default-expanded-keys="expandedKeys" <div class="standard"> <div class="left"> <el-row> <el-col :span="20"> <el-input placeholder="输入关键字进行搜索" suffix-icon="el-icon-search" v-model="search" size="small" style="margin-bottom: 5px;" clearable @blur="searchFilter" @clear="searchFilter"></el-input> </el-col> <el-col :span="4" style="text-align: center;line-height: 30px;" v-if="addPower"> <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="addDia = true"></el-button> </el-col> </el-row> <el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }" node-key="label" :filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen" @node-collapse="nodeClose" v-loading="treeLoad" :expand-on-click-node="false" :default-expanded-keys="expandedKeys" style="height:calc(100% - 30px);overflow-y: scroll;scrollbar-width: none;"> <div class="custom-tree-node" slot-scope="{ node, data }"> <el-row style="width: 100%;"> <el-col :span="21" :class="{sort:node.level>3}"> <span><i :class="`node_i ${data.children != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> {{ data.code }} {{ data.label }}</span> </el-col> <el-col :span="2" style="text-align: right;" v-if="delStandardTree"> <el-button type="text" size="mini" @click.stop="remove(node, data)"> <i class="el-icon-delete"></i> </el-button> </el-col> </el-row> </div> </el-tree> </div> <div class="right"> <el-row class="title"> <el-col :span="24" style="font-size: 14px;color: #999;">{{selectTree}}</el-col> <!-- <el-col :span="selectTree==''?24:14" style="text-align: right;" v-if="selectTree!=''"> --> <!-- <el-button size="small" type="primary" @click="addStandardDia = true" <div class="custom-tree-node" slot-scope="{ node, data }"> <el-row style="width: 100%;"> <el-col :span="21" :class="{sort:node.level>3}"> <span><i :class="`node_i ${data.children != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> {{ data.code }} {{ data.label }}</span> </el-col> <el-col :span="2" style="text-align: right;" v-if="delStandardTree"> <el-button type="text" size="mini" @click.stop="remove(node, data)"> <i class="el-icon-delete"></i> </el-button> </el-col> </el-row> </div> </el-tree> </div> <div class="right"> <el-row class="title"> <el-col :span="24" style="font-size: 14px;color: #999;">{{selectTree}}</el-col> <!-- <el-col :span="selectTree==''?24:14" style="text-align: right;" v-if="selectTree!=''"> --> <!-- <el-button size="small" type="primary" @click="addStandardDia = true" v-if="addStandardMethod">新增标准</el-button> <el-button size="small" type="primary" @click="addProductDia = true" v-if="addStandardProduct">新增项目</el-button> <el-button size="small" @click="delStandardProductByIds" v-if="delStandardProduct"> <i class="el-icon-delete" style="color: #3A7BFA;"></i> <span style="color: #3A7BFA;">删除</span> </el-button> --> <!-- </el-col> --> </el-row> <el-row class="standard_table" v-loading="tableLoad"> <el-table class="el-table" :data="standardList" style="width: 100%;" height="220px" tooltip-effect="dark" highlight-current-row @row-click="rowClick" ref="standard"> <el-table-column prop="code" label="标准编号" show-overflow-tooltip> <template slot-scope="scope"> <span style="color: red;font-size: 14px;">{{scope.row['code']}}</span> </template> </el-table-column> <el-table-column prop="name" label="标准名称" show-overflow-tooltip></el-table-column> <el-table-column prop="remark" label="备注" show-overflow-tooltip></el-table-column> <el-table-column prop="createUserName" label="创建人"></el-table-column> <el-table-column prop="createTime" label="创建时间" width="250px"></el-table-column> <!-- <el-table-column label="操作" width="100" align="center" v-if="delStandardMethod"> <!-- </el-col> --> </el-row> <el-row class="standard_table" v-loading="tableLoad"> <el-table class="el-table" :data="standardList" style="width: 100%;" height="220px" tooltip-effect="dark" highlight-current-row @row-click="rowClick" ref="standard"> <el-table-column prop="code" label="标准编号" show-overflow-tooltip> <template slot-scope="scope"> <span style="color: red;font-size: 14px;">{{scope.row['code']}}</span> </template> </el-table-column> <el-table-column prop="name" label="标准名称" show-overflow-tooltip></el-table-column> <el-table-column prop="remark" label="备注" show-overflow-tooltip></el-table-column> <el-table-column prop="createUserName" label="创建人"></el-table-column> <el-table-column prop="createTime" label="创建时间" width="250px"></el-table-column> <!-- <el-table-column label="操作" width="100" align="center" v-if="delStandardMethod"> <template slot-scope="scope"> <el-button type="text" size="small" @click="delStandardMethodByFLSSM(scope.row.id)">删除</el-button> </template> </el-table-column> --> </el-table> </el-row> <el-row class="product_table" v-loading="tableLoad2"> <el-table :data="productList" ref="productTable" style="width: 100%;" height="100%" tooltip-effect="dark" stripe :fit="true" border @selection-change="handleSelectionChange" :row-class-name="tableRowClassName" @select="upProductSelect"> <el-table-column type="selection" width="65"> </el-table-column> <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column> <!-- <el-table-column prop="inspectionItemClassify" label="检验项类型" width="120" show-overflow-tooltip></el-table-column> --> <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140" show-overflow-tooltip></el-table-column> <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip></el-table-column> <el-table-column prop="ask" label="要求值" min-width="200px"> <template slot-scope="scope"> <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable @change="(value)=>upStandardProductList(value,scope.row.id)" v-if="upStandardProduct" type="textarea" :autosize="{ minRows: 1, maxRows: 3}"></el-input> <span v-else>{{scope.row.ask}}</span> </template> </el-table-column> <el-table-column prop="tell" label="要求描述" min-width="220px"> <template slot-scope="scope"> <el-input size="small" placeholder="要求描述" v-model="scope.row.tell" clearable @change="(value)=>upStandardProductListOfTell(value,scope.row.id)" v-if="upStandardProduct" type="textarea" :autosize="{ minRows: 1, maxRows: 3}"></el-input> <span v-else>{{scope.row.ask}}</span> </template> </el-table-column> <el-table-column prop="method" label="试验方法" width="200"> </el-table> </el-row> <el-row class="product_table" v-loading="tableLoad2"> <el-table :data="productList" ref="productTable" style="width: 100%;" height="100%" tooltip-effect="dark" stripe :fit="true" border @selection-change="handleSelectionChange" :row-class-name="tableRowClassName" @select="upProductSelect"> <el-table-column type="selection" width="65"> </el-table-column> <el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column> <!-- <el-table-column prop="inspectionItemClassify" label="检验项类型" width="120" show-overflow-tooltip></el-table-column> --> <el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140" show-overflow-tooltip></el-table-column> <el-table-column prop="sonLaboratory" label="子实验室" width="130" show-overflow-tooltip :filters="filters" :filter-method="filterHandler"></el-table-column> <el-table-column prop="ask" label="要求值" min-width="200px"> <template slot-scope="scope"> <el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable @change="(value)=>upStandardProductList(value,scope.row.id)" v-if="upStandardProduct" type="textarea" :autosize="{ minRows: 1, maxRows: 3}"></el-input> <span v-else>{{scope.row.ask}}</span> </template> </el-table-column> <el-table-column prop="tell" label="要求描述" min-width="220px"> <template slot-scope="scope"> <el-input size="small" placeholder="要求描述" v-model="scope.row.tell" clearable @change="(value)=>upStandardProductListOfTell(value,scope.row.id)" v-if="upStandardProduct" type="textarea" :autosize="{ minRows: 1, maxRows: 3}"></el-input> <span v-else>{{scope.row.ask}}</span> </template> </el-table-column> <el-table-column prop="method" label="试验方法" width="200"> <template slot-scope="scope"> <el-select v-model="scope.row.methodS" size="small" placeholder="试验方法" @change="(value)=>upStandardProductListOfMethodS(value,scope.row.id)" v-if="upStandardProduct"> @change="(value)=>upStandardProductListOfMethodS(value,scope.row.id)" v-if="upStandardProduct"> <el-option v-for="(a,i) in 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 prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="price" label="单价(元)" width="90" show-overflow-tooltip></el-table-column> <el-table-column prop="manHour" label="工时(H)" width="90" show-overflow-tooltip></el-table-column> <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="deviceGroup" label="设备组" width="120" show-overflow-tooltip></el-table-column> <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column> </el-table> </el-row> </div> <el-dialog title="分类添加" :visible.sync="addDia" width="400px"> <div class="body"> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> <span class="required-span">* </span>工厂: </el-col> <el-col :span="16" :offset="1"> <el-select v-model="addOb.factory" size="small" style="width: 100%;" clearable> <el-option v-for="(a, ai) in factory" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> <span class="required-span">* </span>实验室: </el-col> <el-col :span="16" :offset="1"> <el-select v-model="addOb.laboratory" size="small" style="width: 100%;" clearable> <el-option v-for="(a, ai) in laboratory" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> <span class="required-span">* </span>样品大类: </el-col> <el-col :span="16" :offset="1"> <el-select v-model="addOb.sampleType" size="small" style="width: 100%;" clearable> <el-option v-for="(a, ai) in sampleType" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> <span class="required-span">* </span>样品名称: </el-col> <el-col :span="16" :offset="1"> <el-input v-model="addOb.sample" placeholder="请输入样品名称" clearable size="small"></el-input> </el-col> </el-row> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> 型号: </el-col> <el-col :span="16" :offset="1"> <el-input v-model="addOb.model" placeholder="请输入型号" clearable size="small"></el-input> </el-col> </el-row> </div> <span slot="footer" class="dialog-footer"> <el-button @click="addDia = false">取 消</el-button> <el-button type="primary" @click="addStandardTree" :loading="addLoad">确 定</el-button> </span> </el-dialog> <el-dialog title="新增标准" :visible.sync="addStandardDia" width="400px"> <div class="body"> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> <span class="required-span">* </span>标准名称: </el-col> <el-col :span="16" :offset="1"> <el-select v-model="standardId" size="small" style="width: 100%;" clearable> <el-option v-for="(a, ai) in standardEnum" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> </div> <span slot="footer" class="dialog-footer"> <el-button @click="addStandardDia = false">取 消</el-button> <el-button type="primary" @click="addStandardMethodList" :loading="addLoad2">确 定</el-button> </span> </el-dialog> <el-dialog title="新增项目" :visible.sync="addProductDia" width="70%"> <div class="body" style="height: 60vh;" v-if="addProductDia"> <ValueTable ref="ValueTable" :url="$api.capacityScope.selectItemParameterList" :componentData="componentData" /> </div> <span slot="footer" class="dialog-footer"> <el-button @click="addProductDia = false">取 消</el-button> <el-button type="primary" @click="addStandardProductDo" :loading="addLoad3">确 定</el-button> </span> </el-dialog> </div> <el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="price" label="单价(元)" width="90" show-overflow-tooltip></el-table-column> <el-table-column prop="manHour" label="工时(H)" width="90" show-overflow-tooltip></el-table-column> <el-table-column prop="manHourGroup" label="工时分组" width="100" show-overflow-tooltip></el-table-column> <el-table-column prop="deviceGroup" label="设备组" width="120" show-overflow-tooltip></el-table-column> <el-table-column prop="section" label="区间" width="120" show-overflow-tooltip></el-table-column> </el-table> </el-row> </div> <el-dialog title="分类添加" :visible.sync="addDia" width="400px"> <div class="body"> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> <span class="required-span">* </span>工厂: </el-col> <el-col :span="16" :offset="1"> <el-select v-model="addOb.factory" size="small" style="width: 100%;" clearable> <el-option v-for="(a, ai) in factory" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> <span class="required-span">* </span>实验室: </el-col> <el-col :span="16" :offset="1"> <el-select v-model="addOb.laboratory" size="small" style="width: 100%;" clearable> <el-option v-for="(a, ai) in laboratory" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> <span class="required-span">* </span>样品大类: </el-col> <el-col :span="16" :offset="1"> <el-select v-model="addOb.sampleType" size="small" style="width: 100%;" clearable> <el-option v-for="(a, ai) in sampleType" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> <span class="required-span">* </span>样品名称: </el-col> <el-col :span="16" :offset="1"> <el-input v-model="addOb.sample" placeholder="请输入样品名称" clearable size="small"></el-input> </el-col> </el-row> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> 型号: </el-col> <el-col :span="16" :offset="1"> <el-input v-model="addOb.model" placeholder="请输入型号" clearable size="small"></el-input> </el-col> </el-row> </div> <span slot="footer" class="dialog-footer"> <el-button @click="addDia = false">取 消</el-button> <el-button type="primary" @click="addStandardTree" :loading="addLoad">确 定</el-button> </span> </el-dialog> <el-dialog title="新增标准" :visible.sync="addStandardDia" width="400px"> <div class="body"> <el-row style="line-height: 50px;"> <el-col :span="6" style="text-align: right;"> <span class="required-span">* </span>标准名称: </el-col> <el-col :span="16" :offset="1"> <el-select v-model="standardId" size="small" style="width: 100%;" clearable> <el-option v-for="(a, ai) in standardEnum" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> </div> <span slot="footer" class="dialog-footer"> <el-button @click="addStandardDia = false">取 消</el-button> <el-button type="primary" @click="addStandardMethodList" :loading="addLoad2">确 定</el-button> </span> </el-dialog> <el-dialog title="新增项目" :visible.sync="addProductDia" width="70%"> <div class="body" style="height: 60vh;" v-if="addProductDia"> <ValueTable ref="ValueTable" :url="$api.capacityScope.selectItemParameterList" :componentData="componentData" /> </div> <span slot="footer" class="dialog-footer"> <el-button @click="addProductDia = false">取 消</el-button> <el-button type="primary" @click="addStandardProductDo" :loading="addLoad3">确 定</el-button> </span> </el-dialog> </div> </template> <script> import ValueTable from '../tool/value-table.vue' export default { components: { ValueTable }, data() { return { search: null, list: [], selectTree: '', factory: [], addDia: false, addOb: { factory: null, laboratory: null, sampleType: null, sample: null, model: null }, laboratory: [], addLoad: false, sampleType: [], sample: [], treeLoad: false, addPower: false, standardList: [], standardEnum: [], addStandardDia: false, standardId: null, addStandardMethod: true, addLoad2: false, productList: [], tableLoad: false, tableLoad2: false, upStandardProduct: false, delStandardMethod: false, selects: [], delStandardProduct: false, addProductDia: false, productId: null, addStandardProduct: false, addLoad3: false, productEnum: [], componentData: { entity: { orderBy: { field: 'id', order: 'asc' } }, isIndex: true, showSelect: true, select: true, do: [], tagField: { inspectionItemType: { select: [] }, valueType: { select: [] }, bsm: { select: [] }, inspectionValueType: { select: [] }, deviceGroup: { select: [] } }, selectField: {}, }, expandedKeys: [] } }, mounted() { this.getPower() this.selectEnumByCategoryForFactory() this.selectStandardTreeList() this.obtainItemParameterList() // this.selectEnumByCategoryForsampleType() this.selectTestObjectByName() this.selectStandardMethods() this.selectEnumByCategoryForDevice() this.selectEnumByCategory() this.selectEnumByCategoryForValue() this.selectEnumByCategoryForSpecial() this.selectEnumByCategoryForInspectionValueType() }, methods: { filterNode(value, data) { if (!value) return true; return data.label.indexOf(value) !== -1; }, searchFilter() { this.$refs.tree.filter(this.search) }, refresh() { this.upIndex++ }, handleNodeClick(val, node, el) { //树的值 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(' - ', '') 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) { this.selectTree += ' - ' + val.label this.getNodeParent(val.parent) } }, remove(node, data) { this.$confirm("是否删除该层级", "提示", { type: "error" }).then(() => { this.treeLoad = true 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(' - ', '') this.$axios.post(this.$api.standardTree.delStandardTree, { tree: this.selectTree }).then(res => { if (res.code == 201) return this.$message.success('已删除') this.selectStandardTreeList() this.selectTree = '' this.standardList = [] this.productList = [] }) }).catch(e => {}) }, 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.$axios.post(this.$api.enums.selectEnumByCategory, { category: "工厂" }).then(res => { this.factory = res.data }) }, selectEnumByCategoryForsampleType() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "样品大类" }).then(res => { this.sampleType = res.data }) }, selectEnumByCategoryForDevice() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "设备分类" }).then(res => { this.componentData.tagField.deviceGroup.select = res.data }) }, selectEnumByCategory() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "检验项类型" }).then(res => { res.data[1].type = 'info' this.componentData.tagField.inspectionItemType.select = res.data }) }, selectEnumByCategoryForValue() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "取值类型" }).then(res => { this.componentData.tagField.valueType.select = res.data }) }, selectEnumByCategoryForSpecial() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "是否" }).then(res => { this.componentData.tagField.bsm.select = res.data }) }, selectEnumByCategoryForInspectionValueType() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "检验值类型" }).then(res => { this.componentData.tagField.inspectionValueType.select = res.data }) }, selectStandardTreeList() { this.treeLoad = true this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res => { this.list = res.data this.list.forEach(a => { a.children.forEach(b => { b.children.forEach(c => { this.expandedKeys.push(c.label) }) // this.expandedKeys.push(b.label) }) }) this.treeLoad = false }) }, obtainItemParameterList() { this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => { let data = [] res.data.forEach(a => { data.push({ label: a.laboratoryName, value: a.laboratoryName }) }) this.laboratory = data }) }, selectTestObjectByName() { this.$axios.get(this.$api.capacityScope.selectTestObjectByName).then(res => { let data = [] res.data.forEach(a => { data.push({ label: a.specimenName, value: a.specimenName }) }) this.sampleType = data }) }, selectStandardMethods() { this.$axios.get(this.$api.standardMethod.selectStandardMethods).then(res => { let data = [] res.data.forEach(a => { data.push({ label: a.name, value: a.id }) }) this.standardEnum = data }) }, addStandardMethodList() { if (this.standardId == null || this.standardId == '') { this.$message.error('标准方法未选择') return } this.addLoad2 = true this.$axios.post(this.$api.standardTree.addStandardMethodList, { standardId: this.standardId, tree: this.selectTree }).then(res => { this.addLoad2 = false this.addStandardDia = false this.$message.success('添加成功') this.selectsStandardMethodByFLSSM() }) }, addStandardTree() { if (this.addOb.factory == null || this.addOb.factory == '') { this.$message.error('工厂是必填项') return } if (this.addOb.laboratory == null || this.addOb.laboratory == '') { this.$message.error('实验室是必填项') return } if (this.addOb.sampleType == null || this.addOb.sampleType == '') { this.$message.error('样品大类是必填项') return } if (this.addOb.sample == null || this.addOb.sample == '') { this.$message.error('样品是必填项') return } this.addLoad = true this.$axios.post(this.$api.standardTree.addStandardTree, this.addOb, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code === 201) { this.addLoad = false return } this.$message.success('添加成功') this.addDia = false this.selectStandardTreeList() this.addLoad = false }).catch(e => { this.addDia = false this.addLoad = false }) }, selectsStandardMethodByFLSSM() { this.tableLoad = true this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, { tree: this.selectTree }).then(res => { this.tableLoad = false this.standardList = res.data.standardMethodList if(this.standardList&&this.standardList.length>0){ import ValueTable from '../tool/value-table.vue' export default { components: { ValueTable }, data() { return { search: null, list: [], selectTree: '', factory: [], addDia: false, addOb: { factory: null, laboratory: null, sampleType: null, sample: null, model: null }, laboratory: [], addLoad: false, sampleType: [], sample: [], treeLoad: false, addPower: false, standardList: [], standardEnum: [], addStandardDia: false, standardId: null, addStandardMethod: true, addLoad2: false, productList: [], tableLoad: false, tableLoad2: false, upStandardProduct: false, delStandardMethod: false, selects: [], delStandardProduct: false, addProductDia: false, productId: null, addStandardProduct: false, addLoad3: false, productEnum: [], componentData: { entity: { orderBy: { field: 'id', order: 'asc' } }, isIndex: true, showSelect: true, select: true, do: [], tagField: { inspectionItemType: { select: [] }, valueType: { select: [] }, bsm: { select: [] }, inspectionValueType: { select: [] }, deviceGroup: { select: [] } }, selectField: {}, }, expandedKeys: [], filters: [] } }, mounted() { this.getPower() this.selectEnumByCategoryForFactory() this.selectStandardTreeList() this.obtainItemParameterList() // this.selectEnumByCategoryForsampleType() this.selectTestObjectByName() this.selectStandardMethods() this.selectEnumByCategoryForDevice() this.selectEnumByCategory() this.selectEnumByCategoryForValue() this.selectEnumByCategoryForSpecial() this.selectEnumByCategoryForInspectionValueType() this.selectEnumByCategoryForSonLaboratory() }, methods: { filterNode(value, data) { if (!value) return true; return data.label.indexOf(value) !== -1; }, searchFilter() { this.$refs.tree.filter(this.search) }, refresh() { this.upIndex++ }, handleNodeClick(val, node, el) { //树的值 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(' - ', '') 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) { this.selectTree += ' - ' + val.label this.getNodeParent(val.parent) } }, remove(node, data) { this.$confirm("是否删除该层级", "提示", { type: "error" }).then(() => { this.treeLoad = true 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(' - ', '') this.$axios.post(this.$api.standardTree.delStandardTree, { tree: this.selectTree }).then(res => { if (res.code == 201) return this.$message.success('已删除') this.selectStandardTreeList() this.selectTree = '' this.standardList = [] this.productList = [] }) }).catch(e => {}) }, 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.$axios.post(this.$api.enums.selectEnumByCategory, { category: "工厂" }).then(res => { this.factory = res.data }) }, selectEnumByCategoryForSonLaboratory() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "子实验室" }).then(res => { this.factory = [] res.data.forEach(a=>{ this.filters.push({ text: a.label, value: a.value }) }) }) }, selectEnumByCategoryForsampleType() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "样品大类" }).then(res => { this.sampleType = res.data }) }, selectEnumByCategoryForDevice() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "设备分类" }).then(res => { this.componentData.tagField.deviceGroup.select = res.data }) }, selectEnumByCategory() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "检验项类型" }).then(res => { res.data[1].type = 'info' this.componentData.tagField.inspectionItemType.select = res.data }) }, selectEnumByCategoryForValue() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "取值类型" }).then(res => { this.componentData.tagField.valueType.select = res.data }) }, selectEnumByCategoryForSpecial() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "是否" }).then(res => { this.componentData.tagField.bsm.select = res.data }) }, selectEnumByCategoryForInspectionValueType() { this.$axios.post(this.$api.enums.selectEnumByCategory, { category: "检验值类型" }).then(res => { this.componentData.tagField.inspectionValueType.select = res.data }) }, selectStandardTreeList() { this.treeLoad = true this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res => { this.list = res.data this.list.forEach(a => { a.children.forEach(b => { b.children.forEach(c => { this.expandedKeys.push(c.label) }) // this.expandedKeys.push(b.label) }) }) this.treeLoad = false }) }, obtainItemParameterList() { this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => { let data = [] res.data.forEach(a => { data.push({ label: a.laboratoryName, value: a.laboratoryName }) }) this.laboratory = data }) }, selectTestObjectByName() { this.$axios.get(this.$api.capacityScope.selectTestObjectByName).then(res => { let data = [] res.data.forEach(a => { data.push({ label: a.specimenName, value: a.specimenName }) }) this.sampleType = data }) }, selectStandardMethods() { this.$axios.get(this.$api.standardMethod.selectStandardMethods).then(res => { let data = [] res.data.forEach(a => { data.push({ label: a.name, value: a.id }) }) this.standardEnum = data }) }, addStandardMethodList() { if (this.standardId == null || this.standardId == '') { this.$message.error('标准方法未选择') return } this.addLoad2 = true this.$axios.post(this.$api.standardTree.addStandardMethodList, { standardId: this.standardId, tree: this.selectTree }).then(res => { this.addLoad2 = false this.addStandardDia = false this.$message.success('添加成功') this.selectsStandardMethodByFLSSM() }) }, addStandardTree() { if (this.addOb.factory == null || this.addOb.factory == '') { this.$message.error('工厂是必填项') return } if (this.addOb.laboratory == null || this.addOb.laboratory == '') { this.$message.error('实验室是必填项') return } if (this.addOb.sampleType == null || this.addOb.sampleType == '') { this.$message.error('样品大类是必填项') return } if (this.addOb.sample == null || this.addOb.sample == '') { this.$message.error('样品是必填项') return } this.addLoad = true this.$axios.post(this.$api.standardTree.addStandardTree, this.addOb, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code === 201) { this.addLoad = false return } this.$message.success('添加成功') this.addDia = false this.selectStandardTreeList() this.addLoad = false }).catch(e => { this.addDia = false this.addLoad = false }) }, selectsStandardMethodByFLSSM() { this.tableLoad = true this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, { tree: this.selectTree }).then(res => { this.tableLoad = false this.standardList = res.data.standardMethodList if (this.standardList && this.standardList.length > 0) { this.$refs.standard.setCurrentRow(this.standardList[0]) this.rowClick(this.standardList[0]) }else{ } else { this.productList = []; } }) }, getPower() { let power = JSON.parse(sessionStorage.getItem('power')) let add = false let addStandardMethod = false let upStandardProduct = false let delStandardMethod = false let delStandardProduct = false let addStandardProduct = false let delStandardTree = false for (var i = 0; i < power.length; i++) { if (power[i].menuMethod == 'addStandardTree') { add = true } if (power[i].menuMethod == 'addStandardMethodList') { addStandardMethod = true } if (power[i].menuMethod == 'upStandardProductList') { upStandardProduct = true } if (power[i].menuMethod == 'delStandardMethodByFLSSM') { delStandardMethod = true } if (power[i].menuMethod == 'delStandardProductByIds') { delStandardProduct = true } if (power[i].menuMethod == 'addStandardProduct') { addStandardProduct = true } if (power[i].menuMethod == 'delStandardTree') { delStandardTree = true } } this.addPower = add this.addStandardMethod = addStandardMethod this.upStandardProduct = upStandardProduct this.delStandardMethod = delStandardMethod this.delStandardProduct = delStandardProduct this.addStandardProduct = addStandardProduct this.delStandardTree = delStandardTree }, upStandardProductList(value, index) { this.$axios.post(this.$api.standardTree.upStandardProductList, { id: index, ask: value }, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code == 201) { this.$message.error('未保存') return } this.$message.success('已保存') }) }, upStandardProductListOfTell(value, index) { this.$axios.post(this.$api.standardTree.upStandardProductList, { id: index, tell: value }, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code == 201) { this.$message.error('未保存') return } this.$message.success('已保存') }) }, upStandardProductListOfMethodS(value, index) { this.$axios.post(this.$api.standardTree.upStandardProductList, { id: index, methodS: value }, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code == 201) { this.$message.error('未保存') return } this.$message.success('已保存') }) }) }, delStandardMethodByFLSSM(id) { this.$confirm('是否删除当前数据?', "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { this.tableLoad = true this.$axios.post(this.$api.standardTree.delStandardMethodByFLSSM, { id: id }).then(res => { if (res.code == 201) { return } this.$message.success('已删除') this.selectsStandardMethodByFLSSM() }) }).catch(() => {}) }, handleSelectionChange(val) { this.selects = [] val.forEach(a => { 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 this.$axios.post(this.$api.standardTree.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 this.$axios.post(this.$api.standardTree.addStandardProduct, { ids: JSON.stringify(select), tree: this.selectTree }).then(res => { if (res.code == 201) { return } this.$message.success('添加成功') this.selectsStandardMethodByFLSSM() }) this.addProductDia = false }, rowClick(row, column, event) { this.tableLoad2 = true this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, { id: row.id }).then(res => { this.productList = res.data setTimeout(() => { this.productList.forEach(a => { if (a.state == 1) this.toggleSelection(a) }) }, 300) this.tableLoad2 = false }) }, toggleSelection(row) { this.$refs.productTable.toggleRowSelection(row, true); }, tableRowClassName({ row, rowIndex }) { if (row.state === 0) { return 'warning-row'; } return ''; }, upProductSelect(selection, row) { row.state = row.state == 1 ? 0 : 1 this.$axios.post(this.$api.standardTree.upStandardProductList, { id: row.id, state: row.state }, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code == 201) { this.$message.error('未保存') return } this.$message.success('已保存') }) }, } } getPower() { let power = JSON.parse(sessionStorage.getItem('power')) let add = false let addStandardMethod = false let upStandardProduct = false let delStandardMethod = false let delStandardProduct = false let addStandardProduct = false let delStandardTree = false for (var i = 0; i < power.length; i++) { if (power[i].menuMethod == 'addStandardTree') { add = true } if (power[i].menuMethod == 'addStandardMethodList') { addStandardMethod = true } if (power[i].menuMethod == 'upStandardProductList') { upStandardProduct = true } if (power[i].menuMethod == 'delStandardMethodByFLSSM') { delStandardMethod = true } if (power[i].menuMethod == 'delStandardProductByIds') { delStandardProduct = true } if (power[i].menuMethod == 'addStandardProduct') { addStandardProduct = true } if (power[i].menuMethod == 'delStandardTree') { delStandardTree = true } } this.addPower = add this.addStandardMethod = addStandardMethod this.upStandardProduct = upStandardProduct this.delStandardMethod = delStandardMethod this.delStandardProduct = delStandardProduct this.addStandardProduct = addStandardProduct this.delStandardTree = delStandardTree }, upStandardProductList(value, index) { this.$axios.post(this.$api.standardTree.upStandardProductList, { id: index, ask: value }, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code == 201) { this.$message.error('未保存') return } this.$message.success('已保存') }) }, upStandardProductListOfTell(value, index) { this.$axios.post(this.$api.standardTree.upStandardProductList, { id: index, tell: value }, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code == 201) { this.$message.error('未保存') return } this.$message.success('已保存') }) }, upStandardProductListOfMethodS(value, index) { this.$axios.post(this.$api.standardTree.upStandardProductList, { id: index, methodS: value }, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code == 201) { this.$message.error('未保存') return } this.$message.success('已保存') }) }, delStandardMethodByFLSSM(id) { this.$confirm('是否删除当前数据?', "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { this.tableLoad = true this.$axios.post(this.$api.standardTree.delStandardMethodByFLSSM, { id: id }).then(res => { if (res.code == 201) { return } this.$message.success('已删除') this.selectsStandardMethodByFLSSM() }) }).catch(() => {}) }, handleSelectionChange(val) { this.selects = [] val.forEach(a => { 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 this.$axios.post(this.$api.standardTree.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 this.$axios.post(this.$api.standardTree.addStandardProduct, { ids: JSON.stringify(select), tree: this.selectTree }).then(res => { if (res.code == 201) { return } this.$message.success('添加成功') this.selectsStandardMethodByFLSSM() }) this.addProductDia = false }, rowClick(row, column, event) { this.tableLoad2 = true this.$axios.post(this.$api.standardTree.selectStandardProductListByMethodId, { id: row.id }).then(res => { this.productList = res.data setTimeout(() => { this.productList.forEach(a => { if (a.state == 1) this.toggleSelection(a) }) }, 300) this.tableLoad2 = false }) }, toggleSelection(row) { this.$refs.productTable.toggleRowSelection(row, true); }, tableRowClassName({ row, rowIndex }) { if (row.state === 0) { return 'warning-row'; } return ''; }, upProductSelect(selection, row) { row.state = row.state == 1 ? 0 : 1 this.$axios.post(this.$api.standardTree.upStandardProductList, { id: row.id, state: row.state }, { headers: { 'Content-Type': 'application/json' } }).then(res => { if (res.code == 201) { this.$message.error('未保存') return } this.$message.success('已保存') }) }, filterHandler(value, row, column) { const property = column['property']; return row[property] === value; } } } </script> src/components/view/index-index.vue
@@ -361,7 +361,7 @@ <p>{{ m.theme }}</p> </div> <div class="list3-item-info"> <p style="width: 73%;-webkit-line-clamp: 1;" class="ellipsis-multiline"> <p style="width: 73%;-webkit-line-clamp: 1;cursor: pointer;" class="ellipsis-multiline" @click="goNoticeDetail(m)"> <!-- 编号<span style="color:#3A7BFA;"> SB20240101-001 </span>的设备将于2023-09-09 11:11:11过期 --> {{ m.content }} </p> @@ -677,6 +677,19 @@ }) }) }, goNoticeDetail(row){ this.$axios.put(this.$api.informationNotification.triggerModificationStatusToRead+'/'+row.id).then(res => { row.num = Math.random(100); this.$bus.$emit("change", JSON.stringify(row)); this.$parent.addTab({ v: "消息详情", i: "el-icon-s-tools", u: "notice-detail", k:35, p: "abcd" },29); }) }, }, } </script> src/components/view/notice-detail.vue
@@ -16,8 +16,8 @@ </div> </div> <div class="info-box" v-if="noticeInfo.jumpPath"> <component class="notice-content" :is="noticeInfo.jumpPath" style="height: 500px;" > </component> <!-- <component class="notice-content" :is="noticeInfo.jumpPath" style="height: 500px;" > </component> --> </div> </div> </template> @@ -47,6 +47,7 @@ this.noticeInfo = JSON.parse(sessionStorage.getItem("noticeInfo")); this.$bus.$on("change", (msg) => { this.noticeInfo = JSON.parse(msg); console.log(this.noticeInfo); sessionStorage.setItem("noticeInfo", msg); }); }, src/main.js
@@ -13,9 +13,9 @@ //本地 Vue.prototype.LOCATIONVUE = "http://127.0.0.1:80"; // const javaApi = 'http://192.168.11.200:8001';//李 const javaApi = 'http://192.168.11.200:8001';//李 // const javaApi = 'http://192.168.11.249:8001';//张 const javaApi = 'http://192.168.11.50:8001';//姜 // const javaApi = 'http://192.168.11.50:8001';//姜 // const javaApi = 'http://192.168.11.2:8001';//柴 // const javaApi = 'http://114.132.189.42:9006';//测试服 //胜云服务器