diff --git a/common/js/http.js b/common/js/http.js index 84f37f3..ab32bb5 100644 --- a/common/js/http.js +++ b/common/js/http.js @@ -173,8 +173,19 @@ export default { _sendRequestNow(params) { - var method = params.data != undefined ? 'POST' : 'GET', - url = (Config.baseUrl + params.url).replace(/(? { + fail: (res) => { console.error('[HTTP][FAIL] uploadBase64', JSON.stringify(res)); typeof params.fail == 'function' && params.fail(res); } @@ -252,8 +277,9 @@ export default { uni.request({ url: Config.baseUrl + '/api/upload/headimgPull', method: 'POST', + // ✅ 修复:application/json header: { - 'content-type': 'application/x-www-form-urlencoded;application/json' + 'content-type': 'application/json' }, data: { app_type: appType, @@ -266,7 +292,7 @@ export default { console.log('[HTTP][RESPONSE] pullImage', 'statusCode=', res.statusCode, JSON.stringify(res.data)); typeof params.success == 'function' && params.success(res.data); }, - fail: () => { + fail: (res) => { console.error('[HTTP][FAIL] pullImage', JSON.stringify(res)); typeof params.fail == 'function' && params.fail(res); } @@ -274,6 +300,17 @@ export default { }, upload(params) { console.log('[HTTP][REQUEST] upload', Config.baseUrl + params.url, 'name=', params.name || 'file'); + // ✅ 关键修复:uni.uploadFile **绝对不能手动设置 Content-Type**! + // 因为 uni.uploadFile 会自动设置成 multipart/form-data; boundary=----xxxxxx + // 手动设置会覆盖掉 boundary,后端无法解析分段上传,导致文件/表单字段解析为空 + var uploadHeader = {}; + // 只合并调用方传的自定义 header,不默认加 content-type + if (params.header && typeof params.header === 'object') { + Object.assign(uploadHeader, params.header); + // 兜底:如果调用方误传了 content-type,就删掉,让 uni 自动设置 multipart/form-data + delete uploadHeader['content-type']; + delete uploadHeader['Content-Type']; + } uni.uploadFile({ url: Config.baseUrl + params.url, filePath: params.filePath, @@ -282,10 +319,10 @@ export default { formData: { app_type: appType, app_type_name: appTypeName, + token: store.state.token || '', + uniacid: uni.getStorageSync('uniacid') || Config.uniacid }, - header: { - 'content-type': 'application/x-www-form-urlencoded;application/json' - }, + header: uploadHeader, success: (res) => { console.log('[HTTP][RESPONSE] upload', Config.baseUrl + params.url, 'statusCode=', res.statusCode, res.data); typeof params.success == 'function' && params.success(JSON.parse(res.data)); diff --git a/common/js/util.js b/common/js/util.js index 6dd3f7f..535d835 100644 --- a/common/js/util.js +++ b/common/js/util.js @@ -1481,7 +1481,7 @@ export default { // title/enable_set_title/page_params 仍需透传到目标 URL,page_params 放最后 // ✅ 内部页:把推荐码写进 page_params(最终会被拼成 URL query,diy-form onLoad options 能收到) - // 仅在当前登录已拿到推荐码时追加,不覆盖上游已有值;双写 recommend_code(老师标准)+ invite(历史兼容) + // 仅在当前登录已拿到推荐码时追加,不覆盖上游已有值;双写 recommend_code+ invite(历史兼容) var _curRecommendCode = _getCurrentRecommendCode(); if (_curRecommendCode) { if (!link.page_params || typeof link.page_params !== 'object') link.page_params = {}; diff --git a/components-diy/components-recommend-diy.vue b/components-diy/components-recommend-diy.vue new file mode 100644 index 0000000..389d858 --- /dev/null +++ b/components-diy/components-recommend-diy.vue @@ -0,0 +1,1179 @@ + + + + +