|
|
@@ -0,0 +1,263 @@
|
|
|
+/**
|
|
|
+ * chart-line设置
|
|
|
+ */
|
|
|
+Ext.define('erp.view.core.trigger.LineTrigger', {
|
|
|
+ extend: 'Ext.form.field.Trigger',
|
|
|
+ alias: 'widget.linetrigger',
|
|
|
+ triggerCls: 'line-trigger-icon',
|
|
|
+ onTriggerClick: function() {
|
|
|
+ var trigger = this;
|
|
|
+ try {
|
|
|
+ Ext.JSON.decode(trigger.getValue() || '{}');
|
|
|
+ }catch(e) {
|
|
|
+ showErrorMsg('失败', '格式有误!');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ var legendEditor = Ext.create('Ext.window.Window', {
|
|
|
+ field: trigger,
|
|
|
+ title: trigger.fieldLabel,
|
|
|
+ width: 700,
|
|
|
+ height: 400,
|
|
|
+ modal:true,
|
|
|
+ layout:'border',
|
|
|
+ items: [{
|
|
|
+ xtype:'form',
|
|
|
+ region: 'center',
|
|
|
+ bodyPadding: 10,
|
|
|
+ autoScroll: true,
|
|
|
+ layout: 'column',
|
|
|
+ defaults: {
|
|
|
+ padding: '0 10 10 10',
|
|
|
+ width: 300
|
|
|
+ },
|
|
|
+ items: [{
|
|
|
+ xtype: 'numberfield',
|
|
|
+ fieldLabel: '上边距(%)',
|
|
|
+ name: 'top',
|
|
|
+ minValue: 0,
|
|
|
+ emptyText: 'auto'
|
|
|
+ }, {
|
|
|
+ xtype: 'numberfield',
|
|
|
+ fieldLabel: '左边距(%)',
|
|
|
+ name: 'left',
|
|
|
+ minValue: 0,
|
|
|
+ emptyText: '10'
|
|
|
+ }, {
|
|
|
+ xtype: 'numberfield',
|
|
|
+ fieldLabel: '右边距(%)',
|
|
|
+ name: 'right',
|
|
|
+ minValue: 0,
|
|
|
+ emptyText: '10'
|
|
|
+ }, {
|
|
|
+ xtype: 'numberfield',
|
|
|
+ fieldLabel: '下边距(%)',
|
|
|
+ name: 'bottom',
|
|
|
+ minValue: 0,
|
|
|
+ emptyText: 'auto'
|
|
|
+ }, {
|
|
|
+ xtype: 'numberfield',
|
|
|
+ fieldLabel: '线宽(px)',
|
|
|
+ name: 'lineWidth',
|
|
|
+ minValue: 0,
|
|
|
+ emptyText: '2'
|
|
|
+ }, {
|
|
|
+ xtype: 'combobox',
|
|
|
+ fieldLabel: '线型',
|
|
|
+ name: 'lineType',
|
|
|
+ listConfig: {
|
|
|
+ maxHeight: 100
|
|
|
+ },
|
|
|
+ store: Ext.create('Ext.data.Store', {
|
|
|
+ fields: ['value', 'name'],
|
|
|
+ data : [
|
|
|
+ { name: '实线', value: 'solid' },
|
|
|
+ { name: '虚线', value: 'dashed' },
|
|
|
+ { name: '点线', value: 'dotted' }
|
|
|
+ ]
|
|
|
+ }),
|
|
|
+ queryMode: 'local',
|
|
|
+ displayField: 'name',
|
|
|
+ valueField: 'value',
|
|
|
+ emptyText: '实线'
|
|
|
+ }, {
|
|
|
+ xtype: 'checkbox',
|
|
|
+ fieldLabel: '<font title="线条将平滑转折">平滑线条</font>',
|
|
|
+ name: 'smooth',
|
|
|
+ inputValue: true
|
|
|
+ }, {
|
|
|
+ xtype: 'checkbox',
|
|
|
+ fieldLabel: '隐藏标注图形',
|
|
|
+ name: 'hideSymbol',
|
|
|
+ inputValue: true
|
|
|
+ }, {
|
|
|
+ xtype: 'combobox',
|
|
|
+ fieldLabel: '标注图形样式',
|
|
|
+ name: 'symbol',
|
|
|
+ listConfig: {
|
|
|
+ maxHeight: 120
|
|
|
+ },
|
|
|
+ store: Ext.create('Ext.data.Store', {
|
|
|
+ fields: ['value', 'name'],
|
|
|
+ data : [
|
|
|
+ { name: '圆形', value: 'circle' },
|
|
|
+ { name: '空心圆', value: 'emptyCircle' },
|
|
|
+ { name: '矩形', value: 'rect' },
|
|
|
+ { name: '圆角矩形', value: 'roundRect' },
|
|
|
+ { name: '三角形', value: 'triangle' },
|
|
|
+ { name: '菱形', value: 'diamond' },
|
|
|
+ { name: '指针', value: 'pin' },
|
|
|
+ { name: '箭头', value: 'arrow' }
|
|
|
+ ]
|
|
|
+ }),
|
|
|
+ queryMode: 'local',
|
|
|
+ displayField: 'name',
|
|
|
+ valueField: 'value',
|
|
|
+ emptyText: '圆形'
|
|
|
+ }, {
|
|
|
+ xtype: 'numberfield',
|
|
|
+ fieldLabel: '<font title="标注图形的大小">标注图形大小</font>',
|
|
|
+ name: 'symbolSize',
|
|
|
+ minValue: 0,
|
|
|
+ emptyText: '4'
|
|
|
+ }, {
|
|
|
+ xtype: 'checkbox',
|
|
|
+ fieldLabel: '隐藏标注文字',
|
|
|
+ name: 'hideLabel',
|
|
|
+ inputValue: true
|
|
|
+ }, {
|
|
|
+ xtype: 'combobox',
|
|
|
+ fieldLabel: '标注文字位置',
|
|
|
+ name: 'labelPosition',
|
|
|
+ listConfig: {
|
|
|
+ maxHeight: 180
|
|
|
+ },
|
|
|
+ store: Ext.create('Ext.data.Store', {
|
|
|
+ fields: ['value', 'name'],
|
|
|
+ data : [
|
|
|
+ { name: '外上方', value: 'top'},
|
|
|
+ { name: '外左方', value: 'left'},
|
|
|
+ { name: '外右方', value: 'right'},
|
|
|
+ { name: '外下方', value: 'bottom'},
|
|
|
+ { name: '内居中', value: 'inside'},
|
|
|
+ { name: '内靠左', value: 'insideLeft'},
|
|
|
+ { name: '内靠右', value: 'insideRight'},
|
|
|
+ { name: '内置顶', value: 'insideTop'},
|
|
|
+ { name: '内置底', value: 'insideBottom'},
|
|
|
+ { name: '内上左', value: 'insideTopLeft'},
|
|
|
+ { name: '内下左', value: 'insideBottomLeft'},
|
|
|
+ { name: '内上右', value: 'insideTopRight'},
|
|
|
+ { name: '内下右', value: 'insideBottomRight'}
|
|
|
+ ]
|
|
|
+ }),
|
|
|
+ queryMode: 'local',
|
|
|
+ displayField: 'name',
|
|
|
+ valueField: 'value',
|
|
|
+ emptyText: '外上方'
|
|
|
+ },{
|
|
|
+ xtype: 'numberfield',
|
|
|
+ fieldLabel: '<font title="距离图形元素的距离,配合\'标注位置\'使用">标注距离(px)</font>',
|
|
|
+ name: 'labelDistance',
|
|
|
+ minValue: 0,
|
|
|
+ emptyText: '5'
|
|
|
+ }, {
|
|
|
+ xtype: 'texttrigger',
|
|
|
+ fieldLabel: '<font title="模板变量有 {a}、{b}、{c},分别表示系列名,数据名,数据值。示例:formatter: \'{a}\\n{b}: {c}\'">标注render</font>',
|
|
|
+ name: 'labelFormatter',
|
|
|
+ emptyText: '{c}'
|
|
|
+ }],
|
|
|
+ setConfig: function(configObj) {
|
|
|
+ var form = this;
|
|
|
+ var o = {
|
|
|
+ data: Object.assign({}, configObj),
|
|
|
+ getData: function() {return this.data}
|
|
|
+ };
|
|
|
+ form.loadRecord(o);
|
|
|
+ },
|
|
|
+ getConfig: function() {
|
|
|
+ var form = this;
|
|
|
+ var config = form.getForm().getValues();
|
|
|
+ configObj = {};
|
|
|
+ for(var key in config) {
|
|
|
+ if(config[key]) {
|
|
|
+ configObj[key] = config[key];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return configObj;
|
|
|
+ }
|
|
|
+ }],
|
|
|
+ buttonAlign: 'center',
|
|
|
+ buttons:[{
|
|
|
+ text:'确定',
|
|
|
+ formBind:true,
|
|
|
+ handler:function(btn){
|
|
|
+ var win = btn.ownerCt.ownerCt;
|
|
|
+ var componet = Ext.getCmp(win.field.ownerCt.el.dom.parentNode.id);
|
|
|
+ if(componet) {
|
|
|
+ var grid = componet;
|
|
|
+ var fieldname = win.field.column.dataIndex;
|
|
|
+ var selections = grid.getSelectionModel().getSelection();
|
|
|
+ var store = grid.getStore();
|
|
|
+ var selected = selections[0];
|
|
|
+ selected.set(fieldname, Ext.JSON.encode( win.getConfig() ) );
|
|
|
+ var rowIndex = store.indexOf(selected);
|
|
|
+ var colIndex = 0;
|
|
|
+ var columns = grid.columnManager.columns;
|
|
|
+ for(var i = 0; i < columns.length; i ++) {
|
|
|
+ var column = columns[i];
|
|
|
+ if(column.dataIndex == fieldname) {
|
|
|
+ colIndex = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var getPropConfigByRecord = function(records) {
|
|
|
+ var propConfig = new Array();
|
|
|
+ var obj;
|
|
|
+ Ext.Array.each(records,function(record){
|
|
|
+ obj = new Object();
|
|
|
+ obj.display = record.get('display');
|
|
|
+ obj.property = record.get('property');
|
|
|
+ obj.propvalue = record.get('propvalue');
|
|
|
+ propConfig.push(obj);
|
|
|
+ });
|
|
|
+ return propConfig;
|
|
|
+ }
|
|
|
+
|
|
|
+ var detailGrid = Ext.getCmp('elementdetailgrid');
|
|
|
+ var detailSelect = detailGrid.getSelectionModel().getSelection()[0];
|
|
|
+ detailSelect.set('propconfig',getPropConfigByRecord(grid.store.data.items));
|
|
|
+
|
|
|
+ grid.getPlugin().startEditByPosition({row: rowIndex, column: colIndex});
|
|
|
+ }else {
|
|
|
+ win.field.setValue( Ext.JSON.encode( win.getConfig() ) );
|
|
|
+ }
|
|
|
+ win.close();
|
|
|
+ }
|
|
|
+ },{
|
|
|
+ text:'取消',
|
|
|
+ handler:function(btn){
|
|
|
+ var win = btn.ownerCt.ownerCt;
|
|
|
+ win.close();
|
|
|
+ }
|
|
|
+ }],
|
|
|
+ listeners: {
|
|
|
+ afterrender: function() {
|
|
|
+ var me = this;
|
|
|
+ me.setConfig(me.field.getValue());
|
|
|
+ }
|
|
|
+ },
|
|
|
+ setConfig: function(configStr) {
|
|
|
+ var me = this;
|
|
|
+ var form = me.down('form');
|
|
|
+ var configObj = Ext.JSON.decode(configStr || '{}');
|
|
|
+ form.setConfig(configObj);
|
|
|
+ },
|
|
|
+ getConfig: function() {
|
|
|
+ var me = this;
|
|
|
+ var form = me.down('form');
|
|
|
+ return form.getConfig();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ legendEditor.show();
|
|
|
+ }
|
|
|
+});
|