rsbi 4 лет назад
Родитель
Сommit
2256cfe4ff

+ 3 - 3
src/view/bireport/ReportChartDailog.vue

@@ -4,7 +4,7 @@
 		  <el-form :model="val" ref="valForm" label-position="left">
 			<template v-if="type === 'top'">
 				<el-form-item label="维度取Top" label-width="100px">
-					<el-input-number v-model="val.top" :min="1" :max="100" label="描述文字"></el-input-number>
+					<el-input-number v-model="val.top" :min="1" :max="100" label="描述文字" size="small"></el-input-number>
 				</el-form-item>
 			</template>
 			<template v-if="type === 'kpiprop'">
@@ -65,10 +65,10 @@
 					</el-select>
 				</el-form-item>
 				<el-form-item label="值" label-width="100px">
-					<el-input-number v-model="val.value1" label="描述文字"></el-input-number>
+					<el-input-number v-model="val.value1" label="描述文字" size="small"></el-input-number>
 				</el-form-item>
 				<el-form-item label="值2" v-show="val.oper === 'between'" label-width="100px">
-					<el-input-number v-model="val.value2" label="描述文字"></el-input-number>
+					<el-input-number v-model="val.value2" label="描述文字" size="small"></el-input-number>
 				</el-form-item>
 			</template>
 		  </el-form>

+ 5 - 5
src/view/bireport/ReportTableDailog.vue

@@ -19,7 +19,7 @@
 			</template>
 			<template v-if="type === 'top'">
 				<el-form-item label="维度取Top" label-width="100px">
-					<el-input-number v-model="val.top" :min="1" :max="100" label="描述文字"></el-input-number>
+					<el-input-number v-model="val.top" :min="1" :max="100" label="描述文字" size="small"></el-input-number>
 				</el-form-item>
 				<el-form-item label="" label-width="100px">
 					<el-select v-model="val.topType" placeholder="请选择">
@@ -90,10 +90,10 @@
 					</el-select>
 				</el-form-item>
 				<el-form-item label="值" label-width="100px">
-					<el-input-number v-model="val.value1" label="描述文字"></el-input-number>
+					<el-input-number v-model="val.value1" label="描述文字" size="small"></el-input-number>
 				</el-form-item>
 				<el-form-item label="值2" v-show="val.oper === 'between'" label-width="100px">
-					<el-input-number v-model="val.value2" label="描述文字"></el-input-number>
+					<el-input-number v-model="val.value2" label="描述文字" size="small"></el-input-number>
 				</el-form-item>
 			</template>
 			<template v-if="type === 'kpiwarning'">
@@ -128,7 +128,7 @@
 						>
 						</el-option>
 					</el-select>
-					<el-input-number v-model="val.value1" controls-position="right" @change="handleChange(1)"></el-input-number>
+					<el-input-number v-model="val.value1" controls-position="right" @change="handleChange(1)" size="small"></el-input-number>
 				</el-form-item>
 				<el-form-item label-width="160px">
 					<span slot="label">
@@ -144,7 +144,7 @@
 						>
 						</el-option>
 					</el-select>
-					<el-input-number v-model="val.value2" controls-position="right" @change="handleChange(2)"></el-input-number>
+					<el-input-number v-model="val.value2" controls-position="right" @change="handleChange(2)" size="small"></el-input-number>
 				</el-form-item>
 				<el-form-item label-width="160px">
 					<span slot="label">

+ 2 - 2
src/view/portal/LayoutParamAdd.vue

@@ -9,7 +9,7 @@
               <el-input v-model="param.paramname"></el-input>
             </el-form-item>
             <el-form-item label="长度" label-width="100px">
-              <el-input-number v-model="param.size" :min="5" :max="30"></el-input-number>
+              <el-input-number v-model="param.size" :min="5" :max="30" size="small"></el-input-number>
             </el-form-item>
             <template v-if="datetype == 'dateselect' || datetype ==='monthselect' || datetype ==='yearselect'">
               <el-form-item label="时间格式" label-width="100px">
@@ -29,7 +29,7 @@
               <el-input v-model="param.defvalue"></el-input>
             </el-form-item>
             <el-form-item label="隐藏参数" label-width="100px">
-              <el-switch v-model="param.hiddenprm" active-color="#13ce66" inactive-color="#dbdcdc" active-value="y" inactive-value="n">
+              <el-switch v-model="param.hiddenprm" active-value="y" inactive-value="n">
               </el-switch>
               <span class="text-warning"> 隐藏参数不会在页面中显示</span>
             </el-form-item>

