| | |
| | | <el-row class="title"> |
| | | <el-col :span="6" style="padding-left: 20px;text-align: left;">数采配置</el-col> |
| | | <el-col :span="18" style="text-align: right;"> |
| | | <el-button size="medium" type="primary" @click="fileConfiguration">文件配置</el-button> |
| | | <el-button size="medium" @click="$parent.closeDataVue()"> |
| | | <span style="color: #3A7BFA;">返回</span> |
| | | </el-button> |
| | |
| | | </div> |
| | | <div class="table"> |
| | | <el-table :data="tableList.slice((page.current - 1) * page.size, page.current * page.size)" |
| | | border tooltip-effect="dark" style="width: 100%;" height="100%"> |
| | | border tooltip-effect="dark" style="width: 100%;" height="100%" :span-method="spanMethod"> |
| | | <el-table-column type="index" label="序号" align="center" width="65"></el-table-column> |
| | | <el-table-column prop="insProductItem" align="center" label="检验项目"> |
| | | </el-table-column> |
| | | <el-table-column prop="deviceName" align="center" min-width="100" label="设备名称"></el-table-column> |
| | | <el-table-column prop="fileType" align="center" label="文件后缀"></el-table-column> |
| | | <el-table-column prop="collectUrl" align="center" min-width="100" show-overflow-tooltip label="采集地址"></el-table-column> |
| | | <el-table-column prop="storageUrl" align="center" min-width="100" show-overflow-tooltip label="存储地址"></el-table-column> |
| | | <el-table-column prop="ip" align="center" label="IP地址" min-width="100"></el-table-column> |
| | | <el-table-column prop="sample" align="center" label="检验对象" show-overflow-tooltip min-width="150"></el-table-column> |
| | | <el-table-column prop="inspectionItem" align="center" label="检验项" min-width="100"></el-table-column> |
| | | <el-table-column prop="inspectionItemSubclass" align="center" label="检验项子项" min-width="100"></el-table-column> |
| | | <el-table-column prop="referx" align="center" label="参照X" min-width="100"></el-table-column> |
| | | <el-table-column prop="x" align="center" label="X"></el-table-column> |
| | | <el-table-column prop="refery" align="center" label="参照Y" min-width="100"></el-table-column> |
| | | <el-table-column prop="y" align="center" label="Y"></el-table-column> |
| | | <el-table-column prop="formula" align="center" label="公式"></el-table-column> |
| | | <el-table-column prop="section" label="操作" width="120"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="dataConfig(scope.row)">数采配置</el-button> |
| | |
| | | <el-button @click="addDomain" size="small" type="primary" style="position: absolute; bottom: -65px;left: 62px" v-if="index === domains.length-1">新增域名</el-button> |
| | | </el-form-item> |
| | | </div> |
| | | <div class="fomItem1"> |
| | | <el-form-item class="fomItemInput" label="公式:"> |
| | | <el-input v-model="configForm.formula" @change="evalResult"></el-input> |
| | | <div class="fomItem2"> |
| | | <el-form-item class="fomItemInput1"> |
| | | <template v-slot="label"> |
| | | 公式: |
| | | <el-tooltip class="itemFomItem" effect="dark" content="求参数最大值,参数个数最少两个,如:MAX(1,2)" placement="top"> |
| | | <label>MAX()</label> |
| | | </el-tooltip> |
| | | <el-tooltip class="itemFomItem" effect="dark" content="求参数最小值,参数个数最少两个,如:MIN(1,2)" placement="top"> |
| | | <label>MIN()</label> |
| | | </el-tooltip> |
| | | <el-tooltip class="itemFomItem" effect="dark" content="求和,参数个数最少两个,如:SUM(1,2)" placement="top"> |
| | | <label>SUM()</label> |
| | | </el-tooltip> |
| | | <el-tooltip class="itemFomItem" effect="dark" content="求绝对值,参数个数最少一个,如:ABS(1)" placement="top"> |
| | | <label>ABS()</label> |
| | | </el-tooltip> |
| | | <el-tooltip class="itemFomItem" effect="dark" content="求平均值,参数个数最少两个个,如:AVERAGE(1,2)" placement="top"> |
| | | <label>AVERAGE()</label> |
| | | </el-tooltip> |
| | | <el-tooltip class="itemFomItem" effect="dark" content="求中值,参数个数最少两个个,如:MEDIAN(1,2)" placement="top"> |
| | | <label>MEDIAN()</label> |
| | | </el-tooltip> |
| | | <el-input type="textarea" autosi:autosize="{ minRows: 2, maxRows: 4}"ze placeholder="请输入内容" v-model="configForm.formula" @change="evalResult"> </el-input> |
| | | </template> |
| | | </el-form-item> |
| | | </div> |
| | | </el-form> |
| | |
| | | </el-row> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="数采配置" :visible.sync="dialogVisible4" width="400px"> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>IP:</div> |
| | | <el-input size="small" placeholder="请输入" clearable |
| | | v-model="configForm.ip"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>采集地址:</div> |
| | | <el-input size="small" placeholder="请输入" clearable |
| | | v-model="configForm.collectUrl"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label">储存地址:</div> |
| | | <el-input size="small" placeholder="请输入" clearable |
| | | v-model="configForm.storageUrl"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>文件后缀:</div> |
| | | <el-select v-model="configForm.fileType" size="small" placeholder="请选择" style="width: 100%;"> |
| | | <el-option |
| | | v-for="item in fileTypeOptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | <div v-if="configForm.fileType == '.mdb'" class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label">委托字段:</div> |
| | | <el-input size="small" placeholder="请输入" clearable |
| | | v-model="configForm.mdbEntrustCode"></el-input> |
| | | </div> |
| | | <div v-if="configForm.fileType == '.mdb'" class="search_thing" style="margin-bottom: 14px;"> |
| | | <div class="search_label">样品字段:</div> |
| | | <el-input size="small" placeholder="请输入" clearable |
| | | v-model="configForm.mdbSampleCode"></el-input> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-row> |
| | | <el-button @click="dialogVisible4=false">取 消</el-button> |
| | | <el-button type="primary" @click="submitForm4" :loading="upLoad4">确 定</el-button> |
| | | </el-row> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | export default { |
| | | name: "dataAcquisitionConfig", |
| | | // import 引入的组件需要注入到对象中才能使用 |
| | | components: {}, |
| | | components: { |
| | | }, |
| | | props: { |
| | | tableList: { |
| | | type: Array, |
| | | deviceId: { |
| | | type: Number, |
| | | default: () => [] |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.tableList.forEach(i => { |
| | | let data = i.insProductItem.split(',') |
| | | i.insProductItem = data[data.length - 1] |
| | | }) |
| | | this.init() |
| | | }, |
| | | data() { |
| | | // 这里存放数据 |
| | | return { |
| | | dialogVisible4: false, |
| | | tableList: [], |
| | | page: { |
| | | current: 1, |
| | | size: 20, |
| | |
| | | } |
| | | ], |
| | | upLoad3:false, |
| | | upLoad4:false, |
| | | fileTypeOptions: [ |
| | | {label: 'csv', value: '.csv'}, |
| | | {label: 'db', value: '.db'}, |
| | |
| | | {label: 'excel', value: '.xlsx'}, |
| | | {label: 'txt', value: '.txt'}, |
| | | {label: 'png', value: '.png'}, |
| | | ] |
| | | ], |
| | | spanList: [], |
| | | specialSpanList: [], |
| | | spanConfig: { |
| | | special: { |
| | | main: "inspectionItemSubclass", |
| | | rows:[ |
| | | { |
| | | name:'deviceName', |
| | | index:1 |
| | | }, |
| | | { |
| | | name:'fileType', |
| | | index:2 |
| | | }, |
| | | { |
| | | name:'collectUrl', |
| | | index:3 |
| | | }, |
| | | { |
| | | name:'storageUrl', |
| | | index:4 |
| | | }, |
| | | { |
| | | name:'ip', |
| | | index:5 |
| | | }, |
| | | { |
| | | name:'inspectionItem', |
| | | index:6 |
| | | }, |
| | | { |
| | | name:'inspectionItemSubclass', |
| | | index:7 |
| | | }, |
| | | { |
| | | name:'formula', |
| | | index:13 |
| | | }, |
| | | { |
| | | name:'inspectionItemSubclass', |
| | | index:14 |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | deleteList: [] |
| | | } |
| | | }, |
| | | // 方法集合 |
| | | methods: { |
| | | rowspan(spanArr, position, spanName) { |
| | | this.tableList.forEach((item, index) => { |
| | | if (index === 0) { |
| | | spanArr.push(1); |
| | | position = 0; |
| | | } else { |
| | | if ( |
| | | this.tableList[index][spanName] === |
| | | this.tableList[index - 1][spanName] |
| | | ) { |
| | | spanArr[position] += 1; |
| | | spanArr.push(0); |
| | | } else { |
| | | spanArr.push(1); |
| | | position = index; |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | spanMethod({ |
| | | row, |
| | | column, |
| | | rowIndex, |
| | | columnIndex |
| | | }) { |
| | | // 一般的合并行 |
| | | if (this.spanConfig != undefined && this.spanConfig.rows && this.spanConfig.rows.length > 0) { |
| | | let i = null; |
| | | let obj = this.spanConfig.rows.find((item, index) => { |
| | | i = index; |
| | | return item.index == columnIndex |
| | | }) |
| | | if (obj) { |
| | | const _row = this.spanList[i].arr[rowIndex]; |
| | | const _col = _row > 0 ? 1 : 0; |
| | | return { |
| | | rowspan: _row, |
| | | colspan: _col, |
| | | }; |
| | | } |
| | | } |
| | | // 特殊的合并行 |
| | | if (this.spanConfig != undefined && this.spanConfig.special && this.spanConfig.special.main && |
| | | this.spanConfig.special.rows && this.spanConfig.special.rows.length > 0) { |
| | | let i = null; |
| | | let obj = this.spanConfig.special.rows.find((item, index) => { |
| | | i = index; |
| | | return item.index == columnIndex |
| | | }) |
| | | if (obj) { |
| | | const _row = this.specialSpanList[i].arr[rowIndex]; |
| | | const _col = _row > 0 ? 1 : 0; |
| | | return { |
| | | rowspan: _row, |
| | | colspan: _col, |
| | | }; |
| | | } |
| | | } |
| | | }, |
| | | fileConfiguration() { |
| | | this.dialogVisible4 = true |
| | | if(this.tableList[0]) { |
| | | this.$set(this.configForm, 'fileType', this.tableList[0].fileType) |
| | | this.$set(this.configForm, 'collectUrl', this.tableList[0].collectUrl) |
| | | this.$set(this.configForm, 'storageUrl', this.tableList[0].storageUrl) |
| | | this.$set(this.configForm, 'ip', this.tableList[0].ip) |
| | | } |
| | | }, |
| | | init() { |
| | | // this.tableList = [] |
| | | this.$axios.get(this.$api.deviceScope.queryDataAcquisitionConfiguration + "?deviceId=" + this.deviceId + "&isDevice=" + false).then(res => { |
| | | this.tableList = res.data |
| | | this.tableList.forEach(i => { |
| | | // replace(/=/g, ' ') |
| | | i.sample = i.sample.replace(/"/g, '').replace(/],/g, ';').replace(/\[/g, '').replace(/]/g, '') |
| | | }) |
| | | if(this.tableList[0]) { |
| | | this.$set(this.configForm, 'fileType', this.tableList[0].fileType) |
| | | this.$set(this.configForm, 'collectUrl', this.tableList[0].collectUrl) |
| | | this.$set(this.configForm, 'storageUrl', this.tableList[0].storageUrl) |
| | | this.$set(this.configForm, 'ip', this.tableList[0].ip) |
| | | this.$set(this.configForm, 'mdbEntrustCode', this.tableList[0].mdbEntrustCode) |
| | | this.$set(this.configForm, 'mdbSampleCode', this.tableList[0].mdbSampleCode) |
| | | } |
| | | // 一般的合并行 |
| | | if (this.spanConfig != undefined && this.spanConfig.rows && this.spanConfig.rows.length > |
| | | 0) { |
| | | this.spanList = []; |
| | | this.spanConfig.rows.forEach((item, index) => { |
| | | this.spanList.push({ |
| | | arr: [], |
| | | position: 0 |
| | | }) |
| | | this.rowspan(this.spanList[index].arr, this.spanList[index].position, item.name); |
| | | }) |
| | | } |
| | | // 特殊的合并行 |
| | | if (this.spanConfig != undefined && this.spanConfig.special && this.spanConfig.special |
| | | .main && this.spanConfig.special.rows && this.spanConfig.special.rows.length > 0) { |
| | | this.specialSpanList = [] |
| | | this.spanConfig.special.rows.forEach((item, index) => { |
| | | this.specialSpanList.push({ |
| | | arr: [], |
| | | position: 0 |
| | | }) |
| | | this.rowspan(this.specialSpanList[index].arr, this.specialSpanList[index].position, this |
| | | .spanConfig.special.main); |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | submitForm4() { |
| | | const obj = Object.assign({ |
| | | deviceId: this.deviceId, |
| | | fileType: this.configForm.fileType, |
| | | collectUrl: this.configForm.collectUrl, |
| | | storageUrl: this.configForm.storageUrl, |
| | | ip: this.configForm.ip, |
| | | isDevice: true, |
| | | mdbEntrustCode: this.configForm.mdbEntrustCode, |
| | | mdbSampleCode: this.configForm.mdbSampleCode |
| | | }) |
| | | this.upLoad4 = true |
| | | this.$axios.post(this.$api.deviceScope.saveDataAcquisitionConfiguration + "?deviceId=" + this.deviceId, obj, {headers: { |
| | | 'Content-Type': 'application/json' |
| | | }}).then(res => { |
| | | if(res.code == 200) { |
| | | this.tableList = res.data |
| | | this.dialogVisible4 = false |
| | | this.init() |
| | | this.$message.success('操作成功') |
| | | } |
| | | this.upLoad4 = false |
| | | }).catch(err => { |
| | | this.upLoad4 = false |
| | | }) |
| | | }, |
| | | dataConfig (row) { |
| | | this.configForm = { |
| | | deviceId: row.deviceId, |
| | | insProductItem: row.insProductItem.trim() |
| | | inspectionItem: row.inspectionItem.trim(), |
| | | inspectionItemSubclass: row.inspectionItemSubclass, |
| | | structureItemParameterId: row.structureItemParameterId |
| | | } |
| | | this.dialogVisible3 = true |
| | | this.$axios.get(this.$api.deviceScope.queryDataAcquisitionConfiguration + "?deviceId=" + row.deviceId + "&insProductItem=" + row.insProductItem.trim()).then(res => { |
| | | this.$axios.get(this.$api.deviceScope.queryDataAcquisitionConfiguration + "?deviceId=" + this.deviceId + |
| | | "&inspectionItem=" + row.inspectionItem.trim() + |
| | | "&isDevice=" + true + |
| | | "&inspectionItemSubclass=" + row.inspectionItemSubclass.trim()).then(res => { |
| | | const data = res.data |
| | | if(data[0]) { |
| | | this.domains.splice(0, 1) |
| | |
| | | i.y = null |
| | | } |
| | | i.formula = this.configForm.formula |
| | | i.deviceId = this.configForm.deviceId |
| | | i.insProductItem = this.configForm.insProductItem |
| | | i.deviceId = this.deviceId |
| | | i.inspectionItem = this.configForm.inspectionItem |
| | | i.inspectionItemSubclass = this.configForm.inspectionItemSubclass |
| | | i.structureItemParameterId = this.configForm.structureItemParameterId |
| | | }) |
| | | this.$axios.post(this.$api.deviceScope.saveDataAcquisitionConfiguration, {dataConfigList: this.domains},{headers: { |
| | | this.$axios.post(this.$api.deviceScope.saveDataAcquisitionConfiguration + "?deviceId=" + this.deviceId, {dataConfigList: this.domains, isDevice: false},{headers: { |
| | | 'Content-Type': 'application/json' |
| | | }}).then(res => { |
| | | this.dialogVisible3 = false |
| | |
| | | id: '' |
| | | } |
| | | ] |
| | | if(this.deleteList.length > 0) { |
| | | this.$axios.delete(this.$api.deviceScope.deleteDataAcquisitionConfiguration + "?ids=" + this.deleteList.join()).then(res => { |
| | | if(res.code == 200) { |
| | | this.init() |
| | | } |
| | | }) |
| | | } |
| | | this.init() |
| | | this.$message.success('添加成功') |
| | | }) |
| | | } else { |
| | |
| | | const index = this.domains.indexOf(item) |
| | | if (index !== -1 && this.domains.length > 1) { |
| | | if(item.id){ |
| | | this.$axios.get(this.$api.deviceScope.deleteDataAcquisitionConfiguration + "?id=" + item.id).then(res => { |
| | | if(res.code == 200) { |
| | | this.domains.splice(index, 1) |
| | | } |
| | | }) |
| | | this.deleteList.push(item.id) |
| | | this.domains.splice(index, 1) |
| | | } else { |
| | | this.domains.splice(index, 1) |
| | | } |
| | |
| | | id: '' |
| | | }); |
| | | }, |
| | | evalResult () { |
| | | evalResult (val) { |
| | | this.configForm.formula = val |
| | | // 根据公式计算出结果 |
| | | }, |
| | | sizeChange(val) { |
| | |
| | | this.page.current = val |
| | | }, |
| | | closeForm () { |
| | | this.deleteList = [] |
| | | this.domains = [{ |
| | | referx: '', |
| | | refery: '', |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .itemFomItem { |
| | | margin-left: 20px; |
| | | } |
| | | |
| | | .search_thing { |
| | | width: 350px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | .search_label { |
| | | width: 110px; |
| | | |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | .data-acquisition-config { |
| | | width: 100%; |
| | | height: 100%; |
| | |
| | | display: flex; |
| | | height: 74px; |
| | | } |
| | | .fomItem2 { |
| | | display: flex; |
| | | width: 100%; |
| | | } |
| | | .fomItemInput { |
| | | width: 180px; |
| | | margin-right: 6px; |
| | | } |
| | | .fomItemInput1 { |
| | | width: 100%; |
| | | margin-right: 6px; |
| | | } |
| | | >>>.el-form-item__label { |
| | | padding-bottom: 0 !important; |
| | | } |