+ {{lang.status_text2}}
+diff --git a/.drone.yml b/.drone.yml index 4fe03b0..4d1bf80 100644 --- a/.drone.yml +++ b/.drone.yml @@ -20,7 +20,8 @@ steps: # 将主题配置插件同步到运行目录 - cp -rf /www/wwwroot/hgdemo.hgidc.cn/public/web/BlackFruit-web/plugins/addon/theme_configurator /www/wwwroot/hgdemo.hgidc.cn/public/plugins/addon/ - - ls -l + # 将会员中心全局主题 hgcloud 同步到运行目录 + - cp -rf /www/wwwroot/hgdemo.hgidc.cn/public/web/BlackFruit-web/clientarea/hgcloud /www/wwwroot/hgdemo.hgidc.cn/public/clientarea/template/pc/ - name: Restart Nginx commands: diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5eaec81 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +clientarea/default_yfMBA.tar.gz +clientarea/default/ diff --git a/clientarea/hgcloud/404.php b/clientarea/hgcloud/404.php new file mode 100644 index 0000000..cf95896 --- /dev/null +++ b/clientarea/hgcloud/404.php @@ -0,0 +1,31 @@ +{include file="header"} + + + + +
+
+ {{lang.status_text2}}
+
+ {{lang.status_text2}}
+
+
+
+ + ID: + {{host.id}} +
++ {{lang.auto_renew_name}}: + {{host.name}} +
++ {{lang.auto_renew_area}}: + {{host.country}}-{{host.city}}-{{host.area}} +
+
+ IP:
+
+ {{host.dedicate_ip}}
+
+ {{item}}
+
+
+ {{lang.auto_renew_cycle}}: + {{commonData.currency_prefix}}{{host.renew_amount}}/{{host.billing_cycle_name}} +
++ {{lang.auto_renew_due}}: + {{host.due_time | formateTime}} +
+ID:${item.id}:${item.msg}
`; + }) + .join(""); + this.$notify({ + title: lang.cart_tip_text25, + message: tips, + duration: 0, + dangerouslyUseHTMLString: true, + }); + this.$emit("success"); + this.subLoading = false; + this.confirmDialog = false; + + if (this.opType === "crack_pass") { + this.isShowRePass = false; + } + }) + .catch((err) => { + this.subLoading = false; + this.$message.error(err.data.msg); + if (err.data.data) { + if ( + !client_operate_password && + err.data.data.operate_password === 1 + ) { + this.$refs.safeRef.openDialog("handelOp"); + return; + } else { + return this.$message.error(err.data.msg); + } + } + }); + }, + openDia() { + this.promo.promo_code = ""; + this.discountInputVal = ""; + this.currentDiscount = 0; + this.batchHostDiscount = {}; + this.isShow = true; + this.getRenewList(); + }, + changeCycles(item) { + this.discountInputVal = this.promo.promo_code; + this.handelApplyPromoCode(false); + item.cur_pirce = this.calcPrice(item); + item.promo_code_discount = this.calcPrice(item, true); + }, + calcPrice(row, bol = false) { + let temp = 'price'; + if (bol) { + temp = 'promo_code_discount'; + } + return ( + row.billing_cycles.filter( + (item, index) => index == row.select_cycles + )[0]?.[temp] || 0 + ); + }, + getRenewList() { + this.loading = true; + batchRenewList({ ids: this.idsArr }) + .then((res) => { + this.dataList = res.data.data.list.map((item) => { + item.select_cycles = 0; + item.cur_pirce = item.billing_cycles[0].price; + item.promo_code_discount = item.billing_cycles[0].promo_code_discount || 0; + return item; + }); + this.loading = false; + }) + .catch((err) => { + this.loading = false; + this.$message.error(err.data.msg); + }); + }, + rzClose() { + this.isShow = false; + }, + paySuccess(e) { + this.isShow = false; + this.$emit("success"); + }, + // 取消支付回调 + payCancel(e) { }, + handelRenew() { + this.subLoading = true; + const billing_cycles = {}; + this.dataList.forEach((item) => { + billing_cycles[item.id] = item.billing_cycles.filter( + (items, index) => index == item.select_cycles + )[0].billing_cycle; + }); + aipBatchRenew({ + ids: this.rewIdArr, + billing_cycles, + customfield: { + promo_code: this.promo.promo_code, + }, + }) + .then((res) => { + this.subLoading = false; + if (res.data.code === "Unpaid") { + this.$refs.RennwPayDialog.showPayDialog(res.data.data.id); + } else { + this.isShow = false; + this.$emit("success"); + } + }) + .catch((err) => { + this.subLoading = false; + this.$message.error(err.data.msg); + }); + }, + }, +}; diff --git a/clientarea/hgcloud/components/captchaDialog/captchaDialog.js b/clientarea/hgcloud/components/captchaDialog/captchaDialog.js new file mode 100644 index 0000000..1d68ad5 --- /dev/null +++ b/clientarea/hgcloud/components/captchaDialog/captchaDialog.js @@ -0,0 +1,116 @@ +// 验证码通过 - 找到当前显示的验证码实例 +function captchaCheckSuccsss(bol, captcha, token) { + if (bol) { + // 遍历所有注册的验证码实例,找到 DOM 中存在的那个(v-if 确保存在即可见) + if (window.captchaInstances) { + for (let captchaId in window.captchaInstances) { + const element = document.getElementById(captchaId); + // v-if 保证:元素存在 = 元素可见 + if (element) { + const instance = window.captchaInstances[captchaId]; + if (instance && instance.getData) { + instance.getData(captcha, token); + break; // 找到就退出循环 + } + } + } + } + } +} + +// 取消验证码验证 - 找到当前显示的验证码实例 +function captchaCheckCancel() { + if (window.captchaInstances) { + for (let captchaId in window.captchaInstances) { + const element = document.getElementById(captchaId); + // v-if 保证:元素存在 = 元素可见 + if (element) { + const instance = window.captchaInstances[captchaId]; + if (instance && instance.captchaCancel) { + instance.captchaCancel(); + break; // 找到就退出循环 + } + } + } + } +} + +// css 样式依赖common.css +const captchaDialog = { + template: ` + `, + created() { + // this.doGetCaptcha() + }, + data() { + return { + captchaData: { + token: "", + captcha: "", + }, + captchaHtml: "", + }; + }, + props: { + isShowCaptcha: { + type: Boolean, + }, + captchaId: { + type: String, + default() { + // 生成唯一 ID,避免多实例冲突 + return `captchaHtml_${Date.now()}_${Math.random() + .toString(36) + .slice(2, 11)}`; + }, + }, + }, + methods: { + // 获取图形验证码 + doGetCaptcha() { + try { + getNewCaptcha().then((res) => { + if (res.data.status === 200) { + this.captchaHtml = res.data.data.html; + $(`#${this.captchaId}`).html(this.captchaHtml); + $(`#${this.captchaId}`).show(); + } + }); + } catch (e) { + console.log("获取图形验证码", e); + } + }, + // 取消验证码 + captchaCancel() { + this.$emit("captcha-cancel"); + }, + // 获取验证码数据 + getData(captchaCode, token) { + this.captchaData.captcha = captchaCode; + this.captchaData.token = token; + this.$emit("get-captcha-data", captchaCode, token); + }, + }, + mounted() { + // 创建全局实例映射对象 + if (!window.captchaInstances) { + window.captchaInstances = {}; + } + + // 将当前实例注册到全局映射表中,使用箭头函数保持 this 指向 + window.captchaInstances[this.captchaId] = { + getData: (captchaCode, token) => { + this.getData(captchaCode, token); + }, + captchaCancel: () => { + this.captchaCancel(); + }, + }; + }, + // 组件销毁时清理对应的实例引用 + beforeDestroy() { + if (window.captchaInstances && window.captchaInstances[this.captchaId]) { + delete window.captchaInstances[this.captchaId]; + } + }, +}; diff --git a/clientarea/hgcloud/components/cashBack/cashBack.js b/clientarea/hgcloud/components/cashBack/cashBack.js new file mode 100644 index 0000000..1b2f157 --- /dev/null +++ b/clientarea/hgcloud/components/cashBack/cashBack.js @@ -0,0 +1,104 @@ +const cashBack = { + template: ` +据我国2016年11月7日全国人民代表大会常务委员会通过的《中华人民共和国网络安全法》规定,用户不提供真实身份信息的,网络运营者不得为其提供相关服务。 为了符合国家法律法规,以及不影响您参与优惠活动,请您先实名认证。实名认证信息保密工作是统一管理,请放心填写。
+ ++ {{coin_name}}{{lang.coin_text80}} +
+ + + ++
{{lang.coin_text81}}:{{item.property_type === 'register' ? lang.coin_text82 : lang.coin_text83}} +
+{{lang.coin_text84}}: + {{lang.coin_text85}} + + + {{lang.coin_text86}}{{item.property_cycle_num}}{{item.property_cycle_unit === 'day' ? lang.coin_text87 : lang.coin_text88}},{{lang.coin_text89}} + +
+{{lang.coin_text90}}{{coin_name}}{{lang.coin_text91}}:
+
+ {{item.property_amount}}{{coin_name}}
+
+
+
+ {{property_item.level_id_arr.map(item => item.name).join('、')}},{{lang.coin_text92}}{{property_item.award}}{{coin_name}}
+
{{lang.coin_text93}}:{{lang.coin_text94}}
+{{lang.coin_text90}}{{coin_name}}{{lang.coin_text91}}:
+ ++ {{lang.coin_text94}}{{recharge_item.amount}},{{lang.coin_text92}}{{recharge_item.award}}{{coin_name}} +
+ + +{{lang.coin_text94}}{{item.recharge_min}}{{lang.coin_text95}},{{lang.coin_text96}} + {{item.recharge_proportion}}% {{lang.coin_text97}}{{coin_name}} +
+ + + + +{{lang.coin_text81}}:{{lang.coin_text98}}
+{{lang.coin_text99}}:{{lang.coin_text100}}
+{{lang.coin_text99}}:{{lang.coin_text101}}
+{{lang.coin_text102}}:{{lang.coin_text103}}
+{{lang.coin_text90}}{{coin_name}}{{lang.coin_text91}}:
+ ++ {{lang.coin_text104}}{{total_consume_item.amount}},{{lang.coin_text105}}{{total_consume_item.award}}{{coin_name}} +
+ + ++ {{lang.coin_text106}}{{total_consume_item.amount}},{{lang.coin_text105}}{{total_consume_item.award}}{{coin_name}} +
+ + + + +{{action}}
+{{lang.coin_text102}}: + {{lang.coin_text145}} + {{lang.coin_text146}} + {{lang.coin_text147}} +
+ + + +{{lang.coin_text93}}:{{lang.coin_text98}}
+ {{lang.coin_text107}}: + + {{product_item.name}} + 、 + + + + + {{lang.coin_text108}} + + +{{lang.coin_text99}}:{{lang.coin_text101}}
+{{lang.coin_text102}}:{{lang.coin_text103}}
+{{lang.coin_text90}}{{coin_name}}{{lang.coin_text91}}:
++ {{lang.coin_text109}}{{single_consume_item.amount}},{{lang.coin_text105}}{{single_consume_item.award}}{{coin_name}} +
+ + + +{{lang.coin_text81}}:{{lang.coin_text110}}
+{{lang.coin_text99}}:{{lang.coin_text111}}
+{{lang.coin_text102}}:{{lang.coin_text112}}
+{{lang.coin_text90}}{{coin_name}}{{lang.coin_text91}}:
++ {{lang.coin_text110}} + + + {{product_item.name}} + 、 + + + + {{lang.coin_text108}} + + ,{{lang.coin_text105}}{{order_item.award}}{{coin_name}} +
+ + + +{{lang.coin_text93}}: + + {{lang.coin_text110}}、 + + + {{lang.coin_text113}}、 + + + {{lang.coin_text114}} + +
+{{lang.coin_text115}}: + + {{lang.coin_text116}} + + + {{item.full_gift_client_limit_type === 'client' ? lang.coin_text117 : lang.coin_text118}} + +
+{{lang.coin_text107}}: + ({{lang.coin_text119}}) + + + + {{product_item.name}} + 、 + + + + + {{lang.coin_text108}} + + +
++ {{lang.coin_text102}}:{{lang.coin_text120}}{{item.full_gift_payment_threshold>0?item.full_gift_payment_threshold:item.full_gift_threshold_amount}} + ,{{lang.coin_text121}} +
+{{lang.coin_text90}}{{coin_name}}{{lang.coin_text91}}:
++ {{lang.coin_text122}}{{item.full_gift_threshold_amount}},{{lang.coin_text105}}{{item.full_gift_gift_amount}}{{coin_name}} +
+ +{{lang.coin_text124}}: + + {{item.effective_start_time | formateTime}} + + + {{lang.coin_text125}} + + + {{lang.coin_text126}}{{item.effective_time}}{{item.effective_time_unit === 'day' ? lang.coin_text87 : lang.coin_text88}}{{lang.coin_text127}} + +
+{{lang.coin_text128}}: + + {{item.effective_end_time | formateTime}} + + + {{item.efficient_time }} {{item.efficient_time_unit === 'day' ? lang.coin_text87 : lang.coin_text88}} + + + {{lang.coin_text129}} + +
+{{lang.coin_text48}}
+{{lang.coin_text49}}
+{{lang.coin_text50}}
+{{lang.coin_text51}}
+{{lang.coin_text52}}
+ ++ {{lang.coin_text47}}: + + {{el.name}} + 、 + +
++ {{lang.coin_text74}} +
+ ++ {{lang.coin_text130}}{{coin_name}}{{lang.coin_text131}} +
+{{lang.coin_text65}}
++ {{lang.coin_text132}}: + + {{lang.coin_text133}}、 + + + {{lang.coin_text134}}、 + + + {{lang.coin_text135}}、 + + + {{lang.coin_text136}} + +
++ {{lang.coin_text5}}:{{lang[cycle_item]}} + 、 +
+{{currencyPrefix}}{{getDisplayPrice(item) | filterMoney}}
++ {{item.name}} + + {{item.capacity}}G + + {{item.min_capacity}}-{{item.max_capacity}}G +
+ ++ {{lang.shoppingCar_tip_text2}}:{{commonData.currency_prefix}} + {{ renewParams.clDiscount | filterMoney}} +
++ {{lang.shoppingCar_tip_text4}}:{{commonData.currency_prefix}} + {{ renewParams.code_discount | filterMoney }} +
++ {{commonData.currency_prefix}} {{ renewParams.base_price | + filterMoney}} +
++ {{commonData.currency_prefix}} {{ renewParams.original_price + | filterMoney}} +
+
+ + {{item.name}} +
+
+
+ + ({{lang.finance_custom12}}:{{commonData.currency_prefix}}{{orderInfo.credit}}{{commonData.currency_code}}) +
+{{lang.finance_custom4}}
+{{lang.finance_custom16}}{{lang.finance_custom17}}
+{{lang.finance_custom18}}
++ ({{lang.finance_custom12}}:{{commonData.currency_prefix}}{{orderInfo.credit}}{{commonData.currency_code}}) +
+{{lang.finance_custom4}}
+{{lang.finance_custom16}}{{lang.finance_custom17}}
+{{lang.finance_custom18}}
++ {{item.name}} +
++ {{lang.shoppingCar_tip_text2}}:{{commonData.currency_prefix}} + {{ level_discount_amount | filterMoney}} +
++ {{lang.shoppingCar_tip_text4}}:{{commonData.currency_prefix}} + {{ code_discount_amount | filterMoney }} +
++ {{commonData.currency_prefix}} {{ base_price | filterMoney}} +
++ {{commonData.currency_prefix}} {{ original_price | filterMoney}} +
+{{lang.reset_auth_detail_title}}
+ {{lang.reset_auth_reset_button}} +{{lang.reset_auth_modify_tip}}
+{{lang.reset_auth_current_info}}:
+{{lang.reset_auth_new_info}}:
+{{lang.reset_auth_domain_tip}}
+{{lang.reset_auth_domain_example}}
+ +{{lang.reset_auth_select_verify_tip}}
+{{lang.reset_auth_manual_review_desc}}
+{{lang.reset_auth_auto_reset_desc}}
+{{lang.reset_auth_verify_tip}}
+{{lang.reset_auth_current_verify_info}}
+ +{{lang.reset_auth_scan_tip}}
+{{calcCurrentMethod?.tip}}
+
+
+ + {{ scope.row.product_name }} + {{ scope.row.name }} +
+ ++ {{item}} + +
+
+
+
+ {{item.name}}
++ + {{item.begin_time | formateTime1}}- {{item.end_time | formateTime1}} + + + {{lang.coin_text17}} + +
++ + {{item.effective_start_time | formateTime1}}- + {{item.effective_end_time | formateTime1}} + + + {{lang.coin_text17}} + +
+
+ {{lang.voucher_rule}}
+
+
{{lang.coin_text48}}
+{{lang.coin_text49}}
+{{lang.coin_text50}}
+{{lang.coin_text51}}
+{{lang.coin_text52}}
++ {{lang.coin_text64}}: + + ID:{{el}} + 、 + +
+ ++ {{lang.coin_text47}}: + + {{el.name}} + 、 + +
+ ++ {{lang.coin_text74}} +
+ +{{lang.coin_text65}}
++ {{lang.coin_text132}}: + + {{lang.coin_text133}}、 + + + {{lang.coin_text134}}、 + + + {{lang.coin_text135}}、 + + + {{lang.coin_text136}} + +
++ {{lang.coin_text5}}:{{lang[cycle_item]}} 、 +
++ {{lang.voucher_min}}:{{commonData.currency_prefix}}{{item.min_price}} +
+{{item.code}}
+{{item.start_time | formateTime1}}- {{item.end_time | formateTime1}} +
+
+ {{lang.voucher_rule}}
+
+
+ {{lang.voucher_order_product}}: + {{el.name}}; +
++ {{lang.voucher_accout_product}}: + {{el.name}}; +
++ {{lang.voucher_no_product}} +
++ {{lang.voucher_active}} +
+{{lang.voucher_onetime}}
+{{lang.voucher_upgrade}}
+{{lang.voucher_renew}}
+{{lang.voucher_upgrade_no}}
+{{lang.voucher_renew_no}}
++ {{lang.voucher_min}}:{{commonData.currency_prefix}}{{item.min_price}} +
+{{item.code}}
+{{item.start_time | formateTime1}}- {{item.end_time | formateTime1}} +
+ {{lang.voucher_rule}}
+
+
+ {{item.is_get ?lang.voucher_has_get: lang.voucher_get_now}} +
++ {{lang.voucher_order_product}}: + {{el.name}}; +
++ {{lang.voucher_accout_product}}: + {{el.name}}; +
++ {{lang.voucher_no_product}} +
++ {{lang.voucher_active}} +
+{{lang.voucher_onetime}}
+{{lang.voucher_upgrade}}
+{{lang.voucher_renew}}
+{{lang.voucher_upgrade_no}}
+{{lang.voucher_renew_no}}
+ +{{lang.finance_text60}}
+{{lang.finance_text61}}
+{{lang.finance_credit3}}
++ {{lang.finance_credit4}}: {{preData.start_time | formateTime2}}- {{preData.end_time | formateTime2}} +
++ {{lang.finance_credit5}}:{{commonData.currency_prefix}}{{preData.amount | formatNumber}} +
+{{lang.finance_credit6}}
+