PortalIndexCustomiz.vue 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <template>
  2. <div class="customizLayout">
  3. <el-menu @select="handleSelect" class="el-menu-demo" background-color="#f6f8f8" text-color="#777" mode="horizontal">
  4. <el-menu-item index="back"><i class="fa fa-arrow-left"></i> 返回</el-menu-item>
  5. <el-menu-item index="save"><i class="glyphicon glyphicon-save"></i> 保存</el-menu-item>
  6. <el-menu-item index="layout"><i class="glyphicon glyphicon-th-large"></i> 布局</el-menu-item>
  7. <el-submenu index="data">
  8. <template slot="title"><i class="fa fa-database"></i> 数据</template>
  9. <el-menu-item index="data-1">选择立方体</el-menu-item>
  10. <el-menu-item index="data-2">选择数据表</el-menu-item>
  11. </el-submenu>
  12. </el-menu>
  13. <layout-left :pageInfo="pageInfo" ref="layoutleftForm"></layout-left>
  14. <div class="layout-center">
  15. <layout-param ref="paramForm" :pageInfo="pageInfo"></layout-param>
  16. <layout-optarea ref="optarea" :pageInfo="pageInfo"></layout-optarea>
  17. </div>
  18. <portal-layout :pageInfo="pageInfo" ref="layout"></portal-layout>
  19. <selectCube ref="selectCubeForm" :callback="selectCubeCallback"></selectCube>
  20. <select-dset ref="selectDsetForm"></select-dset>
  21. <layout-param-add ref="prarmAddForm" :pageInfo="pageInfo"></layout-param-add>
  22. <!-- 保存框 -->
  23. <el-dialog title="报表保存" :visible.sync="saveShow" :close-on-click-modal="false" custom-class="nopadding">
  24. <el-form :model="saveInfo" ref="saveForm" :rules="rules" label-position="left">
  25. <el-form-item label="报表名称" label-width="100px" prop="name">
  26. <el-input v-model="saveInfo.name"></el-input>
  27. </el-form-item>
  28. </el-form>
  29. <div slot="footer" class="dialog-footer">
  30. <el-button type="primary" @click="savePage()">确 定</el-button>
  31. <el-button @click="saveShow = false">取 消</el-button>
  32. </div>
  33. </el-dialog>
  34. </div>
  35. </template>
  36. <script>
  37. import {baseUrl, ajax} from '@/common/biConfig'
  38. import layoutLeft from "./LayoutLeft.vue"
  39. import PortalLayout from "./PortalLayoutDailog.vue"
  40. import selectCube from "@/view/bireport/SelectCube"
  41. import SelectDset from "./SelectDset"
  42. import layoutParam from "./LayoutParam.vue"
  43. import LayoutOptarea from './LayoutOptarea.vue'
  44. import LayoutParamAdd from './LayoutParamAdd.vue'
  45. import "jquery-contextmenu";
  46. import "jquery-contextmenu/dist/jquery.contextMenu.min.css";
  47. export default {
  48. name: "customizer",
  49. components: {layoutLeft, PortalLayout, selectCube, SelectDset, layoutParam, LayoutOptarea, LayoutParamAdd},
  50. props: {
  51. },
  52. data() {
  53. return {
  54. pageInfo:{"layout":1,"body":{tr1:[{colspan:1, rowspan:1, width:100, height:100, id:1}]}},
  55. isupdate:false,
  56. saveShow:false,
  57. saveInfo:{
  58. name:null
  59. },
  60. rules:{
  61. name:[
  62. { required: true, message: '必填', trigger: 'blur' }
  63. ]
  64. },
  65. isbindTdEvent:false //是否给布局器table的 td 绑定拖拽事件
  66. }
  67. },
  68. methods: {
  69. //回写报表
  70. init(pageId){
  71. ajax({
  72. url:"portal/get.action",
  73. data:{pageId:pageId},
  74. type:"GET",
  75. success:(resp)=>{
  76. this.pageInfo = JSON.parse(resp.rows);
  77. this.isbindTdEvent = true; //需要重新绑定事件
  78. }
  79. }, this);
  80. },
  81. handleSelect(key, keyPath){
  82. if(key === 'back'){
  83. this.$parent.showIndex = true;
  84. this.$parent.$refs['indexForm'].loadDatas();
  85. }
  86. if(key ==='layout'){
  87. this.$refs['layout'].setLayout();
  88. }
  89. if(key === 'data-1'){
  90. this.$refs['selectCubeForm'].select();
  91. }
  92. if(key === 'data-2'){
  93. this.$refs['selectDsetForm'].select();
  94. }
  95. if(key === 'save'){
  96. if(!this.pageInfo.id){
  97. this.saveShow = true;
  98. }else{
  99. ajax({
  100. url:"portal/save.action",
  101. type:"POST",
  102. data:{"pageInfo": JSON.stringify(this.pageInfo), pageId:this.pageInfo.id},
  103. success:(resp)=>{
  104. this.$notify.success({
  105. title: '更新成功!',
  106. offset: 50
  107. });
  108. }
  109. }, this);
  110. }
  111. }
  112. },
  113. selectCubeCallback(cubeId){
  114. this.pageInfo.selectDs = cubeId;
  115. var o = this.$refs['layoutleftForm'];
  116. o.tabActive = 'data-tab-2';
  117. o.initcubes();
  118. },
  119. savePage(){
  120. let ts = this;
  121. var pageId = this.pageInfo.id;
  122. if(!pageId){
  123. this.$refs['saveForm'].validate((valid) => {
  124. if(valid){
  125. ajax({
  126. url:"portal/save.action",
  127. type:"POST",
  128. data:{"pageInfo": JSON.stringify(ts.pageInfo), pageName:ts.saveInfo.name},
  129. success:(resp)=>{
  130. ts.$notify.success({
  131. title: '保存成功!',
  132. offset: 50
  133. });
  134. ts.saveShow = false;
  135. ts.pageInfo.id = resp.rows;
  136. }
  137. }, ts);
  138. }
  139. });
  140. }else{
  141. ajax({
  142. url:"portal/save.action",
  143. type:"POST",
  144. data:{"pageInfo": JSON.stringify(ts.pageInfo), pageId:pageId},
  145. success:(resp)=>{
  146. ts.$notify.success({
  147. title: '更新成功!',
  148. offset: 50
  149. });
  150. }
  151. }, ts);
  152. }
  153. }
  154. },
  155. watch: {
  156. },
  157. filters: {
  158. },
  159. mounted() {
  160. }
  161. }
  162. </script>
  163. <style lang="less" scoped>
  164. .customizLayout {
  165. height: 100%;
  166. width: 100%;
  167. }
  168. .layout-center {
  169. position: inherit;
  170. margin: 0 0 0 223px;
  171. height: calc(100% - 35px);
  172. }
  173. </style>