From 86e4c38663fab1a298111801f7484016f0be5441 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 24 Sep 2025 00:55:36 +0800 Subject: [PATCH] demo --- app.js | 12 + app.json | 14 + app.wxss | 0 miniprogram_npm/@jdmini/api/index.d.ts | 295 ++++++++++++++++++ miniprogram_npm/@jdmini/api/index.js | 4 + .../@jdmini/components/icons/home-active.png | Bin 0 -> 1575 bytes .../@jdmini/components/icons/home.png | Bin 0 -> 1070 bytes .../@jdmini/components/icons/link-active.png | Bin 0 -> 2796 bytes .../@jdmini/components/icons/link.png | Bin 0 -> 1798 bytes .../@jdmini/components/jdwx-ad/index.js | 22 ++ .../@jdmini/components/jdwx-ad/index.json | 3 + .../@jdmini/components/jdwx-ad/index.wxml | 5 + .../@jdmini/components/jdwx-ad/index.wxss | 7 + .../@jdmini/components/jdwx-link/index.js | 37 +++ .../@jdmini/components/jdwx-link/index.json | 3 + .../@jdmini/components/jdwx-link/index.wxml | 11 + .../@jdmini/components/jdwx-link/index.wxss | 63 ++++ node_modules/.package-lock.json | 20 ++ node_modules/@jdmini/api/README.md | 252 +++++++++++++++ .../@jdmini/api/miniprogram_dist/index.d.ts | 295 ++++++++++++++++++ .../@jdmini/api/miniprogram_dist/index.js | 4 + node_modules/@jdmini/api/package.json | 24 ++ node_modules/@jdmini/components/README.md | 31 ++ .../miniprogram_dist/icons/home-active.png | Bin 0 -> 1575 bytes .../miniprogram_dist/icons/home.png | Bin 0 -> 1070 bytes .../miniprogram_dist/icons/link-active.png | Bin 0 -> 2796 bytes .../miniprogram_dist/icons/link.png | Bin 0 -> 1798 bytes .../miniprogram_dist/jdwx-ad/index.js | 22 ++ .../miniprogram_dist/jdwx-ad/index.json | 3 + .../miniprogram_dist/jdwx-ad/index.wxml | 5 + .../miniprogram_dist/jdwx-ad/index.wxss | 7 + .../miniprogram_dist/jdwx-link/index.js | 37 +++ .../miniprogram_dist/jdwx-link/index.json | 3 + .../miniprogram_dist/jdwx-link/index.wxml | 11 + .../miniprogram_dist/jdwx-link/index.wxss | 63 ++++ node_modules/@jdmini/components/package.json | 20 ++ package-lock.json | 26 ++ package.json | 6 + pages/index/index.js | 14 + pages/index/index.json | 4 + pages/index/index.wxml | 1 + pages/index/index.wxss | 0 project.config.json | 41 +++ project.private.config.json | 23 ++ sitemap.json | 7 + 45 files changed, 1395 insertions(+) create mode 100644 app.js create mode 100644 app.json create mode 100644 app.wxss create mode 100644 miniprogram_npm/@jdmini/api/index.d.ts create mode 100644 miniprogram_npm/@jdmini/api/index.js create mode 100644 miniprogram_npm/@jdmini/components/icons/home-active.png create mode 100644 miniprogram_npm/@jdmini/components/icons/home.png create mode 100644 miniprogram_npm/@jdmini/components/icons/link-active.png create mode 100644 miniprogram_npm/@jdmini/components/icons/link.png create mode 100644 miniprogram_npm/@jdmini/components/jdwx-ad/index.js create mode 100644 miniprogram_npm/@jdmini/components/jdwx-ad/index.json create mode 100644 miniprogram_npm/@jdmini/components/jdwx-ad/index.wxml create mode 100644 miniprogram_npm/@jdmini/components/jdwx-ad/index.wxss create mode 100644 miniprogram_npm/@jdmini/components/jdwx-link/index.js create mode 100644 miniprogram_npm/@jdmini/components/jdwx-link/index.json create mode 100644 miniprogram_npm/@jdmini/components/jdwx-link/index.wxml create mode 100644 miniprogram_npm/@jdmini/components/jdwx-link/index.wxss create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/@jdmini/api/README.md create mode 100644 node_modules/@jdmini/api/miniprogram_dist/index.d.ts create mode 100644 node_modules/@jdmini/api/miniprogram_dist/index.js create mode 100644 node_modules/@jdmini/api/package.json create mode 100644 node_modules/@jdmini/components/README.md create mode 100644 node_modules/@jdmini/components/miniprogram_dist/icons/home-active.png create mode 100644 node_modules/@jdmini/components/miniprogram_dist/icons/home.png create mode 100644 node_modules/@jdmini/components/miniprogram_dist/icons/link-active.png create mode 100644 node_modules/@jdmini/components/miniprogram_dist/icons/link.png create mode 100644 node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.js create mode 100644 node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.json create mode 100644 node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.wxml create mode 100644 node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.wxss create mode 100644 node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.js create mode 100644 node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.json create mode 100644 node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.wxml create mode 100644 node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.wxss create mode 100644 node_modules/@jdmini/components/package.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pages/index/index.js create mode 100644 pages/index/index.json create mode 100644 pages/index/index.wxml create mode 100644 pages/index/index.wxss create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 sitemap.json diff --git a/app.js b/app.js new file mode 100644 index 0000000..31f3b43 --- /dev/null +++ b/app.js @@ -0,0 +1,12 @@ +import { injectApp, waitLogin, gatewayHttpClient } from '@jdmini/api' +App(injectApp()({ + globalData: { + + }, + async onLaunch() { + // 等待登陆完成以后请求自动携带token + await waitLogin() + // 三方登录本地缓存 + console.log(wx.getStorageSync('jdwx-userinfo')) + }, +})) diff --git a/app.json b/app.json new file mode 100644 index 0000000..4d411a1 --- /dev/null +++ b/app.json @@ -0,0 +1,14 @@ +{ + "pages": [ + "pages/index/index" + ], + "window": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "", + "navigationBarBackgroundColor": "#ffffff" + }, + "style": "v2", + "componentFramework": "glass-easel", + "sitemapLocation": "sitemap.json", + "lazyCodeLoading": "requiredComponents" +} diff --git a/app.wxss b/app.wxss new file mode 100644 index 0000000..e69de29 diff --git a/miniprogram_npm/@jdmini/api/index.d.ts b/miniprogram_npm/@jdmini/api/index.d.ts new file mode 100644 index 0000000..e06e58d --- /dev/null +++ b/miniprogram_npm/@jdmini/api/index.d.ts @@ -0,0 +1,295 @@ +// Generated by dts-bundle v0.7.3 + +declare module '@jdmini/api' { + import { onLoginReady, waitLogin } from '@jdmini/api/app'; + import HttpClient, { gatewayHttpClient, baseHttpClient, apiHttpClient } from '@jdmini/api/httpClient'; + import { injectApp, injectPage, injectComponent, hijackApp, hijackAllPage } from '@jdmini/api/injector'; + import adManager from '@jdmini/api/adManager'; + export { onLoginReady, waitLogin, injectApp, injectPage, injectComponent, hijackApp, hijackAllPage, gatewayHttpClient, baseHttpClient, apiHttpClient, HttpClient, adManager, }; +} + +declare module '@jdmini/api/app' { + export interface AppOptions { + gatewayUrl?: string; + baseUrl?: string; + apiUrl?: string; + } + export interface PageOptions { + showInterstitialAd?: boolean; + } + export function initApp(options?: AppOptions): Promise; + export function showPage(options: PageOptions | undefined, pageId: string): Promise; + export const checkTokenValid: () => boolean; + /** + * 确保登录完成 + * @param {Function} callback - 回调函数 + * @returns {void} + */ + export function onLoginReady(callback: (...args: any[]) => void): void; + /** + * 等待登录完成 + * @returns {Promise} + */ + export function waitLogin(): Promise; + export function login(): Promise; + export function fetchEchoData(): Promise; + export function trackVisit(): Promise; +} + +declare module '@jdmini/api/httpClient' { + import { HttpClientOptions, RequestOptions, ApiResponse } from '@jdmini/api/types'; + class HttpClient { + constructor({ baseURL, timeout }: HttpClientOptions); + setBaseURL(baseURL: string): void; + /** + * 请求 + * @param {string} path 路径 + * @param {string} method 方法, 默认GET + * @param {Object} data 数据, 默认{} + * @param {Object} options 传入wx.request的其他配置, 默认{} + * @returns {Promise} 返回一个Promise对象 + */ + request(path: string, method?: WechatMiniprogram.RequestOption['method'], data?: Record, options?: RequestOptions): Promise>; + /** + * 上传文件 + * @param {string} filePath 文件路径 + * @param {Object} data 数据, 默认{} + * @param {'avatar' | 'file'} type 类型, 默认'file' + * @returns {Promise} 返回一个Promise对象 + */ + uploadFile(filePath: string, data?: Record, type?: 'avatar' | 'file'): Promise>; + /** + * 上传文件 + * @param {string} filePath 文件路径 + * @param {Object} data 数据, 默认{} + * @param {'avatar' | 'file'} type 类型, 默认'file' + * @returns {Promise} 返回一个Promise对象 + */ + upload(path: string, filePath: string, data?: Record): Promise>; + /** + * 删除文件 + * @param {number} fileId 文件id + * @returns {Promise} 返回一个Promise对象 + */ + deleteFile(fileId: number): Promise>; + /** + * 上传头像 + * @param {string} filePath 文件路径 + * @returns {Promise} 返回一个Promise对象 + */ + uploadAvatar(filePath: string): Promise>; + } + export const gatewayHttpClient: HttpClient; + export const baseHttpClient: HttpClient; + export const apiHttpClient: HttpClient; + export default HttpClient; +} + +declare module '@jdmini/api/injector' { + interface AppConfig { + onLaunch?: (...args: any[]) => void | Promise; + [key: string]: any; + } + interface PageConfig { + onShow?: (...args: any[]) => void | Promise; + [key: string]: any; + } + interface ComponentConfig { + methods?: { + onLoad?: (...args: any[]) => void | Promise; + onShow?: (...args: any[]) => void | Promise; + [key: string]: any; + }; + [key: string]: any; + } + interface InjectAppOptions { + gatewayUrl?: string; + baseUrl?: string; + apiUrl?: string; + } + interface InjectPageOptions { + showInterstitialAd?: boolean; + } + /** + * 注入应用配置 + * @param {Object} options - 配置选项 + * @param {string} [options.gatewayUrl] - 网关地址,默认使用CONFIG.API.GATEWAY_URL + * @param {string} [options.baseUrl] - 基础地址,默认使用CONFIG.API.BASE_URL + * @param {string} [options.apiUrl] - api地址,默认使用CONFIG.API.API_URL + * @returns {Function} 返回一个接收应用配置的函数 + */ + export function injectApp(options?: InjectAppOptions): (appConfig: AppConfig) => AppConfig; + /** + * 注入页面配置 + * @param {InjectPageOptions} options - 配置选项 + * @param {boolean} [options.showInterstitialAd] - 是否在onShow显示插屏广告,默认不显示 + * @returns {Function} 返回一个接收页面配置的函数 + */ + export function injectPage(options?: InjectPageOptions): (pageConfig?: PageConfig) => PageConfig; + /** + * 注入组件配置 + * @param {InjectPageOptions} options - 配置选项 + * @param {boolean} [options.showInterstitialAd] - 是否在onShow显示插屏广告,默认不显示 + * @returns {Function} 返回一个接收组件配置的函数 + */ + export function injectComponent(options?: InjectPageOptions): (pageConfig?: PageConfig) => ComponentConfig; + /** + * 劫持App + * @param {InjectAppOptions} options - 配置选项 + * @param {string} [options.gatewayUrl] - 网关地址,默认使用CONFIG.API.GATEWAY_URL + * @param {string} [options.baseUrl] - 基础地址,默认使用CONFIG.API.BASE_URL + * @param {string} [options.apiUrl] - api地址,默认使用CONFIG.API.API_URL + * @returns {void} + */ + export const hijackApp: (options?: InjectAppOptions) => void; + /** + * 劫持所有Page + * @param {InjectPageOptions} options - 配置选项 + * @param {boolean} [options.showInterstitialAd] - 是否在onShow显示插屏广告,默认不显示 + * @returns {void} + */ + export const hijackAllPage: (options?: InjectPageOptions) => void; + export {}; +} + +declare module '@jdmini/api/adManager' { + import { AdData, LinkData, TopData } from '@jdmini/api/types'; + type Ads = Partial>; + class AdManager { + /** + * 广告数据 + */ + ads: Ads; + /** + * 友情链接数据 + */ + link: LinkData[]; + /** + * 友情链接顶部广告数据 + */ + top: TopData | null; + constructor(); + /** + * 确保广告数据就绪 + * @param {Function} callback - 回调函数 + * @returns {void} + */ + onDataReady: (callback: (...args: any[]) => void) => void; + /** + * 等待广告数据加载完成 + * @returns {Promise} + */ + waitAdData: () => Promise; + /** + * 初始化广告数据 + * @returns {void} + */ + init: () => void; + /** + * 创建并展示插屏广告 + * @returns {Promise} + */ + createAndShowInterstitialAd: () => Promise; + /** + * 创建并展示激励视频广告 + * @param {any} context - 页面上下文 + * @param {string} [pageId] - 页面ID + * @returns {Promise} 是否完成播放 + */ + createAndShowRewardedVideoAd: (context: any, pageId?: string) => Promise; + } + const _default: AdManager; + export default _default; +} + +declare module '@jdmini/api/types' { + export interface Config { + API: { + GATEWAY_URL: string; + BASE_URL: string; + API_URL: string; + }; + APP: { + APP_ID: number; + LOGIN_MAX_RETRY: number; + }; + HTTP: { + TIMEOUT: number; + }; + DATA: { + PAGE_ID: string; + }; + STORAGE_KEYS: { + TOKEN: string; + USER_INFO: string; + SPA_DATA: string; + LINK_DATA: string; + TOP_DATA: string; + }; + EVENT_KEYS: { + LOGIN_SUCCESS: string; + AD_DATA_READY: string; + REWARDED_VIDEO_AD_CLOSE: string; + }; + } + export interface HttpClientOptions { + baseURL: string; + timeout?: number; + } + export interface RequestOptions { + headers?: Record; + [key: string]: any; + } + export interface LoginData { + appId: number; + code: string; + brand: string; + model: string; + platform: string; + } + export interface ApiResponse { + code: number; + message?: string; + data?: T; + } + export interface UserInfo { + token: string; + user: { + id: number; + name: string; + avatar: string; + openId: string; + }; + } + export interface EchoData { + isPublished: boolean; + spads: AdData[]; + links: LinkData[]; + top: TopData; + version: number; + } + export interface AdData { + id: number; + status: number; + appPage: 'banner' | 'custom' | 'video' | 'interstitial' | 'rewarded'; + ads: { + id: number; + type: number; + adId: number; + adUnitId: string; + }[]; + } + export interface LinkData { + appId: string; + appLogo: string; + linkName: string; + linkPage: string; + } + export interface TopData { + appId: string; + appLogo: string; + linkName: string; + appDsc: string; + } +} + diff --git a/miniprogram_npm/@jdmini/api/index.js b/miniprogram_npm/@jdmini/api/index.js new file mode 100644 index 0000000..fc11843 --- /dev/null +++ b/miniprogram_npm/@jdmini/api/index.js @@ -0,0 +1,4 @@ +/*! + * @jdmini/api v1.0.10 + * + */(()=>{"use strict";var t={616:function(t,e,n){var r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,a){function i(t){try{u(r.next(t))}catch(t){a(t)}}function s(t){try{u(r.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=s(0),i.throw=s(1),i.return=s(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(u){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,r=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]0?e.ads[0].adUnitId:"",t}),{}));var n=wx.getStorageSync(i.default.STORAGE_KEYS.LINK_DATA);n&&(t.link=n);var r=wx.getStorageSync(i.default.STORAGE_KEYS.TOP_DATA);r&&r.appDsc.length>40&&(r.appDsc=r.appDsc.substring(0,40)+"...",t.top=r),t.adDataReady=!0,s.default.emit(i.default.EVENT_KEYS.AD_DATA_READY)},this.createAndShowInterstitialAd=function(){return r(t,void 0,void 0,(function(){var t;return o(this,(function(e){switch(e.label){case 0:return this.interstitialAd&&this.interstitialAd.destroy(),[4,this.waitAdData()];case 1:e.sent(),e.label=2;case 2:return e.trys.push([2,5,,6]),[4,this.createInterstitialAd()];case 3:return e.sent(),[4,this.showInterstitialAd()];case 4:return e.sent(),[3,6];case 5:return t=e.sent(),console.error("创建插屏广告失败:",t),[3,6];case 6:return[2]}}))}))},this.createInterstitialAd=function(){return r(t,void 0,void 0,(function(){var t=this;return o(this,(function(e){return[2,new Promise((function(e,n){t.ads.interstitial?(t.interstitialAd=wx.createInterstitialAd({adUnitId:t.ads.interstitial}),t.interstitialAd.onLoad((function(){console.log("插屏广告加载成功"),e()})),t.interstitialAd.onError((function(t){console.error(t),n(new Error("插屏广告加载失败"))})),t.interstitialAd.onClose((function(){console.log("插屏广告关闭")}))):n(new Error("插屏广告未配置"))}))]}))}))},this.showInterstitialAd=function(){return r(t,void 0,void 0,(function(){var t,e;return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),console.log("开始展示插屏广告"),[4,null===(e=this.interstitialAd)||void 0===e?void 0:e.show()];case 1:return[2,n.sent()];case 2:return t=n.sent(),console.error("插屏广告展示失败:",t),[3,3];case 3:return[2]}}))}))},this.createAndShowRewardedVideoAd=function(e,n){return r(t,void 0,void 0,(function(){var t,r,a;return o(this,(function(o){switch(o.label){case 0:return[4,this.waitAdData()];case 1:o.sent(),t=n||(null===(a=null==e?void 0:e.data)||void 0===a?void 0:a[i.default.DATA.PAGE_ID]),o.label=2;case 2:if(o.trys.push([2,6,,7]),!t)throw new Error("未指定pageId或者context");return this.rewardedVideoAds[t]?[3,4]:[4,this.createRewardedVideoAd(t)];case 3:o.sent(),o.label=4;case 4:return[4,this.showRewardedVideoAd(t)];case 5:return o.sent(),[3,7];case 6:return r=o.sent(),console.error("创建激励视频广告失败:",r),[3,7];case 7:return[2,new Promise((function(e){s.default.on(i.default.EVENT_KEYS.REWARDED_VIDEO_AD_CLOSE,(function(n,r){n===t&&e(r)}))}))]}}))}))},this.createRewardedVideoAd=function(e){return r(t,void 0,void 0,(function(){var t=this;return o(this,(function(n){return[2,new Promise((function(n,r){t.ads.rewarded?(t.rewardedVideoAds[e]=wx.createRewardedVideoAd({adUnitId:t.ads.rewarded}),t.rewardedVideoAds[e].onLoad((function(){console.log("激励视频广告加载成功"),n()})),t.rewardedVideoAds[e].onError((function(t){console.error(t),r(new Error("激励视频广告加载失败"))})),t.rewardedVideoAds[e].onClose((function(t){s.default.emit(i.default.EVENT_KEYS.REWARDED_VIDEO_AD_CLOSE,e,t.isEnded),console.log("激励视频广告关闭")}))):r(new Error("激励视频广告未配置"))}))]}))}))},this.showRewardedVideoAd=function(e){return r(t,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),console.log("开始展示激励视频广告"),[4,null===(n=this.rewardedVideoAds[e])||void 0===n?void 0:n.show()];case 1:return[2,r.sent()];case 2:return t=r.sent(),console.error("激励视频广告展示失败:",t),[3,3];case 3:return[2]}}))}))}};e.default=new u},859:function(t,e,n){var r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,a){function i(t){try{u(r.next(t))}catch(t){a(t)}}function s(t){try{u(r.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=s(0),i.throw=s(1),i.return=s(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(u){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,r=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]s.default.APP.LOGIN_MAX_RETRY)throw wx.showToast({title:"网络异常,无法初始化",icon:"none",duration:2e3}),new Error("网络异常,无法初始化");o.label=1;case 1:return o.trys.push([1,7,,9]),t=wx.getDeviceInfo(),[4,wx.login()];case 2:return e=o.sent().code,n={appId:s.default.APP.APP_ID,code:e,brand:t.brand,model:t.model,platform:t.platform},[4,i.gatewayHttpClient.request("/wx/v1/api/login","POST",n)];case 3:return 200===(r=o.sent()).code&&r.data?(wx.setStorageSync(s.default.STORAGE_KEYS.TOKEN,r.data.token),wx.setStorageSync(s.default.STORAGE_KEYS.USER_INFO,r.data.user),l=0,u.default.emit(s.default.EVENT_KEYS.LOGIN_SUCCESS),[3,6]):[3,4];case 4:return l++,[4,h()];case 5:o.sent(),o.label=6;case 6:return[3,9];case 7:return o.sent(),l++,[4,h()];case 8:return o.sent(),[3,9];case 9:return[2]}}))}))}function p(){return r(this,void 0,void 0,(function(){var t;return o(this,(function(n){switch(n.label){case 0:return wx.removeStorageSync(s.default.STORAGE_KEYS.SPA_DATA),wx.removeStorageSync(s.default.STORAGE_KEYS.LINK_DATA),wx.removeStorageSync(s.default.STORAGE_KEYS.TOP_DATA),(0,e.checkTokenValid)()?[4,i.gatewayHttpClient.request("/wx/v1/api/echo","GET")]:[2];case 1:return 200===(t=n.sent()).code&&t.data?(t.data.spads&&wx.setStorageSync(s.default.STORAGE_KEYS.SPA_DATA,t.data.spads),t.data.links&&wx.setStorageSync(s.default.STORAGE_KEYS.LINK_DATA,t.data.links),t.data.top&&wx.setStorageSync(s.default.STORAGE_KEYS.TOP_DATA,t.data.top),[3,5]):[3,2];case 2:return 401!==t.code?[3,5]:[4,h()];case 3:return n.sent(),[4,p()];case 4:n.sent(),n.label=5;case 5:return[2]}}))}))}function w(){return r(this,void 0,void 0,(function(){var t;return o(this,(function(e){switch(e.label){case 0:return e.trys.push([0,5,,6]),[4,i.gatewayHttpClient.request("/wx/v1/api/visit","POST")];case 1:return 401!==e.sent().code?[3,4]:[4,h()];case 2:return e.sent(),[4,w()];case 3:e.sent(),e.label=4;case 4:return[3,6];case 5:return t=e.sent(),console.error("访问统计失败:",t),[3,6];case 6:return[2]}}))}))}e.checkTokenValid=function(){var t=wx.getStorageSync(s.default.STORAGE_KEYS.TOKEN);return!(!t||t.length<32)}},28:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0});var n={API:{GATEWAY_URL:"https://ca.miniappapi.com",BASE_URL:"https://app.jd027.com/v1/api",API_URL:"https://cp.miniappapi.com"},APP:{APP_ID:wx.getExtConfigSync().appId||313,LOGIN_MAX_RETRY:2},HTTP:{TIMEOUT:5e3},DATA:{PAGE_ID:"jdwx-page-id"},STORAGE_KEYS:{TOKEN:"jdwx-token",USER_INFO:"jdwx-userinfo",SPA_DATA:"jdwx-spadata",LINK_DATA:"jdwx-linkdata",TOP_DATA:"jdwx-topdata"},EVENT_KEYS:{LOGIN_SUCCESS:"jdwx-login-success",AD_DATA_READY:"jdwx-ad-data-ready",REWARDED_VIDEO_AD_CLOSE:"jdwx-rewarded-video-ad-close"}};e.default=n},144:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(){this.events={}}return t.prototype.on=function(t,e){if("string"!=typeof t)throw new TypeError("eventName must be a string");if("function"!=typeof e)throw new TypeError("callback must be a function");return this.events[t]||(this.events[t]=[]),this.events[t].push(e),this},t.prototype.emit=function(t){for(var e=[],n=1;n0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]=200&&d.statusCode<300)return[2,d.data];if(401===d.statusCode)return[2,{code:401,message:"未授权"}];throw new Error(d.data.message||"请求失败");case 4:throw f=a.sent(),console.error("网络错误:",f),wx.showToast({title:f instanceof Error?f.message:"网络错误",icon:"none",duration:2e3}),f;case 5:return[2]}}))}))},t.prototype.uploadFile=function(t){return o(this,arguments,void 0,(function(t,e,n){var r,o,i,u;return void 0===e&&(e={}),void 0===n&&(n="file"),a(this,(function(a){r=this.baseURL===s.default.API.GATEWAY_URL,o=wx.getStorageSync(s.default.STORAGE_KEYS.TOKEN),i="avatar"===n?"/avatar":"/file/new",u=this.joinURL(this.baseURL,"".concat(r?"/wx/v1/api":"").concat(i));try{return[2,new Promise((function(n,r){wx.uploadFile({url:u,name:"file",filePath:t,formData:e,header:{"Content-Type":"application/x-www-form-urlencoded",Authorization:o},success:function(t){if(t.statusCode>=200&&t.statusCode<300)n(JSON.parse(t.data));else{if(401!==t.statusCode)throw new Error(t.data.message||"上传失败");n(JSON.parse(t.data))}},fail:function(){throw new Error("网络错误")}}).onProgressUpdate((function(t){console.log("上传进度",t.progress),console.log("已经上传的数据长度",t.totalBytesSent),console.log("预期需要上传的数据总长度",t.totalBytesExpectedToSend)}))}))]}catch(t){throw console.error("上传失败:",t),wx.showToast({title:t instanceof Error?t.message:"上传失败",icon:"none",duration:2e3}),t}return[2]}))}))},t.prototype.upload=function(t,e){return o(this,arguments,void 0,(function(t,e,n){var r,o,i;return void 0===n&&(n={}),a(this,(function(a){r=this.baseURL===s.default.API.GATEWAY_URL,o=wx.getStorageSync(s.default.STORAGE_KEYS.TOKEN),i=this.joinURL(this.baseURL,"".concat(r?"/wx/v1/api":"").concat(t));try{return[2,new Promise((function(t,r){wx.uploadFile({url:i,name:"file",filePath:e,formData:n,header:{"Content-Type":"application/x-www-form-urlencoded",Authorization:o},success:function(e){if(e.statusCode>=200&&e.statusCode<300)t(JSON.parse(e.data));else{if(401!==e.statusCode)throw new Error(e.data.message||"上传失败");t(JSON.parse(e.data))}},fail:function(){throw new Error("网络错误")}}).onProgressUpdate((function(t){console.log("上传进度",t.progress),console.log("已经上传的数据长度",t.totalBytesSent),console.log("预期需要上传的数据总长度",t.totalBytesExpectedToSend)}))}))]}catch(t){throw console.error("上传失败:",t),wx.showToast({title:t instanceof Error?t.message:"上传失败",icon:"none",duration:2e3}),t}return[2]}))}))},t.prototype.deleteFile=function(t){return o(this,void 0,void 0,(function(){var e;return a(this,(function(n){return e=this.baseURL===s.default.API.GATEWAY_URL,[2,this.request("".concat(e?"/wx/v1/api":"","/file/del"),"GET",{id:t})]}))}))},t.prototype.uploadAvatar=function(t){return o(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.uploadFile(t,{},"avatar")]}))}))},t}();e.gatewayHttpClient=new u({baseURL:s.default.API.GATEWAY_URL,timeout:s.default.HTTP.TIMEOUT}),e.baseHttpClient=new u({baseURL:s.default.API.BASE_URL,timeout:s.default.HTTP.TIMEOUT}),e.apiHttpClient=new u({baseURL:s.default.API.API_URL,timeout:s.default.HTTP.TIMEOUT}),e.default=u},156:function(t,e,n){var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),a=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)"default"!==n&&Object.prototype.hasOwnProperty.call(t,n)&&r(e,t,n);return o(e,t),e},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.adManager=e.HttpClient=e.apiHttpClient=e.baseHttpClient=e.gatewayHttpClient=e.hijackAllPage=e.hijackApp=e.injectComponent=e.injectPage=e.injectApp=e.waitLogin=e.onLoginReady=void 0;var s=n(859);Object.defineProperty(e,"onLoginReady",{enumerable:!0,get:function(){return s.onLoginReady}}),Object.defineProperty(e,"waitLogin",{enumerable:!0,get:function(){return s.waitLogin}});var u=a(n(161));e.HttpClient=u.default,Object.defineProperty(e,"gatewayHttpClient",{enumerable:!0,get:function(){return u.gatewayHttpClient}}),Object.defineProperty(e,"baseHttpClient",{enumerable:!0,get:function(){return u.baseHttpClient}}),Object.defineProperty(e,"apiHttpClient",{enumerable:!0,get:function(){return u.apiHttpClient}});var c=n(718);Object.defineProperty(e,"injectApp",{enumerable:!0,get:function(){return c.injectApp}}),Object.defineProperty(e,"injectPage",{enumerable:!0,get:function(){return c.injectPage}}),Object.defineProperty(e,"injectComponent",{enumerable:!0,get:function(){return c.injectComponent}}),Object.defineProperty(e,"hijackApp",{enumerable:!0,get:function(){return c.hijackApp}}),Object.defineProperty(e,"hijackAllPage",{enumerable:!0,get:function(){return c.hijackAllPage}});var l=i(n(616));e.adManager=l.default},718:function(t,e,n){var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;ntYL|T)GRIfA+a?~DfhW-E^|pqGM7?rA;~3FgrXyt zB9zu>bam-iB$B2?OfD%karB($Ip_cLJfHXbKJWYg_f28YZ4~9zga`M&@4ARg(+bb1(t`477g<5>-x(1OV88Eoi}vDv}hr2Rr#;9<6k{o*CVZ(+Us# z&7+tQYiP7ns7?yHS7*#ZH>$7>@@w@&BYg!X7+bgjpXNCu2KtJXo5(fH)41> z&7wvzvVkY|+nh~jO(yXg{bIX=;o}RITkMwxa0dh4oTAr2x^oKC65flQ#oE$C%Fx%=He1A*c=hr?eOUL#AEhZT%N8lXd@9`N>%JEvlb#PTG42uC z@mhJJ`8~51aVFnW8I>JTk!FSUh6gbtTvfGckGQhZfG-_|hEuOUNJrn-lakxQzRzqN zEG`HLKcvn3=C6BO9ZYk#G&COl&>F%%RuaE!U&{uN0vU2JLA}#0KA@C%VChhF`-&q9 z>B^cdFPKnh>gH3w*GKcIx0VuJ>2dnYz!sj|$d8*0h}@HM7DZ< zom_lPRBTMw!qG{%*{K7xUg|i9XDej_jIDw2Cn z=lX45DekndIx{>ahvQjxF7Omlr>;$shDLH3R`}=v{vHRqI^Lj8ZM8yiPl2vQ!P3Kk z0TherS~QvuvehIF!vj41Rb(C-ltgS5H7;{l4FMsgp{&}*6>RMvP)1e1Hz~Ba%XpiT zO>X+dbt7Btw58YV%Qt;K$uS?wNMc5qiGHNJ(o3aXUiZ8FlJd~r+#7%LY8?2)^FQOa z)eDhHCO&K855g?ZzE5x6;evuki~EtNA=Q}v>U$QPuy zLzNefra8UqbMhOjl&=h%)D!h@hLc?Am*?0oQLr6im7;LWv~2#T;pu$PE_^DK4XFbEV;K$#8+LHdIXAB^KVWM`2dgc;PW}x9 CY1HNb literal 0 HcmV?d00001 diff --git a/miniprogram_npm/@jdmini/components/icons/home.png b/miniprogram_npm/@jdmini/components/icons/home.png new file mode 100644 index 0000000000000000000000000000000000000000..11016daa08d27f848fe96b9b380b9c335fb72a3e GIT binary patch literal 1070 zcmeAS@N?(olHy`uVBq!ia0vp^fgsGm1|(PYdzk?#&H|6fVg?31We{epSZZI!z`*># z)5S5QV$R#yXS@9ZB@Wb=+a+}bWvOU#KT-Bwlwz9JXdz3F1k+6@b*u>Oqr!9FE& z2JddkrI88Fy;ocWjk&#?vW%oAJ&c-ToqFufcf0TRp5G~sx7}~Gx77Oi&htON-m9Mf zeeZLZLYd?#i&aaQ{xhouGEQF6;2Cm2B}?FVVH)=lu?J=b^J?-qC$^mM_f?f+UDo(x z{Wn>Qz*42N8ij%db9a7vww-ao;#DoPd>=(6OgYAsemmpRee1I-8>N3V_&mt@&GY8- z+z4Zjo`%f_cz&{++cq<$=85*fUEVQ#cNWgr^D~zt;-T_MEAKZe#BoDgc1rfQ%hu{e(Hs_&vDHJy$3J@q~Q`GCG7&sL)qenQt7 z`cKaLBT}HE942p|+3{5*BHZlbE{`{EVf*&5m~khsW1q*FG)=GB$-Ae)_{6E{(FZQg z`DooB-E?DrqqoSP&8kaWGJk#&R^P?*_W=LFom^8L7pjyg>c^Ko=bd+m??LZ_Ir)uq zE1B9SL@cSfc*t8aWa*JjPrJolr3QownVuHcy>e=SmP*;;_7ndC{14crx>Mt&M`4?oFk3NKl6#C^y8Q)kbZ(h-qQgF5d%% zCGk7_nam68%R;<3I;$IYA4uZg=+DGnpcbf^A-^^6{>v$?h#r(zpvld(r*4w#a@{#NV%`$&?uk3W$JxA1_6KWA65osj| z5fl#U+#l4pJxf(+#+J$@XRG;wI_C%V<%{;Mx6WLxX6MD`t?IW#<~{Q_uH-9I|1Q~I zB|DvE!oG4jwsX1#dqlrqs%5BXiq?sn5|`lI_pkTYH|}HGADI1>QT}_{M8{Lb>*j9r z?ZG0h2P7E9xLH$pZpd-7cWb*JRN{3U;@HKwk}D~EC2 zm4r!lw?+T$a;o*1^Hkv7Nztl9v)-B(6#R2hty{uBt(9;4j~CK@kB9p9lQ> YvrilkX{>z)EC3ihUHx3vIVCg!0C%_Ik^lez literal 0 HcmV?d00001 diff --git a/miniprogram_npm/@jdmini/components/icons/link-active.png b/miniprogram_npm/@jdmini/components/icons/link-active.png new file mode 100644 index 0000000000000000000000000000000000000000..433ec7bf24d3f2a0367fcaf00069d9c7ca3105ed GIT binary patch literal 2796 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 { + this.setData({ ads: adManager.ads }) + }) + }, + }, + methods: { + } +}) diff --git a/miniprogram_npm/@jdmini/components/jdwx-ad/index.json b/miniprogram_npm/@jdmini/components/jdwx-ad/index.json new file mode 100644 index 0000000..32640e0 --- /dev/null +++ b/miniprogram_npm/@jdmini/components/jdwx-ad/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} \ No newline at end of file diff --git a/miniprogram_npm/@jdmini/components/jdwx-ad/index.wxml b/miniprogram_npm/@jdmini/components/jdwx-ad/index.wxml new file mode 100644 index 0000000..1b24adf --- /dev/null +++ b/miniprogram_npm/@jdmini/components/jdwx-ad/index.wxml @@ -0,0 +1,5 @@ + + + + + diff --git a/miniprogram_npm/@jdmini/components/jdwx-ad/index.wxss b/miniprogram_npm/@jdmini/components/jdwx-ad/index.wxss new file mode 100644 index 0000000..de627db --- /dev/null +++ b/miniprogram_npm/@jdmini/components/jdwx-ad/index.wxss @@ -0,0 +1,7 @@ +.jdwx-ad-component { + padding: 10rpx; +} + +.jdwx-ad-item { + bottom: 10rpx; +} \ No newline at end of file diff --git a/miniprogram_npm/@jdmini/components/jdwx-link/index.js b/miniprogram_npm/@jdmini/components/jdwx-link/index.js new file mode 100644 index 0000000..887d749 --- /dev/null +++ b/miniprogram_npm/@jdmini/components/jdwx-link/index.js @@ -0,0 +1,37 @@ +import { adManager } from '@jdmini/api' + +Component({ + properties: { + }, + data: { + link: [], + top: {}, + }, + pageLifetimes: { + show: function () { + adManager.onDataReady(() => { + this.setData({ + link: adManager.link, + top: adManager.top + }) + }) + }, + }, + methods: { + gotopLink: function () { + wx.vibrateShort() + wx.openEmbeddedMiniProgram({ + appId: this.data.top.appId, + path: this.data.top.linkPage + }); + }, + goLink: function (e) { + let index = e.currentTarget.id + wx.vibrateShort() + wx.openEmbeddedMiniProgram({ + appId: this.data.link[index].appId, + path: this.data.link[index].linkPage + }); + }, + } +}) diff --git a/miniprogram_npm/@jdmini/components/jdwx-link/index.json b/miniprogram_npm/@jdmini/components/jdwx-link/index.json new file mode 100644 index 0000000..fba482a --- /dev/null +++ b/miniprogram_npm/@jdmini/components/jdwx-link/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} \ No newline at end of file diff --git a/miniprogram_npm/@jdmini/components/jdwx-link/index.wxml b/miniprogram_npm/@jdmini/components/jdwx-link/index.wxml new file mode 100644 index 0000000..30ff009 --- /dev/null +++ b/miniprogram_npm/@jdmini/components/jdwx-link/index.wxml @@ -0,0 +1,11 @@ + + + + {{top.linkName}} + {{top.appDsc}} + + + + {{item.linkName}} + + \ No newline at end of file diff --git a/miniprogram_npm/@jdmini/components/jdwx-link/index.wxss b/miniprogram_npm/@jdmini/components/jdwx-link/index.wxss new file mode 100644 index 0000000..111b9f1 --- /dev/null +++ b/miniprogram_npm/@jdmini/components/jdwx-link/index.wxss @@ -0,0 +1,63 @@ +/* 页面容器 */ +.jdwx-link-component { + /* background-image: linear-gradient(to right, #4F9863, #4F9863); */ + background-attachment: fixed; + background-size: cover; /* 确保背景图像覆盖整个元素 */ + /* height: 100vh; */ + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + padding: 20rpx; + box-sizing: border-box; + overflow: auto; /* 允许内容滚动 */ +} + +/* 列表项样式 */ +.jdwx-applink-list { + display: flex; + align-items: center; + width: 95%; + /* 假设我们想要每个view的高度约为屏幕高度的1/8 */ + /* 使用小程序的wx.getSystemInfo API动态计算并设置这个值会更准确 */ + height: calc((100vh - 40rpx) / 10); /* 减去容器padding的影响 */ + padding: 20rpx; + background-color: rgba(248, 250, 252, 1); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + border-radius: 8rpx; + margin-bottom: 10rpx; +} +.jdwx-applink-top { + display: flex; + align-items: center; + width: 95%; + /* 假设我们想要每个view的高度约为屏幕高度的1/8 */ + /* 使用小程序的wx.getSystemInfo API动态计算并设置这个值会更准确 */ + height: calc((100vh - 40rpx) / 6); /* 减去容器padding的影响 */ + padding: 20rpx; + border-radius: 8rpx; + margin-bottom: 30rpx; + background-color: rgba(248, 250, 252, 1); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} +.jdwx-applink-top-linkname{ + display: flex; + font-size: 36rpx; + color: rgb(39, 37, 37); + padding-bottom: 10rpx; +} +/* 图标样式 */ +.jdwx-applink-icon { + width: 120rpx; + height: 120rpx; + border-radius: 50%; + margin-right: 50rpx; + margin-left: 30rpx; +} + +/* 文本样式 */ +.jdwx-applink-text { + flex: 1; + font-size: 32rpx; + color: rgb(39, 37, 37); +} \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..e3fe0ce --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,20 @@ +{ + "name": "template", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@jdmini/api": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/@jdmini/api/-/api-1.0.10.tgz", + "integrity": "sha512-bVFU0awuY033mUT4QqArrYbrnPkBaBFKHoqCMHTVnRCk4b6gTs+cCGDH8uyf2t8ybCgWITKxaaH4Vjzyq8VF8g==" + }, + "node_modules/@jdmini/components": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@jdmini/components/-/components-1.0.6.tgz", + "integrity": "sha512-ndva1nlZ1QJqDVgHfB0GPxMGmXsZ7SbWjUkRm/WoQIkow75fFbaQCW/xhtQQ+bPbJLjXmCg2p2356klsLLib8A==", + "peerDependencies": { + "@jdmini/api": ">=1.0.8" + } + } + } +} diff --git a/node_modules/@jdmini/api/README.md b/node_modules/@jdmini/api/README.md new file mode 100644 index 0000000..a82f0ec --- /dev/null +++ b/node_modules/@jdmini/api/README.md @@ -0,0 +1,252 @@ +## 安装/更新 + +1、终端使用命令安装 npm 包 + +```bash +npm install --save @jdmini/api@latest +``` + +> ```bash +> npm install --save @jdmini/components@latest +> ``` + +2、在小程序开发者工具中:菜单选择工具 -> 构建 npm + +## 使用 + +```js +import { + onLoginReady, + waitLogin, + + injectApp, + injectPage, + injectComponent, + hijackApp, + hijackAllPage, + + gatewayHttpClient, + baseHttpClient, + apiHttpClient, + HttpClient, + + adManager, +} from '@jdmini/api' +``` + +### `waitLogin`/`onLoginReady` - 确保登录完成 + +- 同步的写法 + +```js +async function onLoad() { + await waitLogin() + // 此处代码将在已登录或登陆完成后执行。请求将自动携带Token + await gatewayHttpClient.request('/xxx', 'GET', {}) +} +``` + +- 异步的写法 + +```js +function onLoad() { + onLoginReady(() => { + // 此处代码将在已登录或登陆完成后执行。请求将自动携带Token + gatewayHttpClient.request('/xxx', 'GET', {}) + }) +} +``` + +### `injectApp` - 向App注入基础代码 + +- 注入之后实现自动登录、广告初始化等功能 + +```js +// app.js +App(injectApp()({ + // 业务代码 + onLaunch() { + + } +})) +``` + +### `injectPage` - 向Page注入基础代码 + +- 注入之后实现页面自动统计、自动展示插屏广告以及激励视频广告的调用支持 +- 参数: + - showInterstitialAd: 是否自动展示插屏广告 + +```js +// pages/xxx/xxx.js +Page(injectPage({ + showInterstitialAd: true +})({ + // 业务代码 + onLoad() { + + } +})) +``` + +### `injectComponent` - 向Component注入基础代码 + +- 适用于使用Component构造页面的场景 +- 注入之后实现页面自动统计、自动展示插屏广告以及激励视频广告的调用支持 +- 参数: + - showInterstitialAd: 是否自动展示插屏广告 + +```js +// pages/xxx/xxx.js +Component(injectComponent({ + showInterstitialAd: true +})({ + // 业务代码 + methods: { + onLoad() { + + } + } +})) +``` + +### `hijackApp` - 劫持全局App方法,注入基础代码 + +- 在不方便使用injectApp时使用(如解包后代码复杂,难以修改App调用) +- 此方法会修改全局App方法,存在未知风险,使用时请进行完整测试 +- 不可与injectApp同时使用 + +```js +// app.js +hijackApp() +``` + +### `hijackAllPage` - 劫持全局Page方法,注入基础代码 + +- 在不方便使用injectPage/injectComponent时使用(如解包后代码复杂,难以修改Page/Component调用) +- 此方法会修改全局Page方法,并影响所有的页面,存在未知风险,使用时请进行完整测试 +- 参数同injectPage/injectComponent方法,不可与这些方法同时使用 + +```js +// app.js +hijackAllPage({ + showInterstitialAd: true +}) +``` + +### `gatewayHttpClient` - 网关API调用封装 + +- 同步的写法 + +```js +async function onLoad() { + try { + // 网关请求。参数:路径、方法、数据、其他选项(如headers、responseType) + const data = await gatewayHttpClient.request(path, method, data,options) + + // 头像上传。参数:文件路径 + const data = await gatewayHttpClient.uploadAvatar(filePath) + + // 文件上传。参数:文件路径、数据 + const data = await gatewayHttpClient.uploadFile(filePath, data) + + // 文件删除。参数:文件ID + const data = await gatewayHttpClient.deleteFile(fileId) + } catch(err) { + // 响应HTTP状态码非200时自动showToast并抛出异常 + } +} +``` + +- 所有方法均支持异步的写法 + +```js +function onLoad() { + gatewayHttpClient.request('/xxx') + .then(data => { + console.log(data) + }) + .catch(err => {}) +} +``` + +### `baseHttpClient`/`apiHttpClient` - 为老版本兼容保留,不推荐使用 + +### `HttpClient` - API底层类,用于封装自定义请求 + +- 示例:封装一个百度的请求客户端,并调用百度搜索 + +```js +const baiduHttpClient = new HttpClient({ + baseURL: 'https://www.baidu.com', + timeout: 5000, +}); + +baiduHttpClient.request('/s', 'GET', { wd: '测试' }, { responseType: 'text' }) + .then(data => console.log(data)) +``` + +### `adManager` - 广告管理器 + +- 确保广告数据加载完成,支持同步/异步的写法 + +```js +// 同步的写法 +async function onLoad() { + await adManager.waitAdData() + // 此处代码将在广告数据加载完成后执行 + await adManager.createAndShowInterstitialAd() +} + +// 异步的写法 +function onLoad () { + adManager.onDataReady(() => { + // 此处代码将在广告数据加载完成后执行 + adManager.createAndShowInterstitialAd() + }) +} +``` + +- 广告数据 + +```js +// 格式化之后的广告数据对象,如{banner: "adunit-f7709f349de05edc", custom: "adunit-34c76b0c3e4a6ed0", ...} +const ads = adManager.ads + +// 友情链接顶部广告数据 +const top = adManager.top + +// 友情链接数据 +const link = adManager.link +``` + +- 创建并展示插屏广告 + +```js +function onLoad() { + adManager.createAndShowInterstitialAd() +} +``` + +- 创建并展示激励视频广告 + - 传入当前页面的上下文this,返回用户是否已看完广告 + - 由于微信的底层限制,需要先在调用的页面上进行injectPage注入,且该方法必须放在用户的点击事件里调用 + - 使用示例可参考[jdwx-demo](https://code.miniappapi.com/wx/jdwx-demo) + +```js +// 同步的写法 +page({ + async handleClick() { + const isEnded = await adManager.createAndShowRewardedVideoAd(this) + } +}) + +// 异步的写法 +page({ + handleClick() { + adManager.createAndShowRewardedVideoAd(this).then((isEnded) => { + + }) + } +}) +``` diff --git a/node_modules/@jdmini/api/miniprogram_dist/index.d.ts b/node_modules/@jdmini/api/miniprogram_dist/index.d.ts new file mode 100644 index 0000000..e06e58d --- /dev/null +++ b/node_modules/@jdmini/api/miniprogram_dist/index.d.ts @@ -0,0 +1,295 @@ +// Generated by dts-bundle v0.7.3 + +declare module '@jdmini/api' { + import { onLoginReady, waitLogin } from '@jdmini/api/app'; + import HttpClient, { gatewayHttpClient, baseHttpClient, apiHttpClient } from '@jdmini/api/httpClient'; + import { injectApp, injectPage, injectComponent, hijackApp, hijackAllPage } from '@jdmini/api/injector'; + import adManager from '@jdmini/api/adManager'; + export { onLoginReady, waitLogin, injectApp, injectPage, injectComponent, hijackApp, hijackAllPage, gatewayHttpClient, baseHttpClient, apiHttpClient, HttpClient, adManager, }; +} + +declare module '@jdmini/api/app' { + export interface AppOptions { + gatewayUrl?: string; + baseUrl?: string; + apiUrl?: string; + } + export interface PageOptions { + showInterstitialAd?: boolean; + } + export function initApp(options?: AppOptions): Promise; + export function showPage(options: PageOptions | undefined, pageId: string): Promise; + export const checkTokenValid: () => boolean; + /** + * 确保登录完成 + * @param {Function} callback - 回调函数 + * @returns {void} + */ + export function onLoginReady(callback: (...args: any[]) => void): void; + /** + * 等待登录完成 + * @returns {Promise} + */ + export function waitLogin(): Promise; + export function login(): Promise; + export function fetchEchoData(): Promise; + export function trackVisit(): Promise; +} + +declare module '@jdmini/api/httpClient' { + import { HttpClientOptions, RequestOptions, ApiResponse } from '@jdmini/api/types'; + class HttpClient { + constructor({ baseURL, timeout }: HttpClientOptions); + setBaseURL(baseURL: string): void; + /** + * 请求 + * @param {string} path 路径 + * @param {string} method 方法, 默认GET + * @param {Object} data 数据, 默认{} + * @param {Object} options 传入wx.request的其他配置, 默认{} + * @returns {Promise} 返回一个Promise对象 + */ + request(path: string, method?: WechatMiniprogram.RequestOption['method'], data?: Record, options?: RequestOptions): Promise>; + /** + * 上传文件 + * @param {string} filePath 文件路径 + * @param {Object} data 数据, 默认{} + * @param {'avatar' | 'file'} type 类型, 默认'file' + * @returns {Promise} 返回一个Promise对象 + */ + uploadFile(filePath: string, data?: Record, type?: 'avatar' | 'file'): Promise>; + /** + * 上传文件 + * @param {string} filePath 文件路径 + * @param {Object} data 数据, 默认{} + * @param {'avatar' | 'file'} type 类型, 默认'file' + * @returns {Promise} 返回一个Promise对象 + */ + upload(path: string, filePath: string, data?: Record): Promise>; + /** + * 删除文件 + * @param {number} fileId 文件id + * @returns {Promise} 返回一个Promise对象 + */ + deleteFile(fileId: number): Promise>; + /** + * 上传头像 + * @param {string} filePath 文件路径 + * @returns {Promise} 返回一个Promise对象 + */ + uploadAvatar(filePath: string): Promise>; + } + export const gatewayHttpClient: HttpClient; + export const baseHttpClient: HttpClient; + export const apiHttpClient: HttpClient; + export default HttpClient; +} + +declare module '@jdmini/api/injector' { + interface AppConfig { + onLaunch?: (...args: any[]) => void | Promise; + [key: string]: any; + } + interface PageConfig { + onShow?: (...args: any[]) => void | Promise; + [key: string]: any; + } + interface ComponentConfig { + methods?: { + onLoad?: (...args: any[]) => void | Promise; + onShow?: (...args: any[]) => void | Promise; + [key: string]: any; + }; + [key: string]: any; + } + interface InjectAppOptions { + gatewayUrl?: string; + baseUrl?: string; + apiUrl?: string; + } + interface InjectPageOptions { + showInterstitialAd?: boolean; + } + /** + * 注入应用配置 + * @param {Object} options - 配置选项 + * @param {string} [options.gatewayUrl] - 网关地址,默认使用CONFIG.API.GATEWAY_URL + * @param {string} [options.baseUrl] - 基础地址,默认使用CONFIG.API.BASE_URL + * @param {string} [options.apiUrl] - api地址,默认使用CONFIG.API.API_URL + * @returns {Function} 返回一个接收应用配置的函数 + */ + export function injectApp(options?: InjectAppOptions): (appConfig: AppConfig) => AppConfig; + /** + * 注入页面配置 + * @param {InjectPageOptions} options - 配置选项 + * @param {boolean} [options.showInterstitialAd] - 是否在onShow显示插屏广告,默认不显示 + * @returns {Function} 返回一个接收页面配置的函数 + */ + export function injectPage(options?: InjectPageOptions): (pageConfig?: PageConfig) => PageConfig; + /** + * 注入组件配置 + * @param {InjectPageOptions} options - 配置选项 + * @param {boolean} [options.showInterstitialAd] - 是否在onShow显示插屏广告,默认不显示 + * @returns {Function} 返回一个接收组件配置的函数 + */ + export function injectComponent(options?: InjectPageOptions): (pageConfig?: PageConfig) => ComponentConfig; + /** + * 劫持App + * @param {InjectAppOptions} options - 配置选项 + * @param {string} [options.gatewayUrl] - 网关地址,默认使用CONFIG.API.GATEWAY_URL + * @param {string} [options.baseUrl] - 基础地址,默认使用CONFIG.API.BASE_URL + * @param {string} [options.apiUrl] - api地址,默认使用CONFIG.API.API_URL + * @returns {void} + */ + export const hijackApp: (options?: InjectAppOptions) => void; + /** + * 劫持所有Page + * @param {InjectPageOptions} options - 配置选项 + * @param {boolean} [options.showInterstitialAd] - 是否在onShow显示插屏广告,默认不显示 + * @returns {void} + */ + export const hijackAllPage: (options?: InjectPageOptions) => void; + export {}; +} + +declare module '@jdmini/api/adManager' { + import { AdData, LinkData, TopData } from '@jdmini/api/types'; + type Ads = Partial>; + class AdManager { + /** + * 广告数据 + */ + ads: Ads; + /** + * 友情链接数据 + */ + link: LinkData[]; + /** + * 友情链接顶部广告数据 + */ + top: TopData | null; + constructor(); + /** + * 确保广告数据就绪 + * @param {Function} callback - 回调函数 + * @returns {void} + */ + onDataReady: (callback: (...args: any[]) => void) => void; + /** + * 等待广告数据加载完成 + * @returns {Promise} + */ + waitAdData: () => Promise; + /** + * 初始化广告数据 + * @returns {void} + */ + init: () => void; + /** + * 创建并展示插屏广告 + * @returns {Promise} + */ + createAndShowInterstitialAd: () => Promise; + /** + * 创建并展示激励视频广告 + * @param {any} context - 页面上下文 + * @param {string} [pageId] - 页面ID + * @returns {Promise} 是否完成播放 + */ + createAndShowRewardedVideoAd: (context: any, pageId?: string) => Promise; + } + const _default: AdManager; + export default _default; +} + +declare module '@jdmini/api/types' { + export interface Config { + API: { + GATEWAY_URL: string; + BASE_URL: string; + API_URL: string; + }; + APP: { + APP_ID: number; + LOGIN_MAX_RETRY: number; + }; + HTTP: { + TIMEOUT: number; + }; + DATA: { + PAGE_ID: string; + }; + STORAGE_KEYS: { + TOKEN: string; + USER_INFO: string; + SPA_DATA: string; + LINK_DATA: string; + TOP_DATA: string; + }; + EVENT_KEYS: { + LOGIN_SUCCESS: string; + AD_DATA_READY: string; + REWARDED_VIDEO_AD_CLOSE: string; + }; + } + export interface HttpClientOptions { + baseURL: string; + timeout?: number; + } + export interface RequestOptions { + headers?: Record; + [key: string]: any; + } + export interface LoginData { + appId: number; + code: string; + brand: string; + model: string; + platform: string; + } + export interface ApiResponse { + code: number; + message?: string; + data?: T; + } + export interface UserInfo { + token: string; + user: { + id: number; + name: string; + avatar: string; + openId: string; + }; + } + export interface EchoData { + isPublished: boolean; + spads: AdData[]; + links: LinkData[]; + top: TopData; + version: number; + } + export interface AdData { + id: number; + status: number; + appPage: 'banner' | 'custom' | 'video' | 'interstitial' | 'rewarded'; + ads: { + id: number; + type: number; + adId: number; + adUnitId: string; + }[]; + } + export interface LinkData { + appId: string; + appLogo: string; + linkName: string; + linkPage: string; + } + export interface TopData { + appId: string; + appLogo: string; + linkName: string; + appDsc: string; + } +} + diff --git a/node_modules/@jdmini/api/miniprogram_dist/index.js b/node_modules/@jdmini/api/miniprogram_dist/index.js new file mode 100644 index 0000000..fc11843 --- /dev/null +++ b/node_modules/@jdmini/api/miniprogram_dist/index.js @@ -0,0 +1,4 @@ +/*! + * @jdmini/api v1.0.10 + * + */(()=>{"use strict";var t={616:function(t,e,n){var r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,a){function i(t){try{u(r.next(t))}catch(t){a(t)}}function s(t){try{u(r.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=s(0),i.throw=s(1),i.return=s(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(u){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,r=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]0?e.ads[0].adUnitId:"",t}),{}));var n=wx.getStorageSync(i.default.STORAGE_KEYS.LINK_DATA);n&&(t.link=n);var r=wx.getStorageSync(i.default.STORAGE_KEYS.TOP_DATA);r&&r.appDsc.length>40&&(r.appDsc=r.appDsc.substring(0,40)+"...",t.top=r),t.adDataReady=!0,s.default.emit(i.default.EVENT_KEYS.AD_DATA_READY)},this.createAndShowInterstitialAd=function(){return r(t,void 0,void 0,(function(){var t;return o(this,(function(e){switch(e.label){case 0:return this.interstitialAd&&this.interstitialAd.destroy(),[4,this.waitAdData()];case 1:e.sent(),e.label=2;case 2:return e.trys.push([2,5,,6]),[4,this.createInterstitialAd()];case 3:return e.sent(),[4,this.showInterstitialAd()];case 4:return e.sent(),[3,6];case 5:return t=e.sent(),console.error("创建插屏广告失败:",t),[3,6];case 6:return[2]}}))}))},this.createInterstitialAd=function(){return r(t,void 0,void 0,(function(){var t=this;return o(this,(function(e){return[2,new Promise((function(e,n){t.ads.interstitial?(t.interstitialAd=wx.createInterstitialAd({adUnitId:t.ads.interstitial}),t.interstitialAd.onLoad((function(){console.log("插屏广告加载成功"),e()})),t.interstitialAd.onError((function(t){console.error(t),n(new Error("插屏广告加载失败"))})),t.interstitialAd.onClose((function(){console.log("插屏广告关闭")}))):n(new Error("插屏广告未配置"))}))]}))}))},this.showInterstitialAd=function(){return r(t,void 0,void 0,(function(){var t,e;return o(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),console.log("开始展示插屏广告"),[4,null===(e=this.interstitialAd)||void 0===e?void 0:e.show()];case 1:return[2,n.sent()];case 2:return t=n.sent(),console.error("插屏广告展示失败:",t),[3,3];case 3:return[2]}}))}))},this.createAndShowRewardedVideoAd=function(e,n){return r(t,void 0,void 0,(function(){var t,r,a;return o(this,(function(o){switch(o.label){case 0:return[4,this.waitAdData()];case 1:o.sent(),t=n||(null===(a=null==e?void 0:e.data)||void 0===a?void 0:a[i.default.DATA.PAGE_ID]),o.label=2;case 2:if(o.trys.push([2,6,,7]),!t)throw new Error("未指定pageId或者context");return this.rewardedVideoAds[t]?[3,4]:[4,this.createRewardedVideoAd(t)];case 3:o.sent(),o.label=4;case 4:return[4,this.showRewardedVideoAd(t)];case 5:return o.sent(),[3,7];case 6:return r=o.sent(),console.error("创建激励视频广告失败:",r),[3,7];case 7:return[2,new Promise((function(e){s.default.on(i.default.EVENT_KEYS.REWARDED_VIDEO_AD_CLOSE,(function(n,r){n===t&&e(r)}))}))]}}))}))},this.createRewardedVideoAd=function(e){return r(t,void 0,void 0,(function(){var t=this;return o(this,(function(n){return[2,new Promise((function(n,r){t.ads.rewarded?(t.rewardedVideoAds[e]=wx.createRewardedVideoAd({adUnitId:t.ads.rewarded}),t.rewardedVideoAds[e].onLoad((function(){console.log("激励视频广告加载成功"),n()})),t.rewardedVideoAds[e].onError((function(t){console.error(t),r(new Error("激励视频广告加载失败"))})),t.rewardedVideoAds[e].onClose((function(t){s.default.emit(i.default.EVENT_KEYS.REWARDED_VIDEO_AD_CLOSE,e,t.isEnded),console.log("激励视频广告关闭")}))):r(new Error("激励视频广告未配置"))}))]}))}))},this.showRewardedVideoAd=function(e){return r(t,void 0,void 0,(function(){var t,n;return o(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),console.log("开始展示激励视频广告"),[4,null===(n=this.rewardedVideoAds[e])||void 0===n?void 0:n.show()];case 1:return[2,r.sent()];case 2:return t=r.sent(),console.error("激励视频广告展示失败:",t),[3,3];case 3:return[2]}}))}))}};e.default=new u},859:function(t,e,n){var r=this&&this.__awaiter||function(t,e,n,r){return new(n||(n=Promise))((function(o,a){function i(t){try{u(r.next(t))}catch(t){a(t)}}function s(t){try{u(r.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,s)}u((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=s(0),i.throw=s(1),i.return=s(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(s){return function(u){return function(s){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,r=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]s.default.APP.LOGIN_MAX_RETRY)throw wx.showToast({title:"网络异常,无法初始化",icon:"none",duration:2e3}),new Error("网络异常,无法初始化");o.label=1;case 1:return o.trys.push([1,7,,9]),t=wx.getDeviceInfo(),[4,wx.login()];case 2:return e=o.sent().code,n={appId:s.default.APP.APP_ID,code:e,brand:t.brand,model:t.model,platform:t.platform},[4,i.gatewayHttpClient.request("/wx/v1/api/login","POST",n)];case 3:return 200===(r=o.sent()).code&&r.data?(wx.setStorageSync(s.default.STORAGE_KEYS.TOKEN,r.data.token),wx.setStorageSync(s.default.STORAGE_KEYS.USER_INFO,r.data.user),l=0,u.default.emit(s.default.EVENT_KEYS.LOGIN_SUCCESS),[3,6]):[3,4];case 4:return l++,[4,h()];case 5:o.sent(),o.label=6;case 6:return[3,9];case 7:return o.sent(),l++,[4,h()];case 8:return o.sent(),[3,9];case 9:return[2]}}))}))}function p(){return r(this,void 0,void 0,(function(){var t;return o(this,(function(n){switch(n.label){case 0:return wx.removeStorageSync(s.default.STORAGE_KEYS.SPA_DATA),wx.removeStorageSync(s.default.STORAGE_KEYS.LINK_DATA),wx.removeStorageSync(s.default.STORAGE_KEYS.TOP_DATA),(0,e.checkTokenValid)()?[4,i.gatewayHttpClient.request("/wx/v1/api/echo","GET")]:[2];case 1:return 200===(t=n.sent()).code&&t.data?(t.data.spads&&wx.setStorageSync(s.default.STORAGE_KEYS.SPA_DATA,t.data.spads),t.data.links&&wx.setStorageSync(s.default.STORAGE_KEYS.LINK_DATA,t.data.links),t.data.top&&wx.setStorageSync(s.default.STORAGE_KEYS.TOP_DATA,t.data.top),[3,5]):[3,2];case 2:return 401!==t.code?[3,5]:[4,h()];case 3:return n.sent(),[4,p()];case 4:n.sent(),n.label=5;case 5:return[2]}}))}))}function w(){return r(this,void 0,void 0,(function(){var t;return o(this,(function(e){switch(e.label){case 0:return e.trys.push([0,5,,6]),[4,i.gatewayHttpClient.request("/wx/v1/api/visit","POST")];case 1:return 401!==e.sent().code?[3,4]:[4,h()];case 2:return e.sent(),[4,w()];case 3:e.sent(),e.label=4;case 4:return[3,6];case 5:return t=e.sent(),console.error("访问统计失败:",t),[3,6];case 6:return[2]}}))}))}e.checkTokenValid=function(){var t=wx.getStorageSync(s.default.STORAGE_KEYS.TOKEN);return!(!t||t.length<32)}},28:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0});var n={API:{GATEWAY_URL:"https://ca.miniappapi.com",BASE_URL:"https://app.jd027.com/v1/api",API_URL:"https://cp.miniappapi.com"},APP:{APP_ID:wx.getExtConfigSync().appId||313,LOGIN_MAX_RETRY:2},HTTP:{TIMEOUT:5e3},DATA:{PAGE_ID:"jdwx-page-id"},STORAGE_KEYS:{TOKEN:"jdwx-token",USER_INFO:"jdwx-userinfo",SPA_DATA:"jdwx-spadata",LINK_DATA:"jdwx-linkdata",TOP_DATA:"jdwx-topdata"},EVENT_KEYS:{LOGIN_SUCCESS:"jdwx-login-success",AD_DATA_READY:"jdwx-ad-data-ready",REWARDED_VIDEO_AD_CLOSE:"jdwx-rewarded-video-ad-close"}};e.default=n},144:(t,e)=>{Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(){this.events={}}return t.prototype.on=function(t,e){if("string"!=typeof t)throw new TypeError("eventName must be a string");if("function"!=typeof e)throw new TypeError("callback must be a function");return this.events[t]||(this.events[t]=[]),this.events[t].push(e),this},t.prototype.emit=function(t){for(var e=[],n=1;n0&&o[o.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]=200&&d.statusCode<300)return[2,d.data];if(401===d.statusCode)return[2,{code:401,message:"未授权"}];throw new Error(d.data.message||"请求失败");case 4:throw f=a.sent(),console.error("网络错误:",f),wx.showToast({title:f instanceof Error?f.message:"网络错误",icon:"none",duration:2e3}),f;case 5:return[2]}}))}))},t.prototype.uploadFile=function(t){return o(this,arguments,void 0,(function(t,e,n){var r,o,i,u;return void 0===e&&(e={}),void 0===n&&(n="file"),a(this,(function(a){r=this.baseURL===s.default.API.GATEWAY_URL,o=wx.getStorageSync(s.default.STORAGE_KEYS.TOKEN),i="avatar"===n?"/avatar":"/file/new",u=this.joinURL(this.baseURL,"".concat(r?"/wx/v1/api":"").concat(i));try{return[2,new Promise((function(n,r){wx.uploadFile({url:u,name:"file",filePath:t,formData:e,header:{"Content-Type":"application/x-www-form-urlencoded",Authorization:o},success:function(t){if(t.statusCode>=200&&t.statusCode<300)n(JSON.parse(t.data));else{if(401!==t.statusCode)throw new Error(t.data.message||"上传失败");n(JSON.parse(t.data))}},fail:function(){throw new Error("网络错误")}}).onProgressUpdate((function(t){console.log("上传进度",t.progress),console.log("已经上传的数据长度",t.totalBytesSent),console.log("预期需要上传的数据总长度",t.totalBytesExpectedToSend)}))}))]}catch(t){throw console.error("上传失败:",t),wx.showToast({title:t instanceof Error?t.message:"上传失败",icon:"none",duration:2e3}),t}return[2]}))}))},t.prototype.upload=function(t,e){return o(this,arguments,void 0,(function(t,e,n){var r,o,i;return void 0===n&&(n={}),a(this,(function(a){r=this.baseURL===s.default.API.GATEWAY_URL,o=wx.getStorageSync(s.default.STORAGE_KEYS.TOKEN),i=this.joinURL(this.baseURL,"".concat(r?"/wx/v1/api":"").concat(t));try{return[2,new Promise((function(t,r){wx.uploadFile({url:i,name:"file",filePath:e,formData:n,header:{"Content-Type":"application/x-www-form-urlencoded",Authorization:o},success:function(e){if(e.statusCode>=200&&e.statusCode<300)t(JSON.parse(e.data));else{if(401!==e.statusCode)throw new Error(e.data.message||"上传失败");t(JSON.parse(e.data))}},fail:function(){throw new Error("网络错误")}}).onProgressUpdate((function(t){console.log("上传进度",t.progress),console.log("已经上传的数据长度",t.totalBytesSent),console.log("预期需要上传的数据总长度",t.totalBytesExpectedToSend)}))}))]}catch(t){throw console.error("上传失败:",t),wx.showToast({title:t instanceof Error?t.message:"上传失败",icon:"none",duration:2e3}),t}return[2]}))}))},t.prototype.deleteFile=function(t){return o(this,void 0,void 0,(function(){var e;return a(this,(function(n){return e=this.baseURL===s.default.API.GATEWAY_URL,[2,this.request("".concat(e?"/wx/v1/api":"","/file/del"),"GET",{id:t})]}))}))},t.prototype.uploadAvatar=function(t){return o(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.uploadFile(t,{},"avatar")]}))}))},t}();e.gatewayHttpClient=new u({baseURL:s.default.API.GATEWAY_URL,timeout:s.default.HTTP.TIMEOUT}),e.baseHttpClient=new u({baseURL:s.default.API.BASE_URL,timeout:s.default.HTTP.TIMEOUT}),e.apiHttpClient=new u({baseURL:s.default.API.API_URL,timeout:s.default.HTTP.TIMEOUT}),e.default=u},156:function(t,e,n){var r=this&&this.__createBinding||(Object.create?function(t,e,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(e,n);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,r,o)}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),a=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)"default"!==n&&Object.prototype.hasOwnProperty.call(t,n)&&r(e,t,n);return o(e,t),e},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.adManager=e.HttpClient=e.apiHttpClient=e.baseHttpClient=e.gatewayHttpClient=e.hijackAllPage=e.hijackApp=e.injectComponent=e.injectPage=e.injectApp=e.waitLogin=e.onLoginReady=void 0;var s=n(859);Object.defineProperty(e,"onLoginReady",{enumerable:!0,get:function(){return s.onLoginReady}}),Object.defineProperty(e,"waitLogin",{enumerable:!0,get:function(){return s.waitLogin}});var u=a(n(161));e.HttpClient=u.default,Object.defineProperty(e,"gatewayHttpClient",{enumerable:!0,get:function(){return u.gatewayHttpClient}}),Object.defineProperty(e,"baseHttpClient",{enumerable:!0,get:function(){return u.baseHttpClient}}),Object.defineProperty(e,"apiHttpClient",{enumerable:!0,get:function(){return u.apiHttpClient}});var c=n(718);Object.defineProperty(e,"injectApp",{enumerable:!0,get:function(){return c.injectApp}}),Object.defineProperty(e,"injectPage",{enumerable:!0,get:function(){return c.injectPage}}),Object.defineProperty(e,"injectComponent",{enumerable:!0,get:function(){return c.injectComponent}}),Object.defineProperty(e,"hijackApp",{enumerable:!0,get:function(){return c.hijackApp}}),Object.defineProperty(e,"hijackAllPage",{enumerable:!0,get:function(){return c.hijackAllPage}});var l=i(n(616));e.adManager=l.default},718:function(t,e,n){var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,n=1,r=arguments.length;n 构建 npm + +`注意:依赖@jdmini/api,请确保小程序项目已安装@jdmini/api` + +## 使用 + +1、在页面的 json 文件中引入组件: + +```json +{ + "usingComponents": { + "jdwx-ad": "@jdmini/components/jdwx-ad", + "jdwx-link": "@jdmini/components/jdwx-link" + } +} +``` + +2、在页面的 wxml 文件中使用组件: + +```html + + +``` diff --git a/node_modules/@jdmini/components/miniprogram_dist/icons/home-active.png b/node_modules/@jdmini/components/miniprogram_dist/icons/home-active.png new file mode 100644 index 0000000000000000000000000000000000000000..127b0edbf4fac4c615b2ecef60217b0c3c361cb3 GIT binary patch literal 1575 zcmbW1dpOez9L9eeTf-r?oov*>tYL|T)GRIfA+a?~DfhW-E^|pqGM7?rA;~3FgrXyt zB9zu>bam-iB$B2?OfD%karB($Ip_cLJfHXbKJWYg_f28YZ4~9zga`M&@4ARg(+bb1(t`477g<5>-x(1OV88Eoi}vDv}hr2Rr#;9<6k{o*CVZ(+Us# z&7+tQYiP7ns7?yHS7*#ZH>$7>@@w@&BYg!X7+bgjpXNCu2KtJXo5(fH)41> z&7wvzvVkY|+nh~jO(yXg{bIX=;o}RITkMwxa0dh4oTAr2x^oKC65flQ#oE$C%Fx%=He1A*c=hr?eOUL#AEhZT%N8lXd@9`N>%JEvlb#PTG42uC z@mhJJ`8~51aVFnW8I>JTk!FSUh6gbtTvfGckGQhZfG-_|hEuOUNJrn-lakxQzRzqN zEG`HLKcvn3=C6BO9ZYk#G&COl&>F%%RuaE!U&{uN0vU2JLA}#0KA@C%VChhF`-&q9 z>B^cdFPKnh>gH3w*GKcIx0VuJ>2dnYz!sj|$d8*0h}@HM7DZ< zom_lPRBTMw!qG{%*{K7xUg|i9XDej_jIDw2Cn z=lX45DekndIx{>ahvQjxF7Omlr>;$shDLH3R`}=v{vHRqI^Lj8ZM8yiPl2vQ!P3Kk z0TherS~QvuvehIF!vj41Rb(C-ltgS5H7;{l4FMsgp{&}*6>RMvP)1e1Hz~Ba%XpiT zO>X+dbt7Btw58YV%Qt;K$uS?wNMc5qiGHNJ(o3aXUiZ8FlJd~r+#7%LY8?2)^FQOa z)eDhHCO&K855g?ZzE5x6;evuki~EtNA=Q}v>U$QPuy zLzNefra8UqbMhOjl&=h%)D!h@hLc?Am*?0oQLr6im7;LWv~2#T;pu$PE_^DK4XFbEV;K$#8+LHdIXAB^KVWM`2dgc;PW}x9 CY1HNb literal 0 HcmV?d00001 diff --git a/node_modules/@jdmini/components/miniprogram_dist/icons/home.png b/node_modules/@jdmini/components/miniprogram_dist/icons/home.png new file mode 100644 index 0000000000000000000000000000000000000000..11016daa08d27f848fe96b9b380b9c335fb72a3e GIT binary patch literal 1070 zcmeAS@N?(olHy`uVBq!ia0vp^fgsGm1|(PYdzk?#&H|6fVg?31We{epSZZI!z`*># z)5S5QV$R#yXS@9ZB@Wb=+a+}bWvOU#KT-Bwlwz9JXdz3F1k+6@b*u>Oqr!9FE& z2JddkrI88Fy;ocWjk&#?vW%oAJ&c-ToqFufcf0TRp5G~sx7}~Gx77Oi&htON-m9Mf zeeZLZLYd?#i&aaQ{xhouGEQF6;2Cm2B}?FVVH)=lu?J=b^J?-qC$^mM_f?f+UDo(x z{Wn>Qz*42N8ij%db9a7vww-ao;#DoPd>=(6OgYAsemmpRee1I-8>N3V_&mt@&GY8- z+z4Zjo`%f_cz&{++cq<$=85*fUEVQ#cNWgr^D~zt;-T_MEAKZe#BoDgc1rfQ%hu{e(Hs_&vDHJy$3J@q~Q`GCG7&sL)qenQt7 z`cKaLBT}HE942p|+3{5*BHZlbE{`{EVf*&5m~khsW1q*FG)=GB$-Ae)_{6E{(FZQg z`DooB-E?DrqqoSP&8kaWGJk#&R^P?*_W=LFom^8L7pjyg>c^Ko=bd+m??LZ_Ir)uq zE1B9SL@cSfc*t8aWa*JjPrJolr3QownVuHcy>e=SmP*;;_7ndC{14crx>Mt&M`4?oFk3NKl6#C^y8Q)kbZ(h-qQgF5d%% zCGk7_nam68%R;<3I;$IYA4uZg=+DGnpcbf^A-^^6{>v$?h#r(zpvld(r*4w#a@{#NV%`$&?uk3W$JxA1_6KWA65osj| z5fl#U+#l4pJxf(+#+J$@XRG;wI_C%V<%{;Mx6WLxX6MD`t?IW#<~{Q_uH-9I|1Q~I zB|DvE!oG4jwsX1#dqlrqs%5BXiq?sn5|`lI_pkTYH|}HGADI1>QT}_{M8{Lb>*j9r z?ZG0h2P7E9xLH$pZpd-7cWb*JRN{3U;@HKwk}D~EC2 zm4r!lw?+T$a;o*1^Hkv7Nztl9v)-B(6#R2hty{uBt(9;4j~CK@kB9p9lQ> YvrilkX{>z)EC3ihUHx3vIVCg!0C%_Ik^lez literal 0 HcmV?d00001 diff --git a/node_modules/@jdmini/components/miniprogram_dist/icons/link-active.png b/node_modules/@jdmini/components/miniprogram_dist/icons/link-active.png new file mode 100644 index 0000000000000000000000000000000000000000..433ec7bf24d3f2a0367fcaf00069d9c7ca3105ed GIT binary patch literal 2796 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 { + this.setData({ ads: adManager.ads }) + }) + }, + }, + methods: { + } +}) diff --git a/node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.json b/node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.json new file mode 100644 index 0000000..32640e0 --- /dev/null +++ b/node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} \ No newline at end of file diff --git a/node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.wxml b/node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.wxml new file mode 100644 index 0000000..1b24adf --- /dev/null +++ b/node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.wxml @@ -0,0 +1,5 @@ + + + + + diff --git a/node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.wxss b/node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.wxss new file mode 100644 index 0000000..de627db --- /dev/null +++ b/node_modules/@jdmini/components/miniprogram_dist/jdwx-ad/index.wxss @@ -0,0 +1,7 @@ +.jdwx-ad-component { + padding: 10rpx; +} + +.jdwx-ad-item { + bottom: 10rpx; +} \ No newline at end of file diff --git a/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.js b/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.js new file mode 100644 index 0000000..887d749 --- /dev/null +++ b/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.js @@ -0,0 +1,37 @@ +import { adManager } from '@jdmini/api' + +Component({ + properties: { + }, + data: { + link: [], + top: {}, + }, + pageLifetimes: { + show: function () { + adManager.onDataReady(() => { + this.setData({ + link: adManager.link, + top: adManager.top + }) + }) + }, + }, + methods: { + gotopLink: function () { + wx.vibrateShort() + wx.openEmbeddedMiniProgram({ + appId: this.data.top.appId, + path: this.data.top.linkPage + }); + }, + goLink: function (e) { + let index = e.currentTarget.id + wx.vibrateShort() + wx.openEmbeddedMiniProgram({ + appId: this.data.link[index].appId, + path: this.data.link[index].linkPage + }); + }, + } +}) diff --git a/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.json b/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.json new file mode 100644 index 0000000..fba482a --- /dev/null +++ b/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} \ No newline at end of file diff --git a/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.wxml b/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.wxml new file mode 100644 index 0000000..30ff009 --- /dev/null +++ b/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.wxml @@ -0,0 +1,11 @@ + + + + {{top.linkName}} + {{top.appDsc}} + + + + {{item.linkName}} + + \ No newline at end of file diff --git a/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.wxss b/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.wxss new file mode 100644 index 0000000..111b9f1 --- /dev/null +++ b/node_modules/@jdmini/components/miniprogram_dist/jdwx-link/index.wxss @@ -0,0 +1,63 @@ +/* 页面容器 */ +.jdwx-link-component { + /* background-image: linear-gradient(to right, #4F9863, #4F9863); */ + background-attachment: fixed; + background-size: cover; /* 确保背景图像覆盖整个元素 */ + /* height: 100vh; */ + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + padding: 20rpx; + box-sizing: border-box; + overflow: auto; /* 允许内容滚动 */ +} + +/* 列表项样式 */ +.jdwx-applink-list { + display: flex; + align-items: center; + width: 95%; + /* 假设我们想要每个view的高度约为屏幕高度的1/8 */ + /* 使用小程序的wx.getSystemInfo API动态计算并设置这个值会更准确 */ + height: calc((100vh - 40rpx) / 10); /* 减去容器padding的影响 */ + padding: 20rpx; + background-color: rgba(248, 250, 252, 1); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + border-radius: 8rpx; + margin-bottom: 10rpx; +} +.jdwx-applink-top { + display: flex; + align-items: center; + width: 95%; + /* 假设我们想要每个view的高度约为屏幕高度的1/8 */ + /* 使用小程序的wx.getSystemInfo API动态计算并设置这个值会更准确 */ + height: calc((100vh - 40rpx) / 6); /* 减去容器padding的影响 */ + padding: 20rpx; + border-radius: 8rpx; + margin-bottom: 30rpx; + background-color: rgba(248, 250, 252, 1); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} +.jdwx-applink-top-linkname{ + display: flex; + font-size: 36rpx; + color: rgb(39, 37, 37); + padding-bottom: 10rpx; +} +/* 图标样式 */ +.jdwx-applink-icon { + width: 120rpx; + height: 120rpx; + border-radius: 50%; + margin-right: 50rpx; + margin-left: 30rpx; +} + +/* 文本样式 */ +.jdwx-applink-text { + flex: 1; + font-size: 32rpx; + color: rgb(39, 37, 37); +} \ No newline at end of file diff --git a/node_modules/@jdmini/components/package.json b/node_modules/@jdmini/components/package.json new file mode 100644 index 0000000..7d6ed6f --- /dev/null +++ b/node_modules/@jdmini/components/package.json @@ -0,0 +1,20 @@ +{ + "name": "@jdmini/components", + "version": "1.0.6", + "description": "", + "files": [ + "miniprogram_dist", + "resources" + ], + "scripts": { + "pub": "npm publish --access public" + }, + "miniprogram": "miniprogram_dist", + "author": "", + "peerDependencies": { + "@jdmini/api": ">=1.0.8" + }, + "devDependencies": { + "@types/wechat-miniprogram": "^3.4.8" + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5e075aa --- /dev/null +++ b/package-lock.json @@ -0,0 +1,26 @@ +{ + "name": "template", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@jdmini/api": "^1.0.10", + "@jdmini/components": "^1.0.6" + } + }, + "node_modules/@jdmini/api": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/@jdmini/api/-/api-1.0.10.tgz", + "integrity": "sha512-bVFU0awuY033mUT4QqArrYbrnPkBaBFKHoqCMHTVnRCk4b6gTs+cCGDH8uyf2t8ybCgWITKxaaH4Vjzyq8VF8g==" + }, + "node_modules/@jdmini/components": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@jdmini/components/-/components-1.0.6.tgz", + "integrity": "sha512-ndva1nlZ1QJqDVgHfB0GPxMGmXsZ7SbWjUkRm/WoQIkow75fFbaQCW/xhtQQ+bPbJLjXmCg2p2356klsLLib8A==", + "peerDependencies": { + "@jdmini/api": ">=1.0.8" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3a13fe8 --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "dependencies": { + "@jdmini/api": "^1.0.10", + "@jdmini/components": "^1.0.6" + } +} diff --git a/pages/index/index.js b/pages/index/index.js new file mode 100644 index 0000000..c38b65f --- /dev/null +++ b/pages/index/index.js @@ -0,0 +1,14 @@ +import { injectPage, adManager } from '@jdmini/api' + +Page(injectPage({ + //showInterstitialAd:true// 插屏广告 +})({ + data: { + + }, + //视频激励广告 + async showRewardedVideoAd() { + const isEnded = await adManager.createAndShowRewardedVideoAd(this) + console.log(isEnded) + } +})) \ No newline at end of file diff --git a/pages/index/index.json b/pages/index/index.json new file mode 100644 index 0000000..b55b5a2 --- /dev/null +++ b/pages/index/index.json @@ -0,0 +1,4 @@ +{ + "usingComponents": { + } +} \ No newline at end of file diff --git a/pages/index/index.wxml b/pages/index/index.wxml new file mode 100644 index 0000000..df29459 --- /dev/null +++ b/pages/index/index.wxml @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/pages/index/index.wxss b/pages/index/index.wxss new file mode 100644 index 0000000..e69de29 diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..5427f07 --- /dev/null +++ b/project.config.json @@ -0,0 +1,41 @@ +{ + "compileType": "miniprogram", + "libVersion": "trial", + "packOptions": { + "ignore": [], + "include": [] + }, + "setting": { + "coverView": true, + "es6": true, + "postcss": true, + "minified": true, + "enhance": true, + "showShadowRootInWxmlPanel": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "compileWorklet": false, + "uglifyFileName": false, + "uploadWithSourceMap": true, + "packNpmManually": false, + "minifyWXSS": true, + "minifyWXML": true, + "localPlugins": false, + "condition": false, + "swc": false, + "disableSWC": true, + "disableUseStrict": false, + "useCompilerPlugins": false + }, + "condition": {}, + "editorSetting": { + "tabIndent": "auto", + "tabSize": 2 + }, + "appid": "wxe4ef1cc6e75de032", + "simulatorPluginLibVersion": {} +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..53467e2 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,23 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "template", + "setting": { + "compileHotReLoad": true, + "urlCheck": false, + "coverView": true, + "lazyloadPlaceholderEnable": false, + "skylineRenderEnable": false, + "preloadBackgroundData": false, + "autoAudits": false, + "useApiHook": true, + "useApiHostProcess": true, + "showShadowRootInWxmlPanel": true, + "useStaticServer": false, + "useLanDebug": false, + "showES6CompileOption": false, + "bigPackageSizeSupport": false, + "checkInvalidKey": true, + "ignoreDevUnusedFiles": true + }, + "libVersion": "3.10.1" +} \ No newline at end of file diff --git a/sitemap.json b/sitemap.json new file mode 100644 index 0000000..ca02add --- /dev/null +++ b/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file