| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- import app from "@/app.js"
- let settings = {
- method: "get", // 默认请求方法
- contentType: "application/json", // 传参格式
- dataType: "json", // 返回值类型
- baseUrl: app.baseUrl + '/api/app', // 请求根地址
- }
- let loadNum = 0; //加载框的数量
- let loadingShow = () => {
- loadNum++
- uni.showLoading({
- title: 'loading...'
- });
- }
- let loadingHide = () => {
- loadNum--
- if (loadNum <= 0) {
- uni.hideLoading();
- }
- }
- function x(options = null) {
- // 返回当前实例对象 无需手动return
- return new x.fn.init(options);
- }
- x.fn = x.prototype = {
- constructor: x,
- config(options) {
- // 解构并设置默认值
- let {
- baseUrl,
- url,
- data,
- method,
- contentType,
- dataType
- } = options;
- // 请求头参数 写入token和lang
- let auth = null;
- if (uni.getStorageSync('token')) {
- auth = uni.getStorageSync('token');
- }
- const header = auth ? {
- 'X-Requested-With': 'XMLHttpRequest',
- lang: uni.getStorageSync('lang') || 'tw',
- authorization: `bearer ${auth}`
- } : {
- 'X-Requested-With': 'XMLHttpRequest',
- lang: uni.getStorageSync('lang') || 'tw',
- };
- this.header = header;
- // 请求地址解析
- if (url.startsWith('http')) { // 外部链接
- this.url = url;
- } else { // 本地相对路径
- this.url = baseUrl + url;
- }
- if (data) this.data = data;
- if (method) this.method = method;
- if (contentType) this.contentType = contentType;
- if (dataType) this.dataType = dataType;
- },
- init(options) {
- // 将用户参数 写入配置信息
- this.config(Object.assign(settings, options));
- let { config = {} } = options
- // 提示状态
- if (config.loading) {
- loadingShow()
- }
- return new Promise((resolve, reject) => {
- uni.request({
- url: this.url,
- data: this.data,
- method: this.method,
- header: this.header,
- dataType: this.dataType,
- sslVerify: false,
- success: (res) => {
- let message = res.data.message
- let code = res.data.code
-
- if (code != 200) {
- switch (code) {
- case 1003: // 登陆失效 清除状态 重新登陆
- // 清除session
- uni.removeStorageSync('token');
- uni.redirectTo({
- url: "/pages/login/index",
- });
- break;
- case 1021:
- resolve(res.data);
- break;
- default:
- reject(message);
- break;
- }
- if (config.toast !== false&&message) {
- uni.showToast({
- title: message,
- duration: 2000,
- icon: 'none'
- });
- }
- } else {
- if(res.data) {
- resolve(res.data); // 直接返回数据
-
- }else {
- console.log('dd')
- resolve('success');
- }
-
- if (config.toast&&message) {
- uni.showToast({
- title: message,
- duration: 2000,
- icon: 'none'
- });
- }
- }
- },
- fail: (err) => {
- reject(err)
- if (config.toast !== false) {
- uni.showToast({
- title: 'error reload!',
- icon: "none"
- });
- }
- if (err) {
- throw new Error();
- }
- },
- complete: () => {
- loadingHide()
- }
- })
- })
- },
- // 使用promise封装同步化的确认框
- confirmSync(content, fullfilled, rejected = null) {
- let showCancel = false;
- if (rejected instanceof Function) {
- showCancel = true;
- }
- return new Promise(function (resolve, reject) {
- uni.showModal({
- content,
- showCancel,
- success(res) { // confirm or cancel
- if (res.confirm) {
- resolve(fullfilled()); // 执行动作 需要返回值 则标记到resolve中
- } else if (res.cancel && rejected) {
- reject(rejected()); // 执行动作 需要返回值 则标记到reject中
- }
- }
- })
- })
- },
- get(url, data = null, config = {}) {
- return x({
- method: "get",
- url,
- data,
- config
- })
- },
- post(url, data, config = {}) {
- return x({
- method: "post",
- url,
- data,
- config
- })
- },
- // data 为uni的chooseImage
- uploadFile(url, data, config = {}) {
- let auth = null;
- if (uni.getStorageSync('token')) {
- auth = uni.getStorageSync('token');
- }
- let header = {
- 'X-Requested-With': 'XMLHttpRequest',
- lang: "cn",
- }
- if (auth) header.authorization = `bearer ${auth}`;
- if (config.loading !== false) {
- loadingShow()
- }
- return new Promise((resolve, reject) => {
- uni.uploadFile({
- url: settings.baseUrl + url, //仅为示例,非真实的接口地址
- filePath: data.tempFilePaths[0],
- name: 'image',
- formData: {},
- sslVerify: false,
- header,
- success: (res) => {
- resolve(JSON.parse(res.data))
- },
- fail: () => {
- reject()
- },
- complete: () => {
- loadingHide()
- }
- });
- })
- },
- head() {
- },
- put() {
- },
- // ...
- }
- x.fn.init.prototype = x.fn, x.extend = x.fn.extend = function (obj, prop) {
- if (!prop) { //如果未设置prop 则表示给this扩展一个对象的内容
- prop = obj;
- obj = this;
- }
- for (var i in prop) obj[i] = prop[i];
- }, x.extend(x.fn);
- export default x;
|