| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- import { _decorator, Button, Component, EditBox, game, instantiate, Label, Node, Sprite, Tween, tween, Vec3} from 'cc';
- import { UtilsPanel } from '../../scene/script/UtilsPanel';
- import { Generate } from '../../scene/script/components/Generate';
- import { Config, nav_info } from '../../scene/script/NavInfo';
- import { WebRequest } from '../../scene/script/WebRequest';
- import { funcBg } from '../../scene/script/components/FuncBg';
- const { ccclass, property } = _decorator;
- export type RateInfo = {
- ProductID: string
- Gold: number,
- PayPrice: number
- ShowRate: number
- }
- //money * rate * (1 + Ratio) = gold;
- export type ShopData = {
- ProductConfig: RateInfo[]
- ExchangeRate: ExchangeRate[]
- }
- //国家信息
- export type ExchangeRate = {
- Currency: string // 币种
- CountryName: string // 国家名称
- CountryCode: string // 国家编码
- Rate: number //汇率
- Sort: number //显示顺序
- }
- @ccclass('Pay')
- export class Pay extends Component {
- // public static clacGold(money: number){
- // let config = Pay.data_shop;
- // if(!config || money < config.MinMoney)return 0;
- // let ratio_info = config.RatioConfig.find(function(info){return money >= info.Min && money <= info.Max});
- // if(!ratio_info){
- // let ratios = config.RatioConfig;
- // ratio_info = ratios[ratios.length - 1];
- // }
- // return Math.floor(money * (ratio_info.Ratio + 1) * config.Rate);
- // }
- public static buy(prod_id: string, price: number, currency: string = "SAU") {
- let user_id = Pay.user_id;
- if (user_id.length == 0) {
- nav_info.scene.showTip("يرجى إدخال ال ID حقك");
- return;
- }
- let url = nav_info.is_test ? Config.url_pay_test : Config.url_pay;
- let final_url = `${url}?UserID=${user_id}&Price=${price}&ProductID=${prod_id}&PartnerID=110&Currency=${currency}&Country=SA&T=${new Date().getTime()}`;
- window.open(final_url);
- }
- public static user_id = "";
- public static data_shop: ShopData = null;
- private node_descid: Node = null;
- private node_buy: Node = null;
- private gene_items: Generate = null;
- private node_light: Node = null;
- private lb_money: Label = null;
- private edit_id: EditBox = null;
- private select_data: RateInfo = null;
- public currentCountry: ExchangeRate = null;
- public typeIndex: number = 0;
- private node_typeList: Node = null;
- private sp_arrows: Sprite = null;
- private node_type: Node = null;
- private lb_type: Label = null;
- private sp_type: Sprite = null;
- private node_arrows: Node = null;
- protected start() {
- UtilsPanel.getAllNeedCom(this, this.node, true);
- UtilsPanel.addBtnEvent(this.node_buy, this.onBuy, this);
- UtilsPanel.addBtnEvent(this.node_arrows, this.onArrowsClick, this).transition = Button.Transition.NONE;
- // @ts-ignore
- game.on("select_item", this.onSelect, this);
- let url = nav_info.is_test ? Config.url_product_test : Config.url_product;
- // this.test();return;
- new WebRequest().getData(url, "", (succ: boolean, content: string) => {
- if (succ) {
- let info: ShopData = Pay.data_shop = JSON.parse(content);
- // console.log("fwef:",info);
- this.gene_items.initData(info.ProductConfig);
- this.node_light.setSiblingIndex(-1);
- this.createTypeList();
- }
- }, false);
- }
- private onEditChange() {
- this.node_descid.active = this.edit_id.string.length == 0;
- Pay.user_id = this.edit_id.string;
- }
- private onSelect(info: RateInfo, node: Node) {
- this.select_data = info;
- this.upSelectPrice();
- this.node_light.active = true;
- this.node_light.setPosition(node.position);
- }
- private upSelectPrice() {
- if (!this.select_data) return;
- //取字符串保留2位小数(不足补0)
- this.lb_money.string = `${(this.select_data.PayPrice * this.currentCountry.Rate).toFixed(2)} ${this.currentCountry.CountryCode}`;
- }
- private onBuy() {
- if (this.select_data == null) {
- nav_info.scene.showTip("يرجى اختيار الباقة التي ترغب بشرائها");
- return;
- }
- //计算汇率 取number类型整数
- let price = parseFloat((this.select_data.PayPrice * this.currentCountry.Rate).toFixed(2));
- Pay.buy(this.select_data.ProductID, price, this.currentCountry.Currency);
- }
- // private test(){
- // let info = Pay.data_shop = {"MinMoney": 450, "Rate": 10000, "DefaultPrice": [1000,3000,6000,8000,10000],
- // "RatioConfig": [
- // {"Min":400,"Max": 1000, "Ratio": 0.7},
- // {"Min":1001,"Max": 3000, "Ratio": 0.8},
- // {"Min":3001,"Max": 6000, "Ratio": 1},
- // {"Min":6001,"Max": 8000, "Ratio": 1.2},
- // {"Min":8001,"Max": 10000, "Ratio": 1.4},
- // {"Min":10001,"Max": 10000000, "Ratio": 2}
- // ]}
- // this.gene_items.initData(new Array(info.DefaultPrice.length + 1));
- // }
- //刷新国家列表
- private createTypeList() {
- if (this.node_typeList.children.length > 0) return;
- Pay.data_shop.ExchangeRate.forEach((item, index) => {
- let temp = instantiate(this.node_type);
- temp.name = index.toString();
- temp.getComponent(Sprite).spriteFrame = null;
- temp.children[0].active = this.typeIndex === index;
- UtilsPanel.setItemIcon(nav_info.bundle, `texture/flag_${item.Currency}/spriteFrame`, temp.children[1].getComponent(Sprite));
- temp.children[2].getComponent(Label).string = item.CountryName;
- this.node_typeList.addChild(temp);
- UtilsPanel.clearBtnEvent(temp, false);
- UtilsPanel.addBtnEvent2(temp, 'onSelectType', this, index).transition = Button.Transition.NONE;
- });
- this.upTypeList();
- }
- //刷新选中的类型
- private upTypeList() {
- this.node_typeList.active = false;
- this.sp_arrows.node.toScaleY(-1);
- this.currentCountry = Pay.data_shop.ExchangeRate[this.typeIndex];
- this.lb_type.string = this.currentCountry.CountryName;
- UtilsPanel.setItemIcon(nav_info.bundle, `texture/flag_${this.currentCountry.Currency}/spriteFrame`, this.sp_type);
- //刷新金币
- this.upSelectPrice();
- }
- //选择 typeList
- private onSelectType(event: Event, customEventData: string) {
- let index = parseInt(customEventData);
- if (this.typeIndex == index) return;
- this.typeIndex = index;
- this.upTypeList();
- }
- //显示隐藏 typeList
- private onArrowsClick() {
- let isOpen = !this.node_typeList.active;
- Tween.stopAllByTarget(this.node_typeList);
- if (isOpen) {
- this.node_typeList.toScaleY(0);
- this.node_typeList.active = true;
- tween(this.node_typeList)
- .to(0.2, { scale: new Vec3(1, 1, 1) }, {
- onComplete: () => {
- }
- })
- .start();
- } else {
- tween(this.node_typeList)
- .to(0.2, { scale: new Vec3(1, 0.1, 1) }, {
- onComplete: () => {
- this.node_typeList.active = false;
- }
- })
- .start();
- }
- this.sp_arrows.node.toScaleY(isOpen ? 1 : -1);
- if (isOpen) {
- funcBg.add(this.node_typeList, this.onArrowsClick.bind(this), 0, 0);
- this.node_typeList.children.forEach((item, index) => {
- item.children[0].active = this.typeIndex == index;
- });
- }
- }
- }
|