LayoutTmp.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <VueDragResize
  3. :isActive="false"
  4. w="auto"
  5. h="auto"
  6. :snapToGrid="true"
  7. :gridX="10"
  8. :gridY="10"
  9. v-for="(el,index) in modelValue"
  10. :key="el.paramCode"
  11. :isResizable="el.elType!='single'"
  12. :parentLimitation="true"
  13. :x="el.left||0"
  14. :y="el.top||0"
  15. @resizing="(newRect)=>{resize(newRect,el)}"
  16. @dragstop="(newRect)=>{resize(newRect,el)}"
  17. >
  18. <div class="single" v-if="el.elType=='single'" :style="{width:el.width+'px',height:el.height+'px'}">
  19. <div class="single-header">{{el.paramName}}</div>
  20. <div class="single-body"></div>
  21. </div>
  22. <div class="multi" v-else-if="el.elType=='multi'" :style="{width:el.width+'px',height:el.height+'px'}">
  23. <div class="multi-header">{{el.paramName}}</div>
  24. <div class="multi-body"></div>
  25. </div>
  26. <div class="wellName" v-else-if="el.elType=='wellName'" :style="{width:el.width+'px',height:el.height+'px'}">
  27. {{el.paramName}}
  28. </div>
  29. </VueDragResize>
  30. </template>
  31. <script setup>
  32. import {ref,reactive,toRaw,onMounted } from 'vue'
  33. import VueDragResize from 'vue-drag-resize/src'
  34. const emit=defineEmits(['update:modelValue'])
  35. const props=defineProps({
  36. modelValue:{
  37. type:Array,
  38. required:true
  39. }
  40. })
  41. const resize=(newRect,el)=>{
  42. //console.log(el,tag)
  43. //console.log(newRect)
  44. let {width,height,left,top}=newRect
  45. Object.assign(el,{width,height,left,top})
  46. emit('update:modelValue',props.modelValue)
  47. }
  48. /**
  49. const activeHandle=(el,activeTag)=>{
  50. el['active']=activeTag
  51. }**/
  52. </script>
  53. <style scoped>
  54. .single,.multi{
  55. box-sizing: border-box;
  56. width: 100%;
  57. height: 100%;
  58. padding: 0px;
  59. background-color: #f0f9ff;
  60. border:1px solid #e3f1f8;
  61. border-radius: 5px;
  62. }
  63. .single .single-header{
  64. background-color:#5085ff;
  65. height: 50%;
  66. border-top-left-radius: 5px;
  67. border-top-right-radius: 5px;
  68. color:#fff;
  69. text-align: center;
  70. font-size: 14px;
  71. display: flex;
  72. flex-flow: row nowrap;
  73. justify-content: center;
  74. align-items: center;
  75. }
  76. .multi{
  77. text-align: center;
  78. font-size: 14px;
  79. display: flex;
  80. flex-flow:column nowrap;
  81. }
  82. .multi-header{
  83. height:30px;
  84. font-size: 14px;
  85. line-height: 30px;
  86. background-color:#5085ff;
  87. border-top-left-radius: 5px;
  88. border-top-right-radius: 5px;
  89. color:#fff;
  90. }
  91. .multi-body{
  92. flex:1;
  93. box-sizing: border-box;
  94. padding:2px;
  95. }
  96. .wellName{
  97. padding: 0px;
  98. border-bottom: 1px solid #5085ff;
  99. }
  100. </style>