图表 - 饼图

package api.chart;

import java.awt.Color;
import java.awt.Font;

import com.fr.base.CoreDecimalFormat;
import com.fr.base.Formula;
import com.fr.base.Style;
import com.fr.base.TextFormat;
import com.fr.base.background.ColorBackground;
import com.fr.base.background.GradientBackground;
import com.fr.base.present.FormulaPresent;
import com.fr.chart.base.AttrAlpha;
import com.fr.chart.base.AttrBackground;
import com.fr.chart.base.AttrBorder;
import com.fr.chart.base.AttrChangeConfig;
import com.fr.chart.base.AttrChangeType;
import com.fr.chart.base.AttrFillStyle;
import com.fr.chart.base.ChartConstants;
import com.fr.chart.base.TextAttr;
import com.fr.chart.chartattr.ChartCollection;
import com.fr.chart.chartattr.ChartCommonCondition;
import com.fr.chart.chartdata.OneValueCDDefinition;
import com.fr.chart.chartglyph.ConditionAttr;
import com.fr.chart.chartglyph.ConditionCollection;
import com.fr.chart.chartglyph.GeneralInfo;
import com.fr.data.core.Compare;
import com.fr.data.impl.DBTableData;
import com.fr.data.impl.NameDatabaseConnection;
import com.fr.data.impl.NameTableData;
import com.fr.data.util.function.SumFunction;
import com.fr.general.FRFont;
import com.fr.io.TemplateWorkBookIO;
import com.fr.js.NameJavaScript;
import com.fr.js.NameJavaScriptGroup;
import com.fr.js.ReportletHyperlink;
import com.fr.main.impl.WorkBook;
import com.fr.plugin.chart.PiePlot4VanChart;
import com.fr.plugin.chart.attr.VanChartLegend;
import com.fr.plugin.chart.attr.VanChartTitle;
import com.fr.plugin.chart.base.AttrBorderWithShape;
import com.fr.plugin.chart.base.AttrEffect;
import com.fr.plugin.chart.base.AttrFloatColor;
import com.fr.plugin.chart.base.AttrLabel;
import com.fr.plugin.chart.base.AttrLabelDetail;
import com.fr.plugin.chart.base.AttrTooltip;
import com.fr.plugin.chart.base.AttrTooltipContent;
import com.fr.plugin.chart.base.AttrTooltipRichText;
import com.fr.plugin.chart.base.ChartRoseType;
import com.fr.plugin.chart.base.FirstFunction;
import com.fr.plugin.chart.base.RefreshMoreLabel;
import com.fr.plugin.chart.base.TableFieldCollection;
import com.fr.plugin.chart.base.TableFieldDefinition;
import com.fr.plugin.chart.base.VanChartHtmlLabel;
import com.fr.plugin.chart.base.VanChartRadius;
import com.fr.plugin.chart.base.VanChartTools;
import com.fr.plugin.chart.base.format.AttrTooltipCategoryFormat;
import com.fr.plugin.chart.base.format.AttrTooltipChangedPercentFormat;
import com.fr.plugin.chart.base.format.AttrTooltipChangedValueFormat;
import com.fr.plugin.chart.base.format.AttrTooltipPercentFormat;
import com.fr.plugin.chart.base.format.AttrTooltipSeriesFormat;
import com.fr.plugin.chart.base.format.AttrTooltipSummaryValueFormat;
import com.fr.plugin.chart.base.format.AttrTooltipValueFormat;
import com.fr.plugin.chart.marker.type.MarkerType;
import com.fr.plugin.chart.pie.attr.PieCategoryLabelContent;
import com.fr.plugin.chart.type.GradientType;
import com.fr.plugin.chart.type.RadiusType;
import com.fr.plugin.chart.type.TextAlign;
import com.fr.plugin.chart.vanchart.VanChart;
import com.fr.report.cell.DefaultTemplateCellElement;
import com.fr.report.worksheet.WorkSheet;
import com.fr.stable.Constants;

import api.ServerConnector;

/**
 * 图表 - 饼图
 * 
 * @author Administrator
 */
public class PieChart {

