diff --git a/package-lock.json b/package-lock.json
index e148df4..fc777e3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,11 +10,12 @@
"dependencies": {
"@babel/runtime": "^7.7.7",
"@tarojs/components": "3.3.10",
- "@tarojs/plugin-framework-react": "^3.4.11",
+ "@tarojs/plugin-framework-react": "^3.4.12",
"@tarojs/react": "3.3.10",
"@tarojs/runtime": "3.3.10",
"@tarojs/taro": "3.3.10",
"big.js": "^6.1.1",
+ "dayjs": "^1.11.3",
"qs": "^6.10.3",
"react": "^17.0.0",
"react-dom": "^17.0.0",
@@ -3314,33 +3315,33 @@
}
},
"node_modules/@tarojs/plugin-framework-react": {
- "version": "3.4.11",
- "resolved": "https://registry.npmmirror.com/@tarojs/plugin-framework-react/-/plugin-framework-react-3.4.11.tgz",
- "integrity": "sha512-eurnK1trU8JMkBlk3Mr0eKgLfiEF7dtkctnioyMgcuTfBIuI0TDXECidlhtSp5vJ2DkncuH1d+3abEgx8Nc8rw==",
+ "version": "3.4.12",
+ "resolved": "https://registry.npmmirror.com/@tarojs/plugin-framework-react/-/plugin-framework-react-3.4.12.tgz",
+ "integrity": "sha512-kc03rvuotgQ2q7gYM9rjy7IV1tjT4ZcbdfdVs2e7olpdXcY9d4x1OqF3vYy+FT/f6WXgf/xs7cBa8Btw3J44iQ==",
"dependencies": {
"@pmmmwh/react-refresh-webpack-plugin": "0.4.3",
"@prefresh/webpack": "^3.2.3",
- "@tarojs/runtime": "3.4.11",
- "@tarojs/shared": "3.4.11",
+ "@tarojs/runtime": "3.4.12",
+ "@tarojs/shared": "3.4.12",
"acorn": "^8.0.4",
"acorn-walk": "^8.0.0"
}
},
"node_modules/@tarojs/plugin-framework-react/node_modules/@tarojs/runtime": {
- "version": "3.4.11",
- "resolved": "https://registry.npmmirror.com/@tarojs/runtime/-/runtime-3.4.11.tgz",
- "integrity": "sha512-vcr0Uo+K0rKR8LjXaFfqx9yYReejcvJ0HV6xly8KQxhP2Y4xmZrrhpeIYaOg97xqqtgKV+ama9NSgXa/kOeoBg==",
+ "version": "3.4.12",
+ "resolved": "https://registry.npmmirror.com/@tarojs/runtime/-/runtime-3.4.12.tgz",
+ "integrity": "sha512-4bQIXoiMRQa0xzma4nm4MAmLpPtcZLOalmW/X8WtPjAVqENZ8o3FE2lZMHjhv62HhvyHf+XZWWk/V+VzAhjcGQ==",
"dependencies": {
- "@tarojs/shared": "3.4.11",
+ "@tarojs/shared": "3.4.12",
"inversify": "5.1.1",
"lodash-es": "4.17.15",
"reflect-metadata": "^0.1.13"
}
},
"node_modules/@tarojs/plugin-framework-react/node_modules/@tarojs/shared": {
- "version": "3.4.11",
- "resolved": "https://registry.npmmirror.com/@tarojs/shared/-/shared-3.4.11.tgz",
- "integrity": "sha512-fQ/XccyLQYBPmynIiW8lOm3xXX40uV3TnZZIPuiwGgpApurVabSRlCa5HBeoI3qnTH92tHJon86ojOduaLHVPQ=="
+ "version": "3.4.12",
+ "resolved": "https://registry.npmmirror.com/@tarojs/shared/-/shared-3.4.12.tgz",
+ "integrity": "sha512-ELpEOA7Uzr5rQujfSmVS+ugTO22ZP8j3vi2AfrwJKg7zit1kZcBnDUIsN6+3Es3Vnp1oXsyQobWrgn30xYt2Ug=="
},
"node_modules/@tarojs/plugin-framework-react/node_modules/acorn": {
"version": "8.7.1",
@@ -7585,6 +7586,11 @@
"whatwg-url": "^7.0.0"
}
},
+ "node_modules/dayjs": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.3.tgz",
+ "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A=="
+ },
"node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -15250,9 +15256,9 @@
"license": "MIT"
},
"node_modules/preact": {
- "version": "10.7.3",
- "resolved": "https://registry.npmmirror.com/preact/-/preact-10.7.3.tgz",
- "integrity": "sha512-giqJXP8VbtA1tyGa3f1n9wiN7PrHtONrDyE3T+ifjr/tTkg+2N4d/6sjC9WyJKv8wM7rOYDveqy5ZoFmYlwo4w==",
+ "version": "10.8.2",
+ "resolved": "https://registry.npmmirror.com/preact/-/preact-10.8.2.tgz",
+ "integrity": "sha512-AKGt0BsDSiAYzVS78jZ9qRwuorY2CoSZtf1iOC6gLb/3QyZt+fLT09aYJBjRc/BEcRc4j+j3ggERMdNE43i1LQ==",
"peer": true
},
"node_modules/prelude-ls": {
@@ -18592,7 +18598,7 @@
},
"node_modules/tarojs": {
"version": "2.1.1",
- "resolved": "https://registry.npmmirror.com/tarojs/-/tarojs-2.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/tarojs/-/tarojs-2.1.1.tgz",
"integrity": "sha512-5wJ2fuiA6Fk/9zr76ZPrsJAe6UXI66gHbtwOWaxjrJZetRurfxDZUUw6wkSZB/ZxAhVhWlv9PMuNc7DlB+rtsA=="
},
"node_modules/terser": {
@@ -23048,33 +23054,33 @@
}
},
"@tarojs/plugin-framework-react": {
- "version": "3.4.11",
- "resolved": "https://registry.npmmirror.com/@tarojs/plugin-framework-react/-/plugin-framework-react-3.4.11.tgz",
- "integrity": "sha512-eurnK1trU8JMkBlk3Mr0eKgLfiEF7dtkctnioyMgcuTfBIuI0TDXECidlhtSp5vJ2DkncuH1d+3abEgx8Nc8rw==",
+ "version": "3.4.12",
+ "resolved": "https://registry.npmmirror.com/@tarojs/plugin-framework-react/-/plugin-framework-react-3.4.12.tgz",
+ "integrity": "sha512-kc03rvuotgQ2q7gYM9rjy7IV1tjT4ZcbdfdVs2e7olpdXcY9d4x1OqF3vYy+FT/f6WXgf/xs7cBa8Btw3J44iQ==",
"requires": {
"@pmmmwh/react-refresh-webpack-plugin": "0.4.3",
"@prefresh/webpack": "^3.2.3",
- "@tarojs/runtime": "3.4.11",
- "@tarojs/shared": "3.4.11",
+ "@tarojs/runtime": "3.4.12",
+ "@tarojs/shared": "3.4.12",
"acorn": "^8.0.4",
"acorn-walk": "^8.0.0"
},
"dependencies": {
"@tarojs/runtime": {
- "version": "3.4.11",
- "resolved": "https://registry.npmmirror.com/@tarojs/runtime/-/runtime-3.4.11.tgz",
- "integrity": "sha512-vcr0Uo+K0rKR8LjXaFfqx9yYReejcvJ0HV6xly8KQxhP2Y4xmZrrhpeIYaOg97xqqtgKV+ama9NSgXa/kOeoBg==",
+ "version": "3.4.12",
+ "resolved": "https://registry.npmmirror.com/@tarojs/runtime/-/runtime-3.4.12.tgz",
+ "integrity": "sha512-4bQIXoiMRQa0xzma4nm4MAmLpPtcZLOalmW/X8WtPjAVqENZ8o3FE2lZMHjhv62HhvyHf+XZWWk/V+VzAhjcGQ==",
"requires": {
- "@tarojs/shared": "3.4.11",
+ "@tarojs/shared": "3.4.12",
"inversify": "5.1.1",
"lodash-es": "4.17.15",
"reflect-metadata": "^0.1.13"
}
},
"@tarojs/shared": {
- "version": "3.4.11",
- "resolved": "https://registry.npmmirror.com/@tarojs/shared/-/shared-3.4.11.tgz",
- "integrity": "sha512-fQ/XccyLQYBPmynIiW8lOm3xXX40uV3TnZZIPuiwGgpApurVabSRlCa5HBeoI3qnTH92tHJon86ojOduaLHVPQ=="
+ "version": "3.4.12",
+ "resolved": "https://registry.npmmirror.com/@tarojs/shared/-/shared-3.4.12.tgz",
+ "integrity": "sha512-ELpEOA7Uzr5rQujfSmVS+ugTO22ZP8j3vi2AfrwJKg7zit1kZcBnDUIsN6+3Es3Vnp1oXsyQobWrgn30xYt2Ug=="
},
"acorn": {
"version": "8.7.1",
@@ -26201,6 +26207,11 @@
"whatwg-url": "^7.0.0"
}
},
+ "dayjs": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.3.tgz",
+ "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A=="
+ },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -31757,9 +31768,9 @@
"dev": true
},
"preact": {
- "version": "10.7.3",
- "resolved": "https://registry.npmmirror.com/preact/-/preact-10.7.3.tgz",
- "integrity": "sha512-giqJXP8VbtA1tyGa3f1n9wiN7PrHtONrDyE3T+ifjr/tTkg+2N4d/6sjC9WyJKv8wM7rOYDveqy5ZoFmYlwo4w==",
+ "version": "10.8.2",
+ "resolved": "https://registry.npmmirror.com/preact/-/preact-10.8.2.tgz",
+ "integrity": "sha512-AKGt0BsDSiAYzVS78jZ9qRwuorY2CoSZtf1iOC6gLb/3QyZt+fLT09aYJBjRc/BEcRc4j+j3ggERMdNE43i1LQ==",
"peer": true
},
"prelude-ls": {
@@ -34188,7 +34199,7 @@
},
"tarojs": {
"version": "2.1.1",
- "resolved": "https://registry.npmmirror.com/tarojs/-/tarojs-2.1.1.tgz",
+ "resolved": "https://registry.npmjs.org/tarojs/-/tarojs-2.1.1.tgz",
"integrity": "sha512-5wJ2fuiA6Fk/9zr76ZPrsJAe6UXI66gHbtwOWaxjrJZetRurfxDZUUw6wkSZB/ZxAhVhWlv9PMuNc7DlB+rtsA=="
},
"terser": {
diff --git a/package.json b/package.json
index 69776ec..ca0a4c3 100644
--- a/package.json
+++ b/package.json
@@ -37,11 +37,12 @@
"dependencies": {
"@babel/runtime": "^7.7.7",
"@tarojs/components": "3.3.10",
- "@tarojs/plugin-framework-react": "^3.4.11",
+ "@tarojs/plugin-framework-react": "^3.4.12",
"@tarojs/react": "3.3.10",
"@tarojs/runtime": "3.3.10",
"@tarojs/taro": "3.3.10",
"big.js": "^6.1.1",
+ "dayjs": "^1.11.3",
"qs": "^6.10.3",
"react": "^17.0.0",
"react-dom": "^17.0.0",
diff --git a/project.config.json b/project.config.json
index 1275668..aab17ff 100644
--- a/project.config.json
+++ b/project.config.json
@@ -23,14 +23,14 @@
"useStaticServer": true,
"showES6CompileOption": false,
"checkInvalidKey": true,
+ "compileHotReLoad": true,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"disableUseStrict": false,
- "useCompilerPlugins": false,
- "minifyWXML": true
+ "useCompilerPlugins": false
},
"compileType": "miniprogram",
"libVersion": "2.24.5",
diff --git a/src/api/cdn.ts b/src/api/cdn.ts
new file mode 100644
index 0000000..8289c45
--- /dev/null
+++ b/src/api/cdn.ts
@@ -0,0 +1,13 @@
+import { useRequest } from "@/use/useHttp"
+
+
+/**
+ * 获取cdn 签名/密钥
+ * @returns
+ */
+ export const GetSignApi = () => {
+ return useRequest({
+ url: `/v1/mall/cdn/token`,
+ method: "get"
+ })
+}
diff --git a/src/api/certification.ts b/src/api/certification.ts
new file mode 100644
index 0000000..02e6d60
--- /dev/null
+++ b/src/api/certification.ts
@@ -0,0 +1,34 @@
+import { useRequest } from "@/use/useHttp"
+
+/**
+ * 企业认证信息获取
+ * @returns
+ */
+ export const certificationDetailApi = () => {
+ return useRequest({
+ url: `/v1/mall/company/authentication`,
+ method: "get",
+ })
+}
+
+/**
+ * 企业认证信息提交
+ * @returns
+ */
+ export const certificationSaveApi = () => {
+ return useRequest({
+ url: `/v1/mall/company/authentication`,
+ method: "put",
+ })
+}
+
+/**
+ * 企业认证类型枚举列表
+ * @returns
+ */
+ export const certificationTypeListApi = () => {
+ return useRequest({
+ url: `/v1/mall/enum/companyAuthenticationType`,
+ method: "get",
+ })
+}
\ No newline at end of file
diff --git a/src/api/company.ts b/src/api/company.ts
index 8b72c6d..799464b 100644
--- a/src/api/company.ts
+++ b/src/api/company.ts
@@ -21,36 +21,3 @@ import { useRequest } from "@/use/useHttp"
method: "put",
})
}
-
-/**
- * 地址详情
- * @returns
- */
- export const addressDetailApi = () => {
- return useRequest({
- url: `/v1/mall/address`,
- method: "get",
- })
-}
-
-/**
- * 地址编辑
- * @returns
- */
- export const addressEditApi = () => {
- return useRequest({
- url: `/v1/mall/address`,
- method: "put",
- })
-}
-
-/**
- * 地址删除
- * @returns
- */
- export const addressDeleteApi = () => {
- return useRequest({
- url: `/v1/mall/address`,
- method: "delete",
- })
-}
diff --git a/src/api/material.ts b/src/api/material.ts
index a777a95..11b6553 100644
--- a/src/api/material.ts
+++ b/src/api/material.ts
@@ -55,3 +55,14 @@ export const GetLabProductApi = () => {
method: "get",
})
}
+
+/**
+ * 收藏面料
+ * @returns
+*/
+// export const GetProductDetailApi = () => {
+// return useRequest({
+// url: `/v1/mall/product`,
+// method: "get",
+// })
+// }
diff --git a/src/api/mine.ts b/src/api/mine.ts
new file mode 100644
index 0000000..aa0ae5a
--- /dev/null
+++ b/src/api/mine.ts
@@ -0,0 +1,12 @@
+import { useRequest } from "@/use/useHttp"
+
+/**
+ * 获取用户资产
+ * @returns
+*/
+export const userassets = () => {
+ return useRequest({
+ url: `/v1/mall/user/assets`,
+ method: "get",
+ })
+}
diff --git a/src/api/order.ts b/src/api/order.ts
index f723f47..26c175c 100644
--- a/src/api/order.ts
+++ b/src/api/order.ts
@@ -84,9 +84,19 @@ export const SaleOrderApi = () => {
/**
* 作废销售单
*/
- export const CancelOrderApi = () => {
+export const CancelOrderApi = () => {
return useRequest({
url: `/v1/mall/saleOrder/cancel`,
method: "put",
})
+}
+
+/**
+ * 确认收货
+ */
+export const ReceiveOrderApi = () => {
+ return useRequest({
+ url: `/v1/mall/saleOrder/receive`,
+ method: "put",
+ })
}
\ No newline at end of file
diff --git a/src/api/orderPay.ts b/src/api/orderPay.ts
index 99ba9d9..2b49a18 100644
--- a/src/api/orderPay.ts
+++ b/src/api/orderPay.ts
@@ -1,7 +1,7 @@
import { useRequest } from "@/use/useHttp"
/**
- * 获取订单支付方式信息
+ * 获取应收单订单支付方式信息
*/
export const GetOrderPayApi = () => {
return useRequest({
@@ -11,11 +11,31 @@ import { useRequest } from "@/use/useHttp"
}
/**
- * 订单支付提交
+ * 应收单订单支付提交
*/
export const SubmitOrderPayApi = () => {
return useRequest({
url: `/v1/mall/orderPayment/orderPaymentSubmission`,
method: "put",
})
+}
+
+/**
+ * 获取预付单支付方式信息
+ */
+ export const GetPrepayOrderPayApi = () => {
+ return useRequest({
+ url: `/v1/mall/orderPayment/preCollectOrder/orderPaymentMethodInfo`,
+ method: "get",
+ })
+}
+
+/**
+ * 预付单订单支付提交
+ */
+ export const SubmitPrepayOrderPayApi = () => {
+ return useRequest({
+ url: `/v1/mall/orderPayment/preCollectOrder/orderPaymentSubmission`,
+ method: "put",
+ })
}
\ No newline at end of file
diff --git a/src/api/salesAfterOrder.ts b/src/api/salesAfterOrder.ts
new file mode 100644
index 0000000..1755ce0
--- /dev/null
+++ b/src/api/salesAfterOrder.ts
@@ -0,0 +1,62 @@
+import { useRequest } from "@/use/useHttp"
+
+/**
+ * 售后订单列表
+ */
+export const GetSaleOrderListApi = () => {
+ return useRequest({
+ url: `/v1/mall/returnApplyOrder/list`,
+ method: "get",
+ })
+}
+
+/**
+ * 申请售后订单
+ */
+ export const ReturnApplyOrderApi = () => {
+ return useRequest({
+ url: `/v1/mall/returnApplyOrder`,
+ method: "post",
+ })
+}
+
+/**
+ * 取消退货
+ */
+ export const ReturnApplyOrderCancelApi = () => {
+ return useRequest({
+ url: `/v1/mall/returnApplyOrder/cancel`,
+ method: "post",
+ })
+}
+
+/**
+ * 售后订单详情
+ */
+ export const SaleOrderOrderDetailApi = () => {
+ return useRequest({
+ url: `/v1/mall/returnApplyOrder`,
+ method: "get",
+ })
+}
+
+/**
+ * 物流上传
+ */
+ export const ReturnApplyLogisticsApi = () => {
+ return useRequest({
+ url: `/v1/mall/returnApplyOrder/upload`,
+ method: "put",
+ })
+}
+
+
+/**
+ * 售后货物状况
+ */
+ export const ReturnGoodsStatusApi = () => {
+ return useRequest({
+ url: `/v1/mall/enum/return/goodsStatus`,
+ method: "get",
+ })
+}
diff --git a/src/api/shopCart.ts b/src/api/shopCart.ts
index 87e0d32..291ab60 100644
--- a/src/api/shopCart.ts
+++ b/src/api/shopCart.ts
@@ -31,4 +31,15 @@ export const DelShoppingCartApi = () => {
url: `/v1/mall/shoppingCart/productColor`,
method: "delete",
})
+}
+
+/**
+ * 修改购物车数量
+ * @returns
+*/
+export const UpdateShoppingCartApi = () => {
+ return useRequest({
+ url: `/v1/mall/shoppingCart/productColor`,
+ method: "put",
+ })
}
\ No newline at end of file
diff --git a/src/api/user.ts b/src/api/user.ts
index 283f55c..7d7c97f 100644
--- a/src/api/user.ts
+++ b/src/api/user.ts
@@ -39,3 +39,33 @@ import { useRequest } from "@/use/useHttp"
method: "put",
})
}
+
+/**
+ * 公司类型|企业类型 下拉列表
+ */
+ export const companyTypeApi = () => {
+ return useRequest({
+ url: `/v1/mall/enum/purchaserType`,
+ method: "get",
+ })
+}
+
+/**
+ * 头像更改
+ */
+ export const portraitUpdateApi = () => {
+ return useRequest({
+ url: `/v1/mall/user/avatar`,
+ method: "put",
+ })
+}
+
+/**
+ * 绑定公司
+ */
+ export const BindingCompanyApi = () => {
+ return useRequest({
+ url: `/v1/mall/user/binding/company`,
+ method: "put",
+ })
+}
\ No newline at end of file
diff --git a/src/app.config.ts b/src/app.config.ts
index 8f5d3e2..e735150 100644
--- a/src/app.config.ts
+++ b/src/app.config.ts
@@ -96,7 +96,8 @@ export default {
root: "pages/order",
pages: [
"index",
- "comfirm"
+ "comfirm",
+ "cutOrder/index",
]
},
{
@@ -166,11 +167,16 @@ export default {
]
},
{
- root: "pages/sampleComparison",
+ root: "pages/applyAfterSales",
pages: [
"index",
]
},
-
+ {
+ root: "pages/collection",
+ pages: [
+ "index",
+ ]
+ }
]
}
diff --git a/src/common/constant.js b/src/common/constant.js
index b3c4852..6fca6ae 100644
--- a/src/common/constant.js
+++ b/src/common/constant.js
@@ -21,7 +21,6 @@ export const UPLOAD_CDN_URL = `https://v0.api.upyun.com/`
// cdn
export const IMG_CND_Prefix = CURRENT_ENV.includes('development')? "https://test.cdn.zzfzyc.com":"https://cdn.zzfzyc.com"
-
// 上传图片视频
export const CDN_UPLOAD_IMG = `${UPLOAD_CDN_URL || ''}`;
diff --git a/src/common/enum.ts b/src/common/enum.ts
index 00a8ec1..cdcdf7a 100644
--- a/src/common/enum.ts
+++ b/src/common/enum.ts
@@ -1,10 +1,12 @@
//订单状态枚举
export const ORDER_STATUS = {
+ SaleorderstatusWaitingPrePayment : {value:10, label:'预付款'}, // 预付款
SaleOrderStatusBooking : {value:0, label:'待接单'}, // 待接单
SaleOrderStatusArranging : {value:1, label:'配布中'}, // 配布中
SaleOrderStatusArranged : {value:2, label:'已配布'}, // 已配布
SaleOrderStatusWaitingPayment : {value:7, label:'待付款'}, // 待付款
+ SaleOrderStatusTaking: {value: 11, label:'提货中'}, //提货中
SaleOrderStatusWaitingDelivery : {value:3, label:'待发货'}, // 待发货
SaleOrderStatusWaitingReceipt : {value:8, label:'待收货'}, // 待收货
SaleOrderStatusAlreadyReceipt : {value:9, label:'已收货'}, // 已收货
@@ -15,27 +17,36 @@ export const ORDER_STATUS = {
//售后单状态枚举
export const AFTER_ORDER_STATUS = {
- SaleOrderStatusBooking : {value:0, label:'申请中'},
- SaleOrderStatusArranging : {value:1, label:'退货中'},
- SaleOrderStatusArranged : {value:2, label:'待验布'},
- SaleOrderStatusWaitingPayment : {value:7, label:'退款中'},
- SaleOrderStatusWaitingDelivery : {value:3, label:'已退款'},
- SaleOrderStatusWaitingReceipt : {value:8, label:'已取消'},
- SaleOrderStatusAlreadyReceipt : {value:9, label:'已拒绝'},
+ ReturnStageApplying : {value:0, label:'申请中'}, // 申请中
+ ReturnStageWaitCheck : {value:1, label:'退货中'}, // 退货中
+ ReturnStageChecked : {value:2, label:'待验布'}, // 待验布
+ ReturnStageReturned : {value:3, label:'已退款'}, // 已退款
+ ReturnStageCancel : {value:4, label:'已取消'}, // 已取消
+ ReturnStageQualityCheckPendingRefund : {value:5, label:'待退款'}, // 待退款-质检
+ ReturnStageServiceOrderPendingRefund : {value:6, label:'待退款'}, // 待退款
+ ReturnStageRejected : {value:7, label:'已拒绝'}, // 已拒绝
}
//支付方式
export const PAYMENT_METHOD = {
PaymentMethodPreDeposit: {value:1, label:'预存款'},
PaymentMethodAccountPeriod : {value:2, label:'账期'},
- PaymentMethodofflineRemittance: {value:3, label:'线下汇款'},
- PaymentMethodScanCodeToPay: {value:4, label:'扫码支付'},
- PaymentMethodCashOnDelivery: {value:5, label:'货到付款'},
+ PaymentMethodofflineRemittance: {value:0, label:'线下汇款'},
+ PaymentMethodScanCodeToPay: {value:3, label:'扫码支付'},
+ PaymentMethodCashOnDelivery: {value:4, label:'货到付款'},
}
-export type PAYMENT_METHOD_PARAM = 1|2|3|4|5
+export type PAYMENT_METHOD_PARAM = 0|1|2|3|4
+
+
+//订单类型
+export const SALE_MODE = {
+ SaLeModeBulk: {value:0, label:'大货'},
+ SaleModeLengthCut: {value:1, label:'剪版'},
+ SaLeModeWeightCut: {value:2, label:'散剪'},
+}
//分享场景枚举
export const SHARE_SCENE = {
ShareDetail: {value:1, label:'详情分享'},
SharePage : {value:2, label:'页面分享'},
-}
\ No newline at end of file
+}
diff --git a/src/common/fotmat.js b/src/common/fotmat.js
index 2176a51..09b2d01 100644
--- a/src/common/fotmat.js
+++ b/src/common/fotmat.js
@@ -142,5 +142,22 @@ export const toDecimal2 = (x) => {
* @returns
*/
export const formatImgUrl = (url, suffix="!w200") => {
- return url?IMG_CND_Prefix + url + suffix:'https://cdn.zzfzyc.com/mall/no_img.png'
-}
\ No newline at end of file
+ return url?IMG_CND_Prefix + url + suffix:IMG_CND_Prefix +'/mall/no_img.png'
+}
+
+/**
+ *
+ * @param {纹理图} imgurl
+ * @param {rgb} rgb
+ * @param {} suffix
+ * @returns 1 有纹理图,2 有rgb 3默认图
+ */
+export const isLabImage = (imgurl, rgb, suffix="!w200") => {
+ if(imgurl) {
+ return {status:1, value: IMG_CND_Prefix+'/'+imgurl+suffix}
+ } else if(rgb.r != 0 || rgb.g != 0 || rgb.b != 0) {
+ return {status:2, value: rgb}
+ } else {
+ return {status:3, value: IMG_CND_Prefix+'/mall/no_img.png'}
+ }
+}
diff --git a/src/common/uploadImage.js b/src/common/uploadImage.js
deleted file mode 100644
index 6a6cf8a..0000000
--- a/src/common/uploadImage.js
+++ /dev/null
@@ -1,150 +0,0 @@
-import Taro from '@tarojs/taro';
-import { GET_UPLOAD_SIGN, CDN_UPLOAD_IMG, UPLOAD_CDN_URL } from './constant'
-
-import { GetSignApi } from '@/api/cdn'
-
-
-const { fetchData: GetSign, success, data: resData, msg, code } = GetSignApi()
-
-
-// 上传图片 获取auth,Policy
-/*
- scene 场景值,区分上传文件的根路径
- type 类型值,区分上传业务bucket
-*/
-const getSecret = (scene, type) => {
- return new Promise(async (resolve, reject) => {
-
- const SAVE_PATH = `/${scene}/{filemd5}{day}{hour}{min}{sec}{.suffix}`;
-
-
- let params = {
- 'method': 'post',
- 'save_key': SAVE_PATH
- }
-
- // 获取签名
- await GetSign(params)
- if (success.value) {
- // console.log('返回签名',resData.value);
- resolve(resData.value)
- } else {
- reject({
- code: code.value || '9999',
- msg: msg.value
- });
- }
-
- })
-}
-const getFileType = (name) => {
- if (!name) return false;
- var imgType = ["gif", "jpeg", "jpg", "bmp", "png"];
- var videoType = ["avi", "wmv", "mkv", "mp4", "mov", "rm", "3gp", "flv", "mpg", "rmvb", "quicktime"];
-
- if (RegExp("\.?(" + imgType.join("|") + ")$", "i").test(name.toLowerCase())) {
- return 'image';
- } else if (RegExp("\.(" + videoType.join("|") + ")$", "i").test(name.toLowerCase())) {
- return 'video';
- } else {
- return false;
- }
-}
-
-const upYunbucket = (type) => {
- var bucket = ""
- switch (type) {
- case "product":
- bucket = "testzzfzyc"
- break;
- }
- return bucket
-}
-
-
-/**
- *
- * @param {*} file 传入文件
- * @param {String} secene 传入 'product'
- * @param {String} type 传入 'product'
- * @returns
- */
-const uploadCDNImg = (file, secene, type) => {
- // var file = event.target.files[0];
- // var filetype = file.type
- let filetype = file.tempFilePath
-
- if (!getFileType(filetype)) {
- Taro.showToast({
- title: "上传文件类型错误",
- icon: "none",
- duration: 3800
- })
- return false
- }
- return new Promise((resolve, reject, race) => {
- getSecret(secene, type)
- .then(result => {
-
- console.log('bucket', result.bucket);
- var formdata = {
- 'authorization': result.authorization,
- 'policy': result.policy,
- // "file": file.tempFilePath,
- }
-
- const uploadTask = Taro.uploadFile({
- url: `${UPLOAD_CDN_URL}${result.bucket}`,
- formData: formdata,
- filePath: file.tempFilePath,
- name: 'file',
- success: res => {
- resolve(JSON.parse(`${res.data}`))
- },
- fail: err => {
- console.log(err)
- reject(err)
- }
- })
-
- uploadTask.progress(res => {
- console.log('上传进度', res.progress);
- if (res.progress < 100) {
- Taro.showLoading({
- title: '上传中...'
- })
- } else {
- Taro.hideLoading()
- }
- })
- })
- .catch(result => {
- reject(result)
- Taro.showToast({
- title: "获取密钥失败!",
- icon: "none",
- duration: 3800
- })
- })
- })
-}
-
-const taroChooseImg = () => {
- Taro.chooseImage({
- count: 1,
- sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
- sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
- success: (res) => {
- console.log('res:', res)
- Taro.chooseMessageFile({
- count: 1,
-
- })
- },
- fail: (err) => {
- console.log('图片选择失败:', err)
- }
- })
-}
-
-export default uploadCDNImg
\ No newline at end of file
diff --git a/src/components/AddressList/index.scss b/src/components/AddressList/index.scss
index 8c6198c..1224a8e 100644
--- a/src/components/AddressList/index.scss
+++ b/src/components/AddressList/index.scss
@@ -89,7 +89,7 @@
font-weight: 400;
color: #ffffff;
display: flex;align-items: center;justify-content: center;
- position: absolute;bottom: 4%;left: 50%;
+ position: absolute;bottom: 100px;left: 50%;
transform: translateX(-50%);
}
.address-no-data{
diff --git a/src/components/AddressList/index.tsx b/src/components/AddressList/index.tsx
index b2066a0..7f71e93 100644
--- a/src/components/AddressList/index.tsx
+++ b/src/components/AddressList/index.tsx
@@ -93,7 +93,7 @@ const AddressList = memo((props:Params)=>{
{item.name}
{
item.is_default?默认:
- {item.phone.replace(item.phone.substring(4,7), "****")}
+ {item.phone.replace(item.phone.substring(3,7), "****")}
}
@@ -102,7 +102,7 @@ const AddressList = memo((props:Params)=>{
{/* {item.address_detail} */}
{
- item.is_default&&{item.phone.replace(item.phone.substring(4,7), "****")}
+ item.is_default&&{item.phone.replace(item.phone.substring(3,7), "****")}
}
e.stopPropagation()} url={`/pages/addressAdd/index?type=edit&id=${item.id}`} hoverClass="none" className="address-edit">
diff --git a/src/components/FromListCertification/index.scss b/src/components/FromListCertification/index.scss
index fc0ed5a..b2e4f71 100644
--- a/src/components/FromListCertification/index.scss
+++ b/src/components/FromListCertification/index.scss
@@ -9,9 +9,9 @@
font-size: 28px;
font-weight: 400;
color: #000000;
- margin-top: 20px;
- width: 150px;
+ width: 200px;
border-right: 1px solid #F0F0F0;
+ display: flex;align-items: center;
}
.From-list-certification-label-required::before{
content: "*";
@@ -19,12 +19,12 @@
font-size: 28px;
}
.From-list-certification-right{
- width: 506px;
+ min-width: 100px;
+ flex: 1;
font-size: 26px;
font-weight: 400;
}
.From-list-certification-right-meet{
- width: 506px;
min-height: 45px;
border-radius: 20px;
box-sizing: border-box;
@@ -69,6 +69,8 @@
}
.From-list-certification-right-placeholder{
color: #ababab;
+ text-overflow: ellipsis;overflow: hidden;white-space: nowrap;
+ width: 100%;
}
.From-list-certification-right-enter .icon-a-moreback{
font-size: 28px;
diff --git a/src/components/FromListCertification/index.tsx b/src/components/FromListCertification/index.tsx
index 3017860..333fdc6 100644
--- a/src/components/FromListCertification/index.tsx
+++ b/src/components/FromListCertification/index.tsx
@@ -14,12 +14,13 @@ interface ListParams{
style?: object, //整行样式
labelStyle?: object, // label样式
contentStyle?: object,
- required?: boolean
+ required?: boolean,
+ showIcon?: boolean, // 是否显示右边的箭头,type=select
}
// 表单列表
const FromList = memo((props:ListParams)=>{
- const {type="input",value="",style={},labelStyle={},contentStyle={},required=false} = props;
+ const {type="input",value="",style={},labelStyle={},contentStyle={},required=false,showIcon=true} = props;
return (
@@ -44,7 +45,9 @@ const FromList = memo((props:ListParams)=>{
{props.placeholder}
}
-
+
+ {showIcon&&}
+
>
}
diff --git a/src/components/InfiniteScrollPaging/index.tsx b/src/components/InfiniteScrollPaging/index.tsx
index 8db82b0..dc20d57 100644
--- a/src/components/InfiniteScrollPaging/index.tsx
+++ b/src/components/InfiniteScrollPaging/index.tsx
@@ -2,7 +2,7 @@
import InfiniteScroll from "@/components/infiniteScroll"
import { ReactNode, useEffect, useMemo, useRef, useState } from "react"
import { dataLoadingStatus, getFilterData } from "@/common/util";
-import { isEmptyObject } from "@/common/common";
+import { alert, isEmptyObject } from "@/common/common";
interface Params{
children?: ReactNode,
@@ -36,9 +36,9 @@ export default (props: Params)=>{
page: tRefreshDataRef.page,
size: tRefreshDataRef.size,
});
- // 返回数据
- props.change&&props.change(result);
if(result.success){
+ // 返回数据
+ props.change&&props.change(result);
if(result.data.total<=0){
setRefreshData({
...tRefreshDataRef,
@@ -59,6 +59,7 @@ export default (props: Params)=>{
})
}
}else{
+ alert.none(result.msg);
setRefreshData({
...tRefreshDataRef,
refreshStatus: false,
diff --git a/src/components/LabAndImg/index.module.scss b/src/components/LabAndImg/index.module.scss
new file mode 100644
index 0000000..836ba5b
--- /dev/null
+++ b/src/components/LabAndImg/index.module.scss
@@ -0,0 +1,17 @@
+
+.labAndImg_main{
+ width: 100%;
+ height: 100%;
+ .boxColor{
+ width: 100%;
+ height: 100%;
+ border-radius: 20px;
+ border:1PX solid #818181;
+ }
+ image{
+ width: 100%;
+ height: 100%;
+ border-radius: 20px;
+ }
+
+}
diff --git a/src/components/LabAndImg/index.tsx b/src/components/LabAndImg/index.tsx
new file mode 100644
index 0000000..842d0d9
--- /dev/null
+++ b/src/components/LabAndImg/index.tsx
@@ -0,0 +1,30 @@
+import { formatImgUrl } from "@/common/fotmat";
+import { Image, View } from "@tarojs/components";
+import { memo, useMemo } from "react";
+import styles from './index.module.scss'
+
+//该组件宽高为100%需调整外层元素宽高
+type Param = {
+ value?: {
+ texture_url?: string, //纹理图路径
+ lab?: {l:number, a:number, b:number}, //lab
+ rgb?: {r:number, g:number, b:number} //rgb
+ }
+}
+export default memo(({value}:Param) => {
+ //lab是否都是0
+ const rgbStyle = useMemo(() => {
+ if(value?.lab&&(value.lab.l||value.lab.a||value.lab.b)) {
+ return {'backgroundColor':`rgb(${value.rgb?.r} ${value.rgb?.g} ${value.rgb?.b})`}
+ } else {
+ return null
+ }
+ }, [value])
+ return (
+
+ {value?.texture_url&&}
+ {(!value?.texture_url&&rgbStyle)&&}
+ {(!value?.texture_url&&!rgbStyle)&&}
+
+ )
+})
\ No newline at end of file
diff --git a/src/components/afterOrderBtns/index copy.tsx b/src/components/afterOrderBtns/index copy.tsx
new file mode 100644
index 0000000..d695e16
--- /dev/null
+++ b/src/components/afterOrderBtns/index copy.tsx
@@ -0,0 +1,202 @@
+import { CancelOrderApi, ReceiveOrderApi } from "@/api/order"
+import { alert } from "@/common/common"
+import { ORDER_STATUS, SALE_MODE } from "@/common/enum"
+import { ScrollView, Text, View } from "@tarojs/components"
+import Taro from "@tarojs/taro"
+import { useCallback, useRef, memo, useState, useEffect, useMemo } from "react"
+import styles from './index.module.scss'
+
+type Param = {
+ orderInfo: {
+ status: number, //订单状态
+ orderId: number, //订单id
+ actual_amount: number, //实付金额
+ wait_pay_amount: number, //待付金额
+ sale_mode: number //订单类型
+ }|null,
+ onClick?: (val: number) => void //点击后触发的事件,返回订单状态
+}
+
+export default memo(({orderInfo, onClick}:Param) => {
+ //订单状态枚举
+ const {
+ SaleOrderStatusBooking,
+ SaleOrderStatusArranging,
+ SaleOrderStatusArranged,
+ SaleOrderStatusWaitingDelivery,
+ SaleOrderStatusComplete,
+ SaleOrderStatusRefund,
+ SaleOrderStatusWaitingPayment,
+ SaleOrderStatusWaitingReceipt,
+ SaleOrderStatusAlreadyReceipt,
+ SaleorderstatusWaitingPrePayment
+ } = ORDER_STATUS
+
+ //订单类型
+ const {
+ SaLeModeBulk,
+ SaleModeLengthCut,
+ SaLeModeWeightCut,
+ } = SALE_MODE
+
+ //订单按钮按订单状态归类, value是该订单状态,可能该按钮会出现
+ const orderBtnsList = useRef([
+ {
+ id: 1,
+ value: [SaleOrderStatusBooking.value,
+ SaleOrderStatusArranging.value,
+ SaleOrderStatusArranged.value,
+ SaleOrderStatusWaitingPayment.value,
+ SaleOrderStatusWaitingDelivery.value], //取消订单按钮对应: 待接单,配布中,已配布, 待付款, 待发货
+ label: '取消订单'
+ },
+ {
+ id: 2,
+ value: [SaleorderstatusWaitingPrePayment.value, SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value], //去付款按钮对应:待付款, 待发货, 待收货, 已收货, 已完成
+ label: '去付款'
+ },
+ {
+ id: 3,
+ value: [SaleOrderStatusWaitingDelivery.value], //申请退款按钮对应: 待发货
+ label: '申请退款'
+ },
+ {
+ id: 4,
+ value: [SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value], //取消订单按钮对应: 待收货, 已收货, 已完成, 已退款
+ label: '查看物流'
+ },
+ {
+ id: 5,
+ value: [SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusRefund.value], //申请退货按钮对应: 待收货, 已收货, 已退款
+ label: '申请退货'
+ },
+ {
+ id: 6,
+ value: [SaleOrderStatusWaitingReceipt.value], //确认收货按钮对应: 待收货
+ label: '确认收货'
+ },
+ {
+ id: 7,
+ value: [SaleOrderStatusWaitingReceipt.value,SaleOrderStatusAlreadyReceipt.value,SaleOrderStatusComplete.value,SaleOrderStatusRefund.value], //再次购买按钮对应: 待收货,已收货,已完成, 已退款
+ label: '再次购买'
+ },
+ {
+ id: 8,
+ value: [SaleOrderStatusBooking.value], //按钮对应: 待接单
+ label: '退款'
+ },
+ ])
+
+
+ //判断是否显示该按钮
+ const orderBtnsShow = (item) => {
+ if(orderInfo) {
+ if(item.id == 1) {
+ //取消订单按钮
+ return( orderInfo.actual_amount == 0 && item.value.includes(orderInfo.status)) //在待发货之前没有付过款
+ } else if (item.id == 2) {
+ //去付款按钮
+ return( orderInfo.wait_pay_amount != 0 && item.value.includes(orderInfo.status)) //只要没有付完款就显示
+ } else if(item.id == 3 ) {
+ //申请退款, 只有大货才有
+ return (orderInfo.sale_mode == SaLeModeBulk.value && orderInfo.actual_amount != 0 && item.value.includes(orderInfo.status)) //大货在待发货付过款
+ } else if( item.id == 8) {
+ //退款按钮(直接退款不用申请), 只有散剪和剪板有
+ return (orderInfo.sale_mode != SaLeModeBulk.value && orderInfo.actual_amount != 0 && item.value.includes(orderInfo.status)) //散剪和剪板在待接单时付过款
+ }
+ else {
+ //其他按钮
+ return item.value.includes(orderInfo.status)
+ }
+ }
+ }
+
+ //显示的按钮数组
+ const orderBtnsShowList: {id: number, value: any, label: string}[] = useMemo(() => {
+ return orderBtnsList.current.filter(item => {
+ return orderBtnsShow(item)
+ })
+ }, [orderInfo])
+
+
+
+ //点击按钮操作
+ const submitBtns = (val, index) => {
+ (val == 1)&&cancelOrder(); //取消订单按钮
+ (val == 2)&&onClick?.(2); //去付款按钮
+ (val == 6)&&receiveOrder(); //确认收货
+
+ }
+
+ //取消订单
+ const {fetchData: cancelFetchData} = CancelOrderApi()
+ const cancelOrder = () => {
+ Taro.showModal({
+ title: '要取消该订单吗?',
+ success: async function (res) {
+ if (res.confirm) {
+ let res = await cancelFetchData({id: orderInfo?.orderId})
+ if(res.success) {
+ alert.success('取消成功')
+ onClick?.(1)
+ } else {
+ alert.none(res.msg)
+ }
+ } else if (res.cancel) {
+ console.log('用户点击取消')
+ }
+ }
+ })
+ }
+
+ //确认订单
+ const {fetchData: receiveOrderFetchData} = ReceiveOrderApi()
+ const receiveOrder = async () => {
+ console.log('123456')
+ Taro.showModal({
+ title: '确定收货?',
+ success: async function (res) {
+ if (res.confirm) {
+ let res = await receiveOrderFetchData({sale_order_id: orderInfo?.orderId})
+ if(res.success){
+ onClick?.(6)
+ alert.success('收货成功')
+ } else {
+ alert.error('收货失败')
+ }
+ } else if (res.cancel) {
+ console.log('用户点击取消')
+ }
+ }
+ })
+ }
+
+ //显示更多按钮
+ const [showMore, setShowMore] = useState(false)
+ const styleTop = useMemo(() => {
+ return {top:`-${(orderBtnsShowList.length - 3)*70 + 10}rpx`, left: `-${10}rpx`}
+ }, [orderBtnsShowList])
+
+ return (
+
+ {(orderBtnsShowList.length > 3)&&
+ setShowMore(true)}>更多
+ {showMore&&
+
+ {orderBtnsShowList.map((item, index) => {
+ return ((index >= 3) && submitBtns(item.id, index)}>{item.label})
+ })}
+
+ setShowMore(false)}>
+ }
+ }
+
+
+ {orderBtnsShowList.map((item, index) =>
+ (index < 3)&& submitBtns(item.id, index)}>{item.label}
+ )}
+
+
+
+ )
+})
\ No newline at end of file
diff --git a/src/components/afterOrderBtns/index.module.scss b/src/components/afterOrderBtns/index.module.scss
new file mode 100644
index 0000000..252b22e
--- /dev/null
+++ b/src/components/afterOrderBtns/index.module.scss
@@ -0,0 +1,87 @@
+.btns_list{
+ width: 100%;
+ // margin-top: 30px;
+ display: flex;
+ align-content: center;
+ .more{
+ font-size: 28px;
+ width: 143px;
+ display: flex;
+ align-items: center;
+ color: $color_font_two;
+ padding-left: 20px;
+ position: relative;
+
+ .more_list{
+ position: absolute;
+ background-color: #fff;
+ width: 226px;
+ box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.06);
+ border-radius: 10px;
+ padding: 0 20px;
+ box-sizing: border-box;
+ z-index:999;
+ &::before{
+ z-index: 1;
+ position: absolute;
+ bottom: -7px;
+ left: 50px;
+ width: 15px;
+ height: 15px;
+ content: " ";
+ transform: rotate(45deg);
+ background: #fff;
+ box-sizing: border-box;
+ box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.1);
+ }
+ .more_item{
+ font-size: 28px;
+ height: 70px;
+ line-height: 70px;
+ text-align: center;
+ &:nth-last-child(n+2) {
+ border-bottom: 1PX solid #F0F0F0;
+ }
+ }
+ }
+ .more_bg{
+ position:fixed;
+ width: 100vw;
+ height: 100vh;
+ top: 0;
+ left: 0;
+ }
+ }
+ .scroll{
+ white-space: nowrap;
+ width: 100%;
+ }
+ .list_scroll{
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ }
+ .btns_item{
+ padding: 0 15px;
+ width: 130px;
+ border: 2px solid #dddddd;
+ border-radius: 38px;
+ text-align: center;
+ line-height: 60px;
+ font-size: $font_size;
+ color: $color_font_three;
+ display:inline-block;
+ &:nth-child(n+2) {
+ margin-left: 32px;
+ }
+ &:nth-last-child(1) {
+ border: 2px solid $color_main;
+ color: $color_main;
+ }
+
+ }
+ .end_btn{
+ border: 2px solid $color_main;
+ color: $color_main;
+ }
+}
\ No newline at end of file
diff --git a/src/components/afterOrderBtns/index.tsx b/src/components/afterOrderBtns/index.tsx
new file mode 100644
index 0000000..6750838
--- /dev/null
+++ b/src/components/afterOrderBtns/index.tsx
@@ -0,0 +1,193 @@
+import { CancelOrderApi, ReceiveOrderApi } from "@/api/order"
+import { alert } from "@/common/common"
+import { AFTER_ORDER_STATUS, ORDER_STATUS, SALE_MODE } from "@/common/enum"
+import {Text, View } from "@tarojs/components"
+import Taro from "@tarojs/taro"
+import {useRef, memo, useState, useMemo } from "react"
+import classnames from "classnames";
+import styles from './index.module.scss'
+import { ReturnApplyOrderCancelApi } from "@/api/salesAfterOrder"
+
+type Param = {
+ orderInfo: {
+ stage: number, //售后状态
+ orderId: number, //订单id
+ sale_mode: number //订单类型
+ type: number //1退货,2退款
+ },
+ onClick?: (val: number) => void //点击后触发的事件,返回订单状态
+}
+
+export default memo(({orderInfo, onClick}:Param) => {
+ //售后订单状态
+ const {
+ ReturnStageApplying,
+ ReturnStageWaitCheck,
+ ReturnStageChecked,
+ ReturnStageReturned,
+ ReturnStageCancel,
+ ReturnStageQualityCheckPendingRefund,
+ ReturnStageServiceOrderPendingRefund,
+ ReturnStageRejected
+ } = AFTER_ORDER_STATUS
+
+ //订单类型
+ const {
+ SaLeModeBulk,
+ SaleModeLengthCut,
+ SaLeModeWeightCut,
+ } = SALE_MODE
+
+ //售后按钮按售后状态归类, value是该订单状态,可能该按钮会出现
+ const orderBtnsList = useRef([
+ {
+ id: 1,
+ value: [ReturnStageApplying.value, ReturnStageWaitCheck.value],
+ label: '取消退货'
+ },
+ {
+ id: 2,
+ value: [ReturnStageWaitCheck.value],
+ label: '退货物流'
+ },
+ {
+ id: 3,
+ value: [ReturnStageChecked.value, ReturnStageQualityCheckPendingRefund.value],
+ label: '查看物流'
+ },
+ {
+ id: 4,
+ value: [ReturnStageQualityCheckPendingRefund.value, ReturnStageServiceOrderPendingRefund.value, ReturnStageReturned.value],
+ label: '质检结果'
+ },
+ {
+ id: 5,
+ value: [ReturnStageServiceOrderPendingRefund.value, ReturnStageReturned.value],
+ label: '退货码单'
+ },
+ {
+ id: 6,
+ value: [ReturnStageApplying.value, ReturnStageServiceOrderPendingRefund.value],
+ label: '取消退款'
+ },
+ {
+ id: 7,
+ value: [ReturnStageServiceOrderPendingRefund.value, ReturnStageReturned.value],
+ label: '退款码单'
+ },
+ {
+ id: 8,
+ value: [],
+ label: '申请记录'
+ },
+ ])
+
+
+ //判断是否显示该按钮
+ const orderBtnsShow = (item) => {
+ if(!orderInfo) return false
+
+ if(item.id == 1) {
+ //取消退货
+ return (orderInfo.type == 1)&&item.value.includes(orderInfo.stage)
+ } else if (item.id == 6) {
+ //取消退款
+ return (orderInfo.type == 2)&&item.value.includes(orderInfo.stage)
+ } else {
+ return item.value.includes(orderInfo.stage)
+ }
+
+ }
+
+ //显示的按钮数组
+ const orderBtnsShowList: {id: number, value: any, label: string}[] = useMemo(() => {
+ return orderBtnsList.current.filter(item => {
+ return orderBtnsShow(item)
+ })
+ }, [orderInfo])
+
+
+
+ //点击按钮操作
+ const submitBtns = (val, index) => {
+ if (val == 1) {
+ cancelOrder()
+ } else if (val == 6) {
+ receiveOrder()
+ } else {
+ onClick?.(val)
+ }
+ }
+
+ //取消退货
+ const {fetchData: returnApplyOrderCancelFetchData} = ReturnApplyOrderCancelApi()
+ const cancelOrder = () => {
+ Taro.showModal({
+ title: '要取消退货吗?',
+ success: async function (res) {
+ if (res.confirm) {
+ let res = await returnApplyOrderCancelFetchData({id: orderInfo?.orderId})
+ if(res.success) {
+ alert.success('取消成功')
+ onClick?.(1)
+ } else {
+ alert.none(res.msg)
+ }
+ } else if (res.cancel) {
+ console.log('用户点击取消')
+ }
+ }
+ })
+ }
+
+ //确认订单
+ const {fetchData: receiveOrderFetchData} = ReceiveOrderApi()
+ const receiveOrder = async () => {
+ console.log('123456')
+ Taro.showModal({
+ title: '确定收货?',
+ success: async function (res) {
+ if (res.confirm) {
+ let res = await receiveOrderFetchData({sale_order_id: orderInfo?.orderId})
+ if(res.success){
+ onClick?.(6)
+ alert.success('收货成功')
+ } else {
+ alert.error('收货失败')
+ }
+ } else if (res.cancel) {
+ console.log('用户点击取消')
+ }
+ }
+ })
+ }
+
+ //显示更多按钮
+ const [showMore, setShowMore] = useState(false)
+ const styleTop = useMemo(() => {
+ return {top:`-${(orderBtnsShowList.length - 3)*70 + 10}rpx`, left: `-${10}rpx`}
+ }, [orderBtnsShowList])
+
+ return (
+
+ {(orderBtnsShowList.length > 3)&&
+ setShowMore(true)}>更多
+ {showMore&&
+
+ {orderBtnsShowList.map((item, index) => {
+ return ((index >= 3) && submitBtns(item.id, index)}>{item.label})
+ })}
+
+ setShowMore(false)}>
+ }
+ }
+
+
+ {orderBtnsShowList.map((item, index) =>
+ (index < 3)&& submitBtns(item.id, index)}>{item.label}
+ )}
+
+
+
+ )
+})
\ No newline at end of file
diff --git a/src/components/counter/index.module.scss b/src/components/counter/index.module.scss
index fe96cca..2748cef 100644
--- a/src/components/counter/index.module.scss
+++ b/src/components/counter/index.module.scss
@@ -4,19 +4,25 @@
align-items: center;
justify-content: space-between;
width: 100%;
- .reduce, .plus{
- font-size: $font_size_big;
+ .plus{
color: $color_main;
width: 46px;
height: 46px;
- display: flex;
- align-items: center;
- justify-content:center;
+ text-align: center;
+ line-height: 43px;
font-size: 50px;
background-color: $color_main;
color: #fff;
border-radius: 8px;
}
+ .reduce {
+ font-size: 50px;
+ width: 46px;
+ height: 46px;
+ text-align: center;
+ line-height: 43px;
+ color:#007AFF;
+ }
.input{
display: flex;
align-items: flex-end;
@@ -25,10 +31,13 @@
box-sizing: border-box;
width: 106px;
border-radius: 10px;
+ input{
+ font-size: $font_size_medium;
+ text-align: right;
+ padding-right: 10px;
+ }
}
- input{
- font-size: $font_size_medium;
- }
+
.unit{
font-size: $font_size_min;
color: $color_font_two;
diff --git a/src/components/counter/index.tsx b/src/components/counter/index.tsx
index d7f632d..9ff7d87 100644
--- a/src/components/counter/index.tsx
+++ b/src/components/counter/index.tsx
@@ -11,12 +11,14 @@ type params = {
onChange?:(val:number) => void,
onBlue?:(val:number) => void, //失去焦点触发
onClickBtn?:(val:number) => void,
- unit?: string
+ unit?: string,
+ disable?: true|false, //是否禁用
}
-export default ({minNum = 0, maxNum = 100, step=1, digits = 0, defaultNum = 0, onChange, onBlue, onClickBtn, unit = ''}: params) => {
+export default ({minNum = 0, maxNum = 10000, step=1, digits = 0, defaultNum = 0, onChange, onBlue, onClickBtn, unit = '', disable = false}: params) => {
const [value, setValue] = useState({count:defaultNum})
const onPlus = () => {
+ if(disable) return false
let {count} = value
let num_res = Big(count).add(step).toNumber()
num_res = num_res >= maxNum?maxNum:num_res
@@ -26,9 +28,10 @@ export default ({minNum = 0, maxNum = 100, step=1, digits = 0, defaultNum = 0, o
onClickBtn?.(parseFloat(num_res))
}
const minus = () => {
+ if(disable) return false
let {count} = value
let num_res = Big(count).minus(step).toNumber()
- num_res = num_res < minNum?0:num_res
+ num_res = num_res < minNum?minNum:num_res
setValue({...value, count:num_res})
onChange?.(parseFloat(num_res))
onClickBtn?.(parseFloat(num_res))
@@ -102,6 +105,7 @@ export default ({minNum = 0, maxNum = 100, step=1, digits = 0, defaultNum = 0, o
onInput={onInputEven}
onBlur={onBluerEven}
type='digit'
+ disabled={disable}
/>
{unit}
diff --git a/src/components/counter/index1.module.scss b/src/components/counter/index1.module.scss
new file mode 100644
index 0000000..fe96cca
--- /dev/null
+++ b/src/components/counter/index1.module.scss
@@ -0,0 +1,37 @@
+
+.main{
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 100%;
+ .reduce, .plus{
+ font-size: $font_size_big;
+ color: $color_main;
+ width: 46px;
+ height: 46px;
+ display: flex;
+ align-items: center;
+ justify-content:center;
+ font-size: 50px;
+ background-color: $color_main;
+ color: #fff;
+ border-radius: 8px;
+ }
+ .input{
+ display: flex;
+ align-items: flex-end;
+ background-color: #fff;
+ padding: 5px 10px;
+ box-sizing: border-box;
+ width: 106px;
+ border-radius: 10px;
+ }
+ input{
+ font-size: $font_size_medium;
+ }
+ .unit{
+ font-size: $font_size_min;
+ color: $color_font_two;
+ }
+
+}
\ No newline at end of file
diff --git a/src/components/counter/index1.tsx b/src/components/counter/index1.tsx
new file mode 100644
index 0000000..d7f632d
--- /dev/null
+++ b/src/components/counter/index1.tsx
@@ -0,0 +1,111 @@
+import { Input, View } from "@tarojs/components"
+import { useEffect, useMemo, useRef, useState } from "react"
+import Big from 'big.js'
+import styles from "./index.module.scss"
+type params = {
+ minNum?: number, //最小值
+ maxNum?: number, //最大值
+ step?: number, //步长
+ defaultNum?: number, //默认值
+ digits?: number //多少位小数
+ onChange?:(val:number) => void,
+ onBlue?:(val:number) => void, //失去焦点触发
+ onClickBtn?:(val:number) => void,
+ unit?: string
+}
+export default ({minNum = 0, maxNum = 100, step=1, digits = 0, defaultNum = 0, onChange, onBlue, onClickBtn, unit = ''}: params) => {
+ const [value, setValue] = useState({count:defaultNum})
+
+ const onPlus = () => {
+ let {count} = value
+ let num_res = Big(count).add(step).toNumber()
+ num_res = num_res >= maxNum?maxNum:num_res
+ num_res = formatDigits(num_res)
+ setValue({...value, count:num_res})
+ onChange?.(parseFloat(num_res))
+ onClickBtn?.(parseFloat(num_res))
+ }
+ const minus = () => {
+ let {count} = value
+ let num_res = Big(count).minus(step).toNumber()
+ num_res = num_res < minNum?0:num_res
+ setValue({...value, count:num_res})
+ onChange?.(parseFloat(num_res))
+ onClickBtn?.(parseFloat(num_res))
+ }
+
+ //保留小数
+ const formatDigits = (num) => {
+ num = num + ''
+ if(num.includes('.')&&digits > 0) {
+ console.log('num::',num.includes('.'))
+ let res = num.split('.')
+ let last_num = res[1].substr(0, digits)
+ return res[0] + '.' + last_num
+ }
+ return parseFloat(num)
+ }
+
+ //检查数据
+ const checkData = (val) => {
+ let num = parseFloat(val)
+ if(num > maxNum) return maxNum
+ if(num < minNum) return minNum
+ return val
+ }
+
+
+ const onInputEven = (e) => {
+ let res = e.detail.value
+ if(res === '') {
+ setValue({...value, count:minNum})
+ onChange?.(minNum)
+ }
+ else if(!isNaN(Number(res))) {
+ let count = formatDigits(res)
+ count = checkData(count)
+ setValue({...value, count})
+ onChange?.(parseFloat(count as string))
+ } else {
+ let num = parseFloat(res)
+ if(!isNaN(num)) {
+ let count = formatDigits(num)
+ count = checkData(count)
+ setValue({...value, count})
+ onChange?.(count as number)
+ } else {
+ setValue({...value, count:defaultNum})
+ onChange?.(defaultNum)
+ }
+
+ }
+ }
+
+ const onBluerEven = () => {
+ let num = parseFloat(value.count)
+ if(!isNaN(num)) {
+ let count = formatDigits(num)
+ count = checkData(count)
+ setValue({...value, count})
+ onBlue?.(count as number)
+ } else {
+ setValue({...value, count:defaultNum})
+ onBlue?.(defaultNum)
+ }
+ }
+ return (
+
+ minus()}>-
+
+
+ {unit}
+
+ onPlus()}>+
+
+ )
+}
\ No newline at end of file
diff --git a/src/components/moveBtn/index.tsx b/src/components/moveBtn/index.tsx
index f7bac85..e30e888 100644
--- a/src/components/moveBtn/index.tsx
+++ b/src/components/moveBtn/index.tsx
@@ -29,7 +29,7 @@ export default ({children = null, onClick}:param) => {
return (
{children}
- {showMoveBtn&& dragEnd(e)}>
+ {showMoveBtn&& dragEnd(e)}>
}
diff --git a/src/components/orderBtns/index copy.tsx b/src/components/orderBtns/index copy.tsx
new file mode 100644
index 0000000..d695e16
--- /dev/null
+++ b/src/components/orderBtns/index copy.tsx
@@ -0,0 +1,202 @@
+import { CancelOrderApi, ReceiveOrderApi } from "@/api/order"
+import { alert } from "@/common/common"
+import { ORDER_STATUS, SALE_MODE } from "@/common/enum"
+import { ScrollView, Text, View } from "@tarojs/components"
+import Taro from "@tarojs/taro"
+import { useCallback, useRef, memo, useState, useEffect, useMemo } from "react"
+import styles from './index.module.scss'
+
+type Param = {
+ orderInfo: {
+ status: number, //订单状态
+ orderId: number, //订单id
+ actual_amount: number, //实付金额
+ wait_pay_amount: number, //待付金额
+ sale_mode: number //订单类型
+ }|null,
+ onClick?: (val: number) => void //点击后触发的事件,返回订单状态
+}
+
+export default memo(({orderInfo, onClick}:Param) => {
+ //订单状态枚举
+ const {
+ SaleOrderStatusBooking,
+ SaleOrderStatusArranging,
+ SaleOrderStatusArranged,
+ SaleOrderStatusWaitingDelivery,
+ SaleOrderStatusComplete,
+ SaleOrderStatusRefund,
+ SaleOrderStatusWaitingPayment,
+ SaleOrderStatusWaitingReceipt,
+ SaleOrderStatusAlreadyReceipt,
+ SaleorderstatusWaitingPrePayment
+ } = ORDER_STATUS
+
+ //订单类型
+ const {
+ SaLeModeBulk,
+ SaleModeLengthCut,
+ SaLeModeWeightCut,
+ } = SALE_MODE
+
+ //订单按钮按订单状态归类, value是该订单状态,可能该按钮会出现
+ const orderBtnsList = useRef([
+ {
+ id: 1,
+ value: [SaleOrderStatusBooking.value,
+ SaleOrderStatusArranging.value,
+ SaleOrderStatusArranged.value,
+ SaleOrderStatusWaitingPayment.value,
+ SaleOrderStatusWaitingDelivery.value], //取消订单按钮对应: 待接单,配布中,已配布, 待付款, 待发货
+ label: '取消订单'
+ },
+ {
+ id: 2,
+ value: [SaleorderstatusWaitingPrePayment.value, SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value], //去付款按钮对应:待付款, 待发货, 待收货, 已收货, 已完成
+ label: '去付款'
+ },
+ {
+ id: 3,
+ value: [SaleOrderStatusWaitingDelivery.value], //申请退款按钮对应: 待发货
+ label: '申请退款'
+ },
+ {
+ id: 4,
+ value: [SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value], //取消订单按钮对应: 待收货, 已收货, 已完成, 已退款
+ label: '查看物流'
+ },
+ {
+ id: 5,
+ value: [SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusRefund.value], //申请退货按钮对应: 待收货, 已收货, 已退款
+ label: '申请退货'
+ },
+ {
+ id: 6,
+ value: [SaleOrderStatusWaitingReceipt.value], //确认收货按钮对应: 待收货
+ label: '确认收货'
+ },
+ {
+ id: 7,
+ value: [SaleOrderStatusWaitingReceipt.value,SaleOrderStatusAlreadyReceipt.value,SaleOrderStatusComplete.value,SaleOrderStatusRefund.value], //再次购买按钮对应: 待收货,已收货,已完成, 已退款
+ label: '再次购买'
+ },
+ {
+ id: 8,
+ value: [SaleOrderStatusBooking.value], //按钮对应: 待接单
+ label: '退款'
+ },
+ ])
+
+
+ //判断是否显示该按钮
+ const orderBtnsShow = (item) => {
+ if(orderInfo) {
+ if(item.id == 1) {
+ //取消订单按钮
+ return( orderInfo.actual_amount == 0 && item.value.includes(orderInfo.status)) //在待发货之前没有付过款
+ } else if (item.id == 2) {
+ //去付款按钮
+ return( orderInfo.wait_pay_amount != 0 && item.value.includes(orderInfo.status)) //只要没有付完款就显示
+ } else if(item.id == 3 ) {
+ //申请退款, 只有大货才有
+ return (orderInfo.sale_mode == SaLeModeBulk.value && orderInfo.actual_amount != 0 && item.value.includes(orderInfo.status)) //大货在待发货付过款
+ } else if( item.id == 8) {
+ //退款按钮(直接退款不用申请), 只有散剪和剪板有
+ return (orderInfo.sale_mode != SaLeModeBulk.value && orderInfo.actual_amount != 0 && item.value.includes(orderInfo.status)) //散剪和剪板在待接单时付过款
+ }
+ else {
+ //其他按钮
+ return item.value.includes(orderInfo.status)
+ }
+ }
+ }
+
+ //显示的按钮数组
+ const orderBtnsShowList: {id: number, value: any, label: string}[] = useMemo(() => {
+ return orderBtnsList.current.filter(item => {
+ return orderBtnsShow(item)
+ })
+ }, [orderInfo])
+
+
+
+ //点击按钮操作
+ const submitBtns = (val, index) => {
+ (val == 1)&&cancelOrder(); //取消订单按钮
+ (val == 2)&&onClick?.(2); //去付款按钮
+ (val == 6)&&receiveOrder(); //确认收货
+
+ }
+
+ //取消订单
+ const {fetchData: cancelFetchData} = CancelOrderApi()
+ const cancelOrder = () => {
+ Taro.showModal({
+ title: '要取消该订单吗?',
+ success: async function (res) {
+ if (res.confirm) {
+ let res = await cancelFetchData({id: orderInfo?.orderId})
+ if(res.success) {
+ alert.success('取消成功')
+ onClick?.(1)
+ } else {
+ alert.none(res.msg)
+ }
+ } else if (res.cancel) {
+ console.log('用户点击取消')
+ }
+ }
+ })
+ }
+
+ //确认订单
+ const {fetchData: receiveOrderFetchData} = ReceiveOrderApi()
+ const receiveOrder = async () => {
+ console.log('123456')
+ Taro.showModal({
+ title: '确定收货?',
+ success: async function (res) {
+ if (res.confirm) {
+ let res = await receiveOrderFetchData({sale_order_id: orderInfo?.orderId})
+ if(res.success){
+ onClick?.(6)
+ alert.success('收货成功')
+ } else {
+ alert.error('收货失败')
+ }
+ } else if (res.cancel) {
+ console.log('用户点击取消')
+ }
+ }
+ })
+ }
+
+ //显示更多按钮
+ const [showMore, setShowMore] = useState(false)
+ const styleTop = useMemo(() => {
+ return {top:`-${(orderBtnsShowList.length - 3)*70 + 10}rpx`, left: `-${10}rpx`}
+ }, [orderBtnsShowList])
+
+ return (
+
+ {(orderBtnsShowList.length > 3)&&
+ setShowMore(true)}>更多
+ {showMore&&
+
+ {orderBtnsShowList.map((item, index) => {
+ return ((index >= 3) && submitBtns(item.id, index)}>{item.label})
+ })}
+
+ setShowMore(false)}>
+ }
+ }
+
+
+ {orderBtnsShowList.map((item, index) =>
+ (index < 3)&& submitBtns(item.id, index)}>{item.label}
+ )}
+
+
+
+ )
+})
\ No newline at end of file
diff --git a/src/components/orderBtns/index.module.scss b/src/components/orderBtns/index.module.scss
index a8f7963..252b22e 100644
--- a/src/components/orderBtns/index.module.scss
+++ b/src/components/orderBtns/index.module.scss
@@ -1,19 +1,84 @@
.btns_list{
- display: flex;
- justify-content: flex-end;
+ width: 100%;
// margin-top: 30px;
+ display: flex;
+ align-content: center;
+ .more{
+ font-size: 28px;
+ width: 143px;
+ display: flex;
+ align-items: center;
+ color: $color_font_two;
+ padding-left: 20px;
+ position: relative;
+
+ .more_list{
+ position: absolute;
+ background-color: #fff;
+ width: 226px;
+ box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.06);
+ border-radius: 10px;
+ padding: 0 20px;
+ box-sizing: border-box;
+ z-index:999;
+ &::before{
+ z-index: 1;
+ position: absolute;
+ bottom: -7px;
+ left: 50px;
+ width: 15px;
+ height: 15px;
+ content: " ";
+ transform: rotate(45deg);
+ background: #fff;
+ box-sizing: border-box;
+ box-shadow: 0px 0px 20px 0px rgba(0,0,0,0.1);
+ }
+ .more_item{
+ font-size: 28px;
+ height: 70px;
+ line-height: 70px;
+ text-align: center;
+ &:nth-last-child(n+2) {
+ border-bottom: 1PX solid #F0F0F0;
+ }
+ }
+ }
+ .more_bg{
+ position:fixed;
+ width: 100vw;
+ height: 100vh;
+ top: 0;
+ left: 0;
+ }
+ }
+ .scroll{
+ white-space: nowrap;
+ width: 100%;
+ }
+ .list_scroll{
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ }
.btns_item{
- width: 152px;
- height: 72px;
+ padding: 0 15px;
+ width: 130px;
border: 2px solid #dddddd;
border-radius: 38px;
text-align: center;
- line-height: 72px;
+ line-height: 60px;
font-size: $font_size;
color: $color_font_three;
+ display:inline-block;
&:nth-child(n+2) {
margin-left: 32px;
}
+ &:nth-last-child(1) {
+ border: 2px solid $color_main;
+ color: $color_main;
+ }
+
}
.end_btn{
border: 2px solid $color_main;
diff --git a/src/components/orderBtns/index.tsx b/src/components/orderBtns/index.tsx
index f098520..871f2a2 100644
--- a/src/components/orderBtns/index.tsx
+++ b/src/components/orderBtns/index.tsx
@@ -1,10 +1,12 @@
-import { CancelOrderApi } from "@/api/order"
-import { alert } from "@/common/common"
-import { ORDER_STATUS } from "@/common/enum"
-import { View } from "@tarojs/components"
+import { CancelOrderApi, ReceiveOrderApi } from "@/api/order"
+import { alert, goLink } from "@/common/common"
+import { ORDER_STATUS, SALE_MODE } from "@/common/enum"
+import {Text, View } from "@tarojs/components"
import Taro from "@tarojs/taro"
-import { useCallback, useRef, memo } from "react"
+import {useRef, memo, useState, useMemo } from "react"
+import classnames from "classnames";
import styles from './index.module.scss'
+import { AddShoppingCartApi } from "@/api/shopCart"
type Param = {
orderInfo: {
@@ -12,84 +14,128 @@ type Param = {
orderId: number, //订单id
actual_amount: number, //实付金额
wait_pay_amount: number, //待付金额
+ sale_mode: number //订单类型
}|null,
onClick?: (val: number) => void //点击后触发的事件,返回订单状态
}
-// export const OrderBtnsemus = [{id:1, label:'取消订单'},{id:2, label:'去付款'},{id:3, label:'申请退款'},{id:4, label:'查看物流'}, {id:5, label:'申请退货'}, {id:6, label:'确认收货'}, {id:7, label:'再次购买'}]
export default memo(({orderInfo, onClick}:Param) => {
+ //订单状态枚举
const {
- SaleOrderStatusBooking,
- SaleOrderStatusArranging,
- SaleOrderStatusArranged,
- SaleOrderStatusWaitingDelivery,
- SaleOrderStatusComplete,
- SaleOrderStatusCancel,
- SaleOrderStatusRefund,
- SaleOrderStatusWaitingPayment,
- SaleOrderStatusWaitingReceipt,
- SaleOrderStatusAlreadyReceipt
- } = ORDER_STATUS
- //订单按钮按订单状态归类
+ SaleOrderStatusBooking,
+ SaleOrderStatusArranging,
+ SaleOrderStatusArranged,
+ SaleOrderStatusWaitingDelivery,
+ SaleOrderStatusComplete,
+ SaleOrderStatusRefund,
+ SaleOrderStatusWaitingPayment,
+ SaleOrderStatusWaitingReceipt,
+ SaleOrderStatusAlreadyReceipt,
+ SaleorderstatusWaitingPrePayment,
+ SaleOrderStatusTaking
+ } = ORDER_STATUS
+
+ //订单类型
+ const {
+ SaLeModeBulk,
+ SaleModeLengthCut,
+ SaLeModeWeightCut,
+ } = SALE_MODE
+
+ //订单按钮按订单状态归类, value是该订单状态,可能该按钮会出现
const orderBtnsList = useRef([
+
{
id: 1,
- value: [SaleOrderStatusBooking.value, SaleOrderStatusArranging.value, SaleOrderStatusArranged.value, SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value], //取消订单按钮对应: 待接单,配布中,已配布, 待付款, 待发货
+ value: [SaleOrderStatusBooking.value,
+ SaleOrderStatusArranging.value,
+ SaleOrderStatusArranged.value,
+ SaleOrderStatusWaitingPayment.value,
+ SaleOrderStatusWaitingDelivery.value], //取消订单按钮对应: 待接单,配布中,已配布, 待付款, 待发货
label: '取消订单'
},
- {
- id: 2,
- value: [SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value], //去付款按钮对应:待付款, 待发货, 待收货, 已收货, 已完成
- label: '去付款'
- },
{
id: 3,
- value: [SaleOrderStatusWaitingDelivery.value], //取消订单按钮对应: 待发货
+ value: [SaleOrderStatusWaitingDelivery.value, SaleOrderStatusTaking.value], //申请退款按钮对应: 待发货, 提货中
label: '申请退款'
},
- {
- id: 4,
- value: [SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value], //取消订单按钮对应: 待收货, 已收货, 已完成, 已退款
- label: '查看物流'
- },
+ // {
+ // id: 4,
+ // value: [SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value], //取消订单按钮对应: 待收货, 已收货, 已完成, 已退款
+ // label: '查看物流'
+ // },
{
id: 5,
- value: [SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusRefund.value], //取消订单按钮对应: 待收货, 已收货, 已退款
+ value: [SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusRefund.value], //申请退货按钮对应:已收货, 已退款
label: '申请退货'
},
{
id: 6,
- value: [SaleOrderStatusWaitingReceipt.value], //取消订单按钮对应: 待收货
+ value: [SaleOrderStatusWaitingReceipt.value], //确认收货按钮对应: 待收货
label: '确认收货'
},
{
id: 7,
- value: [SaleOrderStatusWaitingReceipt.value,SaleOrderStatusAlreadyReceipt.value,SaleOrderStatusComplete.value,SaleOrderStatusRefund.value], //取消订单按钮对应: 待收货,已收货,已完成, 已退款
+ value: [SaleOrderStatusWaitingReceipt.value,SaleOrderStatusAlreadyReceipt.value,SaleOrderStatusComplete.value,SaleOrderStatusRefund.value], //再次购买按钮对应: 待收货,已收货,已完成, 已退款
label: '再次购买'
- }
+ },
+ {
+ id: 8,
+ value: [SaleOrderStatusBooking.value], //按钮对应: 待接单
+ label: '退款'
+ },
+ {
+ id: 2,
+ value: [SaleOrderStatusTaking.value, SaleorderstatusWaitingPrePayment.value, SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value], //去付款按钮对应:待付款, 待发货, 待收货, 已收货, 已完成
+ label: '去付款'
+ },
])
+
+
//判断是否显示该按钮
- const orderBtnsShow = useCallback((item) => {
+ const orderBtnsShow = (item) => {
if(orderInfo) {
if(item.id == 1) {
//取消订单按钮
- return( orderInfo.actual_amount == 0 && item.value.includes(orderInfo.status)) //在代发货之前没有付过款
+ return( orderInfo.actual_amount == 0 && item.value.includes(orderInfo.status)) //在待发货之前没有付过款
} else if (item.id == 2) {
//去付款按钮
return( orderInfo.wait_pay_amount != 0 && item.value.includes(orderInfo.status)) //只要没有付完款就显示
- } else if(item.id == 3) {
- //申请退款
- return (orderInfo.actual_amount != 0 && item.value.includes(orderInfo.status)) //在代发货之前付过款
+ } else if(item.id == 3 ) {
+ //申请退款, 只有大货才有
+ return (orderInfo.sale_mode == SaLeModeBulk.value && orderInfo.actual_amount != 0 && item.value.includes(orderInfo.status)) //大货在待发货付过款
+ } else if( item.id == 8) {
+ //退款按钮(直接退款不用申请), 只有散剪和剪板有
+ return (orderInfo.sale_mode != SaLeModeBulk.value && orderInfo.actual_amount != 0 && item.value.includes(orderInfo.status)) //散剪和剪板在待接单时付过款
+ } else if (item.id == 7) {
+ return true //再次购买按钮一直存在
} else {
+ //其他按钮
return item.value.includes(orderInfo.status)
}
}
- },[orderInfo])
+ }
+
+ //显示的按钮数组
+ const orderBtnsShowList: {id: number, value: any, label: string}[] = useMemo(() => {
+ return orderBtnsList.current.filter(item => {
+ return orderBtnsShow(item)
+ })
+ }, [orderInfo])
+
+
//点击按钮操作
- const submitBtns = (val) => {
- (val == 1)&&cancelOrder(); //取消订单按钮
- (val == 2)&&onClick?.(val); //去付款按钮
+ const submitBtns = (val, index) => {
+ if (val == 1) {
+ cancelOrder()
+ } else if (val == 6) {
+ receiveOrder()
+ } else if(val == 5) {
+ goLink('/pages/applyAfterSales/index',{id:orderInfo?.orderId})
+ } else {
+ onClick?.(val)
+ }
}
//取消订单
@@ -113,11 +159,55 @@ export default memo(({orderInfo, onClick}:Param) => {
})
}
+ //确认订单
+ const {fetchData: receiveOrderFetchData} = ReceiveOrderApi()
+ const receiveOrder = async () => {
+ console.log('123456')
+ Taro.showModal({
+ title: '确定收货?',
+ success: async function (res) {
+ if (res.confirm) {
+ let res = await receiveOrderFetchData({sale_order_id: orderInfo?.orderId})
+ if(res.success){
+ onClick?.(6)
+ alert.success('收货成功')
+ } else {
+ alert.error('收货失败')
+ }
+ } else if (res.cancel) {
+ console.log('用户点击取消')
+ }
+ }
+ })
+ }
+
+
+ //显示更多按钮
+ const [showMore, setShowMore] = useState(false)
+ const styleTop = useMemo(() => {
+ return {top:`-${(orderBtnsShowList.length - 3)*70 + 10}rpx`, left: `-${10}rpx`}
+ }, [orderBtnsShowList])
+
return (
- {orderBtnsList.current.map((item) =>
- orderBtnsShow(item)&& submitBtns(item.id)}>{item.label}
- )}
+ {(orderBtnsShowList.length > 3)&&
+ setShowMore(true)}>更多
+ {showMore&&
+
+ {orderBtnsShowList.map((item, index) => {
+ return ((index >= 3) && submitBtns(item.id, index)}>{item.label})
+ })}
+
+ setShowMore(false)}>
+ }
+ }
+
+
+ {orderBtnsShowList.map((item, index) =>
+ (index < 3)&& submitBtns(item.id, index)}>{item.label}
+ )}
+
+
)
})
\ No newline at end of file
diff --git a/src/components/popup/index.tsx b/src/components/popup/index.tsx
index 227f12e..75030cf 100644
--- a/src/components/popup/index.tsx
+++ b/src/components/popup/index.tsx
@@ -62,7 +62,7 @@ export default memo((
}
- {children}
+ {show&&children}
diff --git a/src/components/product/index.module.scss b/src/components/product/index.module.scss
index 6543b25..35f7693 100644
--- a/src/components/product/index.module.scss
+++ b/src/components/product/index.module.scss
@@ -25,7 +25,7 @@
border-radius: 10px;
}
.num{
- padding: 5px 10px;
+ padding: 5px 10px 5px 20px;
font-size: $font_size_min;
position: absolute;
right:0;
@@ -51,7 +51,7 @@
.tag_list{
display: flex;
margin-top: 16px;
- .tag{
+ .tag, .tag_g{
padding: 3px 10px;
background-color: #CDE5FF;
font-size: $font_size_min;
@@ -61,6 +61,10 @@
margin-left: 10px;
}
}
+ .tag_g{
+ background-color: #FFE6CE;
+ color: #EE7500;
+ }
}
.introduce{
font-size: $font_size_medium;
diff --git a/src/components/product/index.tsx b/src/components/product/index.tsx
index 7a14628..c6b900d 100644
--- a/src/components/product/index.tsx
+++ b/src/components/product/index.tsx
@@ -3,6 +3,7 @@ import Taro from "@tarojs/taro"
import { goLink } from "@/common/common"
import styles from './index.module.scss'
import { formatHashTag, formatImgUrl } from "@/common/fotmat"
+import LabAndImg from "../LabAndImg"
type Params = {
desStatus?: true|false,
@@ -14,14 +15,14 @@ export default ({desStatus = true, productList = []}:Params) => {
{productList?.map(item => {
return goLink(`/pages/details/index?id=${item.id}`)}>
-
+
{item.product_color_count}色
{formatHashTag(item.code, '')} {item.name}
{item.width}
- {item.weight_density}
+ {item.weight_density}
{item.component}
{desStatus&&{item.describe}}
diff --git a/src/components/search/index.tsx b/src/components/search/index.tsx
index 9c2191b..294aec5 100644
--- a/src/components/search/index.tsx
+++ b/src/components/search/index.tsx
@@ -71,12 +71,12 @@ export default memo(forwardRef(({
{showIcon&&}
- onInputEven(e)}>
+ onInputEven(e)}>
{!!inputCon&&
clearInput()} styleObj={{width: '20rpx', height:'20rpx', backgroundColor:'#fff', border:'0'}}/>
}
- {showBtn&& onSearch()}>{btnTitle}}
+ {showBtn&&{btnTitle}}
>
)
diff --git a/src/components/shopCart/index.module.scss b/src/components/shopCart/index.module.scss
index 633b89e..dcccd27 100644
--- a/src/components/shopCart/index.module.scss
+++ b/src/components/shopCart/index.module.scss
@@ -17,6 +17,11 @@
margin-right: 10px;
}
}
+ .count_all{
+ font-size: 22px;
+ color: #ABABAB;
+ padding: 30px 20px;
+ }
.search{
display: flex;
justify-content: space-between;
@@ -104,6 +109,15 @@
flex-direction: column;
justify-content: space-between;
align-items: flex-end;
+ .btn_count{
+ width: 235px;
+ height: 64px;
+ background-color: #ECF5FF;
+ border-radius: 40px 0px 16px 0px;
+ padding: 0 20px;
+ display: flex;
+ align-items: center;
+ }
.price{
font-size: $font_size;
font-weight: 700;
@@ -150,6 +164,7 @@
justify-content: center;
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
+ z-index: 999;
.buy_con{
width: 702px;
height: 95px;
@@ -175,7 +190,7 @@
.price_con{
flex:1;
.price_real{
- font-size: $font_size;
+ font-size: $font_size_big;
color: #fff;
text{
font-size: $font_size_min;
@@ -184,7 +199,6 @@
.price_forecast{
font-size: $font_size_min;
color: $color_font_two;
- margin-top: 10px;
}
}
.goPay{
diff --git a/src/components/shopCart/index.tsx b/src/components/shopCart/index.tsx
index 8eb3d75..905ef9d 100644
--- a/src/components/shopCart/index.tsx
+++ b/src/components/shopCart/index.tsx
@@ -8,10 +8,11 @@ import styles from "./index.module.scss"
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import Taro from "@tarojs/taro";
import { alert, goLink } from "@/common/common";
-import {GetShoppingCartApi, DelShoppingCartApi} from "@/api/shopCart"
+import {GetShoppingCartApi, DelShoppingCartApi, UpdateShoppingCartApi} from "@/api/shopCart"
import { formatHashTag, formatImgUrl, formatPriceDiv } from "@/common/fotmat";
import { setParam } from "@/common/system";
import { debounce } from "@/common/util";
+import Counter from "../counter";
type param = {
show?: true|false,
@@ -19,11 +20,9 @@ type param = {
}
export default ({show = false, onClose}: param) => {
const selectList = [
- // {value:-1, title:'不限', unit:'', eunit:''},
- {value:0, title:'大货', unit:'件', eunit:'kg'},
- {value:1,title:'剪板', unit:'米', eunit:'m'},
- {value:2,title:'散剪', unit:'米', eunit:'kg'},
-
+ {value:0, title:'大货', unit:'条', eunit:'kg', step:1, digits:0, minNum:1, maxNum:100000, defaultNum:1},
+ {value:1,title:'剪板', unit:'米', eunit:'m', step:1, digits:2, minNum:0.5, maxNum:9.99, defaultNum:1},
+ {value:2,title:'散剪', unit:'米', eunit:'kg', step:1, digits:2, minNum:5, maxNum:100000, defaultNum:10},
]
const [selectIndex, setSelectIndex] = useState(0)
@@ -53,7 +52,6 @@ export default ({show = false, onClose}: param) => {
const [loading, setLoading] = useState(false)
const {fetchData} = GetShoppingCartApi()
const getShoppingCart = async () => {
- setLoading(true)
const {data} = await fetchData()
let color_list = data.color_list||[]
initList(color_list)
@@ -65,6 +63,7 @@ export default ({show = false, onClose}: param) => {
const initList = (color_list) => {
color_list?.map(item => {
if(selectIndex == item.sale_mode) item.select = true
+ item.count = formatCount(item)
})
}
@@ -74,6 +73,7 @@ export default ({show = false, onClose}: param) => {
setList([])
setSelectIndex(0)
} else {
+ setLoading(true)
getShoppingCart()
}
}, [show])
@@ -117,8 +117,6 @@ export default ({show = false, onClose}: param) => {
if(item.select) select_count++
}
})
- console.log('list_count::',list_count)
- console.log('select_count::',select_count)
setSelectStatus(select_count == list_count)
}
@@ -138,11 +136,13 @@ export default ({show = false, onClose}: param) => {
//删除购物车内容
const {fetchData:delShopFetchData} = DelShoppingCartApi()
const delSelect = () => {
+ getSelectId()
+ if(selectIds.current.length <= 0) return alert.none('请选择要删除的面料!')
Taro.showModal({
content: '删除所选商品?',
success: async function (res) {
if (res.confirm) {
- getSelectId()
+
const res = await delShopFetchData({id:selectIds.current})
if(res.success) {
getShoppingCart()
@@ -182,17 +182,33 @@ export default ({show = false, onClose}: param) => {
//格式化数量
const formatCount = useCallback((item) => {
- return item.sale_mode == 0? item.roll + '件': (item.length/100) + 'm'
+ console.log('item:::',item)
+ return item.sale_mode == 0? item.roll : (item.length/100)
}, [])
- //预估金额
+ //格式化单位
+ const formatUnit = useCallback((item) => {
+ return item.sale_mode == 0? '条':'米'
+ }, [])
+
+ //预估金额和总条数
const estimatePrice = useMemo(() => {
- let count = 0
+ let estimate_amount = 0
+ let product_list = new Set() //面料
+ let color_count = 0 //颜色数量
+ let all_count = 0 //总数量
list.map(item => {
- if(item.select) count += item.estimate_amount
+ if(item.select) {
+ estimate_amount += item.estimate_amount
+ product_list.add(item.product_id)
+ color_count++
+ all_count += item.sale_mode == 0?item.roll: (item.length)
+ }
})
- return Number(formatPriceDiv(count))
+ let all_count_text = selectIndex == 0?all_count + '条': (all_count/100) + '米'
+ return {price: Number(formatPriceDiv(estimate_amount)).toFixed(2), countText: `已选${product_list.size}种面料,${color_count}个颜色,共${all_count_text}`, color_count}
},[list])
+
//去结算
const orderDetail = debounce(() => {
@@ -201,11 +217,25 @@ export default ({show = false, onClose}: param) => {
alert.error('请选择面料')
} else {
let ids = selectIds.current.join('-')
- setParam({ids, sale_mode:selectIndex})
+ setParam({ids, sale_mode:selectIndex}) //临时存储
closePopup()
goLink('/pages/order/comfirm')
}
}, 500)
+
+ //计数组件-当后端修改完成才修改前端显示
+ const {fetchData: fetchDataUpdateShoppingCart} = UpdateShoppingCartApi()
+ const [UpdateShoppingCartLoading, setUpdateShoppingCartLoading] = useState(false)
+ const getInputValue = debounce(async (num, item) => {
+ let roll = item.sale_mode == 0?parseFloat(num):0
+ let length = item.sale_mode != 0?(parseFloat(num)*100):0
+ setUpdateShoppingCartLoading(() => true)
+ let res = await fetchDataUpdateShoppingCart({id: item.id, roll, length})
+ setUpdateShoppingCartLoading(() => false)
+ if(res.success) {
+ getShoppingCart()
+ }
+ }, 300)
return (
@@ -218,6 +248,7 @@ export default ({show = false, onClose}: param) => {
删除所选
+ {estimatePrice.countText}
{selectList.map((item) => {
return selectProduct(item.value)} className={classnames(styles.search_item, (selectIndex==item.value)&&styles.search_item_select)}>{item.title}
@@ -242,7 +273,20 @@ export default ({show = false, onClose}: param) => {
¥{formatPirce(item.sale_price)}/{selectList[selectIndex].eunit}
- ×{formatCount(item)}
+ {/* ×{formatCount(item)}{selectList[selectIndex].unit} */}
+
+ getInputValue(e, item)}
+ defaultNum={item.count}
+ step={selectList[selectIndex].step}
+ digits={selectList[selectIndex].digits}
+ onClickBtn={(e) => getInputValue(e, item)}
+ unit={formatUnit(item)}
+ minNum={selectList[selectIndex].minNum}
+ maxNum={selectList[selectIndex].maxNum}
+ disable={UpdateShoppingCartLoading}
+ />
+
})}
@@ -260,11 +304,11 @@ export default ({show = false, onClose}: param) => {
- ¥{estimatePrice}
+ ¥{estimatePrice.price}
预估金额
orderDetail()}>
- 去结算
+ 去结算({estimatePrice.color_count})
diff --git a/src/components/sideBar/index.module.scss b/src/components/sideBar/index.module.scss
index c6bdb76..7329301 100644
--- a/src/components/sideBar/index.module.scss
+++ b/src/components/sideBar/index.module.scss
@@ -29,8 +29,9 @@
}
.sideBar_select_title_select{
- background-color: $color_bg_one;
- color: $color_font_one;
+ background-color: #007AFF;
+ color: #fff;
+ border-radius: 0px 14px 14px 0px;
}
}
.sideBar_con{
diff --git a/src/components/sideBar/index.tsx b/src/components/sideBar/index.tsx
index 78ceec0..d601151 100644
--- a/src/components/sideBar/index.tsx
+++ b/src/components/sideBar/index.tsx
@@ -104,7 +104,6 @@ export default memo(({list = [],
)
})
}
-
selfOnScrolltolower?.()} refresherTriggered={refresherTriggered} refresherEnabled={true} selfOnRefresherRefresh={() => selfOnRefresherRefresh?.()}>
diff --git a/src/components/textareaEnhance/index.module.scss b/src/components/textareaEnhance/index.module.scss
new file mode 100644
index 0000000..3defd51
--- /dev/null
+++ b/src/components/textareaEnhance/index.module.scss
@@ -0,0 +1,36 @@
+.other_desc{
+ // padding: 0 20px;
+ box-sizing: border-box;
+ .title{
+ font-size: $font_size;
+ font-weight: 700;
+ }
+ .textarea{
+ position: relative;
+ height: 165.4px;
+ .descDataNum{
+ position: absolute;
+ right: 10px;
+ bottom: 10px;
+ font-size: 22px;
+ color: #ABABAB;
+ }
+ }
+ .textarea_con, .textarea_con_pretend{
+ background-color: #f3f3f3;
+ border: 2px solid #e6e6e6;
+ border-radius: 10px;
+ width: 100%;
+ font-size: 25px;
+ height: 165.4px;
+ padding: 20px 20px 30px 20px;
+ box-sizing: border-box;
+ margin-top: 20px;
+ }
+ .textarea_con_pretend{
+ color: $color_font_two;
+ }
+ .textarea_con_pretend_ed{
+ color: #000;
+ }
+}
\ No newline at end of file
diff --git a/src/components/textareaEnhance/index.tsx b/src/components/textareaEnhance/index.tsx
new file mode 100644
index 0000000..4c6eb69
--- /dev/null
+++ b/src/components/textareaEnhance/index.tsx
@@ -0,0 +1,43 @@
+import {Textarea, View } from "@tarojs/components";
+import { memo, useMemo, useState } from "react";
+import styles from './index.module.scss'
+import classnames from "classnames";
+
+//其他说明
+type Param = {
+ title?: string,
+ onChange?: (val: string) => void,
+ placeholder?: string
+}
+export default memo(({onChange, title = '', placeholder = '请输入'}:Param) => {
+ const [descData, setDescData] = useState({
+ number: 0,
+ value: '',
+ count: 200,
+ show: false
+ })
+ const getDesc = (e) => {
+ let value = e.detail.value
+ let res = value
+ if(value.length > descData.count) {
+ res = value.slice(0, descData.count)
+ }
+ setDescData({...descData, number:res.length, value: res})
+ onChange?.(res)
+ }
+
+ const toggleShowRealTextarea = (show) => {
+ setDescData({...descData, show:show})
+ }
+ return (
+
+ {title}
+
+ {descData.show&&||
+ toggleShowRealTextarea(true)}>{descData.value||placeholder}
+ }
+ {descData.number +'/'+ descData.count}
+
+
+ )
+})
diff --git a/src/components/uploadImage/index.module.scss b/src/components/uploadImage/index.module.scss
new file mode 100644
index 0000000..c977074
--- /dev/null
+++ b/src/components/uploadImage/index.module.scss
@@ -0,0 +1,55 @@
+.image_main{
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ .uploadImg{
+ width: 202px;
+ height: 150px;
+ background: #f0f0f0;
+ border: 2px dashed #cccccc;
+ border-radius: 10px;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ position: relative;
+ margin: 0 0 20px 20px;
+ position: relative;
+ .miconfont{
+ font-size: 50px;
+ }
+ .uploadText{
+ font-size: 26px;
+ color: $color_font_three;
+ }
+
+
+ }
+ .ImgItem{
+ width: 202px;
+ height: 150px;
+ background: #f0f0f0;
+ margin-left: 20px;
+ margin-bottom: 20px;
+ position: relative;
+ border-radius: 10px;
+ image{
+ width: 100%;
+ height: 100%;
+ border-radius: 10px;
+ }
+ .miconfont_close{
+ width: 43px;
+ height: 43px;
+ background-color: #ccc;
+ border-radius: 50%;
+ position: absolute;
+ right: -10px;
+ top: -10px;
+ text-align: center;
+ line-height: 43px;
+ color: #fff;
+ font-size: 30px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/components/uploadImage/index.tsx b/src/components/uploadImage/index.tsx
new file mode 100644
index 0000000..8a144be
--- /dev/null
+++ b/src/components/uploadImage/index.tsx
@@ -0,0 +1,59 @@
+import Taro, { FC } from "@tarojs/taro"
+import { memo, useEffect, useState } from "react"
+import useUploadCDNImg from "@/use/useUploadImage";
+import { Image, Text, View } from "@tarojs/components";
+import { formatImgUrl } from "@/common/fotmat";
+import classnames from "classnames";
+import styles from './index.module.scss'
+
+//图片列表
+type ImageParam = {
+ onChange?:(val: string[]) => void
+}
+const PictureItem:FC = memo(({onChange}) => {
+ const {getWxPhoto} = useUploadCDNImg()
+ const [imageList, setImageLise] = useState([])
+ //上传图片
+ const uploadImage = async () => {
+ let res:any = await getWxPhoto('after-sale')
+ if(res.code == 200) {
+ setImageLise([...imageList, res.url])
+ }
+ }
+ //删除图片
+ const delImage = (index) => {
+ imageList.splice(index,1)
+ setImageLise(() => [...imageList])
+ }
+ //监听上传的图片变化
+ useEffect(() => {
+ onChange?.(imageList||[])
+ }, [imageList])
+
+ //预览图片
+ const showImage = () => {
+ let list = imageList.map(item => {
+ return formatImgUrl(item)
+ })
+ Taro.previewImage({
+ current: list[0], // 当前显示
+ urls: list // 需要预览的图片http链接列表
+ })
+ }
+
+ return (
+
+ {imageList.map((item, index) =>
+
+
+ delImage(index)} className={classnames(styles.miconfont_close, 'iconfont icon-qingkong')}>
+ )}
+
+
+ 上传照片
+
+
+ )
+})
+
+export default PictureItem
\ No newline at end of file
diff --git a/src/pages/addressAdd/index.tsx b/src/pages/addressAdd/index.tsx
index fbc2b16..cf9ac26 100644
--- a/src/pages/addressAdd/index.tsx
+++ b/src/pages/addressAdd/index.tsx
@@ -55,9 +55,9 @@ export default ()=>{
const rules = {
name: [{
message: "请输入正确收货人姓名",
- validator: (value:any, rule:any)=>{ // 自定义验证,返回true表示匹配到了(错误)
- return value.length>5;
- }
+ // validator: (value:any, rule:any)=>{ // 自定义验证,返回true表示匹配到了(错误)
+ // return value.length>5;
+ // }
}],
phone: [{
message: "请输入正确的电话号码", regex: /^1[3|5|6|9|2|8|7]\d{9}$/
diff --git a/src/pages/applyAfterSales/components/kindList/index.module.scss b/src/pages/applyAfterSales/components/kindList/index.module.scss
new file mode 100644
index 0000000..bc49015
--- /dev/null
+++ b/src/pages/applyAfterSales/components/kindList/index.module.scss
@@ -0,0 +1,64 @@
+.apply_after_sales_list{
+ padding: 0 20px;
+ .apply_after_sales_item{
+ margin-bottom: 50px;
+ .apply_after_sales_title{
+ display: flex;
+ align-items: center;
+ .tag{
+ font-size: $font_size_min;
+ background-color: #CDE5FF;
+ padding: 5px 10px;
+ border-radius: 6px;
+ color: $color_main;
+ }
+ .title{
+ font-weight: 700;
+ font-size: $font_size;
+ margin-left: 20px;
+ flex:1;
+ }
+ }
+ .color_list {
+ .color_item{
+ display: flex;
+ align-items: center;
+ margin: 30px 0;
+ }
+ .image{
+ width: 70px;
+ height: 70px;
+ image{
+ width: 100%;
+ height: 100%;
+ border-radius: 50%;
+ }
+ }
+ .name_and_number{
+ padding-left: 30px;
+ flex:1;
+ text{
+ &:nth-child(1) {
+ font-weight: 700;
+ font-size: $font_size;
+ }
+ &:nth-child(2) {
+ color: $color_font_two;
+ font-size: $font_size;
+ margin-left: 20px;
+ }
+ }
+ }
+ .btn_count{
+ width: 216px;
+ height: 64px;
+ background-color: #ECF5FF;
+ border-radius: 40px 0px 16px 0px;
+ padding: 0 20px;
+ display: flex;
+ align-items: center;
+ }
+ }
+ }
+
+}
diff --git a/src/pages/applyAfterSales/components/kindList/index.tsx b/src/pages/applyAfterSales/components/kindList/index.tsx
new file mode 100644
index 0000000..3a26d92
--- /dev/null
+++ b/src/pages/applyAfterSales/components/kindList/index.tsx
@@ -0,0 +1,71 @@
+import { formatHashTag, formatImgUrl } from "@/common/fotmat";
+import Counter from "@/components/counter";
+import MCheckbox from "@/components/checkbox";
+import { Image, Text, View } from "@tarojs/components";
+import { FC, memo, useCallback } from "react";
+import styles from './index.module.scss'
+
+type OrderParam = {
+ list?: any[],
+ sale_mode?: number,
+ sale_mode_name?: string,
+ unit?: string,
+ total_colors?: number,
+ total_fabrics?: number,
+ total_number?: number,
+ status?: number, //订单状态
+}
+
+type Param = {
+ order: OrderParam,
+ onNumChange?: (val:any) => void
+ onSelectChange?: (val: {color_id:number, length: number, status: true|false}) => void
+}
+
+const kindeList:FC = memo(({order, onNumChange, onSelectChange}) => {
+ //对应数量
+ const formatCount = useCallback((item) => {
+ return (order?.sale_mode == 0? item.roll : Number(item.length / 100)) + order?.unit
+ }, [order])
+
+ //计步器失返回值
+ const getCounterChange = useCallback((colorItem) => {
+ return (number) => {
+ onNumChange?.({number, color_id: colorItem.id})
+ }
+ }, [])
+
+ //checkbox选中回调
+ const selectCallBack = (colorItem) => {
+ console.log('colorItem::',colorItem)
+ onSelectChange?.({color_id:colorItem.id, length:colorItem.length, status: true})
+ }
+
+ //checkbox关闭回调
+ const colseCallBack = (colorItem) => {
+ onSelectChange?.({color_id:colorItem.id, length:colorItem.length, status: false})
+ }
+
+ return (
+
+ {order?.list?.map(item =>
+
+ {order.sale_mode_name}
+ {formatHashTag(item.code, item.name)}
+
+
+ {item.product_colors.map(colorItem =>
+
+ {colorItem.code + ' ' + colorItem.name}x {formatCount(colorItem)}
+ {(order.sale_mode == 0)&&
+
+ ||
+ selectCallBack(colorItem)} onClose={() => colseCallBack(colorItem)}/>}
+ )}
+
+ )}
+
+ )
+})
+
+export default kindeList
\ No newline at end of file
diff --git a/src/pages/applyAfterSales/components/otherReason/index.module.scss b/src/pages/applyAfterSales/components/otherReason/index.module.scss
new file mode 100644
index 0000000..e2d1b1b
--- /dev/null
+++ b/src/pages/applyAfterSales/components/otherReason/index.module.scss
@@ -0,0 +1,36 @@
+.other_desc{
+ padding: 0 20px;
+ box-sizing: border-box;
+ .title{
+ font-size: $font_size;
+ font-weight: 700;
+ }
+ .textarea{
+ position: relative;
+ height: 165.4px;
+ .descDataNum{
+ position: absolute;
+ right: 10px;
+ bottom: 10px;
+ font-size: 22px;
+ color: #ABABAB;
+ }
+ }
+ .textarea_con, .textarea_con_pretend{
+ background-color: #f3f3f3;
+ border: 2px solid #e6e6e6;
+ border-radius: 10px;
+ width: 100%;
+ font-size: 25px;
+ height: 165.4px;
+ padding: 20px 20px 30px 20px;
+ box-sizing: border-box;
+ margin-top: 20px;
+ }
+ .textarea_con_pretend{
+ color: $color_font_two;
+ }
+ .textarea_con_pretend_ed{
+ color: #000;
+ }
+}
\ No newline at end of file
diff --git a/src/pages/applyAfterSales/components/otherReason/index.tsx b/src/pages/applyAfterSales/components/otherReason/index.tsx
new file mode 100644
index 0000000..5059f75
--- /dev/null
+++ b/src/pages/applyAfterSales/components/otherReason/index.tsx
@@ -0,0 +1,41 @@
+import {Textarea, View } from "@tarojs/components";
+import { memo, useMemo, useState } from "react";
+import styles from './index.module.scss'
+import classnames from "classnames";
+
+//其他说明
+type Param = {
+ onChange: (val: string) => void
+}
+export default memo(({onChange}:Param) => {
+ const [descData, setDescData] = useState({
+ number: 0,
+ value: '',
+ count: 200,
+ show: false
+ })
+ const getDesc = (e) => {
+ let value = e.detail.value
+ let res = value
+ if(value.length > descData.count) {
+ res = value.slice(0, descData.count)
+ }
+ setDescData({...descData, number:res.length, value: res})
+ onChange?.(res)
+ }
+
+ const toggleShowRealTextarea = (show) => {
+ setDescData({...descData, show:show})
+ }
+ return (
+
+ 其他说明
+
+ {descData.show&&||
+ toggleShowRealTextarea(true)}>{descData.value||'一般情况下选填,当退货说明=“其它问题”时,必填'}
+ }
+ {descData.number +'/'+ descData.count}
+
+
+ )
+})
diff --git a/src/pages/applyAfterSales/components/reasonPopup/index.module.scss b/src/pages/applyAfterSales/components/reasonPopup/index.module.scss
new file mode 100644
index 0000000..eba26cd
--- /dev/null
+++ b/src/pages/applyAfterSales/components/reasonPopup/index.module.scss
@@ -0,0 +1,27 @@
+.reason_return_con{
+ height: 50vh;
+ .reason_title{
+ padding: 10px 20px 0 20px;
+ height: 60px;
+ border-bottom: 1PX solid #F3F3F3;
+ box-sizing: border-box;
+ Text{
+ font-size: 26px;
+ border-bottom: 3px solid #000;
+ padding: 10px;
+ font-weight: 400;
+ }
+
+ }
+ .reason_scroll{
+ height: calc(100% - 70px);
+ .reason_list{
+ font-size: 26px;
+ padding: 30px 20px 0 20px;
+ color: #707070;
+ .reason_item{
+ margin-bottom: 36px;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/pages/applyAfterSales/components/reasonPopup/index.tsx b/src/pages/applyAfterSales/components/reasonPopup/index.tsx
new file mode 100644
index 0000000..6b1f1ef
--- /dev/null
+++ b/src/pages/applyAfterSales/components/reasonPopup/index.tsx
@@ -0,0 +1,27 @@
+import Popup from "@/components/popup";
+import { ScrollView, Text, View } from "@tarojs/components";
+import { memo, useMemo } from "react";
+import styles from './index.module.scss'
+
+//原因选择
+type ReasonInfoParam = {
+ show?: boolean,
+ onClose?: () => void,
+ title?: string,
+ list?: {id:number, name:string}[]
+}
+export default memo(({show = false, onClose, title = '', list= []}: ReasonInfoParam) => {
+
+ return (
+
+
+ {title}
+
+
+ {list.map(item => {item.name} )}
+
+
+
+
+ )
+})
\ No newline at end of file
diff --git a/src/pages/applyAfterSales/index.config.ts b/src/pages/applyAfterSales/index.config.ts
new file mode 100644
index 0000000..a7a7e32
--- /dev/null
+++ b/src/pages/applyAfterSales/index.config.ts
@@ -0,0 +1,4 @@
+export default {
+ navigationBarTitleText: '申请售后',
+ enableShareAppMessage: true,
+}
diff --git a/src/pages/applyAfterSales/index.module.scss b/src/pages/applyAfterSales/index.module.scss
new file mode 100644
index 0000000..6e11a17
--- /dev/null
+++ b/src/pages/applyAfterSales/index.module.scss
@@ -0,0 +1,107 @@
+
+.apply_after_sales_main{
+ .apply_after_sales_head{
+ font-size: 30px;
+ text-align: center;
+ padding: 20px 0;
+ font-weight: 700;
+ }
+ .kind_number{
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ border-bottom: 1PX solid #f3f3f3;
+ text{
+ background-color: #F6F6F6;
+ border-radius: 10px;
+ font-size: $font_size_medium;
+ padding: 5px 0;
+ text-align: center;
+ width: 100%;
+ display: block;
+ color: $color_font_three;
+ }
+ }
+ .apply_after_sales_con{
+ .scroll{
+ height: calc(100% - 170px);
+ }
+ .scroll_con{
+ padding: 20px 0 150px 0;
+ }
+ .returnSaleInput{
+ margin: 0 20px;
+ padding-top: 30px;
+ border-top: 1px solid #F6F6F6;
+ .returnSaleInput_item{
+ display: flex;
+ align-items: center;
+ padding-bottom: 30px;
+ flex-wrap: wrap;
+ .title{
+ font-size: $font_size;
+ font-weight: 700;
+ width: 119px;
+ }
+ .select{
+ flex:1;
+ height: 60px;
+ border: 2px solid #e6e6e6;
+ border-radius: 10px;
+ margin-left: 20px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 20px;
+ font-size: 26px;
+ color: $color_font_two;
+ .miconfont{
+ font-size: 30px;
+ }
+ }
+ .upload_image{
+ flex:1;
+ }
+ }
+ }
+
+ }
+
+
+ .btns_con{
+ width: 100%;
+ position: fixed;
+ bottom:0;
+ padding: 0 20px;
+ box-sizing: border-box;
+ padding-bottom: constant(safe-area-inset-bottom);
+ padding-bottom: env(safe-area-inset-bottom);
+ .btns_two{
+ display: flex;
+ height: 82px;
+ // border: 1PX solid #007aff;
+ font-size: $font_size_big;
+ border-radius: 40px;
+ margin-bottom: 20px;
+ .rest_btn{
+ flex:1;
+ border: 1PX solid #007aff;
+ border-radius: 40px 0 0 40px;
+ text-align: center;
+ line-height: 82px;
+ color: $color_main;
+ background-color: #fff;
+
+ }
+ .verify_btn{
+ flex:1;
+ border-radius: 0 40px 40px 0;
+ background: #007aff;
+ text-align: center;
+ line-height: 82px;
+ color: #fff;
+ }
+ }
+ }
+}
+
diff --git a/src/pages/applyAfterSales/index.tsx b/src/pages/applyAfterSales/index.tsx
new file mode 100644
index 0000000..9698934
--- /dev/null
+++ b/src/pages/applyAfterSales/index.tsx
@@ -0,0 +1,211 @@
+import { Image, ScrollView, Text, View } from "@tarojs/components";
+import { FC, memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
+import classnames from "classnames";
+import styles from './index.module.scss'
+import ReasonPopup from "./components/reasonPopup";
+import OtherReason from "./components/otherReason";
+import { useDidShow, useRouter } from "@tarojs/taro";
+import { GetSaleOrderDetailApi } from "@/api/order";
+import KindList from "./components/kindList"
+import { ReturnApplyOrderApi, ReturnGoodsStatusApi } from "@/api/salesAfterOrder";
+import { alert, goLink } from "@/common/common";
+import UploadImage from "@/components/uploadImage"
+import TextareaEnhance from "@/components/textareaEnhance";
+
+type ReasonParam = 1|2|3 //1 退货原因 2 货物状况 3 退货说明
+export default () => {
+
+ useDidShow(() => {
+ getSaleOrderPreView()
+ })
+
+ const router = useRouter()
+ const orderId = useRef(Number(router.params.id))
+
+ //需要提交的数据
+ const [submitData, setSubmitData] = useState({
+ fabric_piece_accessory_url: [],
+ goods_status: 0,
+ reason_describe: '',
+ return_explain: 0,
+ return_reason: 1,
+ roll: 0,
+ roll_list: [],
+ sale_order_id: orderId.current
+ })
+
+ //获取订单数据
+ const [orderDetail, setOrderDetail] = useState() //获取到的原始数据
+ const {fetchData: getOrderFetchData} = GetSaleOrderDetailApi()
+ const getSaleOrderPreView = async () => {
+ if(orderId.current) {
+ let res = await getOrderFetchData({id: orderId.current})
+ setOrderDetail(res.data)
+ }
+ }
+
+ //监听获取到的数据
+ useEffect(() => {
+ if(orderDetail) {
+ formatData()
+ }
+ }, [orderDetail])
+
+ //格式化数据格式
+ const [formatDetailOrder, setFormatDetailOrder] = useState() //格式化后的数据
+ const formatData = () => {
+ setFormatDetailOrder({
+ sale_mode: orderDetail.sale_mode,
+ sale_mode_name: orderDetail.sale_mode_name,
+ total_colors: orderDetail.total_colors, //总颜色数量
+ total_number: orderDetail.total_number, //总数量
+ total_fabrics: orderDetail.total_fabrics, //面料数量
+ unit: orderDetail.sale_mode == 0?'条':'m', //单位
+ list: orderDetail.product_list,
+ status: orderDetail.status, //订单状态
+
+ })
+ }
+
+ //数据总量
+ const dataCount = useMemo(() => {
+ if(formatDetailOrder) {
+ return `${formatDetailOrder.total_fabrics}种面料,${formatDetailOrder.total_colors}种颜色,共${formatDetailOrder.total_number}条`
+ }
+ }, [formatDetailOrder])
+
+
+ //退货选择弹窗
+ const [showReason, setShowReason] = useState<{show:true|false, title: string}>({show:false, title: ''})
+ const closeReason = useCallback(() => setShowReason({...showReason, show:false}), [])
+ const onShowReason = (status) => {
+ setShowReason({...showReason, show:true})
+ }
+
+ //面料数据
+ let roll_list = useRef({})
+
+ //大货时获取计步器数据
+ const getNumChange = useCallback((val) => {
+ if(parseInt(val.number) > 0) {
+ roll_list.current[val.color_id] = {product_color_id: val.color_id, product_roll: val.number}
+ } else {
+ delete roll_list.current[val.color_id]
+ }
+
+ let count = 0
+ Object.values(roll_list.current).map((item: any) => {
+ count += item.product_roll
+ })
+ setSubmitData((e) => ({...e, roll_list:Object.values(roll_list.current), roll: count}))
+ }, [])
+
+ //散剪和剪板
+ const getSelectChange = useCallback((val) => {
+ console.log('val::', val)
+ if(val.status) {
+ roll_list.current[val.color_id] = {product_color_id: val.color_id, product_roll: val.length}
+ } else {
+ delete roll_list.current[val.color_id]
+ }
+ let count = 0
+ Object.values(roll_list.current).map((item: any) => {
+ count += item.product_roll
+ })
+ setSubmitData((e) => ({...e, roll_list:Object.values(roll_list.current), roll: count}))
+ }, [])
+
+ //获取图片列表
+ const getImageList = useCallback((list) => {
+ setSubmitData((e) => ({...e, fabric_piece_accessory_url:list}))
+ }, [])
+
+ //其他说明
+ const getOtherReason = useCallback((val) => {
+ setSubmitData((e) => ({...e, reason_describe: val}))
+ }, [])
+
+ //提交数据
+ const {fetchData: fetchDataReturnApply} = ReturnApplyOrderApi()
+ const onSubmitData = async () => {
+ if(submitData.roll_list.length <= 0) return alert.error('请选择退货颜色')
+ let res = await fetchDataReturnApply(submitData)
+ if(res.success) {
+ alert.success('申请成功')
+ goLink('/pages/salesAfterList/index',{}, 'reLaunch')
+ } else {
+ alert.error('申请失败')
+ }
+ console.log('提交::',submitData)
+ }
+
+ //底部按钮
+ const onSubmit = (val) => {
+ if(val == 2) {
+ onSubmitData()
+ }
+ }
+
+ const [returnGoodsInfo, setReturnGoodsInfo] = useState<{title:string, list: any[]}>({title:'', list:[]})
+ //售后货物状况
+ const {fetchData: fetchDataGoodsStatus} = ReturnGoodsStatusApi()
+ const getReturnGoodsStatus = async () => {
+ let res = await fetchDataGoodsStatus()
+ setReturnGoodsInfo((e) => ({...e, title: '售后货物状况', list:res.data?.list||[]}))
+ }
+ useEffect(() => {
+ getReturnGoodsStatus()
+ }, [])
+
+ return (
+
+
+ {dataCount}
+
+
+
+
+
+ 退货原因
+ onShowReason(1)}>
+ 请选择
+
+
+
+
+ 货物状况
+ onShowReason(2)}>
+ 请选择
+
+
+
+
+ 退货说明
+ onShowReason(3)}>
+ 请选择
+
+
+
+
+ 拍照上传
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onSubmit(1)}>取消
+ onSubmit(2)}>确认
+
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/src/pages/certification/components/SelectEnterpriseType.scss b/src/pages/certification/components/SelectEnterpriseType.scss
new file mode 100644
index 0000000..f18cf81
--- /dev/null
+++ b/src/pages/certification/components/SelectEnterpriseType.scss
@@ -0,0 +1,22 @@
+.select-enterprise-type{
+ .select-enterprise-type-btn{
+ color: #ABABAB;
+ font-size: 28px;
+ padding: 20px;
+ display: flex;justify-content: space-between;
+ border-bottom: 1rpx solid #eaeaea;
+ }
+ .select-enterprise-type-content{
+ padding: 0 20px;
+ padding-bottom: 120px;
+ }
+ .select-enterprise-type-content view{
+ padding: 20px 0;
+ font-size: 28px;
+ display: flex;justify-content: space-between;
+ }
+ .select-enterprise-type-content view text:last-child{
+ color: #007AFF;
+ font-size: 35px;
+ }
+}
\ No newline at end of file
diff --git a/src/pages/certification/components/SelectEnterpriseType.tsx b/src/pages/certification/components/SelectEnterpriseType.tsx
new file mode 100644
index 0000000..acf9598
--- /dev/null
+++ b/src/pages/certification/components/SelectEnterpriseType.tsx
@@ -0,0 +1,56 @@
+import { Text, View } from "@tarojs/components"
+import Popup from "@/components/popup";
+import "./SelectEnterpriseType.scss"
+import { forwardRef, useEffect, useImperativeHandle, useState } from "react";
+import {certificationTypeListApi} from "@/api/certification"
+
+interface Params{
+ confirm?: (selected:any)=>void, // 确定
+}
+
+export default forwardRef((props: Params, ref)=>{
+ const [modalShow, setModalShow] = useState(false)
+ // 获取认证信息
+ const {fetchData, state} = certificationTypeListApi();
+ useEffect(()=>{
+ fetchData();
+ }, [])
+ const [selected, setSelected] = useState({});
+ // 确定
+ const handleSelect = (item)=>{
+ setSelected(item);
+ }
+ // 设置弹窗是否显示
+ const setShow = (ev)=>{
+ setModalShow(ev);
+ }
+ useImperativeHandle(ref,()=>({
+ setShow
+ }))
+ // 确定
+ const handleConfirm = ()=>{
+ props.confirm&&props.confirm(selected);
+ setModalShow(false);
+ }
+
+ return (
+
+ setModalShow(false)}>
+
+ setModalShow(false)}>取消
+ 确定
+
+
+ {
+ state.data?.list?.map((item,index)=>{
+ return handleSelect(item)} key={index}>
+ {item.name}
+ {item.id==(selected as any).id?:}
+
+ })
+ }
+
+
+
+ )
+})
diff --git a/src/pages/certification/index.scss b/src/pages/certification/index.scss
index 441d16b..a6c7bcf 100644
--- a/src/pages/certification/index.scss
+++ b/src/pages/certification/index.scss
@@ -16,6 +16,7 @@
margin-left: 30px;
padding-top: 40px;
color: #000000;
+ padding-bottom: 20px;
// border-top: 18px solid #F0F0F0;
}
.certification-upload{
@@ -38,6 +39,10 @@
.certification-upload-no{
display: flex;flex-direction: column;align-items: center;
}
+ .certification-upload image{
+ position: absolute;width: 100%;height: 100%;
+ object-fit: cover;border-radius: 30px;
+ }
.certification-upload-no-icon{
width: 104px;
height: 104px;
@@ -56,10 +61,11 @@
}
.certification-button{
position: absolute;bottom: -10px;left: -10px;right: -10px;
- background-color: #858A8F;
+ background-color: rgba(0,0,0,0.65);
display: flex;
height: 86px;
border-radius: 0 0 30px 30px;
+ z-index: 1;
}
.certification-button view{
flex: 1;
@@ -79,6 +85,7 @@
position: fixed;bottom: 0;left: 0;right: 0;
width: 100%;
display: flex;align-items: center;justify-content: center;
+ z-index: 2;
}
.certification-footer-button{
width: 696px;
@@ -90,12 +97,16 @@
box-sizing: border-box;
overflow: hidden;
}
- .certification-footer-button view{
+ .certification-footer-button view,.certification-footer-button navigator{
flex: 1;
display: flex;align-items: center;justify-content: center;
font-size: 32px;
font-weight: 400;
color: #007aff;
+ border: 0;border-radius: none;
+ }
+ .certification-footer-button navigator::after{
+ border: 0;border-radius: none;
}
.certification-footer-button view:last-child{
color: white;
diff --git a/src/pages/certification/index.tsx b/src/pages/certification/index.tsx
index 0d0767d..43d5463 100644
--- a/src/pages/certification/index.tsx
+++ b/src/pages/certification/index.tsx
@@ -1,133 +1,196 @@
import FromListCertification from "@/components/FromListCertification"
-import { Button, Input, Text, Textarea, View } from "@tarojs/components"
+import { Button, Image, Input, NavigationBar, Navigator, Text, Textarea, View } from "@tarojs/components"
import Taro, { setNavigationBarTitle, useRouter } from "@tarojs/taro"
-import {weightAddApi, weightDetailApi,weightEditApi} from "@/api/weightList"
-import { useEffect, useState } from "react"
+import { certificationSaveApi, certificationDetailApi } from "@/api/certification"
+import { useEffect, useRef, useState } from "react"
import { alert, retrieval } from "@/common/common"
import "./index.scss"
+import useUploadCDNImg from "@/use/useUploadImage";
import Message from "@/components/Message"
+import { IMG_CND_Prefix } from "@/common/constant";
+import SelectEnterpriseType from "./components/SelectEnterpriseType"
+import { useSelector } from "@/reducers/hooks";
+import useLogin from "@/use/useLogin";
-export default ()=>{
- const {type,id} = useRouter().params;
- useEffect(()=>{
- if(type=="add"){
- setNavigationBarTitle({title:"添加码单信息"})
- }else{
- initalFormData();
- setNavigationBarTitle({title:"修改码单信息"})
- }
- },[]);
- // 获取编辑码单信息
- const {fetchData: getFromData} = weightDetailApi()
- const initalFormData = async ()=>{
- const detail = await getFromData({id});
+export default () => {
+ const { getAdminUserInfo } = useLogin();
+ const { adminUserInfo } = useSelector(state => state.userInfo);
+ useEffect(() => {
+ initalFormData();
+ }, []);
+ // 获取认证信息
+ const { fetchData: getFromData } = certificationDetailApi()
+ const initalFormData = async () => {
+ const detail = await getFromData();
setFormData({
- title: detail.data.title,
- purchaser_name: detail.data.purchaser_name,
- phone: detail.data.phone,
- is_default: detail.data.is_default,
- id: detail.data.id,
- })
+ ...detail.data ?? {},
+ legal_person_identity_url: detail?.data?.legal_person_identity_url ?? [],
+ // business_license_url: "https://test.cdn.zzfzyc.com/mall/827082e888860dd9da10f0fbb0ac3cf023081456.png"
+ } as any)
}
// 保存
const [formData, setFormData] = useState({
- title: "",
- purchaser_name: "",
- phone: "",
- is_default: false,
- id: 0
- })
+ authentication_type: 0,
+ authentication_type_name: "",
+ business_license_url: "",
+ legal_person: "",
+ legal_person_identity: "",
+ businessLicense: '',
+ legal_person_identity_url: [],
+ name: ""
+ });
const rules = {
- title: [{
- message: "请输入抬头"
+ authentication_type: [{
+ message: "请选择认证类型"
}],
- purchaser_name: [{
- message: "请输入客户名称"
+ name: [{
+ message: "请输入企业名称"
+ }],
+ business_license_url: [{
+ message: "请上传营业执照"
+ }],
+ legal_person: [{
+ message: "请输入法人名称"
+ }],
+ legal_person_identity: [{
+ message: "请输入正确法人身份证",
+ regex: /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
+ }],
+ legal_person_identity_url: [{
+ message: "请上传法人身份证",
+ validator: (value: any, rule: any) => {
+ if (!value[0] || !value[1]) {
+ return true;
+ }
+ return false;
+ }
}],
- phone: [{
- message: "请输入正确的电话号码", regex: /^1[3|5|6|9|2|8|7]\d{9}$/
- }]
}
- const {fetchData} = weightAddApi()
- const {fetchData: editFetch} = weightEditApi()
- const handleSave = ()=>{
- retrieval(formData, rules).then(async ()=>{
- const result = type=="add"?await fetchData({
- title: formData.title,
- purchaser_name: formData.purchaser_name,
- phone: formData.phone,
- is_default: formData.is_default,
- }):await editFetch({
- title: formData.title,
- purchaser_name: formData.purchaser_name,
- phone: formData.phone,
- is_default: formData.is_default,
- id: formData.id
- });
- if(result.success){
- Taro.eventCenter.trigger("weightList:refresh");
+ const { fetchData } = certificationSaveApi()
+ const handleSave = () => {
+ retrieval(formData, rules).then(async () => {
+ const result = await fetchData({ ...formData, authentication_type: 2 })
+ if (result.success) {
+ // Taro.eventCenter.trigger("weightList:refresh");
+ getAdminUserInfo();
Taro.navigateBack();
alert.success("保存成功");
- }else{
+ } else {
alert.error(result.msg);
}
- }).catch((message)=>{
+ }).catch((message) => {
alert.none(message)
})
}
// 监听表单完善
const [hozon, setHozon] = useState(false);
- useEffect(()=>{
- if(retrieval){
- retrieval(formData).then(()=>setHozon(true)).catch(()=>setHozon(false))
+ useEffect(() => {
+ if (retrieval) {
+ retrieval(formData).then(() => setHozon(true)).catch(() => setHozon(false))
}
- },[formData])
+ }, [formData])
+ // 选择类型弹窗显示
+ const selectTypeRef = useRef(null)
+ const handleSelectTypeModalShow = () => {
+ (selectTypeRef.current as any).setShow(true)
+ }
+ // 选择类型确定
+ const handleSelectTypeConfirm = (item) => {
+ setFormData({
+ ...formData,
+ authentication_type: item.id,
+ authentication_type_name: item.name
+ });
+ }
+ // 上传图片
+ const { getWxPhoto } = useUploadCDNImg();
+ const handleUploadImage = async (text: any) => {
+ let result = await getWxPhoto('mall');
+ if (text == "business_license_url") {
+ formData.business_license_url = IMG_CND_Prefix + (result as any).url;
+ } else {
+ formData.legal_person_identity_url[text] = IMG_CND_Prefix + (result as any).url as never;
+ }
+ setFormData({ ...formData });
+ }
+ // 查看图片
+ const handleViewImage = (event, url) => {
+ event.stopPropagation();
+ Taro.previewImage({
+ current: url,
+ urls: [url]
+ })
+ }
return (
-
+ {(adminUserInfo as any)?.authentication_status == 3 && }
企业认证
- setFormData({...formData,title:ev.detail.value})}
- value={formData["title"]} label="认证类型" placeholder="企业认证"/>
- setFormData({...formData,title:ev.detail.value})} value={formData["title"]} label="企业名称" placeholder="请输入营业执照上的企业名称" required/>
- setFormData({...formData,title:ev.detail.value})} value={formData["title"]} label="企业营业" placeholder="注册号、统一社会信用代码、组织机构代码" required/>
-
- {/* 营业执照正面
-
- 查看证件
- 重新上传
- */}
-
- +
- 上传营业执照下面
-
+ {/* */}
+
+ setFormData({ ...formData, name: ev.detail.value })} value={formData["name"]} label="企业名称" placeholder="请输入营业执照上的企业名称" required />
+ {/* */}
+ setFormData({ ...formData, businessLicense: ev.detail.value })} value={formData["businessLicense"]} style={{ border: "0" }} label="企业营业执照" placeholder="注册号、统一社会信用代码、组织机构代码" required />
+ handleUploadImage("business_license_url")} className="certification-upload">
+ {(formData as any)?.business_license_url ?
+ <>
+ 营业执照正面
+
+ handleViewImage(e, (formData as any)?.business_license_url)}>查看证件
+ 重新上传
+
+
+ > :
+
+ +
+ 上传营业执照正面
+
+ }
法人认证
- setFormData({...formData,title:ev.detail.value})} value={formData["title"]} label="法人代表" placeholder="填写法人名称" required/>
- setFormData({...formData,title:ev.detail.value})} value={formData["title"]} label="法人身份" placeholder="填写法人代表身份证号" required/>
-
- 身份证正面
-
- 查看证件
- 重新上传
-
+ setFormData({ ...formData, legal_person: ev.detail.value })} value={formData["legal_person"]} label="法人代表" placeholder="填写法人名称" required />
+ setFormData({ ...formData, legal_person_identity: ev.detail.value })} value={formData["legal_person_identity"]} label="法人身份" placeholder="填写法人代表身份证号" required />
+ handleUploadImage(0)} className="certification-upload">
+ {(formData as any)?.legal_person_identity_url[0] ?
+ <>
+ 营业执照正面
+
+ handleViewImage(e, (formData as any)?.legal_person_identity_url[0])}>查看证件
+ 重新上传
+
+
+ > :
+
+ +
+ 上传身份证正面
+
+ }
-
- 身份证反面
-
- 查看证件
- 重新上传
-
+ handleUploadImage(1)} className="certification-upload">
+ {(formData as any)?.legal_person_identity_url[1] ?
+ <>
+ 营业执照正面
+
+ handleViewImage(e, (formData as any)?.legal_person_identity_url[1])}>查看证件
+ 重新上传
+
+
+ > :
+
+ +
+ 上传身份证正面
+
+ }
- 取消
- 提交
+ 取消
+ {[3, 4].includes((adminUserInfo as any)?.authentication_status) ? "重新认证" : "提交"}
diff --git a/src/pages/collection/index.config.ts b/src/pages/collection/index.config.ts
new file mode 100644
index 0000000..a316ea6
--- /dev/null
+++ b/src/pages/collection/index.config.ts
@@ -0,0 +1,4 @@
+export default {
+ navigationBarTitleText: '我的收藏',
+ enableShareAppMessage: true,
+}
diff --git a/src/pages/collection/index.module.scss b/src/pages/collection/index.module.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/pages/collection/index.tsx b/src/pages/collection/index.tsx
new file mode 100644
index 0000000..67a9d9f
--- /dev/null
+++ b/src/pages/collection/index.tsx
@@ -0,0 +1,12 @@
+import Search from "@/components/search"
+import { View } from "@tarojs/components"
+import styles from './index.module.scss'
+export default () => {
+ return (
+
+
+ console.log(e)} placeholder="请输入面料关键词" placeIcon="out" showBtn={true} />
+
+
+ )
+ }
\ No newline at end of file
diff --git a/src/pages/creditLine/index.scss b/src/pages/creditLine/index.scss
index 29a272e..79772fc 100644
--- a/src/pages/creditLine/index.scss
+++ b/src/pages/creditLine/index.scss
@@ -5,22 +5,6 @@
width: 238px;
height: 238px;
}
-
- .credit-line-tips{
- width: 100%;
- height: 66px;
- background: #FFE6CE;
- border: 2px solid #ffe6ce;
- padding: 0 30px;
- display: flex;align-items: center;
- font-size: 24px;
- font-weight: 400;
- color: #EE7500;
- }
- .credit-line-tips text{
- margin-right: 10px;
- font-size: 30px;
- }
.credit-line-card{
width: 702px;
background: #ffffff;
diff --git a/src/pages/creditLine/index.tsx b/src/pages/creditLine/index.tsx
index 5468d50..6a9d4e9 100644
--- a/src/pages/creditLine/index.tsx
+++ b/src/pages/creditLine/index.tsx
@@ -7,6 +7,7 @@ import {creditInfoApi} from "@/api/creditLine"
import "./index.scss"
import { useSelector } from "@/reducers/hooks";
import { formatDateTime, formatPriceDiv } from "@/common/fotmat"
+import Message from "@/components/Message"
export default ()=>{
@@ -41,7 +42,8 @@ export default ()=>{
const credit_quota_used_line = convertPrice(formatPriceDiv(result.data.credit_quota_used_line));
const credit_quota_line = convertPrice(formatPriceDiv(result.data.credit_quota_line));
const credit_quota_available_line = convertPrice(formatPriceDiv(result.data.credit_quota_available_line));
- const progress = ((credit_quota_available_line[0]??0) / (credit_quota_line[0]??0) * 100).toFixed(0);
+ const progress = credit_quota_available_line[0]==0&&credit_quota_line[0]==0?100:((credit_quota_available_line[0]??0) / (credit_quota_line[0]??0) * 100).toFixed(0);
+
switch(Number(result.data.quota_status)){
case 0://暂未开通
@@ -120,9 +122,7 @@ export default ()=>{
return (
-
- 暂不支持线上申请授权,请联系平台客服。
-
+
diff --git a/src/pages/creditUsed/index.tsx b/src/pages/creditUsed/index.tsx
index 8858ad9..11cdbd8 100644
--- a/src/pages/creditUsed/index.tsx
+++ b/src/pages/creditUsed/index.tsx
@@ -4,7 +4,7 @@ import Taro, { useReady } from "@tarojs/taro"
import { useCallback, useEffect, useMemo, useRef, useState } from "react"
import {creditListApi} from "@/api/creditLine"
import "./index.scss"
-import { formatDateTime } from "@/common/fotmat"
+import { formatDateTime, formatPriceDiv, toDecimal2 } from "@/common/fotmat"
import { dataLoadingStatus, getFilterData } from "@/common/util";
export default ()=>{
@@ -30,7 +30,9 @@ export default ()=>{
下单
- 0?'green':item.amount<0?'red':''}`}>{item.amount.toLocaleString()}
+ 0?'green':item.amount<0?'red':''}`}>
+ {item.trans_type==2?"-":"+"}{toDecimal2(formatPriceDiv(item.amount)).toLocaleString()}
+
{formatDateTime(item.order_pay_time)}
diff --git a/src/pages/depositBeforehand/index.scss b/src/pages/depositBeforehand/index.scss
index d782d46..157ea4f 100644
--- a/src/pages/depositBeforehand/index.scss
+++ b/src/pages/depositBeforehand/index.scss
@@ -3,22 +3,6 @@
background-color: #f3f3f3;
display: flex;
flex-direction: column;
- .deposit-beforehand-tips{
- width: 100%;
- height: 66px;
- background: #FFE6CE;
- border: 2px solid #ffe6ce;
- padding: 0 30px;
- display: flex;align-items: center;
- font-size: 24px;
- font-weight: 400;
- color: #EE7500;
- margin: 0;
- }
- .deposit-beforehand-tips text{
- margin-right: 10px;
- font-size: 30px;
- }
.deposit-beforehand-card{
width: 702px;
diff --git a/src/pages/depositBeforehand/index.tsx b/src/pages/depositBeforehand/index.tsx
index c904f4c..9636d30 100644
--- a/src/pages/depositBeforehand/index.tsx
+++ b/src/pages/depositBeforehand/index.tsx
@@ -6,6 +6,7 @@ import { depositInfoApi } from "@/api/deposit"
import { useEffect } from "react";
import { formatPriceDiv, toDecimal2 } from "@/common/fotmat";
import { setClipboardData } from "@tarojs/taro";
+import Message from "@/components/Message";
export default ()=>{
const {fetchData, state} = depositInfoApi();
@@ -23,9 +24,7 @@ export default ()=>{
return (
-
- 汇款成功后,1-5分钟自动到账。
-
+
余额 (元)
diff --git a/src/pages/depositList/index.scss b/src/pages/depositList/index.scss
index 825cef8..f58398d 100644
--- a/src/pages/depositList/index.scss
+++ b/src/pages/depositList/index.scss
@@ -18,11 +18,12 @@
.credit-used-list-price{
font-size: 28px;
font-weight: 400;
- margin-bottom: 20px;
}
.credit-used-list-right{
display: flex;align-items: center;
- text-align: right;
+ }
+ .credit-used-list-right-price view{
+ display: flex;align-items: center;
}
.credit-used-list-right text{
font-size: 30px;
@@ -36,6 +37,7 @@
.credit-used-list-orderno{
font-size: 20px;
font-weight: 400;
+ margin-top: 20px;
color: #ababab;
}
.green{
diff --git a/src/pages/depositList/index.tsx b/src/pages/depositList/index.tsx
index c741086..eb9077c 100644
--- a/src/pages/depositList/index.tsx
+++ b/src/pages/depositList/index.tsx
@@ -36,11 +36,11 @@ export default ()=>{
-
- 0?'red':'green'}`}>
- {(item as any).amount_received_this_time>0&&"+"}{formatPriceDiv((item as any).amount_received_this_time)}
+
+
+ {[1,2,3].includes((item as any).type as never)?"+":"-"}{formatPriceDiv((item as any).amount_received_this_time)}
- 处理中
+ {/* 处理中 */}
diff --git a/src/pages/details/components/counter/index.module.scss b/src/pages/details/components/counter/index.module.scss
index fe96cca..2748cef 100644
--- a/src/pages/details/components/counter/index.module.scss
+++ b/src/pages/details/components/counter/index.module.scss
@@ -4,19 +4,25 @@
align-items: center;
justify-content: space-between;
width: 100%;
- .reduce, .plus{
- font-size: $font_size_big;
+ .plus{
color: $color_main;
width: 46px;
height: 46px;
- display: flex;
- align-items: center;
- justify-content:center;
+ text-align: center;
+ line-height: 43px;
font-size: 50px;
background-color: $color_main;
color: #fff;
border-radius: 8px;
}
+ .reduce {
+ font-size: 50px;
+ width: 46px;
+ height: 46px;
+ text-align: center;
+ line-height: 43px;
+ color:#007AFF;
+ }
.input{
display: flex;
align-items: flex-end;
@@ -25,10 +31,13 @@
box-sizing: border-box;
width: 106px;
border-radius: 10px;
+ input{
+ font-size: $font_size_medium;
+ text-align: right;
+ padding-right: 10px;
+ }
}
- input{
- font-size: $font_size_medium;
- }
+
.unit{
font-size: $font_size_min;
color: $color_font_two;
diff --git a/src/pages/details/components/orderCount/index.module.scss b/src/pages/details/components/orderCount/index.module.scss
index 8c745e2..705cf29 100644
--- a/src/pages/details/components/orderCount/index.module.scss
+++ b/src/pages/details/components/orderCount/index.module.scss
@@ -72,6 +72,9 @@
padding-bottom:151px;
}
.color_con{
+ .virtual_list{
+ padding-bottom: 300px;
+ }
.item {
display: flex;
justify-content: space-between;
@@ -81,12 +84,7 @@
width: 156.5px;
height: 156.5px;
border-radius: 20px;
- background-color: red;
- image{
- width: 100%;
- height: 100%;
- border-radius: 20px;
- }
+
}
.item_con{
flex:1;
diff --git a/src/pages/details/components/orderCount/index.tsx b/src/pages/details/components/orderCount/index.tsx
index ea3340a..d06a1c4 100644
--- a/src/pages/details/components/orderCount/index.tsx
+++ b/src/pages/details/components/orderCount/index.tsx
@@ -15,6 +15,8 @@ import Taro, { useRouter } from "@tarojs/taro";
import UseLogin from "@/use/useLogin"
import { formatHashTag, formatPriceDiv } from "@/common/fotmat";
import { debounce, getFilterData } from "@/common/util";
+import LabAndImg from "@/components/LabAndImg";
+import VirtualList from '@tarojs/components/virtual-list'
@@ -48,21 +50,14 @@ export default memo(({show = false, onClose, title = '', productId = 0}: param)
//获取面料颜色列表
const {fetchData:colorFetchData, state: colorState} = GetColorList()
const [list, setList] = useState([])
- const [loading, setLoading] = useState(false)
const condition = useRef({physical_warehouse:adminUserInfo?.physical_warehouse, sale_mode:selectIndex, product_id:0, code_or_name:null})
const getColorList = async () => {
- setLoading(() => true)
- console.log('数据:::',getFilterData(condition.current))
let {data} = await colorFetchData(getFilterData(condition.current))
let lists = initList(data.list)
setList(() => [...lists])
- setLoading(() => false)
}
const [showPopup, setShowPopup] = useState(false)
- useEffect(() => {
- console.log('colorState::',colorState)
- }, [colorState])
//显示获取
useEffect(() => {
@@ -123,11 +118,14 @@ export default memo(({show = false, onClose, title = '', productId = 0}: param)
//计数组件
const getInputValue = (num, item) => {
- item.count = parseFloat(num)
- if(num == 0) item.show = false
- setList([...list])
- console.log(num)
+ item.count = parseFloat(num)
+ if(num == 0) item.show = false
+ setList([...list])
+ console.log(num)
+
}
+
+
const onAdd = (item) => {
item.show = true
item.count = selectList[selectIndex].defaultNum
@@ -153,7 +151,6 @@ export default memo(({show = false, onClose, title = '', productId = 0}: param)
})
return false
}
-
if(selectCount.sumCount == 0) {
Taro.showToast({
icon:'none',
@@ -161,6 +158,7 @@ export default memo(({show = false, onClose, title = '', productId = 0}: param)
})
return false
}
+
const state = await addFetchData({
"sale_mode": selectIndex,
color_list: selectCount.color_list
@@ -198,10 +196,44 @@ export default memo(({show = false, onClose, title = '', productId = 0}: param)
return ¥{price} /{selectList[selectIndex].eunit}
}, [selectIndex])
+ //虚拟滚动
+ const Rows = memo(({id, index, style, data}:any) => {
+ let item = data[index]
+ return (
+ <>
+ {item&&
+
+
+
+
+ {formatHashTag(item.code, item.name)}
+
+ {formatPrice(item)}
+
+
+
+ {!item.show&& onAdd(item)}>添加
+ ||
+ getInputValue(e, item)}
+ defaultNum={item.count}
+ step={selectList[selectIndex].step}
+ digits={selectList[selectIndex].digits}
+ onClickBtn={(e) => getInputValue(e, item)}
+ unit={selectList[selectIndex].unit}
+ minNum={selectList[selectIndex].minNum}
+ maxNum={selectList[selectIndex].maxNum}
+ />
+ }
+
+ ||
+ }
+ >
+ )
+ })
return (
-
closePopup()} >
{title}
@@ -227,39 +259,53 @@ export default memo(({show = false, onClose, title = '', productId = 0}: param)
{(list.length <= 0 && colorState.loading)&&}
{(list.length > 0&& !colorState.loading)&&
-
-
-
- {list.map(item => {
- return
-
-
-
-
- {formatHashTag(item.code, item.name)}
-
- {formatPrice(item)}
-
-
-
- {!item.show&& onAdd(item)}>添加
- ||
- getInputValue(e, item)}
- defaultNum={item.count}
- step={selectList[selectIndex].step}
- digits={selectList[selectIndex].digits}
- onClickBtn={(e) => getInputValue(e, item)}
- unit={selectList[selectIndex].unit}
- minNum={selectList[selectIndex].minNum}
- maxNum={selectList[selectIndex].maxNum}
- />
- }
-
-
- })}
-
- }
+ //
+ //
+ // {list.map(item => {
+ // return
+ //
+ //
+ //
+ //
+ // {formatHashTag(item.code, item.name)}
+ //
+ // {formatPrice(item)}
+ //
+ //
+ //
+ // {!item.show&& onAdd(item)}>添加
+ // ||
+ // getInputValue(e, item)}
+ // defaultNum={item.count}
+ // step={selectList[selectIndex].step}
+ // digits={selectList[selectIndex].digits}
+ // onClickBtn={(e) => getInputValue(e, item)}
+ // unit={selectList[selectIndex].unit}
+ // minNum={selectList[selectIndex].minNum}
+ // maxNum={selectList[selectIndex].maxNum}
+ // />
+ // }
+ //
+ //
+ // })}
+ //
+ // }
+
+
+ {Rows}
+
+
+ }
+
{(list.length <= 0 && !colorState.loading)&&暂无此商品}
@@ -273,4 +319,5 @@ export default memo(({show = false, onClose, title = '', productId = 0}: param)
)
-})
\ No newline at end of file
+})
+
diff --git a/src/pages/details/index.tsx b/src/pages/details/index.tsx
index a7e6341..3d289d7 100644
--- a/src/pages/details/index.tsx
+++ b/src/pages/details/index.tsx
@@ -14,6 +14,8 @@ import useLogin from '@/use/useLogin';
import { AnalysisShortCodeApi, BindShortCodeApi, GetShortCodeApi } from '@/api/share';
import { SHARE_SCENE } from '@/common/enum';
import useUserInfo from '@/use/useUserInfo';
+import LabAndImg from '@/components/LabAndImg';
+import { alert } from '@/common/common';
type item = {title:string, img:string, url:string, id:number}
@@ -78,9 +80,10 @@ export default (props:Params) => {
const [showCart, setShowCart] = useState(false)
const [showOrderCount, setShowOrderCount] = useState(false)
- const html = `
-
- `
+ // const html = `
+ //
+ // `
+ const html = ``
//弹窗提示
const [colorInfo, setColorInfo] = useState()
@@ -113,17 +116,21 @@ export default (props:Params) => {
setSortCode({... userObj.sort_code, shareShortDetail: {title: productName as string, code: resDetail.md5_key, img:''}})
}
- //开始下单
- const placeOrder = async (e:any) => {
- try {
- await getPhoneNumber(e.detail.code)
- } catch(msg) {
- Taro.showToast({
- icon:"none",
- title: msg
- })
- return false
- }
+ //授权手机号和下单
+ const placeOrder = async (status = 'to_phone',e:any = {}) => {
+ if(!productInfo.id) return false
+ if(status == 'to_phone') {
+ if(!e.detail.code) return alert.error('请授权手机号')
+ try {
+ await getPhoneNumber(e.detail.code)
+ } catch(msg) {
+ Taro.showToast({
+ icon:"none",
+ title: msg
+ })
+ return false
+ }
+ }
setShowOrderCount(true)
}
@@ -162,12 +169,12 @@ export default (props:Params) => {
- 色号 (10)
+ 色号 ({productInfo?.product_color_list?.length})
{productInfo?.product_color_list?.map(item => {
return getColorItem(item)}>
-
+
{item.code}
@@ -183,11 +190,11 @@ export default (props:Params) => {
购物车
{
- !userInfo.adminUserInfo?.is_authorize_phone&&
-
+ (!userInfo.adminUserInfo?.is_authorize_phone)&&
+
开始下单
- || placeOrder(e)}>开始下单
+ || placeOrder('to_order')}>开始下单
}
diff --git a/src/pages/index/index.tsx b/src/pages/index/index.tsx
index 1bde8b9..9912444 100644
--- a/src/pages/index/index.tsx
+++ b/src/pages/index/index.tsx
@@ -1,4 +1,4 @@
-import {View} from '@tarojs/components'
+import { View } from '@tarojs/components'
import Banner from '@/components/banner'
import Search from '@/components/search'
import SideBar from '@/components/sideBar'
@@ -6,16 +6,17 @@ import Product from '@/components/product'
import MoveBtn from '@/components/moveBtn'
import ShopCart from '@/components/shopCart'
import { goLink } from '@/common/common'
-import styles from './index.module.scss'
+import styles from './index.module.scss'
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
-import Taro, { Events, useDidShow, usePullDownRefresh} from '@tarojs/taro'
-import {GetProductKindListApi, GetProductListApi} from '@/api/material'
+import { useSelector } from "@/reducers/hooks";
+import Taro, { Events, useDidShow, usePullDownRefresh } from '@tarojs/taro'
+import { GetProductKindListApi, GetProductListApi } from '@/api/material'
import useLogin from '@/use/useLogin'
import { dataLoadingStatus } from '@/common/util'
export default () => {
- const {checkLogin} = useLogin()
+ const { checkLogin } = useLogin()
useDidShow(async () => {
await checkLogin()
})
@@ -25,32 +26,33 @@ export default () => {
}, [])
//获取面料种类
- const [kindData, setKindData] = useState({list:[], defaultId:0})
- const {fetchData} = GetProductKindListApi()
+ const [kindData, setKindData] = useState({ list: [], defaultId: 0 })
+ const { fetchData } = GetProductKindListApi()
const categoryList = async () => {
const res = await fetchData()
- if(res.data?.list) {
- setKindData({...kindData, list:res.data.list, defaultId: res.data.list[0].id})
- setFiltrate({...filtrate, product_kind_id:res.data.list[0].id})
+ if (res.data?.list) {
+ setKindData({ ...kindData, list: res.data.list, defaultId: res.data.list[0].id })
+ setFiltrate({ ...filtrate, product_kind_id: res.data.list[0].id })
}
-
+
}
//获取面料列表
- const [productData, setProductData] = useState({list:[], total:0})
+ const [productData, setProductData] = useState({ list: [], total: 0 })
const [hasMore, setHasMore] = useState(true)
- const [filtrate, setFiltrate] = useState({product_kind_id:0, size: 5,page: 1})
- const pageNum = useRef({size:filtrate.size, page:filtrate.page})
- const {fetchData: productFetchData, state: productState} = GetProductListApi()
+ const [filtrate, setFiltrate] = useState({ product_kind_id: 0, size: 5, page: 1 })
+ const pageNum = useRef({ size: filtrate.size, page: filtrate.page })
+ const { fetchData: productFetchData, state: productState } = GetProductListApi()
//获取数据方法
const getProductList = async () => {
- const {data,total} = await productFetchData(filtrate)
- setProductData({...productData,list:data.list,total})
+ const { data, total } = await productFetchData(filtrate)
+ setProductData({ ...productData, list: data.list, total })
setRefresherTriggeredStatus(() => false)
}
//监听查询条件
useEffect(() => {
- if(filtrate.product_kind_id)
+
+ if (filtrate.product_kind_id)
getProductList()
}, [filtrate])
@@ -58,30 +60,30 @@ export default () => {
//点击面料类型
const getProductKindId = useCallback((e) => {
pageNum.current.page = 1
- setProductData({list:[], total:0})
- setFiltrate((list) => ({...list, size:5, product_kind_id:e.id}))
+ setProductData({ list: [], total: 0 })
+ setFiltrate((list) => ({ ...list, size: 5, product_kind_id: e.id }))
// setHasMore(true)
}, [])
//上拉加载数据
const getScrolltolower = useCallback(() => {
- if(productData.list.length >= productData.total) {
+ if (productData.list.length >= productData.total) {
setHasMore(false)
} else {
pageNum.current.page++
const newSize = pageNum.current.size * pageNum.current.page
- setFiltrate((e) => ({...e, size:newSize}))
+ setFiltrate((e) => ({ ...e, size: newSize }))
}
}, [productData])
const [showShopCart, setShowShopCart] = useState(false)
-
+
//列表下拉刷新
const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false)
const getRefresherRefresh = async () => {
pageNum.current.page = 1
- setFiltrate({...filtrate, size:5})
+ setFiltrate({ ...filtrate, size: 5 })
setHasMore(true)
setRefresherTriggeredStatus(true)
}
@@ -95,26 +97,85 @@ export default () => {
//数据加载状态
const statusMore = useMemo(() => {
- return dataLoadingStatus({list:productData.list, total: productData.total, status: productState.loading})
+ return dataLoadingStatus({ list: productData.list, total: productData.total, status: productState.loading })
}, [productData, productState.loading])
-
+
+ useEffect(() => {
+ getShow()
+ }, [])
+ // const [time, setShow] = useState(false)
+ //拿状态存储的东西判断
+ const { adminUserInfo } = useSelector(state => state.userInfo);
+ const getShow = () => {
+ if (adminUserInfo?.authentication_status === 0 || adminUserInfo?.authentication_status === 1 || adminUserInfo?.authentication_status === 2 || adminUserInfo?.authentication_status === 3) {
+ //倒计时弹出去认证
+ const countTime: any = 60
+ //获取倒计时的变量
+ var time = parseInt(countTime);
+ const countDown = setInterval(() => {
+ if (time == 0) {
+ Taro.showModal({
+ title: '提示',
+ content: '你还未认证,认证后解锁更多功能',
+ cancelText: '稍后认证',
+ confirmText: '去认证',
+ success: function (res) {
+ if (res.confirm) {
+ Taro.navigateTo({ url: '/pages/certification/index' })
+ } else if (res.cancel) {
+ console.log('用户点击取消')
+ }
+ }
+ })
+ //清除定时器
+ clearInterval(countDown);
+ } else {
+ time--;
+ }
+ }, 1000)
+ }
+ }
+
+ //检查认证是否认证
+ const checkShow = () => {
+ if (adminUserInfo.authentication_status === 0 || adminUserInfo.authentication_status === 1 || adminUserInfo.authentication_status === 2 || adminUserInfo.authentication_status === 3) {
+ Taro.showModal({
+ title: '提示',
+ content: '你还未认证,认证后解锁更多功能',
+ cancelText: '稍后认证',
+ confirmText: '去认证',
+ success: function (res) {
+ if (res.confirm) {
+ Taro.navigateTo({ url: '/pages/certification/index' })
+ } else if (res.cancel) {
+ console.log('用户点击取消')
+ }
+ }
+ })
+ } else {
+ setShowShopCart(!showShopCart)
+ }
+
+ }
+
+
return (
- setShowShopCart(!showShopCart)}>
+ checkShow()}>
-
+
我的收藏
goLink('/pages/searchList/search')}>
-
+
- getRefresherRefresh()}>
-
-
+ getRefresherRefresh()}>
+
+
- setShowShopCart(false)}/>
+ setShowShopCart(false)} />
)
diff --git a/src/pages/order/comfirm.module.scss b/src/pages/order/comfirm.module.scss
index 2858dec..a33eb0c 100644
--- a/src/pages/order/comfirm.module.scss
+++ b/src/pages/order/comfirm.module.scss
@@ -80,6 +80,9 @@
box-sizing: border-box;
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
+ .submit_order_number{
+ padding: 20px 0;
+ }
.order_btn {
width: 250px;
height: 90px;
diff --git a/src/pages/order/comfirm.tsx b/src/pages/order/comfirm.tsx
index e8a8a45..52371dc 100644
--- a/src/pages/order/comfirm.tsx
+++ b/src/pages/order/comfirm.tsx
@@ -1,15 +1,12 @@
import { SaleOrderPreViewApi, SaleOrderApi } from "@/api/order";
import { formatPriceDiv } from "@/common/fotmat";
import Popup from "@/components/popup";
-import SearchInput from "@/components/searchInput";
-import { Text, Textarea, View } from "@tarojs/components"
-import Taro, { useDidShow, useRouter } from "@tarojs/taro";
+import { View } from "@tarojs/components"
+import Taro, { useDidShow, usePullDownRefresh} from "@tarojs/taro";
import classnames from "classnames";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
-import AddressInfo,{AddressInfoParam} from "./components/addressInfo";
-import EstimatedAmount from "./components/estimatedAmount";
+import AddressInfo from "./components/addressInfo";
import KindList from "./components/kindList";
-import OrderState from "./components/orderState";
import Remark from "./components/remark";
import styles from './comfirm.module.scss'
import { getParam } from "@/common/system";
@@ -17,9 +14,9 @@ import useLogin from "@/use/useLogin";
import { alert, goLink } from "@/common/common";
import ShipmentMode from "../editOrder/components/shipmentMode";
import SubmitOrderBtn from "./components/submitOrderBtn";
+import AddressInfoDetail from "./components/addressInfoDetail";
export default () => {
- const {checkLogin} = useLogin()
const [showDesc, setShowDesc] = useState(false)
//下单信息
@@ -57,8 +54,7 @@ import SubmitOrderBtn from "./components/submitOrderBtn";
if(preViewOrder) {
formatData()
getDataList()
- //当有默认地址时设置默认地址id
- preViewOrder.default_address&&setSubmitOrderData((val) => ({...val, address_id:preViewOrder.default_address.id}))
+ setSubmitOrderData((val) => ({...val, address_id:preViewOrder.default_address.id, shipment_mode:preViewOrder.shipment_mode||2}))
}
}, [preViewOrder])
@@ -73,7 +69,9 @@ import SubmitOrderBtn from "./components/submitOrderBtn";
total_number: preViewOrder.total_number, //总数量
total_fabrics: preViewOrder.total_fabrics, //面料数量
unit: preViewOrder.sale_mode == 0?'条':'m', //单位
- list: preViewOrder.product_list
+ list: preViewOrder.product_list,
+ total_should_collect_money: preViewOrder.total_should_collect_money, //应收金额
+ total_sale_price: preViewOrder.total_sale_price //合计金额
})
}
const formatPreViewOrderMemo = useMemo(() => {
@@ -83,18 +81,16 @@ import SubmitOrderBtn from "./components/submitOrderBtn";
//格式化初始地址
const defaultAddress = useMemo(() => {
const address = preViewOrder?.default_address
- if(address) {
- return {
- province_name: address.province_name,
- city_name: address.city_name,
- district_name: address.district_name,
- address_detail: address.address_detail,
- id: address.id,
- name: address.name,
- phone: address.phone
- }
+ return {
+ province_name: address?.province_name,
+ city_name: address?.city_name,
+ district_name: address?.district_name,
+ address_detail: address?.address_detail,
+ id: address?.id,
+ name: address?.name,
+ phone: address?.phone,
+ shipment_mode: address?.shipment_mode
}
- return null
}, [preViewOrder])
//获取提交格式数据列表
@@ -125,24 +121,29 @@ import SubmitOrderBtn from "./components/submitOrderBtn";
//提交按钮是否可用
const btnStatus = useMemo(() => {
- if( submitOrderData?.list?.length == 0 || !submitOrderData?.shipment_mode || (submitOrderData?.shipment_mode == 2 && !submitOrderData?.address_id)) {
- return false
- } else {
- return true
- }
+ return submitOrderData?.shipment_mode == 1 || (submitOrderData?.shipment_mode == 2 && submitOrderData?.address_id)
}, [submitOrderData])
+ //数量格式
+ const numText = useMemo(() => {
+ if(formatPreViewOrder) {
+ let total_number = formatPreViewOrder?.sale_mode == 0?formatPreViewOrder?.total_number:(formatPreViewOrder?.total_number/100)
+ return `${formatPreViewOrder?.total_fabrics}种面料,${formatPreViewOrder?.total_colors}种颜色,共${total_number}${formatPreViewOrder?.unit}`
+ }
+ }, [formatPreViewOrder])
+
//提交订单
const {fetchData: saleOrderFetchData} = SaleOrderApi()
const submitOrderEven = () => {
- if(!submitOrderData?.address_id) {
- alert.error('请选择地址')
- return false
- }
if(!submitOrderData?.shipment_mode) {
alert.error('请选择收货方式')
return false
}
+ if(!submitOrderData?.address_id&&submitOrderData?.shipment_mode == 2) {
+ alert.error('请选择地址')
+ return false
+ }
+
Taro.showModal({
title: '确定提交?',
success: async function (res) {
@@ -159,10 +160,14 @@ import SubmitOrderBtn from "./components/submitOrderBtn";
}
})
}
+
+ //页面下拉刷新
+ usePullDownRefresh(() => {
+ getSaleOrderPreView()
+ })
return (
-
- getAddress(e)} defaultValue={defaultAddress}/>
+
setShowDesc(true)}>
订单备注
@@ -174,8 +179,8 @@ import SubmitOrderBtn from "./components/submitOrderBtn";
-
- {`${formatPreViewOrder?.total_fabrics}种面料,${formatPreViewOrder?.total_colors}种颜色,共${formatPreViewOrder?.total_number + formatPreViewOrder?.unit}`}
+
+ {numText}
submitOrderEven()}>提交订单
diff --git a/src/pages/order/components/addressInfoDetail/index copy.tsx b/src/pages/order/components/addressInfoDetail/index copy.tsx
new file mode 100644
index 0000000..1fffafe
--- /dev/null
+++ b/src/pages/order/components/addressInfoDetail/index copy.tsx
@@ -0,0 +1,163 @@
+import { EditSaleOrderAddressApi, EditSaleOrderShipmentModeApi } from "@/api/order";
+import { alert } from "@/common/common";
+import { ORDER_STATUS } from "@/common/enum";
+import { debounce } from "@/common/util";
+import AddressList from "@/components/AddressList";
+import Popup from "@/components/popup";
+import { Text, View } from "@tarojs/components"
+import classnames from "classnames";
+import { forwardRef, memo, useEffect, useImperativeHandle, useMemo, useState } from "react";
+import styles from './index.module.scss'
+
+export type AddressInfoParam = {
+ province_name: string,
+ city_name: string,
+ district_name: string,
+ address_detail: string,
+ id?: number,
+ name: string,
+ phone: string,
+}
+type Param = {
+ onSelect?: (val:any) => void, //选择地址
+ defaultValue?: AddressInfoParam|null, //默认值
+ disabled?: false|true, //true禁用后只用于展示
+ onChangeShipmentMode?: (val: number) => void, //返回收货方式
+ status?: 1|2, //1确认订单时使用, 2订单流程
+ orderInfo?: {
+ orderId: number //订单id
+ shipment_mode: 1|2, //1自提 2物流
+ status: number //订单状态
+ }
+}
+
+export default memo(forwardRef(({onSelect, onChangeShipmentMode, defaultValue = null, orderInfo, status = 2}: Param, ref) => {
+ const [showAddressList, setShowAddressList] = useState(false)
+
+ useEffect(() => {
+ setUserInfo(() => defaultValue)
+ }, [defaultValue])
+
+ const [userInfo, setUserInfo] = useState()
+
+ //地址格式
+ const formatAddress = useMemo(() => {
+ if(userInfo)
+ return userInfo.province_name + userInfo.city_name + userInfo.district_name + userInfo.address_detail
+ }, [userInfo])
+
+ const changeShow = () => {
+ if(receivingStatus == 2 && !logisticsShow)
+ setShowAddressList(() => true)
+ }
+
+ useEffect(() => {
+ if(orderInfo)
+ setReceivingStatus(() => orderInfo.shipment_mode||2)
+ }, [orderInfo])
+
+ //把内部方法提供给外部
+ useImperativeHandle(ref, () => ({
+ changeShow
+ }))
+
+ //收货方法,1:自提,2物流
+ const [receivingStatus, setReceivingStatus] = useState(2)
+ const {fetchData: shipmentModeFetchData} = EditSaleOrderShipmentModeApi()
+ const onReceivingStatus = (value, e) => {
+ e.stopPropagation()
+ changeReceivingStatus(value)
+ }
+ const changeReceivingStatus = debounce(async (value) => {
+ if(!orderInfo) return false
+ if(status == 1) {
+ onChangeShipmentMode?.(value)
+ setReceivingStatus(value)
+ return false
+ }
+ alert.loading('正在修改')
+ const res = await shipmentModeFetchData({id: orderInfo.orderId, shipment_mode:value})
+ if(res.success) {
+ alert.success('收货方式修改成功')
+ onChangeShipmentMode?.(value)
+ setReceivingStatus(value)
+ } else {
+ alert.none(res.msg)
+ }
+ }, 10)
+
+ //修改地址
+ const [addressId, setAddressId] = useState(0)
+ const {fetchData: addressFetchData} = EditSaleOrderAddressApi()
+ const getAddress = async (value) => {
+ if(!orderInfo) return false
+ if(status == 1) {
+ setShowAddressList(() => false)
+ setAddressId(value.id)
+ setUserInfo(() => value)
+ return false
+ }
+ alert.loading('正在修改')
+ const res = await addressFetchData({id: orderInfo.orderId, address_id: value.id})
+ if(res.success) {
+ alert.success('地址修改成功')
+ onSelect?.(value)
+ setShowAddressList(() => false)
+ setAddressId(value.id)
+ setUserInfo(() => value)
+ } else {
+ alert.none(res.msg)
+ }
+ }
+
+ //订单状态
+ const {
+ SaleOrderStatusWaitingReceipt,
+ SaleOrderStatusAlreadyReceipt,
+ SaleOrderStatusComplete,
+ SaleOrderStatusRefund,
+ SaleOrderStatusCancel
+ } = ORDER_STATUS
+
+ //根据订单状态判断是否显示物流
+ const logisticsShowList = [SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value]
+ const logisticsShow = useMemo(() => {
+ return logisticsShowList.includes(orderInfo?.status as number)
+ }, [orderInfo])
+
+ return (
+
+ changeShow()}>
+
+
+
+ {formatAddress}
+ {(receivingStatus == 2 && !logisticsShow)&&}
+
+
+ {userInfo?.name}
+ {userInfo?.phone}
+
+
+ {!logisticsShow&&
+
+ onReceivingStatus(1,e)}>自提
+ onReceivingStatus(2,e)}>物流
+
+
+ ||
+
+ 查看物流
+ }
+
+ setShowAddressList(false)}>
+
+ 请选择收货地址
+
+
+
+
+
+
+ )
+}))
\ No newline at end of file
diff --git a/src/pages/order/components/addressInfoDetail/index.module.scss b/src/pages/order/components/addressInfoDetail/index.module.scss
index 68e6171..cf039ce 100644
--- a/src/pages/order/components/addressInfoDetail/index.module.scss
+++ b/src/pages/order/components/addressInfoDetail/index.module.scss
@@ -1,5 +1,4 @@
.order_address{
- height: 178px;
background: #ffffff;
border-radius: 20px;
display: flex;
@@ -26,16 +25,23 @@
.order_address_text_title{
font-size: $font_size_medium;
margin-top: 10px;
- @include common_ellipsis;
display: flex;
- align-items: center;
justify-content: space-between;
.moreIconfont{
font-size: 20px;
+ padding-top: 10px;
+ }
+ .address_text{
+ word-break:break-all;
+
+ }
+ .address_text_no{
+ font-weight: 700;
+ padding-left: 20px;
}
}
.order_address_text_name{
-
+ margin-top: 30px;
align-items: center;
text{
&:nth-child(1) {
@@ -88,6 +94,21 @@
}
}
+ .logisticsBtn{
+ width: 152px;
+ height: 72px;
+ background: #ffffff;
+ border: 2px solid #dddddd;
+ border-radius: 38px;
+ position: absolute;
+ bottom: 10px;
+ right: 10px;
+ z-index: 999;
+ font-size: 28px;
+ color: #707070;
+ text-align: center;
+ line-height: 72px;
+ }
.order_address_text_no{
flex: 1;
font-size: $font_size;
@@ -101,12 +122,17 @@
}
.order_address_list {
- height: 900px;
+ height:80vh;
.order_address_title{
font-size: $font_size;
font-weight: 700;
width: 100%;
text-align: center;
padding: 20px 0 30px 0;
+ height: 100px;
+ }
+ .addressList_con{
+ padding-bottom: 20px;
+ height: calc(100% - 160px);
}
}
\ No newline at end of file
diff --git a/src/pages/order/components/addressInfoDetail/index.tsx b/src/pages/order/components/addressInfoDetail/index.tsx
index d58b12b..f7194be 100644
--- a/src/pages/order/components/addressInfoDetail/index.tsx
+++ b/src/pages/order/components/addressInfoDetail/index.tsx
@@ -1,11 +1,12 @@
import { EditSaleOrderAddressApi, EditSaleOrderShipmentModeApi } from "@/api/order";
import { alert } from "@/common/common";
+import { ORDER_STATUS } from "@/common/enum";
import { debounce } from "@/common/util";
import AddressList from "@/components/AddressList";
import Popup from "@/components/popup";
import { Text, View } from "@tarojs/components"
import classnames from "classnames";
-import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useState } from "react";
+import { forwardRef, memo, useEffect, useImperativeHandle, useMemo, useState } from "react";
import styles from './index.module.scss'
export type AddressInfoParam = {
@@ -18,37 +19,48 @@ export type AddressInfoParam = {
phone: string,
}
type Param = {
- onSelect?: (val:any) => void, //选择
- defaultValue?: AddressInfoParam|null, //默认值
+ onSelect?: (val:any) => void, //选择地址
disabled?: false|true, //true禁用后只用于展示
- shipment_mode?: 1|2, //1自提 2物流
onChangeShipmentMode?: (val: number) => void, //返回收货方式
- orderId?: number //订单id
+ onLogistics?: () => void, //查看物流
+ status?: 1|2, //1确认订单时使用, 2订单流程
+ orderInfo?: {
+ id?: number //订单id
+ shipment_mode?: 1|2, //1自提 2物流
+ status?: number //订单状态
+ province_name: string,
+ city_name: string,
+ district_name: string,
+ address_detail: string
+ }
}
-export default memo(forwardRef(({onSelect, onChangeShipmentMode, defaultValue = null, orderId = 0, shipment_mode = 1}: Param, ref) => {
- const [showAddressList, setShowAddressList] = useState(false)
-
+export default memo(forwardRef(({onSelect, onChangeShipmentMode, orderInfo, status = 2, disabled = false, onLogistics}: Param, ref) => {
+
+ const [addressInfo, setAddressInfo] = useState()
useEffect(() => {
- setUserInfo(() => defaultValue)
- }, [defaultValue])
+ if(orderInfo) {
+ setReceivingStatus(() => orderInfo.shipment_mode||2)
+ setAddressInfo(() => orderInfo)
+ }
+ }, [orderInfo])
- const [userInfo, setUserInfo] = useState()
//地址格式
const formatAddress = useMemo(() => {
- if(userInfo)
- return userInfo.province_name + userInfo.city_name + userInfo.district_name + userInfo.address_detail
- }, [userInfo])
+ if(addressInfo?.province_name) {
+ return addressInfo.province_name + addressInfo.city_name + addressInfo.district_name + addressInfo.address_detail
+ } else {
+ return ''
+ }
+ }, [addressInfo])
+ //打开地址列表
+ const [showAddressList, setShowAddressList] = useState(false)
const changeShow = () => {
- if(receivingStatus == 2)
+ if(receivingStatus == 2 && !logisticsShow)
setShowAddressList(() => true)
}
-
- useEffect(() => {
- setReceivingStatus(() => shipment_mode)
- }, [shipment_mode])
//把内部方法提供给外部
useImperativeHandle(ref, () => ({
@@ -56,15 +68,21 @@ export default memo(forwardRef(({onSelect, onChangeShipmentMode, defaultValue =
}))
//收货方法,1:自提,2物流
- const [receivingStatus, setReceivingStatus] = useState(1)
+ const [receivingStatus, setReceivingStatus] = useState(2)
const {fetchData: shipmentModeFetchData} = EditSaleOrderShipmentModeApi()
const onReceivingStatus = (value, e) => {
e.stopPropagation()
changeReceivingStatus(value)
}
const changeReceivingStatus = debounce(async (value) => {
+ if(!orderInfo) return false
+ if(status == 1) {
+ onChangeShipmentMode?.(value)
+ setReceivingStatus(value)
+ return false
+ }
alert.loading('正在修改')
- const res = await shipmentModeFetchData({id: orderId, shipment_mode:value})
+ const res = await shipmentModeFetchData({id: orderInfo.id, shipment_mode:value})
if(res.success) {
alert.success('收货方式修改成功')
onChangeShipmentMode?.(value)
@@ -75,48 +93,79 @@ export default memo(forwardRef(({onSelect, onChangeShipmentMode, defaultValue =
}, 10)
//修改地址
+ const [addressId, setAddressId] = useState(0)
const {fetchData: addressFetchData} = EditSaleOrderAddressApi()
const getAddress = async (value) => {
+ if(!orderInfo) return false
+ if(status == 1) {
+ setShowAddressList(() => false)
+ setAddressId(value.id)
+ setAddressInfo(() => value)
+ onSelect?.(value)
+ return false
+ }
alert.loading('正在修改')
- const res = await addressFetchData({id: orderId, address_id: value.id})
+ const res = await addressFetchData({id: orderInfo.id, address_id: value.id})
if(res.success) {
alert.success('地址修改成功')
onSelect?.(value)
setShowAddressList(() => false)
- setUserInfo(() => value)
+ setAddressId(value.id)
+ setAddressInfo(() => value)
} else {
alert.none(res.msg)
}
}
+ //订单状态
+ const {
+ SaleOrderStatusWaitingReceipt,
+ SaleOrderStatusAlreadyReceipt,
+ SaleOrderStatusComplete,
+ SaleOrderStatusRefund,
+ SaleOrderStatusCancel,
+ } = ORDER_STATUS
+
+
+ //根据订单状态判断是否显示物流
+ const logisticsShowList = [SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value]
+ const logisticsShow = useMemo(() => {
+ console.log('aa:',orderInfo?.status)
+ return logisticsShowList.includes(orderInfo?.status as number)
+ }, [orderInfo])
+
return (
changeShow()}>
- {formatAddress}
- {(receivingStatus == 2)&&}
+ {formatAddress||'请选择收货地址及信息'}
+ {(receivingStatus == 2 && !logisticsShow)&&}
- {userInfo?.name}
- {userInfo?.phone}
+ {addressInfo?.name}
+ {addressInfo?.phone}
-
+ {!logisticsShow&&
onReceivingStatus(1,e)}>自提
onReceivingStatus(2,e)}>物流
-
+ ||
+
+ 查看物流
+ }
setShowAddressList(false)}>
请选择收货地址
-
+
+
+
-
)
diff --git a/src/pages/order/components/applyAfterSales/index.module.scss b/src/pages/order/components/applyAfterSales/index.module.scss
deleted file mode 100644
index 22a31e0..0000000
--- a/src/pages/order/components/applyAfterSales/index.module.scss
+++ /dev/null
@@ -1,176 +0,0 @@
-
-.apply_after_sales_main{
- .apply_after_sales_head{
- font-size: 30px;
- text-align: center;
- padding: 20px 0;
- font-weight: 700;
- }
- .kind_number{
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- text{
- background-color: #F6F6F6;
- border-radius: 10px;
- font-size: $font_size_medium;
- padding: 5px 0;
- text-align: center;
- width: 100%;
- display: block;
- color: $color_font_three;
- }
- }
- .apply_after_sales_con{
- height: 80vh;
- .scroll{
- height: calc(100% - 80px);
- }
- .returnSaleInput{
- margin: 0 20px;
- padding-top: 30px;
- border-top: 1px solid #F6F6F6;
- .returnSaleInput_item{
- display: flex;
- align-items: center;
- padding-bottom: 20px;
- .title{
- font-size: $font_size;
- font-weight: 700;
- }
- .select{
- flex:1;
- height: 60px;
- border: 2px solid #e6e6e6;
- border-radius: 10px;
- margin-left: 20px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 0 20px;
- font-size: 26px;
- color: $color_font_two;
- .miconfont{
- font-size: 30px;
- }
- }
-
- .uploadImg{
- width: 202px;
- height: 150px;
- background: #f0f0f0;
- border: 2px dashed #cccccc;
- margin-left: 20px;
- border-radius: 10px;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- position: relative;
- .miconfont{
- font-size: 50px;
- }
- .uploadText{
- font-size: 26px;
- color: $color_font_three;
- }
-
- }
- }
- }
- .other_desc{
- padding: 0 20px;
- box-sizing: border-box;
- .title{
- font-size: $font_size;
- font-weight: 700;
- }
- .uploadImg{
- position: relative;
- .descDataNum{
- position: absolute;
- right: 10px;
- bottom: 10px;
- font-size: 22px;
- color: #ABABAB;
- }
- }
- Textarea{
- background-color: #f3f3f3;
- border: 2px solid #e6e6e6;
- border-radius: 10px;
- width: 100%;
- font-size: 25px;
- height: 165.4px;
- padding: 20px 20px 30px 20px;
- box-sizing: border-box;
- margin-top: 20px;
- }
- }
- }
- .apply_after_sales_list{
- padding: 0 20px;
- .apply_after_sales_item{
- margin-bottom: 30px;
- .apply_after_sales_title{
- display: flex;
- align-items: center;
- .tag{
- font-size: $font_size_min;
- background-color: #CDE5FF;
- padding: 5px 10px;
- border-radius: 6px;
- color: $color_main;
- }
- .title{
- font-weight: 700;
- font-size: $font_size;
- margin-left: 20px;
- flex:1;
- }
- }
- .color_list {
- .color_item{
- display: flex;
- align-items: center;
- margin: 20px 0;
- }
- .image{
- width: 70px;
- height: 70px;
- image{
- width: 100%;
- height: 100%;
- border-radius: 50%;
- }
- }
- .name_and_number{
- padding-left: 30px;
- flex:1;
- text{
- &:nth-child(1) {
- font-weight: 700;
- font-size: $font_size;
- }
- &:nth-child(2) {
- color: $color_font_two;
- font-size: $font_size;
- margin-left: 20px;
- }
- }
- }
- .btn_count{
- width: 235px;
- height: 64px;
- background-color: #ECF5FF;
- border-radius: 40px 0px 16px 0px;
- padding: 0 20px;
- display: flex;
- align-items: center;
- }
- }
- }
-
- }
-}
-
diff --git a/src/pages/order/components/applyAfterSales/index.tsx b/src/pages/order/components/applyAfterSales/index.tsx
deleted file mode 100644
index 735e476..0000000
--- a/src/pages/order/components/applyAfterSales/index.tsx
+++ /dev/null
@@ -1,108 +0,0 @@
-import { Image, ScrollView, Text, Textarea, View } from "@tarojs/components";
-import { memo, useState } from "react";
-import classnames from "classnames";
-import styles from './index.module.scss'
-import Popup from "@/components/popup";
-import { formatImgUrl } from "@/common/fotmat";
-import Counter from "@/components/counter";
-
-export default memo(() => {
- const [showDesc, setShowDesc] = useState(true)
- return (
-
- setShowDesc(false)} >
-
- 申请退货
- 2种面料,3种颜色,共6条
-
-
-
-
- 大货
- 0770# 21S单面平纹(食毛)
-
-
-
-
- 1# 薄荷绿x1
-
-
-
-
-
-
- 1# 薄荷绿x1
-
-
-
-
-
-
-
-
- 大货
- 0770# 21S单面平纹(食毛)
-
-
-
-
- 1# 薄荷绿x1
-
-
-
-
-
-
- 1# 薄荷绿x1
-
-
-
-
-
-
-
-
-
- 退货原因
-
- 请选择
-
-
-
-
- 货物状况
-
- 请选择
-
-
-
-
- 退货说明
-
- 请选择
-
-
-
-
- 拍照上传
-
-
- 上传照片
-
-
-
-
-
- 其他说明
-
-
- 0/100
-
-
-
-
-
-
-
- )
-})
\ No newline at end of file
diff --git a/src/pages/order/components/applyRefund/index.module.scss b/src/pages/order/components/applyRefund/index.module.scss
new file mode 100644
index 0000000..ec17129
--- /dev/null
+++ b/src/pages/order/components/applyRefund/index.module.scss
@@ -0,0 +1,66 @@
+
+.apply_after_sales_con{
+ padding: 20px;
+ .returnSaleInput_item{
+ display: flex;
+ align-items: center;
+ padding-bottom: 50px;
+ flex-wrap: wrap;
+ .title{
+ font-size: $font_size;
+ font-weight: 700;
+ width: 119px;
+ }
+ .select{
+ flex:1;
+ height: 60px;
+ border: 2px solid #e6e6e6;
+ border-radius: 10px;
+ margin-left: 20px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 0 20px;
+ font-size: 26px;
+ color: $color_font_two;
+ .miconfont{
+ font-size: 30px;
+ }
+ }
+ .upload_image{
+ flex:1;
+ }
+ }
+ .btns_con{
+ width: 100%;
+ bottom:0;
+ box-sizing: border-box;
+ margin-top: 50px;
+ .btns_two{
+ display: flex;
+ height: 82px;
+ // border: 1PX solid #007aff;
+ font-size: $font_size_big;
+ border-radius: 40px;
+ margin-bottom: 20px;
+ .rest_btn{
+ flex:1;
+ border: 1PX solid #007aff;
+ border-radius: 40px 0 0 40px;
+ text-align: center;
+ line-height: 82px;
+ color: $color_main;
+ background-color: #fff;
+
+ }
+ .verify_btn{
+ flex:1;
+ border-radius: 0 40px 40px 0;
+ background: #007aff;
+ text-align: center;
+ line-height: 82px;
+ color: #fff;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/pages/order/components/applyRefund/index.tsx b/src/pages/order/components/applyRefund/index.tsx
new file mode 100644
index 0000000..481d03f
--- /dev/null
+++ b/src/pages/order/components/applyRefund/index.tsx
@@ -0,0 +1,57 @@
+import Popup from "@/components/popup";
+import TextareaEnhance from "@/components/textareaEnhance";
+import { ScrollView, Text, View } from "@tarojs/components";
+import { memo, useCallback, useState } from "react";
+import ReasonPopup from "../reasonPopup";
+import styles from './index.module.scss'
+import classnames from "classnames";
+
+type Param = {
+ show?: true|false,
+ onClose?: () => void
+}
+export default memo(({show, onClose}:Param) => {
+
+
+ const getOtherReason = useCallback(() => {
+
+ }, [])
+
+ const onSubmit = (val) => {
+
+ }
+
+ //显示说明
+ const [showReason, setShowReason] = useState(false)
+ const closeReason = useCallback(() => {
+ setShowReason(false)
+ }, [])
+
+ const onShowReason = () => {
+ setShowReason(true)
+ }
+
+ return (
+ <>
+
+
+
+ 退款说明
+ onShowReason()}>
+ 请选择
+
+
+
+
+
+
+ onSubmit(1)}>取消
+ onSubmit(2)}>确认
+
+
+
+
+
+ >
+ )
+})
\ No newline at end of file
diff --git a/src/pages/order/components/kindList/index copy.tsx b/src/pages/order/components/kindList/index copy.tsx
new file mode 100644
index 0000000..8247927
--- /dev/null
+++ b/src/pages/order/components/kindList/index copy.tsx
@@ -0,0 +1,190 @@
+import { ORDER_STATUS } from "@/common/enum"
+import { formatHashTag, formatPriceDiv } from "@/common/fotmat"
+import LabAndImg from "@/components/LabAndImg"
+import { View } from "@tarojs/components"
+import { memo, useCallback, useMemo } from "react"
+import EstimatedAmount from "../estimatedAmount"
+import styles from './index.module.scss'
+
+type OrderParam = {
+ estimate_amount: number, //预估金额
+ list: any[],
+ sale_mode: number,
+ sale_mode_name: string,
+ unit: string,
+ total_colors: number,
+ total_fabrics: number,
+ total_number: number,
+ status: number, //订单状态
+ total_sale_price: number, //销售金额
+ total_should_collect_money: number, //应收金额
+ total_weight_error_discount: number, //空差优惠
+ the_previous_status: number, //取消订单时的订单状态
+ actual_amount: number //实付金额
+}
+
+type Param = {
+ order: OrderParam,
+ comfirm?: boolean //是否是确认订单页面使用
+}
+
+export default memo(({order, comfirm = false}:Param) => {
+ //对应数量
+ const formatCount = useCallback((item) => {
+ return order?.sale_mode == 0? item.roll : Number(item.length / 100)
+ }, [order])
+ //对应单价
+ const standardPrice = useCallback(price => {
+ return formatPriceDiv(price).toLocaleString() + '/' + (order?.sale_mode == 1?'m':'kg')
+ }, [order])
+
+ //数量格式
+ const numText = useMemo(() => {
+ if(order) {
+ let total_number = order?.sale_mode == 0?order?.total_number:(order?.total_number/100)
+ return `${order?.total_fabrics}种面料,${order?.total_colors}种颜色,共${total_number}${order?.unit}`
+ }
+ }, [order])
+
+ const {
+ SaleOrderStatusBooking, // 待接单
+ SaleOrderStatusArranging, // 配布中
+ SaleOrderStatusArranged, // 已配布
+ SaleOrderStatusWaitingPayment, // 待付款
+ SaleOrderStatusWaitingDelivery, // 待发货
+ SaleOrderStatusWaitingReceipt, // 待收货
+ SaleOrderStatusAlreadyReceipt, // 已收货
+ SaleOrderStatusComplete, // 已完成
+ SaleOrderStatusRefund, // 已退款
+ SaleOrderStatusCancel, // 已取消
+ SaleorderstatusWaitingPrePayment // 预付款
+ } = ORDER_STATUS
+
+ //金额列表枚举
+ const priceList = [
+ {
+ id:1,
+ value:[SaleorderstatusWaitingPrePayment.value, SaleOrderStatusBooking.value, SaleOrderStatusArranging.value, ],
+ label:'预估金额',
+ field: 'estimate_amount'
+ },
+ {
+ id:2,
+ value:[SaleorderstatusWaitingPrePayment.value, SaleOrderStatusArranged.value, SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value],
+ label:'合计金额',
+ field: 'total_sale_price'
+ },
+ {
+ id:3,
+ value:[SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value],
+ label:'空差优惠',
+ field: 'total_weight_error_discount'
+ },
+ {
+ id:4,
+ value:[ SaleOrderStatusWaitingPayment.value],
+ label:'应付金额',
+ field: 'total_should_collect_money'
+ },
+ {
+ id:5,
+ value:[SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value],
+ label:'实付金额',
+ field: 'actual_amount'
+ }
+ ]
+
+ //是否显示价格
+ const showPrice = useCallback((priceInfo, status) => {
+ return priceInfo.value.includes(status)
+ }, [order])
+
+ //金额展示大货
+ const priceConDom = useMemo(() => {
+ if(!order) return
+ if(comfirm == true) {
+ //确认订单时
+ return
+ }
+
+ if(order?.status == SaleOrderStatusCancel.value) {
+ //订单状态为取消订单时
+ return (
+ <>
+ {
+ priceList.map(item => {
+ return <>{showPrice(item, order?.the_previous_status)&&}>
+ })
+ }
+ >
+ )
+ } else {
+ //其他订单状态
+ return (
+ <>
+ {
+ priceList.map(item => {
+ return <>{showPrice(item, order?.status)&&}>
+ })
+ }
+ >
+ )
+ }
+ }, [order])
+
+ //金额展示剪板
+ const cutPriceConDom = useMemo(() => {
+ if(!order) return
+ return
+ }, [order])
+
+ const showPriceAll = useMemo(() => {
+ if(order?.sale_mode == 1) {
+ return cutPriceConDom //剪板
+ } else {
+ return priceConDom //大货
+ }
+ }, [order])
+
+
+ return (
+ <>
+ {numText}
+
+ {
+ order?.list?.map(item => {
+ return
+
+ {order.sale_mode_name}
+ {formatHashTag(item.code, item.name)}
+ 共{item?.product_colors.length}种
+
+
+ {item?.product_colors?.map(colorItem => {
+ return
+
+
+
+
+
+ {colorItem.code + ' ' + colorItem.name}
+ ¥{standardPrice(colorItem.sale_price)}
+
+
+ ×{formatCount(colorItem)}{order.unit}
+ ¥{formatPriceDiv(colorItem.estimate_amount).toLocaleString()}
+
+
+
+ })}
+
+
+ })
+ }
+
+ {showPriceAll}
+
+
+ >
+ )
+})
\ No newline at end of file
diff --git a/src/pages/order/components/kindList/index.module.scss b/src/pages/order/components/kindList/index.module.scss
index be8f53f..2c4b957 100644
--- a/src/pages/order/components/kindList/index.module.scss
+++ b/src/pages/order/components/kindList/index.module.scss
@@ -40,14 +40,13 @@
.order_list_item {
display: flex;
- &:nth-child(2) {
+ &:nth-child(n + 2) {
margin-top: 30px;
}
.order_list_item_img{
width: 126px;
height: 126px;
border-radius: 20px;
- background-color: red;
}
.order_list_item_con{
display: flex;
@@ -67,9 +66,14 @@
font-size: $font_size;
margin-bottom: 15px;
}
- .order_list_item_price{
+ .order_list_item_price, .order_list_item_price_dg{
font-size: 26px;
color: $color_font_three;
+ display: flex;
+ align-items: center;
+ Text{
+ padding-left: 13px;
+ }
}
}
.order_list_item_count{
diff --git a/src/pages/order/components/kindList/index.tsx b/src/pages/order/components/kindList/index.tsx
index e93be35..185a3b9 100644
--- a/src/pages/order/components/kindList/index.tsx
+++ b/src/pages/order/components/kindList/index.tsx
@@ -1,6 +1,7 @@
import { ORDER_STATUS } from "@/common/enum"
-import { formatHashTag, formatPriceDiv } from "@/common/fotmat"
-import { View } from "@tarojs/components"
+import { formatHashTag, formatPriceDiv, formatWeightDiv } from "@/common/fotmat"
+import LabAndImg from "@/components/LabAndImg"
+import { Text, View } from "@tarojs/components"
import { memo, useCallback, useMemo } from "react"
import EstimatedAmount from "../estimatedAmount"
import styles from './index.module.scss'
@@ -15,7 +16,7 @@ type OrderParam = {
total_fabrics: number,
total_number: number,
status: number, //订单状态
- total_sale_price: number, //销售金额
+ total_sale_price: number, //合计金额
total_should_collect_money: number, //应收金额
total_weight_error_discount: number, //空差优惠
the_previous_status: number, //取消订单时的订单状态
@@ -23,7 +24,7 @@ type OrderParam = {
}
type Param = {
- order: OrderParam,
+ order: OrderParam,
comfirm?: boolean //是否是确认订单页面使用
}
@@ -39,8 +40,10 @@ export default memo(({order, comfirm = false}:Param) => {
//数量格式
const numText = useMemo(() => {
- if(order)
- return `${order?.total_fabrics}种面料,${order?.total_colors}种颜色,共${order?.total_number}${order?.unit}`
+ if(order) {
+ let total_number = order?.sale_mode == 0?order?.total_number:(order?.total_number/100)
+ return `${order?.total_fabrics}种面料,${order?.total_colors}种颜色,共${total_number}${order?.unit}`
+ }
}, [order])
const {
@@ -54,19 +57,21 @@ export default memo(({order, comfirm = false}:Param) => {
SaleOrderStatusComplete, // 已完成
SaleOrderStatusRefund, // 已退款
SaleOrderStatusCancel, // 已取消
+ SaleorderstatusWaitingPrePayment, // 预付款
+ SaleOrderStatusTaking //提货
} = ORDER_STATUS
//金额列表枚举
const priceList = [
{
id:1,
- value:[SaleOrderStatusBooking.value, SaleOrderStatusArranging.value],
+ value:[SaleorderstatusWaitingPrePayment.value, SaleOrderStatusBooking.value, SaleOrderStatusArranging.value],
label:'预估金额',
field: 'estimate_amount'
},
{
id:2,
- value:[SaleOrderStatusArranged.value, SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value],
+ value:[SaleOrderStatusTaking.value, SaleOrderStatusArranged.value, SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value],
label:'合计金额',
field: 'total_sale_price'
},
@@ -84,45 +89,60 @@ export default memo(({order, comfirm = false}:Param) => {
},
{
id:5,
- value:[SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value],
+ value:[SaleOrderStatusTaking.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value],
label:'实付金额',
field: 'actual_amount'
}
]
- //是否显示价格
- const showPrice = useCallback((priceInfo, status) => {
- return priceInfo.value.includes(status)
- }, [order])
+ //订单流程是否显示价格
+ const showPrice = (item) => {
+ if (item.id == 2) {
+ //合计金额 (剪板特殊请情况)
+ return (item.value.includes(order.status)|| order.sale_mode == 1)
+ } else if (item.id == 3) {
+ //空差优惠只有大货才有
+ return (item.value.includes(order.status) && order.sale_mode == 1 )
+ } else {
+ return (item.value.includes(order.status) && order.sale_mode != 1 )
+ }
+
+ }
+ //订单流程金额展示
const priceConDom = useMemo(() => {
if(!order) return
- //确认订单
- if(comfirm == true) {
- return
- }
- //订单为取消订单状态
- if(order?.status == SaleOrderStatusCancel.value) {
- return (
- <>
- {
- priceList.map(item => {
- return <>{showPrice(item, order?.the_previous_status)&&}>
- })
- }
- >
- )
- } else {
- return (
- <>
- {
- priceList.map(item => {
- return <>{showPrice(item, order?.status)&&}>
- })
- }
- >
- )
- }
+ return (
+ <>
+ {
+ priceList.map(item => {
+ return <>{showPrice(item)&&}>
+ })
+ }
+ >
+ )
+ }, [order])
+
+ //确认订单金额展示
+ const comfirmPriceConDom = useMemo(() => {
+ if(!order) return
+ let item = order.sale_mode == 1?priceList[1]:priceList[0]
+ return
+ }, [order])
+
+ //金额展示
+ const showPriceConDom = useMemo(() => {
+ return comfirm?comfirmPriceConDom:priceConDom
+ }, [order])
+
+
+ //散剪大约重量
+ const aboutWeight = useCallback((weight) => {
+ if(order.sale_mode == 2 ) {
+ let showWeight = [SaleorderstatusWaitingPrePayment.value, SaleOrderStatusBooking.value, SaleOrderStatusArranging.value].includes(order.status)
+ return showWeight?; ≈{formatWeightDiv(weight)}kg:<>>
+ }
+ return <>>
}, [order])
return (
@@ -140,11 +160,17 @@ export default memo(({order, comfirm = false}:Param) => {
{item?.product_colors?.map(colorItem => {
return
-
+
+
+
{colorItem.code + ' ' + colorItem.name}
- ¥{standardPrice(colorItem.sale_price)}
+
+ ¥{standardPrice(colorItem.sale_price)}
+ {aboutWeight(colorItem.estimate_weight)}
+
+
×{formatCount(colorItem)}{order.unit}
@@ -158,7 +184,7 @@ export default memo(({order, comfirm = false}:Param) => {
})
}
- {priceConDom}
+ {showPriceConDom}
>
diff --git a/src/pages/order/components/orderState/index.module.scss b/src/pages/order/components/orderState/index.module.scss
index 90dbcbb..0cc33d6 100644
--- a/src/pages/order/components/orderState/index.module.scss
+++ b/src/pages/order/components/orderState/index.module.scss
@@ -15,7 +15,6 @@
}
.order_status_item{
position: relative;
- padding-left: 50px;
&:nth-last-child(n+2) {
padding-bottom: 30px;
}
@@ -44,6 +43,7 @@
.order_status_content{
display: flex;
align-items: center;
+ padding: 0 30px;
.order_status_title{
color: $color_font_two;
font-size: $font_size;
@@ -75,6 +75,24 @@
.order_status_des_select{
color: $color_font_one;
}
+ .pay_time{
+ height: 56px;
+ background: #f6f6f6;
+ border-radius: 20px;
+ color: #3C3C3C;
+ font-size: 24px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-weight: 700;
+ margin-top: 20px;
+ text{
+ font-size: 28px;
+ color: $color_main;
+ padding: 0 10px;
+
+ }
+ }
}
.more{
width: 100%;
@@ -102,4 +120,20 @@
top: -10px;
right: -10px;
}
+ .refresh{
+ position: absolute;
+ top: 23px;
+ right: 20px;
+ display: flex;
+ color: #707070;
+ display: flex;
+ align-items: center;
+
+ .mconfont{
+ font-size: 30px;
+ }
+ .refresh_text{
+ font-size: 23px;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/pages/order/components/orderState/index.tsx b/src/pages/order/components/orderState/index.tsx
index 18ac43d..b08861d 100644
--- a/src/pages/order/components/orderState/index.tsx
+++ b/src/pages/order/components/orderState/index.tsx
@@ -1,42 +1,59 @@
import { Image, Text, View } from "@tarojs/components"
-import { memo, useMemo, useState } from "react"
+import { memo, useEffect, useMemo, useRef, useState } from "react"
import styles from './index.module.scss'
import classnames from "classnames";
import { formatDateTime, formatImgUrl } from "@/common/fotmat";
-import { PAYMENT_METHOD, PAYMENT_METHOD_PARAM } from "@/common/enum";
+import { ORDER_STATUS, PAYMENT_METHOD, PAYMENT_METHOD_PARAM } from "@/common/enum";
+import * as dayjs from 'dayjs'
-
-
-type Param = {
- list: {
- status: string,
- time: string,
- tag: string,
- desc: string
- }[],
- payment_method: 0|PAYMENT_METHOD_PARAM,
-
+type List = {
+ status: string,
+ time: string,
+ tag: string,
+ desc: string,
+ expire_time: string
}
-//支付方式枚举
-const {
- PaymentMethodAccountPeriod,
- PaymentMethodCashOnDelivery,
-} = PAYMENT_METHOD
+type Param = {
+ onRefresh?: () => void,
+ orderInfo?: {
+ logistics_details:List[], //订单状态列表
+ payment_method: 0|PAYMENT_METHOD_PARAM, //支付方式
+ status: number, //订单状态
+ }
+}
-export default memo(({list = [], payment_method = 0}:Param) => {
+
+
+export default memo(({orderInfo = {logistics_details: [],payment_method: 0, status: 0}, onRefresh}:Param) => {
const [showMore, setShowMore] = useState(false)
const changeMore = () => {
setShowMore(() => !showMore)
}
const dataList = useMemo(() => {
- return list.reverse()
- }, [list])
+ return orderInfo.logistics_details?orderInfo?.logistics_details.reverse():[]
+ }, [orderInfo.logistics_details])
+ //订单状态枚举
+ const {SaleorderstatusWaitingPrePayment} = ORDER_STATUS
+
+ //支付方式枚举
+ const {
+ PaymentMethodAccountPeriod,
+ PaymentMethodCashOnDelivery,
+ } = PAYMENT_METHOD
+
+ //获取预付款最后时间
+ const endTime = useMemo(() => {
+ if(orderInfo.status == SaleorderstatusWaitingPrePayment.value && orderInfo.logistics_details.length > 0) {
+ return orderInfo.logistics_details[0].expire_time
+ }
+ return ''
+ }, [orderInfo])
return (
<>
- {(dataList.length > 0)&&
+ {(dataList?.length > 0)&&
{dataList.map((item, index) =>
{(dataList.length > 1)&&}
@@ -44,9 +61,9 @@ export default memo(({list = [], payment_method = 0}:Param) => {
{item.status}
{formatDateTime(item.time)}
- {/* {item.tag} */}
{item.desc}
+ {(orderInfo.status == SaleorderstatusWaitingPrePayment.value)&&}
)}
{(dataList.length > 2) && changeMore()}>
@@ -54,10 +71,62 @@ export default memo(({list = [], payment_method = 0}:Param) => {
}
- {(payment_method == PaymentMethodCashOnDelivery.value)&&}
- {(payment_method == PaymentMethodAccountPeriod.value)&&}
+ {(orderInfo.payment_method == PaymentMethodCashOnDelivery.value)&&}
+ {(orderInfo.payment_method == PaymentMethodAccountPeriod.value)&&}
+ {(orderInfo.status == SaleorderstatusWaitingPrePayment.value)&&
+
+ 刷新
+ }
}
>
)
-})
\ No newline at end of file
+})
+
+//倒计时
+const CountDown = ({endTime = '', onFinish}:{endTime:string, onFinish?:() => void}) => {
+ const [showTime, setShowTime] = useState('')
+ const timeObj:any = useRef()
+ useEffect(() => {
+ if(endTime) {
+ clearInterval(timeObj.current)
+ timeObj.current = setInterval(() => {
+ count_down()
+ }, 1000)
+ }
+ return () => {
+ clearInterval(timeObj.current)
+ }
+ }, [endTime])
+ const count_down = () => {
+ var startData = dayjs();
+ var endDate = dayjs(endTime);
+ if(startData >= endDate) {
+ clearInterval(timeObj.current)
+ onFinish?.()
+ setShowTime(() => '00:00:00')
+ return false
+ }
+ var _dd = endDate.diff(startData,'day');
+ var _hh = endDate.diff(startData,'hour');
+ var _mm = endDate.diff(startData,'minute');
+ var _ss = endDate.diff(startData,'second');
+ // 转换
+ var hh = _hh - (_dd*24);
+ var mm = _mm - (_hh*60);
+ var ss = _ss - (_mm*60);
+ // 格式化
+ var DD = ('00'+_dd).slice(-2);
+ var HH = ('00'+hh).slice(-2);
+ var MM = ('00'+mm).slice(-2);
+ var SS = ('00'+ss).slice(-2);
+ setShowTime(() => ` ${HH}:${MM}:${SS}`)
+ }
+ return (
+ <>
+
+ 剩{showTime||'--:--:--'}支付关闭,订单自动取消
+
+ >
+ )
+}
\ No newline at end of file
diff --git a/src/pages/order/components/payment/index.module.scss b/src/pages/order/components/payment/index.module.scss
index 340b0ed..0f16e80 100644
--- a/src/pages/order/components/payment/index.module.scss
+++ b/src/pages/order/components/payment/index.module.scss
@@ -35,9 +35,9 @@ $top:190px;
border-radius: 10px;
padding-bottom: 100px;
position: relative;
- background: radial-gradient(circle 20px at left $top, transparent 20px, #fff 20px + 3px) left 0px/60% no-repeat ,
- radial-gradient(circle 20px at right $top, transparent 20px, #fff 20px + 3px) right 0px/60% no-repeat;
- filter: drop-shadow(2px 2px 6px rgba(0, 0, 0, .16));
+ // background: radial-gradient(circle 20px at left $top, transparent 20px, #fff 20px + 3px) left 0px/60% no-repeat ,
+ // radial-gradient(circle 20px at right $top, transparent 20px, #fff 20px + 3px) right 0px/60% no-repeat;
+ // filter: drop-shadow(2px 2px 6px rgba(0, 0, 0, .16));
position: relative;
&::before{
content: '';
diff --git a/src/pages/order/components/payment/index.tsx b/src/pages/order/components/payment/index.tsx
index 86d4306..303b62f 100644
--- a/src/pages/order/components/payment/index.tsx
+++ b/src/pages/order/components/payment/index.tsx
@@ -8,26 +8,34 @@ import MCheckbox from "@/components/checkbox";
import Popup from "@/components/popup";
import OfflinePay from "../offlinePay";
import ScanPay from "../scanPay";
-import { GetOrderPayApi, SubmitOrderPayApi } from "@/api/orderPay";
+import { GetOrderPayApi, SubmitOrderPayApi, GetPrepayOrderPayApi, SubmitPrepayOrderPayApi } from "@/api/orderPay";
import { formatPriceDiv } from "@/common/fotmat";
import {alert} from "@/common/common"
-import { PAYMENT_METHOD, PAYMENT_METHOD_PARAM } from "@/common/enum";
+import { ORDER_STATUS, PAYMENT_METHOD, PAYMENT_METHOD_PARAM } from "@/common/enum";
type Param = {
show?: true|false,
onClose?: () => void,
onSubmitSuccess?: () => void, //支付成功
- orderInfo?: OrderInfo
+ orderInfo?: OrderInfo,
}
type OrderInfo = {
- orderId: number, //应付单id
- payment_method: 0|PAYMENT_METHOD_PARAM //支付方式
+ should_collect_order_id?: number, //应付单id
+ pre_collect_order_id?: number, //预付单id
+ status?: number, //订单状态
+ payment_method?: 0|PAYMENT_METHOD_PARAM //支付方式
+ sale_mode?: number //订单类型 0:大货 1剪板 2散剪
}
type PayStatus = 1|2|3|4|5|null //1:预存款, 2:账期,3:线下汇款, 4:扫码支付, 5:货到付款
export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param) => {
+ //支付方式枚举
+ const {PaymentMethodPreDeposit, PaymentMethodAccountPeriod, PaymentMethodCashOnDelivery} = PAYMENT_METHOD
+ //订单状态枚举
+ const {SaleorderstatusWaitingPrePayment} = ORDER_STATUS
+
//提交参数
const [submitData, setSubmitData] = useState<{id:number, payment_method: PayStatus}>({
id:0,
@@ -38,7 +46,7 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param)
const [offlinePayShow, setofflinePayShow] = useState(false)
const onShowOfflinePay = () => {
setofflinePayShow(true)
- onClose?.()
+ // onClose?.()
}
//扫码支付
@@ -51,13 +59,22 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param)
//获取支付方式数据
const [payInfo, setPayInfo] = useState()
const {fetchData: orderFetchData} = GetOrderPayApi()
+ const {fetchData: prepayOrderFetchData} = GetPrepayOrderPayApi()
const getOrderPay = async () => {
- let {data} = await orderFetchData({id: orderInfo?.orderId})
- setPayInfo(() => data)
+ if(orderInfo&&orderInfo.should_collect_order_id) {
+ //有应收单id时用应收单获取数据
+ let {data} = await orderFetchData({id: orderInfo?.should_collect_order_id})
+ setPayInfo(() => data)
+ } else {
+ //用预付单id获取支付信息
+ let {data} = await prepayOrderFetchData({id: orderInfo?.pre_collect_order_id})
+ setPayInfo(() => data)
+ }
}
useEffect(() => {
- if(show&&orderInfo?.orderId) {
- setSubmitData((val) => ({...val, id:orderInfo.orderId}))
+ if(show&&orderInfo&&(orderInfo?.should_collect_order_id||orderInfo?.pre_collect_order_id)) {
+ let id = orderInfo.should_collect_order_id||orderInfo.pre_collect_order_id
+ setSubmitData((val) => ({...val, id:id as number}))
getOrderPay()
}
}, [show, orderInfo])
@@ -73,14 +90,20 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param)
}
//提交支付
- const {fetchData: submitFetchData} = SubmitOrderPayApi()
+ const {fetchData: submitFetchData} = SubmitOrderPayApi() //应收单提交
+ const {fetchData: submitPrepayOrderFetchData} = SubmitPrepayOrderPayApi() //预付单提交
const submitPay = async () => {
if(submitData.payment_method === null) {
alert.error('请选择支付方式')
return false
}
alert.loading('正在支付')
- let res = await submitFetchData(submitData)
+ let res:any = null
+ if(orderInfo?.should_collect_order_id) {
+ res = await submitFetchData(submitData)
+ } else {
+ res = await submitPrepayOrderFetchData(submitData)
+ }
if(res.success) {
alert.success('支付成功')
onSubmitSuccess?.()
@@ -97,6 +120,20 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param)
)
}, [payInfo])
+ //是否显示七天账期
+ const show_account_payment = useMemo(() => {
+ console.log('orderInfo?.status::',orderInfo)
+ //剪板合散剪不显示
+ if(orderInfo?.sale_mode != 0) return false
+ //支付方式是账期支付,不显示
+ if(orderInfo?.payment_method == PaymentMethodAccountPeriod.value) return false
+ //支付方式是货到付款,不显示
+ if(orderInfo?.payment_method == PaymentMethodCashOnDelivery.value) return false
+ //订单状态是预付款,不显示
+ if(orderInfo?.status == SaleorderstatusWaitingPrePayment.value) return false
+ return true
+ }, [orderInfo])
+
//账期
const account_peyment = useMemo(() => {
const price = payInfo?.should_collect_money - payInfo?.amount_paid
@@ -105,8 +142,9 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param)
)
}, [payInfo])
- //支付方式枚举
- const {PaymentMethodPreDeposit, PaymentMethodAccountPeriod} = PAYMENT_METHOD
+ //选择改变
+ const changeSelect = () => {
+ }
return (
@@ -133,7 +171,7 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param)
-
+
@@ -143,13 +181,12 @@ export default memo(({show = false, onClose, orderInfo, onSubmitSuccess}:Param)
advanceSelectData(PaymentMethodPreDeposit.value)} onClose={() => advanceSelectData(null)}/>
- {(orderInfo?.payment_method != PaymentMethodAccountPeriod.value)&&
+ {show_account_payment&&
{payInfo?.account_period}天账期
- {/* 可用额度 ¥{formatPriceDiv(payInfo?.account_period_credit_available_line)} */}
{account_peyment}
periodSelectData(PaymentMethodAccountPeriod.value)} onClose={() => periodSelectData(null)}/>
diff --git a/src/pages/order/components/reasonPopup/index.module.scss b/src/pages/order/components/reasonPopup/index.module.scss
new file mode 100644
index 0000000..eba26cd
--- /dev/null
+++ b/src/pages/order/components/reasonPopup/index.module.scss
@@ -0,0 +1,27 @@
+.reason_return_con{
+ height: 50vh;
+ .reason_title{
+ padding: 10px 20px 0 20px;
+ height: 60px;
+ border-bottom: 1PX solid #F3F3F3;
+ box-sizing: border-box;
+ Text{
+ font-size: 26px;
+ border-bottom: 3px solid #000;
+ padding: 10px;
+ font-weight: 400;
+ }
+
+ }
+ .reason_scroll{
+ height: calc(100% - 70px);
+ .reason_list{
+ font-size: 26px;
+ padding: 30px 20px 0 20px;
+ color: #707070;
+ .reason_item{
+ margin-bottom: 36px;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/pages/order/components/reasonPopup/index.tsx b/src/pages/order/components/reasonPopup/index.tsx
new file mode 100644
index 0000000..1230787
--- /dev/null
+++ b/src/pages/order/components/reasonPopup/index.tsx
@@ -0,0 +1,37 @@
+import Popup from "@/components/popup";
+import { ScrollView, Text, View } from "@tarojs/components";
+import { memo, useMemo } from "react";
+import styles from './index.module.scss'
+
+//原因选择
+type ReasonInfoParam = {
+ show?: boolean,
+ onClose?: () => void,
+}
+export default memo(({show = false, onClose}: ReasonInfoParam) => {
+ return (
+
+
+ 退款说明
+
+
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+ 完好无损带原标签
+
+
+
+
+ )
+})
\ No newline at end of file
diff --git a/src/pages/order/components/remark/index.tsx b/src/pages/order/components/remark/index.tsx
index 14d981b..11d870f 100644
--- a/src/pages/order/components/remark/index.tsx
+++ b/src/pages/order/components/remark/index.tsx
@@ -1,20 +1,25 @@
import Popup from "@/components/popup"
import { Textarea, View } from "@tarojs/components"
-import { useCallback, useState } from "react"
+import { useCallback, useEffect, useState } from "react"
import styles from './index.module.scss'
type Param = {
onBlur?: (val:any) => void
onSave?: (val: string) => void
+ defaultValue?: string
}
-export default ({onBlur, onSave}:Param) => {
+export default ({onBlur, onSave, defaultValue = ''}:Param) => {
const [descData, setDescData] = useState({
number: 0,
value: '',
count: 200
})
- const getDesc = useCallback((e) => {
- let value = e.detail.value
+
+ useEffect(() => {
+ getDesc(defaultValue)
+ }, [defaultValue])
+
+ const getDesc = useCallback((value) => {
let res = value
if(value.length > descData.count) {
res = value.slice(0, descData.count)
@@ -29,7 +34,7 @@ export default ({onBlur, onSave}:Param) => {
编辑备注
-
+
{descData.number}/{descData.count}
setSave()}>保存
diff --git a/src/pages/order/components/submitOrderBtn/index.module.scss b/src/pages/order/components/submitOrderBtn/index.module.scss
index c5ac9ed..7330951 100644
--- a/src/pages/order/components/submitOrderBtn/index.module.scss
+++ b/src/pages/order/components/submitOrderBtn/index.module.scss
@@ -1,11 +1,9 @@
.order_price{
display: flex;
align-items: center;
- justify-content: space-between;
+ // justify-content: space-between;
width: 100%;
- &:nth-last-child(n+2) {
- margin-bottom: 30px;
- }
+
.order_price_text{
font-size: $font_size_medium;
// margin-right: 10px;
@@ -41,7 +39,7 @@
}
}
.emphasis{
- font-weight: 700;
+ // font-weight: 700;
}
.order_price_num{
color: $color_main;
@@ -51,7 +49,7 @@
font-size: $font_size_min;
}
&:nth-child(2) {
- font-size: 26px;
+ font-size: 44px;
}
&:nth-child(3) {
font-size: $font_size_medium;
@@ -61,7 +59,7 @@
.emphasis_num{
text{
&:nth-child(2) {
- font-size: $font_size_big;
+ font-size: 44px;
}
}
}
diff --git a/src/pages/order/components/submitOrderBtn/index.tsx b/src/pages/order/components/submitOrderBtn/index.tsx
index db9b432..5e083c3 100644
--- a/src/pages/order/components/submitOrderBtn/index.tsx
+++ b/src/pages/order/components/submitOrderBtn/index.tsx
@@ -4,10 +4,12 @@ import {formatKbPrice} from '@/common/common'
import classnames from "classnames";
import styles from './index.module.scss'
type Param = {
- style?: Object,
- number?: number
+ style?: Object,
+ number?: number, //数量
+ priceTitle: string //描述
+
}
-export default memo(({style, number = 0}:Param) => {
+export default memo(({style, number = 0, priceTitle = ''}:Param) => {
const priceDom = useCallback(() => {
let res = number.toFixed(2).split('.')
let int_num = parseInt(res[0]) + ''
@@ -24,11 +26,7 @@ export default memo(({style, number = 0}:Param) => {
<>
- 应付金额
-
-
- {/* 123123123121212312312312312 */}
-
+ {priceTitle}:
{priceDom()}
diff --git a/src/pages/order/cutOrder/index.config.ts b/src/pages/order/cutOrder/index.config.ts
new file mode 100644
index 0000000..030cb10
--- /dev/null
+++ b/src/pages/order/cutOrder/index.config.ts
@@ -0,0 +1,6 @@
+export default {
+ navigationBarTitleText: '订单详情',
+ enablePullDownRefresh: true,
+ backgroundTextStyle: 'dark',
+ enableShareAppMessage: true,
+}
diff --git a/src/pages/order/cutOrder/index.module.scss b/src/pages/order/cutOrder/index.module.scss
new file mode 100644
index 0000000..87ea5e5
--- /dev/null
+++ b/src/pages/order/cutOrder/index.module.scss
@@ -0,0 +1,133 @@
+.order_main{
+ min-height: 100%;
+ background-color:$color_bg_one;
+ padding: 20px;
+ padding-bottom: 190px;
+ box-sizing: border-box;
+
+ .order_title{
+ display: flex;
+ align-items: center;
+ padding: 20px 30px;
+ box-sizing: border-box;
+ background-color: #fff;
+ height: 116px;
+ border-radius: 20px;
+ margin-top: 20px;
+ text{
+ flex:1;
+ font-size: $font_size;
+ font-weight: 700;
+ }
+ .order_status{
+ background-color: #F0F0F0;
+ width: 148px;
+ height: 55px;
+ color: $color_font_three;
+ text-align: center;
+ line-height: 55px;
+ font-size: $font_size_medium;
+ border-radius: 30px;
+ &:nth-last-child(1) {
+ margin-left: 20px;
+ }
+ }
+ }
+ .order_desc{
+ display: flex;
+ align-items: center;
+ background-color: #fff;
+ padding: 20px;
+ min-height: 116px;
+ border-radius: 20px;
+ margin-top: 20px;
+ box-sizing: border-box;
+ .order_desc_con{
+ width: 150px;
+ font-size: $font_size;
+ font-weight: 700;
+ }
+ .order_desc_text, .order_desc_text_hint{
+ font-size: $font_size_medium;
+ color: $color_font_two;
+ margin-right: 10px;
+ flex:1;
+ word-break:break-all;
+ }
+ .order_desc_text_hint{
+ text-align: right;
+ }
+ .miconfont{
+ font-size: 20px;
+ color: $color_font_two;
+ }
+ }
+ .submit_order{
+ display: flex;
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ justify-content: flex-end;
+ width: 100%;
+ align-items: center;
+ background-color: #fff;
+ box-shadow: 6px 0px 12px 0px rgba(0,0,0,0.16);
+ padding: 20px 20px;
+ box-sizing: border-box;
+ padding-bottom: constant(safe-area-inset-bottom);
+ padding-bottom: env(safe-area-inset-bottom);
+ .order_btn {
+ width: 152px;
+ height: 72px;
+ border: 2px solid #dddddd;
+ border-radius: 46px;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ color: $color_font_three;
+ &:nth-child(n+2) {
+ margin-left: 34px;
+ }
+ }
+ .order_btn_select{
+ color: $color_main;
+ border: 2px solid $color_main;
+ }
+ .order_number_desc{
+ font-size: $font_size_medium;
+ color: $color_font_two;
+ }
+ }
+ .order_info{
+ background-color: #fff;
+ margin-top: 20px;
+ border-radius: 20px;
+ padding: 20px;
+ .order_info_title{
+ font-size: $font_size;
+ font-weight: 700;
+ margin-bottom: 20px;
+
+ }
+ .order_num{
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ .order_num_btn{
+ font-size: $font_size_medium;
+ padding: 5px 10px;
+ border: 2px solid #007cf7;
+ border-radius: 10px;
+ color: $color_main;
+ }
+ }
+ text{
+ font-size: $font_size;
+ }
+
+ }
+ .weight_memo_con{
+ margin-bottom: 20px;
+ }
+
+}
\ No newline at end of file
diff --git a/src/pages/order/cutOrder/index.tsx b/src/pages/order/cutOrder/index.tsx
new file mode 100644
index 0000000..c1b1bee
--- /dev/null
+++ b/src/pages/order/cutOrder/index.tsx
@@ -0,0 +1,228 @@
+import {
+ GetSaleOrderDetailApi,
+ EditSaleOrderRemarkApi,
+ CancelOrderApi
+} from "@/api/order";
+import { GetOrderPayApi } from "@/api/orderPay";
+import { alert, goLink } from "@/common/common";
+import { ORDER_STATUS } from "@/common/enum";
+import { formatDateTime, formatPriceDiv } from "@/common/fotmat";
+import OrderBtns from "@/components/orderBtns";
+import Popup from "@/components/popup";
+import SearchInput from "@/components/searchInput";
+import { Text, Textarea, View } from "@tarojs/components"
+import Taro, { useDidShow, usePullDownRefresh, useRouter } from "@tarojs/taro";
+import classnames from "classnames";
+import { useCallback, useEffect, useMemo, useRef, useState } from "react";
+import AddressInfoDetail from "../components/addressInfoDetail";
+import KindList from "../components/kindList";
+import OrderState from "../components/orderState";
+import Payment from "../components/payment";
+import Remark from "../components/remark";
+import styles from '../index.module.scss'
+
+ export default () => {
+ const [showDesc, setShowDesc] = useState(false)
+ const router = useRouter()
+ const orderId = useRef(Number(router.params.id))
+ useDidShow(() => {
+ getSaleOrderPreView()
+ })
+
+ //获取订单详情
+ const [orderDetail, setOrderDetail] = useState() //获取到的原始数据
+ const {fetchData: getOrderFetchData} = GetSaleOrderDetailApi()
+ const getSaleOrderPreView = async () => {
+ if(orderId.current) {
+ let res = await getOrderFetchData({id: orderId.current})
+ setOrderDetail(res.data)
+ setOrderRemark(res.data.remark)
+ }
+ Taro.stopPullDownRefresh()
+ }
+
+ //监听获取到的数据
+ useEffect(() => {
+ if(orderDetail)
+ formatData()
+ }, [orderDetail])
+
+ //格式化数据格式
+ const [formatDetailOrder, setFormatDetailOrder] = useState() //格式化后的数据
+ const formatData = () => {
+ setFormatDetailOrder({
+ estimate_amount: orderDetail.estimate_amount, //预估金额
+ sale_mode: orderDetail.sale_mode,
+ sale_mode_name: orderDetail.sale_mode_name,
+ total_colors: orderDetail.total_colors, //总颜色数量
+ total_number: orderDetail.total_number, //总数量
+ total_fabrics: orderDetail.total_fabrics, //面料数量
+ unit: orderDetail.sale_mode == 0?'条':'m', //单位
+ list: orderDetail.product_list,
+ status: orderDetail.status, //订单状态
+ total_sale_price: orderDetail.total_sale_price, //销售金额
+ total_should_collect_money: orderDetail.total_should_collect_money, //应收金额
+ total_weight_error_discount: orderDetail.total_weight_error_discount, //空差优惠
+ actual_amount: orderDetail.actual_amount, //实付金额
+ the_previous_status: orderDetail.the_previous_status, //取消订单时的订单状态
+
+ })
+ }
+ const formatPreViewOrderMemo = useMemo(() => {
+ return formatDetailOrder
+ }, [formatDetailOrder])
+
+ //复制功能
+ const clipboardData = () => {
+ Taro.setClipboardData({
+ data: orderDetail?.order_no||'',
+ success: function (res) {
+ Taro.showToast({
+ icon: 'none',
+ title: '复制成功'
+ })
+ }
+ })
+ }
+
+ //格式化初始地址
+ const defaultAddress = useMemo(() => {
+ return {
+ province_name: orderDetail?.province_name,
+ city_name: orderDetail?.city_name,
+ district_name: orderDetail?.district_name,
+ address_detail: orderDetail?.address_detail,
+ // id: address.id,
+ name: orderDetail?.target_user_name,
+ phone: orderDetail?.target_user_phone
+ }
+
+ }, [orderDetail])
+
+ //订单备注
+ const {fetchData: remarkFetchData} = EditSaleOrderRemarkApi()
+ const [orderRemark, setOrderRemark] = useState('')
+ const getRemark = useCallback(async (e) => {
+ setOrderRemark(() => e)
+ let res = await remarkFetchData({remark:e, id: orderId.current})
+ if(res.success) {
+ getSaleOrderPreView()
+ alert.success('提交成功')
+ } else {
+ alert.error(res.msg)
+ }
+ setShowDesc(() => false)
+ }, [])
+
+ //支付所需数据
+ const payOrderInfo = useMemo(() => {
+ if(orderDetail)
+ return {orderId: orderDetail.should_collect_order_id, payment_method:orderDetail.payment_method }
+ }, [orderDetail])
+
+ //去付款
+ const [payMentShow, setPayMentShow] = useState(false)
+ const toPay = () => {
+ setPayMentShow(true)
+ }
+
+ //打开地址修改
+ const addressRef = useRef(null)
+
+ //修改收货方式
+ const getShipmentMode = useCallback(() => {
+ getSaleOrderPreView()
+ }, [orderDetail])
+
+ //修改地址
+ const getAddress = useCallback(() => {
+ getSaleOrderPreView()
+ }, [orderDetail])
+
+ //获取底部按钮点击, 获取按钮状态
+ const orderStateClick = useCallback((val) => {
+ if(val == 1 || val == 6) {
+ //取消订单
+ getSaleOrderPreView()
+ }else if(val == 2) {
+ //待付款
+ toPay()
+ }
+ }, [orderDetail])
+
+ //页面下拉刷新
+ usePullDownRefresh(() => {
+ getSaleOrderPreView()
+ })
+
+ //支付成功
+ const onPaySuccess = useCallback(() => {
+ getSaleOrderPreView()
+ closePayShow()
+ }, [orderDetail])
+
+ //关闭支付弹窗
+ const closePayShow = useCallback(() => {
+ setPayMentShow(() => false)
+ }, [orderDetail])
+
+ //按钮所需数据
+ const orderInfo = useMemo(() => {
+ return {
+ status: orderDetail?.status, //订单状态
+ orderId: orderDetail?.id,
+ settle_mode: orderDetail?.settle_mode,
+ actual_amount: orderDetail?.actual_amount, //实付金额
+ wait_pay_amount: orderDetail?.wait_pay_amount, //待付金额
+ }
+ }, [orderDetail])
+
+ //订单状态枚举
+ const {SaleOrderStatusCancel} = ORDER_STATUS
+
+
+
+ return (
+
+ {/*
+
+ */}
+
+
+
+
+
+
+ 订单信息
+
+
+ {orderDetail?.order_no}
+ clipboardData()}>复制
+
+
+
+ {formatDateTime(orderDetail?.create_time)}
+
+
+ {formatDateTime(orderDetail?.create_time)}
+
+
+ setShowDesc(true)}>
+ 订单备注
+ {
+ orderRemark&&{orderDetail?.remark}||
+ 填写备注
+ }
+
+
+ {(orderDetail?.status != SaleOrderStatusCancel.value)&&
+
+ }
+ setShowDesc(false)} >
+ getRemark(e)}/>
+
+
+
+
+ )
+ }
diff --git a/src/pages/order/index.module.scss b/src/pages/order/index.module.scss
index a032fbe..55096de 100644
--- a/src/pages/order/index.module.scss
+++ b/src/pages/order/index.module.scss
@@ -62,21 +62,15 @@
color: $color_font_two;
}
}
- .submit_order{
- display: flex;
+ .submit_order_con{
position: fixed;
bottom: 0;
left: 0;
- justify-content: flex-end;
width: 100%;
- height: 175px;
- align-items: center;
background-color: #fff;
box-shadow: 6px 0px 12px 0px rgba(0,0,0,0.16);
padding: 20px 20px;
box-sizing: border-box;
- padding-bottom: constant(safe-area-inset-bottom);
- padding-bottom: env(safe-area-inset-bottom);
.order_btn {
width: 152px;
height: 72px;
diff --git a/src/pages/order/index.tsx b/src/pages/order/index.tsx
index 3c0304f..fae2191 100644
--- a/src/pages/order/index.tsx
+++ b/src/pages/order/index.tsx
@@ -4,19 +4,20 @@ import {
CancelOrderApi
} from "@/api/order";
import { GetOrderPayApi } from "@/api/orderPay";
+import { AddShoppingCartApi } from "@/api/shopCart";
import { alert, goLink } from "@/common/common";
import { ORDER_STATUS } from "@/common/enum";
-import { formatDateTime, formatPriceDiv } from "@/common/fotmat";
+import { formatDateTime, formatImgUrl, formatPriceDiv } from "@/common/fotmat";
import OrderBtns from "@/components/orderBtns";
import Popup from "@/components/popup";
import SearchInput from "@/components/searchInput";
+import ShopCart from "@/components/shopCart";
import { Text, Textarea, View } from "@tarojs/components"
import Taro, { useDidShow, usePullDownRefresh, useRouter } from "@tarojs/taro";
import classnames from "classnames";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
-import order from "../orderList/components/order";
import AddressInfoDetail from "./components/addressInfoDetail";
-import ApplyAfterSales from "./components/applyAfterSales";
+import ApplyRefund from "./components/applyRefund";
import KindList from "./components/kindList";
import OrderState from "./components/orderState";
import Payment from "./components/payment";
@@ -40,7 +41,8 @@ import styles from './index.module.scss'
setOrderDetail(res.data)
setOrderRemark(res.data.remark)
}
- Taro.stopPullDownRefresh()
+ Taro.stopPullDownRefresh()
+ Taro.hideToast()
}
//监听获取到的数据
@@ -87,16 +89,19 @@ import styles from './index.module.scss'
})
}
- //格式化初始地址
+ //初始地址数据
const defaultAddress = useMemo(() => {
return {
province_name: orderDetail?.province_name,
city_name: orderDetail?.city_name,
district_name: orderDetail?.district_name,
address_detail: orderDetail?.address_detail,
- // id: address.id,
name: orderDetail?.target_user_name,
- phone: orderDetail?.target_user_phone
+ phone: orderDetail?.target_user_phone,
+ shipment_mode: orderDetail?.shipment_mode,
+ id: orderDetail?.id,
+ sale_mode: orderDetail?.sale_mode,
+ status: orderDetail?.status
}
}, [orderDetail])
@@ -116,18 +121,17 @@ import styles from './index.module.scss'
setShowDesc(() => false)
}, [])
- //支付所需数据
- const payOrderInfo = useMemo(() => {
- if(orderDetail)
- return {orderId: orderDetail.should_collect_order_id, payment_method:orderDetail.payment_method }
- }, [orderDetail])
-
//去付款
const [payMentShow, setPayMentShow] = useState(false)
const toPay = () => {
setPayMentShow(true)
}
+ //地址组件所需数据
+ const addressInfoDetailData = useMemo(() => {
+ return {orderId:orderDetail?.id, shipment_mode:orderDetail?.shipment_mode, status: orderDetail?.status}
+ }, [orderDetail])
+
//打开地址修改
const addressRef = useRef(null)
@@ -143,15 +147,20 @@ import styles from './index.module.scss'
//获取底部按钮点击, 获取按钮状态
const orderStateClick = useCallback((val) => {
- console.log('val::', val)
- if(val == 1) {
+ console.log('123456789',val)
+ if(val == 1 || val == 6) {
//取消订单
getSaleOrderPreView()
- }
- if(val == 2) {
+ }else if(val == 2) {
//待付款
toPay()
+ } else if(val == 3) {
+ setRefundShow(true)
+ } else if(val == 7) {
+ //再购
+ addShopCart()
}
+
}, [orderDetail])
//页面下拉刷新
@@ -178,22 +187,73 @@ import styles from './index.module.scss'
settle_mode: orderDetail?.settle_mode,
actual_amount: orderDetail?.actual_amount, //实付金额
wait_pay_amount: orderDetail?.wait_pay_amount, //待付金额
+ sale_mode: orderDetail?.sale_mode, //订单类型
}
}, [orderDetail])
//订单状态枚举
const {SaleOrderStatusCancel} = ORDER_STATUS
+ //刷新页面
+ const refresh = useCallback(() => {
+ alert.loading('刷新中')
+ getSaleOrderPreView()
+ }, [orderDetail])
+
+ //退款申请
+ const [refundShow, setRefundShow] = useState(false)
+ const applyRefundClose = useCallback(() => {
+ setRefundShow(false)
+ }, [])
+
+ //查看物流
+ const getLogistics = useCallback(() => {
+ const list = orderDetail?.delivery_appendix_url.map(item => {
+ return formatImgUrl(item)
+ })
+ Taro.previewImage({
+ current: list[0], // 当前显示
+ urls: list // 需要预览的图片http链接列表
+ })
+ }, [orderDetail])
+ //添加购物车
+ const [showCart, setShowCart] = useState(false)
+ const {fetchData:addFetchData} = AddShoppingCartApi()
+ const addShopCart = async () => {
+ let color_list:{product_color_id: number, roll?: number, length?: number}[] = []
+ orderDetail?.product_list.map(pitem => {
+ pitem?.product_colors.map(citem => {
+ if(orderDetail?.sale_mode == 0) {
+ return color_list.push({product_color_id: citem.id, roll: citem.roll})
+ } else {
+ return color_list.push({product_color_id: citem.id, length: citem.length})
+ }
+ })
+ })
+ const state = await addFetchData({
+ sale_mode: orderDetail?.sale_mode,
+ color_list
+ })
+ if(state.success) {
+ Taro.showToast({
+ title:'已加入购物车'
+ })
+ setShowCart(true)
+ } else {
+ Taro.showToast({
+ icon:'none',
+ title: state.msg
+ })
+ }
+
+ }
return (
- {/*
-
- */}
-
-
-
+
+
+
@@ -219,14 +279,16 @@ import styles from './index.module.scss'
}
- {(orderDetail?.status != SaleOrderStatusCancel.value)&&
+ {(orderDetail?.status != SaleOrderStatusCancel.value)&&
+
}
- setShowDesc(false)} >
- getRemark(e)}/>
+ setShowDesc(false)}>
+ getRemark(e)} defaultValue={orderDetail?.remark}/>
-
- {/* */}
+
+
+ setShowCart(false)}/>
)
diff --git a/src/pages/orderList/components/order/index.module.scss b/src/pages/orderList/components/order/index.module.scss
index 85e1123..63a4e0a 100644
--- a/src/pages/orderList/components/order/index.module.scss
+++ b/src/pages/orderList/components/order/index.module.scss
@@ -42,6 +42,9 @@
border-radius: 0px 20px 0px 20px;
}
}
+ .product_con{
+ margin-bottom: 20px;
+ }
.product_title{
display: flex;
align-items: center;
diff --git a/src/pages/orderList/components/order/index.tsx b/src/pages/orderList/components/order/index.tsx
index 7bff925..466bc5e 100644
--- a/src/pages/orderList/components/order/index.tsx
+++ b/src/pages/orderList/components/order/index.tsx
@@ -1,5 +1,6 @@
import { goLink } from "@/common/common";
import { formatHashTag, formatImgUrl, formatPriceDiv } from "@/common/fotmat";
+import LabAndImg from "@/components/LabAndImg";
import OrderBtns from "@/components/orderBtns";
import Payment from "@/pages/order/components/payment";
import { useSelector } from "@/reducers/hooks";
@@ -21,6 +22,9 @@ type Param = {
total_number: number,
status: 0,
id: number,
+ lab: any,
+ rgb: any,
+ texture_url: string,
payment_method: number, //支付方式
actual_amount: number, //实付金额
wait_pay_amount: number //待付金额
@@ -51,6 +55,7 @@ export default memo(({value, onClickBtn}: Param) => {
orderId: value?.id,
actual_amount: value?.actual_amount, //实付金额
wait_pay_amount: value?.wait_pay_amount, //待付金额
+ sale_mode: value?.sale_mode, //订单类型
}
}, [value])
@@ -75,7 +80,7 @@ export default memo(({value, onClickBtn}: Param) => {
-
+
{value?.product_list[0].product_colors[0].code}
@@ -99,7 +104,6 @@ export default memo(({value, onClickBtn}: Param) => {
{`${value?.total_fabrics}种面料,${value?.total_colors}种颜色,共${value?.total_number}条`}
-
)
})
diff --git a/src/pages/orderList/index.tsx b/src/pages/orderList/index.tsx
index dee8c57..982f9d2 100644
--- a/src/pages/orderList/index.tsx
+++ b/src/pages/orderList/index.tsx
@@ -12,6 +12,8 @@ import { dataLoadingStatus, getFilterData } from "@/common/util"
import OrderStatusList from "./components/orderStatusList"
import Payment from "../order/components/payment"
import { ORDER_STATUS } from "@/common/enum"
+import { AddShoppingCartApi } from "@/api/shopCart"
+import ShopCart from "@/components/shopCart"
export default () => {
const {checkLogin} = useLogin()
@@ -96,10 +98,21 @@ export default () => {
//监听点击的按钮
const clickOrderBtn = useCallback(({status, orderInfo}) => {
- if(status == 2) {
+ if(status == 1 || status == 6) {
+ getOrderList()
+ } else if(status == 2) {
//去支付
- setPayOrderInfo({orderId:orderInfo.should_collect_order_id, payment_method:orderInfo.payment_method})
+ console.log('orderInfo::',orderInfo)
+ setPayOrderInfo({
+ should_collect_order_id: orderInfo.should_collect_order_id,//应付单id
+ pre_collect_order_id: orderInfo.pre_collect_order_id, //预付单id
+ status: orderInfo.status, //订单状态
+ payment_method: orderInfo.payment_method //支付方式
+ })
toPay()
+ } else if (status == 7) {
+ //购买
+ addShopCart(orderInfo)
}
}, [orderData])
@@ -120,6 +133,38 @@ export default () => {
closePayShow()
}, [])
+ //添加购物车
+ const [showCart, setShowCart] = useState(false)
+ const {fetchData:addFetchData} = AddShoppingCartApi()
+ const addShopCart = async (item) => {
+ let color_list:{product_color_id: number, roll?: number, length?: number}[] = []
+ item?.product_list.map(pitem => {
+ pitem?.product_colors.map(citem => {
+ if(item?.sale_mode == 0) {
+ return color_list.push({product_color_id: citem.id, roll: citem.roll})
+ } else {
+ return color_list.push({product_color_id: citem.id, length: citem.length})
+ }
+ })
+ })
+ const state = await addFetchData({
+ sale_mode: item?.sale_mode,
+ color_list
+ })
+ if(state.success) {
+ Taro.showToast({
+ title:'已加入购物车'
+ })
+ setShowCart(true)
+ } else {
+ Taro.showToast({
+ icon:'none',
+ title: state.msg
+ })
+ }
+
+ }
+
return (
@@ -128,12 +173,13 @@ export default () => {
-
+
{orderData?.list.map(item => {
return
})}
+ setShowCart(false)}/>
)
diff --git a/src/pages/salesAfter/components/addressInfoDetail/index.module.scss b/src/pages/salesAfter/components/addressInfoDetail/index.module.scss
index 68e6171..82159da 100644
--- a/src/pages/salesAfter/components/addressInfoDetail/index.module.scss
+++ b/src/pages/salesAfter/components/addressInfoDetail/index.module.scss
@@ -1,12 +1,31 @@
+.address_main{
+ margin-top: 20px;
+}
+
+.address_title_tag{
+ font-size: 24px;
+ color: #EE7500;
+ background: rgba(255,230,206,0.36);
+ border-radius: 20px 20px 0px 0px;
+ height: 56px;
+ display: flex;
+ align-items: center;
+ position: relative;
+ z-index: 999;
+ .miconfont {
+ font-size: 30px;
+ padding: 0 20px;
+ }
+}
+
.order_address{
height: 178px;
background: #ffffff;
- border-radius: 20px;
+ border-radius: 0 0 20px 20px;
display: flex;
align-items: center;
padding: 30px;
box-sizing: border-box;
- margin-top: 20px;
position: relative;
.order_address_icon{
font-size: 50px;
@@ -26,87 +45,46 @@
.order_address_text_title{
font-size: $font_size_medium;
margin-top: 10px;
- @include common_ellipsis;
display: flex;
align-items: center;
justify-content: space-between;
.moreIconfont{
font-size: 20px;
}
+ .address_text{
+ word-break:break-all;
+ font-size: 28px;
+ font-weight: 700;
+ }
}
.order_address_text_name{
-
+ color: #707070;
align-items: center;
+ display: flex;
+ margin-top: 20px;
text{
&:nth-child(1) {
- color: #000;
- font-weight: 700;
- font-size: $color_font_one;
+ font-size: $font_size_medium;
margin-right: 40px;
}
&:nth-child(2) {
- color: $color_font_one;
+ flex:1;
font-size: $font_size_medium;
}
}
}
}
.updateBtn{
- width:200px;
- font-size: $font_size_min;
- background-color: #F0F0F0;
- height: 64px;
- border-radius: 24px;
+ width:152px;
+ font-size: 28px;
+ height: 60px;
color: $color_font_two;
- position: absolute;
- bottom: 10px;
- right: 10px;
z-index: 999;
- .updateBtn_list{
- position: absolute;
- display: flex;
- z-index: 5;
- width: 100%;
- .updateBtn_item_select{
- color: #fff;
- }
- }
- .updateBtn_item{
- flex:1;
- text-align: center;
- line-height: 64px;
- }
- .updateBtn_select{
- color: #fff;
- background-color: $color_main;
- border-radius: 24px;
- position: absolute;
- width: 100px;
- height: 61px;
- z-index: 1;
- transition: all 0.3s ease-in-out;
- }
+ border: 2px solid #dddddd;
+ border-radius: 36px;
+ text-align: center;
+ line-height: 60px;
}
- .order_address_text_no{
- flex: 1;
- font-size: $font_size;
- font-weight: 700;
- margin-left: 30px;
- }
- .order_address_more_icon{
- color: $color_font_three;
- font-size: $font_size;
- }
-}
-.order_address_list {
- height: 900px;
- .order_address_title{
- font-size: $font_size;
- font-weight: 700;
- width: 100%;
- text-align: center;
- padding: 20px 0 30px 0;
- }
}
\ No newline at end of file
diff --git a/src/pages/salesAfter/components/addressInfoDetail/index.tsx b/src/pages/salesAfter/components/addressInfoDetail/index.tsx
index 7290ae6..db4d5f3 100644
--- a/src/pages/salesAfter/components/addressInfoDetail/index.tsx
+++ b/src/pages/salesAfter/components/addressInfoDetail/index.tsx
@@ -1,122 +1,69 @@
-import { EditSaleOrderAddressApi, EditSaleOrderShipmentModeApi } from "@/api/order";
-import { alert } from "@/common/common";
-import { debounce } from "@/common/util";
-import AddressList from "@/components/AddressList";
-import Popup from "@/components/popup";
+import { AFTER_ORDER_STATUS } from "@/common/enum";
import { Text, View } from "@tarojs/components"
import classnames from "classnames";
-import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useState } from "react";
+import {memo, useMemo} from "react";
import styles from './index.module.scss'
-export type AddressInfoParam = {
- province_name: string,
- city_name: string,
- district_name: string,
- address_detail: string,
- id?: number,
- name: string,
- phone: string,
-}
-type Param = {
- onSelect?: (val:any) => void, //选择
- defaultValue?: AddressInfoParam|null, //默认值
- disabled?: false|true, //true禁用后只用于展示
- shipment_mode?: 1|2, //1自提 2物流
- onChangeShipmentMode?: (val: number) => void, //返回收货方式
- orderId?: number //订单id
+type Param = {
+ return_address?:string,
+ return_phone?: string,
+ onLogistics?: (val: number) => void,
+ stage?: number
}
+export default memo(({return_address = '', return_phone = '', onLogistics, stage}:Param) => {
+ const {
+ ReturnStageApplying,
+ ReturnStageWaitCheck,
+ ReturnStageChecked,
+ ReturnStageReturned,
+ ReturnStageCancel,
+ ReturnStageQualityCheckPendingRefund,
+ ReturnStageServiceOrderPendingRefund,
+ ReturnStageRejected
+ } = AFTER_ORDER_STATUS
-export default memo(forwardRef(({onSelect, onChangeShipmentMode, defaultValue = null, orderId = 0, shipment_mode = 1}: Param, ref) => {
- const [showAddressList, setShowAddressList] = useState(false)
+ //是否显示地址
+ const showAddress = useMemo(() => {
+ return stage != ReturnStageApplying.value
+ }, [stage])
- useEffect(() => {
- setUserInfo(() => defaultValue)
- }, [defaultValue])
+ //上传物流
+ const upLogistics = useMemo(() => {
+ return stage == ReturnStageWaitCheck.value
+ }, [stage])
- const [userInfo, setUserInfo] = useState()
+ //查看物流
+ const showLogistics = useMemo(() => {
+ return (stage == ReturnStageChecked.value || stage == ReturnStageQualityCheckPendingRefund.value)
+ }, [stage])
- //地址格式
- const formatAddress = useMemo(() => {
- if(userInfo)
- return userInfo.province_name + userInfo.city_name + userInfo.district_name + userInfo.address_detail
- }, [userInfo])
-
- const changeShow = () => {
- if(receivingStatus == 2)
- setShowAddressList(() => true)
- }
-
- useEffect(() => {
- setReceivingStatus(() => shipment_mode)
- }, [shipment_mode])
-
- //把内部方法提供给外部
- useImperativeHandle(ref, () => ({
- changeShow
- }))
-
- //收货方法,1:自提,2物流
- const [receivingStatus, setReceivingStatus] = useState(1)
- const {fetchData: shipmentModeFetchData} = EditSaleOrderShipmentModeApi()
- const onReceivingStatus = (value, e) => {
- e.stopPropagation()
- changeReceivingStatus(value)
- }
- const changeReceivingStatus = debounce(async (value) => {
- alert.loading('正在修改')
- const res = await shipmentModeFetchData({id: orderId, shipment_mode:value})
- if(res.success) {
- alert.success('收货方式修改成功')
- onChangeShipmentMode?.(value)
- setReceivingStatus(value)
- } else {
- alert.none(res.msg)
- }
- }, 10)
-
- //修改地址
- const {fetchData: addressFetchData} = EditSaleOrderAddressApi()
- const getAddress = async (value) => {
- alert.loading('正在修改')
- const res = await addressFetchData({id: orderId, address_id: value.id})
- if(res.success) {
- alert.success('地址修改成功')
- onSelect?.(value)
- setShowAddressList(() => false)
- setUserInfo(() => value)
- } else {
- alert.none(res.msg)
- }
- }
return (
-
- changeShow()}>
-
-
-
- {formatAddress}
- {(receivingStatus == 2)&&}
-
-
- {userInfo?.name}
- {userInfo?.phone}
+ <>
+ {showAddress&&
+
+
+ 请按以下退货地址寄回货物并提供退货物流信息
+
+
+
+
+
+ {return_address}
+
+
+ 管理员
+ {return_phone}
+ {upLogistics&& onLogistics?.(1)}>
+ 上传物流
+ }
+ {showLogistics&& onLogistics?.(2)}>
+ 查看物流
+ }
+
-
-
- onReceivingStatus(1,e)}>自提
- onReceivingStatus(2,e)}>物流
-
-
-
-
- setShowAddressList(false)}>
-
- 请选择收货地址
-
-
-
-
+ }
+ >
)
-}))
\ No newline at end of file
+})
\ No newline at end of file
diff --git a/src/pages/salesAfter/components/applyRecord/index.module.scss b/src/pages/salesAfter/components/applyRecord/index.module.scss
new file mode 100644
index 0000000..ad1916d
--- /dev/null
+++ b/src/pages/salesAfter/components/applyRecord/index.module.scss
@@ -0,0 +1,146 @@
+.apply_record_scroll{
+ height: 70vh;
+}
+.apply_record_main{
+ margin-top: 20px;
+ padding: 0 30px;
+ .kind_number{
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ text{
+ background-color: #F6F6F6;
+ border-radius: 10px;
+ font-size: $font_size_medium;
+ padding: 5px 0;
+ text-align: center;
+ width: 100%;
+ display: block;
+ color: $color_font_three;
+ }
+ }
+ .orders_list_con{
+
+ background-color: #fff;
+ border-radius: 20px;
+ padding: 20px;
+ .orders_return_title{
+ font-size: 28px;
+ font-weight: 700;
+ padding-bottom: 20px;
+ }
+ .order_list{
+ &:nth-child(n+2) {
+ margin-top: 45px;
+ }
+ .order_list_title{
+ display: flex;
+ align-items: center;
+ .tag{
+ font-size: $font_size_min;
+ background-color: #CDE5FF;
+ padding: 5px 10px;
+ border-radius: 6px;
+ color: $color_main;
+ }
+ .title{
+ font-weight: 700;
+ font-size: $font_size;
+ margin-left: 20px;
+ flex:1;
+ }
+ .num{
+ color: $color_font_two;
+ font-size: $font_size_min;
+ }
+ }
+ }
+ .order_list_scroll{
+ margin-top: 30px;
+
+ .order_list_item {
+ display: flex;
+ &:nth-child(2) {
+ margin-top: 30px;
+ }
+ .order_list_item_img{
+ width: 126px;
+ height: 126px;
+ border-radius: 20px;
+ }
+ .order_list_item_con{
+ display: flex;
+ width: 100%;
+ flex:1;
+ border-bottom: 1px solid #f0f0f0;
+ height: 150px;
+ padding-top: 20px;
+ box-sizing: border-box;
+ }
+ .order_list_item_des{
+ flex:1;
+ box-sizing: border-box;
+ padding-left: 30px;
+ .order_list_item_title{
+ font-weight: 700;
+ font-size: $font_size;
+ margin-bottom: 15px;
+ }
+ .order_list_item_price{
+ font-size: 26px;
+ color: $color_font_three;
+ }
+ }
+ .order_list_item_count{
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: flex-end;
+ .count_num{
+ color: $color_main;
+ font-size: $font_size;
+ margin-bottom: 15px;
+ font-weight: 400;
+ text{
+ font-size: $font_size_min;
+ }
+ }
+ .count_price {
+ font-size: $font_size;
+ font-weight: 700;
+ text{
+ font-size: $font_size_min;
+ }
+ }
+ }
+ }
+ }
+ .order_total{
+ padding-top: 30px;
+ display: flex;
+ justify-content: space-between;
+ text{
+ &:nth-child(1) {
+ font-size: 28px;
+ font-weight: 700;
+ }
+ &:nth-child(2) {
+ font-size: 32px;
+ font-weight: 700;
+ color: #007AFF;
+ }
+ }
+ }
+ .order_estimated_amount{
+ display: flex;
+ align-items: flex-end;
+ flex-direction: column;
+ padding: 30px 0;
+ .order_price_des{
+ font-size: $font_size_medium;
+ color: $color_font_two;
+ }
+ }
+ }
+}
+
diff --git a/src/pages/salesAfter/components/applyRecord/index.tsx b/src/pages/salesAfter/components/applyRecord/index.tsx
new file mode 100644
index 0000000..2d48da6
--- /dev/null
+++ b/src/pages/salesAfter/components/applyRecord/index.tsx
@@ -0,0 +1,124 @@
+import { SaleOrderOrderDetailApi } from "@/api/salesAfterOrder";
+import { formatHashTag, formatPriceDiv } from "@/common/fotmat";
+import LabAndImg from "@/components/LabAndImg";
+import Popup from "@/components/popup";
+import { ScrollView, Text, View } from "@tarojs/components";
+import { memo, useCallback, useEffect, useMemo, useState } from "react";
+import styles from './index.module.scss'
+
+type Param = {
+ show?: true|false,
+ onClose?: () => void,
+ onSubmit?: () => void,
+ id?: number
+}
+export default memo(({show, onClose, onSubmit, id}:Param) => {
+ useEffect(() => {
+ if(show && id) getSaleOrderPreView()
+ }, [show, id])
+
+ //获取订单详情
+ const [orderDetail, setOrderDetail] = useState() //获取到的原始数据
+ const {fetchData: saleOrderOrderDetailData} = SaleOrderOrderDetailApi()
+ const getSaleOrderPreView = async () => {
+ if(id) {
+ let res = await saleOrderOrderDetailData({id: id})
+ setOrderDetail(res.data)
+ }
+ Taro.stopPullDownRefresh()
+ }
+ //格式化数据格式
+ const [formatDetailOrder, setFormatDetailOrder] = useState() //格式化后的数据
+ const formatData = () => {
+ setFormatDetailOrder({
+ estimate_amount: orderDetail.estimate_amount, //预估金额
+ sale_mode: orderDetail.sale_mode,
+ sale_mode_name: orderDetail.sale_mode_name,
+ total_colors: orderDetail.total_colors, //总颜色数量
+ total_number: orderDetail.total_number, //总数量
+ total_fabrics: orderDetail.total_fabrics, //面料数量
+ unit: orderDetail.sale_mode == 0?'条':'m', //单位
+ list: orderDetail.product_list,
+ stage: orderDetail.stage, //订单状态
+ type: orderDetail.type, //退货or退款
+ total_sale_price: orderDetail.total_sale_price, //销售金额
+ total_should_collect_money: orderDetail.total_should_collect_money, //应收金额
+ total_weight_error_discount: orderDetail.total_weight_error_discount, //空差优惠
+ actual_amount: orderDetail.actual_amount, //实付金额
+ the_previous_status: orderDetail.the_previous_status, //取消订单时的订单状态
+ })
+ }
+
+ //监听获取到的数据
+ useEffect(() => {
+ if(orderDetail)
+ formatData()
+ }, [orderDetail])
+
+ //对应数量
+ const formatCount = useCallback((item) => {
+ return formatDetailOrder?.sale_mode == 0? item.roll : Number(item.length / 100)
+ }, [formatDetailOrder])
+ //对应单价
+ const standardPrice = useCallback(price => {
+ return formatPriceDiv(price).toLocaleString() + '/' + (formatDetailOrder?.sale_mode == 1?'m':'kg')
+ }, [formatDetailOrder])
+ //数量格式
+ const numText = useMemo(() => {
+ if(formatDetailOrder)
+ return `${formatDetailOrder?.total_fabrics}种面料,${formatDetailOrder?.total_colors}种颜色,共${formatDetailOrder?.total_number}${formatDetailOrder?.unit}`
+ }, [formatDetailOrder])
+
+ //整理颜色
+ const labAndRgbAndUrl = useCallback((item) => {
+ return {lab:{...item?.lab}, rgb:{...item?.rgb}, texturl_url: item?.texturl_url}
+ }, [])
+
+ return (
+ <>
+
+ {formatDetailOrder&&
+ {numText}
+
+
+ {
+ formatDetailOrder?.list?.map(item => {
+ return
+
+ {formatDetailOrder.sale_mode_name}
+ {formatHashTag(item.code, item.name)}
+ 共{item?.product_colors.length}种
+
+
+ {item?.product_colors?.map(colorItem => {
+ return
+
+
+
+
+
+ {colorItem.code + ' ' + colorItem.name}
+ ¥{standardPrice(colorItem.sale_price)}
+
+
+ ×{formatCount(colorItem)}{formatDetailOrder.unit}
+ ¥{formatPriceDiv(colorItem.estimate_amount).toLocaleString()}
+
+
+
+ })}
+
+
+ })
+ }
+
+ 申请条数
+ ×{orderDetail?.total_number}
+
+
+
+ }
+
+ >
+ )
+})
\ No newline at end of file
diff --git a/src/pages/salesAfter/components/kindList/index.module.scss b/src/pages/salesAfter/components/kindList/index.module.scss
index be8f53f..de1171e 100644
--- a/src/pages/salesAfter/components/kindList/index.module.scss
+++ b/src/pages/salesAfter/components/kindList/index.module.scss
@@ -1,14 +1,17 @@
-.orders_list_title{
- padding: 20px 20px 10px 20px;
- color: $color_font_two;
- font-size: $font_size_medium;
+.kindsList_main{
+ margin-top: 20px;
}
.orders_list_con{
background-color: #fff;
border-radius: 20px;
padding: 20px;
+ .orders_return_title{
+ font-size: 28px;
+ font-weight: 700;
+ padding-bottom: 20px;
+ }
.order_list{
&:nth-child(n+2) {
margin-top: 30px;
@@ -47,7 +50,6 @@
width: 126px;
height: 126px;
border-radius: 20px;
- background-color: red;
}
.order_list_item_con{
display: flex;
@@ -96,6 +98,21 @@
}
}
}
+ .order_total{
+ padding-top: 20px;
+ display: flex;
+ justify-content: space-between;
+ text{
+ &:nth-child(1) {
+ font-size: 28px;
+ font-weight: 700;
+ }
+ &:nth-child(2) {
+ font-size: 24px;
+ font-weight: 700;
+ }
+ }
+ }
.order_estimated_amount{
display: flex;
align-items: flex-end;
diff --git a/src/pages/salesAfter/components/kindList/index.tsx b/src/pages/salesAfter/components/kindList/index.tsx
index e93be35..2cc8d3a 100644
--- a/src/pages/salesAfter/components/kindList/index.tsx
+++ b/src/pages/salesAfter/components/kindList/index.tsx
@@ -1,6 +1,7 @@
import { ORDER_STATUS } from "@/common/enum"
import { formatHashTag, formatPriceDiv } from "@/common/fotmat"
-import { View } from "@tarojs/components"
+import LabAndImg from "@/components/LabAndImg"
+import { Text, View } from "@tarojs/components"
import { memo, useCallback, useMemo } from "react"
import EstimatedAmount from "../estimatedAmount"
import styles from './index.module.scss'
@@ -14,7 +15,8 @@ type OrderParam = {
total_colors: number,
total_fabrics: number,
total_number: number,
- status: number, //订单状态
+ stage: number, //订单状态
+ type: 1|2, //1退货, 2退款
total_sale_price: number, //销售金额
total_should_collect_money: number, //应收金额
total_weight_error_discount: number, //空差优惠
@@ -43,48 +45,60 @@ export default memo(({order, comfirm = false}:Param) => {
return `${order?.total_fabrics}种面料,${order?.total_colors}种颜色,共${order?.total_number}${order?.unit}`
}, [order])
- const {
- SaleOrderStatusBooking, // 待接单
- SaleOrderStatusArranging, // 配布中
- SaleOrderStatusArranged, // 已配布
- SaleOrderStatusWaitingPayment, // 待付款
- SaleOrderStatusWaitingDelivery, // 待发货
- SaleOrderStatusWaitingReceipt, // 待收货
- SaleOrderStatusAlreadyReceipt, // 已收货
- SaleOrderStatusComplete, // 已完成
- SaleOrderStatusRefund, // 已退款
- SaleOrderStatusCancel, // 已取消
- } = ORDER_STATUS
+ // const {
+ // SaleOrderStatusBooking, // 待接单
+ // SaleOrderStatusArranging, // 配布中
+ // SaleOrderStatusArranged, // 已配布
+ // SaleOrderStatusWaitingPayment, // 待付款
+ // SaleOrderStatusWaitingDelivery, // 待发货
+ // SaleOrderStatusWaitingReceipt, // 待收货
+ // SaleOrderStatusAlreadyReceipt, // 已收货
+ // SaleOrderStatusComplete, // 已完成
+ // SaleOrderStatusRefund, // 已退款
+ // SaleOrderStatusCancel, // 已取消
+ // } = ORDER_STATUS
//金额列表枚举
const priceList = [
{
id:1,
- value:[SaleOrderStatusBooking.value, SaleOrderStatusArranging.value],
- label:'预估金额',
+ value:[],
+ label:'退货条数',
field: 'estimate_amount'
},
{
id:2,
- value:[SaleOrderStatusArranged.value, SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value],
- label:'合计金额',
+ value:[],
+ label:'扣款金额',
field: 'total_sale_price'
},
{
id:3,
- value:[SaleOrderStatusWaitingPayment.value, SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value],
- label:'空差优惠',
+ value:[],
+ label:'其他扣款',
field: 'total_weight_error_discount'
},
{
id:4,
- value:[ SaleOrderStatusWaitingPayment.value],
- label:'应付金额',
+ value:[],
+ label:'应退金额',
field: 'total_should_collect_money'
},
{
id:5,
- value:[SaleOrderStatusWaitingDelivery.value, SaleOrderStatusWaitingReceipt.value, SaleOrderStatusAlreadyReceipt.value, SaleOrderStatusComplete.value, SaleOrderStatusRefund.value, SaleOrderStatusCancel.value],
+ value:[],
+ label:'退款金额',
+ field: 'total_should_collect_money'
+ },
+ {
+ id:6,
+ value:[],
+ label:'退款去向',
+ field: 'actual_amount'
+ },
+ {
+ id:7,
+ value:[],
label:'实付金额',
field: 'actual_amount'
}
@@ -97,38 +111,26 @@ export default memo(({order, comfirm = false}:Param) => {
const priceConDom = useMemo(() => {
if(!order) return
- //确认订单
- if(comfirm == true) {
- return
- }
- //订单为取消订单状态
- if(order?.status == SaleOrderStatusCancel.value) {
- return (
- <>
- {
- priceList.map(item => {
- return <>{showPrice(item, order?.the_previous_status)&&}>
- })
- }
- >
- )
- } else {
- return (
- <>
- {
- priceList.map(item => {
- return <>{showPrice(item, order?.status)&&}>
- })
- }
- >
- )
- }
+ return (
+ <>
+ {
+ priceList.map(item => {
+ return <>{showPrice(item, order?.stage)&&}>
+ })
+ }
+ >
+ )
}, [order])
+
+ //整理颜色
+ const labAndRgbAndUrl = useCallback((item) => {
+ return {lab:{...item?.lab}, rgb:{...item?.rgb}, texturl_url: item?.texturl_url}
+ }, [])
return (
- <>
- {numText}
+
+ {order?.type == 1?'退货信息':'退款信息'}
{
order?.list?.map(item => {
return
@@ -140,7 +142,9 @@ export default memo(({order, comfirm = false}:Param) => {
{item?.product_colors?.map(colorItem => {
return
-
+
+
+
{colorItem.code + ' ' + colorItem.name}
@@ -157,10 +161,11 @@ export default memo(({order, comfirm = false}:Param) => {
})
}
+ 合计{numText}
{priceConDom}
- >
+
)
})
\ No newline at end of file
diff --git a/src/pages/salesAfter/components/orderState copy/index.module.scss b/src/pages/salesAfter/components/orderState copy/index.module.scss
deleted file mode 100644
index 78bda44..0000000
--- a/src/pages/salesAfter/components/orderState copy/index.module.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-.order_flow_state{
- display: flex;
- align-items: center;
- padding: 0 30px;
- height: 116px;
- background-color: #fff;
- border-radius: 20px;
- .order_flow_state_text{
- color: $color_main;
- font-size:$font_size;
- font-weight: 700;
- }
- .order_flow_state_desc{
- color: $color_font_three;
- font-size: $font_size_medium;
- margin-left: 50px;
- }
-}
\ No newline at end of file
diff --git a/src/pages/salesAfter/components/orderState copy/index.tsx b/src/pages/salesAfter/components/orderState copy/index.tsx
deleted file mode 100644
index 58fec4d..0000000
--- a/src/pages/salesAfter/components/orderState copy/index.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import { View } from "@tarojs/components"
-import styles from './index.module.scss'
-
-export default ({
- state = '',
- desc = ''
-}) => {
- return (
-
- {state}
- {desc}
-
- )
-}
\ No newline at end of file
diff --git a/src/pages/salesAfter/components/orderState/index.module.scss b/src/pages/salesAfter/components/orderState/index.module.scss
index 90dbcbb..0cc33d6 100644
--- a/src/pages/salesAfter/components/orderState/index.module.scss
+++ b/src/pages/salesAfter/components/orderState/index.module.scss
@@ -15,7 +15,6 @@
}
.order_status_item{
position: relative;
- padding-left: 50px;
&:nth-last-child(n+2) {
padding-bottom: 30px;
}
@@ -44,6 +43,7 @@
.order_status_content{
display: flex;
align-items: center;
+ padding: 0 30px;
.order_status_title{
color: $color_font_two;
font-size: $font_size;
@@ -75,6 +75,24 @@
.order_status_des_select{
color: $color_font_one;
}
+ .pay_time{
+ height: 56px;
+ background: #f6f6f6;
+ border-radius: 20px;
+ color: #3C3C3C;
+ font-size: 24px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-weight: 700;
+ margin-top: 20px;
+ text{
+ font-size: 28px;
+ color: $color_main;
+ padding: 0 10px;
+
+ }
+ }
}
.more{
width: 100%;
@@ -102,4 +120,20 @@
top: -10px;
right: -10px;
}
+ .refresh{
+ position: absolute;
+ top: 23px;
+ right: 20px;
+ display: flex;
+ color: #707070;
+ display: flex;
+ align-items: center;
+
+ .mconfont{
+ font-size: 30px;
+ }
+ .refresh_text{
+ font-size: 23px;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/pages/salesAfter/components/orderState/index.tsx b/src/pages/salesAfter/components/orderState/index.tsx
index 82ed17f..b08861d 100644
--- a/src/pages/salesAfter/components/orderState/index.tsx
+++ b/src/pages/salesAfter/components/orderState/index.tsx
@@ -1,42 +1,59 @@
import { Image, Text, View } from "@tarojs/components"
-import { memo, useMemo, useState } from "react"
+import { memo, useEffect, useMemo, useRef, useState } from "react"
import styles from './index.module.scss'
import classnames from "classnames";
import { formatDateTime, formatImgUrl } from "@/common/fotmat";
-import { PAYMENT_METHOD, PAYMENT_METHOD_PARAM } from "@/common/enum";
+import { ORDER_STATUS, PAYMENT_METHOD, PAYMENT_METHOD_PARAM } from "@/common/enum";
+import * as dayjs from 'dayjs'
-
-
-type Param = {
- list: {
- status: string,
- time: string,
- tag: string,
- desc: string
- }[],
- payment_method: 0|PAYMENT_METHOD_PARAM,
-
+type List = {
+ status: string,
+ time: string,
+ tag: string,
+ desc: string,
+ expire_time: string
}
-//支付方式枚举
-const {
- PaymentMethodAccountPeriod,
- PaymentMethodCashOnDelivery,
-} = PAYMENT_METHOD
+type Param = {
+ onRefresh?: () => void,
+ orderInfo?: {
+ logistics_details:List[], //订单状态列表
+ payment_method: 0|PAYMENT_METHOD_PARAM, //支付方式
+ status: number, //订单状态
+ }
+}
-export default memo(({list = [], payment_method = 0}:Param) => {
+
+
+export default memo(({orderInfo = {logistics_details: [],payment_method: 0, status: 0}, onRefresh}:Param) => {
const [showMore, setShowMore] = useState(false)
const changeMore = () => {
setShowMore(() => !showMore)
}
const dataList = useMemo(() => {
- return list.reverse()
- }, [list])
+ return orderInfo.logistics_details?orderInfo?.logistics_details.reverse():[]
+ }, [orderInfo.logistics_details])
+ //订单状态枚举
+ const {SaleorderstatusWaitingPrePayment} = ORDER_STATUS
+
+ //支付方式枚举
+ const {
+ PaymentMethodAccountPeriod,
+ PaymentMethodCashOnDelivery,
+ } = PAYMENT_METHOD
+
+ //获取预付款最后时间
+ const endTime = useMemo(() => {
+ if(orderInfo.status == SaleorderstatusWaitingPrePayment.value && orderInfo.logistics_details.length > 0) {
+ return orderInfo.logistics_details[0].expire_time
+ }
+ return ''
+ }, [orderInfo])
return (
<>
- {(dataList.length > 0)&&
+ {(dataList?.length > 0)&&
{dataList.map((item, index) =>
{(dataList.length > 1)&&}
@@ -44,9 +61,9 @@ export default memo(({list = [], payment_method = 0}:Param) => {
{item.status}
{formatDateTime(item.time)}
- {/* {item.tag} */}
{item.desc}
+ {(orderInfo.status == SaleorderstatusWaitingPrePayment.value)&&}
)}
{(dataList.length > 2) && changeMore()}>
@@ -54,10 +71,62 @@ export default memo(({list = [], payment_method = 0}:Param) => {
}
- {(payment_method == PaymentMethodAccountPeriod.value)&&}
- {(payment_method == PaymentMethodCashOnDelivery.value)&&}
+ {(orderInfo.payment_method == PaymentMethodCashOnDelivery.value)&&}
+ {(orderInfo.payment_method == PaymentMethodAccountPeriod.value)&&}
+ {(orderInfo.status == SaleorderstatusWaitingPrePayment.value)&&
+
+ 刷新
+ }
}
>
)
-})
\ No newline at end of file
+})
+
+//倒计时
+const CountDown = ({endTime = '', onFinish}:{endTime:string, onFinish?:() => void}) => {
+ const [showTime, setShowTime] = useState('')
+ const timeObj:any = useRef()
+ useEffect(() => {
+ if(endTime) {
+ clearInterval(timeObj.current)
+ timeObj.current = setInterval(() => {
+ count_down()
+ }, 1000)
+ }
+ return () => {
+ clearInterval(timeObj.current)
+ }
+ }, [endTime])
+ const count_down = () => {
+ var startData = dayjs();
+ var endDate = dayjs(endTime);
+ if(startData >= endDate) {
+ clearInterval(timeObj.current)
+ onFinish?.()
+ setShowTime(() => '00:00:00')
+ return false
+ }
+ var _dd = endDate.diff(startData,'day');
+ var _hh = endDate.diff(startData,'hour');
+ var _mm = endDate.diff(startData,'minute');
+ var _ss = endDate.diff(startData,'second');
+ // 转换
+ var hh = _hh - (_dd*24);
+ var mm = _mm - (_hh*60);
+ var ss = _ss - (_mm*60);
+ // 格式化
+ var DD = ('00'+_dd).slice(-2);
+ var HH = ('00'+hh).slice(-2);
+ var MM = ('00'+mm).slice(-2);
+ var SS = ('00'+ss).slice(-2);
+ setShowTime(() => ` ${HH}:${MM}:${SS}`)
+ }
+ return (
+ <>
+
+ 剩{showTime||'--:--:--'}支付关闭,订单自动取消
+
+ >
+ )
+}
\ No newline at end of file
diff --git a/src/pages/salesAfter/components/returnLogistics/index.module.scss b/src/pages/salesAfter/components/returnLogistics/index.module.scss
new file mode 100644
index 0000000..1a22287
--- /dev/null
+++ b/src/pages/salesAfter/components/returnLogistics/index.module.scss
@@ -0,0 +1,35 @@
+
+.logistics_main{
+ padding: 20px 30px;
+ box-sizing: border-box;
+ .logistics_image{
+ display: flex;
+ .title_desc{
+ font-size: 28px;
+ font-weight: 700;
+ padding-top: 50px;
+ box-sizing: border-box;
+ }
+ .upload_image{
+ flex:1;
+ }
+ }
+ .logistics_desc{
+ margin-top: 50px;
+ }
+ .btns_two{
+ display: flex;
+ height: 82px;
+ font-size: $font_size_big;
+ border-radius: 40px;
+ margin-top: 50px;
+ .verify_btn{
+ flex:1;
+ border-radius: 40px;
+ background: #007aff;
+ text-align: center;
+ line-height: 82px;
+ color: #fff;
+ }
+ }
+}
diff --git a/src/pages/salesAfter/components/returnLogistics/index.tsx b/src/pages/salesAfter/components/returnLogistics/index.tsx
new file mode 100644
index 0000000..3d6b19f
--- /dev/null
+++ b/src/pages/salesAfter/components/returnLogistics/index.tsx
@@ -0,0 +1,70 @@
+import Popup from "@/components/popup";
+import { Text, View } from "@tarojs/components";
+import { memo, useCallback, useEffect, useRef, useState } from "react";
+import UploadImage from "@/components/uploadImage"
+import styles from './index.module.scss'
+import TextareaEnhance from "@/components/textareaEnhance";
+import { ReturnApplyLogisticsApi } from "@/api/salesAfterOrder";
+import { alert } from "@/common/common";
+
+type Param = {
+ show?: true|false,
+ onClose?: () => void,
+ onSubmit?: () => void,
+ id?: number //订单id
+}
+export default memo(({show = false, onClose, onSubmit, id = 0}: Param) => {
+ //需要提交的数据
+ const submitData = useRef({
+ accessory_url: [],
+ remark: '',
+ id: 0
+ })
+ useEffect(() => {
+ if(id) submitData.current.id = id
+ }, [id])
+
+ //获取图片列表
+ const getImageList = useCallback((list) => {
+ submitData.current.accessory_url = list
+ }, [])
+
+ //备注
+ const getOtherReason = useCallback((val) => {
+ submitData.current.remark = val
+ }, [])
+
+ //确定
+ const {fetchData} = ReturnApplyLogisticsApi()
+ const onSubmitEven = async () => {
+ if(!id) return alert.error('参数有误')
+ if(submitData.current.accessory_url.length <= 0) return alert.error('请上传附件')
+ let res = await fetchData(submitData.current)
+ if(res.success) {
+ alert.success('上传成功')
+ } else {
+ alert.error('上传失败')
+ }
+ }
+
+ return (
+ <>
+
+
+
+ 上传附件:
+
+
+
+
+
+
+
+
+ onSubmitEven()}>保存
+
+
+
+ >
+ )
+})
\ No newline at end of file
diff --git a/src/pages/salesAfter/index.tsx b/src/pages/salesAfter/index.tsx
index aff512d..2796f66 100644
--- a/src/pages/salesAfter/index.tsx
+++ b/src/pages/salesAfter/index.tsx
@@ -3,18 +3,23 @@ import {
EditSaleOrderRemarkApi,
} from "@/api/order";
import { GetOrderPayApi } from "@/api/orderPay";
+import { SaleOrderOrderDetailApi } from "@/api/salesAfterOrder";
import { alert, goLink } from "@/common/common";
import { ORDER_STATUS } from "@/common/enum";
import { formatDateTime, formatImgUrl, formatPriceDiv } from "@/common/fotmat";
+import AfterOrderBtns from "@/components/afterOrderBtns";
import OrderBtns from "@/components/orderBtns";
import SearchInput from "@/components/searchInput";
import { Image, Text, Textarea, View } from "@tarojs/components"
import Taro, {useDidShow, usePullDownRefresh, useRouter } from "@tarojs/taro";
import classnames from "classnames";
import { useCallback, useEffect, useMemo, useRef, useState, memo } from "react";
+import AddressInfoDetail from "./components/addressInfoDetail";
+import ApplyRecord from "./components/applyRecord";
import ContentBox from "./components/contentBox";
import KindList from "./components/kindList";
import OrderState from "./components/orderState";
+import ReturnLogistics from "./components/returnLogistics";
import styles from './index.module.scss'
export default () => {
@@ -27,10 +32,10 @@ import styles from './index.module.scss'
//获取订单详情
const [orderDetail, setOrderDetail] = useState() //获取到的原始数据
- const {fetchData: getOrderFetchData} = GetSaleOrderDetailApi()
+ const {fetchData: saleOrderOrderDetailData} = SaleOrderOrderDetailApi()
const getSaleOrderPreView = async () => {
if(orderId.current) {
- let res = await getOrderFetchData({id: orderId.current})
+ let res = await saleOrderOrderDetailData({id: orderId.current})
setOrderDetail(res.data)
}
Taro.stopPullDownRefresh()
@@ -54,7 +59,8 @@ import styles from './index.module.scss'
total_fabrics: orderDetail.total_fabrics, //面料数量
unit: orderDetail.sale_mode == 0?'条':'m', //单位
list: orderDetail.product_list,
- status: orderDetail.status, //订单状态
+ stage: orderDetail.stage, //订单状态
+ type: orderDetail.type, //退货or退款
total_sale_price: orderDetail.total_sale_price, //销售金额
total_should_collect_money: orderDetail.total_should_collect_money, //应收金额
total_weight_error_discount: orderDetail.total_weight_error_discount, //空差优惠
@@ -69,13 +75,7 @@ import styles from './index.module.scss'
//获取底部按钮点击, 获取按钮状态
const orderStateClick = useCallback((val) => {
- if(val == 1) {
- //取消订单
- getSaleOrderPreView()
- }
- if(val == 2) {
-
- }
+
}, [orderDetail])
//页面下拉刷新
@@ -87,34 +87,61 @@ import styles from './index.module.scss'
//按钮所需数据
const orderInfo = useMemo(() => {
return {
- status: orderDetail?.status, //订单状态
+ stage: orderDetail?.stage, //售后订单状态
orderId: orderDetail?.id,
settle_mode: orderDetail?.settle_mode,
- actual_amount: orderDetail?.actual_amount, //实付金额
- wait_pay_amount: orderDetail?.wait_pay_amount, //待付金额
+ type: orderDetail?.type, //退货or退款
+ sale_mode: orderDetail?.sale_model, //订单类型
}
}, [orderDetail])
//订单状态枚举
const {SaleOrderStatusCancel} = ORDER_STATUS
+ //物流显示
+ const [logisticsShow, setLogisticsShow] = useState(false)
+ const onShowLogistics = useCallback((val) => {
+ if(val == 1) {
+ setLogisticsShow(true)
+ } else {
+ const list = orderDetail?.fabric_piece_accessory_url.map(item => {
+ return formatImgUrl(item)
+ })
+ Taro.previewImage({
+ current: list[0], // 当前显示
+ urls: list // 需要预览的图片http链接列表
+ })
+ }
+ }, [orderDetail])
+ const onCloseLogistics = useCallback(() => setLogisticsShow(false), [])
+ //物流成功上传
+ const logisticsSuccess = useCallback(() => {
+ getSaleOrderPreView()
+ }, [])
+
+ //显示生气记录
+ const [applyRecord, setApplyRecord] = useState(false)
+
return (
-
+
+
-
+
{(orderDetail?.status != SaleOrderStatusCancel.value)&&
-
+
}
-
+
+
+ setApplyRecord(false)}/>
)
}
- const OrderDes = memo(({val = ''}:{val?:string}) => {
+ const OrderDes = memo(({orderInfo}:{orderInfo?:any}) => {
//复制功能
- const clipboardData = () => {
+ const clipboardData = (val) => {
Taro.setClipboardData({
data: val,
success: function (res) {
@@ -130,58 +157,57 @@ import styles from './index.module.scss'
订单信息
- RA-LY-2204240002
- clipboardData()}>复制
+ {orderInfo?.return_order_no}
+ clipboardData(orderInfo?.return_order_no)}>复制
- XS-LY-2204210002
- clipboardData()}>复制
+ {orderInfo?.order_no}
+ clipboardData(orderInfo?.order_no)}>复制
-
- 其他问题
+
+ {orderInfo?.return_reason_name}
+
+
+ {orderInfo?.return_explain_name}
- 板布疵点太多
+ {orderInfo?.return_remark}
+
+
+ {orderInfo?.goods_status_name}
- 2022-04-24 08:32:39
+ {formatDateTime(orderInfo?.apply_time)}
)
})
- const AfterSalePricture = memo(() => {
+ const AfterSalePricture = memo(({urls = []}:{urls: string[]}) => {
+
+ const showList = useMemo(() => {
+ let res = urls.map(item => {
+ return formatImgUrl(item)
+ })
+ return res
+ }, [urls])
+
//预览图片
const showImage = () => {
Taro.previewImage({
- current: formatImgUrl(''), // 当前显示
- urls: [formatImgUrl('')] // 需要预览的图片http链接列表
+ current: showList[0], // 当前显示
+ urls: showList // 需要预览的图片http链接列表
})
}
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ {urls?.map(item=>
+
+ )}
)
diff --git a/src/pages/salesAfterList/components/order/index.module.scss b/src/pages/salesAfterList/components/order/index.module.scss
index ece7c61..2582b83 100644
--- a/src/pages/salesAfterList/components/order/index.module.scss
+++ b/src/pages/salesAfterList/components/order/index.module.scss
@@ -14,6 +14,8 @@
font-weight: 700;
margin-left: 15px;
font-size: $font_size;
+ width: 100px;
+ @include common_ellipsis();
}
image{
width: 70px;
@@ -26,7 +28,7 @@
font-size: $font_size_medium;
color: $color_font_one;
text-align: right;
- padding-right: 30px;
+ padding-right: 10px;
display: flex;
justify-content: flex-end;
align-items: center;
@@ -69,23 +71,22 @@
.image{
width: 126px;
height: 126px;
- background: #e5ad3a;
- border-radius: 20px 20px 0px 0px;
+ border-radius: 20px ;
position: relative;
image{
width: 100%;
height: 100%;
- border-radius: 20px 20px 0px 0px;
+ border-radius: 20px ;
}
.color_num {
background: rgba(0,0,0, 0.5);
- border-radius: 50px 0px 0px 0px;
+ border-radius: 36px 0px 20px 0px;
font-size: $font_size_min;
color: #fff;
position: absolute;
right:0;
bottom:0;
- padding: 5px 10px;
+ padding: 5px 10px 5px 15px;
box-sizing: border-box;
}
}
@@ -123,7 +124,7 @@
display: flex;
background-color: #F6F6F6;
padding: 20px;
- margin-top: 20px;
+ margin: 20px 0;
align-items: center;
font-size: $font_size_medium;
border-radius: 10px;
diff --git a/src/pages/salesAfterList/components/order/index.tsx b/src/pages/salesAfterList/components/order/index.tsx
index 30cf95b..7dd2ac9 100644
--- a/src/pages/salesAfterList/components/order/index.tsx
+++ b/src/pages/salesAfterList/components/order/index.tsx
@@ -1,6 +1,7 @@
import { goLink } from "@/common/common";
import { formatHashTag, formatImgUrl, formatPriceDiv } from "@/common/fotmat";
-import OrderBtns from "@/components/orderBtns";
+import AfterOrderBtns from "@/components/afterOrderBtns";
+import LabAndImg from "@/components/LabAndImg";
import { useSelector } from "@/reducers/hooks";
import { Image, Text, View } from "@tarojs/components"
import classnames from "classnames";
@@ -11,20 +12,21 @@ import styles from './index.module.scss'
type Param = {
value: {
order_no: string,
+ return_order_no: string,
sale_mode: number,
sale_mode_name: string,
- status_name: string,
+ stage_name: string,
shipment_mode_name: string,
product_list: any[],
total_fabrics: number,
total_colors: number,
total_number: number,
- status: 0,
+ stage: 0,
id: number,
- payment_method: number, //支付方式
- actual_amount: number, //实付金额
- wait_pay_amount: number //待付金额
- should_collect_order_id: number //应付单id
+ lab: {l:number, a:number, b:number},
+ rgb: {r:number, g:number, b:number},
+ texturl_url: string,
+ type: number //1 退货 2退款
},
onClickBtn?: (val:{status:number, orderInfo:Param['value']}) => void
}
@@ -47,13 +49,18 @@ export default memo(({value, onClickBtn}: Param) => {
//按钮所需数据
const orderInfo = useMemo(() => {
return {
- status: value?.status, //订单状态
+ stage: value?.stage, //订单状态
orderId: value?.id,
- actual_amount: value?.actual_amount, //实付金额
- wait_pay_amount: value?.wait_pay_amount, //待付金额
+ sale_mode: value?.sale_mode, //订单类型
+ type: value?.type //退货or退款
}
}, [value])
+ //整理颜色
+ const labAndRgbAndUrl = useMemo(() => {
+ return {lab:{...value?.lab}, rgb:{...value?.rgb}, texturl_url: value?.texturl_url}
+ }, [value])
+
return (
goLink('/pages/salesAfter/index', {id: value?.id})}>
@@ -62,21 +69,21 @@ export default memo(({value, onClickBtn}: Param) => {
{userInfo?.adminUserInfo?.user_name}
- 订单号:{value?.order_no}
+ 售后单号:{value?.return_order_no}
-
+
goLink('/pages/salesAfter/index', {id: value?.id})}>
{value?.sale_mode_name}
{formatHashTag(value?.product_list[0].code, value?.product_list[0].name)}
- {value?.status_name}
+ {value?.stage_name}
-
- {value?.product_list[0].product_colors[0].code}
+
+ {value?.product_list[0].product_colors[0].code}
{value?.product_list[0].product_colors.map((itemColor, index) => {
@@ -98,11 +105,11 @@ export default memo(({value, onClickBtn}: Param) => {
{`${value?.total_fabrics}种面料,${value?.total_colors}种颜色,共${value?.total_number}条`}
- 已申请退款
- 订单号:LY2278204399678
+ {value?.type == 1?'已申请退货':'已申请退款'}
+ 订单号:{value?.order_no}
-
+
)
})
diff --git a/src/pages/salesAfterList/components/orderStatusTag/index.tsx b/src/pages/salesAfterList/components/orderStatusTag/index.tsx
index 5664c7c..1a794dc 100644
--- a/src/pages/salesAfterList/components/orderStatusTag/index.tsx
+++ b/src/pages/salesAfterList/components/orderStatusTag/index.tsx
@@ -5,14 +5,14 @@ import styles from './index.module.scss'
type Param = {
- status?: 0|1|2 //0默认不处理, 1退款,2退货
+ status?: 0|1|2 //0默认不处理, 1退货,2退款
}
export default memo(({status = 0}:Param) => {
return (
<>
- {(status !== 0)&&
+ {(status !== 0)&&
- { status == 1?'退款':'退货'}
+ { status == 1?'退货':'退款'}
}
>
)
diff --git a/src/pages/salesAfterList/components/returnLogistics/index.module.scss b/src/pages/salesAfterList/components/returnLogistics/index.module.scss
new file mode 100644
index 0000000..1a22287
--- /dev/null
+++ b/src/pages/salesAfterList/components/returnLogistics/index.module.scss
@@ -0,0 +1,35 @@
+
+.logistics_main{
+ padding: 20px 30px;
+ box-sizing: border-box;
+ .logistics_image{
+ display: flex;
+ .title_desc{
+ font-size: 28px;
+ font-weight: 700;
+ padding-top: 50px;
+ box-sizing: border-box;
+ }
+ .upload_image{
+ flex:1;
+ }
+ }
+ .logistics_desc{
+ margin-top: 50px;
+ }
+ .btns_two{
+ display: flex;
+ height: 82px;
+ font-size: $font_size_big;
+ border-radius: 40px;
+ margin-top: 50px;
+ .verify_btn{
+ flex:1;
+ border-radius: 40px;
+ background: #007aff;
+ text-align: center;
+ line-height: 82px;
+ color: #fff;
+ }
+ }
+}
diff --git a/src/pages/salesAfterList/components/returnLogistics/index.tsx b/src/pages/salesAfterList/components/returnLogistics/index.tsx
new file mode 100644
index 0000000..3d6b19f
--- /dev/null
+++ b/src/pages/salesAfterList/components/returnLogistics/index.tsx
@@ -0,0 +1,70 @@
+import Popup from "@/components/popup";
+import { Text, View } from "@tarojs/components";
+import { memo, useCallback, useEffect, useRef, useState } from "react";
+import UploadImage from "@/components/uploadImage"
+import styles from './index.module.scss'
+import TextareaEnhance from "@/components/textareaEnhance";
+import { ReturnApplyLogisticsApi } from "@/api/salesAfterOrder";
+import { alert } from "@/common/common";
+
+type Param = {
+ show?: true|false,
+ onClose?: () => void,
+ onSubmit?: () => void,
+ id?: number //订单id
+}
+export default memo(({show = false, onClose, onSubmit, id = 0}: Param) => {
+ //需要提交的数据
+ const submitData = useRef({
+ accessory_url: [],
+ remark: '',
+ id: 0
+ })
+ useEffect(() => {
+ if(id) submitData.current.id = id
+ }, [id])
+
+ //获取图片列表
+ const getImageList = useCallback((list) => {
+ submitData.current.accessory_url = list
+ }, [])
+
+ //备注
+ const getOtherReason = useCallback((val) => {
+ submitData.current.remark = val
+ }, [])
+
+ //确定
+ const {fetchData} = ReturnApplyLogisticsApi()
+ const onSubmitEven = async () => {
+ if(!id) return alert.error('参数有误')
+ if(submitData.current.accessory_url.length <= 0) return alert.error('请上传附件')
+ let res = await fetchData(submitData.current)
+ if(res.success) {
+ alert.success('上传成功')
+ } else {
+ alert.error('上传失败')
+ }
+ }
+
+ return (
+ <>
+
+
+
+ 上传附件:
+
+
+
+
+
+
+
+
+ onSubmitEven()}>保存
+
+
+
+ >
+ )
+})
\ No newline at end of file
diff --git a/src/pages/salesAfterList/index.tsx b/src/pages/salesAfterList/index.tsx
index f5c59c7..9c4f25e 100644
--- a/src/pages/salesAfterList/index.tsx
+++ b/src/pages/salesAfterList/index.tsx
@@ -12,6 +12,8 @@ import { dataLoadingStatus, getFilterData } from "@/common/util"
import OrderStatusList from "./components/orderStatusList"
import Payment from "../order/components/payment"
import { AFTER_ORDER_STATUS } from "@/common/enum"
+import { GetSaleOrderListApi } from "@/api/salesAfterOrder"
+import ReturnLogistics from "./components/returnLogistics"
export default () => {
const {checkLogin} = useLogin()
@@ -40,7 +42,7 @@ export default () => {
}, [])
//获取订单列表
- const {fetchData: listFetchData, state:orderState} = GetOrderListApi()
+ const {fetchData: listFetchData, state:orderState} = GetSaleOrderListApi()
const [orderData, setOrderData] = useState<{list:any[], total:number}>({list:[], total:0})
const getOrderList = async () => {
let res = await listFetchData(getFilterData(searchField))
@@ -96,28 +98,14 @@ export default () => {
//监听点击的按钮
const clickOrderBtn = useCallback(({status, orderInfo}) => {
if(status == 2) {
- //去支付
- setPayOrderInfo({orderId:orderInfo.should_collect_order_id, payment_method:orderInfo.payment_method})
- toPay()
+ //退货物流
+
}
}, [orderData])
-
- //去付款
- const [payOrderInfo, setPayOrderInfo] = useState()
- const [payMentShow, setPayMentShow] = useState(false)
- const toPay = () => {
- setPayMentShow(true)
- }
- //关闭支付弹窗
- const closePayShow = useCallback(() => {
- setPayMentShow(() => false)
- }, [])
- //支付成功
- const onPaySuccess = useCallback(() => {
- getOrderList()
- closePayShow()
- }, [])
+ //物流显示
+ const [logisticsShow, setLogisticsShow] = useState(false)
+ const onCloseLogistics = useCallback(() => setLogisticsShow(false), [])
return (
@@ -132,8 +120,8 @@ export default () => {
return
})}
+
-
)
}
diff --git a/src/pages/searchList/hightSearchList.module.scss b/src/pages/searchList/hightSearchList.module.scss
index c4e305b..a8f6bce 100644
--- a/src/pages/searchList/hightSearchList.module.scss
+++ b/src/pages/searchList/hightSearchList.module.scss
@@ -165,7 +165,6 @@
.product_img{
width: 100%;
height: 224px;
- background: #e5ad3a;
border-radius: 20px 20px 0px 0px;
position: relative;
image{
diff --git a/src/pages/searchList/hightSearchList.tsx b/src/pages/searchList/hightSearchList.tsx
index f7d31db..9496028 100644
--- a/src/pages/searchList/hightSearchList.tsx
+++ b/src/pages/searchList/hightSearchList.tsx
@@ -17,6 +17,7 @@ import LoadingCard from "@/components/loadingCard";
import useLogin from "@/use/useLogin";
import { goLink } from "@/common/common";
import SelectData, {ListProps} from "./components/selectData";
+import LabAndImg from "@/components/LabAndImg";
export default () => {
const {checkLogin} = useLogin()
@@ -95,7 +96,6 @@ export default () => {
const [blueToothColor, setBlueToothColor] = useState('')
useEffect(() => {
if(colorState.deviceLab) {
- console.log('颜色:',colorState.deviceLab)
const rgb = toRgb([colorState.deviceLab.L, colorState.deviceLab.a, colorState.deviceLab.b])
setBlueToothColor(`rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`)
setSearchField({...searchField, l:rgb[0], a:rgb[1], b:rgb[2], size:10})
@@ -103,11 +103,12 @@ export default () => {
}, [colorState.deviceLab])
const goLinkPage = (item) => {
- goLink('/pages/details/index',{id:item.id})
+ goLink('/pages/details/index',{id:item.product_id})
}
//获取筛选条件
const getFiltr = (e) => {
+ setMaterialList(() => ({list:[], total:0}))
const {data} = e
setSearchField({
...searchField,
@@ -123,7 +124,6 @@ export default () => {
//筛选条件格式化
const [selectList , setSelectList] = useState()
const formatSelectList = (val = {data:{}, field:{}}) => {
- console.log('data123::',val.data)
let data:ListProps[] = []
for(let key in val.data) {
if(key !== 'seriesId'&& val.data[key] != '') {
@@ -186,7 +186,7 @@ export default () => {
{materialList.list.map(item => {
return goLinkPage(item)}>
-
+
{(item.product_color_code)}#
diff --git a/src/pages/searchList/search.module.scss b/src/pages/searchList/search.module.scss
index 2e4ede6..f31b47a 100644
--- a/src/pages/searchList/search.module.scss
+++ b/src/pages/searchList/search.module.scss
@@ -1,11 +1,17 @@
.main{
+ position: relative;
.search{
display: flex;
justify-content: space-between;
padding: 20px;
padding-bottom: 50px;
}
-
+ .up_search{
+ color: $color_main;
+ font-size: $font_size;
+ position: absolute;
+ right: 20px;
+ }
.hot {
padding: 0 20px;
.hot_header {
@@ -18,10 +24,9 @@
color: $color_font_one;
font-weight: 700;
}
- .hot_header_up{
- color: $color_main;
- }
+
}
+
.list{
display: flex;
font-size: $font_size_medium;
diff --git a/src/pages/searchList/search.tsx b/src/pages/searchList/search.tsx
index 7505bcd..dd80f20 100644
--- a/src/pages/searchList/search.tsx
+++ b/src/pages/searchList/search.tsx
@@ -69,18 +69,18 @@ export default () => {
searchEvent(e)}/>
-
+ goLink('/pages/searchList/hightSearchList')}>高级搜索
+ {searchData?.hotField.length > 0 &&
热门面料
- goLink('/pages/searchList/searchList')}>高级搜索
- {searchData?.hotField?.map((item, index) => {
+ {searchData.hotField.map((item, index) => {
return searchEvent(item.search_key, false)}>{item.search_key}
})}
-
-
+ }
+ {searchData?.historyField.length > 0 &&
历史搜索
@@ -88,7 +88,7 @@ export default () => {
{searchData?.historyField?.map((item, index) => searchEvent(item.search_key, false)}>{item.search_key})}
-
+ }
)
}
diff --git a/src/pages/searchList/searchList.module.scss b/src/pages/searchList/searchList.module.scss
index cb88783..0e4bb51 100644
--- a/src/pages/searchList/searchList.module.scss
+++ b/src/pages/searchList/searchList.module.scss
@@ -148,7 +148,6 @@
.product_img{
width: 100%;
height: 224px;
- background: #e5ad3a;
border-radius: 20px 20px 0px 0px;
position: relative;
image{
diff --git a/src/pages/searchList/searchList.tsx b/src/pages/searchList/searchList.tsx
index 7acb9fe..53e50f4 100644
--- a/src/pages/searchList/searchList.tsx
+++ b/src/pages/searchList/searchList.tsx
@@ -8,13 +8,12 @@ import SelectData, {ListProps} from "./components/selectData";
import { goLink } from "@/common/common";
import styles from './searchList.module.scss'
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
-import useManualPullDownRefresh from "@/use/useManualPullDownRefresh";
import {GetProductListApi} from "@/api/material"
import Taro, { useDidShow, usePullDownRefresh, useRouter } from "@tarojs/taro";
import { formatHashTag, formatImgUrl } from "@/common/fotmat";
import { dataLoadingStatus, getFilterData } from "@/common/util";
-import LoadingCard from "@/components/loadingCard";
import useLogin from "@/use/useLogin";
+import LabAndImg from "@/components/LabAndImg";
export default () => {
const {checkLogin} = useLogin()
@@ -95,6 +94,7 @@ export default () => {
//获取筛选条件
const getFiltr = (e) => {
pageNum.current.page = 1
+ setMaterialList(() => ({list:[], total:0}))
const {data} = e
setSearchField({
...searchField,
@@ -110,14 +110,12 @@ export default () => {
//筛选条件格式化
const [selectList , setSelectList] = useState()
const formatSelectList = (val = {data:{}, field:{}}) => {
- console.log('data123::',val.data)
let data:ListProps[] = []
for(let key in val.data) {
if(key !== 'seriesId'&& val.data[key] != '') {
data.push({title:val.field[key], value:val.data[key]})
}
}
- console.log('data::',data)
setSelectList([...data])
}
@@ -156,15 +154,15 @@ export default () => {
搜索结果 ({materialList.total}条记录)
getScrolltolower()}
- selfOnScroll={(e) => onscroll(e)}
+ selfonScrollToLower={getScrolltolower}
+ selfOnScroll={onscroll}
statusMore={statusMore}
>
{materialList.list.map(item => {
return goLinkPage(item)}>
-
+
{(item.product_color_count)}色
diff --git a/src/pages/user/index.module.scss b/src/pages/user/index.module.scss
index 464844d..bb82b69 100644
--- a/src/pages/user/index.module.scss
+++ b/src/pages/user/index.module.scss
@@ -1,68 +1,94 @@
-.main{
+.main {
background-color: #F8F8F8;
min-height: 100vh;
display: flex;
flex-direction: column;
- .header{
+ position: relative;
+
+ .header {
background: #68b4ff;
background-size: cover;
height: 560px;
position: relative;
- .card-main{
+
+ .card-main {
margin-top: 10px;
}
}
- .header-card{
- position: absolute;left: 50%;bottom: -18%;
+
+ .auth-suspension {
+ position: absolute;
+ z-index: 1;
+ inset: 0;
+ }
+
+ .header-card {
+ position: absolute;
+ left: 50%;
+ bottom: -18%;
transform: translateX(-50%);
}
- .crad{
- width: 702px;
- background: rgba(255,255,255,0.95);
- border-radius: 20px;
- padding: 30px;
- box-sizing: border-box;
- box-shadow: 0px 6px 12px 0px rgba(0,0,0,0.05);
+
+ .crad {
+ width: 702px;
+ background: rgba(255, 255, 255, 0.95);
+ border-radius: 20px;
+ padding: 30px;
+ box-sizing: border-box;
+ box-shadow: 0px 6px 12px 0px rgba(0, 0, 0, 0.05);
}
- .card-info{
- display: flex;justify-content: space-between;
- position: absolute;top: -15%;left: 0;right: 0;
- width: 702px;
- padding: 0 30px;
- box-sizing: border-box;
+
+ .card-info {
+ display: flex;
+ justify-content: space-between;
+ position: absolute;
+ top: -15%;
+ left: 0;
+ right: 0;
+ width: 702px;
+ padding: 0 30px;
+ box-sizing: border-box;
}
- .arcd-info-left{
- display: flex;align-items: flex-end;
+
+ .arcd-info-left {
+ display: flex;
+ align-items: flex-end;
}
- .arcd-info-left-portrait{
- width: 170px;
- height: 170px;
- background: rgba(0,0,0,0.00);
- border: 4px solid #ffffff;
- border-radius: 50%;
- overflow: hidden;
+
+ .arcd-info-left-portrait {
+ width: 170px;
+ height: 170px;
+ background: rgba(0, 0, 0, 0.00);
+ border: 4px solid #ffffff;
+ border-radius: 50%;
+ overflow: hidden;
}
- .arcd-info-left-portrait image{
- width: 100%;
- height: 100%;
- object-fit: cover;
+
+ .arcd-info-left-portrait image {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
}
- .arcd-info-left-desc{
- margin-left: 24px;
+
+ .arcd-info-left-desc {
+ margin-left: 24px;
}
- .arcd-info-left-nickname{
- font-size: 44px;
- font-weight: 700;
- color: #000000;
- display: flex;
- align-items: center;
+
+ .arcd-info-left-nickname {
+ font-size: 44px;
+ font-weight: 700;
+ color: #000000;
+ display: flex;
+ align-items: center;
}
- .arcd-info-left-phone{
+
+ .arcd-info-left-phone {
font-size: 24px;
font-weight: 400;
color: #707070;
}
- .arcd-info-left-phone button{
+
+ .arcd-info-left-phone button {
padding: 0 10px;
height: 42px;
background: #ffffff;
@@ -71,39 +97,50 @@
font-size: 22px;
font-weight: 400;
color: #007aff;
- display: flex;align-items: center;justify-content: center;
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
- .card-info-right{
- font-size: 26px;
- display: flex;align-items: flex-end;
+
+ .card-info-right {
+ font-size: 26px;
+ display: flex;
+ align-items: flex-end;
}
- .setup-icon{
+
+ .setup-icon {
position: relative;
padding-bottom: 10px;
}
- .icon-wrapper{
+
+ .icon-wrapper {
font-size: 60px;
}
- .icon-point{
+
+ .icon-point {
width: 8px;
height: 8px;
border-radius: 50%;
background: #ff0000;
position: absolute;
- right: 0;top: 0;
+ right: 0;
+ top: 0;
}
- .card-main{
+ .card-main {
margin: 20px auto 0;
}
- .card-main-title{
- display: flex;justify-content: space-between;
- align-items: center;
- border-bottom: 2px solid #dddddd;
- padding: 0 5px 15px;
- box-sizing: border-box;
+
+ .card-main-title {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ border-bottom: 2px solid #dddddd;
+ padding: 0 5px 15px;
+ box-sizing: border-box;
}
- .card-main-title text{
+
+ .card-main-title text {
font-size: 22px;
font-weight: 400;
color: #ababab;
@@ -111,23 +148,27 @@
text-align: right;
width: 150px;
}
- .card-main-title-content{
- display: grid;
- grid-template-columns: repeat(5,1fr);
+
+ .card-main-title-content {
+ display: grid;
+ grid-template-columns: repeat(5, 1fr);
}
- .card-main-title-content-item{
- font-size: 24px;
- font-weight: 400;
- color: #3c3c3c;
- text-align: center;
- margin-top: 30px;
- position: relative;
+
+ .card-main-title-content-item {
+ font-size: 24px;
+ font-weight: 400;
+ color: #3c3c3c;
+ text-align: center;
+ margin-top: 30px;
+ position: relative;
}
- .card-main-title-content-item Text{
+
+ .card-main-title-content-item Text {
font-size: 56px;
color: #3C3C3C;
}
- .card-main-title-content-item-badge{
+
+ .card-main-title-content-item-badge {
padding: 0 10px;
height: 32px;
background: #007aff;
@@ -138,96 +179,140 @@
font-size: 18px;
font-weight: 700;
color: #ffffff;
- display: flex;align-items: center;justify-content: center;
- position: absolute;top: -10px;right: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: absolute;
+ top: -10px;
+ right: 0;
}
- .assets-title{
+ .assets-title {
font-size: 28px;
font-weight: 700;
color: #3c3c3c;
margin-bottom: 20px;
}
- .assets-content{
+
+ .assets-content {
display: grid;
- grid-template-columns: repeat(3,1fr);
+ grid-template-columns: repeat(3, 1fr);
}
- .assets-content>view,.assets-content>navigator{
+
+ .assets-content>view,
+ .assets-content>navigator {
text-align: center;
}
- .assets-content-item-top{
+
+ .assets-content-item-top {
color: #007aff;
font-weight: 400;
}
- .assets-content-item-top-before{
+
+ .assets-content-item-top-before {
font-size: 20px;
}
- .assets-content-item-top-content{
+
+ .assets-content-item-top-content {
font-size: 36px;
}
- .assets-content-item-top-after{
+
+ .assets-content-item-top-after {
font-size: 20px;
}
- .assets-content-item-tips{
+
+ .assets-content-item-tips {
font-size: 24px;
font-weight: 400;
color: #707070;
}
- .main-card{
+ .main-card {
margin: 131px auto 0;
}
- .card-feature{
+
+ .card-feature {
margin-bottom: 50px;
}
- .card-main-list-content-item{
- display: flex;align-items: center;
+
+ .card-main-list-content-item {
+ display: flex;
+ align-items: center;
justify-content: space-between;
height: 90px;
}
- .card-main-list-content-item-left{
+
+ .card-main-list-content-item-left {
font-size: 26px;
font-weight: 400;
text-align: left;
color: #707070;
- display: flex;align-items: center;
+ display: flex;
+ align-items: center;
}
- .card-main-list-content-item-left text{
+
+ .card-main-list-content-item-left text {
margin-right: 35px;
font-size: 56px;
color: #707070;
}
- .card-main-list-content-item-right text{
+
+ .card-main-list-content-item-right text {
font-size: 30px;
}
- .auth{
+ .auth {
margin-top: 115px;
}
- .auth-top{
- display: flex;align-items: center;justify-content: space-between;
+
+ .auth-top {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
}
- .auth-status{
+
+ .auth-status {
padding: 0 10px;
height: 30px;
background: #dddddd;
border-radius: 10px 4px 0px 0px;
- display: flex;align-items: center;justify-content: center;
+ display: flex;
+ align-items: center;
+ justify-content: center;
font-size: 18px;
font-weight: 400;
color: #707070;
}
- .auth-tips{
+
+ .auth-status,
+ .auth-status-ongoing {
+ color: #EE7500;
+ background-color: #FFE6CE;
+ }
+
+ .auth-status,
+ .auth-status-adopt {
+ color: #007AFF;
+ background-color: #CDE5FF;
+ }
+
+ .auth-tips {
font-size: 18px;
font-weight: 400;
color: #007aff;
- width: 150px;
text-align: right;
}
- .auth-tips text{
+
+ .auth-tips,
+ .auth-tips-adopt {
+ color: #ABABAB;
+ }
+
+ .auth-tips text {
font-size: 17px;
}
- .auth-company{
+
+ .auth-company {
height: 70px;
width: 100%;
background: #f6f6f6;
@@ -236,30 +321,46 @@
font-size: 26px;
font-weight: 700;
color: #707070;
- display: flex;align-items: center;justify-content: center;
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
- .modal{
- background: rgba(0,0,0,0.6);
- position: fixed;inset: 0;
- display: flex;justify-content: center;align-items: center;
+ .auth-company,
+ .auth-company-adopt {
+ background: #ecf5ff;
+ border: 2px solid #cde5ff;
}
- .modal-content{
+
+ .tips-modal {
+ background: rgba(0, 0, 0, 0.6);
+ position: fixed;
+ inset: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 2;
+ }
+
+ .tips-modal-content {
width: 598px;
background: #ffffff;
border-radius: 10px;
animation: enlargeK 0.2s linear;
overflow: hidden;
}
+
@keyframes enlargeK {
- 0%{
+ 0% {
transform: scale(0);
}
- 100%{
+
+ 100% {
transform: scale(1);
}
}
- .modal-title{
+
+ .tips-modal-title {
font-size: 32px;
font-weight: 700;
text-align: center;
@@ -267,53 +368,166 @@
margin-bottom: 58px;
padding-top: 48px;
}
- .modal-letter{
+
+ .tips-modal-letter {
font-size: 26px;
font-weight: 400;
color: #707070;
padding: 0 30px;
line-height: 50px;
}
- .modal-letter-text{
+
+ .tips-modal-letter-text {
text-indent: 60px;
}
- .modal-letter-beginn{
+
+ .tips-modal-letter-beginn {
font-size: 28px;
font-weight: 400;
color: #000000;
margin-bottom: 25px;
}
- .modal-letter-end{
+
+ .tips-modal-letter-end {
font-size: 26px;
font-weight: 400;
text-align: right;
margin-top: 61px;
}
- .modal-button{
+
+ .tips-modal-button {
display: flex;
border-top: 1px solid #DDDDDD;
margin-top: 45px;
}
- .modal-button button, .modal-button view{
- display: flex;align-items: center;justify-content: center;
+
+ .tips-modal-button button,
+ .tips-modal-button view {
+ display: flex;
+ align-items: center;
+ justify-content: center;
width: 50%;
height: 90px;
background-color: white;
}
- .modal-button button{
+
+ .tips-modal-button button {
font-size: 26px;
font-weight: 400;
color: #707070;
border-radius: 0;
border-right: 1px solid #DDDDDD;
}
- .modal-button button::after{
+
+ .tips-modal-button button::after {
border: 0;
border-radius: 0;
}
- .modal-button view{
+
+ .tips-modal-button view {
font-size: 26px;
font-weight: 400;
color: #007aff;
}
+
+ .auth-box {
+ width: 614px;
+ height: 70px;
+ background: #f6f6f6;
+ border-radius: 10px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding-left: 18px;
+ padding-right: 16px;
+
+ .auth-left-box {
+ display: flex;
+ align-items: center;
+
+ .auth-tag {
+ width: 86px;
+ height: 34px;
+ background: #dddddd;
+ border-radius: 10px;
+ font-size: 22px;
+ font-family: Microsoft YaHei, Microsoft YaHei-Regular;
+ font-weight: 400;
+ text-align: center;
+ color: #707070;
+ text-align: center;
+ line-height: 34px;
+ margin-right: 28px;
+ }
+
+ .auth-tagone {
+ width: 86px;
+ height: 34px;
+ background: #ffe6ce;
+ border-radius: 10px;
+ font-size: 22px;
+ font-family: Microsoft YaHei, Microsoft YaHei-Regular;
+ font-weight: 400;
+ text-align: center;
+ color: #707070;
+ text-align: center;
+ line-height: 34px;
+ margin-right: 28px;
+ }
+
+ .auth-tagtwo {
+ display: flex;
+ align-items: center;
+ overflow: hidden;
+ padding-left: 10px;
+ width: 100px;
+ height: 32px;
+ background: #cde5ff;
+ border-radius: 10px;
+
+ .iconFont-color {
+ display: flex;
+ align-items: center;
+ font-size: 30px;
+ margin-right: 3px;
+ color: #007aff;
+ }
+
+ .auth-font {
+ font-size: 20px;
+ font-family: Microsoft YaHei, Microsoft YaHei-Regular;
+ font-weight: 400;
+ color: #007aff;
+ }
+ }
+
+ .tagthree {
+ display: flex;
+ align-items: center;
+ overflow: hidden;
+ padding-left: 10px;
+ width: 100px;
+ height: 32px;
+ background: rgba(255, 0, 0, 0.10);
+ border-radius: 10px;
+ color: #ff0000;
+ }
+
+ .auth-cont {
+ margin-left: 16px;
+ font-size: 26px;
+ font-family: Microsoft YaHei, Microsoft YaHei-Bold;
+ font-weight: 700;
+ color: #ababab;
+ }
+
+ .auth-contone {
+ margin-left: 16px;
+ font-size: 26px;
+ font-family: Microsoft YaHei, Microsoft YaHei-Bold;
+ font-weight: 700;
+ color: #3c3c3c;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx
index ba0cc9b..7709a0c 100644
--- a/src/pages/user/index.tsx
+++ b/src/pages/user/index.tsx
@@ -3,79 +3,89 @@ import { memo, useEffect, useState } from "react"
import styles from './index.module.scss'
import classnames from "classnames";
import { useSelector } from "@/reducers/hooks";
-import { GetAdminUserInfoApi } from "@/api/user";
import { alert, goLink } from "@/common/common";
-
-
+import useLogin from '@/use/useLogin'
+import { BASE_URL } from '@/common/constant'
+import Taro from "@tarojs/taro";
+import { userassets } from "@/api/mine"
+import { formatPriceDiv } from "@/common/fotmat"
export default () => {
// 用户信息
- const { fetchData, state } = GetAdminUserInfoApi();
- const {adminUserInfo, userInfo} = useSelector(state => state.userInfo);
- const [mUserInfo, setMUserInfo] = useState({
- phone: ""
- });
- const getData = ()=>{
- fetchData();
+ const { getSelfUserInfo } = useLogin();
+ const { adminUserInfo } = useSelector(state => state.userInfo);
+ useEffect(() => {
+ getSelfUserInfo().then().catch(() => {
+ alert.none("授权失败,请授权后再使用");
+ });
+ }, []);
+ const handleAuth = async () => {
+ getSelfUserInfo().then().catch(() => {
+ alert.none("授权失败,请授权后再使用");
+ });
}
- useEffect(()=>{
- setMUserInfo({
- ...mUserInfo,
- // phone: userInfo?.phone?.replace(userInfo?.phone?.substring(3,7), "****") as string
- })
- getData();
- },[]);
-
+ const { fetchData, state } = userassets()
+ useEffect(() => {
+ fetchData();
+ }, [])
return (
-
-
+
+
-
+ {/* {(adminUserInfo as any)?.authentication_status==1&&} */}
+ {/* 测试暂时添加 */}
+ {BASE_URL}
+ {!adminUserInfo.is_authorize_name && }
)
}
-const Modal = memo((props:any)=>{
- const {data} = props;
- const handleouter = ()=>{
- console.log(222);
-
+// 提示弹窗
+const Modal = memo((props: any) => {
+ const { data } = props;
+ const [modalShow, setModalShow] = useState(true);
+ const handleouter = () => {
}
- return(
+ return (
<>
- {!data?.is_authorize_phone&&
-
- e.stopPropagation()}>
- 首次登录提醒
-
- To: 万丰园纺织科技
- 尊敬的老朋友,欢迎你使用小程序商城;由于您是我们长期合作的伙伴,你的组织已自动为你生成,关联后可查看历史订单哟。
- 信息错误请联系客服
+ {modalShow &&
+
+ e.stopPropagation()}>
+ 首次登录提醒
+
+ To: 万丰园纺织科技
+ 尊敬的老朋友,欢迎你使用小程序商城;由于您是我们长期合作的伙伴,你的组织已自动为你生成,关联后可查看历史订单哟。
+ 信息错误请联系客服
+
+
+
+ setModalShow(false)}>我知道
+
+
-
-
- 我知道
-
-
-
- }
+ }
>
)
})
// 头部 | 订单
-const Header = memo((props:any) => {
- const {data, userInfo} = props;
- let menu = [{ text: "待配布", icon: "icon-daipeibu" }, { text: "待付款", icon: "icon-daifukuan" },
- { text: "待发货", icon: "icon-daifahuo" }, { text: "已发货", icon: "icon-yifahuo" },
- { text: "退款/售后", icon: "icon-a-tuikuanshouhou" }];
- const getPhoneNumber = (ev)=>{
- console.log(ev);
- if(ev.detail?.code){
- }else{
- alert.none("取消了授权");
+const Header = memo((props: any) => {
+ const { data } = props;
+ let menu = [{ text: "待配布", icon: "icon-daipeibu", url: "/pages/orderList/index" }, { text: "待付款", icon: "icon-daifukuan", url: "/pages/orderList/index" },
+ { text: "待发货", icon: "icon-daifahuo", url: "/pages/orderList/index" }, { text: "已发货", icon: "icon-yifahuo", url: "/pages/orderList/index" },
+ { text: "退款/售后", icon: "icon-a-tuikuanshouhou", url: "/pages/orderList/index" }];
+ const { getPhoneNumber } = useLogin();
+ const mGetPhoneNumber = (ev) => {
+ if (ev.detail?.code) {
+ getPhoneNumber(ev.detail.code);
+ } else {
+ alert.none("绑定失败!");
}
}
-
+ const navTo = () => {
+ Taro.navigateTo({
+ url: '/pages/certification/index'
+ })
+ }
return (
@@ -90,7 +100,7 @@ const Header = memo((props:any) => {
{data?.user_name}
- {userInfo?.phone||}
+ {data?.phone ? data?.phone?.replace(data?.phone?.substring(3, 7), "****") : }
@@ -106,16 +116,80 @@ const Header = memo((props:any) => {
-
-
- 1
- 认证不通过
+ {(data?.authentication_status == 0 || data?.authentication_status == 1) &&
+ navTo()}>
+
+
+ 未认证
+
+
+ 暂未加入或注册组织
+
+
+
- 重新认证
-
-
- 佛山市带生纺织品有限公司
-
+ }
+ {(data?.authentication_status == 3) &&
+ navTo()}>
+
+
+ 认证失败
+
+
+ 暂未加入或注册组织
+
+
+
+
+ }
+ {data?.authentication_status == 2 &&
+ navTo()}>
+
+
+ 认证中
+
+
+ {data?.company_name || '暂未加入或注册组织'}
+
+
+
+
+ }
+ {data?.authentication_status == 4 &&
+ navTo()}>
+
+
+
+
+
+ 已认证
+
+
+ {data?.company_name}
+
+
+
+
+ }
+ {/*
+
+ 1
+ {data?.authentication_status==1&&"未认证"}
+ {data?.authentication_status==2&&"认证中"}
+ {data?.authentication_status==3&&"认证不通过"}
+ {data?.authentication_status==4&&"已认证"}
+
+ {data?.authentication_status==1&&认证通过后,解锁更多权限 }
+ {data?.authentication_status==2&&1-3个工作日,审核完成 }
+ {data?.authentication_status==3&&重新认证 }
+ {data?.authentication_status==4&&认证通过,可以下单啦 }
+ */}
+ {/*
+ {data?.authentication_status==1&&"暂未加入或注册组织"}
+ {data?.authentication_status==2&&data?.company_name}
+ {data?.authentication_status==3&&data?.company_name}
+ {data?.authentication_status==4&&data?.company_name}
+ */}
@@ -126,24 +200,23 @@ const Header = memo((props:any) => {
{
menu.map((item, index) => {
return (
-
+
{item.text}
- {index==2?"99+":10}
-
+ {index == 2 ? "99+" : 10}
+
)
})
}
-
)
})
-
// 我的资产
-const Assets = () => {
+const Assets = (props: any) => {
+ console.log(props, 'propsprops')
return (
我的资产
@@ -151,14 +224,14 @@ const Assets = () => {
¥
- 0
- .20
+ {formatPriceDiv(props.data.data.wallet_money || 0)}
+ {/* {props.wallet_money || 0} */}
预存款
- 4
+ {props.data.data.coupon_count || 0}
张
优惠券
@@ -166,8 +239,8 @@ const Assets = () => {
¥
- 99999
- .-00
+ {formatPriceDiv(props.data.data.credit_line || 0)}
+ {/* .-00 */}
授信额度
diff --git a/src/pages/userEdit/components/ModifyModal.scss b/src/pages/userEdit/components/ModifyModal.scss
new file mode 100644
index 0000000..fe370e9
--- /dev/null
+++ b/src/pages/userEdit/components/ModifyModal.scss
@@ -0,0 +1,76 @@
+ .modify-ickname-content {
+ margin: 0 auto;
+ width: 658px;
+ padding-bottom: 50px;
+
+ .modify-ickname-input {
+ width: 658px;
+ height: 182px;
+ background: #f3f3f3;
+ border: 2px solid #e6e6e6;
+ border-radius: 10px;
+ padding: 15px;
+ box-sizing: border-box;
+ font-size: 22px;
+ font-weight: 400;
+ color: #ababab;
+ display: flex;
+ flex-direction: column;
+ align-items: flex-end;
+ }
+
+ .modify-ickname-input textarea {
+ width: 100%;
+ height: 80%;
+ font-size: 26px;
+ font-weight: 400;
+ color: #3c3c3c;
+ }
+
+ .modify-ickname-tips {
+ font-size: 22px;
+ font-weight: 400;
+ color: #ababab;
+ margin-top: 30px;
+ }
+
+ .modify-ickname-operation {
+ width: 658px;
+ height: 82px;
+ background: #ffffff;
+ border: 2px solid #cde5ff;
+ border-radius: 40px;
+ display: flex;
+ overflow: hidden;
+ margin-top: 105px;
+ display: flex;
+ }
+
+ .modify-ickname-operation button {
+ height: 100%;
+ width: 50%;
+ font-size: 32px;
+ font-weight: 400;
+ color: #007aff;
+ background-color: white;
+ border: none;
+ outline: none;
+ padding: 0;
+ border-radius: 0;
+ }
+
+ .modify-ickname-operation button::after,
+ .user-edit-logout::after {
+ border-radius: 0;
+ border: none;
+ }
+
+ .modify-ickname-operation .modify-ickname-operation-save {
+ background: #007aff;
+ color: #ffffff;
+ }
+
+ .modify-ickname-operation button::after {
+ border-radius: 0;
+ }
+ }
\ No newline at end of file
diff --git a/src/pages/userEdit/components/ModifyModal.tsx b/src/pages/userEdit/components/ModifyModal.tsx
new file mode 100644
index 0000000..22c9db5
--- /dev/null
+++ b/src/pages/userEdit/components/ModifyModal.tsx
@@ -0,0 +1,49 @@
+
+import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useState } from "react"
+import Popup from "@/components/popup";
+import { Button, Image, Text, Textarea, View } from "@tarojs/components"
+import "./ModifyModal.scss"
+
+interface Params{
+ title?: string,
+ save: (value: any)=>void, // 确定保存
+}
+export default memo(forwardRef((props:any,ref)=>{
+ const {title="修改昵称"} = props;
+ const [value, setValue] = useState("");
+ useEffect(()=>{
+ setValue(props.value);
+ },[props.value])
+ // popup输入长度
+ const handleTextareaInput = (ev:any)=>{
+ setValue(ev.detail.value.slice(0,20));
+ }
+ // 重置
+ const handleTextareaReset = ()=>{
+ setValue("");
+ }
+ const [textareaBottom, setTextareaBottom] = useState(0);
+ const handleBlur = ()=>{
+ setTextareaBottom(0);
+ }
+ const handleFocus = (ev)=>{
+ setTextareaBottom(ev.detail.height);
+ }
+ const [modalShow,setModalShow] = useState(false);
+ useImperativeHandle(ref, ()=>({setModalShow}))
+ return (
+ setModalShow(false)} title={title} show={modalShow}>
+
+
+
+ 请设置2-20个字符,可由中文、英文、数字组成
+
+
+
+
+
+
+ )
+}))
\ No newline at end of file
diff --git a/src/pages/userEdit/index.scss b/src/pages/userEdit/index.scss
index c34ca9b..2899aa8 100644
--- a/src/pages/userEdit/index.scss
+++ b/src/pages/userEdit/index.scss
@@ -33,6 +33,49 @@
.user-edit-content-title text{
margin-right: 10px;
}
+ .user-edit-content-phone{
+ font-size: 26px;
+ font-weight: 400;
+ color: #000000;
+ display: flex;justify-content: space-between;
+ }
+ .user-edit-content-phone text{
+ font-size: 24px;
+ font-weight: 400;
+ color: #ababab;
+ }
+ .user-edit-content-bindphone{
+ padding: 0;width: auto;height: auto;
+ margin: 0;background: none;border: 0;
+ text-align: left;
+ font-size: 26px;
+ font-weight: 400;
+ color: #ababab;
+ }
+ .user-edit-content-bindphone::after{
+ border: 0;
+ }
+ .user-edit-content-company{
+ width: 118px;
+ height: 40px;
+ background: #dddddd;
+ border-radius: 6px;
+ display: flex;align-items: center;justify-content: center;
+ font-size: 24px;
+ font-weight: 400;
+ color: #707070;
+ }
+ .user-edit-content-company,.user-edit-content-company-adopt{
+ background: #CDF3DF;
+ color: #07C160;
+ }
+ .user-edit-content-company text{
+ margin-left: 5px;
+ }
+ .user-edit-content-company.user-edit-content-company-auth{
+ background-color: #CDF3DF;
+ color: #07C160;
+ }
.user-edit-list{
height: 90px;
display: flex;align-items: center;
@@ -50,12 +93,15 @@
color: #000000;
}
.user-edit-list-right{
- display: flex;justify-content: space-between;
+ display: flex;justify-content: space-between;align-items: center;
flex: auto;
font-size: 26px;
font-weight: 400;
color: #000000;
}
+ .user-edit-list-right>view{
+ flex: 1;
+ }
.user-edit-list-right-placeholder{
color: #cccccc;
}
@@ -77,69 +123,4 @@
text-align: center;
color: #007aff;
}
-
- .user-edit-popup-content{
- margin: 0 auto;
- width: 658px;
- padding-bottom: 50px;
- }
- .user-edit-popup-input{
- width: 658px;
- height: 182px;
- background: #f3f3f3;
- border: 2px solid #e6e6e6;
- border-radius: 10px;
- padding: 15px;
- box-sizing: border-box;
- font-size: 22px;
- font-weight: 400;
- color: #ababab;
- display: flex;flex-direction: column;
- align-items: flex-end;
- }
- .user-edit-popup-input textarea{
- width: 100%;
- height: 80%;
- font-size: 26px;
- font-weight: 400;
- color: #3c3c3c;
- }
- .user-edit-popup-tips{
- font-size: 22px;
- font-weight: 400;
- color: #ababab;
- margin-top: 30px;
- }
- .user-edit-popup-operation{
- width: 658px;
- height: 82px;
- background: #ffffff;
- border: 2px solid #cde5ff;
- border-radius: 40px;
- display: flex;
- overflow: hidden;
- margin-top: 105px;
- display: flex;
- }
- .user-edit-popup-operation button{
- height: 100%;
- width: 50%;
- font-size: 32px;
- font-weight: 400;
- color: #007aff;
- background-color: white;
- border: none;
- outline: none;
- padding: 0;
- border-radius: 0;
- }
- .user-edit-popup-operation button::after,.user-edit-logout::after{
- border-radius: 0;
- border: none;
- }
- .user-edit-popup-operation .user-edit-popup-operation-save{
- background: #007aff;
- color: #ffffff;
- }
- .user-edit-popup-operation button::after{ border-radius: 0; }
}
\ No newline at end of file
diff --git a/src/pages/userEdit/index.tsx b/src/pages/userEdit/index.tsx
index 62974a6..f4bb132 100644
--- a/src/pages/userEdit/index.tsx
+++ b/src/pages/userEdit/index.tsx
@@ -1,101 +1,189 @@
import { alert, goLink, isEmptyObject, retrieval } from "@/common/common";
import Popup from "@/components/popup";
-import { Button, Image, Text, Textarea, View } from "@tarojs/components"
+import { Button, Image, Picker, Text, Textarea, View } from "@tarojs/components"
import Taro, { chooseMedia } from "@tarojs/taro";
-import { GetAdminUserInfoApi, realNameUpdateApi } from "@/api/user";
-import { memo, useCallback, useEffect, useState } from "react"
+import { realNameUpdateApi, companyTypeApi, portraitUpdateApi } from "@/api/user";
+import { companyDetailApi, companyUpdateApi } from "@/api/company"
+import { memo, useCallback, useEffect, useRef, useState } from "react"
import "./index.scss"
+import ModifyModal from "./components/ModifyModal";
+import useLogin from "@/use/useLogin";
+import { useSelector } from "@/reducers/hooks";
+import useUploadCDNImg from "@/use/useUploadImage";
+import { IMG_CND_Prefix } from "@/common/constant";
-export default ()=>{
- // 用户信息
- const { fetchData, state } = GetAdminUserInfoApi();
- const getData = async ()=>{
- const result = await fetchData();
+export default () => {
+ const { getPhoneNumber, getAdminUserInfo } = useLogin();
+ const { adminUserInfo } = useSelector(state => state.userInfo);
+ // 用户信息
+ useEffect(() => {
setFormData({
...formData,
- real_name: result.data.user_name
- })
- }
- useEffect(()=>{
- getData();
- },[])
+ ...adminUserInfo as any,
+ });
+ }, [adminUserInfo]);
+ useEffect(() => {
+ setFormData({
+ ...adminUserInfo as any,
+ company_type_index: 0
+ });
+ getCompanyTypeData();
+ }, [])
// 表单数据
const [formData, setFormData] = useState({
- real_name: "麦兜"
+ user_name: "麦兜"
});
- // 显示popup
- const [popupShow,setPopupShow] = useState(false);
- const triggerList = useCallback((key:string)=>{
- setPopupShow(true);
- },[])
- // popup保存
- const { fetchData: realNameUpdateFetch } = realNameUpdateApi();
+ // 昵称修改保存
+ const { fetchData: realNameUpdateFetch } = realNameUpdateApi();
const rules = {
- real_name: [{
- message: "请输入昵称"
+ text: [{
+ message: "请输入"
}]
}
- const handleTextareaSave = async (real_name)=>{
- retrieval({real_name},rules).then(async ()=>{
- const result = await realNameUpdateFetch({real_name});
- if(result.success){
- getData();
- setPopupShow(false);
+ const { fetchData: saveFetch } = companyUpdateApi();
+ const { fetchData: getCompanyFetch } = companyDetailApi();
+ const handleTextareaSave = async (text, type) => {
+ retrieval({ text }, rules).then(async () => {
+ let result;
+ if (type == "Ickname") {
+ result = await realNameUpdateFetch({ real_name: text });
+ } else {
+ const params = await getCompanyFetch();
+ result = await saveFetch({
+ ...params.data,
+ company_name: text
+ });
+ }
+ if (result.success) {
+ getAdminUserInfo();
+ (ModifyIcknameEl.current as any).setModalShow(false);
+ (ModifyCompanyNameEl.current as any).setModalShow(false)
alert.success("保存成功");
- }else{
+ } else {
alert.none(result.msg);
}
- }).catch(message=>{
+ }).catch(message => {
alert.none(message);
})
}
// Taro.eventCenter.on('message:detail', (message) => console.log(message))
// 面面跳转
- const onNavigate = (url:string)=>{
+ const onNavigate = (url: string) => {
goLink(url);
}
// 肖像编辑
- const handleSelectRortrait = ()=>{
- chooseMedia({
- count: 1,
- mediaType: ["image"],
- success(ev){
- console.log(ev);
-
+ const { fetchData: portraitUpdateFetch } = portraitUpdateApi();
+ const { getWxPhoto } = useUploadCDNImg();
+ const handleSelectRortrait = () => {
+ Taro.showModal({
+ title: "提示",
+ content: "是否确定更改头像?",
+ showCancel: true,
+ async success(ev) {
+ if (ev.confirm) {
+ let result = await getWxPhoto('mall');
+ const portraitUpdateResult = await portraitUpdateFetch({
+ avatar_url: IMG_CND_Prefix + (result as any).url
+ });
+ if (portraitUpdateResult.success) {
+ getAdminUserInfo();
+ alert.success("保存成功");
+ } else {
+ alert.none(portraitUpdateResult.msg);
+ }
+ }
}
})
}
+ const mGetPhoneNumber = (ev) => {
+ if (ev.detail?.code) {
+ getPhoneNumber(ev.detail.code);
+ } else {
+ alert.none("绑定失败!");
+ }
+ }
+ const ModifyIcknameEl = useRef(null);
+ const ModifyCompanyNameEl = useRef(null);
+ // 获取企业类型
+ const { fetchData: companyTypeFetch, state: companyTypeData } = companyTypeApi();
+ const getCompanyTypeData = async () => {
+ const reuslt = await companyTypeFetch();
+ if (reuslt.success) {
+ reuslt.data?.list?.every((item, index) => {
+ if (item.id == (adminUserInfo as any).purchaser_type) {
+ setFormData({
+ ...adminUserInfo as any,
+ company_type_index: index
+ });
+ return false;
+ }
+ return true;
+ })
+ }
+ }
+ // 修改企业类型
+ const handleCompanyType = async (ev) => {
+ const { value } = ev.detail;
+ const item = companyTypeData.data.list && companyTypeData.data.list[value];
+ if (item) {
+ const params = await getCompanyFetch();
+ const result = await saveFetch({
+ ...params.data,
+ purchaser_type: item.id
+ });
+ if (result.success) {
+ getAdminUserInfo();
+ alert.success("保存成功")
+ } else {
+ alert.none(result.msg);
+ }
+ }
+ }
return (
-
+
点击编辑头像
- 个人资料
- triggerList('real_name')} data={state.data.user_name} label="昵称" placeholder="请输入" icon=""/>
- onNavigate("/pages/company/index")} label="手机号" placeholder="去绑定" icon=""/>
+ 个人资料
+ (ModifyIcknameEl.current as any).setModalShow(true)} data={(formData as any)?.user_name} label="昵称" placeholder="请输入" icon="" />
+
+ {((formData as any)?.phone) ?
+ {(formData as any)?.phone}
+ 已绑定
+ :
+
+ }
+
- 组织资料
- triggerList('real_name')} data={state.data.user_name} label="名称" placeholder="待绑定" icon=""/>
- onNavigate("/pages/company/index")} label="类型" placeholder="完善公司/组织信息" icon=""/>
- onNavigate("/pages/certification/index")} label="我的认证" placeholder="待绑定" icon="">
- 已认证
+ 组织资料
+ (ModifyCompanyNameEl.current as any).setModalShow(true)} data={(formData as any)?.company_name} label="名称" placeholder="待绑定" icon="" />
+
+
+ {(companyTypeData.data as any).list && (companyTypeData.data as any).list[(formData as any)?.company_type_index].name}
+
- onNavigate("/pages/weightList/index")} label="创建人" placeholder="完善公司/组织信息" icon=""/>
+ onNavigate("/pages/certification/index")} label="我的认证" placeholder="待绑定" icon="">
+
+ {(formData as any)?.authentication_status == 4 ? "已认证" : "未认证"}
+
+
+
-
+ {/* */}
-
+ handleTextareaSave(value, "Ickname")} />
+ handleTextareaSave(value, "companyName")} />
)
}
// 列表
-const UserEditList = memo((props:any)=>{
+const UserEditList = memo((props: any) => {
return (
@@ -104,44 +192,16 @@ const UserEditList = memo((props:any)=>{
{
- props.children?props.children:
- props.data?props.data:
- {props.placeholder}
+ props.children ? props.children :
+ props.data ? props.data :
+ {props.placeholder}
}
-
+ {
+ !props.useIcon &&
+
+ }
)
})
-
-// popup内容
-const PopupContent = memo((props:any)=>{
- const [value, setValue] = useState("");
- useEffect(()=>{
- setValue(props.value);
- },[props.value])
- // popup输入长度
- const handleTextareaInput = (ev:any)=>{
- setValue(ev.detail.value.slice(0,20));
- }
- // 重置
- const handleTextareaReset = ()=>{
- setValue("");
- }
- return (
- props.setPopupShow(false)} title="修改昵称" show={props.show}>
-
-
-
- 请设置2-20个字符,由中文、英文、数字、-和_组成
-
-
-
-
-
-
- )
-})
\ No newline at end of file
diff --git a/src/reducers/userInfo.ts b/src/reducers/userInfo.ts
index bcf3724..b7215c1 100644
--- a/src/reducers/userInfo.ts
+++ b/src/reducers/userInfo.ts
@@ -39,6 +39,8 @@ export type UserAdminParam = {
wechat_user_open_id?: number
is_authorize_name?: false|true,
is_authorize_phone?: false|true,
+ phone?:string,
+ authentication_status?:number
}
export type SortCodeParam = {
diff --git a/src/styles/iconfont.ttf b/src/styles/iconfont.ttf
index fbb95ea..a8e0a5a 100644
Binary files a/src/styles/iconfont.ttf and b/src/styles/iconfont.ttf differ
diff --git a/src/use/useHttp.ts b/src/use/useHttp.ts
index 2663ab8..2f38afc 100644
--- a/src/use/useHttp.ts
+++ b/src/use/useHttp.ts
@@ -110,7 +110,7 @@ export const useRequest = (options:option = {
success: false, // 请求是否成功
data: {},
msg: '',
- loading: true,
+ loading: false,
error: null,
query: {},
filter: null,
@@ -127,7 +127,7 @@ export const useRequest = (options:option = {
const {login} = useLoginRequest()
useEffect(() => {
- console.log('变化::', state.loading)
+ console.log('变化1::', state.loading)
}, [state.loading])
// 请求函数
const fetchData = async (sub_options?:any) => {
diff --git a/src/use/useLogin.ts b/src/use/useLogin.ts
index c06e543..7435b02 100644
--- a/src/use/useLogin.ts
+++ b/src/use/useLogin.ts
@@ -1,15 +1,14 @@
import useUserInfo from "./useUserInfo"
import Taro, { useRouter } from "@tarojs/taro"
-import { GetWxUserInfoApi, GetAdminUserInfoApi, GetPhoneNumberApi } from "@/api/user"
+import { GetWxUserInfoApi, GetAdminUserInfoApi, GetPhoneNumberApi, BindingCompanyApi } from "@/api/user"
import useLoginRequest from "./useLoginRequest"
import { SHARE_SCENE } from "@/common/enum"
import { GetShortCodeApi } from "@/api/share"
+import { alert } from "@/common/common"
export default () => {
const {setUserInfo, setAdminUserInfo, setSortCode, userInfo} = useUserInfo()
- console.log('userInfo:::', userInfo)
-
//登录请求 (调用这个就不能再useHttp中使用,当前这个hook, 否则会死循环内存溢出)
// const {fetchData} = LoginApi()
@@ -28,7 +27,7 @@ export default () => {
const {fetchData: useFetchData} = GetAdminUserInfoApi()
const getAdminUserInfo = async () => {
let res = await useFetchData()
- setAdminUserInfo(res.data)
+ setAdminUserInfo({...res.data})
getShortCode(res.data.user_id)
}
@@ -76,8 +75,8 @@ export default () => {
})
if(user_res.success) {
setUserInfo({...user_res.data})
- reslove(user_res.data)
getAdminUserInfo()
+ reslove(true)
} else {
reject(user_res.msg)
}
@@ -94,7 +93,8 @@ export default () => {
//获取手机号码
const {fetchData: fetchDataUserPhone} = GetPhoneNumberApi()
- const getPhoneNumber = (code) =>{
+ const {fetchData: fetchBindingCompany} = BindingCompanyApi()
+ const getPhoneNumber = (code) => {
return new Promise( async (reslove, reject) => {
if(userInfo.adminUserInfo?.is_authorize_phone) {
reslove(true)
@@ -103,6 +103,7 @@ export default () => {
const res = await fetchDataUserPhone({code})
if(res.success) {
setUserInfo({...userInfo.userInfo, phone:res.data.phone_number})
+ await fetchBindingCompany()
getAdminUserInfo()
reslove(res.data)
} else {
@@ -125,6 +126,7 @@ export default () => {
wxLogin,
getSelfUserInfo,
getPhoneNumber,
- userInfo
+ userInfo,
+ getAdminUserInfo
}
}
diff --git a/src/use/useUploadImage.ts b/src/use/useUploadImage.ts
new file mode 100644
index 0000000..86c698e
--- /dev/null
+++ b/src/use/useUploadImage.ts
@@ -0,0 +1,152 @@
+import Taro from '@tarojs/taro';
+import {UPLOAD_CDN_URL } from '@/common/constant'
+import { GetSignApi } from '@/api/cdn'
+
+
+
+export default () => {
+
+ const { fetchData: GetSign, state} = GetSignApi()
+
+ // 上传图片 获取auth,Policy
+ /*
+ scene 场景值,区分上传文件的根路径
+ type 类型值,区分上传业务bucket
+ */
+ const getSecret = (scene, type) => {
+ return new Promise(async (resolve, reject) => {
+
+ const SAVE_PATH = `/${scene}/{filemd5}{day}{hour}{min}{sec}{.suffix}`;
+
+ let params = {
+ 'method': 'post',
+ 'save_key': SAVE_PATH
+ }
+ // 获取签名
+ let res = await GetSign(params)
+ if (res.success) {
+ resolve(res.data)
+ } else {
+ reject({
+ code: res.code || '9999',
+ msg: res.msg
+ });
+ }
+
+ })
+ }
+ const getFileType = (name) => {
+ if (!name) return false;
+ var imgType = ["gif", "jpeg", "jpg", "bmp", "png"];
+ var videoType = ["avi", "wmv", "mkv", "mp4", "mov", "rm", "3gp", "flv", "mpg", "rmvb", "quicktime"];
+
+ if (RegExp("\.?(" + imgType.join("|") + ")$", "i").test(name.toLowerCase())) {
+ return 'image';
+ } else if (RegExp("\.(" + videoType.join("|") + ")$", "i").test(name.toLowerCase())) {
+ return 'video';
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ *
+ * @param {*} file 传入文件
+ * @param {String} secene 传入 'product'
+ * @param {String} type 传入 'product'
+ * @returns
+ */
+ const uploadCDNImg = (file, secene, type) => {
+ let filetype = file.path
+ console.log('filetype::',filetype)
+ if (!getFileType(filetype)) {
+ Taro.showToast({
+ title: "上传文件类型错误",
+ icon: "none",
+ duration: 3800
+ })
+ return false
+ }
+
+ return new Promise((resolve, reject) => {
+ getSecret(secene, type)
+ .then(result => {
+ let res:any = result
+ console.log('bucket', res.bucket);
+ var formdata = {
+ 'authorization': res.authorization,
+ 'policy': res.policy,
+ }
+
+ const uploadTask = Taro.uploadFile({
+ url: `${UPLOAD_CDN_URL}${res.bucket}`,
+ formData: formdata,
+ filePath: file.path,
+ name: 'file',
+ success: res => {
+ resolve(JSON.parse(`${res.data}`))
+ },
+ fail: err => {
+ console.log(err)
+ reject(err)
+ }
+ })
+
+ uploadTask.progress(res => {
+ console.log('上传进度', res.progress);
+ if (res.progress < 100) {
+ Taro.showLoading({
+ title: '上传中...'
+ })
+ } else {
+ Taro.hideLoading()
+ }
+ })
+ })
+ .catch(result => {
+ reject(result)
+ Taro.showToast({
+ title: "获取密钥失败!",
+ icon: "none",
+ duration: 3800
+ })
+ })
+ })
+ }
+
+ /**
+ * 上传手机图片
+ * @param cdn_upload_type //CDN 文件上传场景值
+ */
+ // product 产品相关,图片、纹理图等 全平台
+ // after-sale 售后(申请退货、退款)相关的、图片、视频 全平台
+ // mall 电子商城相关的 全平台
+ // logistics 物流(发货、提货)相关的、图片、视频 全平台
+ type cdn_upload_type_Param = 'product'|'after-sale'|'mall'|'logistics'
+ const getWxPhoto = (cdn_upload_type: cdn_upload_type_Param) => {
+ return new Promise((resolve, reject) => {
+ Taro.chooseImage({
+ count: 1,
+ sizeType: ['original', 'compressed'],
+ sourceType: ['album', 'camera'],
+ success: async function (res) {
+ const file = res.tempFiles[0]
+ try {
+ let data = await uploadCDNImg(file, cdn_upload_type, cdn_upload_type)
+ resolve(data)
+ } catch(res) {
+ reject(res)
+ }
+
+ }
+ })
+ })
+
+ }
+
+ return {
+ uploadCDNImg,
+ getWxPhoto
+ }
+
+}
diff --git a/yarn.lock b/yarn.lock
index 2957df2..54e78ac 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1368,15 +1368,15 @@
"webpack-format-messages" "^2.0.5"
"yauzl" "2.10.0"
-"@tarojs/plugin-framework-react@^3.4.11":
- "integrity" "sha512-eurnK1trU8JMkBlk3Mr0eKgLfiEF7dtkctnioyMgcuTfBIuI0TDXECidlhtSp5vJ2DkncuH1d+3abEgx8Nc8rw=="
- "resolved" "https://registry.npmmirror.com/@tarojs/plugin-framework-react/-/plugin-framework-react-3.4.11.tgz"
- "version" "3.4.11"
+"@tarojs/plugin-framework-react@^3.4.12":
+ "integrity" "sha512-kc03rvuotgQ2q7gYM9rjy7IV1tjT4ZcbdfdVs2e7olpdXcY9d4x1OqF3vYy+FT/f6WXgf/xs7cBa8Btw3J44iQ=="
+ "resolved" "https://registry.npmmirror.com/@tarojs/plugin-framework-react/-/plugin-framework-react-3.4.12.tgz"
+ "version" "3.4.12"
dependencies:
"@pmmmwh/react-refresh-webpack-plugin" "0.4.3"
"@prefresh/webpack" "^3.2.3"
- "@tarojs/runtime" "3.4.11"
- "@tarojs/shared" "3.4.11"
+ "@tarojs/runtime" "3.4.12"
+ "@tarojs/shared" "3.4.12"
"acorn" "^8.0.4"
"acorn-walk" "^8.0.0"
@@ -1471,12 +1471,12 @@
"lodash-es" "4.17.15"
"reflect-metadata" "^0.1.13"
-"@tarojs/runtime@3.4.11":
- "integrity" "sha512-vcr0Uo+K0rKR8LjXaFfqx9yYReejcvJ0HV6xly8KQxhP2Y4xmZrrhpeIYaOg97xqqtgKV+ama9NSgXa/kOeoBg=="
- "resolved" "https://registry.npmmirror.com/@tarojs/runtime/-/runtime-3.4.11.tgz"
- "version" "3.4.11"
+"@tarojs/runtime@3.4.12":
+ "integrity" "sha512-4bQIXoiMRQa0xzma4nm4MAmLpPtcZLOalmW/X8WtPjAVqENZ8o3FE2lZMHjhv62HhvyHf+XZWWk/V+VzAhjcGQ=="
+ "resolved" "https://registry.npmmirror.com/@tarojs/runtime/-/runtime-3.4.12.tgz"
+ "version" "3.4.12"
dependencies:
- "@tarojs/shared" "3.4.11"
+ "@tarojs/shared" "3.4.12"
"inversify" "5.1.1"
"lodash-es" "4.17.15"
"reflect-metadata" "^0.1.13"
@@ -1500,10 +1500,10 @@
"resolved" "https://registry.npmjs.org/@tarojs/shared/-/shared-3.3.10.tgz"
"version" "3.3.10"
-"@tarojs/shared@3.4.11":
- "integrity" "sha512-fQ/XccyLQYBPmynIiW8lOm3xXX40uV3TnZZIPuiwGgpApurVabSRlCa5HBeoI3qnTH92tHJon86ojOduaLHVPQ=="
- "resolved" "https://registry.npmmirror.com/@tarojs/shared/-/shared-3.4.11.tgz"
- "version" "3.4.11"
+"@tarojs/shared@3.4.12":
+ "integrity" "sha512-ELpEOA7Uzr5rQujfSmVS+ugTO22ZP8j3vi2AfrwJKg7zit1kZcBnDUIsN6+3Es3Vnp1oXsyQobWrgn30xYt2Ug=="
+ "resolved" "https://registry.npmmirror.com/@tarojs/shared/-/shared-3.4.12.tgz"
+ "version" "3.4.12"
"@tarojs/taro-h5@3.3.10":
"integrity" "sha512-hBVr0Ee7rGTD+cuK5ugPUHwbD0L9qOwMKHqMyUzqAb8LS6aYF3aIFDwVbCYx77ZgtpGZFUqXnpDCvnHofWVyTg=="
@@ -3805,6 +3805,11 @@
"whatwg-mimetype" "^2.2.0"
"whatwg-url" "^7.0.0"
+"dayjs@^1.11.3":
+ "integrity" "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A=="
+ "resolved" "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.3.tgz"
+ "version" "1.11.3"
+
"debug@^2.2.0", "debug@^2.3.3", "debug@^2.6.0", "debug@^2.6.9", "debug@2.6.9":
"integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
"resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
@@ -8275,9 +8280,9 @@
"supports-color" "^6.1.0"
"preact@^10.0.0", "preact@^10.4.0":
- "integrity" "sha512-giqJXP8VbtA1tyGa3f1n9wiN7PrHtONrDyE3T+ifjr/tTkg+2N4d/6sjC9WyJKv8wM7rOYDveqy5ZoFmYlwo4w=="
- "resolved" "https://registry.npmmirror.com/preact/-/preact-10.7.3.tgz"
- "version" "10.7.3"
+ "integrity" "sha512-AKGt0BsDSiAYzVS78jZ9qRwuorY2CoSZtf1iOC6gLb/3QyZt+fLT09aYJBjRc/BEcRc4j+j3ggERMdNE43i1LQ=="
+ "resolved" "https://registry.npmmirror.com/preact/-/preact-10.8.2.tgz"
+ "version" "10.8.2"
"prelude-ls@~1.1.2":
"integrity" "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
@@ -10170,7 +10175,7 @@
"tarojs@^2.1.1":
"integrity" "sha512-5wJ2fuiA6Fk/9zr76ZPrsJAe6UXI66gHbtwOWaxjrJZetRurfxDZUUw6wkSZB/ZxAhVhWlv9PMuNc7DlB+rtsA=="
- "resolved" "https://registry.npmmirror.com/tarojs/-/tarojs-2.1.1.tgz"
+ "resolved" "https://registry.npmjs.org/tarojs/-/tarojs-2.1.1.tgz"
"version" "2.1.1"
"terser-webpack-plugin@^1.4.3":