+ 32 - 1
src/view/portal/data/Chart.vue

@@ -4,6 +4,7 @@ import {baseUrl} from '@/common/biConfig'
 import $ from 'jquery'
 import * as utils from '@/view/portal/Utils'
 import * as chartUtils from '@/view/bireport/chartUtils'
+import * as tools from '@/view/bireport/bireportUtils'
 
 export default {
   components:{
@@ -114,7 +115,37 @@ export default {
     },
     chartView(){
       this.$parent.$parent.$refs['optarea'].$refs['mv_'+this.comp.id].chartView();
-    },
+	},
+	chartmenu(o, pos){
+		const ts = this;
+		$.contextMenu( 'destroy');
+		$.contextMenu({
+			selector: 'a.charticon', 
+			className: "chartDimOpt",
+			trigger: 'left',
+			delay: 500,
+			autoHide:true,
+			callback: function(key, opt) {
+				var comp = ts.comp;
+				if(key == 'asc' || key == 'desc'){
+					chartUtils.chartsort(key, pos, comp, ()=>{
+						ts.setUpdate();
+						ts.chartView();
+					});
+				}else if(key == "remove"){
+					chartUtils.delChartKpiOrDim(pos, comp, ()=>{
+						ts.setUpdate();
+						ts.chartView();
+					});
+				}
+			},
+			items: {
+				"asc": {name: "升序", icon: "fa-sort-amount-asc"},
+				"desc": {name: "降序", icon: 'fa-sort-amount-desc'},
+				"remove": {name: "清除",icon:"fa-remove"}
+			}
+		});
+	},
     initChartKpiDrop(){
         const ts = this;
         let comp = this.comp;

+ 176 - 2
src/view/portal/data/Grid.vue

@@ -11,12 +11,57 @@
           <template v-for="item in comp.cols">
             <span :key="item.id" class="dimcol">
               <span class="text">{{item.name}}</span>
-              <div class="ibox-tools"><button class="btn btn-outline btn-success btn-xs"><i class="fa fa-wrench"></i></button>
+              <div class="ibox-tools"><button class="btn btn-outline btn-success btn-xs" @click="setGridCol(item)"><i class="fa fa-wrench"></i></button>
               </div>
            </span>
           </template>
         </template>
        </div>
+         	<el-dialog title="表格字段属性" :visible.sync="propshow" :close-on-click-modal="false" custom-class="nopadding">
+             <el-form :model="val" ref="valForm" label-position="left">
+                <el-form-item label="显示名称" label-width="100px">
+                  <el-input v-model="val.dispName" label="名称"></el-input>
+                </el-form-item>
+                <el-form-item label="所属表" label-width="100px">
+                  {{col.tname}}
+                </el-form-item>
+                <el-form-item label="对应字段" label-width="100px">
+                  {{col.name}}
+                </el-form-item>
+                <el-form-item label="位置" label-width="100px">
+                   <el-radio-group v-model="val.palign" size="small">
+                    <el-radio-button label="left">居左</el-radio-button>
+                    <el-radio-button label="center">居中</el-radio-button>
+                    <el-radio-button label="right">居右</el-radio-button>
+                  </el-radio-group>
+                </el-form-item>
+                <template v-if="col.type === 'Date' || col.type ==='Datetime'">
+                  <el-form-item label="格式化" label-width="100px">
+                    <el-input v-model="val.fmt"></el-input>
+                  </el-form-item>
+                </template>
+                 <template v-if="col.type === 'Double' || col.type ==='Int'">
+                <el-form-item label="格式化" label-width="100px">
+                    <el-select
+                      v-model="val.fmt"
+                      placeholder="请选择"
+                      >
+                      <el-option
+                        v-for="item in opt.fmts"
+                        :key="item.value"
+                        :label="item.text"
+                        :value="item.value"
+                      >
+                    </el-option>
+                    </el-select>
+                </el-form-item>
+                 </template>
+             </el-form>
+             <div slot="footer" class="dialog-footer">
+              <el-button type="primary" @click="saveProp()">确 定</el-button>
+              <el-button @click="propshow = false">取 消</el-button>
+            </div>
+          </el-dialog>
     </div>
 </template>
 
@@ -37,7 +82,19 @@ export default {
   },
   data(){
     return {
-      
+      propshow:false,
+      val:{
+        dispName:"",
+        palign:"left",
+        fmt:""
+      },
+      col:{
+        tname:null,
+        name:null
+      },
+      opt:{
+        fmts:utils.fmtJson
+      }
     }
   },
   mounted(){
@@ -54,6 +111,123 @@ export default {
     gridView(){
       this.$parent.$parent.$refs['optarea'].$refs['mv_'+this.comp.id].gridView();
     },
+    setGridCol(col){
+      $.contextMenu( 'destroy');
+      let ts = this;
+      var comp = this.comp;
+      var items = {
+            "sort":{name:"排序", items:{asc:{name:"升序",icon:"fa-sort-amount-asc"},
+                desc:{name:"降序", icon:"fa-sort-amount-desc"},
+                def:{name:"默认", icon:""}}},
+            "move":{name:"移动", icon:"fa-arrows-alt", items:{left:{name:"左移", icon:"fa-arrow-left"}, right:{name:"右移", icon:"fa-arrow-right"}}},
+            "prop": {name: "属性"},
+            "clear": {name: "删除", icon:"fa-times"}
+        };
+        $.contextMenu({
+          selector: '#gridData span.dimcol button', 
+          trigger: 'left',
+          delay: 500,
+          autoHide:true,
+          callback: function(opt) {
+            if(opt == "asc" || opt == "desc" || opt == 'def'){
+              if(opt == "def"){
+                opt = "";
+              }
+              ts.gridColsort(opt, comp, col);
+            }else if(opt == "prop"){
+              ts.setGridColProp(comp, col);
+            }else if(opt == "clear"){
+              ts.delGridCol(comp, col.id);
+            }else if(opt == "left" || opt == "right"){
+              ts.tableColmove(opt, comp, col.id);
+            }
+          },
+          items: items
+      });
+    },
+    setGridColProp(comp, col){
+      this.propshow = true;
+      this.col = col;
+      this.val.dispName = col.dispName;
+      this.val.fmt = col.fmt;
+      this.val.palign = col.align;
+    },
+    saveProp(){
+      let col = this.col;
+      col.dispName = this.val.dispName;
+			col.fmt = this.val.fmt;
+      col.align = this.val.palign;
+      this.propshow = false;
+      this.setUpdate();
+      this.gridView();
+    },
+    tableColmove(tp, comp, id){
+      var dims = comp.cols;
+      if(dims.length <= 1){
+        utils.msginfo('无效移动。');
+        return;
+      }
+      for(var i=0; i<dims.length; i++){
+        if(dims[i].id == id){
+          if(tp == 'left'){
+            if(i <= 0){
+              utils.msginfo('无效移动。');
+              return;
+            }else{
+              var tp = dims[i - 1];
+              dims[i - 1] = dims[i];
+              dims[i] = tp;
+              this.setUpdate();
+               this.gridView();
+              return;
+            }
+          }else
+          if(tp == 'right'){
+            if( i >= dims.length - 1){
+              utils.msginfo('无效移动。');
+              return;
+            }else{
+              var tp = dims[i + 1];
+              dims[i + 1] = dims[i];
+              dims[i] = tp;
+              this.setUpdate();
+              this.gridView();
+              return;
+            }
+          }
+          break;
+        }
+      }
+    },
+    delGridCol(comp, id){
+      if(comp.cols.length == 1){
+        msginfo("表格至少需要含有一个字段。");
+        return;
+      }
+      //从json移除
+      var idx = -1;
+      for(let i=0; i<comp.cols.length; i++){
+        var p = comp.cols[i];
+        if(p.id == id){
+          idx = i;
+          break;
+        }
+      }
+      comp.cols.splice(idx, 1);
+      this.setUpdate();
+      this.gridView();
+    },
+    gridColsort(tp, comp, col){
+      //清楚其他字段的排序
+      for(let i=0; i<comp.cols.length; i++){
+        delete comp.cols[i].sort;
+      }
+      if(tp != ""){
+        col.sort = tp;
+      }
+      this.setUpdate();
+      this.gridView();
+    },
     bindDropEvent(){
       let ts = this;
       $("#gridData").droppable({

+ 1 - 1
src/view/portal/view/Grid.vue

@@ -25,7 +25,7 @@ export default {
     if(data){
       let ths = [];
       data.header.forEach(element => {
-        ths.push(h('th', {class:"grid3-td",attrs:{align:element.align?element.align:"center"}}, [h('div', {class:"dg-cell"}, element.desc)]));
+        ths.push(h('th', {class:"grid3-td"}, [h('div', {class:"dg-cell"}, element.desc)]));
       });
       let table1 = h('table', {class:"lockgrid"}, [h('thead', [h("tr", ths)])]);