From 9378634f877b46b1126fc9936be5b4bc12bda3df Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期二, 05 三月 2024 11:05:54 +0800 Subject: [PATCH] Merge branch 'master' of http://114.132.189.42:9002/r/center-lims-before into master --- src/components/view/b2-standard.vue | 247 ++++++++++++++++++++++++++---- src/components/view/standard_method.vue | 147 ++++++++++++++++++ src/view/enter.vue | 2 src/components/tool/value-table.vue | 4 src/components/view/a5-capacity-scope.vue | 24 ++ static/js/menu.js | 6 src/assets/api/controller.js | 10 + 7 files changed, 390 insertions(+), 50 deletions(-) diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js index f131278..0b2baf3 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -9,7 +9,8 @@ laboratoryScope, deviceScope, systemLog, - standardTree + standardTree, + standardMethod } } @@ -109,4 +110,11 @@ const standardTree = { selectStandardTreeList: "/standardTree/selectStandardTreeList", //鑾峰彇鏍囧噯鏍� addStandardTree: "/standardTree/addStandardTree", //娣诲姞鏍囧噯鏍� + addStandardMethodList: "/standardTree/addStandardMethodList", //缁欐爣鍑嗘爲娣诲姞妫�楠屾爣鍑� + selectsStandardMethodByFLSSM: "/standardTree/selectsStandardMethodByFLSSM", //鏍规嵁鏍囧噯鏍戣繘琛屾爣鍑嗘煡璇� +} + +const standardMethod = { + selectStandardMethodList: "/standardMethod/selectStandardMethodList", //鑾峰彇鏍囧噯鏂规硶鍒楄〃 + selectStandardMethods: "/standardMethod/selectStandardMethods", //鑾峰彇鏍囧噯鏂规硶鏋氫妇 } diff --git a/src/components/tool/value-table.vue b/src/components/tool/value-table.vue index 58c9f01..82fd951 100644 --- a/src/components/tool/value-table.vue +++ b/src/components/tool/value-table.vue @@ -223,7 +223,7 @@ order: 'asc' } }, - isIndex: false, + isIndex: true, showSelect: false, select: true, row: 1, @@ -264,7 +264,7 @@ order: 'asc' } }, - isIndex: false, + isIndex: true, showSelect: false, select: true, row: 1, diff --git a/src/components/view/a5-capacity-scope.vue b/src/components/view/a5-capacity-scope.vue index 0720012..f92c5c7 100644 --- a/src/components/view/a5-capacity-scope.vue +++ b/src/components/view/a5-capacity-scope.vue @@ -125,7 +125,7 @@ deviceGroup: null, orderBy: { field: 'id', - order: 'desc' + order: 'asc' } }, isIndex: false, @@ -159,7 +159,8 @@ }, laboratory:{ select:[] - } + }, + method:{select:[]} }, selectField: { inspectionItemType: { @@ -176,7 +177,8 @@ }, laboratory:{ select:[] - } + }, + method:{select:[]} }, requiredAdd: ['inspectionItem', 'manHour', 'inspectionItemType','inspectionValueType','inspectionItemClassify','laboratory','unit','method','price','manDay','deviceGroup','checkoutNumber','valueType'], requiredUp: ['inspectionItem', 'manHour', 'inspectionItemType','inspectionValueType','inspectionItemClassify','laboratory','unit','method','price','manDay','deviceGroup','checkoutNumber','valueType'] @@ -186,7 +188,7 @@ specimenName: null, orderBy: { field: 'id', - order: 'desc' + order: 'asc' } }, isIndex: false, @@ -225,6 +227,7 @@ this.selectEnumByCategoryForSpecial() this.selectEnumByCategoryForInspectionValueType() this.obtainItemParameterList() + this.selectStandardMethods() this.getPower('0') }, methods: { @@ -306,6 +309,19 @@ this.itemParameterData.tagField.laboratory.select = data }) }, + selectStandardMethods() { + this.$axios.get(this.$api.standardMethod.selectStandardMethods).then(res => { + let data = [] + res.data.forEach(a=>{ + data.push({ + label: a.name, + value: a.code + }) + }) + this.itemParameterData.selectField.method.select = data + this.itemParameterData.tagField.method.select = data + }) + }, // 鏉冮檺鍒嗛厤 getPower(radio) { let power = JSON.parse(sessionStorage.getItem('power')) diff --git a/src/components/view/b2-standard.vue b/src/components/view/b2-standard.vue index 93c0fbb..eafc7d1 100644 --- a/src/components/view/b2-standard.vue +++ b/src/components/view/b2-standard.vue @@ -1,6 +1,7 @@ <style scoped> .standard { padding: 20px 0; + display: flex; } .left { @@ -9,8 +10,8 @@ background-color: white; padding: 15px; } - - .custom-tree-node{ + + .custom-tree-node { width: 100%; line-height: 32px; } @@ -18,18 +19,45 @@ .custom-tree-node .el-icon-delete { color: #3A7BFA; opacity: 0; - position: relative; - right: 0; - font-size: 16px; + font-size: 18px; } .custom-tree-node:hover .el-icon-delete { opacity: 1; } - - .node_i{ + + .node_i { color: orange; font-size: 18px; + } + + .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; + } + + .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; + } + + .product_table .el-table{ + height: 100%; } </style> <style> @@ -40,8 +68,20 @@ } .standard .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content { - background: rgba(58, 124, 253, 0.1); color: #3A7BFA; + } + + .standard .has-gutter .el-table__cell .cell{ + line-height: 38px; + background-color: #fafafa; + } + + .standard .has-gutter .el-table__cell{ + background-color: #fafafa !important; + } + + .standard .standard_table .el-table__row .cell{ + font-size: 14px; } </style> @@ -62,8 +102,9 @@ @node-expand="nodeOpen" @node-collapse="nodeClose" v-loading="treeLoad"> <div class="custom-tree-node" slot-scope="{ node, data }"> <el-row> - <el-col :span="22"> - <span><i :class="`node_i ${data.children != undefined ? 'el-icon-folder-opened' : 'el-icon-tickets'}`"></i> + <el-col :span="21"> + <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;"> @@ -75,7 +116,57 @@ </div> </el-tree> </div> - <div class="right"></div> + <div class="right"> + <el-row class="title"> + <el-col :span="10" style="font-size: 14px;color: #999;">{{selectTree}}</el-col> + <el-col :span="selectTree==''?24:14" style="text-align: right;"> + <el-button size="small" type="primary" @click="addStandardDia = true" v-if="addStandardMethod">鏂板鏍囧噯</el-button> + <el-button size="small" type="primary">鏂板椤圭洰</el-button> + <el-button size="small"> + <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="standardListLoad"> + <el-table class="el-table" :data="standardList" style="width: 100%;" height="220px" tooltip-effect="dark"> + <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"> + <template slot-scope="scope"> + <el-button type="text" size="small">鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row class="product_table"> + <el-table :data="productList" style="width: 100%;" height="100%" tooltip-effect="dark" stripe :fit="true" border> + <el-table-column type="selection" width="65"></el-table-column> + <el-table-column prop="code" label="妫�楠岄」" show-overflow-tooltip></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="remark" label="瀹為獙瀹�" show-overflow-tooltip></el-table-column> + <el-table-column prop="remark" label="璁¢噺鍗曚綅" show-overflow-tooltip></el-table-column> + <el-table-column prop="remark" label="鍗曚环" show-overflow-tooltip></el-table-column> + <el-table-column prop="remark" label="宸ユ椂" show-overflow-tooltip></el-table-column> + <el-table-column prop="remark" label="宸ユ椂鍒嗙粍" show-overflow-tooltip></el-table-column> + <el-table-column prop="remark" label="璁惧缁�" show-overflow-tooltip></el-table-column> + <el-table-column prop="remark" label="鍖洪棿" show-overflow-tooltip></el-table-column> + <el-table-column prop="remark" label="瑕佹眰鍊�"> + <template slot-scope="scope"> + <el-input size="small" placeholder="瑕佹眰鍊�" v-model="scope.row.ask"></el-input> + </template> + </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;"> @@ -84,8 +175,7 @@ </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-option v-for="(a, ai) in factory" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> @@ -95,8 +185,7 @@ </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-option v-for="(a, ai) in laboratory" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> @@ -106,8 +195,7 @@ </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-option v-for="(a, ai) in sampleType" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> @@ -117,8 +205,7 @@ </el-col> <el-col :span="16" :offset="1"> <el-select v-model="addOb.sample" size="small" style="width: 100%;" clearable> - <el-option v-for="(a, ai) in sample" :key="ai" :value="a.value" - :label="a.label"></el-option> + <el-option v-for="(a, ai) in sample" :key="ai" :value="a.value" :label="a.label"></el-option> </el-select> </el-col> </el-row> @@ -136,6 +223,24 @@ <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> </div> </template> @@ -145,7 +250,7 @@ return { search: null, list: [], - returntree: null, + selectTree: '', factory: [], addDia: false, addOb: { @@ -160,7 +265,15 @@ sampleType: [], sample: [], treeLoad: false, - addPower: false + addPower: false, + standardList: [], + standardEnum: [], + addStandardDia: false, + standardId: null, + addStandardMethod: true, + addLoad2: false, + productList: [], + standardListLoad: false } }, mounted() { @@ -170,6 +283,7 @@ this.obtainItemParameterList() this.selectEnumByCategoryForsampleType() this.selectTestObjectByName() + this.selectStandardMethods() }, methods: { filterNode(value, data) { @@ -182,10 +296,22 @@ refresh() { this.upIndex++ }, - handleNodeClick(val) { //鏍戠殑鍊� - this.returntree = val - if (val.code === '[5]' && val.children === undefined) { - + 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() + }, + getNodeParent(val){ + if(val.parent!=null){ + this.selectTree += ' - ' + val.label + this.getNodeParent(val.parent) } }, remove(node, data) { @@ -196,7 +322,7 @@ const children = parent.data.children || parent.data; const index = children.findIndex(d => d.id === data.id); children.splice(index, 1); - + }).catch(e => {}) }, nodeOpen(data, node, el) { @@ -219,9 +345,9 @@ this.sampleType = res.data }) }, - selectStandardTreeList(){ + selectStandardTreeList() { this.treeLoad = true - this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res=>{ + this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res => { this.list = res.data this.treeLoad = false }) @@ -229,7 +355,7 @@ obtainItemParameterList() { this.$axios.get(this.$api.laboratoryScope.obtainItemParameterList).then(res => { let data = [] - res.data.forEach(a=>{ + res.data.forEach(a => { data.push({ label: a.laboratoryName, value: a.laboratoryName @@ -241,7 +367,7 @@ selectTestObjectByName() { this.$axios.get(this.$api.capacityScope.selectTestObjectByName).then(res => { let data = [] - res.data.forEach(a=>{ + res.data.forEach(a => { data.push({ label: a.specimenName, value: a.specimenName @@ -250,20 +376,48 @@ this.sample = data }) }, - addStandardTree(){ - if(this.addOb.factory==null||this.addOb.factory=='') { + 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=='') { + if (this.addOb.laboratory == null || this.addOb.laboratory == '') { this.$message.error('瀹為獙瀹ゆ槸蹇呭~椤�') return } - if(this.addOb.sampleType==null||this.addOb.sampleType=='') { + if (this.addOb.sampleType == null || this.addOb.sampleType == '') { this.$message.error('鏍峰搧澶х被鏄繀濉」') return } - if(this.addOb.sample==null||this.addOb.sample=='') { + if (this.addOb.sample == null || this.addOb.sample == '') { this.$message.error('鏍峰搧鏄繀濉」') return } @@ -286,16 +440,31 @@ this.addLoad = false }) }, - getPower(){ + selectsStandardMethodByFLSSM(){ + this.standardListLoad = true + this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM,{ + tree: this.selectTree + }).then(res=>{ + this.standardListLoad = false + this.standardList = res.data + }) + }, + getPower() { let power = JSON.parse(sessionStorage.getItem('power')) let add = false + let addStandardMethod = false for (var i = 0; i < power.length; i++) { - if(power[i].menuMethod=='addStandardTree'){ + if (power[i].menuMethod == 'addStandardTree') { add = true + } + if (power[i].menuMethod == 'addStandardMethodList') { + addStandardMethod = true } } this.addPower = add - } + this.addStandardMethod = addStandardMethod + }, + } } -</script> \ No newline at end of file +</script> diff --git a/src/components/view/standard_method.vue b/src/components/view/standard_method.vue new file mode 100644 index 0000000..4cb5c7b --- /dev/null +++ b/src/components/view/standard_method.vue @@ -0,0 +1,147 @@ +<style scoped> + .title { + height: 60px; + line-height: 60px; + } + + .search { + background-color: #fff; + height: 80px; + display: flex; + align-items: center; + } + + .search_thing { + width: 350px; + display: flex; + align-items: center; + } + + .search_label { + width: 110px; + font-size: 14px; + text-align: right; + } + + .search_input { + width: calc(100% - 110px); + } + + .table { + margin-top: 10px; + background-color: #fff; + width: calc(100% - 40px); + height: calc(100% - 60px - 80px - 10px - 40px); + padding: 20px; + } +</style> + +<template> + <div class="standard_method"> + <div> + <el-row class="title"> + <el-col :span="12" style="padding-left: 20px;">鏍囧噯鏂规硶</el-col> + <el-col :span="12" style="text-align: right;"> + <!-- <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button> --> + </el-col> + </el-row> + </div> + <div class="search"> + <div class="search_thing"> + <div class="search_label">鏍囧噯缂栧彿锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="componentData.entity.code" @keyup.enter.native="refreshTable()"></el-input></div> + </div> + <div class="search_thing"> + <div class="search_label">鏍囧噯鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="componentData.entity.name" @keyup.enter.native="refreshTable()"></el-input></div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + </div> + <div class="table"> + <ValueTable ref="ValueTable" :url="$api.standardMethod.selectStandardMethodList" :componentData="componentData" :key="upIndex"/> + </div> + </div> +</template> + +<script> + import ValueTable from '../tool/value-table.vue' + export default { + components: { + ValueTable + }, + data() { + return { + componentData: { + entity: { + code: null, + name: null, + orderBy: { + field: 'id', + order: 'asc' + } + }, + isIndex: true, + showSelect: false, + select: true, + do: [{ + id: 'update', + font: '缂栬緫', + type: 'text', + method: 'doDiy', + field:['createUserName','updateUserName'] + },{ + id: 'delete', + font: '鍒犻櫎', + type: 'text', + method: 'doDiy' + }], + tagField: {}, + selectField: {}, + requiredAdd:['code','name'], + requiredUp:['code','name'] + }, + entityCopy: {}, + upIndex: 0, + addDia: false, + addPower: true + } + }, + mounted() { + this.entityCopy = this.HaveJson(this.componentData.entity) + this.getPower() + }, + methods: { + refreshTable() { + this.$refs['ValueTable'].selectList() + }, + refresh() { + this.componentData.entity = this.HaveJson(this.entityCopy) + this.upIndex++ + }, + // 鏉冮檺鍒嗛厤 + getPower(){ + let power = JSON.parse(sessionStorage.getItem('power')) + let up = false + let del = false + let add = false + for (var i = 0; i < power.length; i++) { + /* if(power[i].menuMethod=='addEnum'){ + add = true + } */ + } + if(!del){ + this.componentData.do.splice(1, 1) + } + if(!up){ + this.componentData.do.splice(0, 1) + } + this.addPower = add + } + } + } +</script> \ No newline at end of file diff --git a/src/view/enter.vue b/src/view/enter.vue index 935d27a..169cd69 100644 --- a/src/view/enter.vue +++ b/src/view/enter.vue @@ -108,7 +108,7 @@ <el-input v-model="ruleForm.account" placeholder="璇疯緭鍏ヨ处鍙�" clearable></el-input> </el-form-item> <el-form-item label="瀵嗙爜" prop="pwd"> - <el-input v-model="ruleForm.pwd" placeholder="璇疯緭鍏ュ瘑鐮�" clearable show-password></el-input> + <el-input v-model="ruleForm.pwd" placeholder="璇疯緭鍏ュ瘑鐮�" clearable show-password @keyup.enter.native="submitForm('ruleForm')"></el-input> </el-form-item> <el-form-item style="margin-bottom: 8px;"> <el-col :span="12"><el-checkbox v-model="ruleForm.remumberme">璁颁綇瀵嗙爜</el-checkbox></el-col> diff --git a/static/js/menu.js b/static/js/menu.js index f67c442..b4e757b 100644 --- a/static/js/menu.js +++ b/static/js/menu.js @@ -189,7 +189,7 @@ { v: "4 閫氱敤瑕佹眰", i: "el-icon-tickets", - p: "selectCustomEnumLists selectProductEnumLists", + p: "", c: [{ v: "閫氱敤瑕佹眰", i: "font icon-24gl-clipboardList", @@ -543,9 +543,9 @@ }, { v: "瀹為獙瀹ょ殑妫�娴嬭兘鍔涙。妗�", i: "font icon-24gl-clipboardList", - u: "", + u: "standard_method", g: "7.2 鏂规硶鐨勯�夋嫨銆侀獙璇佸拰纭", - p: "" + p: "selectStandardMethodList" }, { v: "鏍囧噯鏌ユ柊", i: "font icon-24gl-clipboardList", -- Gitblit v1.9.3