	public static void main(String[] args) {
		/*
		 * 图表容器
		 * 普通报表 ChartCollection
		 * 聚合报表 PolyChartBlock
		 * 决策报表 ChartEditor
		 */
		try {
			ServerConnector.local();

			WorkBook workbook = new WorkBook();

			// 数据库查询
			DBTableData db = new DBTableData(new NameDatabaseConnection("FRDemo"), "select * from 销量");
			workbook.putTableData("ds1", db);

			WorkSheet sheet = new WorkSheet();
			ChartCollection cc = new ChartCollection();
			cc.addNamedChart("饼图", getChart());

			// 切换方式
			AttrChangeConfig change = new AttrChangeConfig();
			// 按钮
			change.setChangeType(AttrChangeType.BUTTON);
			change.setButtonColor(Color.BLUE);
			change.setStyleAttr(new TextAttr(FRFont.getInstance("楷体", Font.BOLD, 13)));
			// 轮播
			change.setChangeType(AttrChangeType.CAROUSEL);
			change.setShowArrow(true);
			change.setTimeInterval(5);
			change.setCarouselColor(Color.GREEN);
			// cc.setChangeConfigAttr(change);

			sheet.addCellElement(new DefaultTemplateCellElement(0, 0, 8, 20, cc));

			workbook.addReport(0, "图表", sheet);

			TemplateWorkBookIO.writeTemplateWorkBook(workbook, "饼图.cpt");
		} catch (Exception e) {
			e.printStackTrace();
		}

		ServerConnector.disconnect();
	}

