buy.blade.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. @include('home.soft.common.head')
  5. <link rel="stylesheet" href="/static/css/member.css">
  6. <style>
  7. .vip-list .vip-item {
  8. width: 200px;
  9. }
  10. .vip-banner {
  11. margin-bottom: 15px;
  12. }
  13. .vip-model {
  14. margin-top: 0;
  15. padding-top: 10px;
  16. }
  17. .il-interest {
  18. font-weight: 500;
  19. line-height: 3.8;
  20. }
  21. .pay-cont {
  22. padding: 10px 10px 10px 0;
  23. }
  24. .pay-cont .pay-img {
  25. width: 120px;
  26. height: 120px;
  27. }
  28. .dis-agreement {
  29. height: 140px;
  30. line-height: 140px;
  31. }
  32. </style>
  33. </head>
  34. <body>
  35. <div class="vip-top">
  36. <img src="{{ $userInfo->avatar ?: '/static/logo.png' }}" class="vt-logo" />
  37. <div class="font-12">
  38. <p class="vt-name">{{ $userInfo->username }}</p>
  39. <span>会员有效期:</span>
  40. @if ($billInfo['validity_type'] == 2)
  41. <span>永久有效</span>
  42. @elseif($billInfo['validity_type'] == 1)
  43. <span>{{ $billInfo['validity_end_time'] }}</span>
  44. @else
  45. <span>非VIP会员</span>
  46. @endif
  47. </div>
  48. <div class="v-title">VIP套餐</div>
  49. </div>
  50. <div class="v-right">
  51. @if (isset($ad) && $ad->logo)
  52. <div class="vip-banner">
  53. <img src="{{ $ad->logo }}" style="width: 100%; height: 100%;border-radius:30px;" />
  54. </div>
  55. @endif
  56. <div class="vip-list">
  57. @if (
  58. $productInfo &&
  59. $productInfo->price4 &&
  60. $productInfo->mid !== 'b4X0GBHb95VN' &&
  61. $productInfo->mid !== 'Ds8JqlRmiiGR')
  62. <div id="vip_item4" class="vip-item active" onclick="selectTerm(4,{{ $productInfo->price4 }})">
  63. <img src="/static/logo/i-costs.png" class="i-cost" />
  64. <div class="vip-name">永久VIP</div>
  65. <div>
  66. <p class="vip-price">
  67. ¥<span class="price-value" id="permanentPrice">{{ floatval($productInfo->price4) }}</span>
  68. @if ($productInfo->market_price4 > 0)
  69. <span class="vip-market-price">¥{{ floatval($productInfo->market_price4) }}</span>
  70. @endif
  71. </p>
  72. <p class="vip-desc vip-red">
  73. {{ $productInfo->desc_price4 ?: '限时热销中' }}
  74. </p>
  75. </div>
  76. </div>
  77. @endif
  78. @if (
  79. $productInfo &&
  80. $productInfo->price5 &&
  81. ($productInfo->mid === 'b4X0GBHb95VN' || $productInfo->mid === 'Ds8JqlRmiiGR'))
  82. <div id="vip_item5" class="vip-item active" onclick="selectTerm(5,{{ $productInfo->price5 }})">
  83. <div class="vip-name">3年会员</div>
  84. <div>
  85. <p class="vip-price">
  86. ¥<span class="price-value">{{ $productInfo->price5 }}</span>
  87. </p>
  88. <p class="vip-desc vip-red">
  89. {{ $productInfo->desc_price5 ?: '限时热销中' }}
  90. </p>
  91. </div>
  92. </div>
  93. @endif
  94. @if ($productInfo && $productInfo->price1 && $productInfo->mid === 'b4X0GBHb95VN')
  95. <div id="vip_item1" class="vip-item" onclick="selectTerm(1,{{ $productInfo->price1 }})">
  96. <div class="vip-name">三个月VIP</div>
  97. <div>
  98. <p class="vip-price">
  99. ¥<span class="price-value">{{ floatval($productInfo->price1) }}</span>
  100. @if ($productInfo->market_price1 > 0)
  101. <span class="vip-market-price">¥{{ floatval($productInfo->market_price1) }}</span>
  102. @endif
  103. </p>
  104. <p class="vip-desc">
  105. {{ $productInfo->desc_price1 ?: '有效期三个月' }}
  106. </p>
  107. </div>
  108. </div>
  109. @endif
  110. @if ($productInfo->price2)
  111. <div id="vip_item2" class="vip-item" onclick="selectTerm(2,{{ $productInfo->price2 }})">
  112. <div class="vip-name">半年VIP</div>
  113. <div>
  114. <p class="vip-price">
  115. ¥<span class="price-value">{{ floatval($productInfo->price2) }}</span>
  116. @if ($productInfo->market_price2 > 0)
  117. <span class="vip-market-price">¥{{ floatval($productInfo->market_price2) }}</span>
  118. @endif
  119. </p>
  120. <p class="vip-desc">
  121. {{ $productInfo->desc_price2 ?: '有效期半年' }}
  122. </p>
  123. </div>
  124. </div>
  125. @endif
  126. @if ($productInfo->price3)
  127. <div id="vip_item3" class="vip-item" onclick="selectTerm(3,{{ $productInfo->price3 }})">
  128. <div class="vip-name">一年VIP</div>
  129. <div>
  130. <p class="vip-price">
  131. ¥<span class="price-value">{{ floatval($productInfo->price3) }}</span>
  132. @if ($productInfo->market_price3 > 0)
  133. <span class="vip-market-price">¥{{ floatval($productInfo->market_price3) }}</span>
  134. @endif
  135. </p>
  136. <p class="vip-desc">
  137. {{ $productInfo->desc_price3 ?: '有效期一年' }}
  138. </p>
  139. </div>
  140. </div>
  141. @endif
  142. </div>
  143. </div>
  144. <p class="vip-tips">温馨提示:会员到期后将直接转为非VIP会员</p>
  145. <div class="vip-model">
  146. <div class="v-right" style="padding: 0 35px;">
  147. <p class="pay-line" style="font-size: 16px;font-weight: 600;">
  148. 支付金额:<span style="color: #ed4014;">¥</span><span id="payMoney" class="money-color">88</span>
  149. </p>
  150. <div id="dis-agreement1" class="pay-cont">
  151. <div class="spinner-border m-5" role="status" id="spinnerShow">
  152. <span class="visually-hidden">Loading...</span>
  153. </div>
  154. <div id="qrcode" class="pay-img" style="display: none"></div>
  155. <div class="pay-desc">
  156. <p class="pay-line">
  157. 支付渠道:
  158. <img src="/static/logo/p-weixin.png" class="pay-icon" />
  159. <img src="/static/logo/p-alipay.png" class="pay-icon" />
  160. </p>
  161. <p class="pay-line" style="margin-top: 8px;">
  162. 支付方式:扫码支付
  163. </p>
  164. <p class="pay-tips" style="margin-top: 8px;">不支持无理由退款</p>
  165. </div>
  166. </div>
  167. <div id="dis-agreement2" class="dis-agreement">请同意服务协议后方可购买产品</div>
  168. <div class="pay-agreement">
  169. <label>
  170. <input type="checkbox" checked="" id="payCheck" onclick="checkPayBox(this)">
  171. </label>
  172. <span>同意并接受</span>
  173. <span class="agreement-txt" onclick="agreementModel(true)">《软件会员增值服务协议》</span>
  174. </div>
  175. </div>
  176. <div class="v-left">
  177. <div class="il-vip">
  178. <img src="/static/logo/i-vip.png">
  179. <span class="v-name">会员尊享</span>
  180. </div>
  181. <div class="il-interest">
  182. <div class="il-item">
  183. <img src="/static/logo/a-equity1.png">
  184. <span>不限文件大小</span>
  185. </div>
  186. <div class="il-item">
  187. <img src="/static/logo/a-equity2.png">
  188. <span>不限电脑设备</span>
  189. </div>
  190. <div class="il-item">
  191. <img src="/static/logo/a-equity3.png">
  192. <span>一键批量转换</span>
  193. </div>
  194. <div class="il-item">
  195. <img src="/static/logo/a-equity4.png">
  196. <span>本地安全处理</span>
  197. </div>
  198. <div class="il-item">
  199. <img src="/static/logo/a-equity5.png">
  200. <span>软件免费升级</span>
  201. </div>
  202. <div class="il-item">
  203. <img src="/static/logo/a-equity6.png">
  204. <span>专业技术支持</span>
  205. </div>
  206. </div>
  207. </div>
  208. </div>
  209. <div class="member-model" id="member-model">
  210. <div class="agreement-content">
  211. <p>尊敬的用户您好:</p>
  212. <p>欢迎使用星优办公软件会员增值服务协议,为使用星优办公软件会员增值服务(简称为:本服务),您应当阅读《星优办公软件会员增值服务协议》(简称为:本协议)。请您务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的相应条款。
  213. </p>
  214. <p>除非您已阅读并接受本协议所有条款,否则您无权使用本服务。您对本服务的任何购买使用行为即视为您已阅读并同意本协议的约束。如果您未满18周岁,请在法定监护人的陪同下阅读本协议。</p>
  215. <p>本协议是用户与苏州星优办公软件有限公司(简称为:星优办公)之间关于用户加入成为星优办公软件会员且使用星优办公相关软件以及服务所订立的协议。本协议描述星优办公与会员之间关于软件许可以及服务使用及相关方面的权利义务。星优办公软件服务涉及到的星优办公产品的所有权以及相关软件的知识产权归星优办公所有。
  216. </p>
  217. <p class="font-600">一、关于本服务</p>
  218. <p>1.会员增值服务费,指用户按照星优办公指定方式支付一定费用后,用户可以享有由本软件提供的应用服务。星优办公旗下的每款软件会员是独立收费,会员不通用,星优办公可能会根据本服务的整体规划,对本服务的收费标准、增值服务内容进行修改和变更。
  219. </p>
  220. <p>2.本服务可通过会员账号在任意一台电脑上使用软件,但一个账号同一时间只能在一台电脑上使用。</p>
  221. <p class="font-600">二、用户禁止行为</p>
  222. <p>1.用户使用本服务的权利是个人的,不允许对账户进行出租、出售等,或其他利用账户进行牟利的行为,若有相关滥用行为,我方有权单方面暂停、禁止账户相关功能。</p>
  223. <p class="font-600">三、退款声明</p>
  224. <p>为了避免购买本产品后引起纠纷,用户可在购买本服务前,对产品进行下载试用,看软件具体的使用效果,软件已提供免费试用,含有beta标识功能为测试补充,非会员服务,购买本服务则同意了星优办公会员增值服务协议/已试用软件/认可软件,故本公司不接受用户退款申请。
  225. </p>
  226. <p class="font-600">四、争议解决</p>
  227. <p>若您和星优办公之间发生任何纠纷或争议,首先应友好协商解决;协商不成的,您同意将纠纷或争议提交星优办公所在地法院管辖。</p>
  228. <p>本协议的一切解释权与修改权归星优办公。</p>
  229. </div>
  230. <div class="member-btn">
  231. <Button style="margin:0 10px;" onclick="agreementModel(false);">返回购买</Button>
  232. </div>
  233. </div>
  234. <script type="text/javascript" src="/static/js/qrcode.js"></script>
  235. <script>
  236. let buyContext;
  237. let target = '{{ $target }}';
  238. let agentMid = '{{ $agentMid }}';
  239. let token = '{{ $token }}';
  240. let pay_type = "wechat";
  241. let sku_type = 4;
  242. let pmid = "{{ $productInfo->mid }}";
  243. let permanentPrice = "{{ floatval($productInfo->price4) }}";
  244. // 设置允许跨域
  245. axios.defaults.withCredentials = false;
  246. if (pmid == "b4X0GBHb95VN" || pmid == "Ds8JqlRmiiGR") {
  247. sku_type = 5;
  248. document.getElementById("payMoney").innerText = "{{ floatval($productInfo->price5) }}"
  249. } else {
  250. // 默认金额
  251. document.getElementById("payMoney").innerText = "{{ floatval($productInfo->price4) }}"
  252. }
  253. function selectTerm(type, price) {
  254. sku_type = type;
  255. document.getElementById("payMoney").innerText = price
  256. // 其他的去除
  257. let vipItem1 = document.getElementById("vip_item1");
  258. if (vipItem1) {
  259. vipItem1.setAttribute("class", 'vip-item');
  260. }
  261. let vipItem2 = document.getElementById("vip_item2");
  262. if (vipItem2) {
  263. vipItem2.setAttribute("class", 'vip-item');
  264. }
  265. let vipItem3 = document.getElementById("vip_item3");
  266. if (vipItem3) {
  267. vipItem3.setAttribute("class", 'vip-item');
  268. }
  269. let vipItem4 = document.getElementById("vip_item4");
  270. if (vipItem4) {
  271. vipItem4.setAttribute("class", 'vip-item');
  272. }
  273. let vipItem5 = document.getElementById("vip_item5");
  274. if (vipItem5) {
  275. vipItem5.setAttribute("class", 'vip-item');
  276. }
  277. //let vipItem1 = document.getElementById("vip_item1").getAttribute("class").replace("active", " ");
  278. //document.getElementById("vip_item1").setAttribute("class", vipItem1);
  279. //let vipItem2 = document.getElementById("vip_item2").getAttribute("class").replace("active", " ");
  280. //document.getElementById("vip_item2").setAttribute("class", vipItem2);
  281. //let vipItem3 = document.getElementById("vip_item3").getAttribute("class").replace("active", " ");
  282. //document.getElementById("vip_item3").setAttribute("class", vipItem3);
  283. //let vipItem4 = document.getElementById("vip_item4").getAttribute("class").replace("active", " ");
  284. //document.getElementById("vip_item4").setAttribute("class", vipItem4);
  285. let classVal = document.getElementById("vip_item" + type).getAttribute("class");
  286. document.getElementById("vip_item" + type).setAttribute("class", classVal.concat(" active"))
  287. //创建支付二维码
  288. createPayCode();
  289. }
  290. // 创建支付二维码
  291. createPayCode();
  292. // 账户登录信息
  293. // getUserInfo();
  294. function createPayCode() {
  295. document.getElementById('spinnerShow').style.display = ""
  296. document.getElementById("qrcode").innerHTML = ""
  297. document.getElementById('qrcode').style.display = "none"
  298. let data = {
  299. agent_mid: agentMid,
  300. type: sku_type,
  301. pay_type: pay_type
  302. }
  303. axios.post(target + '/api/pay/getPayCode/' + pmid, data, {
  304. headers: {
  305. Authorization: token
  306. }
  307. }).then(function(response) {
  308. if (!response.data.error) {
  309. let code = response.data.result;
  310. createQrcode(code);
  311. }
  312. }).catch(function(error) {
  313. console.log(error);
  314. });
  315. }
  316. // 设置支付类型
  317. function selectPaytype(type) {
  318. pay_type = type
  319. if (type === 'wechat') {
  320. let str = document.getElementById("payAlipay").getAttribute("class").replace("active", " ")
  321. document.getElementById("payAlipay").setAttribute("class", str);
  322. let classVal = document.getElementById("payWechat").getAttribute("class");
  323. document.getElementById("payWechat").setAttribute("class", classVal.concat(" active"))
  324. } else {
  325. let str = document.getElementById("payWechat").getAttribute("class").replace("active", " ");
  326. document.getElementById("payWechat").setAttribute("class", str);
  327. let classVal = document.getElementById("payAlipay").getAttribute("class");
  328. document.getElementById("payAlipay").setAttribute("class", classVal.concat(" active"))
  329. }
  330. //创建支付二维码
  331. createPayCode();
  332. }
  333. // 创建二维码
  334. function createQrcode(code) {
  335. var qrcode = new QRCode("qrcode", {
  336. text: "https://www.xingyousoft.com/soft/pay/" + code,
  337. width: 120,
  338. height: 120
  339. });
  340. document.getElementById('qrcode').style.display = ""
  341. document.getElementById('spinnerShow').style.display = "none"
  342. // 开始检测支付扫描
  343. startScan(code);
  344. }
  345. let payScanInterval;
  346. let payEndInterval;
  347. function startScan(code) {
  348. if (payScanInterval) {
  349. clearInterval(payScanInterval);
  350. }
  351. if (payEndInterval) {
  352. clearInterval(payEndInterval);
  353. }
  354. payScanInterval = setInterval(() => {
  355. axios.post(target + '/api/pay/checkPayScan/' + code, {}, {
  356. headers: {
  357. Authorization: token
  358. }
  359. }).then((response) => {
  360. if (!response.data.error) {
  361. // 提示消息,扫描成功
  362. // 开始检测支付
  363. clearInterval(payScanInterval);
  364. startCheckPayEnd(code);
  365. }
  366. }).catch(function(error) {
  367. console.log(error);
  368. });
  369. }, 1000);
  370. }
  371. // 开始检测支付
  372. function startCheckPayEnd(code) {
  373. if (payEndInterval) {
  374. clearInterval(payEndInterval);
  375. }
  376. payEndInterval = setInterval(() => {
  377. axios.post(target + '/api/pay/checkPayEnd/' + code, {
  378. product_type: 1
  379. }, {
  380. headers: {
  381. Authorization: token
  382. }
  383. }).then((response) => {
  384. if (!response.data.code === 0 || !response.data.error) {
  385. // 关闭定时器
  386. clearInterval(payEndInterval);
  387. // 支付完成
  388. window.top.postMessage('paySuccess', '*');
  389. }
  390. }).catch(function(error) {
  391. console.log(error);
  392. });
  393. }, 1000);
  394. }
  395. // 获取用户信息
  396. function getUserInfo() {
  397. axios.post(target + '/api/login/getUserInfo', {}, {
  398. headers: {
  399. Authorization: token
  400. }
  401. }).then(function(response) {
  402. if (!response.data.error) {
  403. let userInfo = response.data.result;
  404. }
  405. }).catch(function(error) {
  406. });
  407. }
  408. function checkPayBox(e) {
  409. document.getElementById('dis-agreement1').style.display = "none";
  410. document.getElementById('dis-agreement2').style.display = "none";
  411. if (!e.checked) {
  412. document.getElementById('dis-agreement2').style.display = "block"
  413. } else {
  414. document.getElementById('dis-agreement1').style.display = "flex";
  415. }
  416. }
  417. function agreementModel(e) {
  418. if (e) {
  419. document.getElementById('member-model').style.display = "block";
  420. } else {
  421. document.getElementById('member-model').style.display = "none";
  422. }
  423. }
  424. function formatTime(str) {
  425. let date = new Date(str * 1000);
  426. const year = date.getFullYear();
  427. const month = date.getMonth() + 1;
  428. const day = date.getDate();
  429. const hour = date.getHours();
  430. const minute = date.getMinutes();
  431. const second = date.getSeconds();
  432. return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(
  433. ':');
  434. }
  435. function formatNumber(n) {
  436. n = n.toString();
  437. return n[1] ? n : '0' + n;
  438. }
  439. </script>
  440. </body>
  441. </html>