chartx
Version:
Data Visualization Chart Library
385 lines (381 loc) • 12 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _canvax = _interopRequireDefault(require("canvax"));
var _index = _interopRequireDefault(require("../index"));
var _tools = require("../../../utils/tools");
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
var _ = _canvax.default._,
event = _canvax.default.event;
var Polygon = _canvax.default.Shapes.Polygon;
var Circle = _canvax.default.Shapes.Circle;
var RadarGraphs = /*#__PURE__*/function (_GraphsBase) {
function RadarGraphs(opt, app) {
var _this;
(0, _classCallCheck2.default)(this, RadarGraphs);
_this = _callSuper(this, RadarGraphs, [opt, app]);
_this.type = "radar";
_this.enabledField = null;
_this.groups = {
//uv : {
// area : ,
// nodes:
//}
};
_.extend(true, _this, (0, _tools.getDefaultProps)(RadarGraphs.defaultProps()), opt);
_this.init();
return _this;
}
(0, _inherits2.default)(RadarGraphs, _GraphsBase);
return (0, _createClass2.default)(RadarGraphs, [{
key: "init",
value: function init() {}
}, {
key: "draw",
value: function draw(opt) {
!opt && (opt = {});
//let me = this;
_.extend(true, this, opt);
this.data = this._trimGraphs();
this._widget();
this.sprite.context.x = this.origin.x;
this.sprite.context.y = this.origin.y;
this.fire("complete");
}
}, {
key: "_widget",
value: function _widget() {
var me = this;
var _coord = this.app.getComponent({
name: 'coord'
});
var iGroup = 0;
_.each(this.data, function (list, field) {
var group = {};
var pointList = [];
_.each(list, function (node) {
pointList.push([node.point.x, node.point.y]);
});
var fieldConfig = _coord.getFieldConfig(field);
var _strokeStyle = me._getStyle(me.line.strokeStyle, fieldConfig, iGroup, fieldConfig.color);
var _lineType = me._getStyle(me.line.lineType, fieldConfig, iGroup, fieldConfig.color);
var polyCtx = {
pointList: pointList,
cursor: "pointer"
};
if (me.line.enabled) {
polyCtx.lineWidth = me.line.lineWidth;
polyCtx.strokeStyle = _strokeStyle;
polyCtx.lineType = _lineType;
}
;
if (me.area.enabled) {
polyCtx.fillStyle = me._getStyle(me.area.fillStyle, fieldConfig, iGroup, fieldConfig.color);
polyCtx.fillAlpha = me._getStyle(me.area.fillAlpha, fieldConfig, iGroup, 1);
}
;
var _poly = new Polygon({
hoverClone: false,
context: polyCtx
});
group.area = _poly;
me.sprite.addChild(_poly);
_poly.__hoverFillAlpha = _poly.context.fillAlpha + 0.2;
_poly.__fillAlpha = _poly.context.fillAlpha;
_poly.on(event.types.get(), function (e) {
if (e.type == "mouseover") {
this.context.fillAlpha = this.__hoverFillAlpha;
}
;
if (e.type == "mouseout") {
this.context.fillAlpha = this.__fillAlpha;
}
;
me.app.fire(e.type, e);
});
var _nodes = [];
if (me.node.enabled) {
//绘制圆点
_.each(list, function (node, i) {
pointList.push([node.point.x, node.point.y]);
var _node = new Circle({
context: {
cursor: "pointer",
x: node.point.x,
y: node.point.y,
r: me.node.radius,
lineWidth: me.node.lineWidth,
strokeStyle: me.node.strokeStyle,
fillStyle: _strokeStyle
}
});
me.sprite.addChild(_node);
_node.iNode = i;
_node.nodeData = node;
_node._strokeStyle = _strokeStyle;
_node.on(event.types.get(), function (e) {
//这样就会直接用这个aAxisInd了,不会用e.point去做计算
e.aAxisInd = this.iNode;
e.eventInfo = {
trigger: 'this.node',
//me.node,
nodes: [this.nodeData]
};
me.app.fire(e.type, e);
});
_nodes.push(_node);
});
}
;
group.nodes = _nodes;
me.groups[field] = group;
iGroup++;
});
}
}, {
key: "tipsPointerOf",
value: function tipsPointerOf(e) {
var me = this;
me.tipsPointerHideOf(e);
if (e.eventInfo && e.eventInfo.nodes) {
_.each(e.eventInfo.nodes, function (eventNode) {
if (me.data[eventNode.field]) {
_.each(me.data[eventNode.field], function (n, i) {
if (eventNode.iNode == i) {
me.focusOf(n);
}
//else {
// me.unfocusOf(n);
//}
});
}
;
});
}
}
}, {
key: "tipsPointerHideOf",
value: function tipsPointerHideOf() {
var me = this;
_.each(me.data, function (g) {
_.each(g, function (node) {
me.unfocusOf(node);
});
});
}
}, {
key: "focusOf",
value: function focusOf(node) {
if (node.focused) return;
var me = this;
if (me.node.enabled) {
var _node = me.groups[node.field].nodes[node.iNode];
_node.context.r += 1;
_node.context.fillStyle = me.node.strokeStyle;
_node.context.strokeStyle = _node._strokeStyle;
}
node.focused = true;
}
}, {
key: "unfocusOf",
value: function unfocusOf(node) {
if (!node.focused) return;
var me = this;
if (me.node.enabled) {
var _node = me.groups[node.field].nodes[node.iNode];
_node.context.r -= 1;
_node.context.fillStyle = _node._strokeStyle;
_node.context.strokeStyle = me.node.strokeStyle;
}
node.focused = false;
}
}, {
key: "hide",
value: function hide(field) {
//用来计算下面的hLen
var _coord = this.app.getComponent({
name: 'coord'
});
this.enabledField = _coord.filterEnabledFields(this.field);
var group = this.groups[field];
if (group) {
group.area.context.visible = false;
_.each(group.nodes, function (element) {
element.context.visible = false;
});
}
}
}, {
key: "show",
value: function show(field) {
var _coord = this.app.getComponent({
name: 'coord'
});
this.enabledField = _coord.filterEnabledFields(this.field);
var group = this.groups[field];
if (group) {
group.area.context.visible = true;
_.each(group.nodes, function (element) {
element.context.visible = true;
});
}
}
}, {
key: "_trimGraphs",
value: function _trimGraphs() {
var me = this;
var _coord = this.app.getComponent({
name: 'coord'
});
//用来计算下面的hLen
this.enabledField = _coord.filterEnabledFields(this.field);
var data = {};
_.each(this.enabledField, function (field) {
var dataOrg = me.dataFrame.getFieldData(field);
var fieldConfig = _coord.getFieldConfig(field);
var arr = [];
_.each(_coord.aAxis.angleList, function (_a, i) {
//弧度
var _r = Math.PI * _a / 180;
var point = _coord.getPointInRadianOfR(_r, _coord.getROfNum(dataOrg[i]));
arr.push({
type: "radar",
field: field,
iNode: i,
rowData: me.dataFrame.getRowDataAt(i),
focused: false,
value: dataOrg[i],
point: point,
color: fieldConfig.color
});
});
data[field] = arr;
});
return data;
}
}, {
key: "_getStyle",
value: function _getStyle(style, fieldConfig, iGroup, def) {
var _s = def;
if (_.isString(style) || _.isNumber(style)) {
_s = style;
}
;
if (_.isArray(style)) {
_s = style[iGroup];
}
;
if (_.isFunction(style)) {
_s = style(iGroup, fieldConfig);
}
;
if (_s === undefined || _s === null) {
//只有undefined(用户配置了function),null才会认为需要还原皮肤色
//“”都会认为是用户主动想要设置的,就为是用户不想他显示
_s = def;
}
;
return _s;
}
}, {
key: "getNodesAt",
value: function getNodesAt(index) {
//该index指当前
var data = this.data;
var _nodesInfoList = []; //节点信息集合
_.each(this.enabledField, function (fs) {
if (_.isArray(fs)) {
_.each(fs, function (_fs) {
//fs的结构两层到顶了
var node = data[_fs][index];
node && _nodesInfoList.push(node);
});
} else {
var node = data[fs][index];
node && _nodesInfoList.push(node);
}
});
return _nodesInfoList;
}
}], [{
key: "defaultProps",
value: function defaultProps() {
return {
field: {
detail: '字段配置',
default: null
},
line: {
detail: '线配置',
propertys: {
enabled: {
detail: '是否显示',
default: true
},
lineWidth: {
detail: '线宽',
default: 2
},
strokeStyle: {
detail: '线颜色',
default: null
},
lineType: {
detail: '线条样式,默认solid,可选dashed',
default: 'solid'
}
}
},
area: {
detail: '面积区域配置',
propertys: {
enabled: {
detail: '是否显示',
default: true
},
fillStyle: {
detail: '面积背景色',
default: null
},
fillAlpha: {
detail: '面积透明度',
default: 0.1
}
}
},
node: {
detail: '线上面的单数据节点图形配置',
propertys: {
enabled: {
detail: '是否显示',
default: true
},
strokeStyle: {
detail: '边框色',
default: '#ffffff'
},
radius: {
detail: '半径',
default: 4
},
lineWidth: {
detail: '边框大小',
default: 1
}
}
}
};
}
}]);
}(_index.default);
_index.default.registerComponent(RadarGraphs, 'graphs', 'radar');
var _default = exports.default = RadarGraphs;