	public static VanChart getChart() {
		/*
		 * 格式
		 * CoreDecimalFormat - 数字、货币、百分比、科学计数
		 * FineDateFormat - 日期、时间
		 * TextFormat - 文本
		 * 常规不设置
		 */
		// 值
		AttrTooltipValueFormat valueFormat = new AttrTooltipValueFormat();
		valueFormat.setEnable(true);
		valueFormat.setFormat(new CoreDecimalFormat("#0"));
		// 百分比
		AttrTooltipPercentFormat percentFormat = new AttrTooltipPercentFormat();
		percentFormat.setEnable(true);
		percentFormat.setFormat(CoreDecimalFormat.getPercentInstance());
		// 分类名
		AttrTooltipCategoryFormat categoryFormat = new AttrTooltipCategoryFormat();
		categoryFormat.setEnable(true);
		categoryFormat.setFormat(TextFormat.getInstance());
		// 系列名
		AttrTooltipSeriesFormat seriesFormat = new AttrTooltipSeriesFormat();
		seriesFormat.setEnable(true);
		seriesFormat.setFormat(TextFormat.getInstance());
		// 变化百分比
		AttrTooltipChangedPercentFormat changedPercentFormat = new AttrTooltipChangedPercentFormat();
		changedPercentFormat.setEnable(true);
		changedPercentFormat.setFormat(CoreDecimalFormat.getPercentInstance());
		// 变化值
		AttrTooltipChangedValueFormat changedValueFormat = new AttrTooltipChangedValueFormat();
		changedValueFormat.setEnable(true);
		changedValueFormat.setFormat(new CoreDecimalFormat("#0"));
		// 汇总值
		AttrTooltipSummaryValueFormat summaryFormat = new AttrTooltipSummaryValueFormat();
		summaryFormat.setEnable(true);
		summaryFormat.setFormat(new CoreDecimalFormat("#0"));
		//

		/*
		 * 图表容器
		 * 设置 工具栏、缩放、主题、数据、标题、背景、动画、监控刷新
		 */
		VanChart chart = new VanChart();
		/*
		 * 图表绘制类
		 * 设置 提示、标签、条件显示、图例、系列
		 */
		PiePlot4VanChart plot = new PiePlot4VanChart();

		/*
		 * 类型
		 */
		plot.setRoseType(ChartRoseType.PIE_DIFFERENT_ARC);

		/*
		 * 数据
		 */
		OneValueCDDefinition data = new OneValueCDDefinition();
		// 数据集来源 - 数据集
		data.setTableData(new NameTableData("ds1"));
		// 分类
		data.setCategoryName("销售员");
		// 系列名使用 - 字段值
		// 系列名
		data.setSeriesColumnName("产品类型");
		// 值
		data.setValueColumnName("销量");
		// 汇总方式
		data.setDataFunction(new SumFunction());

		/*
		 * // 系列名使用 - 字段名
		 * MoreNameCDDefinition data = new MoreNameCDDefinition();
		 * // 数据集
		 * data.setTableData(new NameTableData("ds1"));
		 * // 分类
		 * data.setCategoryName("销售员");
		 * data.setChartSummaryColumn(
		 * new ChartSummaryColumn[] { new ChartSummaryColumn("产品类型", "产品类型", new SumFunction()) });
		 */

		/*
		 * // 数据 - 数据集来源 - 单元格数据
		 * NormalReportDataDefinition data = new NormalReportDataDefinition();
		 * data.setCategoryName(new Formula("now()"));
		 * data.add(new SeriesDefinition("r11", "r12"));
		 * data.add(new SeriesDefinition("r21", "r22"));
		 */

		// 数据筛选 - 分类
		// 只使用前有限条记录
		data.setTopCate(3);
		// 合并剩余项为其他
		data.setDiscardOtherCate(false);
		// 分类为空时,不显示该分类
		data.setDiscardNullCate(true);
		// 形态
		data.setCategoryPresent(new FormulaPresent("concatenate($$$, '*')"));
		// 数据筛选 - 系列
		// 只使用前有限条记录
		data.setTopSeries(3);
		// 合并剩余项为其他
		data.setDiscardOtherSeries(false);
		// 分类为空时,不显示该系列
		data.setDiscardNullSeries(true);
		// 形态
		data.setSeriesPresent(new FormulaPresent("$$$+1"));
		chart.setFilterDefinition(data);

		/*
		 * 样式
		 */
		// 样式 - 标题
		VanChartTitle title = new VanChartTitle();
		// 内容
		title.setTextObject(new Formula("'title'"));
		title.setUseHtml(false);
		// 布局
		title.setPosition(Constants.CENTER);
		title.setFloating(false);
		title.setFloatPercentX(10);
		title.setFloatPercentY(10);
		// 样式
		TextAttr textAttr = title.getTextAttr();
		textAttr.setPredefinedStyle(false);
		textAttr.setFRFont(FRFont.getInstance("黑体", Font.BOLD, 15));
		textAttr.setAlignText(Constants.CENTER);
		textAttr.setFRFontColor(Color.GREEN);
		textAttr.setPredefinedStyleName("淡雅");
		// 背景
		title.setAutoBackground(false);
		title.setBackground(ColorBackground.getInstance(Color.GRAY));
		title.setAlpha(0.7f);
		title.setRoundBorder(true);
		title.setRoundRadius(10);
		// 显示策略
		title.setLimitSize(true);
		title.setMaxHeight(15);
		chart.setTitle(title);

		// 样式 - 图例
		VanChartLegend legend = (VanChartLegend) plot.getLegend();
		// 图例可见
		legend.setLegendVisible(true);
		// 布局
		legend.setPosition(Constants.RIGHT_TOP);
		legend.setFloating(false);
		legend.setFloatPercentX(10);
		legend.setFloatPercentY(10);
		// 样式
		textAttr = legend.getTextAttr();
		textAttr.setFRFont(FRFont.getInstance("黑体", Font.BOLD, 14));
		textAttr.setFRFontColor(Color.BLUE);
		textAttr.setAlignText(Constants.RIGHT);
		// 边框
		legend.setBorderStyle(Constants.LINE_THIN);
		legend.setBorderColor(Color.RED);
		legend.setRoundBorder(true);
		legend.setRoundRadius(10);
		// 背景
		legend.setAutoBackground(false);
		legend.setBackground(new GradientBackground(Color.YELLOW, Color.RED, GradientBackground.LEFT2RIGHT));
		legend.setAlpha(0.7f);
		legend.setShadow(true);
		// 显示策略
		legend.setCustomSize(true);
		legend.setMaxHeight(25);
		legend.setHighlight(true);

		// 样式 - 标签
		AttrLabel label = new AttrLabel();
		// 使用标签
		label.setEnable(true);
		// 样式 - 标签 - 值标签
		AttrLabelDetail valueLabel = label.getAttrLabelDetail();
		AttrTooltipContent tooltipContent = valueLabel.getContent();
		// 通用
		tooltipContent.setCustom(false);
		tooltipContent.setCommon(true);
		tooltipContent.setRichText(false);
		tooltipContent.setSeriesFormat(seriesFormat);
		tooltipContent.setValueFormat(valueFormat);
		tooltipContent.setPercentFormat(percentFormat);
		// 富文本
		tooltipContent.setCustom(false);
		tooltipContent.setCommon(false);
		tooltipContent.setRichText(true);
		String pname = "产品";
		TableFieldCollection fields = new TableFieldCollection();
		TableFieldDefinition field = new TableFieldDefinition();
		field.setName(pname);
		field.setFormat(TextFormat.getInstance());
		FirstFunction f = new FirstFunction();
		field.setDataFunction(f);
		fields.addFieldDefinition(pname, field);
		tooltipContent.setFieldCollection(fields);
		AttrTooltipRichText richText = new AttrTooltipRichText();
		richText.setAuto(true);
		richText.setContent(
				"<p><font color='red'><img alt='" + pname + "' data-id='${" + pname + "_" + pname.hashCode()
						+ "}' class=\"rich-editor-param\" /></font></p>");
		richText.setInitParamsContent(ChartConstants.VALUE_PARA);
		tooltipContent.setRichTextAttr(richText);
		tooltipContent.setRichTextAlign(TextAlign.CENTER);
		tooltipContent.setRichTextSeriesFormat(seriesFormat);
		tooltipContent.setRichTextValueFormat(valueFormat);
		tooltipContent.setRichTextPercentFormat(percentFormat);
		// 自定义
		// tooltipContent.setCustom(true);
		// tooltipContent.setCommon(false);
		// tooltipContent.setRichText(false);
		VanChartHtmlLabel html = new VanChartHtmlLabel();
		html.setCustomHeight(false);
		html.setHeight("60");
		html.setCustomWidth(false);
		html.setWidth("60");
		html.setUseHtml(true);
		html.setCustomText("function(){ return 123;}");
		tooltipContent.setHtmlLabel(html);
		valueLabel.setContent(tooltipContent);
		// 样式
		valueLabel.setCustom(true);
		valueLabel.setTextAttr(new TextAttr(FRFont.getInstance("楷体", Font.ITALIC, 13)));
		// 位置
		valueLabel.setPosition(Constants.OUTSIDE);
		valueLabel.setShowGuidLine(true);
		// 边框
		AttrBorderWithShape border = new AttrBorderWithShape();
		border.setBorderStyle(Constants.LINE_THICK);
		border.setAutoColor(false);
		border.setBorderColor(Color.RED);
		border.setShape(MarkerType.MARKER_DIALOG);
		border.setRoundBorder(true);
		border.setRoundRadius(10);
		valueLabel.setBorder(border);
		// 背景
		GeneralInfo gi = new GeneralInfo();
		gi.setAutoBackground(false);
		gi.setBackground(ColorBackground.getInstance(Color.gray));
		// 不透明度
		gi.setAlpha(.75f);
		valueLabel.setBackground(gi);
		// 样式 - 标签 - 分类标签
		AttrLabelDetail categoryLabel = new AttrLabelDetail();
		PieCategoryLabelContent categoryLabelContent = new PieCategoryLabelContent();
		// 通用
		categoryLabelContent.setCommon(true);
		categoryLabelContent.setRichText(false);
		categoryLabelContent.setCustom(false);
		categoryLabelContent.setCategoryFormat(categoryFormat);
		categoryLabelContent.setSummaryValueFormat(summaryFormat);
		// 富文本
		categoryLabelContent.setCommon(false);
		categoryLabelContent.setRichText(true);
		categoryLabelContent.setCustom(false);
		richText = new AttrTooltipRichText();
		richText.setAuto(true);
		richText.setContent("<p><font color='black'><img alt='分类名' data-id='" + ChartConstants.CATEGORY_PARA
				+ "' class=\"rich-editor-param\" /></font></p>");
		richText.setInitParamsContent(ChartConstants.CATEGORY_PARA);
		categoryLabelContent.setRichTextAttr(richText);
		categoryLabelContent.setRichTextAlign(TextAlign.CENTER);
		categoryLabelContent.setRichTextCategoryFormat(categoryFormat);
		categoryLabelContent.setRichTextSummaryValueFormat(summaryFormat);
		// 自定义
		categoryLabelContent.setCommon(false);
		categoryLabelContent.setRichText(false);
		categoryLabelContent.setCustom(true);
		html = new VanChartHtmlLabel();
		html.setCustomHeight(false);
		html.setHeight("60");
		html.setCustomWidth(false);
		html.setWidth("60");
		html.setUseHtml(true);
		html.setCustomText("function(){ return this.category;}");
		categoryLabelContent.setHtmlLabel(html);
		categoryLabelContent.setTextAttr(new TextAttr(FRFont.getInstance("楷体", Font.ITALIC, 13)));
		categoryLabel.setContent(categoryLabelContent);
		categoryLabel.setPosition(Constants.TOP);
		label.setGaugeValueLabelDetail(categoryLabel);
		plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(label);

		// 样式 - 系列
		// 渐变风格
		plot.getGradientStyle().setGradientType(GradientType.NONE);
		// 配色方案
		AttrFillStyle fillStyle = plot.getPlotFillStyle();
		fillStyle.setCustomFillStyle(true);
		fillStyle.setPredefinedStyle(false);
		// COLOR_DEFAULT - 默认 COLOR_ACC - 自定义 COLOR_GRADIENT - 渐变色
		fillStyle.setColorStyle(ChartConstants.COLOR_GRADIENT);
		fillStyle.setColorList(java.util.Arrays.asList(new Color[] { Color.yellow, Color.red }));
		// 样式
		plot.setStartAngle(0);
		plot.setEndAngle(270);
		plot.setInnerRadiusPercent(30);
		VanChartRadius radius = new VanChartRadius();
		radius.setRadiusType(RadiusType.FIXED);
		radius.setRadius(110);
		plot.setRadius(radius);
		plot.setSupportRotation(true);
		// 边框 LINE_NONE、LINE_THIN、LINE_MEDIUM、LINE_THICK
		AttrBorder attrBorder = new AttrBorder();
		attrBorder.setAutoColor(false);
		attrBorder.setBorderColor(Color.YELLOW);
		attrBorder.setBorderStyle(Constants.LINE_THIN);
		plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(attrBorder);

		// 样式 - 背景
		chart.setBackground(ColorBackground.getInstance(Color.GRAY));
		// 边框 LINE_NONE、LINE_THIN、LINE_MEDIUM、LINE_THICK
		chart.setBorderStyle(Constants.LINE_THICK);
		chart.setBorderColor(Color.RED);
		chart.setRoundBorder(true);
		chart.setRoundRadius(10);
		// 背景
		chart.setAutoBackground(false);
		chart.setBackground(ColorBackground.getInstance(Color.YELLOW));
		chart.setAlpha(.75f);
		chart.setShadow(true);

		// 样式 - 提示
		AttrTooltip tooltip = new AttrTooltip();
		tooltip.setCustom(true);
		// 使用数据点提示
		tooltip.setEnable(true);
		// 通用
		tooltipContent = tooltip.getContent();
		tooltipContent.setCommon(true);
		tooltipContent.setValueFormat(valueFormat);
		// 样式
		tooltip.setTextAttr(new TextAttr(FRFont.getInstance("楷体", Font.BOLD, 12)));
		gi = tooltip.getGeneralInfo();
		// 边框
		gi.setBorderStyle(Constants.LINE_THICK);
		gi.setBorderColor(Color.BLACK);
		gi.setRoundBorder(true);
		gi.setRoundRadius(10);
		// 背景
		gi.setBackground(ColorBackground.getInstance(Color.YELLOW));
		gi.setAlpha(.7f);
		gi.setShadow(false);
		// 显示策略
		tooltip.setFollowMouse(true);
		plot.getConditionCollection().getDefaultAttr().addDataSeriesCondition(tooltip);

		/*
		 * 特效
		 */
		// 特效 - 交互属性
		VanChartTools tools = new VanChartTools();
		// 工具栏
		tools.setSort(true);
		tools.setExport(true);
		tools.setFullScreen(true);
		tools.setHidden(false);
		chart.setVanChartTools(tools);
		// 动画
		chart.setJSDraw(false);
		// 监控刷新
		RefreshMoreLabel refresh = new RefreshMoreLabel();
		refresh.setMoreLabel(true);
		plot.setAutoRefreshPerSecond(5);
		refresh.setAutoTooltip(false);
		tooltip = plot.getDefaultRefreshAttrTooltip();
		tooltip.setEnable(true);
		// 监控刷新 - 提示数据 - 通用
		tooltip.setCustom(false);
		tooltipContent = tooltip.getContent();
		tooltipContent.setCommon(true);
		tooltipContent.setCustom(false);
		tooltipContent.setCategoryFormat(categoryFormat);
		tooltipContent.setSeriesFormat(seriesFormat);
		tooltipContent.setValueFormat(valueFormat);
		tooltipContent.setChangedValueFormat(changedValueFormat);
		tooltipContent.setPercentFormat(percentFormat);
		tooltipContent.setChangedPercentFormat(changedPercentFormat);
		// 监控刷新 - 提示数据 - 自定义
		tooltipContent.setCustom(true);
		tooltipContent.setCommon(false);
		html = new VanChartHtmlLabel();
		html.setCustomText("function(){ return 456;}");
		html.setCustomHeight(true);
		html.setCustomWidth(true);
		html.setUseHtml(true);
		tooltipContent.setHtmlLabel(html);
		// 监控刷新 - 提示数据 - 样式
		textAttr = new TextAttr(FRFont.getInstance("黑体", Font.ITALIC, 14));
		textAttr.setAlignText(Style.HORIZONTALTEXT);
		textAttr.setPredefinedStyle(false);
		tooltipContent.setTextAttr(textAttr);
		tooltip.setContent(tooltipContent);
		// 监控刷新 - 提示数据 - 时间
		tooltip.setDuration(4);
		// 监控刷新 - 提示数据 - 边框
		gi = new GeneralInfo();
		gi.setBorderStyle(Constants.LINE_THIN);
		gi.setBorderColor(Color.BLACK);
		gi.setRoundBorder(true);
		gi.setRoundRadius(15);
		// 监控刷新 - 提示数据 - 背景
		gi.setAutoBackground(false);
		gi.setBackground(ColorBackground.getInstance(new Color(-1)));
		gi.setAlpha(0.7f);
		gi.setShadow(true);
		tooltip.setGeneralInfo(gi);
		refresh.setAttrTooltip(tooltip);
		chart.setRefreshMoreLabel(refresh);
		// 特效 - 交互属性 - 超级链接
		NameJavaScriptGroup group = new NameJavaScriptGroup();
		group.addNameHyperlink(new NameJavaScript("网络报表", new ReportletHyperlink("/WorkBook1.cpt", "_self")));
		plot.setHotHyperLink(group);
		// 特效 - 条件显示
		ConditionCollection conds = plot.getConditionCollection();
		ConditionAttr condAttr = new ConditionAttr();
		condAttr.setName("条件属性1");
		condAttr.setCondition(new ChartCommonCondition("CATEGORY_NAME", Compare.NOT_EQUAL, ""));
		condAttr.addDataSeriesCondition(new AttrAlpha(.65f)); // 不透明度
		condAttr.addDataSeriesCondition(new AttrBorder(Color.YELLOW, Constants.LINE_THIN)); // 边框
		condAttr.addDataSeriesCondition(new AttrBackground(ColorBackground.getInstance(Color.GRAY))); // 配色
		condAttr.addDataSeriesCondition(new AttrFloatColor()); // 悬浮颜色
		condAttr.addDataSeriesCondition(new AttrLabel()); // 标签
		condAttr.addDataSeriesCondition(new AttrEffect(2)); // 闪烁动画
		condAttr.addDataSeriesCondition(new AttrTooltip()); // 数据点提示
		conds.addConditionAttr(condAttr);

		chart.setPlot(plot);
		return chart;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值