From d8c90bd3a12d7e04e7731e9965362ab6da233b3b Mon Sep 17 00:00:00 2001 From: qijq <624811160@qq.com> Date: Fri, 11 Jul 2025 00:19:56 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E7=BB=8F=E8=90=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.hbuilderx/launch.json | 32 +- java-mall-app-shop-admin/api/order.js | 89 + .../api/warehouse/productList.js | 72 + .../components/tabbar/tabbar.vue | 22 + .../components/tui-gallery/tui-gallery.vue | 212 ++ .../tui-navigation-bar/tui-navigation-bar.vue | 258 +++ .../components/tui-upload/tui-upload.vue | 613 +++++ java-mall-app-shop-admin/pages.json | 50 +- .../pages/audit/checkAudit.vue | 54 +- .../pages/audit/mapAddress.vue | 1 - .../pages/audit/shop1.vue | 12 +- .../pages/audit/shop2.vue | 187 +- .../pages/audit/shop3.vue | 32 +- .../pages/index/index.vue | 13 +- .../pages/login/login.vue | 31 +- .../pages/my/shopQRcode/shopQRcode.vue | 6 +- .../oz-timePicker/oz-timePicker.vue | 290 ++- .../updateBusinessTime.vue | 78 +- .../pages/order/order.vue | 779 ++++++- .../pages/warehouse/manage/batch.vue | 1988 +++++++++++++++++ .../pages/warehouse/manage/batchSearch.vue | 810 +++++++ .../pages/warehouse/manage/brandList.vue | 0 .../pages/warehouse/manage/classifyList.vue | 0 .../components/tui-collapse/tui-collapse.vue | 187 ++ .../pages/warehouse/manage/photoGallery.vue | 0 .../pages/warehouse/manage/productList.vue | 974 ++++++++ .../pages/warehouse/warehouse.vue | 129 ++ .../static/font/iconfont.css | 51 +- .../static/font/iconfont.ttf | Bin 8792 -> 12432 bytes .../static/font/iconfont.woff | Bin 5836 -> 7948 bytes .../static/font/iconfont.woff2 | Bin 4936 -> 6752 bytes .../static/no-commodity.png | Bin 0 -> 26312 bytes .../static/warehouse/asdsad.png | Bin 0 -> 4155 bytes .../static/warehouse/brand-1.png | Bin 0 -> 4954 bytes .../static/warehouse/brand-2.png | Bin 0 -> 76457 bytes .../static/warehouse/brand-3.png | Bin 0 -> 4556 bytes .../static/warehouse/classify.png | Bin 0 -> 6232 bytes .../static/warehouse/photo-gallery-1.png | Bin 0 -> 4326 bytes .../static/warehouse/photo-gallery.png | Bin 0 -> 3347 bytes java-mall-app-shop-admin/store/index.js | 2 - .../store/modules/account.js | 44 - .../store/modules/user.js | 45 +- .../uview-ui/components/u-tabs/u-tabs.vue | 3 +- java-mall-app-shop-admin/utils/exif.js | 1144 ++++++++++ java-mall-app-shop-admin/utils/tupian.js | 262 +++ 45 files changed, 7977 insertions(+), 493 deletions(-) create mode 100644 java-mall-app-shop-admin/api/warehouse/productList.js create mode 100644 java-mall-app-shop-admin/components/tui-gallery/tui-gallery.vue create mode 100644 java-mall-app-shop-admin/components/tui-navigation-bar/tui-navigation-bar.vue create mode 100644 java-mall-app-shop-admin/components/tui-upload/tui-upload.vue create mode 100644 java-mall-app-shop-admin/pages/warehouse/manage/batch.vue create mode 100644 java-mall-app-shop-admin/pages/warehouse/manage/batchSearch.vue create mode 100644 java-mall-app-shop-admin/pages/warehouse/manage/brandList.vue create mode 100644 java-mall-app-shop-admin/pages/warehouse/manage/classifyList.vue create mode 100644 java-mall-app-shop-admin/pages/warehouse/manage/components/tui-collapse/tui-collapse.vue create mode 100644 java-mall-app-shop-admin/pages/warehouse/manage/photoGallery.vue create mode 100644 java-mall-app-shop-admin/pages/warehouse/manage/productList.vue create mode 100644 java-mall-app-shop-admin/pages/warehouse/warehouse.vue create mode 100644 java-mall-app-shop-admin/static/no-commodity.png create mode 100644 java-mall-app-shop-admin/static/warehouse/asdsad.png create mode 100644 java-mall-app-shop-admin/static/warehouse/brand-1.png create mode 100644 java-mall-app-shop-admin/static/warehouse/brand-2.png create mode 100644 java-mall-app-shop-admin/static/warehouse/brand-3.png create mode 100644 java-mall-app-shop-admin/static/warehouse/classify.png create mode 100644 java-mall-app-shop-admin/static/warehouse/photo-gallery-1.png create mode 100644 java-mall-app-shop-admin/static/warehouse/photo-gallery.png delete mode 100644 java-mall-app-shop-admin/store/modules/account.js create mode 100644 java-mall-app-shop-admin/utils/exif.js create mode 100644 java-mall-app-shop-admin/utils/tupian.js diff --git a/java-mall-app-shop-admin/.hbuilderx/launch.json b/java-mall-app-shop-admin/.hbuilderx/launch.json index 007bebb..131b491 100644 --- a/java-mall-app-shop-admin/.hbuilderx/launch.json +++ b/java-mall-app-shop-admin/.hbuilderx/launch.json @@ -4,24 +4,20 @@ "version" : "0.0", "configurations" : [ { - "app-plus" : - { - "launchtype" : "remote" - }, - "default" : - { - "launchtype" : "local" - }, - "h5" : - { - "launchtype" : "local" - }, - "mp-weixin" : - { - "launchtype" : "local" - }, - "provider" : "aliyun", - "type" : "uniCloud" + "app-plus" : { + "launchtype" : "remote" + }, + "default" : { + "launchtype" : "local" + }, + "h5" : { + "launchtype" : "local" + }, + "mp-weixin" : { + "launchtype" : "local" + }, + "provider" : "aliyun", + "type" : "uniCloud" }, { "playground" : "custom", diff --git a/java-mall-app-shop-admin/api/order.js b/java-mall-app-shop-admin/api/order.js index 0a87857..872b96e 100644 --- a/java-mall-app-shop-admin/api/order.js +++ b/java-mall-app-shop-admin/api/order.js @@ -25,6 +25,95 @@ export function GetOrderList(params) { }); } +/** + * 获取退货订单列表 + * @author Seven + * @data 2025-3-28 + * @param { + * storeId: 1, //店铺Id + * keyword: 'DD-', //搜索订单关键字 + * pageNum: 1, //页码 + * pageSize: 10, //页大小 + * delivery: 1, // 1-同城配送;2-物流配送 + * status: 1, 1-进行中;2-超时的订单;3-退款的订单 + * } + * @returns { } + * @see https://mall.gpxscs.cn/api/admin/shop/shop-order-return/list?pageNum=1&pageSize=20&order_id=&return_id=&startDate=&endDate=&source_lang=zh_CN + */ + +export function GetSalesReturnOrderList(params) { + return http({ + url: "/shop/shop-order-return/list", + method: "get", + params, + baseURL: config.adminApi, + }); +} + +/** + * 获取退货订单详情 + * @author Seven + * @data 2025-3-28 + * @param { + * return_id: FX-20241223-4 退货订单编号 + * } + * @returns { } + * @see https://mall.gpxscs.cn/api/admin/shop/shop-order-return/get?return_id=FX-20241223-4&source_lang=zh_CN + */ + +export function GetSalesReturnOrderDetails(params) { + return http({ + url: "/shop/shop-order-return/get", + method: "get", + params, + baseURL: config.adminApi, + }); +} + +/** + * 退货订单不通过 + * @author Seven + * @data 2025-3-28 + * @param { + * return_store_message: "" , 备注 + * return_id: FX-20241223-4 退货订单编号 + * } + * @returns { } + * @see https://mall.gpxscs.cn/api/admin/shop/shop-order-return/refused?source_lang=zh_CN + */ + +export function GetSalesReturnOrderNoPass(params) { + return http({ + url: "/shop/shop-order-return/refused", + method: "post", + params, + baseURL: config.adminApi, + }); +} + +/** + * 退货订单不通过 + * @author Seven + * @data 2025-3-28 + * @param { + * return_flag: 0 不用退货 1需要退货 + * return_store_message: "" , 备注 + * receiving_address:2 + * return_id: FX-20241223-4 退货订单编号 + * } + * @returns { } + * @see https://mall.gpxscs.cn/api/admin/shop/shop-order-return/review?source_lang=zh_CN + */ + +export function GetSalesReturnOrderPass(params) { + return http({ + url: "/shop/shop-order-return/review", + method: "post", + params, + baseURL: config.adminApi, + }); +} + /** * 获取订单列表 模拟数据 **/ diff --git a/java-mall-app-shop-admin/api/warehouse/productList.js b/java-mall-app-shop-admin/api/warehouse/productList.js new file mode 100644 index 0000000..6aafee6 --- /dev/null +++ b/java-mall-app-shop-admin/api/warehouse/productList.js @@ -0,0 +1,72 @@ +import http from "../../utils/http"; +import config from "../../config/config"; + +/** 获取店铺商品分类 + * + * @author Seven + * @data 2025-7-4 + * @returns { } + * @see https://mall.gpxscs.cn/api/admin/shop/shop-base-product-category/tree?source_lang=zh_CN + */ + +export function GetProductCategoryTree() { + return http({ + url: "/shop/shop-base-product-category/tree", + method: "get", + baseURL: config.adminApi, + }); +} + +/** 获取店铺商品列表 + * + * @author Seven + * @data 2025-7-4 + * @param { pageNum pageSize kind_id product_src category_id } + * @returns { } + * @see https://mall.gpxscs.cn/api/admin/shop/shop-product-base/list?pageNum=1&pageSize=20&kind_id=1201,1202,1203&product_src=false&category_id=&source_lang=zh_CN + */ + +export function GetProductList(params) { + return http({ + url: "/shop/shop-product-base/list", + method: "get", + params, + baseURL: config.adminApi, + }); +} + +/** 更新商品上下架 + * + * @author Seven + * @data 2025-7-6 + * @param { pageNum pageSize kind_id product_src category_id } + * @returns { } + * @see https://mall.gpxscs.cn/api/admin/shop/shop-product-base/editState?source_lang=zh_CN + */ + +export function UpdateProductPutaway(params) { + return http({ + url: "/shop/shop-product-base/editState", + method: "post", + params, + baseURL: config.adminApi, + }); +} + +/** 删除商品 + * + * @author Seven + * @data 2025-7-6 + * @param { product_id } + * @returns { } + * @see https://mall.gpxscs.cn/api/admin/shop/shop-product-base/deleteBatch + */ + +export function DelectCommodity(params) { + return http({ + url: "/shop/shop-product-base/deleteBatch", + method: "post", + params, + baseURL: config.adminApi, + }); +} diff --git a/java-mall-app-shop-admin/components/tabbar/tabbar.vue b/java-mall-app-shop-admin/components/tabbar/tabbar.vue index 34a5283..567f497 100644 --- a/java-mall-app-shop-admin/components/tabbar/tabbar.vue +++ b/java-mall-app-shop-admin/components/tabbar/tabbar.vue @@ -25,6 +25,22 @@ color="#000" > + + + + + + {{currentIndex+1}}/{{getLen}} + + + + + + + {{getDesc(currentIndex,imgUrls)}} + + + 删除 + + + + + + + diff --git a/java-mall-app-shop-admin/components/tui-navigation-bar/tui-navigation-bar.vue b/java-mall-app-shop-admin/components/tui-navigation-bar/tui-navigation-bar.vue new file mode 100644 index 0000000..7db07ea --- /dev/null +++ b/java-mall-app-shop-admin/components/tui-navigation-bar/tui-navigation-bar.vue @@ -0,0 +1,258 @@ + + + + + \ No newline at end of file diff --git a/java-mall-app-shop-admin/components/tui-upload/tui-upload.vue b/java-mall-app-shop-admin/components/tui-upload/tui-upload.vue new file mode 100644 index 0000000..1b7fadf --- /dev/null +++ b/java-mall-app-shop-admin/components/tui-upload/tui-upload.vue @@ -0,0 +1,613 @@ + + + + + \ No newline at end of file diff --git a/java-mall-app-shop-admin/pages.json b/java-mall-app-shop-admin/pages.json index 4410740..e43654a 100644 --- a/java-mall-app-shop-admin/pages.json +++ b/java-mall-app-shop-admin/pages.json @@ -1,6 +1,5 @@ { "pages": [ - //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages { "path": "pages/login/launch", "style": { @@ -91,8 +90,6 @@ "path": "pages/order/order", "style": { "navigationStyle": "custom" - // "onReachBottomDistance": 105, - // "enablePullDownRefresh": true } }, { @@ -197,6 +194,42 @@ "navigationBarTitleText": "网址" } }, + { + "path": "pages/warehouse/warehouse", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/warehouse/manage/productList", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/warehouse/manage/brandList", + "style": { + "navigationBarTitleText": "品牌管理" + } + }, + { + "path": "pages/warehouse/manage/photoGallery", + "style": { + "navigationBarTitleText": "商品图库" + } + }, + { + "path": "pages/warehouse/manage/classifyList", + "style": { + "navigationBarTitleText": "分类管理" + } + }, + { + "path": "pages/warehouse/manage/batch", + "style": { + "navigationStyle": "custom" + } + }, { "path": "pages/my/versions", "style": { @@ -232,6 +265,17 @@ }, "text": "工作台" }, + { + "pagePath": "pages/warehouse/warehouse", + "iconfont": { + "text": "\ue606", + "selectedText": "\ue606", + "selectedColor": "#fe4119", + "color": "#000", + "fontSize": "20px" + }, + "text": "经营" + }, { "pagePath": "pages/IM/IM", "iconfont": { diff --git a/java-mall-app-shop-admin/pages/audit/checkAudit.vue b/java-mall-app-shop-admin/pages/audit/checkAudit.vue index 8956c3a..c8839dc 100644 --- a/java-mall-app-shop-admin/pages/audit/checkAudit.vue +++ b/java-mall-app-shop-admin/pages/audit/checkAudit.vue @@ -315,10 +315,9 @@ class="id-radio-group" @change="handelRaddio" > - + -
+ -
+
11) { - params.mobile = this.userInfo.user_mobile.slice(2); - } else { - params.mobile = this.userInfo.user_mobile; - } + params.mobile = this.userInfo.user_mobile.startsWith("+86") + ? this.userInfo.user_mobile.replace("+86", "") + : this.userInfo.user_mobile; let res = await GetAuditInfo(params); if (res && res.status == 200) { @@ -602,11 +595,11 @@ export default { approval_invalid_col: [], }; - if(this.isPassAudit){ - uni.switchTab({ - url: "/pages/order/order", - }); - return + if (this.isPassAudit) { + uni.switchTab({ + url: "/pages/order/order", + }); + return; } if (!res.data || res.data.approval_status == 4) { @@ -818,7 +811,7 @@ export default { var ocr = await this.getOcrText( imgUrl, fileImg, - orcImgTypeConf.ID_CARD_FRONT + orcImgTypeConf.FR_ID_CARD_FRONT ); this.auditInfo.approval_invalid_col.forEach((item) => { if ( @@ -1058,23 +1051,24 @@ export default { const batchNoRes = await batchNoApi(filePath, file, type); const batchNo = batchNoRes.batchNo; + // 兼容多端的表单数据处理方式 + let formDataStr; + //#ifdef H5 const formData = new FormData(); - let formDataStr = ""; - formData.append("batchNo", batchNo); formData.append("imgType", type); + formDataStr = new URLSearchParams(formData).toString(); + //#endif + + //#ifdef APP-PLUS + formDataStr = `batchNo=${encodeURIComponent( + batchNo + )}&imgType=${encodeURIComponent(type)}`; + //#endif clearTimeout(this.orcTimeout); this.orcTimeout = setTimeout(async () => { - formData.forEach((value, key) => { - if (formDataStr !== "") { - formDataStr += "&"; - } - formDataStr += - encodeURIComponent(key) + "=" + encodeURIComponent(value); - }); - const imgOcrRes = await imgOcrResultApi(formDataStr); clearTimeout(this.orcTimeout); resolve(imgOcrRes?.data); diff --git a/java-mall-app-shop-admin/pages/audit/mapAddress.vue b/java-mall-app-shop-admin/pages/audit/mapAddress.vue index 9bbb22b..cb94598 100644 --- a/java-mall-app-shop-admin/pages/audit/mapAddress.vue +++ b/java-mall-app-shop-admin/pages/audit/mapAddress.vue @@ -166,7 +166,6 @@ export default { this.searchAddressList.forEach((item) => { if (item.name.indexOf(value) >= 0) { - console.log("aa"); item.searchName = item.name.replace( new RegExp(value, "g"), "" + value + "" diff --git a/java-mall-app-shop-admin/pages/audit/shop1.vue b/java-mall-app-shop-admin/pages/audit/shop1.vue index 74a60e0..806bbb8 100644 --- a/java-mall-app-shop-admin/pages/audit/shop1.vue +++ b/java-mall-app-shop-admin/pages/audit/shop1.vue @@ -326,15 +326,9 @@ export default { let userInfo = uni.getStorageSync("userInfo"); let locationItem = uni.getStorageSync("locationItem"); - // userInfo.user_mobile = userInfo.user_mobile.slice(2); - - let isContain = userInfo.user_mobile.indexOf("86"); - - if (isContain != -1 && userInfo.user_mobile.length > 11) { - params.mobile = userInfo.user_mobile.slice(2); - } else { - params.mobile = userInfo.user_mobile; - } + params.mobile = userInfo.user_mobile.startsWith("+86") + ? userInfo.user_mobile.replace("+86", "") + : userInfo.user_mobile; const storeArea = locationItem.administrativeRegion.label[0] + diff --git a/java-mall-app-shop-admin/pages/audit/shop2.vue b/java-mall-app-shop-admin/pages/audit/shop2.vue index 0c0608e..109472c 100644 --- a/java-mall-app-shop-admin/pages/audit/shop2.vue +++ b/java-mall-app-shop-admin/pages/audit/shop2.vue @@ -483,7 +483,7 @@ const orcImgTypeConf = { ID_CARD_FRONT: "ID_CARD_FRONT", // 个人身份证正面 ID_CARD_BEHIND: "ID_CARD_BEHIND", // 个人身份证反面 BUSINESS_LICENCE: "BUSINESS_LICENCE", // 营业执照 - BANK_CARD: "BANK_CARD", + BANK_CARD: "BANK_CARD", // 银行卡 }; export default { @@ -558,7 +558,7 @@ export default { action: "", limitType: ["png", "jpg", "jpeg"], //允许的图片后缀 fileMaxSize: 1 * 1024 * 1024, // 超出1M开启压缩 - maxSize: 20 * 1024 * 1024, //图片最大不能超过20M + maxSize: 10 * 1024 * 1024, //图片最大不能超过10M fileMinSize: 5 * 1024, // 最小为5KB fileList: [], fileList2: [], @@ -723,7 +723,7 @@ export default { uni.navigateBack(); }, overSize(e) { - uni.$u.toast("上传图片大小不能超过20MB!"); + uni.$u.toast("上传图片大小不能超过10MB!"); }, compressImage(url) { return new Promise((reslove, reject) => { @@ -733,6 +733,7 @@ export default { src: tempFilePath, quality: 75, //压缩的程度 success: (res) => { + console.log("压缩成功", res); reslove(res.tempFilePath); //压缩成功返回的路径 }, fail: (error) => { @@ -742,13 +743,13 @@ export default { }); }); }, + async getOcrText(filePath, file, type) { return new Promise(async (resolve, reject) => { this.loading = true; //#ifdef APP-PLUS try { filePath = await this.compressImage(filePath); - console.log("路径", filePath); } catch (error) { console.log(error); } @@ -764,87 +765,94 @@ export default { console.log("OCR上图图片压缩后为:", size); //#endif - - const batchNoRes = await batchNoApi(filePath, file, type); - - if (!batchNoRes) { - this.loading = false; - reject(batchNoRes); - } - - const batchNo = batchNoRes.batchNo; - - const formData = new FormData(); - let formDataStr = ""; - - formData.append("batchNo", batchNo); - formData.append("imgType", type); - - clearTimeout(this.orcTimeout); - - this.orcTimeout = setTimeout(async () => { - formData.forEach((value, key) => { - if (formDataStr !== "") { - formDataStr += "&"; - } - formDataStr += - encodeURIComponent(key) + "=" + encodeURIComponent(value); - }); - - const imgOcrRes = await imgOcrResultApi(formDataStr); - if (imgOcrRes.status == 250) { - switch (type) { - case "FR_ID_CARD_FRONT": - uni.showToast({ - title: "上传身份证正面图片错误,请重新上传", - icon: "error", - duration: 2000, - }); - this.form.legal_person_id_images == ""; - this.fileList3 = []; - break; - case "FR_ID_CARD_BEHIND": - uni.showToast({ - title: "上传身份证反面图片错误,请重新上传", - icon: "error", - duration: 2000, - }); - this.form.legal_person_id_images2 == ""; - this.fileList4 = []; - break; - case "ID_CARD_FRONT": - uni.showToast({ - title: "上传身份证正面图片错误,请重新上传", - icon: "error", - duration: 2000, - }); - this.form2.individual_id_images == ""; - this.fileList5 = []; - break; - case "ID_CARD_BEHIND": - uni.showToast({ - title: "上传身份证反面图片错误,请重新上传", - icon: "error", - duration: 2000, - }); - this.form2.individual_id_images2 == ""; - this.fileList6 = []; - break; - case "BUSINESS_LICENCE": - uni.showToast({ - title: "营业图片上传有误,请重新上传", - icon: "error", - duration: 2000, - }); - this.form.biz_license_image == ""; - this.fileList = []; - break; - } + try { + const batchNoRes = await batchNoApi(filePath, file, type); + console.log("batchNoRes", batchNoRes); + if (!batchNoRes) { + this.loading = false; + reject(batchNoRes); } + + const batchNo = batchNoRes.batchNo; + + // 兼容多端的表单数据处理方式 + let formDataStr; + //#ifdef H5 + const formData = new FormData(); + formData.append("batchNo", batchNo); + formData.append("imgType", type); + formDataStr = new URLSearchParams(formData).toString(); + //#endif + + //#ifdef APP-PLUS + formDataStr = `batchNo=${encodeURIComponent( + batchNo + )}&imgType=${encodeURIComponent(type)}`; + //#endif + clearTimeout(this.orcTimeout); - this.loading = false; - resolve(imgOcrRes?.data); - }, 1000); + + this.orcTimeout = setTimeout(async () => { + const imgOcrRes = await imgOcrResultApi(formDataStr); + console.log("imgOcrRes", imgOcrRes); + if (imgOcrRes.status == 250) { + switch (type) { + case "FR_ID_CARD_FRONT": + uni.showToast({ + title: "上传身份证正面图片错误,请重新上传", + icon: "none", + duration: 2000, + }); + + this.form.legal_person_id_images = ""; + this.fileList3.splice(0, 1); + console.log(this.fileList3); + break; + case "FR_ID_CARD_BEHIND": + uni.showToast({ + title: "上传身份证反面图片错误,请重新上传", + icon: "none", + duration: 2000, + }); + this.form.legal_person_id_images2 = ""; + this.fileList4.splice(0, 1); + break; + case "ID_CARD_FRONT": + uni.showToast({ + title: "上传身份证正面图片错误,请重新上传", + icon: "none", + duration: 2000, + }); + this.form2.individual_id_images = ""; + this.fileList5.splice(0, 1); + break; + case "ID_CARD_BEHIND": + uni.showToast({ + title: "上传身份证反面图片错误,请重新上传", + icon: "none", + duration: 2000, + }); + this.form2.individual_id_images2 = ""; + this.fileList6.splice(0, 1); + break; + case "BUSINESS_LICENCE": + uni.showToast({ + title: "营业图片上传有误,请重新上传", + icon: "none", + duration: 2000, + }); + this.form.biz_license_image = ""; + this.fileList.splice(0, 1); + break; + } + } + clearTimeout(this.orcTimeout); + this.loading = false; + resolve(imgOcrRes?.data); + }, 1000); + } catch (error) { + console.log(error); + } }); }, /**判断文件类型是否正确 */ @@ -942,8 +950,9 @@ export default { var ocr = await this.getOcrText( imgUrl, item, - orcImgTypeConf.ID_CARD_FRONT + orcImgTypeConf.FR_ID_CARD_FRONT ); + this.form.legal_person_name = ocr.name; this.form.legal_person_id_number = ocr.idNumber; this.form.legal_person_id_addr = ocr.address; @@ -1367,5 +1376,15 @@ page { margin-right: 20rpx; width: 240rpx; } + + ::v-deep.u-upload__deletable { + width: 40rpx; + height: 40rpx; + + .uicon-close { + font-size: 28rpx !important; + top: 8rpx !important; + } + } } diff --git a/java-mall-app-shop-admin/pages/audit/shop3.vue b/java-mall-app-shop-admin/pages/audit/shop3.vue index caeb1fd..c6211d5 100644 --- a/java-mall-app-shop-admin/pages/audit/shop3.vue +++ b/java-mall-app-shop-admin/pages/audit/shop3.vue @@ -120,12 +120,12 @@ placeholder="搜索开户银行关键词" @change="onBranchBankChange" /> -
+ -
+
@@ -261,7 +261,7 @@ export default { }, limitType: ["png", "jpg", "jpeg"], //允许的图片后缀 fileMaxSize: 1 * 1024 * 1024, // 超出1M开启压缩 - maxSize: 5 * 1024 * 1024, //图片最大不能超过20M + maxSize: 10 * 1024 * 1024, //图片最大不能超过20M fileMinSize: 5 * 1024, // 最小为5KB showTips: false, }; @@ -288,7 +288,7 @@ export default { uni.navigateBack(); }, overSize(e) { - uni.$u.toast("上传图片大小不能超过20MB!"); + uni.$u.toast("上传图片大小不能超过10MB!"); }, compressImage(url) { return new Promise((reslove, reject) => { @@ -331,24 +331,24 @@ export default { this.bankCardOcrLoaded = true; reject(batchNoRes); } - + // 兼容多端的表单数据处理方式 + let formDataStr; + //#ifdef H5 const formData = new FormData(); - let formDataStr = ""; - formData.append("batchNo", batchNo); formData.append("imgType", type); + formDataStr = new URLSearchParams(formData).toString(); + //#endif + + //#ifdef APP-PLUS + formDataStr = `batchNo=${encodeURIComponent( + batchNo + )}&imgType=${encodeURIComponent(type)}`; + //#endif clearTimeout(this.orcTimeout); this.orcTimeout = setTimeout(async () => { - formData.forEach((value, key) => { - if (formDataStr !== "") { - formDataStr += "&"; - } - formDataStr += - encodeURIComponent(key) + "=" + encodeURIComponent(value); - }); - const imgOcrRes = await imgOcrResultApi(formDataStr); if (imgOcrRes?.status == 200) { diff --git a/java-mall-app-shop-admin/pages/index/index.vue b/java-mall-app-shop-admin/pages/index/index.vue index c6fcfd2..7582cf3 100644 --- a/java-mall-app-shop-admin/pages/index/index.vue +++ b/java-mall-app-shop-admin/pages/index/index.vue @@ -32,13 +32,10 @@ export default { onShow() { if (this.userInfo && Object.keys(this.userInfo).length > 0) { var _userinfo = JSON.parse(JSON.stringify(this.userInfo)); - var mobile = ""; - let isContain = _userinfo.user_mobile.indexOf("86"); - if (isContain != -1 && _userinfo.user_mobile.length > 11) { - mobile = _userinfo.user_mobile.slice(2); - } else { - mobile = _userinfo.user_mobile; - } + let mobile = ""; + mobile = _userinfo.user_mobile.startsWith("+86") + ? _userinfo.user_mobile.replace("+86", "") + : _userinfo.user_mobile; this.checkAccountIsPass({ userInfo: _userinfo, mobile: mobile }); } }, @@ -131,7 +128,7 @@ export default { border: none; } } - + .btn-register { &::after { border: none; diff --git a/java-mall-app-shop-admin/pages/login/login.vue b/java-mall-app-shop-admin/pages/login/login.vue index 814062d..9f595d8 100644 --- a/java-mall-app-shop-admin/pages/login/login.vue +++ b/java-mall-app-shop-admin/pages/login/login.vue @@ -110,10 +110,7 @@ :maxlength="4" > @@ -169,88 +168,99 @@ export default { }, data() { return { - rangeList: [], - pickerValue: [0, 0, 0, 0], + rangeList: [[], [], [], [], []], // 明确5个子数组 + pickerValue: [0, 0, 0, 0, 0], // 改为5个元素的数组 isScoll: false, // 是否正在滚动 - startTime:"", - endTime:"", - totalTime:"" + startTime: "00:00", + endTime: "00:00", + totalTime: "共0小时0分", + isValidTime: false, }; }, created() { - this.generateRangeLists(); - }, - watch: { - // 监听最大时间限制变化 - maxStartHour() { - this.generateRangeLists(); - }, - maxStartMinute() { - this.generateRangeLists(); - }, - maxEndHour() { - this.generateRangeLists(); - }, - maxEndMinute() { - this.generateRangeLists(); - }, + this.initTimeRanges(); + this.setInitialValue(); }, + methods: { - generateRangeLists() { - const ranges = [[], [], [], []]; + initTimeRanges() { + // 开始小时 (0-23) + this.rangeList[0] = Array.from({ length: 24 }, (_, i) => + i.toString().padStart(2, "0") + ); - // 生成开始小时范围 (0 - maxStartHour) - for (let i = 0; i <= this.maxStartHour; i++) { - ranges[0].push(i >= 10 ? String(i) : `0${i}`); + // 开始分钟 (0-59) + this.rangeList[1] = Array.from({ length: 60 }, (_, i) => + i.toString().padStart(2, "0") + ); + + // 分隔符 + this.rangeList[2] = [this.segmentation]; + + // 结束小时 (0-24) + this.rangeList[3] = Array.from({ length: 25 }, (_, i) => + i.toString().padStart(2, "0") + ); + + // 结束分钟 (初始为00-59) + this.rangeList[4] = Array.from({ length: 60 }, (_, i) => + i.toString().padStart(2, "0") + ); + }, + setInitialValue() { + // 确保value是有效的5元素数组,否则使用默认值 + if (!Array.isArray(this.value) || this.value.length !== 5) { + this.pickerValue = [0, 0, 0, 0, 0]; + return; } - // 生成开始分钟范围 (0 - maxStartMinute) - for (let i = 0; i <= this.maxStartMinute; i++) { - ranges[1].push(i >= 10 ? String(i) : `0${i}`); + // 转换value为pickerValue索引 + this.pickerValue = [ + Math.max(this.rangeList[0].indexOf(this.value[0]), 0), // 开始小时 + Math.max(this.rangeList[1].indexOf(this.value[1]), 0), // 开始分钟 + 0, // 分隔符位置固定为0 + Math.max(this.rangeList[3].indexOf(this.value[3]), 0), // 结束小时 + Math.max(this.rangeList[4].indexOf(this.value[4]), 0), // 结束分钟 + ]; + + // 处理24:00特殊情况 + if (this.value[3] === "24") { + this.pickerValue[4] = 0; + this.rangeList[4] = ["00"]; } - // 生成结束小时范围 (0 - maxEndHour) - for (let i = 0; i <= this.maxEndHour; i++) { - ranges[2].push(i >= 10 ? String(i) : `0${i}`); - } + // 强制更新视图 + this.$nextTick(() => { + this.calculateTimeDifference(); + }); + }, + handle24HourSelection() { + this.pickerValue[4] = 0; // 分钟强制为00 + this.rangeList[4] = ["00"]; // 分钟选项只保留00 + }, - // 生成结束分钟范围 (0 - maxEndMinute) - // 如果结束小时是24,分钟只能是00 - if ( - this.pickerValue && - this.pickerValue[2] === this.rangeList[2]?.length - 1 - ) { - ranges[3] = ["00"]; - } else { - for (let i = 0; i <= this.maxEndMinute; i++) { - ranges[3].push(i >= 10 ? String(i) : `0${i}`); - } + restoreMinuteOptions() { + this.rangeList[4] = Array.from({ length: 60 }, (_, i) => + i.toString().padStart(2, "0") + ); + }, + generateMinutesRange() { + const minutes = []; + for (let i = 0; i <= 59; i++) { + minutes.push(i.toString().padStart(2, "0")); } - this.rangeList = ranges; + return minutes; }, /** * 开启弹窗 */ open() { - this.generateRangeLists(); - - if (Array.isArray(this.value) && this.value.length) { - this.pickerValue = this.value.map((item, index) => { - const i = this.rangeList[index].findIndex( - (child) => Number(child) == Number(this.value[index]) - ); - return i > -1 ? i : 0; - }); - - // If initial end hour is 24, ensure minute is 00 - if (this.pickerValue[2] === this.rangeList[2]?.length - 1) { - this.pickerValue[3] = 0; - this.generateRangeLists(); - } - } else { - this.pickerValue = [0, 0, 0, 0]; - } + this.setInitialValue(); this.$refs.popup.open(); + // 添加延迟确保picker-view正确渲染 + setTimeout(() => { + this.calculateTimeDifference(); + }, 100); }, /** * 关闭弹窗 @@ -264,16 +274,23 @@ export default { * 点击确定 */ onConfirm() { - if (!this.isScoll) { - let data = this.value || ["00", "00", "00", "00"]; - if (this.pickerValue && this.pickerValue.length) { - data = this.pickerValue.map((item, index) => - String(this.rangeList[index][item]) - ); - } - this.$emit("confirm", data); - this.close(); + if (!this.isValidTime) { + uni.showToast({ + title: "开始时间和结束时间至少相差半小时", + icon: "none", + }); + return; } + + const result = [ + this.rangeList[0][this.pickerValue[0]], + this.rangeList[1][this.pickerValue[1]], + this.rangeList[3][this.pickerValue[3]], + this.rangeList[4][this.pickerValue[4]], + ]; + + this.$emit("confirm", result); + this.close(); }, /** * 点击取消 @@ -298,48 +315,84 @@ export default { * @param {Object} e */ bindChange(e) { - const newValue = [...e.detail.value]; - - // 更新 pickerValue + + // 处理24小时选择 + if (newValue[3] === this.rangeList[3].length - 1) { + // 选择24小时 + newValue[4] = 0; // 强制分钟为00 + this.rangeList[4] = ["00"]; + } else if (this.pickerValue[3] === this.rangeList[3].length - 1) { + // 从24小时切换 + this.rangeList[4] = Array.from({ length: 60 }, (_, i) => + i.toString().padStart(2, "0") + ); + } + this.pickerValue = newValue; + this.calculateTimeDifference(); + }, + calculateTimeDifference() { + // 确保获取有效的数值 + const getValidNumber = (val) => (isNaN(val) ? 0 : val); - // 计算 startTime (前两列: 小时和分钟) - const startHour = this.rangeList[0][newValue[0]]; - const startMinute = this.rangeList[1][newValue[1]]; - const startTime = `${startHour}:${startMinute}`; + const startHour = getValidNumber( + parseInt(this.rangeList[0][this.pickerValue[0]]) + ); + const startMinute = getValidNumber( + parseInt(this.rangeList[1][this.pickerValue[1]]) + ); + const endHour = getValidNumber( + parseInt(this.rangeList[3][this.pickerValue[3]]) + ); + let endMinute = getValidNumber( + parseInt(this.rangeList[4][this.pickerValue[4]]) + ); - // 计算 endTime (后两列: 小时和分钟) - const endHour = this.rangeList[3][newValue[3]]; - const endMinute = this.rangeList[4][newValue[4]]; - const endTime = `${endHour}:${endMinute}`; - - // 计算总时长 totalTime - const startDate = new Date(2000, 0, 1, parseInt(startHour), parseInt(startMinute)); - const endDate = new Date(2000, 0, 1, parseInt(endHour), parseInt(endMinute)); - - // 处理跨天情况(如23:00到01:00) - if (endDate < startDate) { - endDate.setDate(endDate.getDate() + 1); + // 处理24:00特殊情况 + if (endHour === 24) { + endMinute = 0; + this.endTime = "24:00"; + } else { + this.endTime = `${endHour.toString().padStart(2, "0")}:${endMinute + .toString() + .padStart(2, "0")}`; } - - const diffMs = endDate - startDate; - const diffHours = Math.floor(diffMs / (1000 * 60 * 60)); - const diffMinutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60)); - - const totalTime = `共${diffHours}小时${diffMinutes}分`; - // 更新到data中以便在模板显示 - this.startTime = startTime; - this.endTime = endTime; - this.totalTime = totalTime; + this.startTime = `${startHour.toString().padStart(2, "0")}:${startMinute + .toString() + .padStart(2, "0")}`; - // 检查是否需要限制分钟选择(如选择24:00时分钟只能是00) - if (newValue[3] === this.rangeList[3]?.length - 1) { // 假设24是最后一小时 - newValue[4] = 0; // 设置为00分钟 - this.pickerValue = newValue; - this.generateRangeLists(); + // 计算时间差(分钟) + const startTotal = startHour * 60 + startMinute; + const endTotal = endHour * 60 + endMinute; + let diffMinutes = endTotal - startTotal; + + // 处理跨天情况 + if (diffMinutes < 0) { + diffMinutes += 1440; // 24小时*60分钟 } + + // 验证时间差 + if (diffMinutes === 0) { + this.totalTime = "开始时间需早于结束时间"; + this.isValidTime = false; + } else if (diffMinutes < 30) { + this.totalTime = "时间差需至少30分钟"; + this.isValidTime = false; + } else { + const hours = Math.floor(diffMinutes / 60); + const minutes = diffMinutes % 60; + this.totalTime = `共${hours}小时${minutes}分`; + this.isValidTime = true; + } + }, + pickstart() { + this.isScoll = true; + }, + + pickend() { + this.isScoll = false; }, }, }; @@ -433,15 +486,15 @@ export default { line-height: 80rpx; } -::v-deep .picker-view{ +::v-deep .picker-view { height: 60%; } -.bottom-content{ +.bottom-content { background: #fff; - box-shadow: 0 0 4rpx 4rpx rgba(0, 0, 0, 0.1); + box-shadow: 0 0 28rpx 4rpx rgba(0, 0, 0, 0.1); - .bottom-time{ + .bottom-time { display: flex; justify-content: space-between; padding: 20rpx 28rpx; @@ -449,10 +502,10 @@ export default { font-weight: bold; } - .bottom-btn{ + .bottom-btn { padding: 28rpx 40rpx 80rpx; - .btn-time{ + .btn-time { background: $base-color; color: #fff; @@ -461,8 +514,5 @@ export default { } } } - - } - diff --git a/java-mall-app-shop-admin/pages/my/storeBusinessStatus/updateBusinessTime.vue b/java-mall-app-shop-admin/pages/my/storeBusinessStatus/updateBusinessTime.vue index 75b5de3..abbaec5 100644 --- a/java-mall-app-shop-admin/pages/my/storeBusinessStatus/updateBusinessTime.vue +++ b/java-mall-app-shop-admin/pages/my/storeBusinessStatus/updateBusinessTime.vue @@ -11,16 +11,28 @@ - 23:30 + {{ storeBaseInfo.info.store_opening_hours }} - 23:30 + {{ storeBaseInfo.info.store_close_hours }} + + + 确认修改 + + @@ -31,6 +43,7 @@ import { GetAccountDashboard } from "../../../api/user"; import { UpdateStoreBizState } from "../../../api/store"; import tuiDatetime from "./tui-datetime/tui-datetime.vue"; import ozTimePicker from "./oz-timePicker/oz-timePicker.vue"; +import { GetShopBaseInfo, UpdataShopInfo } from "@/api/shop"; export default { components: { tuiDatetime, @@ -71,6 +84,13 @@ export default { }, showPopup: false, dateTime: "", + storeBaseInfo: { + info: { + store_opening_hours: "", + store_close_hours: "", + }, + }, + timeValue: ["00", "00", "至", "00", "00"], }; }, computed: { @@ -79,9 +99,20 @@ export default { }, }, onShow() { + this.getShopBaseInfo(); this.getAccountDashboard(); }, methods: { + async getShopBaseInfo() { + let res = await GetShopBaseInfo(); + if (res && res.status == 200) { + this.storeBaseInfo = res.data; + const startTime = + this.storeBaseInfo.info.store_opening_hours.split(":"); + const endTime = this.storeBaseInfo.info.store_close_hours.split(":"); + this.timeValue = [...startTime, "至", ...endTime]; + } + }, async getAccountDashboard() { let res = await GetAccountDashboard(); if (res && res.status == 200) { @@ -95,6 +126,26 @@ export default { closeTimePopup() { this.showPopup = false; }, + handerConfirmTiem(e) { + this.storeBaseInfo.info.store_opening_hours = e[0] + ":" + e[1]; + this.storeBaseInfo.info.store_close_hours = e[2] + ":" + e[3]; + }, + async updateStoreBizState() { + var params = { + store_id: this.storeBaseInfo.store_id, + store_opening_hours: this.storeBaseInfo.info.store_opening_hours, + store_close_hours: this.storeBaseInfo.info.store_close_hours, + store_biz_state: this.storeBaseInfo.store_biz_state, + }; + + let res = await UpdateStoreBizState(params); + if (res && res.status == 200) { + uni.showToast({ + title: "修改成功", + icon: "success", + }); + } + }, }, }; @@ -150,6 +201,7 @@ export default { padding: 36rpx 40rpx; border-radius: 24rpx; background: #f5f6fa; + font-weight: 500; } } @@ -166,5 +218,25 @@ export default { } } } + + .business-time-bottm { + position: fixed; + left: 0; + bottom: 0; + width: 90%; + background: #fff; + box-shadow: 0 0 28rpx 4rpx rgba(0, 0, 0, 0.1); + + padding: 28rpx 40rpx 80rpx; + + .btn-time { + background: $base-color; + color: #fff; + border: none; + &::after { + border: none; + } + } + } } diff --git a/java-mall-app-shop-admin/pages/order/order.vue b/java-mall-app-shop-admin/pages/order/order.vue index 53bf170..a9083a6 100644 --- a/java-mall-app-shop-admin/pages/order/order.vue +++ b/java-mall-app-shop-admin/pages/order/order.vue @@ -30,7 +30,7 @@ :width="300" :currentTab="currentTab2" @change="handleTab2" - backgroundColor="#f5f5f5" + backgroundColor="#fff" :height="88" unlined :sliderWidth="150" @@ -42,10 +42,7 @@ sliderBgColor="#fe4119" > - + --> + + + {{ item.label }} + + - + 正在加载... @@ -325,7 +338,7 @@ 暂无交易记录! @@ -416,7 +429,7 @@ {{ item.order_pickup_num_str }} - 备注: + 备注: {{ item.buyer_info.order_message }} @@ -543,11 +556,11 @@ - + {{ item.showRefundOrderInfo ? "收起订单" : "展开订单" }} - + 正在加载... @@ -575,7 +588,7 @@ 暂无交易记录! @@ -590,12 +603,13 @@ animation="spinner15" > @@ -620,10 +634,10 @@ font-weight: bold; " > - 3 + {{ item.orderNum }} - 订单号:{{ item.order_id }} + 退货单号:{{ item.return_id }} @@ -631,11 +645,11 @@ {{ sfFormatStatus(item.order_state_id) }} - + - + + - 备注: - 【如遇缺货】:缺货时请与我电话联系 + 退货理由: + {{ item.return_buyer_message }} + + + 退货凭据 + + + - {{ commodityArr.length }} + + {{ item.detailsInfo.items[0].return_item_num }} + 件商品 - + - {{ item.name }} - + {{ group.product_name }} + + X - {{ item.num }} + + {{ group.return_item_num }} + + + + ¥{{ group.return_item_subtotal }} - ¥{{ item.price }} - + - + + - 预计收入 + 实际退款总额 - ¥24.95 + {{ item.return_refund_amount }} + 元 - + - - 拒绝退款 - 同意退款 + + + 拒绝退款 + + + 同意退款 + - - {{ item.showRefundOrderInfo ? "收起订单" : "展开订单" }} - + + {{ item.return_state_name }} + + + {{ item.return_add_time }} + + {{ item.showRefundOrderInfo ? "收起订单" : "展开订单" }} + + - - + + 正在加载... @@ -790,26 +882,101 @@ 暂无交易记录! + + + + + {{ returnOrderType == "pass" ? "退货确认" : "拒绝退款" }} + + + 退货类型: + + + + + {{ item.name }} + + + + + + + + + + 取消 + + + 确认 + + + + @@ -1178,7 +1610,7 @@ export default { @import "@/styles/variables.scss"; .index-container { // overflow: hidden; - background: #f5f5f5; + background: #eeeff3; min-height: 100vh; .shop-info { display: flex; @@ -1207,12 +1639,23 @@ export default { } .tab-content { - margin-bottom: 20rpx; + padding-bottom: 20rpx; background: #fff; } .tab2-content { - background: #f5f5f5; + background: #fff; + } + + .sales-return-img-title { + margin: 20rpx; + font-weight: bold; + } + + .sales-return-img-list { + display: flex; + flex-wrap: wrap; + margin: 40rpx 20rpx; } .search-contetn { @@ -1232,11 +1675,37 @@ export default { } } + .sales-retrun-btn-list { + margin: 38rpx 24rpx 0; + height: 160rpx; + + .sales-retrun-btn-item { + float: left !important; + height: 60rpx; + margin-left: 20rpx; + margin-bottom: 20rpx; + border: none; + + ::after { + border: none; + } + } + + .active { + background: $base-color; + color: #fff; + } + } + .order-info-content { border-radius: 8rpx; .uni-swiper-list { - height: calc(100vh - 310px); + height: calc(100vh - 320px); + } + + .uni-swiper-return-list { + height: calc(100vh - 350px); } .order-msg-tips { @@ -1324,6 +1793,8 @@ export default { border-bottom: 1px solid #f7f7f7; .user-info { + display: flex; + align-items: center; font-size: 26rpx; margin-bottom: 20rpx; } @@ -1494,6 +1965,14 @@ export default { margin-top: 40rpx; font-size: 26rpx; color: #cccccc; + + .time { + color: #333333; + } + } + + .arrow-item-2 { + justify-content: space-between; } } } @@ -1562,9 +2041,6 @@ export default { } } - .btn-down-list { - } - .tui-animation { display: inline-block; transform: rotate(0deg); @@ -1574,5 +2050,80 @@ export default { .tui-animation-show { transform: rotate(180deg); } + + .icon-phone-fill { + margin-left: 10%; + } + + .retrun-state-name { + color: $base-color; + } + + .return-order-popup { + .return-order-popup-content { + width: 600rpx; + min-height: 600rpx; + + .title { + margin: 36rpx; + text-align: center; + font-weight: bold; + font-size: 36rpx; + } + + .radio-content { + display: flex; + justify-content: space-between; + align-items: center; + margin: 60rpx 40rpx 40rpx; + + .radio-type-name { + font-weight: 500; + } + + .radio-list { + flex: 1; + .radio-group { + display: flex; + align-items: center; + justify-content: space-around; + line-height: 40rpx; + + .radio-name { + margin-left: 8rpx; + } + } + } + } + + .popup-textarea { + margin: 28rpx; + .textarea { + border: 1px solid #eeeff3; + } + } + + .popup-btn-list { + display: flex; + margin: 50rpx; + + .btn-item { + width: 46%; + height: 80rpx; + border-color: #909193; + + &::after { + border: none; + } + } + + .btn-item-2 { + background: $base-color; + color: #fff; + border: none; + } + } + } + } } diff --git a/java-mall-app-shop-admin/pages/warehouse/manage/batch.vue b/java-mall-app-shop-admin/pages/warehouse/manage/batch.vue new file mode 100644 index 0000000..d55bdaf --- /dev/null +++ b/java-mall-app-shop-admin/pages/warehouse/manage/batch.vue @@ -0,0 +1,1988 @@ + + + + + diff --git a/java-mall-app-shop-admin/pages/warehouse/manage/batchSearch.vue b/java-mall-app-shop-admin/pages/warehouse/manage/batchSearch.vue new file mode 100644 index 0000000..c8c50de --- /dev/null +++ b/java-mall-app-shop-admin/pages/warehouse/manage/batchSearch.vue @@ -0,0 +1,810 @@ + + + + + diff --git a/java-mall-app-shop-admin/pages/warehouse/manage/brandList.vue b/java-mall-app-shop-admin/pages/warehouse/manage/brandList.vue new file mode 100644 index 0000000..e69de29 diff --git a/java-mall-app-shop-admin/pages/warehouse/manage/classifyList.vue b/java-mall-app-shop-admin/pages/warehouse/manage/classifyList.vue new file mode 100644 index 0000000..e69de29 diff --git a/java-mall-app-shop-admin/pages/warehouse/manage/components/tui-collapse/tui-collapse.vue b/java-mall-app-shop-admin/pages/warehouse/manage/components/tui-collapse/tui-collapse.vue new file mode 100644 index 0000000..0ac934d --- /dev/null +++ b/java-mall-app-shop-admin/pages/warehouse/manage/components/tui-collapse/tui-collapse.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/java-mall-app-shop-admin/pages/warehouse/manage/photoGallery.vue b/java-mall-app-shop-admin/pages/warehouse/manage/photoGallery.vue new file mode 100644 index 0000000..e69de29 diff --git a/java-mall-app-shop-admin/pages/warehouse/manage/productList.vue b/java-mall-app-shop-admin/pages/warehouse/manage/productList.vue new file mode 100644 index 0000000..a537b7f --- /dev/null +++ b/java-mall-app-shop-admin/pages/warehouse/manage/productList.vue @@ -0,0 +1,974 @@ + + + + + diff --git a/java-mall-app-shop-admin/pages/warehouse/warehouse.vue b/java-mall-app-shop-admin/pages/warehouse/warehouse.vue new file mode 100644 index 0000000..ed81db4 --- /dev/null +++ b/java-mall-app-shop-admin/pages/warehouse/warehouse.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/java-mall-app-shop-admin/static/font/iconfont.css b/java-mall-app-shop-admin/static/font/iconfont.css index 89f7b91..a91cfd8 100644 --- a/java-mall-app-shop-admin/static/font/iconfont.css +++ b/java-mall-app-shop-admin/static/font/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "custom-icon"; /* Project id 4805967 */ - src: url('@/static/font/iconfont.woff2?t=1736404172628') format('woff2'), - url('@/static/font/iconfont.woff?t=1736404172628') format('woff'), - url('@/static/font/iconfont.ttf?t=1736404172628') format('truetype'); + src: url("@/static/font/iconfont.woff2?t=1736404172628") format("woff2"), + url("@/static/font/iconfont.woff?t=1736404172628") format("woff"), + url("@/static/font/iconfont.ttf?t=1736404172628") format("truetype"); } .custom-icon { @@ -21,6 +21,50 @@ -moz-osx-font-smoothing: grayscale; } +.custom-icon-jianhao:before { + content: "\e664"; +} + +.custom-icon-xinjiantuopu:before { + content: "\e83a"; +} + +.custom-icon-piliangcaozuo:before { + content: "\e66a"; +} + +.custom-icon-gongzuotai1:before { + content: "\e660"; +} + +.custom-icon-shangpinguanli:before { + content: "\e666"; +} + +.custom-icon-shangpinpinpai:before { + content: "\e6e6"; +} + +.custom-icon-xiangcetuku:before { + content: "\e63c"; +} + +.custom-icon-fenlei:before { + content: "\fc7d"; +} + +.custom-icon-mianxingtuku:before { + content: "\e60a"; +} + +.custom-icon-icon_shangpindangan_shangpinpinpai:before { + content: "\e60f"; +} + +.custom-icon-yingyezhuangtai:before { + content: "\e605"; +} + .custom-icon-shipin:before { content: "\e629"; } @@ -120,4 +164,3 @@ .custom-icon-password:before { content: "\e61d"; } - diff --git a/java-mall-app-shop-admin/static/font/iconfont.ttf b/java-mall-app-shop-admin/static/font/iconfont.ttf index 8c1d747f8d6a9c73d4de3f933ede33d228b34975..a0c4c9817f9fee8e159af3b6a958cf257f29c511 100644 GIT binary patch delta 4539 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 H_)q75qrZhf delta 916 zcmaKqO-L0{7>3_7e|PRrshOpwajJ)ZsOWdm$60+4uU@eRg zrkyP!s7*f`TeJ`&7bVmpTDb{KJ2RDCI5E{6 zoc;l*y8s3Ti`i1&(}5>|)eG3iuNH1znS3y80qzH&c0QlW4z)g>JH^;VawN|Uf6M*G z`7Fugi=$)L7NSko+u%B17#Yl7%$yVE-`DZQ>{v-1!aU#Ca-AN|7ISBU_vgO?O$@Lm zOC#4uKffw{2ll5KbQFp*#-nlcdwtPn6uB9_^Vg^^?{IhWoqO_9Mb}RxopQkP;nxTB zL_e7uxEcEnmp<4|dFV>@n6;1!n^jRYgj4F6wdRK(RXS|2ZUoNuSzEBnvsOM6RO!IM zC+235=FAaCVv>|Ypa|9Js>P>Ce9Sl9&*)rg}4I}k%1b=RT_DY)2+o!CwNKD(%)x8BSf+fo7Faj35C zlk2on1FJ&lk%sjl^i9K)Ahv;LLblPqif5n>NX$S*5S>G)4Weris)Phpyb%h9=p;hv z5FJR^1fFwg+Vgn?E-rVRmIf$-zT>L4WC$ zbpt)aYPW&zVU25z_K~Bcpx#;!?I!!BbKCjt_PQJ1a_n;Kg+J;)il^hZ;=dAS6ZaB} i$%DyfDK9m|oboT~W~`aM>cT!%AI`OPDumD5zx)9L+0jA( diff --git a/java-mall-app-shop-admin/static/font/iconfont.woff b/java-mall-app-shop-admin/static/font/iconfont.woff index dc5eed4108c259bb2a6c8714c9c5bb484ad376d4..84885ba34f7f554557ab9c5f1bbf7e0f36a7dc3e 100644 GIT binary patch delta 7507 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 dxzbr7qr}Hd0f+zq0TciL z13*=)V5Vnmd1e3r0-OK<5ikG%7|4s9ZUSg!VPpUR6U+br05Jdn05&Y8!bxaoWnlmS z6aWAK03ZMW03-@-v42XD~-IF^~ z0zni-&%ijKpz;xwfGPtMsw@M_(1@6Akg*L`!B$v>OCY#>79rlpBlQ#ey3W+}>z?j@ zeeVDlK;68U5^5y{5ueT$r+l5OQ@-TG{b!#1R;pA(E%i0hSQE`O*FsCJw13uSd)Q6) z&EpY-D$nZtJnPpeyz2|EZg1Z?g zt3T}i-=iIm;{DtkhH8m#6cvf@7S$5pGO8!x8J!`VKkHLaaAWqB1R#@VS=t&@ zB>t6sGhy%r1(|QDc${@O36LDsb^ZUJ>0_?$o}+ta=boPFnVs34o#{Dx5AE!(gpgKR zNxRbS3Ush5gbsw(k|BwVgkdq^NUCC}#DD`NK2jJgTrS%wJ5}Kbq<<jlz&b}pUt+i?cYSJdJqU4rrdS0LLr7z6k2nUY_^uoBG+k7kD}v} zs7jvGn{JedmW-#YuWKWkc;i5>l@00DD0&@;Y%4ceh+C<6p%6!J#tRqe^jemR#!^6@ z#BVYlCcQNCL72GHg&WntydYpm88e3FY;?4gzzm z2=cGWIf}R-3(YzR+#Eq;sA&Q+R3(W`LkW>8YFBqwDmxEQP{|CX(?c65cwY{OwQ%@8 zgp#3eggC+Px8CvlT~6iCm1I)E{~1aSyZH7N&gJ61DQHgKCH%_eVI5iiTbzsFaAn3` z@W4#PdKFe2On;{bVOcao*VMw+4ut+rNtApZHSF=05{kttiG)&*)8){4&c&NN2g~s$ zi(H(w9aMuE=F(f_2@+%0G0Wfy88A9LCWvE#d8z5?KgUw}S&BLhW^)X+V3^YF_aTl& znbkqvX2V{m(WE+r|1#pLEDW^=4IpTu%QWpl&3v_tHGlkXW1Hq5zv}R!%i)&N@m9ni z_P7JO7i9Nx0n8JTIHh1?y`ibH3&oNVe@qdJ4Zq5wfn>4$wiN1#ps-sY{GP@2Gn=P2 z{!TI+@FPr!Pu6mxUlQC7PWGcvcE=rPR1I)Wg}7O-lf|SdOD-X*M3=Un{N=%F&rNe}0d9P0i^DZYw*b$7NsDnL?#*AJq5+ficbZc890Vl)omp;C9hoeF6Wtz;5 z%rWNom{ZJM%O!_)IdECB%`A}8Du7m_i?=qrLhFCvVH8s}tB+^2XA-00svxqtDcYp2XcGAxN@ z-G7+ewvehOv_LW;S-XZa)r=HPMkTa&I8(`pHo2dY@Z3rgU^v$0AV~0+`zCI zrlAqNpXYm`gX`u8jt$*0u0$TW@d+S1aI(nz5wv+&Ub%!57-XMZwbF)B$gdMyQ?0fvG7^Ei2hOfozpGd*Cr z8Hg@+Jc0OUQf*PKtrEyoY-2QRD`cn*LP14^U(G;4+j4mwqAm@-jXJfLVOzzF>Uy(K z_@H1G;CVSen1`qR$%8i?z5dVo%44HPk9~C0k{cNbY>(T`&j(`<1Y?8~gIXjcM#EwxmMM;xvVJjE`0QqK5|*$S z0E;jLo<$%r<=ZDeebdQUP*jW2T)UFppLUpt%4I#7lPfcK-y74)gW6!88(iBHowYItdAmU z1DcefueriCsvRD}3dOMh4G0l*Ho60;Vni@`p}8?C`*^3*Nt{8>DfokKQ3yza&l5=a z!XAjHJwbHZos_K$8Fk7q2Y>r3O|++3=^reYzOl|B@G{HuY>5?kwvSRa=%FmM2>^J3 zEmBGnc*i;i&&LHv)gi-Ai1R$IdEDd1@F2&!IIr8u64v31Ndo7Pyey9(nEIrνaD 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 diff --git a/java-mall-app-shop-admin/static/font/iconfont.woff2 b/java-mall-app-shop-admin/static/font/iconfont.woff2 index d9ed4c17b4386f1dbc45beed5fe7e54ac568599e..b70e6881d3d6e1e1b64c2b66c10084de74ec2f4d 100644 GIT binary patch literal 6752 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 N002ovPDHLkV1gdV9+Ut8 literal 0 HcmV?d00001 diff --git a/java-mall-app-shop-admin/static/warehouse/asdsad.png b/java-mall-app-shop-admin/static/warehouse/asdsad.png new file mode 100644 index 0000000000000000000000000000000000000000..640ef72831fef029dd9dc82f7ed4e926dd461d26 GIT binary patch literal 4155 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

?{9Z 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 UM~LTDp#T5?07*qoM6N<$f}_Xv-T(jq literal 0 HcmV?d00001 diff --git a/java-mall-app-shop-admin/static/warehouse/photo-gallery.png b/java-mall-app-shop-admin/static/warehouse/photo-gallery.png new file mode 100644 index 0000000000000000000000000000000000000000..31bf8890dc3b597be360eae98276570b78d6d5d5 GIT binary patch literal 3347 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 N3_GT6rM2&c{{R>F&xZg2 literal 0 HcmV?d00001 diff --git a/java-mall-app-shop-admin/store/index.js b/java-mall-app-shop-admin/store/index.js index 87ac695..87b8e60 100644 --- a/java-mall-app-shop-admin/store/index.js +++ b/java-mall-app-shop-admin/store/index.js @@ -1,7 +1,6 @@ import Vue from "vue"; import Vuex from "vuex"; import user from "./modules/user"; -import account from "./modules/account"; import order from "./modules/order"; import audit from "./modules/audit"; @@ -10,7 +9,6 @@ Vue.use(Vuex); const store = new Vuex.Store({ modules: { user, - account, order, audit, }, diff --git a/java-mall-app-shop-admin/store/modules/account.js b/java-mall-app-shop-admin/store/modules/account.js deleted file mode 100644 index c29f42d..0000000 --- a/java-mall-app-shop-admin/store/modules/account.js +++ /dev/null @@ -1,44 +0,0 @@ -const defaultState = () => { - return { - accountInfo: uni.getStorageSync('accountDashboard') || { - data: {}, - notice: {}, - order: {}, - product: { - illegal_num: 0, - normal_num: 0, - off_num: 0, - total_num: 0, - verify_passed_off_num: 0, - verify_refused_num: 0, - verify_waiting_num: 0, - }, - return: { - fin_num: 0, - review_num: 0, - total_num: 0, - un_fin_num: 0, - }, - store_info: { - store_id: 1, - wx_qrcode: '', - }, - }, - }; -}; - -const state = defaultState(); - -const getters = {}; - -const mutations = {}; - -const actions = {}; - -export default { - namespaced: true, - state, - getters, - mutations, - actions, -}; diff --git a/java-mall-app-shop-admin/store/modules/user.js b/java-mall-app-shop-admin/store/modules/user.js index b901538..4ce2c6b 100644 --- a/java-mall-app-shop-admin/store/modules/user.js +++ b/java-mall-app-shop-admin/store/modules/user.js @@ -20,6 +20,30 @@ const defaultState = () => { socket: {}, getMsg: {}, imWeidu: {}, + dashboardInfo: uni.getStorageSync("accountDashboard") || { + data: {}, + notice: {}, + order: {}, + product: { + illegal_num: 0, + normal_num: 0, + off_num: 0, + total_num: 0, + verify_passed_off_num: 0, + verify_refused_num: 0, + verify_waiting_num: 0, + }, + return: { + fin_num: 0, + review_num: 0, + total_num: 0, + un_fin_num: 0, + }, + store_info: { + store_id: "", + wx_qrcode: "", + }, + }, }; }; @@ -46,6 +70,7 @@ const mutations = { state.socket = {}; state.getMsg = {}; state.imWeidu = {}; + state.dashboardInfo = {}; }, CONNECT_SOCKET(state, { socket }) { state.socket = socket; @@ -101,13 +126,9 @@ const actions = { if (res && res.status == 200) { let mobile = ""; - let isContain = res.data.user_mobile.indexOf("86"); - - if (isContain != -1 && res.data.user_mobile.length > 11) { - mobile = res.data.user_mobile.slice(2); - } else { - mobile = res.data.user_mobile; - } + mobile = res.data.user_mobile.startsWith("+86") + ? res.data.user_mobile.replace("+86", "") + : res.data.user_mobile; const userInfo = res.data; @@ -148,13 +169,9 @@ const actions = { if (res && res.status == 200) { let mobile = ""; - let isContain = res.data.user_mobile.indexOf("86"); - - if (isContain != -1 && res.data.user_mobile.length > 11) { - mobile = res.data.user_mobile.slice(2); - } else { - mobile = res.data.user_mobile; - } + mobile = res.data.user_mobile.startsWith("+86") + ? res.data.user_mobile.replace("+86", "") + : res.data.user_mobile; const userInfo = res.data; diff --git a/java-mall-app-shop-admin/uni_modules/uview-ui/components/u-tabs/u-tabs.vue b/java-mall-app-shop-admin/uni_modules/uview-ui/components/u-tabs/u-tabs.vue index d2b3b03..0402280 100644 --- a/java-mall-app-shop-admin/uni_modules/uview-ui/components/u-tabs/u-tabs.vue +++ b/java-mall-app-shop-admin/uni_modules/uview-ui/components/u-tabs/u-tabs.vue @@ -167,7 +167,8 @@ .slice(0, this.innerCurrent) .reduce((total, curr) => total + curr.rect.width, 0); // 获取下划线的数值px表示法 - const lineWidth = uni.$u.getPx(this.lineWidth); + const lineWidth = uni.$u.getPx(uni.$u.addUnit(this.lineWidth)); + this.lineOffsetLeft = lineOffsetLeft + (tabItem.rect.width - lineWidth) / 2 // #ifdef APP-NVUE // 第一次移动滑块,无需过渡时间 diff --git a/java-mall-app-shop-admin/utils/exif.js b/java-mall-app-shop-admin/utils/exif.js new file mode 100644 index 0000000..a5e4cbe --- /dev/null +++ b/java-mall-app-shop-admin/utils/exif.js @@ -0,0 +1,1144 @@ +(function () { + var debug = false; + + var root = this; + + var EXIF = function (obj) { + if (obj instanceof EXIF) return obj; + if (!(this instanceof EXIF)) return new EXIF(obj); + this.EXIFwrapped = obj; + }; + + if (typeof exports !== "undefined") { + if (typeof module !== "undefined" && module.exports) { + exports = module.exports = EXIF; + } + exports.EXIF = EXIF; + } else { + root.EXIF = EXIF; + } + + var ExifTags = (EXIF.Tags = { + // version tags + 0x9000: "ExifVersion", // EXIF version + 0xa000: "FlashpixVersion", // Flashpix format version + + // colorspace tags + 0xa001: "ColorSpace", // Color space information tag + + // image configuration + 0xa002: "PixelXDimension", // Valid width of meaningful image + 0xa003: "PixelYDimension", // Valid height of meaningful image + 0x9101: "ComponentsConfiguration", // Information about channels + 0x9102: "CompressedBitsPerPixel", // Compressed bits per pixel + + // user information + 0x927c: "MakerNote", // Any desired information written by the manufacturer + 0x9286: "UserComment", // Comments by user + + // related file + 0xa004: "RelatedSoundFile", // Name of related sound file + + // date and time + 0x9003: "DateTimeOriginal", // Date and time when the original image was generated + 0x9004: "DateTimeDigitized", // Date and time when the image was stored digitally + 0x9290: "SubsecTime", // Fractions of seconds for DateTime + 0x9291: "SubsecTimeOriginal", // Fractions of seconds for DateTimeOriginal + 0x9292: "SubsecTimeDigitized", // Fractions of seconds for DateTimeDigitized + + // picture-taking conditions + 0x829a: "ExposureTime", // Exposure time (in seconds) + 0x829d: "FNumber", // F number + 0x8822: "ExposureProgram", // Exposure program + 0x8824: "SpectralSensitivity", // Spectral sensitivity + 0x8827: "ISOSpeedRatings", // ISO speed rating + 0x8828: "OECF", // Optoelectric conversion factor + 0x9201: "ShutterSpeedValue", // Shutter speed + 0x9202: "ApertureValue", // Lens aperture + 0x9203: "BrightnessValue", // Value of brightness + 0x9204: "ExposureBias", // Exposure bias + 0x9205: "MaxApertureValue", // Smallest F number of lens + 0x9206: "SubjectDistance", // Distance to subject in meters + 0x9207: "MeteringMode", // Metering mode + 0x9208: "LightSource", // Kind of light source + 0x9209: "Flash", // Flash status + 0x9214: "SubjectArea", // Location and area of main subject + 0x920a: "FocalLength", // Focal length of the lens in mm + 0xa20b: "FlashEnergy", // Strobe energy in BCPS + 0xa20c: "SpatialFrequencyResponse", // + 0xa20e: "FocalPlaneXResolution", // Number of pixels in width direction per FocalPlaneResolutionUnit + 0xa20f: "FocalPlaneYResolution", // Number of pixels in height direction per FocalPlaneResolutionUnit + 0xa210: "FocalPlaneResolutionUnit", // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution + 0xa214: "SubjectLocation", // Location of subject in image + 0xa215: "ExposureIndex", // Exposure index selected on camera + 0xa217: "SensingMethod", // Image sensor type + 0xa300: "FileSource", // Image source (3 == DSC) + 0xa301: "SceneType", // Scene type (1 == directly photographed) + 0xa302: "CFAPattern", // Color filter array geometric pattern + 0xa401: "CustomRendered", // Special processing + 0xa402: "ExposureMode", // Exposure mode + 0xa403: "WhiteBalance", // 1 = auto white balance, 2 = manual + 0xa404: "DigitalZoomRation", // Digital zoom ratio + 0xa405: "FocalLengthIn35mmFilm", // Equivalent foacl length assuming 35mm film camera (in mm) + 0xa406: "SceneCaptureType", // Type of scene + 0xa407: "GainControl", // Degree of overall image gain adjustment + 0xa408: "Contrast", // Direction of contrast processing applied by camera + 0xa409: "Saturation", // Direction of saturation processing applied by camera + 0xa40a: "Sharpness", // Direction of sharpness processing applied by camera + 0xa40b: "DeviceSettingDescription", // + 0xa40c: "SubjectDistanceRange", // Distance to subject + + // other tags + 0xa005: "InteroperabilityIFDPointer", + 0xa420: "ImageUniqueID", // Identifier assigned uniquely to each image + }); + + var TiffTags = (EXIF.TiffTags = { + 0x0100: "ImageWidth", + 0x0101: "ImageHeight", + 0x8769: "ExifIFDPointer", + 0x8825: "GPSInfoIFDPointer", + 0xa005: "InteroperabilityIFDPointer", + 0x0102: "BitsPerSample", + 0x0103: "Compression", + 0x0106: "PhotometricInterpretation", + 0x0112: "Orientation", + 0x0115: "SamplesPerPixel", + 0x011c: "PlanarConfiguration", + 0x0212: "YCbCrSubSampling", + 0x0213: "YCbCrPositioning", + 0x011a: "XResolution", + 0x011b: "YResolution", + 0x0128: "ResolutionUnit", + 0x0111: "StripOffsets", + 0x0116: "RowsPerStrip", + 0x0117: "StripByteCounts", + 0x0201: "JPEGInterchangeFormat", + 0x0202: "JPEGInterchangeFormatLength", + 0x012d: "TransferFunction", + 0x013e: "WhitePoint", + 0x013f: "PrimaryChromaticities", + 0x0211: "YCbCrCoefficients", + 0x0214: "ReferenceBlackWhite", + 0x0132: "DateTime", + 0x010e: "ImageDescription", + 0x010f: "Make", + 0x0110: "Model", + 0x0131: "Software", + 0x013b: "Artist", + 0x8298: "Copyright", + }); + + var GPSTags = (EXIF.GPSTags = { + 0x0000: "GPSVersionID", + 0x0001: "GPSLatitudeRef", + 0x0002: "GPSLatitude", + 0x0003: "GPSLongitudeRef", + 0x0004: "GPSLongitude", + 0x0005: "GPSAltitudeRef", + 0x0006: "GPSAltitude", + 0x0007: "GPSTimeStamp", + 0x0008: "GPSSatellites", + 0x0009: "GPSStatus", + 0x000a: "GPSMeasureMode", + 0x000b: "GPSDOP", + 0x000c: "GPSSpeedRef", + 0x000d: "GPSSpeed", + 0x000e: "GPSTrackRef", + 0x000f: "GPSTrack", + 0x0010: "GPSImgDirectionRef", + 0x0011: "GPSImgDirection", + 0x0012: "GPSMapDatum", + 0x0013: "GPSDestLatitudeRef", + 0x0014: "GPSDestLatitude", + 0x0015: "GPSDestLongitudeRef", + 0x0016: "GPSDestLongitude", + 0x0017: "GPSDestBearingRef", + 0x0018: "GPSDestBearing", + 0x0019: "GPSDestDistanceRef", + 0x001a: "GPSDestDistance", + 0x001b: "GPSProcessingMethod", + 0x001c: "GPSAreaInformation", + 0x001d: "GPSDateStamp", + 0x001e: "GPSDifferential", + }); + + // EXIF 2.3 Spec + var IFD1Tags = (EXIF.IFD1Tags = { + 0x0100: "ImageWidth", + 0x0101: "ImageHeight", + 0x0102: "BitsPerSample", + 0x0103: "Compression", + 0x0106: "PhotometricInterpretation", + 0x0111: "StripOffsets", + 0x0112: "Orientation", + 0x0115: "SamplesPerPixel", + 0x0116: "RowsPerStrip", + 0x0117: "StripByteCounts", + 0x011a: "XResolution", + 0x011b: "YResolution", + 0x011c: "PlanarConfiguration", + 0x0128: "ResolutionUnit", + 0x0201: "JpegIFOffset", // When image format is JPEG, this value show offset to JPEG data stored.(aka "ThumbnailOffset" or "JPEGInterchangeFormat") + 0x0202: "JpegIFByteCount", // When image format is JPEG, this value shows data size of JPEG image (aka "ThumbnailLength" or "JPEGInterchangeFormatLength") + 0x0211: "YCbCrCoefficients", + 0x0212: "YCbCrSubSampling", + 0x0213: "YCbCrPositioning", + 0x0214: "ReferenceBlackWhite", + }); + + var StringValues = (EXIF.StringValues = { + ExposureProgram: { + 0: "Not defined", + 1: "Manual", + 2: "Normal program", + 3: "Aperture priority", + 4: "Shutter priority", + 5: "Creative program", + 6: "Action program", + 7: "Portrait mode", + 8: "Landscape mode", + }, + MeteringMode: { + 0: "Unknown", + 1: "Average", + 2: "CenterWeightedAverage", + 3: "Spot", + 4: "MultiSpot", + 5: "Pattern", + 6: "Partial", + 255: "Other", + }, + LightSource: { + 0: "Unknown", + 1: "Daylight", + 2: "Fluorescent", + 3: "Tungsten (incandescent light)", + 4: "Flash", + 9: "Fine weather", + 10: "Cloudy weather", + 11: "Shade", + 12: "Daylight fluorescent (D 5700 - 7100K)", + 13: "Day white fluorescent (N 4600 - 5400K)", + 14: "Cool white fluorescent (W 3900 - 4500K)", + 15: "White fluorescent (WW 3200 - 3700K)", + 17: "Standard light A", + 18: "Standard light B", + 19: "Standard light C", + 20: "D55", + 21: "D65", + 22: "D75", + 23: "D50", + 24: "ISO studio tungsten", + 255: "Other", + }, + Flash: { + 0x0000: "Flash did not fire", + 0x0001: "Flash fired", + 0x0005: "Strobe return light not detected", + 0x0007: "Strobe return light detected", + 0x0009: "Flash fired, compulsory flash mode", + 0x000d: "Flash fired, compulsory flash mode, return light not detected", + 0x000f: "Flash fired, compulsory flash mode, return light detected", + 0x0010: "Flash did not fire, compulsory flash mode", + 0x0018: "Flash did not fire, auto mode", + 0x0019: "Flash fired, auto mode", + 0x001d: "Flash fired, auto mode, return light not detected", + 0x001f: "Flash fired, auto mode, return light detected", + 0x0020: "No flash function", + 0x0041: "Flash fired, red-eye reduction mode", + 0x0045: "Flash fired, red-eye reduction mode, return light not detected", + 0x0047: "Flash fired, red-eye reduction mode, return light detected", + 0x0049: "Flash fired, compulsory flash mode, red-eye reduction mode", + 0x004d: + "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", + 0x004f: + "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", + 0x0059: "Flash fired, auto mode, red-eye reduction mode", + 0x005d: + "Flash fired, auto mode, return light not detected, red-eye reduction mode", + 0x005f: + "Flash fired, auto mode, return light detected, red-eye reduction mode", + }, + SensingMethod: { + 1: "Not defined", + 2: "One-chip color area sensor", + 3: "Two-chip color area sensor", + 4: "Three-chip color area sensor", + 5: "Color sequential area sensor", + 7: "Trilinear sensor", + 8: "Color sequential linear sensor", + }, + SceneCaptureType: { + 0: "Standard", + 1: "Landscape", + 2: "Portrait", + 3: "Night scene", + }, + SceneType: { + 1: "Directly photographed", + }, + CustomRendered: { + 0: "Normal process", + 1: "Custom process", + }, + WhiteBalance: { + 0: "Auto white balance", + 1: "Manual white balance", + }, + GainControl: { + 0: "None", + 1: "Low gain up", + 2: "High gain up", + 3: "Low gain down", + 4: "High gain down", + }, + Contrast: { + 0: "Normal", + 1: "Soft", + 2: "Hard", + }, + Saturation: { + 0: "Normal", + 1: "Low saturation", + 2: "High saturation", + }, + Sharpness: { + 0: "Normal", + 1: "Soft", + 2: "Hard", + }, + SubjectDistanceRange: { + 0: "Unknown", + 1: "Macro", + 2: "Close view", + 3: "Distant view", + }, + FileSource: { + 3: "DSC", + }, + + Components: { + 0: "", + 1: "Y", + 2: "Cb", + 3: "Cr", + 4: "R", + 5: "G", + 6: "B", + }, + }); + + function addEvent(element, event, handler) { + if (element.addEventListener) { + element.addEventListener(event, handler, false); + } else if (element.attachEvent) { + element.attachEvent("on" + event, handler); + } + } + + function imageHasData(img) { + return !!img.exifdata; + } + + function base64ToArrayBuffer(base64, contentType) { + contentType = + contentType || base64.match(/^data\:([^\;]+)\;base64,/im)[1] || ""; // e.g. 'data:image/jpeg;base64,...' => 'image/jpeg' + base64 = base64.replace(/^data\:([^\;]+)\;base64,/gim, ""); + var binary = atob(base64); + var len = binary.length; + var buffer = new ArrayBuffer(len); + var view = new Uint8Array(buffer); + for (var i = 0; i < len; i++) { + view[i] = binary.charCodeAt(i); + } + return buffer; + } + + function objectURLToBlob(url, callback) { + var http = new XMLHttpRequest(); + http.open("GET", url, true); + http.responseType = "blob"; + http.onload = function (e) { + if (this.status == 200 || this.status === 0) { + callback(this.response); + } + }; + http.send(); + } + + function getImageData(img, callback) { + function handleBinaryFile(binFile) { + var data = findEXIFinJPEG(binFile); + img.exifdata = data || {}; + var iptcdata = findIPTCinJPEG(binFile); + img.iptcdata = iptcdata || {}; + if (EXIF.isXmpEnabled) { + var xmpdata = findXMPinJPEG(binFile); + img.xmpdata = xmpdata || {}; + } + if (callback) { + callback.call(img); + } + } + + if (img.src) { + if (/^data\:/i.test(img.src)) { + // Data URI + var arrayBuffer = base64ToArrayBuffer(img.src); + handleBinaryFile(arrayBuffer); + } else if (/^blob\:/i.test(img.src)) { + // Object URL + var fileReader = new FileReader(); + fileReader.onload = function (e) { + handleBinaryFile(e.target.result); + }; + objectURLToBlob(img.src, function (blob) { + fileReader.readAsArrayBuffer(blob); + }); + } else { + var http = new XMLHttpRequest(); + http.onload = function () { + if (this.status == 200 || this.status === 0) { + handleBinaryFile(http.response); + } else { + throw "Could not load image"; + } + http = null; + }; + http.open("GET", img.src, true); + http.responseType = "arraybuffer"; + http.send(null); + } + } else if ( + self.FileReader && + (img instanceof self.Blob || img instanceof self.File) + ) { + var fileReader = new FileReader(); + fileReader.onload = function (e) { + if (debug) + console.log("Got file of length " + e.target.result.byteLength); + handleBinaryFile(e.target.result); + }; + + fileReader.readAsArrayBuffer(img); + } + } + + function findEXIFinJPEG(file) { + var dataView = new DataView(file); + + if (debug) console.log("Got file of length " + file.byteLength); + if (dataView.getUint8(0) != 0xff || dataView.getUint8(1) != 0xd8) { + if (debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + + var offset = 2, + length = file.byteLength, + marker; + + while (offset < length) { + if (dataView.getUint8(offset) != 0xff) { + if (debug) + console.log( + "Not a valid marker at offset " + + offset + + ", found: " + + dataView.getUint8(offset) + ); + return false; // not a valid marker, something is wrong + } + + marker = dataView.getUint8(offset + 1); + if (debug) console.log(marker); + + // we could implement handling for other markers here, + // but we're only looking for 0xFFE1 for EXIF data + + if (marker == 225) { + if (debug) console.log("Found 0xFFE1 marker"); + + return readEXIFData( + dataView, + offset + 4, + dataView.getUint16(offset + 2) - 2 + ); + + // offset += 2 + file.getShortAt(offset+2, true); + } else { + offset += 2 + dataView.getUint16(offset + 2); + } + } + } + + function findIPTCinJPEG(file) { + var dataView = new DataView(file); + + if (debug) console.log("Got file of length " + file.byteLength); + if (dataView.getUint8(0) != 0xff || dataView.getUint8(1) != 0xd8) { + if (debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + + var offset = 2, + length = file.byteLength; + + var isFieldSegmentStart = function (dataView, offset) { + return ( + dataView.getUint8(offset) === 0x38 && + dataView.getUint8(offset + 1) === 0x42 && + dataView.getUint8(offset + 2) === 0x49 && + dataView.getUint8(offset + 3) === 0x4d && + dataView.getUint8(offset + 4) === 0x04 && + dataView.getUint8(offset + 5) === 0x04 + ); + }; + + while (offset < length) { + if (isFieldSegmentStart(dataView, offset)) { + // Get the length of the name header (which is padded to an even number of bytes) + var nameHeaderLength = dataView.getUint8(offset + 7); + if (nameHeaderLength % 2 !== 0) nameHeaderLength += 1; + // Check for pre photoshop 6 format + if (nameHeaderLength === 0) { + // Always 4 + nameHeaderLength = 4; + } + + var startOffset = offset + 8 + nameHeaderLength; + var sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength); + + return readIPTCData(file, startOffset, sectionLength); + + break; + } + + // Not the marker, continue searching + offset++; + } + } + var IptcFieldMap = { + 0x78: "caption", + 0x6e: "credit", + 0x19: "keywords", + 0x37: "dateCreated", + 0x50: "byline", + 0x55: "bylineTitle", + 0x7a: "captionWriter", + 0x69: "headline", + 0x74: "copyright", + 0x0f: "category", + }; + function readIPTCData(file, startOffset, sectionLength) { + var dataView = new DataView(file); + var data = {}; + var fieldValue, fieldName, dataSize, segmentType, segmentSize; + var segmentStartPos = startOffset; + while (segmentStartPos < startOffset + sectionLength) { + if ( + dataView.getUint8(segmentStartPos) === 0x1c && + dataView.getUint8(segmentStartPos + 1) === 0x02 + ) { + segmentType = dataView.getUint8(segmentStartPos + 2); + if (segmentType in IptcFieldMap) { + dataSize = dataView.getInt16(segmentStartPos + 3); + segmentSize = dataSize + 5; + fieldName = IptcFieldMap[segmentType]; + fieldValue = getStringFromDB(dataView, segmentStartPos + 5, dataSize); + // Check if we already stored a value with this name + if (data.hasOwnProperty(fieldName)) { + // Value already stored with this name, create multivalue field + if (data[fieldName] instanceof Array) { + data[fieldName].push(fieldValue); + } else { + data[fieldName] = [data[fieldName], fieldValue]; + } + } else { + data[fieldName] = fieldValue; + } + } + } + segmentStartPos++; + } + return data; + } + + function readTags(file, tiffStart, dirStart, strings, bigEnd) { + var entries = file.getUint16(dirStart, !bigEnd), + tags = {}, + entryOffset, + tag, + i; + + for (i = 0; i < entries; i++) { + entryOffset = dirStart + i * 12 + 2; + tag = strings[file.getUint16(entryOffset, !bigEnd)]; + if (!tag && debug) + console.log("Unknown tag: " + file.getUint16(entryOffset, !bigEnd)); + tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd); + } + return tags; + } + + function readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) { + var type = file.getUint16(entryOffset + 2, !bigEnd), + numValues = file.getUint32(entryOffset + 4, !bigEnd), + valueOffset = file.getUint32(entryOffset + 8, !bigEnd) + tiffStart, + offset, + vals, + val, + n, + numerator, + denominator; + + switch (type) { + case 1: // byte, 8-bit unsigned int + case 7: // undefined, 8-bit byte, value depending on field + if (numValues == 1) { + return file.getUint8(entryOffset + 8, !bigEnd); + } else { + offset = numValues > 4 ? valueOffset : entryOffset + 8; + vals = []; + for (n = 0; n < numValues; n++) { + vals[n] = file.getUint8(offset + n); + } + return vals; + } + + case 2: // ascii, 8-bit byte + offset = numValues > 4 ? valueOffset : entryOffset + 8; + return getStringFromDB(file, offset, numValues - 1); + + case 3: // short, 16 bit int + if (numValues == 1) { + return file.getUint16(entryOffset + 8, !bigEnd); + } else { + offset = numValues > 2 ? valueOffset : entryOffset + 8; + vals = []; + for (n = 0; n < numValues; n++) { + vals[n] = file.getUint16(offset + 2 * n, !bigEnd); + } + return vals; + } + + case 4: // long, 32 bit int + if (numValues == 1) { + return file.getUint32(entryOffset + 8, !bigEnd); + } else { + vals = []; + for (n = 0; n < numValues; n++) { + vals[n] = file.getUint32(valueOffset + 4 * n, !bigEnd); + } + return vals; + } + + case 5: // rational = two long values, first is numerator, second is denominator + if (numValues == 1) { + numerator = file.getUint32(valueOffset, !bigEnd); + denominator = file.getUint32(valueOffset + 4, !bigEnd); + val = new Number(numerator / denominator); + val.numerator = numerator; + val.denominator = denominator; + return val; + } else { + vals = []; + for (n = 0; n < numValues; n++) { + numerator = file.getUint32(valueOffset + 8 * n, !bigEnd); + denominator = file.getUint32(valueOffset + 4 + 8 * n, !bigEnd); + vals[n] = new Number(numerator / denominator); + vals[n].numerator = numerator; + vals[n].denominator = denominator; + } + return vals; + } + + case 9: // slong, 32 bit signed int + if (numValues == 1) { + return file.getInt32(entryOffset + 8, !bigEnd); + } else { + vals = []; + for (n = 0; n < numValues; n++) { + vals[n] = file.getInt32(valueOffset + 4 * n, !bigEnd); + } + return vals; + } + + case 10: // signed rational, two slongs, first is numerator, second is denominator + if (numValues == 1) { + return ( + file.getInt32(valueOffset, !bigEnd) / + file.getInt32(valueOffset + 4, !bigEnd) + ); + } else { + vals = []; + for (n = 0; n < numValues; n++) { + vals[n] = + file.getInt32(valueOffset + 8 * n, !bigEnd) / + file.getInt32(valueOffset + 4 + 8 * n, !bigEnd); + } + return vals; + } + } + } + + /** + * Given an IFD (Image File Directory) start offset + * returns an offset to next IFD or 0 if it's the last IFD. + */ + function getNextIFDOffset(dataView, dirStart, bigEnd) { + //the first 2bytes means the number of directory entries contains in this IFD + var entries = dataView.getUint16(dirStart, !bigEnd); + + // After last directory entry, there is a 4bytes of data, + // it means an offset to next IFD. + // If its value is '0x00000000', it means this is the last IFD and there is no linked IFD. + + return dataView.getUint32(dirStart + 2 + entries * 12, !bigEnd); // each entry is 12 bytes long + } + + function readThumbnailImage(dataView, tiffStart, firstIFDOffset, bigEnd) { + // get the IFD1 offset + var IFD1OffsetPointer = getNextIFDOffset( + dataView, + tiffStart + firstIFDOffset, + bigEnd + ); + + if (!IFD1OffsetPointer) { + // console.log('******** IFD1Offset is empty, image thumb not found ********'); + return {}; + } else if (IFD1OffsetPointer > dataView.byteLength) { + // this should not happen + // console.log('******** IFD1Offset is outside the bounds of the DataView ********'); + return {}; + } + // console.log('******* thumbnail IFD offset (IFD1) is: %s', IFD1OffsetPointer); + + var thumbTags = readTags( + dataView, + tiffStart, + tiffStart + IFD1OffsetPointer, + IFD1Tags, + bigEnd + ); + + // EXIF 2.3 specification for JPEG format thumbnail + + // If the value of Compression(0x0103) Tag in IFD1 is '6', thumbnail image format is JPEG. + // Most of Exif image uses JPEG format for thumbnail. In that case, you can get offset of thumbnail + // by JpegIFOffset(0x0201) Tag in IFD1, size of thumbnail by JpegIFByteCount(0x0202) Tag. + // Data format is ordinary JPEG format, starts from 0xFFD8 and ends by 0xFFD9. It seems that + // JPEG format and 160x120pixels of size are recommended thumbnail format for Exif2.1 or later. + + if (thumbTags["Compression"]) { + // console.log('Thumbnail image found!'); + + switch (thumbTags["Compression"]) { + case 6: + // console.log('Thumbnail image format is JPEG'); + if (thumbTags.JpegIFOffset && thumbTags.JpegIFByteCount) { + // extract the thumbnail + var tOffset = tiffStart + thumbTags.JpegIFOffset; + var tLength = thumbTags.JpegIFByteCount; + thumbTags["blob"] = new Blob( + [new Uint8Array(dataView.buffer, tOffset, tLength)], + { + type: "image/jpeg", + } + ); + } + break; + + case 1: + console.log( + "Thumbnail image format is TIFF, which is not implemented." + ); + break; + default: + console.log( + "Unknown thumbnail image format '%s'", + thumbTags["Compression"] + ); + } + } else if (thumbTags["PhotometricInterpretation"] == 2) { + console.log("Thumbnail image format is RGB, which is not implemented."); + } + return thumbTags; + } + + function getStringFromDB(buffer, start, length) { + var outstr = ""; + for (var n = start; n < start + length; n++) { + outstr += String.fromCharCode(buffer.getUint8(n)); + } + return outstr; + } + + function readEXIFData(file, start) { + if (getStringFromDB(file, start, 4) != "Exif") { + if (debug) + console.log("Not valid EXIF data! " + getStringFromDB(file, start, 4)); + return false; + } + + var bigEnd, + tags, + tag, + exifData, + gpsData, + tiffOffset = start + 6; + + // test for TIFF validity and endianness + if (file.getUint16(tiffOffset) == 0x4949) { + bigEnd = false; + } else if (file.getUint16(tiffOffset) == 0x4d4d) { + bigEnd = true; + } else { + if (debug) console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"); + return false; + } + + if (file.getUint16(tiffOffset + 2, !bigEnd) != 0x002a) { + if (debug) console.log("Not valid TIFF data! (no 0x002A)"); + return false; + } + + var firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd); + + if (firstIFDOffset < 0x00000008) { + if (debug) + console.log( + "Not valid TIFF data! (First offset less than 8)", + file.getUint32(tiffOffset + 4, !bigEnd) + ); + return false; + } + + tags = readTags( + file, + tiffOffset, + tiffOffset + firstIFDOffset, + TiffTags, + bigEnd + ); + + if (tags.ExifIFDPointer) { + exifData = readTags( + file, + tiffOffset, + tiffOffset + tags.ExifIFDPointer, + ExifTags, + bigEnd + ); + for (tag in exifData) { + switch (tag) { + case "LightSource": + case "Flash": + case "MeteringMode": + case "ExposureProgram": + case "SensingMethod": + case "SceneCaptureType": + case "SceneType": + case "CustomRendered": + case "WhiteBalance": + case "GainControl": + case "Contrast": + case "Saturation": + case "Sharpness": + case "SubjectDistanceRange": + case "FileSource": + exifData[tag] = StringValues[tag][exifData[tag]]; + break; + + case "ExifVersion": + case "FlashpixVersion": + exifData[tag] = String.fromCharCode( + exifData[tag][0], + exifData[tag][1], + exifData[tag][2], + exifData[tag][3] + ); + break; + + case "ComponentsConfiguration": + exifData[tag] = + StringValues.Components[exifData[tag][0]] + + StringValues.Components[exifData[tag][1]] + + StringValues.Components[exifData[tag][2]] + + StringValues.Components[exifData[tag][3]]; + break; + } + tags[tag] = exifData[tag]; + } + } + + if (tags.GPSInfoIFDPointer) { + gpsData = readTags( + file, + tiffOffset, + tiffOffset + tags.GPSInfoIFDPointer, + GPSTags, + bigEnd + ); + for (tag in gpsData) { + switch (tag) { + case "GPSVersionID": + gpsData[tag] = + gpsData[tag][0] + + "." + + gpsData[tag][1] + + "." + + gpsData[tag][2] + + "." + + gpsData[tag][3]; + break; + } + tags[tag] = gpsData[tag]; + } + } + + // extract thumbnail + tags["thumbnail"] = readThumbnailImage( + file, + tiffOffset, + firstIFDOffset, + bigEnd + ); + + return tags; + } + + function findXMPinJPEG(file) { + if (!("DOMParser" in self)) { + // console.warn('XML parsing not supported without DOMParser'); + return; + } + var dataView = new DataView(file); + + if (debug) console.log("Got file of length " + file.byteLength); + if (dataView.getUint8(0) != 0xff || dataView.getUint8(1) != 0xd8) { + if (debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + + var offset = 2, + length = file.byteLength, + dom = new DOMParser(); + + while (offset < length - 4) { + if (getStringFromDB(dataView, offset, 4) == "http") { + var startOffset = offset - 1; + var sectionLength = dataView.getUint16(offset - 2) - 1; + var xmpString = getStringFromDB(dataView, startOffset, sectionLength); + var xmpEndIndex = xmpString.indexOf("xmpmeta>") + 8; + xmpString = xmpString.substring( + xmpString.indexOf(" 0) { + json["@attributes"] = {}; + for (var j = 0; j < xml.attributes.length; j++) { + var attribute = xml.attributes.item(j); + json["@attributes"][attribute.nodeName] = attribute.nodeValue; + } + } + } else if (xml.nodeType == 3) { + // text node + return xml.nodeValue; + } + + // deal with children + if (xml.hasChildNodes()) { + for (var i = 0; i < xml.childNodes.length; i++) { + var child = xml.childNodes.item(i); + var nodeName = child.nodeName; + if (json[nodeName] == null) { + json[nodeName] = xml2json(child); + } else { + if (json[nodeName].push == null) { + var old = json[nodeName]; + json[nodeName] = []; + json[nodeName].push(old); + } + json[nodeName].push(xml2json(child)); + } + } + } + + return json; + } + + function xml2Object(xml) { + try { + var obj = {}; + if (xml.children.length > 0) { + for (var i = 0; i < xml.children.length; i++) { + var item = xml.children.item(i); + var attributes = item.attributes; + for (var idx in attributes) { + var itemAtt = attributes[idx]; + var dataKey = itemAtt.nodeName; + var dataValue = itemAtt.nodeValue; + + if (dataKey !== undefined) { + obj[dataKey] = dataValue; + } + } + var nodeName = item.nodeName; + + if (typeof obj[nodeName] == "undefined") { + obj[nodeName] = xml2json(item); + } else { + if (typeof obj[nodeName].push == "undefined") { + var old = obj[nodeName]; + + obj[nodeName] = []; + obj[nodeName].push(old); + } + obj[nodeName].push(xml2json(item)); + } + } + } else { + obj = xml.textContent; + } + return obj; + } catch (e) { + console.log(e.message); + } + } + + EXIF.enableXmp = function () { + EXIF.isXmpEnabled = true; + }; + + EXIF.disableXmp = function () { + EXIF.isXmpEnabled = false; + }; + + EXIF.getData = function (img, callback) { + console.log("EXIF", img); + // if ( + // ((self.Image && img instanceof self.Image) || + // (self.HTMLImageElement && img instanceof self.HTMLImageElement)) && + // !img.complete + // ) + // return false; + + if (!imageHasData(img)) { + getImageData(img, callback); + } else { + if (callback) { + callback.call(img); + } + } + return true; + }; + + EXIF.getTag = function (img, tag) { + if (!imageHasData(img)) return; + return img.exifdata[tag]; + }; + + EXIF.getIptcTag = function (img, tag) { + if (!imageHasData(img)) return; + return img.iptcdata[tag]; + }; + + EXIF.getAllTags = function (img) { + if (!imageHasData(img)) return {}; + var a, + data = img.exifdata, + tags = {}; + for (a in data) { + if (data.hasOwnProperty(a)) { + tags[a] = data[a]; + } + } + return tags; + }; + + EXIF.getAllIptcTags = function (img) { + if (!imageHasData(img)) return {}; + var a, + data = img.iptcdata, + tags = {}; + for (a in data) { + if (data.hasOwnProperty(a)) { + tags[a] = data[a]; + } + } + return tags; + }; + + EXIF.pretty = function (img) { + if (!imageHasData(img)) return ""; + var a, + data = img.exifdata, + strPretty = ""; + for (a in data) { + if (data.hasOwnProperty(a)) { + if (typeof data[a] == "object") { + if (data[a] instanceof Number) { + strPretty += + a + + " : " + + data[a] + + " [" + + data[a].numerator + + "/" + + data[a].denominator + + "]\r\n"; + } else { + strPretty += a + " : [" + data[a].length + " values]\r\n"; + } + } else { + strPretty += a + " : " + data[a] + "\r\n"; + } + } + } + return strPretty; + }; + + EXIF.readFromBinaryFile = function (file) { + return findEXIFinJPEG(file); + }; + + if (typeof define === "function" && define.amd) { + define("exif-js", [], function () { + return EXIF; + }); + } +}).call(this); diff --git a/java-mall-app-shop-admin/utils/tupian.js b/java-mall-app-shop-admin/utils/tupian.js new file mode 100644 index 0000000..4b06b03 --- /dev/null +++ b/java-mall-app-shop-admin/utils/tupian.js @@ -0,0 +1,262 @@ +/** + * imageUtil.js + *解决图片旋转的问题 + * **/ + +import EXIF from "./exif.js"; + +async function compressImage(path) { + let imageInfo = await getImageInfo(path); + let systemInfo = await getSystemInfo(); + return new Promise(function (resolve, reject) { + // #ifdef APP-PLUS || APP-NVUE + appCompressImage(path, imageInfo) + .then((res) => { + resolve(res); + }) + .catch((e) => { + reject(e); + }); + // #endif + + // #ifdef H5 + let orientation = 1; + let img = document.createElement("img"); + img.src = path; + img.onload = function () { + EXIF.getData(img, function () { + orientation = EXIF.getTag(this, "Orientation"); + canvasImg(path, orientation, imageInfo, systemInfo) + .then((res) => { + debugger; + resolve(res); + }) + .catch((e) => { + reject(e); + }); + }); + }; + img.onerror = function () { + reject(path); + }; + // #endif + }); +} + +// app处理旋转图片 +function appCompressImage(src, imageInfo) { + return new Promise(function (resolve, reject) { + let orientation = imageInfo.orientation; + let rotate = 0; + let quality = 80; + if (plus.os.name == "iOS") { + rotate = 0; + quality = 25; + } else { + switch (orientation) { + case "up": //exif:1 不旋转 + rotate = 0; + break; + case "down": //exif:3 旋转180度 + rotate = 180; + break; + case "right": //exif:6 旋转90度 + rotate = 90; + break; + case "left": //exif:8 旋转270度 + rotate = 270; + break; + default: + rotate = 0; + break; + } + } + + plus.zip.compressImage( + { + src: src, + dst: + "_doc/uniapp_temp" + "/compressed/" + Math.round(new Date()) + ".png", + format: "png", + quality: quality, + width: "auto", + height: "auto", + rotate: rotate, + }, + function (event) { + resolve(event.target); + }, + function (error) { + reject(src); + } + ); + }); +} + +// 画图片 +function canvasImg(path, or, imageInfo, systemInfo) { + return new Promise(function (resolve, reject) { + let canvasId = "uploadCanvas"; + const ctx = uni.createCanvasContext(canvasId); + let scale = imageInfo.width / imageInfo.height; + + // 图片参数 start + let maxdestWidth = 1100; // 2000; + let destWidth = imageInfo.width; + let destHeight = imageInfo.height; + + let destCompressWidth = imageInfo.width; + let destCompressHeight = imageInfo.height; + + // 压缩图片 最大不超过5M 1200 + // 当宽大于高的时候 + if (imageInfo.width > imageInfo.height) { + if (imageInfo.width > maxdestWidth) { + destCompressWidth = maxdestWidth; + destCompressHeight = Math.floor(destCompressWidth / scale); + } else { + destCompressWidth = (imageInfo.width * 8) / 10; + destCompressHeight = Math.floor(destCompressWidth / scale); + } + } + // 当高大于宽 + else { + if (imageInfo.height > maxdestWidth) { + destCompressHeight = maxdestWidth; + destCompressWidth = Math.floor(destCompressHeight * scale); + } else { + destCompressHeight = imageInfo.height * 0.8; + destCompressWidth = Math.floor(destCompressHeight * scale); + } + } + + destWidth = destCompressHeight; + destHeight = destCompressWidth; + // 图片参数 end + + // 画布参数 start + let maxWidth = 300; + let canvasW = imageInfo.width; + let canvasH = imageInfo.height; + + let width = imageInfo.width; + let height = imageInfo.height; + + // canvas画布不能超过最大宽 + if (canvasW > maxWidth) { + canvasW = maxWidth; + canvasH = Math.floor(canvasW / scale); + } + + width = canvasW; + height = canvasH; + // 画布参数 end + + // console.log('--or---', or) + //单独处理苹果最新版本 + if ( + systemInfo.model == "iPhone" && + systemInfo.system.indexOf("13.4.1") > -1 + ) { + ctx.drawImage(path, 0, 0, canvasW, canvasH); + destWidth = destCompressWidth; + destHeight = destCompressHeight; + } else { + if (or == 6) { + //逆时针旋转了90 + ctx.translate(width, 0); + ctx.rotate(Math.PI / 2); + ctx.drawImage(path, 0, 0, canvasH, canvasW); + } else if (or == 3) { + //逆时针旋转了180 + ctx.translate(width, height); + ctx.rotate(Math.PI); + ctx.drawImage(path, 0, 0, canvasH, canvasW); + } else if (or == 8) { + //顺时针旋转90 + ctx.translate(0, height); + ctx.rotate(-Math.PI / 2); + ctx.drawImage(path, 0, 0, canvasH, canvasW); + } else { + ctx.drawImage(path, 0, 0, canvasW, canvasH); + // return resolve(path); + + destWidth = destCompressWidth; + destHeight = destCompressHeight; + } + } + // console.log('图片原始长宽', imageInfo, maxWidth, canvasW, canvasH, width, height, destWidth, destHeight); + + ctx.draw( + true, + setTimeout(() => { + uni.canvasToTempFilePath({ + x: 0, + y: 0, + width: width, //画布宽度 + height: height, + destWidth: destWidth, + destHeight: destHeight, + fileType: "png", + canvasId: canvasId, + success: (res) => { + resolve(res.tempFilePath); + }, + fail: (err) => { + resolve(path); + }, + }); + }, 200) + ); + }); +} + +// 获取图片信息 +function getImageInfo(path) { + return new Promise(function (resolve, reject) { + // #ifdef APP-PLUS + plus.io.getImageInfo({ + src: path, + success: function (image) { + // console.log('orientation=' + image.orientation); + resolve(image); + }, + fail: function (err) { + console.log("getImageInfoErr: " + JSON.stringify(err)); + reject(err); + }, + }); + // #endif + + // #ifdef H5 || MP-WEIXIN + uni.getImageInfo({ + src: path, + success: function (image) { + // console.log('orientation=' + image.orientation); + resolve(image); + }, + fail: function (err) { + console.log("getImageInfoErr: " + JSON.stringify(err)); + reject(err); + }, + }); + // #endif + }); +} + +// 获取系统信息 +function getSystemInfo(path) { + return new Promise(function (resolve, reject) { + uni.getSystemInfo({ + success(res) { + resolve(res); + }, + fail(err) { + console.log("getSystemInfoErr: " + JSON.stringify(err)); + reject(err); + }, + }); + }); +} + +export default compressImage;