diff --git a/common/api.js b/common/api.js new file mode 100644 index 0000000..cca5a60 --- /dev/null +++ b/common/api.js @@ -0,0 +1,5 @@ +export const host = '/TODO' + +export default { + uploadFile: `${host}` +} diff --git a/common/manageServer.js b/common/manageServer.js new file mode 100644 index 0000000..a6d96c6 --- /dev/null +++ b/common/manageServer.js @@ -0,0 +1,52 @@ +import { goto } from "./untool"; +import { showToast } from "./untool" + +// 请求接口 +function dealRequest(def, url, param) { + + const promise = new Promise(function (resolve, reject) { + + def.then(function (res) { + handleResponse(res, resolve, reject, url, param); + }, function (res) { + console.log('request url==========1', url) + console.log('request param==========1', param) + console.log('response ===========1', res); + showToast(`网络错误`) + reject(res) + }) + }) + + // 统一提示 errmsg + promise.then(function (res) { + }, function (res) { + uni.hideLoading() + }) + return promise; +} + +// 处理响应 +function handleResponse(res, resolve, reject, url, param) { + const orgRes = { ...res }; + if ((res && res.respCode == 1)) { + resolve(res.respData) + } else { + if (res.respCode == '-1') { // 统一判断需要认证, 并作页面跳转 + showToast(res.respMsg) + setTimeout(()=>{ + goto(`TODO`, 1) + }, 3500) + return reject({ code: {} }); + } + + setTimeout(()=> { + showToast(`网络错误`) + }, 0) + reject({code: {}}); + } +} + +export { + dealRequest, + handleResponse +} diff --git a/common/request.js b/common/request.js new file mode 100644 index 0000000..ba3a01f --- /dev/null +++ b/common/request.js @@ -0,0 +1,40 @@ +import { dealRequest } from "./manageServer" +import { showToast } from "./untool" + +const corePostBase = (url, reqParams, options) => { + return new Promise((resolve, reject)=> { + uni.request({ + url, + data: reqParams, + header: options, + method: 'POST', + success: (res)=> { + resolve(res) + }, + fail: (e)=> { + reject(e) + } + }) + }) +} + +const BaseParam = {} +// 请求处理 +let corePost = function (url, params = {}, options = {}) { + let { tid } = Storage.get("MEMBER_SESSION") || {} + // 统一把emo转unicode + // emoUnicode(params) + const reqParams = { + ...BaseParam, + ...params, + } + return dealRequest(corePostBase(url, reqParams, options)).then(res => { + // 解析unicode + // emoUnicode(res, 2) + return res + }) +} + +export { + corePost +} \ No newline at end of file diff --git a/common/untool.js b/common/untool.js index 9e2b345..31038d7 100644 --- a/common/untool.js +++ b/common/untool.js @@ -35,11 +35,15 @@ const setClipboardData = (val)=> { uni.setClipboardData({ data: val, success: () => { - uni.showToast({ title: "复制成功", icon: 'none' }) + showToast({ title: "复制成功", icon: 'none' }) }, }) } +const showToast = (val)=> { + uni.showToast({ title: val, icon: 'none' }) +} + const confirmModal = (title) => { return new Promise((resolve)=> { uni.showModal({ content: title, confirmColor: '#B12D29' }).then((res)=> { @@ -64,4 +68,5 @@ export { setClipboardData, confirmModal, showLoading, + showToast } diff --git a/common/upload.js b/common/upload.js new file mode 100644 index 0000000..dd9d651 --- /dev/null +++ b/common/upload.js @@ -0,0 +1,99 @@ +import { handleResponse } from './manageServer.js' +import apiConfig from './api.js' //接口配置 +import { showToast } from "./untool" + + +const chooseFile = function (action = 'chooseImage', opt = {}) { + let opts = { + // sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sizeType: ['compressed'], + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + ...opt + } + return new Promise((resolve, reject) => { + uni[action]({ + count: 1, // 默认9 + ...opts, + success: function (res) { + // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片 + var tempFilePaths = res.tempFilePaths || [res.tempFilePath] + resolve(tempFilePaths) + }, + fail: function (res) { + reject() + } + }) + }) +} + +const doRequest = function (file) { + return new Promise((resolve, reject) => { + uni.uploadFile({ + url: `${apiConfig.uploadFile}`, + fileType: 'image', // TODO + filePath: file, + name: 'file', + formData: { + // 'user': 'test' + }, + success(res) { + try { + const data = JSON.parse(res.data) + handleResponse(data, resolve, reject) + } catch (error) { + reject() + } + }, + fail() { + reject() + } + }) + }) +} + +// 单 选择并上传文件 +const coreUploadFile = function (action = 'chooseImage', opt = {}) { + return chooseFile(action, opt).then(async (files) => { + if (opt.asyncFileFun) { + const newFiles = await opt.asyncFileFun(files) + files = newFiles + } + uni.showLoading() + return doRequest(files[0]).then(res => { + return res + }).finally(()=> { + uni.hideLoading() + }) + }) +} + +// 多 选择并上传文件 +const coreMultiUploadFile = async (action = 'chooseImage', opt = {})=> { + let files = await chooseFile(action, opt) + files = files || [] + const allDef = [] + if (opt.asyncFileFun) { + const newFiles = await opt.asyncFileFun(files) + files = newFiles + } + uni.showLoading() + files.map(val=>{ + const def = doRequest(val).then(res => { + return res + }) + allDef.push(def) + }) + try{ + let resFiles = await Promise.all(allDef) + uni.hideLoading() + return resFiles + }catch(e){ + uni.hideLoading() + return files + } +} + +export { + coreUploadFile, + coreMultiUploadFile +} diff --git a/components/tpx-image/tpx-image.vue b/components/tpx-image/tpx-image.vue new file mode 100644 index 0000000..5ae6f30 --- /dev/null +++ b/components/tpx-image/tpx-image.vue @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/components/tpx-upload/tpx-upload.vue b/components/tpx-upload/tpx-upload.vue index a038522..4c3a92a 100644 --- a/components/tpx-upload/tpx-upload.vue +++ b/components/tpx-upload/tpx-upload.vue @@ -1,21 +1,53 @@ \ No newline at end of file