|
@@ -0,0 +1,346 @@
|
|
|
+<template>
|
|
|
+ <div class="page-container">
|
|
|
+ <div class="tool-bar">
|
|
|
+ <el-select v-model="formModel.tempId" placeholder="选择多井分组曲线模板" @change="changeTempHandle">
|
|
|
+ <el-option value="-1" label="空白模板"/>
|
|
|
+ <el-option
|
|
|
+ v-for="(item,index) in tempbases"
|
|
|
+ :key="item.tempId"
|
|
|
+ :label="item.tempName"
|
|
|
+ :value="item.tempId"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ <el-button-group>
|
|
|
+ <el-button type="primary" icon="Folder" @click="saveTemp('save')">保存</el-button>
|
|
|
+ <el-button type="primary" icon="FolderAdd" @click="saveTemp('saveAs')">另存为</el-button>
|
|
|
+ <el-button type="primary" icon="Delete" @click="delTemp">删除</el-button>
|
|
|
+ </el-button-group>
|
|
|
+
|
|
|
+ <el-form-item label="面板宽" style="margin:0px 20px;">
|
|
|
+ <el-input-number v-model="formModel.panelWidth" style="width:120px;" :min="200" :max="500"/>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="面板头高">
|
|
|
+ <el-input-number v-model="formModel.headerH" style="width:120px;" :min="100" :max="300"/>
|
|
|
+ </el-form-item>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="temp-area">
|
|
|
+ <div class="panel-item" v-for="(panel,index) in panels" :key="index">
|
|
|
+ <div class="panel-header">
|
|
|
+ <div class="serial-item" v-for="(serial,idx) in panel.serials" :key="idx">
|
|
|
+ <el-input-number v-model="serial.min" :precision="1" :controls="false" :min="0"/>
|
|
|
+ <label>{{serial.title}}</label>
|
|
|
+ <el-input-number v-model="serial.max" :precision="1" :controls="false" :min="0"/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="panel-body">
|
|
|
+ <el-select v-model="panel.codes" :multiple-limit="5" collapse-tags collapse-tags-tooltip placeholder="选择参数" multiple @change="changeParamHandle(panel)">
|
|
|
+ <el-option v-for="param in paramCodes" :key="param.paramCode" :label="param.paramName" :value="param.paramCode"/>
|
|
|
+ </el-select>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+ import {reactive,ref, toRaw,onMounted,computed} from 'vue'
|
|
|
+ import {ElMessageBox,ElMessage} from 'element-plus'
|
|
|
+ import api from '../../api/multiTabTemp.js'
|
|
|
+
|
|
|
+ const formModel = reactive({
|
|
|
+ tempId:null,
|
|
|
+ headerH:180,
|
|
|
+ panelWidth:240
|
|
|
+ })
|
|
|
+
|
|
|
+ const tempbases=ref([])
|
|
|
+
|
|
|
+ const paramCodes=ref(null)
|
|
|
+
|
|
|
+ const paramMap={}
|
|
|
+
|
|
|
+ const panels=ref([
|
|
|
+ {
|
|
|
+ /*serials:[{
|
|
|
+ title:null,
|
|
|
+ min:null,
|
|
|
+ max:null,
|
|
|
+ code:null
|
|
|
+ }],
|
|
|
+ codes:null*/
|
|
|
+ }
|
|
|
+
|
|
|
+ ])
|
|
|
+
|
|
|
+ onMounted(()=>{
|
|
|
+ loadTemps()
|
|
|
+ loadParamType()
|
|
|
+ })
|
|
|
+
|
|
|
+ const addPanel=()=>{
|
|
|
+ panels.value.push({
|
|
|
+ serials:null,
|
|
|
+ codes:null,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ const delPanel=(idx)=>{
|
|
|
+ panels.value.splice(idx,1)
|
|
|
+ }
|
|
|
+
|
|
|
+ const resetPage=()=>{
|
|
|
+ formModel.headerH=180
|
|
|
+ formModel.panelWidth=240
|
|
|
+ panels.value=[{}]
|
|
|
+ }
|
|
|
+
|
|
|
+ const loadTemps=()=>{
|
|
|
+ api.loadTemps('multiGroup').then(resp=>{
|
|
|
+ if(resp.code==0){
|
|
|
+ tempbases.value=resp.data
|
|
|
+ }
|
|
|
+ }).catch(error=>{
|
|
|
+
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ const loadParamType=()=>{
|
|
|
+ api.loadParamType().then(resp=>{
|
|
|
+ if(resp.code==0){
|
|
|
+ resp.data.forEach((param,idx)=>{
|
|
|
+ if(param.paramCode.indexOf('diagram')<0){
|
|
|
+ paramMap[param.paramCode]=param
|
|
|
+ }
|
|
|
+
|
|
|
+ })
|
|
|
+ paramCodes.value=Object.values(paramMap) //.filter(d=>d.paramCode.indexOf('diagram')<0)
|
|
|
+ }
|
|
|
+ }).catch(error=>{
|
|
|
+
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ const changeParamHandle=(panel)=>{
|
|
|
+ let newSerials=[]
|
|
|
+ if(!panel.serials||panel.serials.length==0){
|
|
|
+ panel.codes.forEach(code=>{
|
|
|
+ newSerials.push({
|
|
|
+ title:paramMap[code].paramName,
|
|
|
+ min:0,
|
|
|
+ max:10,
|
|
|
+ code
|
|
|
+ })
|
|
|
+ })
|
|
|
+ panel.serials=newSerials
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ let codestr='#'+panel.codes.join('#')
|
|
|
+ panel.serials.forEach(serial=>{
|
|
|
+ if(codestr.indexOf(serial.code)>=0){
|
|
|
+ newSerials.push(serial)
|
|
|
+ codestr=codestr.replace(('#'+serial.code),'')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if(codestr.length>1){
|
|
|
+ codestr=codestr.replace(/^#/,'')
|
|
|
+ codestr=codestr.split('#')
|
|
|
+ codestr.forEach(code=>{
|
|
|
+ newSerials.push({
|
|
|
+ title:paramMap[code].paramName,
|
|
|
+ min:0,
|
|
|
+ max:10,
|
|
|
+ code
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ panel.serials=newSerials
|
|
|
+ }
|
|
|
+
|
|
|
+ //选择模板后,加载明细
|
|
|
+ const changeTempHandle=(val)=>{
|
|
|
+ resetPage()
|
|
|
+ if(val=="-1"){ //空白模板
|
|
|
+ return
|
|
|
+ }
|
|
|
+ api.getTempDtl(val).then(resp=>{
|
|
|
+ if(resp.code!=0){
|
|
|
+ ElMessage.error(err||'加载模板明细失败')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if(resp.data&&resp.data.tempContent){
|
|
|
+ let tempConfig=JSON.parse(resp.data.tempContent)
|
|
|
+ //console.log(tempConfig)
|
|
|
+ formModel.headerH=tempConfig.headerH
|
|
|
+ formModel.panelWidth=tempConfig.panelWidth
|
|
|
+ panels.value=tempConfig.panels
|
|
|
+ }
|
|
|
+
|
|
|
+ }).catch(err=>{
|
|
|
+
|
|
|
+ }
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ const getSaveData=()=>{
|
|
|
+ let temDtl={panelWidth:formModel.panelWidth,headerH:formModel.headerH,panels:panels.value}
|
|
|
+ return {tempId:formModel.tempId,tempContent:JSON.stringify(temDtl),tempType:'multiGroup'}
|
|
|
+ }
|
|
|
+
|
|
|
+ const getSaveTempName=()=>{
|
|
|
+ if(tempbases.value&&tempbases.value.length>0){
|
|
|
+ let temps=tempbases.value.filter(temp=>temp.tempId==formModel.tempId)
|
|
|
+ return temps&&temps.length>0?temps[0].tempName:null
|
|
|
+ }
|
|
|
+ return null
|
|
|
+ }
|
|
|
+
|
|
|
+ //保存
|
|
|
+ const saveTemp=(tag)=>{
|
|
|
+ let saveAPI=tag=='saveAs'?api.saveAs:api.save
|
|
|
+ return ElMessageBox.prompt('创建新模板',null,{
|
|
|
+ showCancelButton:true,
|
|
|
+ showInput:true,
|
|
|
+ inputType:'text',
|
|
|
+ inputValue:getSaveTempName(),
|
|
|
+ inputPlaceholder:'请输入模板名称',
|
|
|
+ inputPattern:/\S+/,
|
|
|
+ inputErrorMessage:'模板名称不能为空',
|
|
|
+ closeOnClickModal:false
|
|
|
+ }).then(({value })=>{
|
|
|
+ let saveData=getSaveData()
|
|
|
+ //console.log(saveData)
|
|
|
+ saveData['tempName']=value
|
|
|
+ saveAPI(saveData).then(resp=>{
|
|
|
+ if(resp.code!=0){
|
|
|
+ ElMessage.error(resp.msg||'操作失败')
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ ElMessage.success('操作成功')
|
|
|
+ loadTemps()
|
|
|
+ formModel.tempId=resp.data
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ })
|
|
|
+ .catch(err => {
|
|
|
+ console.log('cancel save as '+err)
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //删除
|
|
|
+ const delTemp=()=>{
|
|
|
+ if(formModel.tempId==null||formModel.tempId=="-1"){
|
|
|
+ ElMessage.error('还未选择模板')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ ElMessageBox.confirm(
|
|
|
+ '确定要删除该模板吗?',
|
|
|
+ '操作确认',
|
|
|
+ {
|
|
|
+ confirmButtonText:'确定',
|
|
|
+ cancelButtonText:'取消',
|
|
|
+ type: 'warning'
|
|
|
+ }
|
|
|
+ ).then(()=>{
|
|
|
+ api.del(formModel.tempId).then(resp=>{
|
|
|
+ if(resp.code!=0){
|
|
|
+ ElMessage.error(resp.msg)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ ElMessage.success('操作成功')
|
|
|
+ formModel.tempId=null
|
|
|
+ resetPage()
|
|
|
+ loadTemps()
|
|
|
+
|
|
|
+ }).catch(err=>{
|
|
|
+ ElMessage.error(err||'操作失败')
|
|
|
+ })
|
|
|
+ }).catch(()=>{
|
|
|
+ console.log('cancel del')
|
|
|
+ })
|
|
|
+ }
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+ .page-container{
|
|
|
+ height:100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .tool-bar{
|
|
|
+ height:45px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding: 5px 10px;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ display: flex;
|
|
|
+ flex-flow:row nowrap;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ .temp-area{
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding:10px;
|
|
|
+ display: flex;
|
|
|
+ flex-flow: row nowrap;
|
|
|
+ width:auto;
|
|
|
+ overflow: auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ .temp-area .panel-item{
|
|
|
+ border:1px solid #d2d2d2;
|
|
|
+ width:v-bind(formModel.panelWidth+'px');
|
|
|
+ height:500px;
|
|
|
+ box-sizing: border-box;
|
|
|
+ margin-right:10px;
|
|
|
+ flex-shrink:0;
|
|
|
+ display: flex;
|
|
|
+ flex-flow:column nowrap;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+
|
|
|
+ .temp-area .panel-item .panel-header{
|
|
|
+ height: v-bind(formModel.headerH+'px');
|
|
|
+ border-bottom: 1px solid #00aaff;
|
|
|
+ width:100%;
|
|
|
+ }
|
|
|
+
|
|
|
+ .panel-header .serial-item{
|
|
|
+ display: flex;
|
|
|
+ flex-flow: row nowrap;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ font-size:14px;
|
|
|
+ border-bottom: 1px solid #d2d2d2;
|
|
|
+ }
|
|
|
+ .panel-item .panel-body{
|
|
|
+ flex:1;
|
|
|
+ width:100%;
|
|
|
+ display: flex;
|
|
|
+ flex-flow:column nowrap;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ box-sizing: border-box;
|
|
|
+ padding:10px;
|
|
|
+ }
|
|
|
+ .panel-body .del-icon{
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ .serial-item .el-input-number{
|
|
|
+ width:80px;
|
|
|
+ height:28px;
|
|
|
+
|
|
|
+ }
|
|
|
+ .serial-item:deep(.el-input-number .el-input__wrapper) {
|
|
|
+ padding:2px 4px;
|
|
|
+ }
|
|
|
+</style>
|