diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 5760be5..0000000 --- a/.editorconfig +++ /dev/null @@ -1,12 +0,0 @@ -# http://editorconfig.org -root = true - -[*] -indent_style = space -indent_size = 2 -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..ce8d250 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,7 @@ +/node_modules +/build +/key +/dist +project.*.json +*.lock +*.log diff --git a/.eslintrc b/.eslintrc index 430d6ac..c311d0c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,8 +1,9 @@ { - "extends": ["taro/react","plugin:react-hooks/recommended"], + "extends": ["taro/react","@aaronghx/eslint-config-react"], "rules": { - "react/jsx-uses-react": "off", - "react/react-in-jsx-scope": "off" - }, - "plugins": [""] + "no-console": "off", + "@typescript-eslint/no-shadow": "off", + "@typescript-eslint/no-unused-vars": "off", + "eqeqeq": "off" + } } diff --git a/.prettierrc.js b/.prettierrc.js deleted file mode 100644 index 4276115..0000000 --- a/.prettierrc.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - printWidth: 160, // 每行代码最大长度 - tabWidth: 2, //一个tab代表几个空格数,默认为80 - useTabs: false, //是否使用tab进行缩进,默认为false,表示用空格进行缩减 - semi: false, // 声明后带分号 - singleQuote: true, // 使用单引号 - jsxSingleQuote: true, // 使用单引号 - jsxBracketSameLine: true, // 启用jsx语法,> 放在末尾 - trailingComma: 'all', -} diff --git a/config/dev.js b/config/dev.js index b817b01..28b9106 100644 --- a/config/dev.js +++ b/config/dev.js @@ -1,4 +1,5 @@ const path = require('path') + module.exports = { env: { NODE_ENV: '"development"', diff --git a/config/index.js b/config/index.js index 51869ff..cb87b33 100644 --- a/config/index.js +++ b/config/index.js @@ -1,7 +1,8 @@ const path = require('path') const childProcess = require('child_process') -const versions = - childProcess.execSync('git rev-parse --abbrev-ref HEAD', { + +const versions + = childProcess.execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf8', }) != 'HEAD\n' ? childProcess.execSync('git rev-parse --abbrev-ref HEAD', { @@ -93,7 +94,7 @@ const config = { chunkFilename: 'css/[name].[chunkhash].css', }, devServer: { - https: true + https: true, }, publicPath: '/', staticDirectory: 'static', @@ -125,7 +126,7 @@ const config = { plugins: [['@tarojs/plugin-framework-react', { reactMode: 'concurrent' }]], } -module.exports = function (merge) { +module.exports = function(merge) { if (process.env.NODE_ENV === 'development') { return merge({}, config, require('./dev')) } diff --git a/config/pre.js b/config/pre.js index 6238010..b1a7230 100644 --- a/config/pre.js +++ b/config/pre.js @@ -1,4 +1,5 @@ const path = require('path') + module.exports = { env: { NODE_ENV: '"pre"', diff --git a/config/prod.js b/config/prod.js index 507a409..acf69d0 100644 --- a/config/prod.js +++ b/config/prod.js @@ -1,4 +1,5 @@ const path = require('path') + module.exports = { env: { NODE_ENV: '"production"', diff --git a/global.d.ts b/global.d.ts index 7dc913e..660d8ca 100644 --- a/global.d.ts +++ b/global.d.ts @@ -21,4 +21,3 @@ declare const CURRENT_VERSION: string declare const CURRENT_GITHASH: string declare const CURRENT_ENV: string declare const CURRENT_BASE_URL: string - diff --git a/package.json b/package.json index 33a3f04..5149d91 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,14 @@ { - "name": "EShop", + "name": "wechat-lymarket", "version": "1.0.0", "private": true, - "description": "电子商城", + "description": "重构内部商城小程序", "templateInfo": { "name": "default", "typescript": true, "css": "sass" }, + "author": "", "scripts": { "build:weapp": "taro build --type weapp", "build:swan": "taro build --type swan", @@ -28,14 +29,15 @@ "dev:jd": "npm run build:jd -- --watch", "dev:quickapp": "npm run build:quickapp -- --watch", "build:weapp:pre": "cross-env NODE_ENV=pre taro build --type weapp", - "dev:weapp:pre": "cross-env NODE_ENV=pre npm run build:weapp -- --watch" + "dev:weapp:pre": "cross-env NODE_ENV=pre npm run build:weapp -- --watch", + "lint": "eslint .", + "lint:fix": "eslint . --fix" }, "browserslist": [ "last 3 versions", "Android >= 4.1", "ios >= 8" ], - "author": "", "dependencies": { "@babel/runtime": "^7.7.7", "@tarojs/components": "3.5.5", @@ -59,6 +61,7 @@ "redux-thunk": "^2.4.1" }, "devDependencies": { + "@aaronghx/eslint-config-react": "^0.1.11", "@babel/core": "^7.8.0", "@pmmmwh/react-refresh-webpack-plugin": "0.5.4", "@tarojs/cli": "^3.5.5", @@ -69,16 +72,11 @@ "@types/qs": "^6.9.7", "@types/react": "^18.0.17", "@types/webpack-env": "^1.13.6", - "@typescript-eslint/eslint-plugin": "^4.15.1", - "@typescript-eslint/parser": "^4.15.1", "babel-preset-taro": "3.3.10", "classnames": "^2.3.2", "cross-env": "^7.0.3", - "eslint": "^6.8.0", - "eslint-config-taro": "3.5.5", - "eslint-plugin-import": "^2.12.0", - "eslint-plugin-react": "^7.8.2", - "eslint-plugin-react-hooks": "^4.2.0", + "eslint": "^8.28.0", + "eslint-config-taro": "3.5.7", "react-refresh": "0.11.0", "stylelint": "9.3.0", "taro-iconfont-svg": "^1.0.17", diff --git a/src/api/addressList.ts b/src/api/addressList.ts index 7bdac89..c95ca2b 100644 --- a/src/api/addressList.ts +++ b/src/api/addressList.ts @@ -1,48 +1,48 @@ -import { useRequest } from "@/use/useHttp" +import { useRequest } from '@/use/useHttp' /** * 获取行政地区列表 */ export const GetAddressListApi = () => { - return useRequest({ - url: `/v2/mp/district/list`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/district/list', + method: 'get', + }) } -//获取客户地址 +// 获取客户地址 export const mppurchaseraddresslist = () => { - return useRequest({ - url: `/v2/mp/purchaser/address/list`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/purchaser/address/list', + method: 'get', + }) } -//新增客户地址 +// 新增客户地址 export const mppurchaseraddress = () => { - return useRequest({ - url: `/v2/mp/purchaser/address`, - method: "post", - }) + return useRequest({ + url: '/v2/mp/purchaser/address', + method: 'post', + }) } -//获取编辑地址信息 +// 获取编辑地址信息 export const mppurchaseraddressget = () => { - return useRequest({ - url: `/v2/mp/purchaser/address`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/purchaser/address', + method: 'get', + }) } -//编辑收货地址信息 +// 编辑收货地址信息 export const mppurchaseraddressput = () => { - return useRequest({ - url: `/v2/mp/purchaser/address`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/purchaser/address', + method: 'put', + }) } -//删除收货地址信息 +// 删除收货地址信息 export const mppurchaseraddressdelect = () => { - return useRequest({ - url: `/v2/mp/purchaser/address`, - method: "delete", - }) + return useRequest({ + url: '/v2/mp/purchaser/address', + method: 'delete', + }) } diff --git a/src/api/cdn.ts b/src/api/cdn.ts index 1de707e..e3b45ae 100644 --- a/src/api/cdn.ts +++ b/src/api/cdn.ts @@ -6,7 +6,7 @@ import { useRequest } from '@/use/useHttp' */ export const GetSignApi = () => { return useRequest({ - url: `/v2/mp/cdn/token`, + url: '/v2/mp/cdn/token', method: 'get', }) } diff --git a/src/api/customer.ts b/src/api/customer.ts index f85a63d..9afde1f 100644 --- a/src/api/customer.ts +++ b/src/api/customer.ts @@ -1,37 +1,37 @@ import { useRequest } from '@/use/useHttp' -//获取客户信息 +// 获取客户信息 export const mppurchaser = () => { - return useRequest({ - url: `/v2/mp/purchaser`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/purchaser', + method: 'get', + }) } -//新建客户 +// 新建客户 export const mppurchaserpost = () => { - return useRequest({ - url: `/v2/mp/purchaser`, - method: "post", - }) + return useRequest({ + url: '/v2/mp/purchaser', + method: 'post', + }) } -//编辑客户 +// 编辑客户 export const mppurchaserput = () => { - return useRequest({ - url: `/v2/mp/purchaser`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/purchaser', + method: 'put', + }) } -//获取标签列表 +// 获取标签列表 export const mppurchaserlist = () => { - return useRequest({ - url: `/v2/mp/purchaser/label/list`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/purchaser/label/list', + method: 'get', + }) } -//保存标签 +// 保存标签 export const mppurchaserlabeladd = () => { - return useRequest({ - url: `/v2/mp/purchaser/label/add`, - method: "post", - }) + return useRequest({ + url: '/v2/mp/purchaser/label/add', + method: 'post', + }) } diff --git a/src/api/delivery/index.ts b/src/api/delivery/index.ts index 931f472..b9dea23 100644 --- a/src/api/delivery/index.ts +++ b/src/api/delivery/index.ts @@ -1,51 +1,51 @@ import { useRequest } from '@/use/useHttp' -//列表 +// 列表 export const DeliverNoticeOrderList = () => { return useRequest({ - url: `/v2/mp/deliveryNoticeOrder/list`, + url: '/v2/mp/deliveryNoticeOrder/list', method: 'get', }) } -//发货详情 +// 发货详情 export const DeliverNoticeOrder = () => { return useRequest({ - url: `/v2/mp/deliveryNoticeOrder`, + url: '/v2/mp/deliveryNoticeOrder', method: 'get', }) } -//发货附件上传 +// 发货附件上传 export const DeliveryNoticeOrderUpload = () => { return useRequest({ - url: `/v2/mp/deliveryNoticeOrder/upload`, + url: '/v2/mp/deliveryNoticeOrder/upload', method: 'put', }) } -//审核发货单 +// 审核发货单 export const DeliveryNoticeOrderAudit = () => { return useRequest({ - url: `/v2/mp/deliveryNoticeOrder/audit`, + url: '/v2/mp/deliveryNoticeOrder/audit', method: 'put', }) } -//采购退货的拒收接口 +// 采购退货的拒收接口 export const DeliveryNoticeOrderRejection = () => { return useRequest({ - url: `/v2/mp/deliveryNoticeOrder/rejection`, + url: '/v2/mp/deliveryNoticeOrder/rejection', method: 'put', }) } -//类型枚举 +// 类型枚举 export const EnumDeliveryNoticeTypeList = () => { return useRequest({ - url: `/v2/mp/enum/deliveryNoticeType/list`, + url: '/v2/mp/enum/deliveryNoticeType/list', method: 'get', }) } -//tabs枚举 +// tabs枚举 export const EnumSaleorderStatus = () => { return useRequest({ - url: `/v2/mp/enum/sale/order/status`, + url: '/v2/mp/enum/sale/order/status', method: 'get', }) } diff --git a/src/api/index.ts b/src/api/index.ts index 3c41cf2..41f4077 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,4 +1,6 @@ // 关于登录 +import { useRequest } from '@/use/useHttp' + export { LoginApi } from './login/index' export { @@ -48,15 +50,13 @@ export { SaleOrderDataFormdataFormStatus, SaleOrderDataFormApi, } from './statistic/index' - -import { useRequest } from '@/use/useHttp' /** * 系列列表 * @returns */ export const kindListApi = () => { return useRequest({ - url: `/v2/mp/product/kind/list`, + url: '/v2/mp/product/kind/list', method: 'get', }) } @@ -67,7 +67,7 @@ export const kindListApi = () => { */ export const ProductListApi = () => { return useRequest({ - url: `/v2/mp/product/list`, + url: '/v2/mp/product/list', method: 'get', }) } diff --git a/src/api/login/index.ts b/src/api/login/index.ts index f61273a..01471f4 100644 --- a/src/api/login/index.ts +++ b/src/api/login/index.ts @@ -1 +1 @@ -export {LoginApi} from './login' +export { LoginApi } from './login' diff --git a/src/api/login/login.ts b/src/api/login/login.ts index dadf130..3dffd26 100644 --- a/src/api/login/login.ts +++ b/src/api/login/login.ts @@ -6,7 +6,7 @@ import { useRequest } from '@/use/useHttp' */ export const LoginApi = () => { return useRequest({ - url: `/v2/mp/login`, + url: '/v2/mp/login', method: 'post', }) } diff --git a/src/api/newCollection.ts b/src/api/newCollection.ts index b435bef..a36f25d 100644 --- a/src/api/newCollection.ts +++ b/src/api/newCollection.ts @@ -1,37 +1,37 @@ import { useRequest } from '@/use/useHttp' -//收款单列表 +// 收款单列表 export const mpcashManagementOrderlist = () => { - return useRequest({ - url: `/v2/mp/cashManagementOrder/list`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/cashManagementOrder/list', + method: 'get', + }) } -//收款单详情 +// 收款单详情 export const mpcashManagementOrder = () => { - return useRequest({ - url: `/v2/mp/cashManagementOrder`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/cashManagementOrder', + method: 'get', + }) } -//收款账号 +// 收款账号 export const mpcashManagementOrderaccount = () => { - return useRequest({ - url: `/v2/mp/cashManagementOrder/account`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/cashManagementOrder/account', + method: 'get', + }) } -//新建收款单 +// 新建收款单 export const mpcashManagementOrderpost = () => { - return useRequest({ - url: `/v2/mp/cashManagementOrder`, - method: "post", - }) + return useRequest({ + url: '/v2/mp/cashManagementOrder', + method: 'post', + }) } -//扫描获取应收单的客户信息 +// 扫描获取应收单的客户信息 export const mpshouldCollectOrderpurchaser = () => { - return useRequest({ - url: `/v2/mp/shouldCollectOrder/purchaser`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/shouldCollectOrder/purchaser', + method: 'get', + }) } diff --git a/src/api/order.ts b/src/api/order.ts index 74e836f..f3c0a50 100644 --- a/src/api/order.ts +++ b/src/api/order.ts @@ -1,213 +1,213 @@ -import { useRequest } from "@/use/useHttp" +import { useRequest } from '@/use/useHttp' import { CAP_HTML_TO_IMAGE_BASE_URL } from '@/common/constant' export const mpenumsaleorderstatus = () => { - return useRequest({ - url: `/v2/mp/enum/filterMPSaleOrderStatus`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/enum/filterMPSaleOrderStatus', + method: 'get', + }) } /** * 获取订单列表 - * @returns + * @returns */ export const OrderListApi = () => { - return useRequest({ - url: `/v2/mp/saleOrder/list`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/saleOrder/list', + method: 'get', + }) } /** * 客户列表 - * @returns + * @returns */ export const ClientListApi = () => { - return useRequest({ - url: `/v2/mp/purchaser/list`, - method: "get" - }) + return useRequest({ + url: '/v2/mp/purchaser/list', + method: 'get', + }) } -//面料种类列表 +// 面料种类列表 export const mpproductcolorlist = () => { - return useRequest({ - url: `/v2/mp/product/color/list`, - method: "get" - }) + return useRequest({ + url: '/v2/mp/product/color/list', + method: 'get', + }) } -//购物车提交 +// 购物车提交 export const mpsaleOrderpreView = () => { - return useRequest({ - url: `/v2/mp/saleOrder/preView`, - method: "put" - }) + return useRequest({ + url: '/v2/mp/saleOrder/preView', + method: 'put', + }) } -//业务员枚举 +// 业务员枚举 export const mpenumsaleUserlist = () => { - return useRequest({ - url: `/v2/mp/enum/saleUser/list`, - method: "get" - }) + return useRequest({ + url: '/v2/mp/enum/saleUser/list', + method: 'get', + }) } -//订单详情 +// 订单详情 export const mpsaleOrder = () => { - return useRequest({ - url: `/v2/mp/saleOrder`, - method: "get" - }) + return useRequest({ + url: '/v2/mp/saleOrder', + method: 'get', + }) } -//取消订单 +// 取消订单 export const mpsaleOrdercancel = () => { - return useRequest({ - url: `/v2/mp/saleOrder/cancel`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/saleOrder/cancel', + method: 'put', + }) } -//再次购买 +// 再次购买 export const mpshoppingCartproductColorlist = () => { - return useRequest({ - url: `/v2/mp/shoppingCart/productColor/list`, - method: "post", - }) + return useRequest({ + url: '/v2/mp/shoppingCart/productColor/list', + method: 'post', + }) } -//获取账期付款 +// 获取账期付款 export const orderPaymentorderPaymentMethodInfo = () => { - return useRequest({ - url: `/v2/mp/orderPayment/orderPaymentMethodInfo`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/orderPayment/orderPaymentMethodInfo', + method: 'get', + }) } -//预收单获取接口信息 +// 预收单获取接口信息 export const orderPaymentpreCollectOrderorderPaymentMethodInfo = () => { - return useRequest({ - url: `/v2/mp/orderPayment/preCollectOrder/orderPaymentMethodInfo`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/orderPayment/preCollectOrder/orderPaymentMethodInfo', + method: 'get', + }) } -//确认交易 +// 确认交易 export const orderPaymentorderPaymentSubmission = () => { - return useRequest({ - url: `/v2/mp/orderPayment/orderPaymentSubmission`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/orderPayment/orderPaymentSubmission', + method: 'put', + }) } -//订单预支付提交 +// 订单预支付提交 export const orderPaymentpreCollectOrderorderPaymentSubmission = () => { - return useRequest({ - url: `/v2/mp/orderPayment/preCollectOrder/orderPaymentSubmission`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/orderPayment/preCollectOrder/orderPaymentSubmission', + method: 'put', + }) } /** * 获取在线支付二维码 */ export const GetPayCode = () => { - return useRequest({ - url: `/xima-caphtml/caphtml`, - base_url: CAP_HTML_TO_IMAGE_BASE_URL, - method: 'post', - }) + return useRequest({ + url: '/xima-caphtml/caphtml', + base_url: CAP_HTML_TO_IMAGE_BASE_URL, + method: 'post', + }) } /** * 获取退款码单 */ export const GetReturnPayCode = () => { - return useRequest({ - url: `/xima-caphtml/caphtml-return`, - base_url: CAP_HTML_TO_IMAGE_BASE_URL, - method: 'post', - }) + return useRequest({ + url: '/xima-caphtml/caphtml-return', + base_url: CAP_HTML_TO_IMAGE_BASE_URL, + method: 'post', + }) } -//编辑备注信息 +// 编辑备注信息 export const mpsaleOrderput = () => { - return useRequest({ - url: `/v2/mp/saleOrder`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/saleOrder', + method: 'put', + }) } -//修改销售单的收货地址 +// 修改销售单的收货地址 export const mpsaleOrderaddress = () => { - return useRequest({ - url: `/v2/mp/saleOrder/address`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/saleOrder/address', + method: 'put', + }) } -//关键字搜索历史 +// 关键字搜索历史 export const mpsearchHistorylist = () => { - return useRequest({ - url: `/v2/mp/searchHistory/list`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/searchHistory/list', + method: 'get', + }) } -//添加关键字搜索 +// 添加关键字搜索 export const mpsearchHistory = () => { - return useRequest({ - url: `/v2/mp/searchHistory`, - method: "post", - }) + return useRequest({ + url: '/v2/mp/searchHistory', + method: 'post', + }) } -//确认收货 +// 确认收货 export const mpsaleOrderreceive = () => { - return useRequest({ - url: `/v2/mp/saleOrder/receive`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/saleOrder/receive', + method: 'put', + }) } -//退货原因 +// 退货原因 export const mpenumreturnOrderreturnReason = () => { - return useRequest({ - url: `/v2/mp/enum/returnOrder/returnReason`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/enum/returnOrder/returnReason', + method: 'get', + }) } -//二次选择退货原因 +// 二次选择退货原因 export const mpenumreturnExplain = () => { - return useRequest({ - url: `/v2/mp/enum/returnExplain`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/enum/returnExplain', + method: 'get', + }) } -//货物状况 +// 货物状况 export const mpenumreturngoodsStatus = () => { - return useRequest({ - url: `/v2/mp/enum/return/goodsStatus`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/enum/return/goodsStatus', + method: 'get', + }) } -//申请退货 +// 申请退货 export const mpreturnApplyOrder = () => { - return useRequest({ - url: `/v2/mp/returnApplyOrder`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/returnApplyOrder', + method: 'put', + }) } -//退款说明 +// 退款说明 export const mpenumrefundExplainone = () => { - return useRequest({ - url: `/v2/mp/enum/refundExplain`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/enum/refundExplain', + method: 'get', + }) } -//提交订单 +// 提交订单 export const mpsaleOrderpost = () => { - return useRequest({ - url: `/v2/mp/saleOrder`, - method: "post", - }) + return useRequest({ + url: '/v2/mp/saleOrder', + method: 'post', + }) } -//修改销售单物流方式 +// 修改销售单物流方式 export const mpsaleOrdershipmentMode = () => { - return useRequest({ - url: `/v2/mp/saleOrder/shipmentMode`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/saleOrder/shipmentMode', + method: 'put', + }) } -//修改销售单物流方式 +// 修改销售单物流方式 export const EnumPurchaserType = () => { - return useRequest({ - url: `/v2/mp/enum/purchaserType`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/enum/purchaserType', + method: 'get', + }) } diff --git a/src/api/product/findColor.ts b/src/api/product/findColor.ts index a852b7b..512ed9c 100644 --- a/src/api/product/findColor.ts +++ b/src/api/product/findColor.ts @@ -1,12 +1,12 @@ -import { useRequest } from "@/use/useHttp" +import { useRequest } from '@/use/useHttp' /** * 颜色列表 * @returns */ export const FindColorListApi = () => { return useRequest({ - url: `/v2/mp/product/color/absorb/match`, + url: '/v2/mp/product/color/absorb/match', method: 'get', - pagination: true + pagination: true, }) } diff --git a/src/api/product/product.ts b/src/api/product/product.ts index 9d78ea1..71d5d0f 100644 --- a/src/api/product/product.ts +++ b/src/api/product/product.ts @@ -1,9 +1,9 @@ import { useRequest } from '@/use/useHttp' -//取色对比 +// 取色对比 export const productabsorbcontrast = () => { return useRequest({ - url: `/v2/mp/product/color/absorb/contrast`, + url: '/v2/mp/product/color/absorb/contrast', method: 'get', }) } @@ -14,7 +14,7 @@ export const productabsorbcontrast = () => { */ export const SelectProductListApi = () => { return useRequest({ - url: `/v2/mp/enum/product/list`, + url: '/v2/mp/enum/product/list', method: 'get', }) } diff --git a/src/api/product/takeColor.ts b/src/api/product/takeColor.ts index 740a6cb..6979c39 100644 --- a/src/api/product/takeColor.ts +++ b/src/api/product/takeColor.ts @@ -6,7 +6,7 @@ import { useRequest } from '@/use/useHttp' */ export const ColorListApi = () => { return useRequest({ - url: `/v2/mp/product/color/absorb/list`, + url: '/v2/mp/product/color/absorb/list', method: 'get', }) } @@ -17,7 +17,7 @@ export const ColorListApi = () => { */ export const ColorDetailedApi = () => { return useRequest({ - url: `/v2/mp/product/texture`, + url: '/v2/mp/product/texture', method: 'get', }) } @@ -28,7 +28,7 @@ export const ColorDetailedApi = () => { */ export const ColorSamplingSaveApi = () => { return useRequest({ - url: `/v2/mp/product/color/absorb`, + url: '/v2/mp/product/color/absorb', method: 'put', }) } @@ -39,7 +39,7 @@ export const ColorSamplingSaveApi = () => { */ export const TextureSaveApi = () => { return useRequest({ - url: `/v2/mp/product/texture`, + url: '/v2/mp/product/texture', method: 'put', }) } diff --git a/src/api/refound.ts b/src/api/refound.ts index 1f168b5..93b01b8 100644 --- a/src/api/refound.ts +++ b/src/api/refound.ts @@ -1,44 +1,44 @@ -import { useRequest } from "@/use/useHttp" +import { useRequest } from '@/use/useHttp' -//售后订单列表 +// 售后订单列表 export const mpreturnApplyOrderlist = () => { - return useRequest({ - url: `/v2/mp/returnApplyOrder/list`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/returnApplyOrder/list', + method: 'get', + }) } -//售后状态枚举 +// 售后状态枚举 export const mpenumreturnStage = () => { - return useRequest({ - url: `/v2/mp/enum/returnStage`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/enum/returnStage', + method: 'get', + }) } -//退款类型枚举 +// 退款类型枚举 export const mpenumreturnType = () => { - return useRequest({ - url: `/v2/mp/enum/returnType`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/enum/returnType', + method: 'get', + }) } -//售后详情 +// 售后详情 export const mpreturnApplyOrder = () => { - return useRequest({ - url: `/v2/mp/returnApplyOrder`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/returnApplyOrder', + method: 'get', + }) } -//取消退货 +// 取消退货 export const returnApplyOrdercancel = () => { - return useRequest({ - url: `/v2/mp/returnApplyOrder/cancel`, - method: "post", - }) + return useRequest({ + url: '/v2/mp/returnApplyOrder/cancel', + method: 'post', + }) } -//售后确认上传附件 +// 售后确认上传附件 export const returnApplyOrderuploadAccessory = () => { - return useRequest({ - url: `/v2/mp/returnApplyOrder/uploadAccessory`, - method: "put", - }) + return useRequest({ + url: '/v2/mp/returnApplyOrder/uploadAccessory', + method: 'put', + }) } diff --git a/src/api/search.ts b/src/api/search.ts index f32f067..2710845 100644 --- a/src/api/search.ts +++ b/src/api/search.ts @@ -1,8 +1,8 @@ -import { useRequest } from "@/use/useHttp" -//搜索商品 +import { useRequest } from '@/use/useHttp' +// 搜索商品 export const mpproductlist = () => { - return useRequest({ - url: `/v2/mp/product/list`, - method: "get", - }) + return useRequest({ + url: '/v2/mp/product/list', + method: 'get', + }) } diff --git a/src/api/shopping/index.ts b/src/api/shopping/index.ts index 84d76d8..f4da1ad 100644 --- a/src/api/shopping/index.ts +++ b/src/api/shopping/index.ts @@ -15,7 +15,7 @@ import { useRequest } from '@/use/useHttp' */ export const ShoppingCartDeleteApi = () => { return useRequest({ - url: `/v2/mp/shoppingCart/productColor`, + url: '/v2/mp/shoppingCart/productColor', method: 'delete', }) } @@ -25,7 +25,7 @@ export const ShoppingCartDeleteApi = () => { */ export const ShoppingCartListApi = () => { return useRequest({ - url: `/v2/mp/shoppingCart/productColor`, + url: '/v2/mp/shoppingCart/productColor', method: 'get', }) } @@ -35,7 +35,7 @@ export const ShoppingCartListApi = () => { */ export const AdjestShoppingCartApi = () => { return useRequest({ - url: `/v2/mp/shoppingCart/productColor`, + url: '/v2/mp/shoppingCart/productColor', method: 'put', }) } diff --git a/src/api/statistic/enum.ts b/src/api/statistic/enum.ts index bcf6329..a0e3183 100644 --- a/src/api/statistic/enum.ts +++ b/src/api/statistic/enum.ts @@ -1,4 +1,4 @@ -import { useRequest } from "@/use/useHttp" +import { useRequest } from '@/use/useHttp' /** * 销售类型下拉列表 @@ -6,18 +6,18 @@ import { useRequest } from "@/use/useHttp" */ export const EnumSalesTypeApi = () => { return useRequest({ - url: `/v2/mp/enum/saleType`, + url: '/v2/mp/enum/saleType', method: 'get', }) } /** * 营销部门下拉列表 - * @returns + * @returns */ - export const EnumMarketingDepartmentApi = () => { - return useRequest({ - url: `/v2/mp/enum/saleDepartment/list`, - method: "get" - }) +export const EnumMarketingDepartmentApi = () => { + return useRequest({ + url: '/v2/mp/enum/saleDepartment/list', + method: 'get', + }) } diff --git a/src/api/statistic/saleStatistic.ts b/src/api/statistic/saleStatistic.ts index 95dea17..ae99465 100644 --- a/src/api/statistic/saleStatistic.ts +++ b/src/api/statistic/saleStatistic.ts @@ -6,7 +6,7 @@ import { useRequest } from '@/use/useHttp' */ export const SaleOrderDataFormApi = () => { return useRequest({ - url: `/v2/mp/saleOrderDataForm`, + url: '/v2/mp/saleOrderDataForm', method: 'get', }) } @@ -17,7 +17,7 @@ export const SaleOrderDataFormApi = () => { */ export const ProductRankApi = () => { return useRequest({ - url: `/v2/mp/saleOrderDataForm/product/list`, + url: '/v2/mp/saleOrderDataForm/product/list', method: 'get', }) } @@ -28,7 +28,7 @@ export const ProductRankApi = () => { */ export const PurchaserRankApi = () => { return useRequest({ - url: `/v2/mp/saleOrderDataForm/purchaser/list`, + url: '/v2/mp/saleOrderDataForm/purchaser/list', method: 'get', }) } @@ -39,7 +39,7 @@ export const PurchaserRankApi = () => { */ export const SupplierRankApi = () => { return useRequest({ - url: `/v2/mp/saleOrderDataForm/supplier/list`, + url: '/v2/mp/saleOrderDataForm/supplier/list', method: 'get', }) } @@ -50,15 +50,15 @@ export const SupplierRankApi = () => { */ export const SalesmanRankApi = () => { return useRequest({ - url: `/v2/mp/saleOrderDataForm/saleUser/list`, + url: '/v2/mp/saleOrderDataForm/saleUser/list', method: 'get', }) } -//获取排行指标枚举 +// 获取排行指标枚举 export const SaleOrderDataFormdataFormStatus = () => { return useRequest({ - url: `/v2/mp/saleOrderDataForm/dataFormStatus`, + url: '/v2/mp/saleOrderDataForm/dataFormStatus', method: 'get', }) } diff --git a/src/api/takeDelivery/enum.ts b/src/api/takeDelivery/enum.ts index bcfd628..e884595 100644 --- a/src/api/takeDelivery/enum.ts +++ b/src/api/takeDelivery/enum.ts @@ -1,15 +1,15 @@ import { useRequest } from '@/use/useHttp' -//提货类型 +// 提货类型 export const EnumTakeGoodsOrderTypeList = () => { return useRequest({ - url: `/v2/mp/enum/takeGoodsOrderType/list`, + url: '/v2/mp/enum/takeGoodsOrderType/list', method: 'get', }) } -//tabs枚举 +// tabs枚举 export const EnumTakeGoodsOrderStatus = () => { return useRequest({ - url: `/v2/mp/enum/takeGoodsOrderStatus/list`, + url: '/v2/mp/enum/takeGoodsOrderStatus/list', method: 'get', }) } diff --git a/src/api/takeDelivery/takeDelivery.ts b/src/api/takeDelivery/takeDelivery.ts index 8108be7..8fc336c 100644 --- a/src/api/takeDelivery/takeDelivery.ts +++ b/src/api/takeDelivery/takeDelivery.ts @@ -1,44 +1,44 @@ import { useRequest } from '@/use/useHttp' import { CAP_HTML_TO_IMAGE_BASE_URL } from '@/common/constant' -//列表 +// 列表 export const TakeGoodsOrderList = () => { return useRequest({ - url: `/v2/mp/takeGoodsOrder/list`, + url: '/v2/mp/takeGoodsOrder/list', method: 'get', }) } -//拒收提货 +// 拒收提货 export const TakeGoodsOrderRefuse = () => { return useRequest({ - url: `/v2/mp/takeGoodsOrder/refuse`, + url: '/v2/mp/takeGoodsOrder/refuse', method: 'put', }) } -//审核提货单 +// 审核提货单 export const TakeGoodsOrderAudit = () => { return useRequest({ - url: `/v2/mp/takeGoodsOrder/audit`, + url: '/v2/mp/takeGoodsOrder/audit', method: 'put', }) } -//详情 +// 详情 export const TakeGoodsOrder = () => { return useRequest({ - url: `/v2/mp/takeGoodsOrder`, + url: '/v2/mp/takeGoodsOrder', method: 'get', }) } -//邀请码 +// 邀请码 export const UserInvitationInfoRecord = () => { return useRequest({ - url: `/v2/mp/user/invitationInfoRecord`, + url: '/v2/mp/user/invitationInfoRecord', method: 'get', }) } -//生成二维码 +// 生成二维码 export const GenBarCodeOrQrCode = () => { return useRequest({ - url: `/xima-caphtml/genBarcodeOrQrCode`, + url: '/xima-caphtml/genBarcodeOrQrCode', base_url: CAP_HTML_TO_IMAGE_BASE_URL, method: 'post', }) diff --git a/src/app.tsx b/src/app.tsx index 2363e5c..6dbceb6 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,38 +1,38 @@ -import { FC } from 'react' -import ContextBlueTooth from '@/use/contextBlueTooth' +import type { FC } from 'react' import { Provider } from 'react-redux' import configStore from './store' +import ContextBlueTooth from '@/use/contextBlueTooth' import './app.scss' import Taro, { onAppShow, useDidShow } from '@tarojs/taro' import { shareShop } from './common/util' -type ParamsType = { +interface ParamsType { children?: React.ReactNode } const store = configStore() -const App: FC = params => { +const App: FC = (params) => { const { children } = params if (process.env.TARO_ENV === 'weapp') { Taro.showShareMenu({ withShareTicket: true, }) - //分享 + // 分享 shareShop() - //检查版本更新 + // 检查版本更新 onAppShow(() => { const updateManager = Taro.getUpdateManager() - updateManager.onCheckForUpdate(function(res) { + updateManager.onCheckForUpdate((res) => { // 请求完新版本信息的回调 console.log('版本信息:', res.hasUpdate) }) - updateManager.onUpdateReady(function() { + updateManager.onUpdateReady(() => { Taro.showModal({ title: '更新提示', content: '新版本已经准备好,是否重启应用?', - success: function(res) { + success(res) { if (res.confirm) { // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 updateManager.applyUpdate() @@ -40,7 +40,7 @@ const App: FC = params => { }, }) }) - updateManager.onUpdateFailed(function() { + updateManager.onUpdateFailed(() => { console.log('新版本更新失败') }) }) diff --git a/src/common/Enumerate/BaseEnum/index.ts b/src/common/Enumerate/BaseEnum/index.ts index 2fbbb36..b6dd6fe 100644 --- a/src/common/Enumerate/BaseEnum/index.ts +++ b/src/common/Enumerate/BaseEnum/index.ts @@ -4,5 +4,5 @@ export const enum EnumSaleMode { Bulk = 0, Plate = 1, - BulkCut = 2 + BulkCut = 2, } diff --git a/src/common/bluetooth/color/colorDiff.js b/src/common/bluetooth/color/colorDiff.js index 73e380d..ae8066d 100644 --- a/src/common/bluetooth/color/colorDiff.js +++ b/src/common/bluetooth/color/colorDiff.js @@ -1,86 +1,76 @@ -module.exports = function(lab1, lab2){ - - var rgb2labArray1 = lab1; - var rgb2labArray2 = lab2; - - var l1 = rgb2labArray1[0]; - var a1 = rgb2labArray1[1]; - var b1 = rgb2labArray1[2]; - - var l2 = rgb2labArray2[0]; - var a2 = rgb2labArray2[1]; - var b2 = rgb2labArray2[2]; - - - var avg_lp = (l1 + l2) / 2; - var c1 = Math.sqrt(Math.pow(a1, 2) + Math.pow(b1, 2)); - var c2 = Math.sqrt(Math.pow(a2, 2) + Math.pow(b2, 2)); - var avg_c = (c1 + c2) / 2; - var g = (1- Math.sqrt(Math.pow(avg_c, 7) / (Math.pow(avg_c, 7) + Math.pow(25, 7)))) / 2; - - var a1p = a1 * (1 + g); - var a2p = a2 * (1 + g); - - var c1p = Math.sqrt(Math.pow(a1p, 2) + Math.pow(b1, 2)); - var c2p = Math.sqrt(Math.pow(a2p, 2) + Math.pow(b2, 2)); - - var avg_cp = (c1p + c2p) / 2; - - var h1p = rad2deg(Math.atan2(b1, a1p)); - if(h1p < 0){ - - h1p = h1p + 360; - } - - var h2p = rad2deg(Math.atan2(b2, a2p)); - if(h2p < 0){ - - h2p = h2p + 360; - } - - var avg_hp = Math.abs(h1p - h2p) > 180 ? (h1p + h2p + 360) / 2 : (h1p + h1p) / 2; - - var t = 1 - 0.17 * Math.cos(deg2rad(avg_hp - 30)) + 0.24 * Math.cos(deg2rad(2 * avg_hp)) + 0.32 * Math.cos(deg2rad(3 * avg_hp + 6)) - 0.2 * Math.cos(deg2rad(4 * avg_hp - 63)) - - var delta_hp = h2p - h1p; - if(Math.abs(delta_hp) > 180){ - if (h2p <= h1p) { - delta_hp += 360; - } - else { - delta_hp -= 360; - } - } - - var delta_lp = l2 - l1; - var delta_cp = c2p - c1p; - - delta_hp = 2 * Math.sqrt(c1p * c2p) * Math.sin(deg2rad(delta_hp) / 2); - - var s_l = 1 + ((0.015 * Math.pow(avg_lp - 50, 2)) / Math.sqrt(20 + Math.pow(avg_lp - 50, 2))); - var s_c = 1 + 0.045 * avg_cp - var s_h = 1 + 0.015 * avg_cp * t; - - var delta_ro = 30 * Math.exp( - (Math.pow((avg_hp - 275) / 25, 2))); - var r_c = 2 * Math.sqrt(Math.pow(avg_cp, 7) / (Math.pow(avg_cp, 7) + Math.pow(25, 7))); - var r_t = -r_c * Math.sin(2 * deg2rad(delta_ro)); - - var kl = 1, kc =1, kh = 1; +module.exports = function(lab1, lab2) { + const rgb2labArray1 = lab1 + const rgb2labArray2 = lab2 - var delta_e = Math.sqrt(Math.pow(delta_lp / (kl * s_l), 2) + Math.pow(delta_cp / (kc * s_c), 2) + Math.pow(delta_hp / (kh * s_h), 2) + r_t * (delta_cp / (kc * s_c)) * (delta_hp / (kh * s_h))) + const l1 = rgb2labArray1[0] + const a1 = rgb2labArray1[1] + const b1 = rgb2labArray1[2] - return delta_e - - - function rad2deg(rad){ - - return 360 * rad / (2 * Math.PI); - } - function deg2rad(deg){ - - return (2 * Math.PI * deg) / 360; - } + const l2 = rgb2labArray2[0] + const a2 = rgb2labArray2[1] + const b2 = rgb2labArray2[2] + + const avg_lp = (l1 + l2) / 2 + const c1 = Math.sqrt(Math.pow(a1, 2) + Math.pow(b1, 2)) + const c2 = Math.sqrt(Math.pow(a2, 2) + Math.pow(b2, 2)) + const avg_c = (c1 + c2) / 2 + const g = (1 - Math.sqrt(Math.pow(avg_c, 7) / (Math.pow(avg_c, 7) + Math.pow(25, 7)))) / 2 + + const a1p = a1 * (1 + g) + const a2p = a2 * (1 + g) + + const c1p = Math.sqrt(Math.pow(a1p, 2) + Math.pow(b1, 2)) + const c2p = Math.sqrt(Math.pow(a2p, 2) + Math.pow(b2, 2)) + + const avg_cp = (c1p + c2p) / 2 + + let h1p = rad2deg(Math.atan2(b1, a1p)) + if (h1p < 0) { + h1p = h1p + 360 + } + + let h2p = rad2deg(Math.atan2(b2, a2p)) + if (h2p < 0) { + h2p = h2p + 360 + } + + const avg_hp = Math.abs(h1p - h2p) > 180 ? (h1p + h2p + 360) / 2 : (h1p + h1p) / 2 + + const t = 1 - 0.17 * Math.cos(deg2rad(avg_hp - 30)) + 0.24 * Math.cos(deg2rad(2 * avg_hp)) + 0.32 * Math.cos(deg2rad(3 * avg_hp + 6)) - 0.2 * Math.cos(deg2rad(4 * avg_hp - 63)) + + let delta_hp = h2p - h1p + if (Math.abs(delta_hp) > 180) { + if (h2p <= h1p) { + delta_hp += 360 + } + else { + delta_hp -= 360 + } + } + + const delta_lp = l2 - l1 + const delta_cp = c2p - c1p + + delta_hp = 2 * Math.sqrt(c1p * c2p) * Math.sin(deg2rad(delta_hp) / 2) + + const s_l = 1 + ((0.015 * Math.pow(avg_lp - 50, 2)) / Math.sqrt(20 + Math.pow(avg_lp - 50, 2))) + const s_c = 1 + 0.045 * avg_cp + const s_h = 1 + 0.015 * avg_cp * t + + const delta_ro = 30 * Math.exp(-(Math.pow((avg_hp - 275) / 25, 2))) + const r_c = 2 * Math.sqrt(Math.pow(avg_cp, 7) / (Math.pow(avg_cp, 7) + Math.pow(25, 7))) + const r_t = -r_c * Math.sin(2 * deg2rad(delta_ro)) + + const kl = 1; const kc = 1; const kh = 1 + + const delta_e = Math.sqrt(Math.pow(delta_lp / (kl * s_l), 2) + Math.pow(delta_cp / (kc * s_c), 2) + Math.pow(delta_hp / (kh * s_h), 2) + r_t * (delta_cp / (kc * s_c)) * (delta_hp / (kh * s_h))) + + return delta_e + + function rad2deg(rad) { + return 360 * rad / (2 * Math.PI) + } + function deg2rad(deg) { + return (2 * Math.PI * deg) / 360 + } } - - - diff --git a/src/common/bluetooth/color/colorSpace.js b/src/common/bluetooth/color/colorSpace.js index 8d05344..3417197 100644 --- a/src/common/bluetooth/color/colorSpace.js +++ b/src/common/bluetooth/color/colorSpace.js @@ -4,10 +4,10 @@ import XyzCom from './xyz' import ColorDiff from './colorDiff' export const toRgb = (lab) => { - let xyz = LabCom.xyz(lab) - return XyzCom.rgb(xyz) + const xyz = LabCom.xyz(lab) + return XyzCom.rgb(xyz) } export const Ediff = (lab1, lab2) => { - return ColorDiff(lab1, lab2) -} \ No newline at end of file + return ColorDiff(lab1, lab2) +} diff --git a/src/common/bluetooth/color/lab.js b/src/common/bluetooth/color/lab.js index b4c0eab..6741df7 100644 --- a/src/common/bluetooth/color/lab.js +++ b/src/common/bluetooth/color/lab.js @@ -1,54 +1,54 @@ -var xyz = require('./xyz'); +const xyz = require('./xyz') module.exports = { - name: 'lab', - min: [0,-100,-100], - max: [100,100,100], - channel: ['lightness', 'a', 'b'], - alias: ['LAB', 'cielab'], + name: 'lab', + min: [0, -100, -100], + max: [100, 100, 100], + channel: ['lightness', 'a', 'b'], + alias: ['LAB', 'cielab'], - xyz: function(lab) { - var l = lab[0], - a = lab[1], - b = lab[2], - x, y, z, y2; + xyz(lab) { + const l = lab[0] + const a = lab[1] + const b = lab[2] + let x; let y; let z; let y2 - if (l <= 8) { - y = (l * 100) / 903.3; - y2 = (7.787 * (y / 100)) + (16 / 116); - } else { - y = 100 * Math.pow((l + 16) / 116, 3); - y2 = Math.pow(y / 100, 1/3); - } + if (l <= 8) { + y = (l * 100) / 903.3 + y2 = (7.787 * (y / 100)) + (16 / 116) + } + else { + y = 100 * Math.pow((l + 16) / 116, 3) + y2 = Math.pow(y / 100, 1 / 3) + } - x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3); + x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3) - z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3); + z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3) - return [x, y, z]; - } -}; + return [x, y, z] + }, +} +// extend xyz +xyz.lab = function(xyz) { + let x = xyz[0] + let y = xyz[1] + let z = xyz[2] + let l; let a; let b -//extend xyz -xyz.lab = function(xyz){ - var x = xyz[0], - y = xyz[1], - z = xyz[2], - l, a, b; + x /= 95.047 + y /= 100 + z /= 108.883 - x /= 95.047; - y /= 100; - z /= 108.883; + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116) + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116) + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116) - x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116); + l = (116 * y) - 16 + a = 500 * (x - y) + b = 200 * (y - z) - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -}; + return [l, a, b] +} diff --git a/src/common/bluetooth/color/rgb.js b/src/common/bluetooth/color/rgb.js index 60ff577..0aba252 100644 --- a/src/common/bluetooth/color/rgb.js +++ b/src/common/bluetooth/color/rgb.js @@ -1,9 +1,8 @@ - module.exports = { - name: 'rgb', - min: [0,0,0], - max: [255,255,255], - channel: ['red', 'green', 'blue'], - alias: ['RGB'] -}; + name: 'rgb', + min: [0, 0, 0], + max: [255, 255, 255], + channel: ['red', 'green', 'blue'], + alias: ['RGB'], +} diff --git a/src/common/bluetooth/color/xyz.js b/src/common/bluetooth/color/xyz.js index c6e2bee..f25cb3b 100644 --- a/src/common/bluetooth/color/xyz.js +++ b/src/common/bluetooth/color/xyz.js @@ -1,13 +1,12 @@ -var rgb = require('./rgb'); - -var xyz = { - name: 'xyz', - min: [0,0,0], - channel: ['X','Y','Z'], - alias: ['XYZ', 'ciexyz', 'cie1931'] -}; +const rgb = require('./rgb') +const xyz = { + name: 'xyz', + min: [0, 0, 0], + channel: ['X', 'Y', 'Z'], + alias: ['XYZ', 'ciexyz', 'cie1931'], +} /** * Whitepoint reference values with observer/illuminant @@ -15,57 +14,55 @@ var xyz = { * http://en.wikipedia.org/wiki/Standard_illuminant */ xyz.whitepoint = { - //1931 2° - 2: { - //incadescent - A:[109.85, 100, 35.585], - // B:[], - C: [98.074, 100, 118.232], - D50: [96.422, 100, 82.521], - D55: [95.682, 100, 92.149], - //daylight - D65: [95.045592705167, 100, 108.9057750759878], - D75: [94.972, 100, 122.638], - //flourescent - // F1: [], - F2: [99.187, 100, 67.395], - // F3: [], - // F4: [], - // F5: [], - // F6:[], - F7: [95.044, 100, 108.755], - // F8: [], - // F9: [], - // F10: [], - F11: [100.966, 100, 64.370], - // F12: [], - E: [100,100,100] - }, - - //1964 10° - 10: { - //incadescent - A:[111.144, 100, 35.200], - C: [97.285, 100, 116.145], - D50: [96.720, 100, 81.427], - D55: [95.799, 100, 90.926], - //daylight - D65: [94.811, 100, 107.304], - D75: [94.416, 100, 120.641], - //flourescent - F2: [103.280, 100, 69.026], - F7: [95.792, 100, 107.687], - F11: [103.866, 100, 65.627], - E: [100,100,100] - } -}; + // 1931 2° + 2: { + // incadescent + A: [109.85, 100, 35.585], + // B:[], + C: [98.074, 100, 118.232], + D50: [96.422, 100, 82.521], + D55: [95.682, 100, 92.149], + // daylight + D65: [95.045592705167, 100, 108.9057750759878], + D75: [94.972, 100, 122.638], + // flourescent + // F1: [], + F2: [99.187, 100, 67.395], + // F3: [], + // F4: [], + // F5: [], + // F6:[], + F7: [95.044, 100, 108.755], + // F8: [], + // F9: [], + // F10: [], + F11: [100.966, 100, 64.370], + // F12: [], + E: [100, 100, 100], + }, + // 1964 10° + 10: { + // incadescent + A: [111.144, 100, 35.200], + C: [97.285, 100, 116.145], + D50: [96.720, 100, 81.427], + D55: [95.799, 100, 90.926], + // daylight + D65: [94.811, 100, 107.304], + D75: [94.416, 100, 120.641], + // flourescent + F2: [103.280, 100, 69.026], + F7: [95.792, 100, 107.687], + F11: [103.866, 100, 65.627], + E: [100, 100, 100], + }, +} /** * Top values are the whitepoint’s top values, default are D65 */ -xyz.max = xyz.whitepoint[2].D65; - +xyz.max = xyz.whitepoint[2].D65 /** * Transform xyz to rgb @@ -74,39 +71,40 @@ xyz.max = xyz.whitepoint[2].D65; * * @return {Array} RGB values */ -xyz.rgb = function (_xyz, white) { - //FIXME: make sure we have to divide like this. Probably we have to replace matrix as well then - white = white || xyz.whitepoint[2].E; +xyz.rgb = function(_xyz, white) { + // FIXME: make sure we have to divide like this. Probably we have to replace matrix as well then + white = white || xyz.whitepoint[2].E - var x = _xyz[0] / white[0], - y = _xyz[1] / white[1], - z = _xyz[2] / white[2], - r, g, b; + const x = _xyz[0] / white[0] + const y = _xyz[1] / white[1] + const z = _xyz[2] / white[2] + let r; let g; let b - // assume sRGB - // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html - r = (x * 3.240969941904521) + (y * -1.537383177570093) + (z * -0.498610760293); - g = (x * -0.96924363628087) + (y * 1.87596750150772) + (z * 0.041555057407175); - b = (x * 0.055630079696993) + (y * -0.20397695888897) + (z * 1.056971514242878); + // assume sRGB + // http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html + r = (x * 3.240969941904521) + (y * -1.537383177570093) + (z * -0.498610760293) + g = (x * -0.96924363628087) + (y * 1.87596750150772) + (z * 0.041555057407175) + b = (x * 0.055630079696993) + (y * -0.20397695888897) + (z * 1.056971514242878) - r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r = (r * 12.92); + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r = (r * 12.92) - g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g = (g * 12.92); + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g = (g * 12.92) - b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b = (b * 12.92); + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b = (b * 12.92) - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); + r = Math.min(Math.max(0, r), 1) + g = Math.min(Math.max(0, g), 1) + b = Math.min(Math.max(0, b), 1) - return [r * 255, g * 255, b * 255]; + return [r * 255, g * 255, b * 255] } - - /** * RGB to XYZ * @@ -115,24 +113,22 @@ xyz.rgb = function (_xyz, white) { * @return {Array} XYZ channels */ rgb.xyz = function(rgb, white) { - var r = rgb[0] / 255, - g = rgb[1] / 255, - b = rgb[2] / 255; + let r = rgb[0] / 255 + let g = rgb[1] / 255 + let b = rgb[2] / 255 - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92) + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92) + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92) - var x = (r * 0.41239079926595) + (g * 0.35758433938387) + (b * 0.18048078840183); - var y = (r * 0.21263900587151) + (g * 0.71516867876775) + (b * 0.072192315360733); - var z = (r * 0.019330818715591) + (g * 0.11919477979462) + (b * 0.95053215224966); + const x = (r * 0.41239079926595) + (g * 0.35758433938387) + (b * 0.18048078840183) + const y = (r * 0.21263900587151) + (g * 0.71516867876775) + (b * 0.072192315360733) + const z = (r * 0.019330818715591) + (g * 0.11919477979462) + (b * 0.95053215224966) - white = white || xyz.whitepoint[2].E; + white = white || xyz.whitepoint[2].E - return [x * white[0], y * white[1], z * white[2]]; -}; + return [x * white[0], y * white[1], z * white[2]] +} - - -module.exports = xyz; +module.exports = xyz diff --git a/src/common/bluetooth/command.js b/src/common/bluetooth/command.js index 97292d0..4cd55b7 100644 --- a/src/common/bluetooth/command.js +++ b/src/common/bluetooth/command.js @@ -1,146 +1,141 @@ -import { uint32ToUint8Array, uint8ArrayToHex } from "./utils"; +import { uint32ToUint8Array, uint8ArrayToHex } from './utils' export class Command { - // 测量序号 - static measureId = 1; + // 测量序号 + static measureId = 1 - // 命令完整响应的长度 - responseSize = 0; - // 命令发送的数据 - content = new Uint8Array(0); - // 命令响应的数据 - response = new Uint8Array(0); - // 等待响应的超时时间 - timeout = 3000; - // 发送的数据是否需要生成和校验值 - needSign = true; - + // 命令完整响应的长度 + responseSize = 0 + // 命令发送的数据 + content = new Uint8Array(0) + // 命令响应的数据 + response = new Uint8Array(0) + // 等待响应的超时时间 + timeout = 3000 + // 发送的数据是否需要生成和校验值 + needSign = true - /** + /** * @param {Uint8Array|ArrayBuffer|number[]} content - * @param {number} responseSize - * @param {number} timeout + * @param {number} responseSize + * @param {number} timeout * @param {boolean} needSign */ - constructor(content, responseSize, timeout = 3000, needSign = true) { - if (content instanceof Uint8Array) { - this.content = content; - } else { - this.content = new Uint8Array(content); - } - this.responseSize = responseSize; - if (typeof timeout === 'number' && timeout >= 0) { - this.timeout = timeout; - } - this.needSign = needSign; + constructor(content, responseSize, timeout = 3000, needSign = true) { + if (content instanceof Uint8Array) { + this.content = content + } + else { + this.content = new Uint8Array(content) } - - /** + this.responseSize = responseSize + if (typeof timeout === 'number' && timeout >= 0) { + this.timeout = timeout + } + this.needSign = needSign + } + + /** * 返回一个 ArrayBuffer 数组, 用于发送 * @returns {ArrayBuffer[]} */ - get data() { - if (this.content.length === 0) throw new Error('正文内容不能为空'); - const data = []; - const b = new Uint8Array(this.content.buffer); - if (this.needSign) { - b[b.length - 1] = Command.getSign(b); - } - for (let i = 0; i < b.length; i += 20) { - data.push(b.slice(i, i + 20).buffer); - } - return data; + get data() { + if (this.content.length === 0) { throw new Error('正文内容不能为空') } + const data = [] + const b = new Uint8Array(this.content.buffer) + if (this.needSign) { + b[b.length - 1] = Command.getSign(b) } - - /** 是否接收完成 */ - get isComplete() { - return this.response.length >= this.responseSize; + for (let i = 0; i < b.length; i += 20) { + data.push(b.slice(i, i + 20).buffer) } + return data + } - /** 是否有效 */ - get isValid() { - return Command.getSign(this.response) === this.response[this.response.length - 1]; - } + /** 是否接收完成 */ + get isComplete() { + return this.response.length >= this.responseSize + } - /** + /** 是否有效 */ + get isValid() { + return Command.getSign(this.response) === this.response[this.response.length - 1] + } + + /** * 填充响应数组 - * @param {ArrayBuffer} buffer + * @param {ArrayBuffer} buffer */ - fillResponse(buffer) { - this.response = new Uint8Array([...this.response, ...(new Uint8Array(buffer))]); - } + fillResponse(buffer) { + this.response = new Uint8Array([...this.response, ...(new Uint8Array(buffer))]) + } - - /** + /** * 获取和校验值 - * @param {ArrayBuffer|Uint8Array} buffer + * @param {ArrayBuffer|Uint8Array} buffer */ - static getSign(buffer) { - const _b = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer); - let sum = 0; - _b.slice(0, _b.length - 1).forEach(i => sum += i); - return new Uint8Array([sum])[0]; - } + static getSign(buffer) { + const _b = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer) + let sum = 0 + _b.slice(0, _b.length - 1).forEach(i => sum += i) + return new Uint8Array([sum])[0] + } - // 唤醒命令 - static WakeUp = new Command([0xf0], 0, 0, false); + // 唤醒命令 + static WakeUp = new Command([0xF0], 0, 0, false) - /** + /** * 获取测量命令 - * @param {number} mode + * @param {number} mode */ - static measure(mode = 0) { - Command.measureId += 1; - const measureId = uint32ToUint8Array(Command.measureId); - return new Command([0xbb, 1, mode, ...measureId, 0, 0xff, 0], 10, 1500); - } + static measure(mode = 0) { + Command.measureId += 1 + const measureId = uint32ToUint8Array(Command.measureId) + return new Command([0xBB, 1, mode, ...measureId, 0, 0xFF, 0], 10, 1500) + } - /** + /** * 获取测量数据 (Lab) - * @param {number} mode + * @param {number} mode */ - static getLab(mode = 0) { - return new Command([0xbb, 3, mode, 0, 0, 0, 0, 0, 0xff, 0], 20, 1500); - } + static getLab(mode = 0) { + return new Command([0xBB, 3, mode, 0, 0, 0, 0, 0, 0xFF, 0], 20, 1500) + } - /** + /** * 获取测量数据 (RGB) - * @param {number} mode + * @param {number} mode */ - static getRGB(mode = 0) { - return new Command([0xbb, 4, mode, 0, 0, 0, 0, 0, 0xff, 0], 20, 1500); - } + static getRGB(mode = 0) { + return new Command([0xBB, 4, mode, 0, 0, 0, 0, 0, 0xFF, 0], 20, 1500) + } - /** + /** * 获取测量的光谱数据 * @param {number} mode */ - static getSpectral(mode = 0) { - return new Command([0xbb, 2, 0x10 + mode, 0, 0, 0 ,0 ,0, 0xff, 0], 200, 5000); - } + static getSpectral(mode = 0) { + return new Command([0xBB, 2, 0x10 + mode, 0, 0, 0, 0, 0, 0xFF, 0], 200, 5000) + } - /** + /** * 白校准 * @param {number} check 是否判断校准成功 1 判断 0 不判断 */ - static whiteCalibrate(check = 1) { - return new Command([0xbb, 0x11, check, 0, 0, 0, 0, 0, 0xff, 0], 10, 1500); - } + static whiteCalibrate(check = 1) { + return new Command([0xBB, 0x11, check, 0, 0, 0, 0, 0, 0xFF, 0], 10, 1500) + } - - /** + /** * 黑校准 * @param {number} check 是否判断校准成功 */ - static blackCalibrate(check = 1) { - return new Command([0xbb, 0x10, check, 0, 0, 0, 0, 0, 0xff, 0], 10, 1500); - } + static blackCalibrate(check = 1) { + return new Command([0xBB, 0x10, check, 0, 0, 0, 0, 0, 0xFF, 0], 10, 1500) + } + /** 获取校准状态 */ + static GetCalibrationInf = new Command([0xBB, 0x1E, 0, 0, 0, 0, 0, 0, 0xFF, 0], 20, 1500) - /** 获取校准状态 */ - static GetCalibrationInf = new Command([0xbb, 0x1e, 0, 0, 0, 0, 0, 0, 0xff, 0], 20, 1500); - - - - static GetDeviceInf = new Command([0xbb, 0x12, 0x01, 0, 0, 0, 0, 0, 0xff, 0], 200, 5000); -} \ No newline at end of file + static GetDeviceInf = new Command([0xBB, 0x12, 0x01, 0, 0, 0, 0, 0, 0xFF, 0], 200, 5000) +} diff --git a/src/common/bluetooth/utils.js b/src/common/bluetooth/utils.js index 9c4b018..d6b0ab2 100644 --- a/src/common/bluetooth/utils.js +++ b/src/common/bluetooth/utils.js @@ -1,70 +1,65 @@ /** * Uint32 转 Uint8 数组 - * @param {number} n + * @param {number} n */ export function uint32ToUint8Array(n) { - return new Uint8Array(new Uint32Array([n]).buffer); + return new Uint8Array(new Uint32Array([n]).buffer) } /** * Uint8 数组 转 Float32 - * @param {Uint8Array} raw + * @param {Uint8Array} raw */ export function uint8ArrayToFloat32(raw) { - return new Float32Array(raw.buffer)[0]; + return new Float32Array(raw.buffer)[0] } - /** * Uint8 数组 转 Uint16 - * @param {Uint8Array} raw + * @param {Uint8Array} raw */ export function uint8ArrayToUint16(raw) { - return new Uint16Array(raw.buffer)[0]; + return new Uint16Array(raw.buffer)[0] } - /** * Uint8 数组转 Uint32 - * @param {Uint8Array} raw - * @returns + * @param {Uint8Array} raw + * @returns */ export function uint8ArrayToUnit32(raw) { - return new Uint32Array(raw.buffer)[0]; + return new Uint32Array(raw.buffer)[0] } - /** * 等待指定时长 - * @param {number} duration + * @param {number} duration */ export function waitFor(duration) { - return new Promise(resolve => { - setTimeout(resolve, duration); - }); + return new Promise((resolve) => { + setTimeout(resolve, duration) + }) } - /** * uint8 数组转 hex 字符串 - * @param {Uint8Array} raw + * @param {Uint8Array} raw */ export function uint8ArrayToHex(raw) { - const s = []; - raw.forEach(i => { - const b = i.toString(16); - s.push(b.length > 1 ? b : `0${b}`); - }); - return s.join(' '); + const s = [] + raw.forEach((i) => { + const b = i.toString(16) + s.push(b.length > 1 ? b : `0${b}`) + }) + return s.join(' ') } - // 二进制转字符串(ascii) export function bufferToString(buffer) { - let str = ""; - for (let code of buffer) { - if (code === 0) break; - str += utf82string(code); - } - return str; -} \ No newline at end of file + let str = '' + for (const code of buffer) { + if (code === 0) { break } + str += utf82string(code) + } + return str +} diff --git a/src/common/common.ts b/src/common/common.ts index 5ed240c..f460e8e 100644 --- a/src/common/common.ts +++ b/src/common/common.ts @@ -10,9 +10,9 @@ import Qs from 'qs' type ParamLink = 'navigateTo' | 'switchTab' | 'reLaunch' | 'redirectTo' export const goLink = (path = '', params = {}, way: ParamLink = 'navigateTo') => { if (path) { - let params_str = Qs.stringify(params) + const params_str = Qs.stringify(params) console.log('params_str==>', params_str) - path = params_str ? path + '?' + params_str : path + path = params_str ? `${path}?${params_str}` : path Taro[way]({ url: path }) } } @@ -24,12 +24,15 @@ export const goLink = (path = '', params = {}, way: ParamLink = 'navigateTo') => export const isEmptyObject = (object: any) => { if (object == undefined || object == null || Number.isNaN(object)) { return true - } else { + } + else { if (object.constructor == Object) { return Reflect.ownKeys(object).length == 0 - } else if (object.constructor == Array) { + } + else if (object.constructor == Array) { return object.length == 0 - } else if (object.constructor == String) { + } + else if (object.constructor == String) { return object == '' } } @@ -38,7 +41,7 @@ export const isEmptyObject = (object: any) => { /** * 表单检索 - * @param data + * @param data * @param rules = { account: [{ message: "请输入正确的用户名", @@ -52,45 +55,48 @@ export const isEmptyObject = (object: any) => { // regex: /\d/ }] }; - * @param message - * @returns + * @param message + * @returns */ -export const retrieval = (data: any, rules?: Object, message: string = '请填写完信息') => { - return new Promise((resolve, reject) => { - if (rules) { - const keys = Reflect.ownKeys(rules) - const result = keys.some((key: any) => { - for (let item of (rules as any)[key]) { - let _res = false - if (item.validator) { - if (item.validator(data[key], item)) { - _res = true - } - } else if (item.regex) { - if (!item.regex.test(data[key])) { - _res = true - } - } else { - if (isEmptyObject(data[key])) { - _res = true - } - } - message = item.message - return _res - } - }) - if (result) { - reject(message) - } - } else { - const keys = Reflect.ownKeys(data) - if (keys.some((key: any) => isEmptyObject(data[key]))) { - reject(message) - } - } - resolve(null) - }) -} +// export const retrieval = (data: any, rules?: Object, message = '请填写完信息') => { +// return new Promise((resolve, reject) => { +// if (rules) { +// const keys = Reflect.ownKeys(rules) +// const result = keys.some((key: any) => { +// for (const item of (rules as any)[key]) { +// let _res = false +// if (item.validator) { +// if (item.validator(data[key], item)) { +// _res = true +// } +// } +// else if (item.regex) { +// if (!item.regex.test(data[key])) { +// _res = true +// } +// } +// else { +// if (isEmptyObject(data[key])) { +// _res = true +// } +// } +// message = item.message +// return _res +// } +// }) +// if (result) { +// reject(message) +// } +// } +// else { +// const keys = Reflect.ownKeys(data) +// if (keys.some((key: any) => isEmptyObject(data[key]))) { +// reject(message) +// } +// } +// resolve(null) +// }) +// } /** * toast提示 */ @@ -107,7 +113,7 @@ export const alert = { icon: 'error', }) }, - loading(title: string, mask: boolean = false) { + loading(title: string, mask = false) { Taro.showToast({ title, icon: 'loading', @@ -120,7 +126,7 @@ export const alert = { icon: 'none', }) }, - showLoading(title: string, mask: boolean = true) { + showLoading(title: string, mask = true) { Taro.showLoading({ title, mask }) }, hideLoading() { @@ -143,13 +149,12 @@ export const formatKbPrice = (number: string) => { return ret.reverse().join('') } - /** * 验证权限 * @param {权限key} key * @returns */ -export const checkKey = (key = "") => { - let getUser = JSON.parse(Taro.getStorageSync("userInfo")); - return getUser.mp_role_access_list?.includes(key); -}; +export const checkKey = (key = '') => { + const getUser = JSON.parse(Taro.getStorageSync('userInfo')) + return getUser.mp_role_access_list?.includes(key) +} diff --git a/src/common/constant.ts b/src/common/constant.ts index d061333..da5ee1c 100644 --- a/src/common/constant.ts +++ b/src/common/constant.ts @@ -19,30 +19,30 @@ export const BASE_URL = CURRENT_BASE_URL // CDN // 生成密钥 -export const GET_UPLOAD_SIGN = `/upyun/getsign` // 请求签名 url -export const UPLOAD_CDN_URL = `https://v0.api.upyun.com/` +export const GET_UPLOAD_SIGN = '/upyun/getsign' // 请求签名 url +export const UPLOAD_CDN_URL = 'https://v0.api.upyun.com/' // cdn export const IMG_CND_Prefix = CURRENT_ENV.includes('production') ? 'https://cdn.zzfzyc.com' : 'https://test.cdn.zzfzyc.com' -//在线支付图片baseUrl +// 在线支付图片baseUrl export const CAP_HTML_TO_IMAGE_BASE_URL = CURRENT_ENV.includes('production') ? 'https://www.zzfzyc.com' : 'https://test.zzfzyc.com' // 上传图片视频 export const CDN_UPLOAD_IMG = `${UPLOAD_CDN_URL || ''}` -//appid +// appid export const WX_APPID = 'wx64fe67f111d52457' -export const LIST_EMPTY_IMAGE = IMG_CND_Prefix + '/list_empty.png' +export const LIST_EMPTY_IMAGE = `${IMG_CND_Prefix}/list_empty.png` -export const EMPTY_IMAGE = IMG_CND_Prefix + '/empty.png' +export const EMPTY_IMAGE = `${IMG_CND_Prefix}/empty.png` -export const SEARCH_EMPTY_IMAGE = IMG_CND_Prefix + '/search_empty.png' +export const SEARCH_EMPTY_IMAGE = `${IMG_CND_Prefix}/search_empty.png` -//场景值 +// 场景值 export const SCENE = { - SearchScene: 0, //商城面料搜索 + SearchScene: 0, // 商城面料搜索 } -//支付码单跳转链接 +// 支付码单跳转链接 export const PAY_H5_CODE_URL = CURRENT_ENV.includes('production') ? 'https://www.zzfzyc.com/cashier' : 'https://test.zzfzyc.com/cashier' diff --git a/src/common/enum.ts b/src/common/enum.ts index 88b9f5a..c246fe9 100644 --- a/src/common/enum.ts +++ b/src/common/enum.ts @@ -1,73 +1,72 @@ -//订单状态枚举 +// 订单状态枚举 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:'已收货'}, // 已收货 - SaleOrderStatusComplete : {value:4, label:'已完成'}, // 已完成 - SaleOrderStatusRefund : {value:6, label:'已退款'}, // 已退款 - SaleOrderStatusCancel : {value:5, label:'已取消'}, // 已取消 + 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: '已收货' }, // 已收货 + SaleOrderStatusComplete: { value: 4, label: '已完成' }, // 已完成 + SaleOrderStatusRefund: { value: 6, label: '已退款' }, // 已退款 + SaleOrderStatusCancel: { value: 5, label: '已取消' }, // 已取消 } -//售后单状态枚举 +// 售后单状态枚举 export const AFTER_ORDER_STATUS = { - 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:'已拒绝'}, // 已拒绝 + 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:2, label:'预存款'}, - PaymentMethodAccountPeriod : {value:3, label:'账期'}, - PaymentMethodofflineRemittance: {value:1, label:'线下汇款'}, - PaymentMethodScanCodeToPay: {value:4, label:'扫码支付'}, - PaymentMethodCashOnDelivery: {value:5, label:'货到付款'}, + PaymentMethodPreDeposit: { value: 2, label: '预存款' }, + PaymentMethodAccountPeriod: { value: 3, label: '账期' }, + PaymentMethodofflineRemittance: { value: 1, label: '线下汇款' }, + PaymentMethodScanCodeToPay: { value: 4, label: '扫码支付' }, + PaymentMethodCashOnDelivery: { value: 5, label: '货到付款' }, } - -//订单类型 +// 订单类型 export const SALE_MODE = { - SaLeModeBulk: {value:0, label:'大货'}, - SaleModeLengthCut: {value:1, label:'剪版'}, - SaLeModeWeightCut: {value:2, label:'散剪'}, -} + SaLeModeBulk: { value: 0, label: '大货' }, + SaleModeLengthCut: { value: 1, label: '剪版' }, + SaLeModeWeightCut: { value: 2, label: '散剪' }, +} -//分享场景枚举 +// 分享场景枚举 export const SHARE_SCENE = { - ShareDetail: {value:1, label:'详情分享'}, - SharePage : {value:2, label:'页面分享'}, + ShareDetail: { value: 1, label: '详情分享' }, + SharePage: { value: 2, label: '页面分享' }, } -//订阅消息 -export const SUBSCRIPTION_MESSAGE_SCENE = { - SubmitOrder: {value:1, label:'确认下单'}, - ToPay : {value:2, label:'去付款'}, - ApplyGoods: {value:3, label: '申请退款'} +// 订阅消息 +export const SUBSCRIPTION_MESSAGE_SCENE = { + SubmitOrder: { value: 1, label: '确认下单' }, + ToPay: { value: 2, label: '去付款' }, + ApplyGoods: { value: 3, label: '申请退款' }, } -//应收单退款状态枚举 +// 应收单退款状态枚举 export const REFUND_STATUS = { - ShouldCollectOrderRefundTypeUnknown: {value:0, label:'未知退款'}, - ShouldCollectOrderRefundTypeAdvanceReceiptRefund: {value:1, label:'预收退款'}, - ShouldCollectOrderRefundTypeReturnForRefund: {value:2, label:'退货退款'}, - ShouldCollectOrderRefundTypeSalesRefund: {value:3, label:'销售退款'}, + ShouldCollectOrderRefundTypeUnknown: { value: 0, label: '未知退款' }, + ShouldCollectOrderRefundTypeAdvanceReceiptRefund: { value: 1, label: '预收退款' }, + ShouldCollectOrderRefundTypeReturnForRefund: { value: 2, label: '退货退款' }, + ShouldCollectOrderRefundTypeSalesRefund: { value: 3, label: '销售退款' }, } -//申请单退款状态枚举 +// 申请单退款状态枚举 export const REFUND_STATUS_ORDER = { - ReturnApplyOrderTypeAdvanceReceiptRefund: {value:2, label:'预收退款'}, // 预收退款 - ReturnApplyOrderTypeReturnForRefund: {value:1, label:'退货退款'}, // 退货退款 - ReturnApplyOrderTypeSalesRefund: {value:3, label:'销售退款'}, // 销售退款 -} \ No newline at end of file + ReturnApplyOrderTypeAdvanceReceiptRefund: { value: 2, label: '预收退款' }, // 预收退款 + ReturnApplyOrderTypeReturnForRefund: { value: 1, label: '退货退款' }, // 退货退款 + ReturnApplyOrderTypeSalesRefund: { value: 3, label: '销售退款' }, // 销售退款 +} diff --git a/src/common/format.js b/src/common/format.js index 3d0d573..2dcf9eb 100644 --- a/src/common/format.js +++ b/src/common/format.js @@ -20,7 +20,8 @@ export const formatRemoveHashTag = (val = '') => { export const formatHashTag = (code = '', name = '', mode = 'both') => { if (mode == 'both') { return `${formatRemoveHashTag(code)}# ${name}` - } else if (mode == 'name') { + } + else if (mode == 'name') { return `${name}` } } @@ -45,7 +46,7 @@ export const meterDigit = 100 * @returns */ export const formatPriceDiv = (val, digit = Digit, priceStatus = false) => { - let res = strip(Number(val / digit)) || 0 + const res = strip(Number(val / digit)) || 0 return priceStatus ? numberWithCommas({ number: res }) : res } /** @@ -94,13 +95,13 @@ export const formatWeightDiv = (val, digit = weightDigit) => { export const formatDateTime = (val, fmt = 'YYYY-MM-DD HH:mm:ss') => { if (val) { - let time = new Date(val) - let Y = time.getFullYear() - let M = time.getMonth() + 1 - let d = time.getDate() - let h = time.getHours() - let m = time.getMinutes() - let s = time.getSeconds() + const time = new Date(val) + const Y = time.getFullYear() + const M = time.getMonth() + 1 + const d = time.getDate() + const h = time.getHours() + const m = time.getMinutes() + const s = time.getSeconds() fmt = fmt .replace('YYYY', Y) @@ -111,7 +112,8 @@ export const formatDateTime = (val, fmt = 'YYYY-MM-DD HH:mm:ss') => { .replace('ss', s.toString().padStart(2, '0')) return fmt - } else { + } + else { return val } } @@ -141,18 +143,19 @@ export const formatMillionYuan = (num, digit = 10000) => { * @param {*} x * @returns */ -export const toDecimal2 = x => { - var f = parseFloat(x) +export const toDecimal2 = (x) => { + let f = parseFloat(x) if (isNaN(f)) { return 0 } - f = f + '' - let index = f.lastIndexOf('.') + f = `${f}` + const index = f.lastIndexOf('.') if (index >= 0) { - let decimal = f.substring(index + 1) + const decimal = f.substring(index + 1) if (decimal.length == 1) { - f = f.substring(0, index + 1) + decimal + '0' - } else { + f = `${f.substring(0, index + 1) + decimal}0` + } + else { f = f.substring(0, index + 1) + decimal.substring(0, 2) } } @@ -173,23 +176,24 @@ export const withBaseUrl = function(url) { * 去除前缀 //xxx.com 或者 http://xxx.com 或者 https://xxx.com * @param {string} url url路径 */ -export const breakupUrl = url => { +export const breakupUrl = (url) => { return url?.replace(URL_REGEXP, '') ?? url } /** * 拼接前缀 http://xxx.com + /asdfsafdas/154531asdf465413.png * @param {string} url url路径 */ -export const jointUrl = url => { +export const jointUrl = (url) => { return withBaseUrl(url) ? url : `${IMG_CND_Prefix}${url}` } export const formatUrl = (url, suffix = '!w200') => { if (url) { - url = url.includes(',') ? url.split(',')[0] : url - return withBaseUrl(url) ? url + suffix : jointUrl(url) + suffix - } else { - return IMG_CND_Prefix + '/mall/no_img.png' + url = url.includes(',') ? url.split(',')[0] : url + return withBaseUrl(url) ? url + suffix : jointUrl(url) + suffix + } + else { + return `${IMG_CND_Prefix}/mall/no_img.png` } } @@ -202,8 +206,9 @@ export const formatUrl = (url, suffix = '!w200') => { export const formatImgUrl = (url, suffix = '!w200') => { if (url) { return url.includes('http') ? url + suffix : IMG_CND_Prefix + url + suffix - } else { - return IMG_CND_Prefix + '/mall/no_img.png' + } + else { + return `${IMG_CND_Prefix}/mall/no_img.png` } } @@ -216,11 +221,13 @@ export const formatImgUrl = (url, suffix = '!w200') => { */ 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: 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' } + } + else { + return { status: 3, value: `${IMG_CND_Prefix}/mall/no_img.png` } } } @@ -233,7 +240,8 @@ export const numberWithCommas = ({ number = 0, digit = 2 }) => { if (!isNaN(Number(number))) { // return parseFloat(number).toFixed(digit).replace(/^\B(? { // 计算数值大于指定值 export const setPriceUnit = (num, cls) => { if (cls) { - let res = formatMillionYuan(num, 1000) + const res = formatMillionYuan(num, 1000) return { cls: res.million ? cls : '', num: res.num, } - } else if (num > 100000000) { - let res = formatMillionYuan(num, 100000000) + } + else if (num > 100000000) { + const res = formatMillionYuan(num, 100000000) return { cls: res.million ? 's-e' : '', num: res.num, } - } else { - let res = formatMillionYuan(num) + } + else { + const res = formatMillionYuan(num) return { cls: res.million ? 's-w' : '', num: res.num, @@ -261,30 +271,34 @@ export const setPriceUnit = (num, cls) => { } } -//不四舍五入, val:原数据,num:保留位数 +// 不四舍五入, val:原数据,num:保留位数 const noScale = (val, num = 2) => { val = parseFloat(val) num = parseInt(num) const power = Math.pow(10, num) - val = val * power + '' + val = `${val * power}` val = val.split('.')[0] val = parseInt(val) / power return val } -//处理数据单位(自然数) -export const dataUnit = val => { +// 处理数据单位(自然数) +export const dataUnit = (val) => { let newVal = '' val = parseFloat(val) if (val >= 100000000) { - newVal = noScale(val / 100000000) + '亿' - } else if (val >= 10000000) { - newVal = noScale(val / 10000000) + 'kw' - } else if (val >= 10000) { - newVal = noScale(val / 10000) + 'w' - } else if (val >= 1000) { - newVal = noScale(val / 1000) + 'k' - } else { + newVal = `${noScale(val / 100000000)}亿` + } + else if (val >= 10000000) { + newVal = `${noScale(val / 10000000)}kw` + } + else if (val >= 10000) { + newVal = `${noScale(val / 10000)}w` + } + else if (val >= 1000) { + newVal = `${noScale(val / 1000)}k` + } + else { newVal = val } return newVal diff --git a/src/common/money.ts b/src/common/money.ts index fa08169..734bc45 100644 --- a/src/common/money.ts +++ b/src/common/money.ts @@ -1,88 +1,90 @@ -const smallToBig = function (money) { - // 将数字金额转换为大写金额 - var cnNums = new Array( - '零', - '壹', - '贰', - '叁', - '肆', - '伍', - '陆', - '柒', - '捌', - '玖' - ); //汉字的数字 - var cnIntRadice = new Array('', '拾', '佰', '仟'); //基本单位 - var cnIntUnits = new Array('', '万', '亿', '兆'); //对应整数部分扩展单位 - var cnDecUnits = new Array('角', '分', '毫', '厘'); //对应小数部分单位 - var cnInteger = '整'; //整数金额时后面跟的字符 - var cnIntLast = '元'; //整数完以后的单位 - //最大处理的数字 - var maxNum = 999999999999999.9999; - var integerNum; //金额整数部分 - var decimalNum; //金额小数部分 - //输出的中文金额字符串 - var chineseStr = ''; - var parts; //分离金额后用的数组,预定义 - if (money == '') { - return ''; - } +const smallToBig = function(money) { + // 将数字金额转换为大写金额 + const cnNums = [ + '零', + '壹', + '贰', + '叁', + '肆', + '伍', + '陆', + '柒', + '捌', + '玖', + ] // 汉字的数字 + const cnIntRadice = ['', '拾', '佰', '仟'] // 基本单位 + const cnIntUnits = ['', '万', '亿', '兆'] // 对应整数部分扩展单位 + const cnDecUnits = ['角', '分', '毫', '厘'] // 对应小数部分单位 + const cnInteger = '整' // 整数金额时后面跟的字符 + const cnIntLast = '元' // 整数完以后的单位 + // 最大处理的数字 + const maxNum = 999999999999999.9999 + let integerNum // 金额整数部分 + let decimalNum // 金额小数部分 + // 输出的中文金额字符串 + let chineseStr = '' + let parts // 分离金额后用的数组,预定义 + if (money == '') { + return '' + } - money = parseFloat(money); - if (money >= maxNum) { - //超出最大处理数字 - return '超出最大处理数字'; - } - if (money == 0) { - chineseStr = cnNums[0] + cnIntLast + cnInteger; - return chineseStr; - } + money = parseFloat(money) + if (money >= maxNum) { + // 超出最大处理数字 + return '超出最大处理数字' + } + if (money == 0) { + chineseStr = cnNums[0] + cnIntLast + cnInteger + return chineseStr + } - //四舍五入保留两位小数,转换为字符串 - money = Math.round(money * 100).toString(); - integerNum = money.substr(0, money.length - 2); - decimalNum = money.substr(money.length - 2); + // 四舍五入保留两位小数,转换为字符串 + money = Math.round(money * 100).toString() + integerNum = money.substr(0, money.length - 2) + decimalNum = money.substr(money.length - 2) - //获取整型部分转换 - if (parseInt(integerNum, 10) > 0) { - var zeroCount = 0; - var IntLen = integerNum.length; - for (var i = 0; i < IntLen; i++) { - var n = integerNum.substr(i, 1); - var p = IntLen - i - 1; - var q = p / 4; - var m = p % 4; - if (n == '0') { - zeroCount++; - } else { - if (zeroCount > 0) { - chineseStr += cnNums[0]; - } - //归零 - zeroCount = 0; - chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; - } - if (m == 0 && zeroCount < 4) { - chineseStr += cnIntUnits[q]; - } + // 获取整型部分转换 + if (parseInt(integerNum, 10) > 0) { + let zeroCount = 0 + const IntLen = integerNum.length + for (var i = 0; i < IntLen; i++) { + var n = integerNum.substr(i, 1) + const p = IntLen - i - 1 + const q = p / 4 + const m = p % 4 + if (n == '0') { + zeroCount++ + } + else { + if (zeroCount > 0) { + chineseStr += cnNums[0] } - chineseStr += cnIntLast; + // 归零 + zeroCount = 0 + chineseStr += cnNums[parseInt(n)] + cnIntRadice[m] + } + if (m == 0 && zeroCount < 4) { + chineseStr += cnIntUnits[q] + } } - //小数部分 - if (decimalNum != '') { - var decLen = decimalNum.length; - for (var i = 0; i < decLen; i++) { - var n = decimalNum.substr(i, 1); - if (n != '0') { - chineseStr += cnNums[Number(n)] + cnDecUnits[i]; - } - } + chineseStr += cnIntLast + } + // 小数部分 + if (decimalNum != '') { + const decLen = decimalNum.length + for (var i = 0; i < decLen; i++) { + var n = decimalNum.substr(i, 1) + if (n != '0') { + chineseStr += cnNums[Number(n)] + cnDecUnits[i] + } } - if (chineseStr == '') { - chineseStr += cnNums[0] + cnIntLast + cnInteger; - } else if (decimalNum == '' || /^0*$/.test(decimalNum)) { - chineseStr += cnInteger; - } - return chineseStr; -}; -export default smallToBig; + } + if (chineseStr == '') { + chineseStr += cnNums[0] + cnIntLast + cnInteger + } + else if (decimalNum == '' || /^0*$/.test(decimalNum)) { + chineseStr += cnInteger + } + return chineseStr +} +export default smallToBig diff --git a/src/common/shortCode/index.js b/src/common/shortCode/index.js index 7e32a27..22d6dc5 100644 --- a/src/common/shortCode/index.js +++ b/src/common/shortCode/index.js @@ -1,33 +1,33 @@ -import Taro from "@tarojs/taro" -import { BASE_URL } from "../constant" +import Taro from '@tarojs/taro' +import { BASE_URL } from '../constant' -//解析短码(主要用于右上角按钮分享) +// 解析短码(主要用于右上角按钮分享) export const analysisShortCodeApi = (val) => { - //解析短码 - Taro.request({ - url:BASE_URL+'/v1/mall/shortCode', - method:"GET", - data:{md5_key: val}, - success:(res) => { - if(res.data.code == 0) { - //绑定上下级 - bindParent(res.data.data.share_user_id) - } - } - }) + // 解析短码 + Taro.request({ + url: `${BASE_URL}/v1/mall/shortCode`, + method: 'GET', + data: { md5_key: val }, + success: (res) => { + if (res.data.code == 0) { + // 绑定上下级 + bindParent(res.data.data.share_user_id) + } + }, + }) } -//绑定上下级 +// 绑定上下级 const bindParent = (share_user_id) => { - //绑定上下级 - Taro.request({ - url:BASE_URL+'/v1/mall/shortCode/bind', - method:"POST", - data:{share_user_id: share_user_id}, - success:(res) => { - if(res.data.code == 0) { - //绑定上下级 - } + // 绑定上下级 + Taro.request({ + url: `${BASE_URL}/v1/mall/shortCode/bind`, + method: 'POST', + data: { share_user_id }, + success: (res) => { + if (res.data.code == 0) { + // 绑定上下级 } - }) - } \ No newline at end of file + }, + }) +} diff --git a/src/common/system.ts b/src/common/system.ts index 1d99ae5..b87ef79 100644 --- a/src/common/system.ts +++ b/src/common/system.ts @@ -1,9 +1,8 @@ -import Taro from "@tarojs/taro"; - +import Taro from '@tarojs/taro' /** * 设置 系统 本地存储 - * @param {Object} systemInfo + * @param {Object} systemInfo */ export const setSystem = (systemInfo) => { Taro.setStorageSync('system', JSON.stringify(systemInfo)) @@ -19,7 +18,7 @@ export const getSystem = () => { /** * 设置 小程序 本地存储 - * @param {Object} systemInfo + * @param {Object} systemInfo */ export const setAccountInfo = (systemInfo) => { Taro.setStorageSync('accountInfo', JSON.stringify(systemInfo)) @@ -35,9 +34,9 @@ export const getAccountInfo = () => { /** * 设置 参数本地存储 - * @param {Object} info + * @param {Object} info */ -export const setParam = (info:Object) => { +export const setParam = (info: Object) => { Taro.setStorageSync('params', JSON.stringify(info)) } @@ -46,5 +45,5 @@ export const setParam = (info:Object) => { */ export const getParam = () => { const res = Taro.getStorageSync('params') || null - return res?JSON.parse(res):null + return res ? JSON.parse(res) : null } diff --git a/src/common/util.ts b/src/common/util.ts index a7d93a9..bcb8f43 100644 --- a/src/common/util.ts +++ b/src/common/util.ts @@ -1,7 +1,7 @@ +import Taro from '@tarojs/taro' +import type { SelectorQuery } from '@tarojs/taro/types/index' import { formatImgUrl } from './format' import { analysisShortCodeApi } from './shortCode' -import Taro from '@tarojs/taro' -import { SelectorQuery } from '@tarojs/taro/types/index' /** * 防抖 * @param {*} fn @@ -11,7 +11,7 @@ import { SelectorQuery } from '@tarojs/taro/types/index' export const debounce = (fn, delay) => { let timer: any = null return (...param) => { - if (timer) clearTimeout(timer) + if (timer) { clearTimeout(timer) } timer = setTimeout(() => { fn(...param) }, delay) @@ -27,7 +27,7 @@ export const debounce = (fn, delay) => { export const throttle = (fn, delay) => { let pre = 0 return (...params) => { - let now = new Date().getTime() + const now = new Date().getTime() if (now - pre > delay) { fn(...params) pre = now @@ -42,15 +42,16 @@ export const throttle = (fn, delay) => { * @returns */ export const getFilterData = (val = {}, arr: string[] = []) => { - let res = {} - for (let key in val) { + const res = {} + for (const key in val) { // undefined == null output: true if (val[key] != null && val[key] !== '' && !arr.includes(key)) { if (typeof val[key] == 'number') { - if (!isNaN(val[key])) { + if (!Number.isNaN(val[key])) { res[key] = val[key] } - } else { + } + else { res[key] = val[key] } } @@ -62,26 +63,28 @@ export const getFilterData = (val = {}, arr: string[] = []) => { * @param {*} object * @returns */ -export const copyObject = object => { +export const copyObject = (object) => { if (object.constructor == Object) { - let keys = Object.keys(object) - let newObject = {} - keys.map(key => { + const keys = Object.keys(object) + const newObject = {} + keys.forEach((key) => { newObject[key] = copyObject(object[key]) }) return newObject - } else if (object.constructor == Array) { - return object.map(item => { + } + else if (object.constructor == Array) { + return object.map((item) => { return copyObject(item) }) - } else { + } + else { return object } } /** - * - * @param {*} suffix + * + * @param {*} suffix * !w80 !w100 !w160 @@ -99,35 +102,38 @@ interface DataLoadingStatus { total: number status: boolean } -//获取数据加载状态 //0:数据从无到有加载数据,1,没有任何数据, 2:下拉加载,3:下拉没有数据 +// 获取数据加载状态 //0:数据从无到有加载数据,1,没有任何数据, 2:下拉加载,3:下拉没有数据 export const dataLoadingStatus = ({ list = [], total = 0, status = false }: DataLoadingStatus) => { - console.log('list & status',list, status); + console.log('list & status', list, status) // 类型校验 if (Object.prototype.toString.call(list) !== '[object Array]') { list = [] } if (list.length == 0 && status) { return 0 - } else if (list.length == 0 && !status) { + } + else if (list.length == 0 && !status) { return 1 - } else if (list.length < total) { + } + else if (list.length < total) { return 2 - } else { + } + else { return 3 } } function delay(delayTime = 25): Promise { - return new Promise(resolve => { + return new Promise((resolve) => { setTimeout(() => { - // @ts-ignore + // @ts-expect-error no error resolve() }, delayTime) }) } export function delayQuerySelector(selectorStr: string, delayTime = 500): Promise { - return new Promise(resolve => { + return new Promise((resolve) => { const selector: SelectorQuery = Taro.createSelectorQuery() delay(delayTime).then(() => { selector @@ -140,28 +146,29 @@ export function delayQuerySelector(selectorStr: string, delayTime = 500): Promis }) } -//全局分享监听 +// 全局分享监听 export const shareShop = () => { const page = Taro.getCurrentInstance().page - //当有分享参数时,绑定上下级 + // 当有分享参数时,绑定上下级 if (page && page.options?.share) { analysisShortCodeApi(page.options.share) } if (page && page.onShareAppMessage) { - page.onShareAppMessage = res => { + page.onShareAppMessage = (res) => { let path = '' let title = '' let imageUrl = '' - let sortCode = Taro.getStorageSync('sort_code') ? JSON.parse(Taro.getStorageSync('sort_code')) : '' - let pageInfo: any = page - //商品详情分享 + const sortCode = Taro.getStorageSync('sort_code') ? JSON.parse(Taro.getStorageSync('sort_code')) : '' + const pageInfo: any = page + // 商品详情分享 if (pageInfo.route === 'pages/details/index') { path = `/pages/details/index?share=${sortCode.shareShortDetail.code}` title = sortCode.shareShortDetail.title imageUrl = sortCode.shareShortDetail.img - } else { - path = - pageInfo.route === 'pages/user/index' + } + else { + path + = pageInfo.route === 'pages/user/index' ? `/pages/user/index?share=${sortCode.shareShortPage.code}` : `/pages/index/index?share=${sortCode.shareShortPage.code}` title = sortCode.shareShortPage.title diff --git a/src/components/AddressList/index.tsx b/src/components/AddressList/index.tsx index 0387299..2bc0af2 100644 --- a/src/components/AddressList/index.tsx +++ b/src/components/AddressList/index.tsx @@ -1,117 +1,119 @@ -import { Button, Navigator, ScrollView, Text, View } from "@tarojs/components" -import { memo, useEffect, useState, forwardRef, useImperativeHandle } from "react" -import "./index.scss" -import { mppurchaseraddresslist } from "@/api/addressList" -import { alert } from "@/common/common" -import Taro, { showModal, useDidShow, useRouter } from "@tarojs/taro" +import { Button, Navigator, ScrollView, Text, View } from '@tarojs/components' +import { forwardRef, memo, useEffect, useImperativeHandle, useState } from 'react' +import './index.scss' +import { mppurchaseraddresslist } from '@/api/addressList' +import { alert } from '@/common/common' +import Taro, { showModal, useDidShow, useRouter } from '@tarojs/taro' import IconFont from '@/components/iconfont/iconfont' import { mpsaleOrderaddress } from '@/api/order' + interface Params { - refresherEnabled?: boolean,//是否开启刷新 - onSelect?: (item: any, index: number) => void,//列表选择 - addButtonEnabled?: boolean, //是否显示添加按钮 - focusBorderEnabled?: boolean, //焦点显示蓝色边框 - id?: number, //默认选择值, - purchaser_id: Number, + refresherEnabled?: boolean// 是否开启刷新 + onSelect?: (item: any, index: number) => void// 列表选择 + addButtonEnabled?: boolean // 是否显示添加按钮 + focusBorderEnabled?: boolean // 焦点显示蓝色边框 + id?: number // 默认选择值, + purchaser_id: Number // handSelect?: (any) => void } // 地址列表 const AddressList = memo(forwardRef((props: Params, AddressListRef) => { + const pages = Taro.getCurrentPages() // 获取当前的页面栈 + const prevPage = pages[pages.length - 2] - let pages = Taro.getCurrentPages(); // 获取当前的页面栈 - let prevPage = pages[pages.length - 2]; - - const { addButtonEnabled = true, focusBorderEnabled = false } = props; + const { addButtonEnabled = true, focusBorderEnabled = false } = props const { fetchData, state } = mppurchaseraddresslist() // 获取数据 - const getData = async () => { - const result = await fetchData({ purchaser_id: props.purchaser_id }); + const getData = async() => { + const result = await fetchData({ purchaser_id: props.purchaser_id }) if (props.id) { - setFocusId(props.id as any); - } else { - result.data.list?.every(item => { + setFocusId(props.id as any) + } + else { + result.data.list?.every((item) => { if (item.is_default) { - setFocusId(item.id); - return false; + setFocusId(item.id) + return false } - return true; + return true }) } - let itemList: any[] = [] - result?.data?.list?.forEach(item => { + const itemList: any[] = [] + result?.data?.list?.forEach((item) => { itemList.push(item?.id) }) - prevPage.setData({ //设置上一个页面的值 - ids: itemList - }); + prevPage.setData({ // 设置上一个页面的值 + ids: itemList, + }) } useDidShow(() => { - getData(); + getData() // 监听刷新 - Taro.eventCenter.on("addressList:refresh", getData); + Taro.eventCenter.on('addressList:refresh', getData) return () => { - Taro.eventCenter.off("addressList:refresh", getData); + Taro.eventCenter.off('addressList:refresh', getData) } }) // 处理刷新 - const [refreshState, setRefreshState] = useState(false); - const handleRefresh = async () => { - setRefreshState(true); - await getData(); - setRefreshState(false); + const [refreshState, setRefreshState] = useState(false) + const handleRefresh = async() => { + setRefreshState(true) + await getData() + setRefreshState(false) } - const data = Array.from({ length: 15 }); + const data = Array.from({ length: 15 }) // 焦点 - const [focusId, setFocusId] = useState(); + const [focusId, setFocusId] = useState() const router = useRouter() const [addressObj, setAddressObj] = useState({}) // 列表选择 const { fetchData: selectFetch } = mpsaleOrderaddress() - const handleSelect = async (item: any, index: number) => { + const handleSelect = async(item: any, index: number) => { if (router.params.orderId && router.params.orderId != '-100') { console.log(typeof (router.params.orderId) != 'undefined', 'router.params.orderId') Taro.showLoading({ title: '请稍等...', - mask: true + mask: true, }) const res = await selectFetch({ address_id: item.id, id: Number(router.params.orderId), shipment_mode: 2 }) if (res.msg === 'success') { Taro.hideLoading() Taro.showToast({ title: '成功', - icon: 'success' + icon: 'success', }) Taro.navigateBack({ - delta: 1 + delta: 1, }) - } else { + } + else { Taro.hideLoading() Taro.showToast({ title: res.msg, - icon: 'error' + icon: 'error', }) } - } else { - prevPage.setData({ //设置上一个页面的值 + } + else { + prevPage.setData({ // 设置上一个页面的值 addressObj: item, // ids: itemList - }); + }) Taro.navigateBack({ - delta: 1 + delta: 1, }) } - - props.onSelect && props.onSelect(item, index); + props.onSelect && props.onSelect(item, index) if (focusBorderEnabled) { - setFocusId(item?.id); + setFocusId(item?.id) } } useImperativeHandle(AddressListRef, () => ({ - getData + getData, })) return ( @@ -119,8 +121,8 @@ const AddressList = memo(forwardRef((props: Params, AddressListRef) => { { - state?.data?.list?.length > 0 ? - state?.data?.list?.map((item, index) => { + state?.data?.list?.length > 0 + ? state?.data?.list?.map((item, index) => { // data.length>0? // data.map((item,index)=>{ return ( @@ -143,19 +145,19 @@ const AddressList = memo(forwardRef((props: Params, AddressListRef) => { e.stopPropagation()} url={`/pages/addAddress/index?type=edit&id=${item.id}&&purchaser_id=${Number(props.purchaser_id)}`} hoverClass="none" className="address-edit"> {/* */} - + { item.factory !== '' && <> - - 加工厂:{item.factory} + + 加工厂:{item.factory} } - ); - }) : - 暂未添加地址 + ) + }) + : 暂未添加地址 } @@ -164,4 +166,4 @@ const AddressList = memo(forwardRef((props: Params, AddressListRef) => { ) })) -export default AddressList; \ No newline at end of file +export default AddressList diff --git a/src/components/BottomBtns/index.tsx b/src/components/BottomBtns/index.tsx index bea2945..e638e8c 100644 --- a/src/components/BottomBtns/index.tsx +++ b/src/components/BottomBtns/index.tsx @@ -1,191 +1,195 @@ -import { View } from "@tarojs/components" -import { memo, useEffect, useState, useMemo, forwardRef, useImperativeHandle, useRef } from "react" -import style from "./index.module.scss" +import { View } from '@tarojs/components' +import { forwardRef, memo, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react' +import style from './index.module.scss' + interface prosObj { - obj?: { - sale_mode?: Number, - collect_status?: Number | string, - status?: Number, - payment_method?: Number, - settle_mode?: Number | string, - } - cancle?: (any) => void, - nextBuy?: (any) => void, - toPay?: (any) => void, - handSureGoods?: () => void, - showTuiGoods?: boolean, - handApplyGoods?: () => void, - handApplyMoney?: () => void, - showDetail?: boolean, - goodsObj?: any + obj?: { + sale_mode?: Number + collect_status?: Number | string + status?: Number + payment_method?: Number + settle_mode?: Number | string + } + cancle?: (any) => void + nextBuy?: (any) => void + toPay?: (any) => void + handSureGoods?: () => void + showTuiGoods?: boolean + handApplyGoods?: () => void + handApplyMoney?: () => void + showDetail?: boolean + goodsObj?: any } export default memo(forwardRef((props: prosObj, ref) => { - const { - obj = { - sale_mode: 0, - collect_status: '', - status: '', - payment_method: 0, - settle_mode: '' - }, - showTuiGoods = false, - cancle, - nextBuy, - toPay, - handSureGoods, - handApplyGoods, - handApplyMoney, - showDetail = false, - goodsObj = {} - } = props - //判断显示取消订单 + const { + obj = { + sale_mode: 0, + collect_status: '', + status: '', + payment_method: 0, + settle_mode: '', + }, + showTuiGoods = false, + cancle, + nextBuy, + toPay, + handSureGoods, + handApplyGoods, + handApplyMoney, + showDetail = false, + goodsObj = {}, + } = props + // 判断显示取消订单 - const showCancel = useMemo(() => { - if ( - (obj.sale_mode === 0 && obj.status === 0) || - (obj.sale_mode === 0 && obj.status === 1) || - (obj.sale_mode === 0 && obj.status === 2 && obj.collect_status == 0) || - (obj.sale_mode === 0 && obj.status === 7 && obj.collect_status == 0) || - (obj.sale_mode === 0 && obj.status === 11 && obj.collect_status == 0) || - (obj.sale_mode === 0 && obj.status === 11 && obj.settle_mode == 3) || - (obj.sale_mode === 0 && obj.status === 3 && obj.settle_mode == 3) || - (obj.sale_mode === 1 && obj.status === 10) || - (obj.sale_mode === 2 && obj.status === 10) || - (obj.sale_mode === 2 && obj.status === 0 && (obj.collect_status == 1 || obj.collect_status == 2)) || - (obj.sale_mode === 2 && obj.status === 0 && obj.collect_status == 0) || - (obj.sale_mode === 1 && obj.status === 10) || - (obj.sale_mode === 2 && obj.status === 10) - ) { - return true - } else return false - }, [obj]) - //判断显示再次购买 - const showBuy = useMemo(() => { - if ( - obj.sale_mode === 0 || - (obj.sale_mode === 1 && obj.status !== 10) || - (obj.sale_mode === 2 && obj.status !== 10) - ) { - return true - } else return false - }, [obj]) - //判断显示去付款 - const canBuy = useMemo(() => { - if ( - (obj.sale_mode === 0 && obj.status === 7 && obj.collect_status == 1) || - (obj.sale_mode === 0 && obj.status === 7 && obj.collect_status == 0) || - (obj.sale_mode === 0 && obj.status === 7 && obj.settle_mode == 3) || - (obj.sale_mode === 0 && obj.status === 3 && obj.collect_status == 1) || - (obj.sale_mode === 0 && obj.status === 3 && obj.collect_status == 0) || - (obj.sale_mode === 0 && obj.status === 8 && obj.collect_status == 1) || - (obj.sale_mode === 0 && obj.status === 8 && obj.collect_status == 0) || - (obj.sale_mode === 0 && obj.status === 9 && obj.collect_status == 1) || - (obj.sale_mode === 0 && obj.status === 9 && obj.collect_status == 0) || - (obj.sale_mode === 2 && obj.status === 2) || - (obj.sale_mode === 2 && obj.status === 7) || - (obj.sale_mode === 1 && obj.status === 10) || - (obj.sale_mode === 2 && obj.status === 10) - ) { - return true - } else return false - }, [obj]) + const showCancel = useMemo(() => { + if ( + (obj.sale_mode === 0 && obj.status === 0) + || (obj.sale_mode === 0 && obj.status === 1) + || (obj.sale_mode === 0 && obj.status === 2 && obj.collect_status == 0) + || (obj.sale_mode === 0 && obj.status === 7 && obj.collect_status == 0) + || (obj.sale_mode === 0 && obj.status === 11 && obj.collect_status == 0) + || (obj.sale_mode === 0 && obj.status === 11 && obj.settle_mode == 3) + || (obj.sale_mode === 0 && obj.status === 3 && obj.settle_mode == 3) + || (obj.sale_mode === 1 && obj.status === 10) + || (obj.sale_mode === 2 && obj.status === 10) + || (obj.sale_mode === 2 && obj.status === 0 && (obj.collect_status == 1 || obj.collect_status == 2)) + || (obj.sale_mode === 2 && obj.status === 0 && obj.collect_status == 0) + || (obj.sale_mode === 1 && obj.status === 10) + || (obj.sale_mode === 2 && obj.status === 10) + ) { + return true + } + else { return false } + }, [obj]) + // 判断显示再次购买 + const showBuy = useMemo(() => { + if ( + obj.sale_mode === 0 + || (obj.sale_mode === 1 && obj.status !== 10) + || (obj.sale_mode === 2 && obj.status !== 10) + ) { + return true + } + else { return false } + }, [obj]) + // 判断显示去付款 + const canBuy = useMemo(() => { + if ( + (obj.sale_mode === 0 && obj.status === 7 && obj.collect_status == 1) + || (obj.sale_mode === 0 && obj.status === 7 && obj.collect_status == 0) + || (obj.sale_mode === 0 && obj.status === 7 && obj.settle_mode == 3) + || (obj.sale_mode === 0 && obj.status === 3 && obj.collect_status == 1) + || (obj.sale_mode === 0 && obj.status === 3 && obj.collect_status == 0) + || (obj.sale_mode === 0 && obj.status === 8 && obj.collect_status == 1) + || (obj.sale_mode === 0 && obj.status === 8 && obj.collect_status == 0) + || (obj.sale_mode === 0 && obj.status === 9 && obj.collect_status == 1) + || (obj.sale_mode === 0 && obj.status === 9 && obj.collect_status == 0) + || (obj.sale_mode === 2 && obj.status === 2) + || (obj.sale_mode === 2 && obj.status === 7) + || (obj.sale_mode === 1 && obj.status === 10) + || (obj.sale_mode === 2 && obj.status === 10) + ) { + return true + } + else { return false } + }, [obj]) - //判断显示确认收货 - const showTake = useMemo(() => { - if ( - (obj.sale_mode === 0 && obj.status == 8 && obj.collect_status == 0) || - (obj.sale_mode === 0 && obj.status == 8 && obj.collect_status == 1) || - (obj.sale_mode === 0 && obj.status == 8 && obj.collect_status == 2) || - (obj.sale_mode === 0 && obj.status == 8 && obj.settle_mode == 3) || - (obj.sale_mode === 1 && obj.status == 8) || - (obj.sale_mode === 2 && obj.status == 8) - ) { - return true - } else return false - }, [obj]) + // 判断显示确认收货 + const showTake = useMemo(() => { + if ( + (obj.sale_mode === 0 && obj.status == 8 && obj.collect_status == 0) + || (obj.sale_mode === 0 && obj.status == 8 && obj.collect_status == 1) + || (obj.sale_mode === 0 && obj.status == 8 && obj.collect_status == 2) + || (obj.sale_mode === 0 && obj.status == 8 && obj.settle_mode == 3) + || (obj.sale_mode === 1 && obj.status == 8) + || (obj.sale_mode === 2 && obj.status == 8) + ) { + return true + } + else { return false } + }, [obj]) + // 判断显示申请退货 + const showTuihuo = useMemo(() => { + if ( + (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 0 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 9 && obj.settle_mode == 3 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 2 && obj.status == 9 && goodsObj?.av_return_product?.length) + ) { + return true + } + else { return false } + }, [obj]) + // 判断显示申请退款 + const showTuikuan = useMemo(() => { + if ( + (obj.sale_mode === 0 && obj.status == 2 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 7 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 7 && obj.collect_status == 3 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 11 && (obj.collect_status == 1 || obj.collect_status == 2) && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 0 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 1 && obj.status == 0 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 1 && obj.status == 9 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 2 && obj.status == 0 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 2 && obj.status == 0 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) + ) { + return true + } + else { return false } + }, [obj]) + // 多的不显示别的按钮 + // const currentNums = useRef({ nums: 0 }) + const itemNums = useMemo(() => { + let nums = 0 + if (showTake) { + nums = nums + 1 + } + if (showCancel) { + nums = nums + 1 + } + if (canBuy) { + nums = nums + 1 + } + if (showBuy) { + nums = nums + 1 + } + return nums + }, [obj]) + useImperativeHandle(ref, () => ({ + itemNums, + })) - //判断显示申请退货 - const showTuihuo = useMemo(() => { - if ( - (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 0 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 9 && obj.settle_mode == 3 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 2 && obj.status == 9 && goodsObj?.av_return_product?.length) - ) { - return true - } else return false - }, [obj]) - //判断显示申请退款 - const showTuikuan = useMemo(() => { - if ( - (obj.sale_mode === 0 && obj.status == 2 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 7 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 7 && obj.collect_status == 3 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 11 && (obj.collect_status == 1 || obj.collect_status == 2) && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 0 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 1 && obj.status == 0 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 1 && obj.status == 9 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 2 && obj.status == 0 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 2 && obj.status == 0 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) - ) { - return true - } else return false - }, [obj]) + return ( + - //多的不显示别的按钮 - // const currentNums = useRef({ nums: 0 }) - const itemNums = useMemo(() => { - let nums = 0 - if (showTake) { - nums = nums + 1 - } - if (showCancel) { - nums = nums + 1 - } - if (canBuy) { - nums = nums + 1 - } - if (showBuy) { - nums = nums + 1 - } - return nums - }, [obj]) + { + (showTuihuo && showDetail && itemNums < 4) && handApplyGoods?.()}>申请退货 + } - useImperativeHandle(ref, () => ({ - itemNums - })) + { + (showTuikuan && showDetail && itemNums < 4) && handApplyMoney?.()}>申请退款 - return ( - + } + { + showTake && showTuiGoods && handSureGoods?.()}>确认收货 + } + { + showCancel && cancle?.(e)}>取消订单 + } + { + showBuy && nextBuy?.(e)}>再次购买 + } + { + canBuy && toPay?.(e)}>去付款 + } - { - (showTuihuo && showDetail && itemNums < 4) && handApplyGoods?.()}>申请退货 - } - - { - (showTuikuan && showDetail && itemNums < 4) && handApplyMoney?.()}>申请退款 - - } - { - showTake && showTuiGoods && handSureGoods?.()}>确认收货 - } - { - showCancel && cancle?.(e)}>取消订单 - } - { - showBuy && nextBuy?.(e)}>再次购买 - } - { - canBuy && toPay?.(e)}>去付款 - } - - - ) -})) \ No newline at end of file + + ) +})) diff --git a/src/components/BottomCustomer/index.tsx b/src/components/BottomCustomer/index.tsx index 63babe3..d75e8af 100644 --- a/src/components/BottomCustomer/index.tsx +++ b/src/components/BottomCustomer/index.tsx @@ -1,36 +1,35 @@ -import { View, Button } from '@tarojs/components' -import { memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; +import { Button, View } from '@tarojs/components' import Taro from '@tarojs/taro' +import { memo } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' -type prosObj = { - isDisabled: boolean, - handSure?: () => void, - clientId?: Number, - clientName?: string +interface prosObj { + isDisabled: boolean + handSure?: () => void + clientId?: Number + clientName?: string } export default memo((props: prosObj) => { - const { - isDisabled = true, - handSure, - clientName = '' - } = props - const navTo = () => { - Taro.navigateTo({ - url: '/pages/customerPage/index?clientId=' + props?.clientId - }) - } + const { + isDisabled = true, + handSure, + clientName = '', + } = props + const navTo = () => { + Taro.navigateTo({ + url: `/pages/customerPage/index?clientId=${props?.clientId}`, + }) + } - - return ( - - { navTo() }}> - 当前客户: - {clientName === '' ? '请选择客户 >' : clientName} - - - - ) + return ( + + { navTo() }}> + 当前客户: + {clientName === '' ? '请选择客户 >' : clientName} + + + + ) }) diff --git a/src/components/Divider/index.tsx b/src/components/Divider/index.tsx index 5237b20..4b6053f 100644 --- a/src/components/Divider/index.tsx +++ b/src/components/Divider/index.tsx @@ -8,9 +8,10 @@ */ import { View } from '@tarojs/components' -import React, { FC, ReactNode } from 'react' -import styles from './index.module.scss' +import type { FC, ReactNode } from 'react' +import React from 'react' import classnames from 'classnames' +import styles from './index.module.scss' type BorderStype = 'solid' | 'dashed' | 'dotted' | 'double' @@ -25,8 +26,8 @@ interface DividerProps { const Divider: FC = (props) => { const { direction = 'horizontal', borderStyle = 'solid', contentPosition = 'center', customClassName = '', customStyles = {} } = props - const classname = classnames(styles['divider'], styles['divider-' + direction], customClassName) - const contentClassname = classnames(styles['divider-text'], styles['is-' + contentPosition]) + const classname = classnames(styles.divider, styles[`divider-${direction}`], customClassName) + const contentClassname = classnames(styles['divider-text'], styles[`is-${contentPosition}`]) const borderTopStyle: { borderTopStyle: BorderStype } = { borderTopStyle: borderStyle, diff --git a/src/components/FromList/index.tsx b/src/components/FromList/index.tsx index c29daf5..794c0c1 100644 --- a/src/components/FromList/index.tsx +++ b/src/components/FromList/index.tsx @@ -1,52 +1,54 @@ -import { Input, Text, Textarea, View } from "@tarojs/components" -import { memo } from "react" -import "./index.scss" +import { Input, Text, Textarea, View } from '@tarojs/components' +import { memo } from 'react' +import './index.scss' interface ListParams{ - label: string, //左边label - onInput?: (ev:Object)=>void, // 输入框输入 - onClick?:()=>any, //点击列表 - placeholder?:string, // 提示文本 - children?: any, // 插槽 - type?: string // 类型:1.input,2.textarea,3.select, + label: string // 左边label + onInput?: (ev: Object) => void // 输入框输入 + onClick?: () => any // 点击列表 + placeholder?: string // 提示文本 + children?: any // 插槽 + type?: string // 类型:1.input,2.textarea,3.select, primordialType?: 'text'|'number'|'idcard'|'digit' - value?: any, - style?: object, //整行样式 - labelStyle?: object, // label样式 - contentStyle?: object, + value?: any + style?: object // 整行样式 + labelStyle?: object // label样式 + contentStyle?: object required?: boolean } // 表单列表 -const FromList = memo((props:ListParams)=>{ - const {type="input",value="",style={},labelStyle={},contentStyle={},required=false} = props; - +const FromList = memo((props: ListParams) => { + const { type = 'input', value = '', style = {}, labelStyle = {}, contentStyle = {}, required = false } = props + return ( - {props.label} + {props.label} { - props.children?? - + props.children + ?? { - type=="input"? - - - {value&& - props.onInput&&props.onInput({detail: {value: ""}})} className="iconfont icon-qingkong"/> - } - : - type=="textarea"? + || toggleShowRealTextarea(true)}>{descData.value || placeholder} } - setDescData({...descData, number:res.length, value: res}) - onChange?.(res) - } - - useEffect(() => { - getDesc(defaultValue) - }, [defaultValue]) - - const toggleShowRealTextarea = (show) => { - setDescData({...descData, show:show}) - } - return ( - - {title} - - {(descData.show && !onlyRead)&&|| - toggleShowRealTextarea(true)}>{descData.value||placeholder} - } - {descData.number +'/'+ descData.count} - - - ) + {`${descData.number}/${descData.count}`} + + + ) }) diff --git a/src/components/timePicker/index.tsx b/src/components/timePicker/index.tsx index d578a0e..8bb0a56 100644 --- a/src/components/timePicker/index.tsx +++ b/src/components/timePicker/index.tsx @@ -1,10 +1,10 @@ -import Popup from '@/components/popup' -import { useState, memo } from 'react' import { View } from '@tarojs/components' -import styles from './index.module.scss' -import AtCalendar from '@/components/calendar/index' +import { memo, useState } from 'react' import dayjs from 'dayjs' import NormalButton from '../normalButton' +import styles from './index.module.scss' +import AtCalendar from '@/components/calendar/index' +import Popup from '@/components/popup' type DateArg = string | number | Date interface Props { @@ -14,14 +14,14 @@ interface Props { } export default memo((props: Props) => { - let { start = '', end = '', onSelectDate } = props + const { start = '', end = '', onSelectDate } = props const [time, setTime] = useState({}) const handTime = (e) => { const { start, end } = e.value // 如果选的是同一天的日期, end 自动加一天 if (!end) { - //判断如果没选下一天的时候 + // 判断如果没选下一天的时候 e.value.end = `${dayjs(new Date(start)).add(1, 'day').format('YYYY-MM-DD')} 00:00:00` } if (start === end) { @@ -30,21 +30,20 @@ export default memo((props: Props) => { setTime(e) } - return ( <> handTime?.(e)} + onSelectDate={e => handTime?.(e)} /> - onSelectDate?.(time)} size="normal" round customClassName={styles['sure-box']}>确认 + onSelectDate?.(time)} size="normal" round customClassName={styles['sure-box']}>确认 {/* onSelectDate?.(time)}> 确认 */} diff --git a/src/components/timePickerPopup/index.tsx b/src/components/timePickerPopup/index.tsx index 92b23f8..32c3f43 100644 --- a/src/components/timePickerPopup/index.tsx +++ b/src/components/timePickerPopup/index.tsx @@ -13,11 +13,10 @@ interface Props { } export default memo((props: Props) => { - let { showTime = false, closePopup, start = '', end = '', onSelectDate } = props + const { showTime = false, closePopup, start = '', end = '', onSelectDate } = props - return ( - closePopup?.()}> + closePopup?.()}> ) diff --git a/src/components/toolTips/index.tsx b/src/components/toolTips/index.tsx index 2dd0669..b8d393b 100644 --- a/src/components/toolTips/index.tsx +++ b/src/components/toolTips/index.tsx @@ -1,6 +1,6 @@ import { View } from '@tarojs/components' -import { nextTick } from '@tarojs/runtime' import Taro from '@tarojs/taro' +import { nextTick } from '@tarojs/runtime' import classNames from 'classnames' import { forwardRef, useCallback, useEffect, useId, useImperativeHandle, useMemo, useRef, useState, useTransition } from 'react' import IconFont from '../iconfont/iconfont' @@ -16,18 +16,18 @@ const convertPx = (px: number) => { return realPx } -type Placement = - | 'top' - | 'top-start' - | 'top-end' - | 'right' - | 'right-start' - | 'right-end' - | 'bottom' - | 'bottom-start' - | 'bottom-end' - | 'left' - | 'left-start' +type Placement = + | 'top' + | 'top-start' + | 'top-end' + | 'right' + | 'right-start' + | 'right-end' + | 'bottom' + | 'bottom-start' + | 'bottom-end' + | 'left' + | 'left-start' | 'left-end' interface ToolTipEvent { @@ -55,14 +55,14 @@ const popoverStyle = { } const ToolTip = forwardRef((props, ref) => { - const id = useId(); - const [,setForceUpdate] = useState({}) + const id = useId() + const [, setForceUpdate] = useState({}) const { placement = 'top-start', defaultVisible = false, onVisibleChange, children, content = '请填入提示信息', customClassName, customStyle, customContentStyle } = props - if (!content){ + if (!content) { throw new Error('tooltip: content 不能为空') - } - + } + const [visible, setVisible] = useState(defaultVisible) const onVisibleChangeRef = useRef(onVisibleChange) @@ -80,14 +80,12 @@ const ToolTip = forwardRef((props, ref) => { }, [visible], ) - const handleClick = useCallback(() => { - setVisible(v => { + setVisible((v) => { onVisibleChangeRef.current?.(!v) return !v }) - }, []) const handleClickMark = useCallback(() => { @@ -117,13 +115,12 @@ const ToolTip = forwardRef((props, ref) => { const contextRectRef = useRef(null) - - useEffect(()=>{ - if(visible && !contextRectRef.current) { - nextTick(()=>{ + useEffect(() => { + if (visible && !contextRectRef.current) { + nextTick(() => { const query = Taro.createSelectorQuery() - query.select(`#content-${id}`).boundingClientRect((res)=>{ - console.log('contextRectRef',res); + query.select(`#content-${id}`).boundingClientRect((res) => { + console.log('contextRectRef', res) contextRectRef.current = res setForceUpdate({}) }).exec() @@ -136,7 +133,7 @@ const ToolTip = forwardRef((props, ref) => { const query = Taro.createSelectorQuery() query.select('#children').boundingClientRect() query.selectViewport().scrollOffset() - query.exec(res => { + query.exec((res) => { console.log(res[0]) console.log(res[1]) setChildrenRect(res[0]) @@ -144,14 +141,13 @@ const ToolTip = forwardRef((props, ref) => { setViewport(res[1]) viewportRef.current = res[1] }) - }, []) // 箭头 坐标 const arrowCoords = useMemo(() => { const contextRect = contextRectRef.current // contextRect 没获取到之前 隐藏 - if(!contextRect) return {top: '9999px'} + if (!contextRect) { return { top: '9999px' } } console.log('getArrowSide==>', getArrowSide, childrenRectRef.current) switch (getArrowSide) { case 'bottom': // 下箭头 @@ -188,12 +184,12 @@ const ToolTip = forwardRef((props, ref) => { // content 坐标 const contentCoords = useMemo(() => { const placementSide = placement.split('-')[1] as string // placement = 'top-start' 取 'start' - console.log('placementSide',placementSide); + console.log('placementSide', placementSide) let coordsStyle = {} const contextRect = contextRectRef.current // contextRect 没获取到之前 隐藏 - if(!contextRect) return {top: '9999px'} - console.log('contextRect',contextRect); + if (!contextRect) { return { top: '9999px' } } + console.log('contextRect', contextRect) const childrenRect = childrenRectRef.current switch (getArrowSide) { case 'bottom': // 下箭头 @@ -201,22 +197,24 @@ const ToolTip = forwardRef((props, ref) => { bottom: convertPx(arrowSize) - 5, top: '', } - if(placementSide === 'start'){ + if (placementSide === 'start') { return { ...coordsStyle, left: 0, right: '', } - }else if(placementSide === 'end'){ + } + else if (placementSide === 'end') { return { ...coordsStyle, left: '', right: 0, } - }else{ + } + else { return { ...coordsStyle, - left: - (contextRect?.width / 2 - childrenRect.width / 2) + 'px', + left: `${-(contextRect?.width / 2 - childrenRect.width / 2)}px`, right: '', } } @@ -225,22 +223,24 @@ const ToolTip = forwardRef((props, ref) => { left: childrenRect.width + convertPx(arrowSize) - 5, right: '', } - if(placementSide === 'start'){ + if (placementSide === 'start') { return { ...coordsStyle, top: 0, bottom: '', } - }else if(placementSide === 'end'){ + } + else if (placementSide === 'end') { return { ...coordsStyle, top: '', - bottom: -childrenRect.height + 'px', + bottom: `${-childrenRect.height}px`, } - }else{ + } + else { return { ...coordsStyle, - top: -(contextRect.height / 2 - childrenRect.height / 2) + 'px', + top: `${-(contextRect.height / 2 - childrenRect.height / 2)}px`, bottom: '', } } @@ -249,22 +249,24 @@ const ToolTip = forwardRef((props, ref) => { top: childrenRect.height + convertPx(arrowSize) - 5, bottom: '', } - if(placementSide === 'start'){ + if (placementSide === 'start') { return { ...coordsStyle, left: 0, right: '', } - }else if(placementSide === 'end'){ + } + else if (placementSide === 'end') { return { ...coordsStyle, left: '', right: 0, } - }else{ + } + else { return { ...coordsStyle, - left: - (contextRect?.width / 2 - childrenRect.width / 2) + 'px', + left: `${-(contextRect?.width / 2 - childrenRect.width / 2)}px`, right: '', } } @@ -273,22 +275,24 @@ const ToolTip = forwardRef((props, ref) => { left: '', right: convertPx(arrowSize) - 5, } - if(placementSide === 'start'){ + if (placementSide === 'start') { return { ...coordsStyle, top: 0, bottom: '', } - }else if(placementSide === 'end'){ + } + else if (placementSide === 'end') { return { ...coordsStyle, top: '', - bottom: -childrenRect.height + 'px', + bottom: `${-childrenRect.height}px`, } - }else{ + } + else { return { ...coordsStyle, - top: -(contextRect.height / 2 - childrenRect.height / 2) + 'px', + top: `${-(contextRect.height / 2 - childrenRect.height / 2)}px`, bottom: '', } } @@ -296,17 +300,16 @@ const ToolTip = forwardRef((props, ref) => { }, [getArrowSide, childrenRectRef.current, contextRectRef.current]) const ContentComponent = useMemo(() => { - return ( {/* 箭头 */} - + {/* content */} - { + {content} - } + ) }, [content, getArrowSide, visible, arrowCoords, contentCoords]) @@ -316,7 +319,7 @@ const ToolTip = forwardRef((props, ref) => { {/* 遮罩层 */} - + {children} {ContentComponent} diff --git a/src/components/uploadImage/index.tsx b/src/components/uploadImage/index.tsx index d3a4cd0..0d78b51 100644 --- a/src/components/uploadImage/index.tsx +++ b/src/components/uploadImage/index.tsx @@ -1,14 +1,14 @@ import Taro 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/format' +import { memo, useEffect, useState } from 'react' import classnames from 'classnames' import styles from './index.module.scss' +import useUploadCDNImg from '@/use/useUploadImage' +import { formatImgUrl } from '@/common/format' import Popup from '@/components/popup' import IconFont from '@/components/iconfont/iconfont' -//图片列表 -type ImageParam = { +// 图片列表 +interface ImageParam { onChange?: (val: string[]) => void defaultList?: string[] onlyRead?: boolean @@ -22,22 +22,23 @@ const PictureItem = memo(({ onChange, defaultList, onlyRead = false setImageLise(defaultList || []) }, [defaultList]) - //上传图片 - const uploadImage = async () => { + // 上传图片 + const uploadImage = async() => { setshowPopup(true) } - //上传图片逻辑 - const handPic = async (id) => { + // 上传图片逻辑 + const handPic = async(id) => { // let resArr = List.filter(item => { // return item.check // }) if (id == 1) { var list: any = await getWxPhoto('after-sale', 5) - } else { + } + else { var list: any = await getChatPhoto('after-sale', 5) } - let images: any[] = [] + const images: any[] = [] list?.map((item) => { images.push(item.url) }) @@ -45,19 +46,19 @@ const PictureItem = memo(({ onChange, defaultList, onlyRead = false setshowPopup(false) } - //删除图片 + // 删除图片 const delImage = (index) => { imageList.splice(index, 1) setImageLise(() => [...imageList]) } - //监听上传的图片变化 + // 监听上传的图片变化 useEffect(() => { onChange?.(imageList) }, [imageList]) - //预览图片 + // 预览图片 const showImage = () => { - let list = imageList?.map((item) => { + const list = imageList?.map((item) => { return formatImgUrl(item, '!w800') }) Taro.previewImage({ @@ -66,15 +67,16 @@ const PictureItem = memo(({ onChange, defaultList, onlyRead = false }) } - //筛选内容展示 + // 筛选内容展示 const [showPopup, setshowPopup] = useState(false) const [List, setList] = useState([{ id: 1, name: '手机相册', check: false }, { id: 2, name: '从微信对话选择', check: false }]) - //点击选择的方式 + // 点击选择的方式 const handItem = (item) => { - List.map(it => { + List.map((it) => { if (item.id == it.id) { it.check = true - } else { + } + else { it.check = false } return it @@ -88,22 +90,22 @@ const PictureItem = memo(({ onChange, defaultList, onlyRead = false {imageList?.map((item, index) => ( - + {!onlyRead && delImage(index)}> - + } ))} {!onlyRead && ( - + {/* */} {/* 上传照片 */} )} - setshowPopup(false)} isFixed={true}> + setshowPopup(false)} isFixed> { List.map((item, index) => { diff --git a/src/constants/tabbar.ts b/src/constants/tabbar.ts index 0c30219..2fd14ba 100644 --- a/src/constants/tabbar.ts +++ b/src/constants/tabbar.ts @@ -1,3 +1,3 @@ export enum TabBarType { - SET_SELECTED = 'setSelected' + SET_SELECTED = 'setSelected', } diff --git a/src/custom-tab-bar/index.tsx b/src/custom-tab-bar/index.tsx index f332966..47d1562 100644 --- a/src/custom-tab-bar/index.tsx +++ b/src/custom-tab-bar/index.tsx @@ -1,29 +1,27 @@ import { CoverImage, View } from '@tarojs/components' -import { FC, useMemo, useState } from 'react' +import Taro, { useDidShow, useRouter } from '@tarojs/taro' +import type { FC } from 'react' +import { useMemo, useState } from 'react' +import classname from 'classnames' +import { useDispatch } from 'react-redux' +import type { Dispatch } from 'redux' import styles from './index.module.scss' import IconFont from '@/components/iconfont/iconfont' -import classname from 'classnames' -import Taro, { useDidShow, useRouter } from '@tarojs/taro' import { useSelector } from '@/reducers/hooks' -import { useDispatch } from 'react-redux' -import { Dispatch } from 'redux' import { TabBarType } from '@/constants/tabbar' -import { TabBarAction } from '@/reducers/tabBar' +import type { TabBarAction } from '@/reducers/tabBar' type IconfontName = Parameters['0']['name'] -type TabBarIndexMap = { - [Property: number]: { - id: number - pagePath: string - text: string - iconPath: IconfontName - selectedIconPath: IconfontName - } -} +type TabBarIndexMap = Record const CustomTabBar: FC = () => { - const { selectedId, tabItem } = useSelector((state) => { return state.tabBarData }) @@ -41,7 +39,7 @@ const CustomTabBar: FC = () => { const handleSelectTabItem = (id: TabBarIndexMap[number]['id']) => { return () => { setSelected(id) - Taro.switchTab({ url: tabItem?.find(item=>item.id === id)?.pagePath! }) + Taro.switchTab({ url: tabItem?.find(item => item.id === id)?.pagePath! }) } } const setSelected = (id: TabBarIndexMap[number]['id']) => { @@ -55,8 +53,9 @@ const CustomTabBar: FC = () => { return ( + className={classname(styles['customTabBar-item'], styles['customTabBar-item-title'], selectedId === item.id ? styles.selected : '')} + onClick={handleSelectTabItem(item.id)} + > {item.text} diff --git a/src/pages/accountPage/index.config.ts b/src/pages/accountPage/index.config.ts index aec3d40..0af9665 100644 --- a/src/pages/accountPage/index.config.ts +++ b/src/pages/accountPage/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '收款账户', + navigationBarTitleText: '收款账户', } diff --git a/src/pages/accountPage/index.tsx b/src/pages/accountPage/index.tsx index 359f551..0ca4d59 100644 --- a/src/pages/accountPage/index.tsx +++ b/src/pages/accountPage/index.tsx @@ -1,152 +1,148 @@ -import { View, ScrollView, Image, Input, Button } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; +import { Button, Image, Input, ScrollView, View } from '@tarojs/components' +import Taro, { useDidShow, useRouter } from '@tarojs/taro' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import Search from '@/components/search' import { mpcashManagementOrderaccount } from '@/api/newCollection' -import { useDidShow } from '@tarojs/taro'; -import Taro from '@tarojs/taro' -import { useRouter } from '@tarojs/taro' import InfiniteScroll from '@/components/infiniteScroll' import { dataLoadingStatus, getFilterData } from '@/common/util' export default () => { + const [search, setSearch] = useState({ + search_name: null, + page: 1, + size: 10, + }) + const [clentList, setClientlist] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) + const { fetchData: clitentFetch, state: orderState } = mpcashManagementOrderaccount() + // 数据加载状态 + const statusMore = useMemo(() => { + return dataLoadingStatus({ list: clentList.list, total: clentList.total, status: orderState.loading! }) + }, [clentList, orderState]) + const [clientObj, setclientObj] = useState({ + bankId: null, + bankName: '', + }) - const [search, setSearch] = useState({ - search_name: null, - page: 1, - size: 10, + // 输入了搜索关键字 + const getSearchData = useCallback((eq) => { + pageNum.current.page = 1 + setClientlist(() => ({ list: [], total: 0 })) + setSearch(e => ({ ...e, search_name: eq, size: 10 })) + }, []) + + const router = useRouter() + + useEffect(() => { + if (search.search_name === '') { + setSearch(e => ({ ...e, search_name: null })) + } + if (search.search_name !== '') { getCuss() } + }, [search]) + + // 上拉加载数据 + const pageNum = useRef({ size: search.size, page: search.page }) + const getScrolltolower = useCallback(() => { + if (clentList.list.length < clentList.total) { + pageNum.current.page++ + const size = pageNum.current.size * pageNum.current.page + setSearch(e => ({ ...e, size })) + console.log(search, 11111) + } + }, [clentList]) + + // 列表下拉刷新 + const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) + const getRefresherRefresh = async() => { + pageNum.current.size = 1 + setRefresherTriggeredStatus(true) + setSearch(val => ({ ...val, size: 10 })) + } + const getCuss = async() => { + const res = await clitentFetch({ search_name: search.search_name === null ? '' : search.search_name, page: search.page, size: search.size }) + if (router?.params.bankId) { + res.data.list.map((item) => { + if (item.receiving_account_id == router?.params.bankId) { + item.checked = true + } + else { + item.checked = false + } + return item + }) + } + setClientlist(e => ({ ...e, list: res.data?.list, total: res.data?.total })) + setRefresherTriggeredStatus(() => false) + } + // 选择业务员 + const selectClient = (item) => { + clentList.list.map((it) => { + if (item.receiving_account_id === it.receiving_account_id) { + it.checked = true + } + else { + it.checked = false + } + return it }) - const [clentList, setClientlist] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) - - const { fetchData: clitentFetch, state: orderState } = mpcashManagementOrderaccount() - //数据加载状态 - const statusMore = useMemo(() => { - return dataLoadingStatus({ list: clentList.list, total: clentList.total, status: orderState.loading! }) - }, [clentList, orderState]) - - const [clientObj, setclientObj] = useState({ - bankId: null, - bankName: '' + const pages = Taro.getCurrentPages() // 获取当前的页面栈 + const prevPage = pages[pages.length - 2] + prevPage.setData({ // 设置上一个页面的值 + bankId: item.receiving_account_id, + bankName: item.company_account, }) - - //输入了搜索关键字 - const getSearchData = useCallback((eq) => { - pageNum.current.page = 1 - setClientlist(() => ({ list: [], total: 0 })) - setSearch((e) => ({ ...e, search_name: eq, size: 10 })) - }, []) - - - const router = useRouter() - - useEffect(() => { - if (search.search_name === '') { - setSearch((e) => ({ ...e, search_name: null })) - } - if (search.search_name !== '') getCuss() - }, [search]) - - //上拉加载数据 - const pageNum = useRef({ size: search.size, page: search.page }) - const getScrolltolower = useCallback(() => { - if (clentList.list.length < clentList.total) { - pageNum.current.page++ - const size = pageNum.current.size * pageNum.current.page - setSearch((e) => ({ ...e, size })) - console.log(search, 11111) - } - }, [clentList]) - - //列表下拉刷新 - const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) - const getRefresherRefresh = async () => { - pageNum.current.size = 1 - setRefresherTriggeredStatus(true) - setSearch((val) => ({ ...val, size: 10 })) + setClientlist(e => ({ ...e, list: clentList?.list, total: clentList?.total })) + setclientObj(item) + Taro.navigateBack({ + delta: 1, + }) + } + useEffect(() => { + if (clientObj?.bankId !== null) { + setclientObj(clientObj) } - const getCuss = async () => { - let res = await clitentFetch({ search_name: search.search_name === null ? '' : search.search_name, page: search.page, size: search.size }) - if (router?.params.bankId) { - res.data.list.map(item => { - if (item.receiving_account_id == router?.params.bankId) { - item.checked = true - } else { - item.checked = false - } - return item - }) - } - setClientlist((e) => ({ ...e, list: res.data?.list, total: res.data?.total })) - setRefresherTriggeredStatus(() => false) - } - //选择业务员 - const selectClient = (item) => { - clentList.list.map(it => { - if (item.receiving_account_id === it.receiving_account_id) { - it.checked = true - } else { - it.checked = false - } - return it - }) - let pages = Taro.getCurrentPages(); // 获取当前的页面栈 - let prevPage = pages[pages.length - 2]; - prevPage.setData({ //设置上一个页面的值 - bankId: item.receiving_account_id, - bankName: item.company_account - }); - setClientlist((e) => ({ ...e, list: clentList?.list, total: clentList?.total })) - setclientObj(item) - Taro.navigateBack({ - delta: 1 - }) - } - useEffect(() => { - if (clientObj?.bankId !== null) { - setclientObj(clientObj) - } - // else { - // let pages = Taro.getCurrentPages(); // 获取当前的页面栈 - // let prevPage = pages[pages.length - 2]; - // prevPage.setData({ //设置上一个页面的值 - // bankId: '', - // bankName: '', - // }); - // } - }, [clientObj]) - return ( - - {/* + // else { + // let pages = Taro.getCurrentPages(); // 获取当前的页面栈 + // let prevPage = pages[pages.length - 2]; + // prevPage.setData({ //设置上一个页面的值 + // bankId: '', + // bankName: '', + // }); + // } + }, [clientObj]) + return ( + + {/* */} - - - { - clentList.list.map((item, index) => { - return ( - { selectClient(item) }}> - {item.company_account} - {/* {item.phone} + + + { + clentList.list.map((item, index) => { + return ( + { selectClient(item) }}> + {item.company_account} + {/* {item.phone} {item.company_account} */} - - ) - }) - } - - + + ) + }) + } + + - - - ) + + ) } diff --git a/src/pages/addAddress/index.config.ts b/src/pages/addAddress/index.config.ts index 6fc5ca2..c65c0be 100644 --- a/src/pages/addAddress/index.config.ts +++ b/src/pages/addAddress/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '新增地址', - } \ No newline at end of file + navigationBarTitleText: '新增地址', +} diff --git a/src/pages/addAddress/index.tsx b/src/pages/addAddress/index.tsx index cb3cfcf..2f880bd 100644 --- a/src/pages/addAddress/index.tsx +++ b/src/pages/addAddress/index.tsx @@ -1,338 +1,336 @@ -import { alert } from "@/common/common" -import Address from "@/components/address" -import FromList from "@/components/FromList" -import { Button, Input, Text, Textarea, View, Switch } from "@tarojs/components" -import Taro, { setNavigationBarTitle, useDidShow, useRouter } from "@tarojs/taro" -import { useEffect, useMemo, useState } from "react" -import styles from "./index.module.scss" -import classnames from "classnames"; -import { mppurchaseraddress, mppurchaseraddressget, mppurchaseraddressput, mppurchaseraddressdelect } from '@/api/addressList' +import { Button, Input, Switch, Text, Textarea, View } from '@tarojs/components' +import Taro, { setNavigationBarTitle, useDidShow, useRouter } from '@tarojs/taro' +import { useEffect, useMemo, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' +import FromList from '@/components/FromList' +import Address from '@/components/address' +import { alert } from '@/common/common' +import { mppurchaseraddress, mppurchaseraddressdelect, mppurchaseraddressget, mppurchaseraddressput } from '@/api/addressList' import { getFilterData } from '@/common/util' import IconFont from '@/components/iconfont/iconfont' + export default () => { + const [itemList, setItemList] = useState( + [ + { + title: '联系人', + require: true, + placeholderFont: '请输入收货人姓名', + type: 'text', + value: '', + }, + { + title: '加工厂', + require: false, + placeholderFont: '请输入加工厂(选填)', + type: 'text', + value: '', + }, + { + title: '联系方式', + require: true, + placeholderFont: '请输入联系方式', + type: 'number', + value: '', + maxLength: 11, + }, + { + title: '收货地址', + require: true, + placeholderFont: '请选择/省/市/区', + type: 'select', + disabled: true, + value: '', + }, + { + title: '详细地址', + require: true, + placeholderFont: '请输入详细地址(街道、门牌号等)', + type: 'text', + value: '', + }, + ], + ) - const [itemList, setItemList] = useState( - [ - { - title: '联系人', - require: true, - placeholderFont: '请输入收货人姓名', - type: 'text', - value: '', - }, - { - title: '加工厂', - require: false, - placeholderFont: '请输入加工厂(选填)', - type: 'text', - value: '', - }, - { - title: '联系方式', - require: true, - placeholderFont: '请输入联系方式', - type: 'number', - value: '', - maxLength: 11 - }, - { - title: '收货地址', - require: true, - placeholderFont: '请选择/省/市/区', - type: 'select', - disabled: true, - value: '', - }, - { - title: '详细地址', - require: true, - placeholderFont: '请输入详细地址(街道、门牌号等)', - type: 'text', - value: '', - } - ] - ) + const [ischecked, setIsChecked] = useState(false) + const onChange = (eq) => { + setIsChecked(eq.detail.value) + setFormData(e => ({ ...e, is_default: eq.detail.value, address_detail: itemList[4].value })) + } - const [ischecked, setIsChecked] = useState(false) - const onChange = (eq) => { - setIsChecked(eq.detail.value) - setFormData((e) => ({ ...e, is_default: eq.detail.value, address_detail: itemList[4].value })) + const router = useRouter() + useDidShow(() => { + if (router.params.type === 'add') { + setNavigationBarTitle({ title: '新增收货地址' }) } - - const router = useRouter() - useDidShow(() => { - if (router.params.type === 'add') { - setNavigationBarTitle({ title: "新增收货地址" }) - } else { - setFormData((e) => ({ ...e, id: router.params.id as any })) - getInfo() - setNavigationBarTitle({ title: "编辑收货地址" }) - } + else { + setFormData(e => ({ ...e, id: router.params.id as any })) + getInfo() + setNavigationBarTitle({ title: '编辑收货地址' }) + } + }) + const [formData, setFormData] = useState({ + name: '', + phone: '', + site: '', + siteArray: [], + district_id: '', + address_detail: '', + is_default: false, + id: '', + factory: '', + }) + // 获取相应id的信息 + const { fetchData: infoFetch } = mppurchaseraddressget() + const [infoObj, setinfoObj] = useState() + const getInfo = async() => { + const res = await infoFetch({ + id: router.params.id, }) - const [formData, setFormData] = useState({ - name: "", - phone: "", - site: "", - siteArray: [], - district_id: "", - address_detail: "", - is_default: false, - id: '', - factory: '', + if (res.data) { + let arr: any[] = [] + arr = [ + { id: res.data.province_id, name: res.data.province_name }, + { id: res.data.city_id, name: res.data.city_name }, + { id: res.data.district_id, name: res.data.district_name }, + ] + setFormData({ + name: res.data.name, + phone: res.data.phone, + site: res.data.province_name + res.data.city_name + res.data.district_name, + siteArray: arr as any, + address_detail: res.data.address_detail, + district_id: res.data.district_id, + is_default: res.data.is_default, + id: res.data.id, + factory: res.data.factory, + // purchaser_id: res.data.purchaser_id + }) + setinfoObj(res.data) + itemList.map((item) => { + if (item.title === '联系人') { + item.value = res.data.name + } + if (item.title === '联系方式') { + item.value = res.data.phone + } + if (item.title === '收货地址') { + item.value = res.data.province_name, res.data.city_name, res.data.district_name + } + if (item.title === '详细地址') { + item.value = res.data.address_detail + } + if (item.title === '加工厂') { + item.value = res.data.factory + } + return item + }) + setItemList([...itemList]) + setIsChecked(res.data.is_default) + } + } + // `${res.data.province_name} + ${res.data.city_name} + ${res.data.district_name}` + + const btnDisabled = useMemo(() => { + let canShow = false + const obj = itemList.filter((item) => { + if (item.require) { + return item.value !== '' + } }) - //获取相应id的信息 - const { fetchData: infoFetch } = mppurchaseraddressget() - const [infoObj, setinfoObj] = useState() - const getInfo = async () => { - let res = await infoFetch({ - id: router.params.id, - }) - if (res.data) { - let arr: any[] = [] - arr = [ - { id: res.data.province_id, name: res.data.province_name }, - { id: res.data.city_id, name: res.data.city_name }, - { id: res.data.district_id, name: res.data.district_name } - ] - setFormData({ - name: res.data.name, - phone: res.data.phone, - site: res.data.province_name + res.data.city_name + res.data.district_name, - siteArray: arr as any, - address_detail: res.data.address_detail, - district_id: res.data.district_id, - is_default: res.data.is_default, - id: res.data.id, - factory: res.data.factory - // purchaser_id: res.data.purchaser_id - }) - setinfoObj(res.data) - itemList.map(item => { - if (item.title === '联系人') { - item.value = res.data.name - } - if (item.title === '联系方式') { - item.value = res.data.phone - } - if (item.title === '收货地址') { - item.value = res.data.province_name, res.data.city_name, res.data.district_name - } - if (item.title === '详细地址') { - item.value = res.data.address_detail - } - if (item.title === '加工厂') { - item.value = res.data.factory - } - return item - }) - setItemList([...itemList]) - setIsChecked(res.data.is_default) + if (obj.length < 4) { + canShow = true + } + else { + canShow = false + } + return canShow + }, [itemList]) + + const [showSiteModal, setShowSiteModal] = useState(false) + + const handleSetSite = (ev: any) => { + const addressName: any = [] + ev.forEach((v) => { + addressName.push(v.name) + }) + if (ev.length === 3) { + itemList.map((it) => { + if (it.type === 'select') { + it.value = addressName } - + return it + }) + setItemList([...itemList]) + setShowSiteModal(false) } - // `${res.data.province_name} + ${res.data.city_name} + ${res.data.district_name}` + setFormData({ + name: itemList[0]?.value, + phone: itemList[2]?.value, + site: addressName.join(' '), + district_id: ev[ev.length - 1]?.id, + is_default: ischecked, + address_detail: itemList[4]?.value, + id: infoObj?.id ? infoObj?.id : '', + siteArray: ev, + factory: itemList[1]?.value, + }) + } + useEffect(() => { + setFormData(formData) + }, [formData]) - const btnDisabled = useMemo(() => { - let canShow = false - const obj = itemList.filter(item => { - if (item.require) { - return item.value !== '' - } - }) - if (obj.length < 4) { - canShow = true - } else { - canShow = false + useEffect(() => { + setItemList(itemList) + }, [itemList]) + const onClose = () => { + setShowSiteModal(false) + } + + const changeInput = (e, item) => { + itemList.map((it) => { + if (it.title === item.title) { + it.value = e.detail.value + } + return it + }) + setItemList([...itemList]) + setFormData(val => ({ + ...val, name: itemList[0].value, phone: itemList[2].value, address_detail: itemList[4].value, factory: itemList[1].value, + })) + } + + const showModal = (item) => { + if (item.type === 'select') { + setShowSiteModal(true) + } + } + + const navBack = () => { + Taro.navigateBack({ + delta: 1, + }) + } + // 新增地址 + const { fetchData: addAddressFetch } = mppurchaseraddress() + const handAdd = async() => { + // if (!btnDisabled) return false + const res = await addAddressFetch({ ...formData, purchaser_id: Number(router.params.purchaser_id) }) + if (res.data) { + Taro.showToast({ + title: '成功', + icon: 'none', + }) + navBack() + } + else { + Taro.showToast({ + title: res.msg, + }) + } + } + + // 编辑地址 + const { fetchData: putFetch } = mppurchaseraddressput() + const handEdit = async() => { + // if (!btnDisabled) return false + const res = await putFetch({ ...formData, purchaser_id: Number(router.params.purchaser_id), id: Number(infoObj?.id) }) + if (res.msg === 'success') { + Taro.showToast({ + title: '成功', + icon: 'none', + }) + navBack() + } + else { + Taro.showToast({ + title: res.msg, + }) + } + } + // 删除地址 + const { fetchData: deleteFetch } = mppurchaseraddressdelect() + const handleDelete = async() => { + Taro.showModal(({ + title: '提示', + content: '是否删除地址?', + async success(ev) { + if (ev.confirm) { + Taro.showLoading({ + title: '请稍等...', + }) + const result = await deleteFetch({ id: Number(formData.id) }) + if (result.success) { + alert.success('删除成功') + Taro.hideLoading() + Taro.navigateBack({ + delta: 1, + }) + } + else { + alert.error(result.msg) + } } - return canShow - }, [itemList]) - - const [showSiteModal, setShowSiteModal] = useState(false); - - const handleSetSite = (ev: any) => { - var addressName: any = [] - ev.forEach(v => { - addressName.push(v.name) - }) - if (ev.length === 3) { - itemList.map(it => { - if (it.type === 'select') { - it.value = addressName + }, + })) + } + return ( + <> + + {itemList.map((item, index) => { + return ( + + + {item.title} + { + item.require && * } - return it - }) - setItemList([...itemList]) - setShowSiteModal(false) - - } - setFormData({ - name: itemList[0]?.value, - phone: itemList[2]?.value, - site: addressName.join(' '), - district_id: ev[ev.length - 1]?.id, - is_default: ischecked, - address_detail: itemList[4]?.value, - id: infoObj?.id ? infoObj?.id : '', - siteArray: ev, - factory: itemList[1]?.value - }) - - } - - useEffect(() => { - setFormData(formData) - }, [formData]) - - useEffect(() => { - setItemList(itemList) - }, [itemList]) - const onClose = () => { - setShowSiteModal(false) - } - - const changeInput = (e, item) => { - itemList.map(it => { - if (it.title === item.title) { - it.value = e.detail.value - } - return it - }) - setItemList([...itemList]) - setFormData((val) => ({ - ...val, name: itemList[0].value, phone: itemList[2].value, address_detail: itemList[4].value, factory: itemList[1].value - })) - } - - - const showModal = (item) => { - if (item.type === 'select') { - setShowSiteModal(true) - } - - } - - const navBack = () => { - Taro.navigateBack({ - delta: 1 - }) - } - //新增地址 - const { fetchData: addAddressFetch } = mppurchaseraddress() - const handAdd = async () => { - // if (!btnDisabled) return false - let res = await addAddressFetch({ ...formData, purchaser_id: Number(router.params.purchaser_id) }) - if (res.data) { - Taro.showToast({ - title: '成功', - icon: "none" - }) - navBack() - } else { - Taro.showToast({ - title: res.msg - }) - } - } - - // 编辑地址 - const { fetchData: putFetch } = mppurchaseraddressput() - const handEdit = async () => { - // if (!btnDisabled) return false - let res = await putFetch({ ...formData, purchaser_id: Number(router.params.purchaser_id), id: Number(infoObj?.id) }) - if (res.msg === 'success') { - Taro.showToast({ - title: '成功', - icon: "none" - }) - navBack() - } else { - Taro.showToast({ - title: res.msg - }) - } - } - // 删除地址 - const { fetchData: deleteFetch } = mppurchaseraddressdelect() - const handleDelete = async () => { - Taro.showModal(({ - title: "提示", - content: "是否删除地址?", - async success(ev) { - if (ev.confirm) { - Taro.showLoading({ - title: '请稍等...' - }) - const result = await deleteFetch({ id: Number(formData.id) }); - if (result.success) { - alert.success("删除成功"); - Taro.hideLoading() - Taro.navigateBack({ - delta: 1 - }) - } else { - alert.error(result.msg); - } - } - } - })) - } - return ( - <> - - {itemList.map((item, index) => { - return ( - - - {item.title} - { - item.require && * - } - - changeInput(e, item)} - type={item.type} - onClick={() => showModal(item)} - style={{ width: '212px' }} - disabled={item.disabled} - placeholder={item.placeholderFont} - value={item.value} - className={styles.inputClass} - > - { - item.type === 'select' && - } - - ) - })} - - - - - - 设置默认地址 - 提醒:下单会优先使用该地址 - - { onChange(e) }} /> + + changeInput(e, item)} + type={item.type} + onClick={() => showModal(item)} + style={{ width: '212px' }} + disabled={item.disabled} + placeholder={item.placeholderFont} + value={item.value} + className={styles.inputClass} + > + { + item.type === 'select' && + } + ) + })} - { - router.params.type === 'add' && - - - - } - { - router.params.type === 'edit' && - - - - - } -
onClose()} show={showSiteModal} /> + + + + 设置默认地址 + 提醒:下单会优先使用该地址 + + { onChange(e) }} /> + - - ) -} \ No newline at end of file + { + router.params.type === 'add' + && + + + } + { + router.params.type === 'edit' + && + + + + } +
onClose()} show={showSiteModal} /> + + + ) +} diff --git a/src/pages/addCollection/components/form/index.tsx b/src/pages/addCollection/components/form/index.tsx index b3232f4..8655696 100644 --- a/src/pages/addCollection/components/form/index.tsx +++ b/src/pages/addCollection/components/form/index.tsx @@ -1,102 +1,101 @@ -import { ScrollView, View, Text, Input } from '@tarojs/components' -import { memo, useCallback, useEffect, useMemo, useState } from 'react' -import styles from './index.module.scss' -import classnames from 'classnames' -// import BottomBtns from '@/components/BottomBtns' -import { formatPriceDiv, formatDateTime } from '@/common/format' +import { Input, ScrollView, Text, View } from '@tarojs/components' import Taro from '@tarojs/taro' +import { memo, useCallback, useEffect, useMemo, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' +// import BottomBtns from '@/components/BottomBtns' +import { formatDateTime, formatPriceDiv } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' import UploadImage from '@/components/uploadImage' interface Params { - title?: string, //传入的名称 - require?: boolean, //是否显示必须选填的内容图标 - isInput?: boolean, //是否显示输入框 - inputValue?: string, //输入框的值 - inputType?: any, //输入框类型 - getInput?: (any) => void //输入框回调 - showScan?: boolean, //是否显示扫描图标 - placeholderFont?: string, //输入框默认文本 - showMore?: boolean, // 是否显示更多图标 - disabled?: boolean, // 是否输入框禁止 - onlyRead?: boolean, //图片是否只读 - showPic?: boolean, // 是否显示图片组件 - getImageList?: (any) => void //上传图片回调 - PicList?: [], //默认图片列表 - styleNone?: boolean, //根据不同的栏目调整样式 - getScan?: (any) => void, // 扫描 - navTo?: () => void, //跳转选择 - showSizeFont?: boolean, //展示金额的大写 - bigMoney?: any, //展示的大写金额, - isOpen?: boolean //是否展开状态 + title?: string // 传入的名称 + require?: boolean // 是否显示必须选填的内容图标 + isInput?: boolean // 是否显示输入框 + inputValue?: string // 输入框的值 + inputType?: any // 输入框类型 + getInput?: (any) => void // 输入框回调 + showScan?: boolean // 是否显示扫描图标 + placeholderFont?: string // 输入框默认文本 + showMore?: boolean // 是否显示更多图标 + disabled?: boolean // 是否输入框禁止 + onlyRead?: boolean // 图片是否只读 + showPic?: boolean // 是否显示图片组件 + getImageList?: (any) => void // 上传图片回调 + PicList?: [] // 默认图片列表 + styleNone?: boolean // 根据不同的栏目调整样式 + getScan?: (any) => void // 扫描 + navTo?: () => void // 跳转选择 + showSizeFont?: boolean // 展示金额的大写 + bigMoney?: any // 展示的大写金额, + isOpen?: boolean // 是否展开状态 } export default memo((pros: Params) => { - - - return ( - <> + return ( + <> + { + pros.isOpen && + + + {pros.title} + { + pros.require && * + } + { - pros.isOpen && - - - {pros.title} - { - pros.require && * - } - - { - pros.showSizeFont && 展示大小写 - } - - { - pros.showPic && - - - - } - { - !pros.showPic && pros.navTo?.()} - style={{ - justifyContent: `${!pros.showSizeFont ? 'space-between' : ''}`, alignItems: `${!pros.showSizeFont ? 'center' : ''}`, - display: `${!pros.showSizeFont ? 'flex' : ''}` - }} - > - - { - pros.isInput && pros.getInput?.(e.detail.value)} - > - } - - - {/* */} - { - pros.showMore && - - } - { - pros.showScan && - } - { - pros.showScan && pros.getScan?.(e)}> - } - { - pros.showSizeFont && {pros.bigMoney} - } - - } - - + pros.showSizeFont && 展示大小写 } - - ) -}) \ No newline at end of file + + { + pros.showPic + && + + + } + { + !pros.showPic && pros.navTo?.()} + style={{ + justifyContent: `${!pros.showSizeFont ? 'space-between' : ''}`, + alignItems: `${!pros.showSizeFont ? 'center' : ''}`, + display: `${!pros.showSizeFont ? 'flex' : ''}`, + }} + > + + { + pros.isInput && pros.getInput?.(e.detail.value)} + > + } + + + {/* */} + { + pros.showMore && + + } + { + pros.showScan && + } + { + pros.showScan && pros.getScan?.(e)}> + } + { + pros.showSizeFont && {pros.bigMoney} + } + + } + + + } + + ) +}) diff --git a/src/pages/addCollection/index.tsx b/src/pages/addCollection/index.tsx index c1328a6..ec30d6b 100644 --- a/src/pages/addCollection/index.tsx +++ b/src/pages/addCollection/index.tsx @@ -1,283 +1,281 @@ -import { View, Input, Button, Textarea } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; +import { Button, Input, Textarea, View } from '@tarojs/components' import Taro, { useDidShow } from '@tarojs/taro' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import Form from './components/form' import { - mpcashManagementOrderpost, mpshouldCollectOrderpurchaser -} from "@/api/newCollection" -import { alert } from "@/common/common" + mpcashManagementOrderaccount, mpcashManagementOrderpost, + mpshouldCollectOrderpurchaser, +} from '@/api/newCollection' +import { alert } from '@/common/common' import smallToBig from '@/common/money' import IconFont from '@/components/iconfont/iconfont' -import { mpcashManagementOrderaccount } from '@/api/newCollection' export default () => { - //获取选择的客户 - let pages = Taro.getCurrentPages(); - let currPage = pages[pages.length - 1]; // 获取当前页面 - useDidShow(() => { + // 获取选择的客户 + const pages = Taro.getCurrentPages() + const currPage = pages[pages.length - 1] // 获取当前页面 + useDidShow(() => { + setQuery(e => ({ + ...e, + purchaser_id: currPage.data?.clientId ? currPage.data?.clientId : Query.purchaser_id, + clientName: currPage.data?.clientName ? currPage.data?.clientName : Query.clientName, + bankId: currPage.data?.bankId ? currPage.data?.bankId : Query.bankId, + bankName: currPage.data?.bankName ? currPage.data?.bankName : Query.bankName, + })) + }) + const [Query, setQuery] = useState({}) - setQuery((e) => ({ - ...e, - purchaser_id: currPage.data?.clientId ? currPage.data?.clientId : Query.purchaser_id, - clientName: currPage.data?.clientName ? currPage.data?.clientName : Query.clientName, - bankId: currPage.data?.bankId ? currPage.data?.bankId : Query.bankId, - bankName: currPage.data?.bankName ? currPage.data?.bankName : Query.bankName, - })) + // 获取图片列表 + const picUrl = useRef([]) + const getImageList = useCallback((list) => { + picUrl.current = list + setQuery(val => ({ ...val, picList: list })) + }, []) + + useEffect(() => { + getCuss() + }, []) + + // 获取首个银行账号 + const { fetchData: clitentFetch } = mpcashManagementOrderaccount() + const getCuss = async() => { + const res = await clitentFetch({ page: 1, size: 10 }) + if (res.data) { + setQuery(val => ({ ...val, bankId: res.data.list[0].receiving_account_id, bankName: res.data.list[0].company_account })) + } + } + + const { fetchData: scanFetch } = mpshouldCollectOrderpurchaser() + // 扫描 + const handScan = (e) => { + e.stopPropagation() + Taro.scanCode({ + async success(res) { + const restult = await scanFetch({ order_no: res.result }) + setQuery(val => ({ ...val, purchaser_id: restult.data.purchaser_id, clientName: restult.data.purchaser_name })) + }, + fail(res) { + console.log(res) + }, }) + } - const [Query, setQuery] = useState({}) - - //获取图片列表 - const picUrl = useRef([]) - const getImageList = useCallback((list) => { - picUrl.current = list - setQuery((val) => ({ ...val, picList: list })) - }, []) - - - - useEffect(() => { - getCuss() - }, []) - - //获取首个银行账号 - const { fetchData: clitentFetch } = mpcashManagementOrderaccount() - const getCuss = async () => { - let res = await clitentFetch({ page: 1, size: 10 }) - if (res.data) { - setQuery((val) => ({ ...val, bankId: res.data.list[0].receiving_account_id, bankName: res.data.list[0].company_account })) - } + // 选择内容跳转 + const navTo = (val) => { + if (val == 1) { + Taro.navigateTo({ + url: `/pages/customerPage/index?clientId=${Query.purchaser_id}`, + }) } - - - const { fetchData: scanFetch } = mpshouldCollectOrderpurchaser() - //扫描 - const handScan = (e) => { - e.stopPropagation() - Taro.scanCode({ - success: async function (res) { - const restult = await scanFetch({ order_no: res.result }) - setQuery((val) => ({ ...val, purchaser_id: restult.data.purchaser_id, clientName: restult.data.purchaser_name })) - }, - fail(res) { - console.log(res); - }, - }); + else { + if (typeof (Query.purchaser_id) == 'undefined') { + return alert.error('请先选择客户') + } + else { + Taro.navigateTo({ + url: `/pages/accountPage/index?bankId?=${Query?.bankId}`, + }) + } } + } - //选择内容跳转 - const navTo = (val) => { - if (val == 1) { - Taro.navigateTo({ - url: '/pages/customerPage/index?clientId=' + Query.purchaser_id + // 判断是否可以提交 + const isDisabled = useMemo(() => { + if (Query.clientName == '' + || Query.money == '' + || Query.picList?.length == 0 + ) { + return true + } + else { + return false + } + }, [Query]) + + // 收款金额回调 + const getInput = (e) => { + setQuery({ ...Query, money: e }) + } + + useEffect(() => { + setQuery(Query) + }, [Query]) + + // useEffect(() => { + // if (currPage.data?.clientId && (currPage.data?.clientId != Query.purchaser_id)) { + // setQuery({ ...Query, bankId: '', bankName: '' }) + // } + // }, [Query]) + + // 备注信息 + const [TextareaValue, setTextareaValue] = useState('') + const getDesc = (e) => { + setQuery({ ...Query, nums: e.length }) + setTextareaValue(e) + } + + // 取消返回 + const handCancl = () => { + Taro.navigateBack({ + delta: 1, + }) + } + + // 确认新建 + const { fetchData: sureFetch } = mpcashManagementOrderpost() + const handSure = () => { + const query = { + payment_credential_url: picUrl.current, + purchaser_id: Query.purchaser_id, + receipt_amount: Number(Query.money) * 100, + receiving_account_id: Query.bankId, + remark: TextareaValue, + } + Taro.showModal({ + content: '确认提交吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + Taro.showLoading({ + title: '请稍等...', + mask: true, + }) + const res = await sureFetch(query) + if (res?.msg === 'success') { + Taro.showToast({ + title: '成功', }) - } else { - if (typeof (Query.purchaser_id) == 'undefined') { - return alert.error('请先选择客户') - } else { - Taro.navigateTo({ - url: '/pages/accountPage/index?bankId?=' + Query?.bankId - }) - } + Taro.hideLoading() + handCancl() + } + else { + Taro.hideLoading() + Taro.showToast({ + title: res?.msg, + icon: 'error', + }) + } } + }, + }) + } + + const [IsOpen, setIsOpen] = useState(false) + const handOpen = () => { + if (IsOpen) { + setIsOpen(false) } - - //判断是否可以提交 - const isDisabled = useMemo(() => { - if (Query.clientName == '' || - Query.money == '' || - Query.picList?.length == 0 - ) { - return true - } else { - return false - } - }, [Query]) - - //收款金额回调 - const getInput = (e) => { - setQuery({ ...Query, money: e }) + else { + setIsOpen(true) } + } - useEffect(() => { - setQuery(Query) - }, [Query]) - - // useEffect(() => { - // if (currPage.data?.clientId && (currPage.data?.clientId != Query.purchaser_id)) { - // setQuery({ ...Query, bankId: '', bankName: '' }) - // } - // }, [Query]) - - - //备注信息 - const [TextareaValue, setTextareaValue] = useState('') - const getDesc = (e) => { - setQuery({ ...Query, nums: e.length }) - setTextareaValue(e) + const openFont = useMemo(() => { + if (IsOpen) { + return '收起' } - - //取消返回 - const handCancl = () => { - Taro.navigateBack({ - delta: 1 - }) + else { + return '展开' } - - //确认新建 - const { fetchData: sureFetch } = mpcashManagementOrderpost() - const handSure = () => { - - const query = { - payment_credential_url: picUrl.current, - purchaser_id: Query.purchaser_id, - receipt_amount: Number(Query.money) * 100, - receiving_account_id: Query.bankId, - remark: TextareaValue - } - Taro.showModal({ - content: "确认提交吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - const res = await sureFetch(query) - if (res?.msg === 'success') { - Taro.showToast({ - title: '成功' - }) - Taro.hideLoading() - handCancl() - } else { - Taro.hideLoading() - Taro.showToast({ - title: res?.msg, - icon: 'error' - }) - } - } - - } - }) - } - - const [IsOpen, setIsOpen] = useState(false) - const handOpen = () => { - if (IsOpen) { - setIsOpen(false) - } else { - setIsOpen(true) - } - } - - const openFont = useMemo(() => { - if (IsOpen) { - return '收起' - } else { - return '展开' - } - }, [IsOpen]) - return ( - <> - -
handScan(e)} - navTo={() => navTo(1)} - showSizeFont={false} - >
-
getInput(e)} - showSizeFont={true} - bigMoney={smallToBig(typeof (Query.money) == 'undefined' ? 0 : Query.money)} - >
-
getImageList(list)} - showSizeFont={false} - >
-
navTo(2)} - showSizeFont={false} - >
- { - IsOpen && - 备注信息 - - - {`${typeof (Query.nums) == 'undefined' ? 0 : Query.nums}/64`} - - - } - handOpen()}> - {openFont} - { - !IsOpen && - } - { - IsOpen && - } - -
- - - - + }, [IsOpen]) + return ( + <> + +
handScan(e)} + navTo={() => navTo(1)} + showSizeFont={false} + >
+
getInput(e)} + showSizeFont + bigMoney={smallToBig(typeof (Query.money) == 'undefined' ? 0 : Query.money)} + >
+
getImageList(list)} + showSizeFont={false} + >
+
navTo(2)} + showSizeFont={false} + >
+ { + IsOpen && + 备注信息 + + + {`${typeof (Query.nums) == 'undefined' ? 0 : Query.nums}/64`} - - ) -} \ No newline at end of file + + } + handOpen()}> + {openFont} + { + !IsOpen && + } + { + IsOpen && + } + +
+ + + + + + + ) +} diff --git a/src/pages/addressManager/index.tsx b/src/pages/addressManager/index.tsx index 6a370ee..9a7ebeb 100644 --- a/src/pages/addressManager/index.tsx +++ b/src/pages/addressManager/index.tsx @@ -1,15 +1,15 @@ -import AddressList from "@/components/AddressList" -import { Button, ScrollView, Text, View } from "@tarojs/components" -import { stopPullDownRefresh, useDidShow, usePullDownRefresh, useRouter } from "@tarojs/taro" -import { useState } from "react" -import "./index.scss" +import { Button, ScrollView, Text, View } from '@tarojs/components' +import { stopPullDownRefresh, useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import { useState } from 'react' +import AddressList from '@/components/AddressList' +import './index.scss' export default () => { const router = useRouter() return ( - + ) -} \ No newline at end of file +} diff --git a/src/pages/applyGoods/index.tsx b/src/pages/applyGoods/index.tsx index 69ed881..7cbc8a1 100644 --- a/src/pages/applyGoods/index.tsx +++ b/src/pages/applyGoods/index.tsx @@ -1,677 +1,670 @@ -import { View, Input, Button, Image, Text, Textarea, ScrollView } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, ReactNode, memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; +import { Button, Image, Input, ScrollView, Text, Textarea, View } from '@tarojs/components' import Taro, { faceVerifyForPay, useDidShow, useRouter } from '@tarojs/taro' +import { ReactNode, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from '@/common/format' import { - mpsaleOrder, - mpenumreturnOrderreturnReason, - mpenumreturnExplain, - mpenumreturngoodsStatus, - mpreturnApplyOrder -} from "@/api/order" + mpenumreturnExplain, + mpenumreturnOrderreturnReason, + mpenumreturngoodsStatus, + mpreturnApplyOrder, + mpsaleOrder, +} from '@/api/order' import Popup from '@/components/popup' import UploadImage from '@/components/uploadImage' export default () => { - - const router = useRouter() - useEffect(() => { - getDetail() - }, []) - const { fetchData: infoFetch } = mpsaleOrder() - const [infoObj, setInfoObj] = useState({}) - const [ListArr, setListArr] = useState([]) - //获取订单详情 - const getDetail = async () => { - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - const res = await infoFetch({ id: router.params.orderId }) - if (res.data) { - res.data.av_return_product.forEach(item => { - item.av_product_color.map(it => { - it.isTui = false - it.nums = 1 - }) - return item - }) - setListArr(res.data.av_return_product) - setInfoObj(res.data) - Taro.hideLoading() - } - } - - //点击退货 - const handTui = (val) => { - let res = ListArr - res.forEach(item => { - item.av_product_color?.map(it => { - if (it.sale_order_detail_id == val.sale_order_detail_id) { - it.isTui = true - } - return it - }) - - }) - setListArr([...res]) - - } - //点击取消退货 - const handCancel = (val) => { - ListArr.forEach(item => { - item.av_product_color.map(it => { - if (it.sale_order_detail_id === val.sale_order_detail_id) { - it.isTui = false - } - return it - }) - }) - setListArr([...ListArr]) - } - - //点击减 - const handReduce = (val) => { - ListArr.forEach(item => { - item.av_product_color.map(it => { - if (it.sale_order_detail_id === val.sale_order_detail_id) { - if (val.nums == 1) { - it.isTui = false - it.nums = 1 - } else { - it.nums-- - } - } - return it - }) - }) - setListArr([...ListArr]) - } - - const onInputEven = (e, val) => { - ListArr.forEach(item => { - item.av_product_color.map(it => { - if (it.sale_order_detail_id === val.sale_order_detail_id) { - if (Number(e.detail.value) < 1) { - it.nums = '' - } else { - it.nums = Number(e.detail.value) - } - if (Number(e.detail.value) > it.roll) { - it.nums = 1 - } - } - return it - }) - }) - setListArr([...ListArr]) - } - - - const onBlur = (e, val) => { - ListArr.forEach(item => { - item.av_product_color.map(it => { - if (it.sale_order_detail_id === val.sale_order_detail_id) { - if (Number(e.detail.value) < 1 || e.detail.value == '') { - it.isTui = false - it.nums = 1 - } else { - it.nums = Number(e.detail.value) - } - if (Number(e.detail.value) > it.roll) { - it.nums = 1 - } - } - return it - }) - }) - setListArr([...ListArr]) - } - - //点击加 - const handAdd = (val) => { - ListArr.forEach(item => { - item.av_product_color.map(it => { - if (it.sale_order_detail_id === val.sale_order_detail_id) { - if (it.nums < it.roll) { - it.nums++ - } else { - return - } - } - return it - }) - }) - setListArr([...ListArr]) - } - - const totalNums = useMemo(() => { - const arr: any[] = [] - ListArr.forEach(item => { - item.av_product_color.forEach(it => { - if (it.isTui) { - arr.push(it) - } - }) - }) - return arr.length - }, [ListArr]) - - - //获取图片列表 - const picUrl = useRef([]) - const getImageList = useCallback((list) => { - picUrl.current = list - }, []) - - - - - //筛选内容展示 - const [showPopup, setshowPopup] = useState(false) - - useEffect(() => { - getReason() - getReasonTwo() - }, []) - - - - const queryRef = useRef( - { - return_reason: 1,//退货原因 - return_explain: '',//退货理由 - reasonName: '请选择', - reasonNameTwo: '请选择', - GoodStatus: '', - GoodStatusName: "请选择" - } - ) - const [Query, setQuery] = useState({ - // reason_describe: '',//描述说明 - return_reason: 1,//退货原因 - reasonName: '请选择', - reasonNameTwo: '请选择', - return_explain: '',//退货理由 - GoodStatus: '', - GoodStatusName: "请选择" - // goods_status: '',//货物状况 - // fabric_piece_accessory_url:[],//退货图片 - // sale_order_id:infoObj.id,//详情id + const router = useRouter() + useEffect(() => { + getDetail() + }, []) + const { fetchData: infoFetch } = mpsaleOrder() + const [infoObj, setInfoObj] = useState({}) + const [ListArr, setListArr] = useState([]) + // 获取订单详情 + const getDetail = async() => { + Taro.showLoading({ + title: '请稍等...', + mask: true, }) - - //判断是否允许提交 - const isDisabled = useMemo(() => { - if (Query.GoodStatus !== '' && - Query.return_explain !== '' && - totalNums > 0 - ) { - return false - } else { - return true - } - }, [Query, totalNums]) - - ///获取退货原因 - const { fetchData: resonFetch } = mpenumreturnOrderreturnReason() - const [ReasonList, setReasonList] = useState([]) - const getReason = async () => { - const res = await resonFetch() - if (res.data) { - setReasonList(res.data.list) - } - } - - //获取退货原因2 - const { fetchData: resonTwoFetch } = mpenumreturnExplain() - const [ReasonListTwo, setReasonListTwo] = useState([]) - const getReasonTwo = async () => { - const res = await resonTwoFetch({ return_reason: queryRef.current.return_reason }) - if (res.data) { - setReasonListTwo(res.data.list) - } - } - - //选择退货原因 - const handReasonOne = (item) => { - ReasonList.map(it => { - if (it.id === item.id) { - it.default = true - } else { - it.default = false - } - return it + const res = await infoFetch({ id: router.params.orderId }) + if (res.data) { + res.data.av_return_product.forEach((item) => { + item.av_product_color.map((it) => { + it.isTui = false + it.nums = 1 }) - setQuery((val) => ({ ...val, return_reason: item.id, return_explain: '' })) - queryRef.current.return_reason = item.id - queryRef.current.reasonName = item.name - setReasonList([...ReasonList]) - getReasonTwo() + return item + }) + setListArr(res.data.av_return_product) + setInfoObj(res.data) + Taro.hideLoading() } + } - //选择退货理由 - const handReasonTwo = (item) => { - ReasonListTwo.map(it => { - if (it.id === item.id) { - it.default = true - } else { - it.default = false - } - return it - }) - setReasonListTwo([...ReasonListTwo]) - // queryRef.current.reasonNameTwo = item.name - setQuery((val) => ({ ...val, return_explain: item.id })) - - // queryRef.current.return_explain = item.id - } - - //重置 - const handReset = () => { - queryRef.current.return_reason = 1 - queryRef.current.return_explain = '' - queryRef.current.reasonName = '请选择' - queryRef.current.reasonNameTwo = '请选择' - setQuery((val) => ({ ...val, return_reason: 1, return_explain: '', reasonName: '请选择', reasonNameTwo: '请选择' })) - getReasonTwo() - const arrOne = resetArr(ReasonList) - setReasonList([...arrOne]) - const arrTwo = resetArr(ReasonListTwo) - setReasonListTwo([...arrTwo]) - } - - //数组重置 - const resetArr = (arr) => { - arr.map(it => { - it.default = false - return it - }) - return arr - } - - //判断选择原因 - const selectIsDisabled = useMemo(() => { - if (Query.return_explain !== '') { - return false - } else { - return true + // 点击退货 + const handTui = (val) => { + const res = ListArr + res.forEach((item) => { + item.av_product_color?.map((it) => { + if (it.sale_order_detail_id == val.sale_order_detail_id) { + it.isTui = true } - }, [Query]) + return it + }) + }) + setListArr([...res]) + } + // 点击取消退货 + const handCancel = (val) => { + ListArr.forEach((item) => { + item.av_product_color.map((it) => { + if (it.sale_order_detail_id === val.sale_order_detail_id) { + it.isTui = false + } + return it + }) + }) + setListArr([...ListArr]) + } + // 点击减 + const handReduce = (val) => { + ListArr.forEach((item) => { + item.av_product_color.map((it) => { + if (it.sale_order_detail_id === val.sale_order_detail_id) { + if (val.nums == 1) { + it.isTui = false + it.nums = 1 + } + else { + it.nums-- + } + } + return it + }) + }) + setListArr([...ListArr]) + } - //确认选择退货原因 - const handSlect = () => { - if (queryRef.current?.reasonName == '请选择') { + const onInputEven = (e, val) => { + ListArr.forEach((item) => { + item.av_product_color.map((it) => { + if (it.sale_order_detail_id === val.sale_order_detail_id) { + if (Number(e.detail.value) < 1) { + it.nums = '' + } + else { + it.nums = Number(e.detail.value) + } + if (Number(e.detail.value) > it.roll) { + it.nums = 1 + } + } + return it + }) + }) + setListArr([...ListArr]) + } + + const onBlur = (e, val) => { + ListArr.forEach((item) => { + item.av_product_color.map((it) => { + if (it.sale_order_detail_id === val.sale_order_detail_id) { + if (Number(e.detail.value) < 1 || e.detail.value == '') { + it.isTui = false + it.nums = 1 + } + else { + it.nums = Number(e.detail.value) + } + if (Number(e.detail.value) > it.roll) { + it.nums = 1 + } + } + return it + }) + }) + setListArr([...ListArr]) + } + + // 点击加 + const handAdd = (val) => { + ListArr.forEach((item) => { + item.av_product_color.map((it) => { + if (it.sale_order_detail_id === val.sale_order_detail_id) { + if (it.nums < it.roll) { + it.nums++ + } + else { + return + } + } + return it + }) + }) + setListArr([...ListArr]) + } + + const totalNums = useMemo(() => { + const arr: any[] = [] + ListArr.forEach((item) => { + item.av_product_color.forEach((it) => { + if (it.isTui) { + arr.push(it) + } + }) + }) + return arr.length + }, [ListArr]) + + // 获取图片列表 + const picUrl = useRef([]) + const getImageList = useCallback((list) => { + picUrl.current = list + }, []) + + // 筛选内容展示 + const [showPopup, setshowPopup] = useState(false) + + useEffect(() => { + getReason() + getReasonTwo() + }, []) + + const queryRef = useRef( + { + return_reason: 1, // 退货原因 + return_explain: '', // 退货理由 + reasonName: '请选择', + reasonNameTwo: '请选择', + GoodStatus: '', + GoodStatusName: '请选择', + }, + ) + const [Query, setQuery] = useState({ + // reason_describe: '',//描述说明 + return_reason: 1, // 退货原因 + reasonName: '请选择', + reasonNameTwo: '请选择', + return_explain: '', // 退货理由 + GoodStatus: '', + GoodStatusName: '请选择', + // goods_status: '',//货物状况 + // fabric_piece_accessory_url:[],//退货图片 + // sale_order_id:infoObj.id,//详情id + }) + + // 判断是否允许提交 + const isDisabled = useMemo(() => { + if (Query.GoodStatus !== '' + && Query.return_explain !== '' + && totalNums > 0 + ) { + return false + } + else { + return true + } + }, [Query, totalNums]) + + /// 获取退货原因 + const { fetchData: resonFetch } = mpenumreturnOrderreturnReason() + const [ReasonList, setReasonList] = useState([]) + const getReason = async() => { + const res = await resonFetch() + if (res.data) { + setReasonList(res.data.list) + } + } + + // 获取退货原因2 + const { fetchData: resonTwoFetch } = mpenumreturnExplain() + const [ReasonListTwo, setReasonListTwo] = useState([]) + const getReasonTwo = async() => { + const res = await resonTwoFetch({ return_reason: queryRef.current.return_reason }) + if (res.data) { + setReasonListTwo(res.data.list) + } + } + + // 选择退货原因 + const handReasonOne = (item) => { + ReasonList.map((it) => { + if (it.id === item.id) { + it.default = true + } + else { + it.default = false + } + return it + }) + setQuery(val => ({ ...val, return_reason: item.id, return_explain: '' })) + queryRef.current.return_reason = item.id + queryRef.current.reasonName = item.name + setReasonList([...ReasonList]) + getReasonTwo() + } + + // 选择退货理由 + const handReasonTwo = (item) => { + ReasonListTwo.map((it) => { + if (it.id === item.id) { + it.default = true + } + else { + it.default = false + } + return it + }) + setReasonListTwo([...ReasonListTwo]) + // queryRef.current.reasonNameTwo = item.name + setQuery(val => ({ ...val, return_explain: item.id })) + + // queryRef.current.return_explain = item.id + } + + // 重置 + const handReset = () => { + queryRef.current.return_reason = 1 + queryRef.current.return_explain = '' + queryRef.current.reasonName = '请选择' + queryRef.current.reasonNameTwo = '请选择' + setQuery(val => ({ ...val, return_reason: 1, return_explain: '', reasonName: '请选择', reasonNameTwo: '请选择' })) + getReasonTwo() + const arrOne = resetArr(ReasonList) + setReasonList([...arrOne]) + const arrTwo = resetArr(ReasonListTwo) + setReasonListTwo([...arrTwo]) + } + + // 数组重置 + const resetArr = (arr) => { + arr.map((it) => { + it.default = false + return it + }) + return arr + } + + // 判断选择原因 + const selectIsDisabled = useMemo(() => { + if (Query.return_explain !== '') { + return false + } + else { + return true + } + }, [Query]) + + // 确认选择退货原因 + const handSlect = () => { + if (queryRef.current?.reasonName == '请选择') { + Taro.showToast({ + title: '请选择完整', + icon: 'error', + }) + return false + } + const resOne = ReasonList.filter((item) => { + return item.default + }) + queryRef.current.return_reason = resOne[0]?.id + queryRef.current.reasonName = resOne[0]?.name + const resTwo = ReasonListTwo.filter((item) => { + return item.default + }) + queryRef.current.return_explain = resTwo[0]?.id + queryRef.current.reasonNameTwo = resTwo[0]?.name + setQuery(val => ({ + ...val, + reasonName: queryRef.current.reasonName, + reasonNameTwo: queryRef.current.reasonNameTwo, + })) + setshowPopup(false) + } + + // 货物情况 + const [DescPopup, setDescPopup] = useState(false) + const { fetchData: statusFetch } = mpenumreturngoodsStatus() + const [GoodStatusList, setGoodStatusList] = useState([]) + useEffect(() => { + getGoodStatus() + }, []) + const getGoodStatus = async() => { + const res = await statusFetch() + if (res.data) { + setGoodStatusList(res.data.list) + } + } + + const handStatus = (item) => { + GoodStatusList.map((it) => { + if (it.id === item.id) { + it.default = true + } + else { + it.default = false + } + return it + }) + setQuery(val => ({ ...val, GoodStatus: item.id })) + setGoodStatusList([...GoodStatusList]) + } + + // 判断状态是否有选 + const StatusIsDisabled = useMemo(() => { + if (Query.GoodStatus !== '') { + return false + } + else { + return true + } + }, [Query]) + + // 重置货物状态 + const handResetStatus = () => { + const arr = resetArr(GoodStatusList) + setGoodStatusList([...arr]) + queryRef.current.GoodStatus = '' + queryRef.current.GoodStatusName = '请选择' + setQuery(val => ({ ...val, GoodStatus: '', GoodStatusName: '请选择' })) + } + + // 确认选择货物状况 + const handSlectStatus = () => { + const res = GoodStatusList.filter((item) => { + return item.default + }) + queryRef.current.GoodStatus = res[0].id + queryRef.current.GoodStatusName = res[0].name + setQuery(val => ({ ...val, GoodStatus: queryRef.current.GoodStatus, GoodStatusName: queryRef.current.GoodStatusName })) + setDescPopup(false) + } + + // 取消返回 + const handCancl = () => { + Taro.navigateBack({ + delta: 1, + }) + } + + // 确认退货 + const { fetchData: sureFetch } = mpreturnApplyOrder() + const handSure = () => { + if (Query.reasonNameTwo == '其他问题' && TextareaValue == '') { + Taro.showToast({ + title: '请填写其他说明', + icon: 'error', + duration: 3000, + }) + return false + } + const arr: any = [] + ListArr.forEach((item) => { + item.av_product_color.forEach((it) => { + if (it.isTui) { + arr.push({ + product_color_id: it.sale_mode == 0 ? it.product_color_id : '', + product_id: it.sale_mode == 0 ? it.product_id : '', + product_roll: it.sale_mode == 0 ? it.nums : 0, + sale_order_detail_id: it.sale_order_detail_id, + }) + } + }) + }) + const query = { + reason_describe: TextareaValue, + fabric_piece_accessory_url: picUrl.current, + goods_status: Query.GoodStatus, + return_reason: Query.return_reason, + return_explain: Query.return_explain, + roll: 0, + roll_list: arr, + sale_order_id: Number(infoObj.id), + } + + Taro.showModal({ + content: '确认退货吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + Taro.showLoading({ + title: '请稍等...', + mask: true, + }) + const res = await sureFetch(query) + if (res?.msg === 'success') { Taro.showToast({ - title: '请选择完整', - icon: 'error' + title: '成功', }) - return false - } - const resOne = ReasonList.filter(item => { - return item.default - }) - queryRef.current.return_reason = resOne[0]?.id - queryRef.current.reasonName = resOne[0]?.name - const resTwo = ReasonListTwo.filter(item => { - return item.default - }) - queryRef.current.return_explain = resTwo[0]?.id - queryRef.current.reasonNameTwo = resTwo[0]?.name - setQuery((val) => ({ - ...val, - reasonName: queryRef.current.reasonName, - reasonNameTwo: queryRef.current.reasonNameTwo - })) - setshowPopup(false) - } - - //货物情况 - const [DescPopup, setDescPopup] = useState(false) - const { fetchData: statusFetch } = mpenumreturngoodsStatus() - const [GoodStatusList, setGoodStatusList] = useState([]) - useEffect(() => { - getGoodStatus() - }, []) - const getGoodStatus = async () => { - const res = await statusFetch() - if (res.data) { - setGoodStatusList(res.data.list) - } - } - - const handStatus = (item) => { - GoodStatusList.map(it => { - if (it.id === item.id) { - it.default = true - } else { - it.default = false - } - return it - }) - setQuery((val) => ({ ...val, GoodStatus: item.id })) - setGoodStatusList([...GoodStatusList]) - } - - //判断状态是否有选 - const StatusIsDisabled = useMemo(() => { - if (Query.GoodStatus !== '') { - return false - } else { - return true - } - }, [Query]) - - //重置货物状态 - const handResetStatus = () => { - const arr = resetArr(GoodStatusList) - setGoodStatusList([...arr]) - queryRef.current.GoodStatus = '' - queryRef.current.GoodStatusName = '请选择' - setQuery((val) => ({ ...val, GoodStatus: '', GoodStatusName: '请选择' })) - } - - //确认选择货物状况 - const handSlectStatus = () => { - const res = GoodStatusList.filter(item => { - return item.default - }) - queryRef.current.GoodStatus = res[0].id - queryRef.current.GoodStatusName = res[0].name - setQuery((val) => ({ ...val, GoodStatus: queryRef.current.GoodStatus, GoodStatusName: queryRef.current.GoodStatusName })) - setDescPopup(false) - } - - //取消返回 - const handCancl = () => { - Taro.navigateBack({ - delta: 1 - }) - } - - //确认退货 - const { fetchData: sureFetch } = mpreturnApplyOrder() - const handSure = () => { - if (Query.reasonNameTwo == '其他问题' && TextareaValue == '') { + Taro.hideLoading() + handCancl() + } + else { + Taro.hideLoading() Taro.showToast({ - title: '请填写其他说明', - icon: 'error', - duration: 3000 + title: res?.msg, + icon: 'error', }) - return false + } } - const arr: any = []; - ListArr.forEach((item) => { - item.av_product_color.forEach((it) => { - if (it.isTui) { - arr.push({ - product_color_id: it.sale_mode == 0 ? it.product_color_id : '', - product_id: it.sale_mode == 0 ? it.product_id : '', - product_roll: it.sale_mode == 0 ? it.nums : 0, - sale_order_detail_id: it.sale_order_detail_id, - }); - } - - }); - }); - const query = { - reason_describe: TextareaValue, - fabric_piece_accessory_url: picUrl.current, - goods_status: Query.GoodStatus, - return_reason: Query.return_reason, - return_explain: Query.return_explain, - roll: 0, - roll_list: arr, - sale_order_id: Number(infoObj.id), - } - - Taro.showModal({ - content: "确认退货吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - const res = await sureFetch(query) - if (res?.msg === 'success') { - Taro.showToast({ - title: '成功' - }) - Taro.hideLoading() - handCancl() - } else { - Taro.hideLoading() - Taro.showToast({ - title: res?.msg, - icon: 'error' - }) - } - } + }, + }) + } + useEffect(() => { + setQuery(Query) + }, [Query]) + // 备注信息 + const [TextareaValue, setTextareaValue] = useState('') + const getDesc = (e) => { + setTextareaValue(e) + } + return ( + + + handTui(item)} + handCancel={item => handCancel(item)} + onBlur={(e, item) => onBlur(e, item)} + handReduce={item => handReduce(item)} + handAdd={item => handAdd(item)} + onInputEven={(e, item) => onInputEven(e, item)} + > + 汇总:已选{totalNums}种商品 + + + { setshowPopup(true) }}> + + 退货原因 + * + { + queryRef.current.reasonName === '请选择' && 请选择 } - }) - } - useEffect(() => { - setQuery(Query) - }, [Query]) - - //备注信息 - const [TextareaValue, setTextareaValue] = useState('') - const getDesc = (e) => { - setTextareaValue(e) - } - return ( - - - handTui(item)} - handCancel={(item) => handCancel(item)} - onBlur={(e, item) => onBlur(e, item)} - handReduce={(item) => handReduce(item)} - handAdd={(item) => handAdd(item)} - onInputEven={(e, item) => onInputEven(e, item)} - > - 汇总:已选{totalNums}种商品 - - - { setshowPopup(true) }}> - - 退货原因 - * - { - queryRef.current.reasonName === '请选择' && 请选择 - } - { - queryRef.current.reasonName !== '请选择' && {Query.reasonName}/{Query.reasonNameTwo} - } - - - - { setDescPopup?.(true) }}> - - 货物情况 - * - { - queryRef.current.GoodStatusName === '请选择' && 请选择 - } - { - queryRef.current.GoodStatusName !== '请选择' && {Query.GoodStatusName} - } - - - - - 拍照上传 - - - - - 其他说明 - - - - - - - - - - - { setshowPopup?.(false) }}> - - - - 退货原因 - - { - ReasonList.map((item, index) => { - return ( - { handReasonOne(item) }} className={classnames(item.default ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} - ) - }) - } - - - - 退货理由 - - { - ReasonListTwo.map((item, index) => { - return ( - { handReasonTwo(item) }} className={classnames(item.default ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} - ) - }) - } - - - - - - - - - - - { setDescPopup?.(false) }}> - - - - 货物情况 - - { - GoodStatusList.map((item, index) => { - return ( - { handStatus(item) }} className={classnames(item.default ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} - ) - }) - } - - - - - - - - - - + { + queryRef.current.reasonName !== '请选择' && {Query.reasonName}/{Query.reasonNameTwo} + } + + - ) + { setDescPopup?.(true) }}> + + 货物情况 + * + { + queryRef.current.GoodStatusName === '请选择' && 请选择 + } + { + queryRef.current.GoodStatusName !== '请选择' && {Query.GoodStatusName} + } + + + + + 拍照上传 + + + + + 其他说明 + + + + + + + + + + + { setshowPopup?.(false) }}> + + + + 退货原因 + + { + ReasonList.map((item, index) => { + return ( + { handReasonOne(item) }} className={classnames(item.default ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} + ) + }) + } + + + + 退货理由 + + { + ReasonListTwo.map((item, index) => { + return ( + { handReasonTwo(item) }} className={classnames(item.default ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} + ) + }) + } + + + + + + + + + + + { setDescPopup?.(false) }}> + + + + 货物情况 + + { + GoodStatusList.map((item, index) => { + return ( + { handStatus(item) }} className={classnames(item.default ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} + ) + }) + } + + + + + + + + + + + + ) } - - - - - -//产品商品元素 +// 产品商品元素 interface PropGoods { - list: any[], - obj: { - sale_mode?: number | string - }, - handTui?: (any) => void, - handCancel?: (any) => void, - onBlur?: (e: any, obj: any) => void, - onInputEven?: (e: any, obj: any) => void, - handReduce?: (any) => void, - handAdd?: (any) => void, + list: any[] + obj: { + sale_mode?: number | string + } + handTui?: (any) => void + handCancel?: (any) => void + onBlur?: (e: any, obj: any) => void + onInputEven?: (e: any, obj: any) => void + handReduce?: (any) => void + handAdd?: (any) => void } const GoodsItem = memo((porps: PropGoods) => { - const { list = [], obj = {}, handTui, handCancel, onBlur, handReduce, handAdd, onInputEven } = porps - // const [value, setValue] = useState({ count: 1 }) - // const onInputEven = (e) => { - // let res = Number(e.detail.value) - // if (res < 1) { - // setValue({ count: 1 }) - // } else { - // setValue({ count: res }) - // } - // } + const { list = [], obj = {}, handTui, handCancel, onBlur, handReduce, handAdd, onInputEven } = porps + // const [value, setValue] = useState({ count: 1 }) + // const onInputEven = (e) => { + // let res = Number(e.detail.value) + // if (res < 1) { + // setValue({ count: 1 }) + // } else { + // setValue({ count: res }) + // } + // } - return ( - <> - { - list.map((item, index) => { - return ( - - {item.product_code}# {item.product_name} - - { - item.av_product_color.map((it, inx) => { - return ( - - - {/* */} - - - {it.product_color_code} {it.product_color_name} - - - x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} - { - !it.isTui && handTui?.(it)}>退货 - } - { - (it.sale_mode != 0 && it.isTui) && handCancel?.(it)}>已选择退货 - } - { - (it.sale_mode == 0 && it.isTui) && - handReduce?.(it)}> - - - - onInputEven?.(e, it)} maxlength={it.roll} onBlur={(e) => onBlur?.(e, it)}> - - handAdd?.(it)}> - + - - - } - - - - ) - }) - } + return ( + <> + { + list.map((item, index) => { + return ( + + {item.product_code}# {item.product_name} + + { + item.av_product_color.map((it, inx) => { + return ( + + + {/* */} + + + {it.product_color_code} {it.product_color_name} - ) + + x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} + { + !it.isTui && handTui?.(it)}>退货 + } + { + (it.sale_mode != 0 && it.isTui) && handCancel?.(it)}>已选择退货 + } + { + (it.sale_mode == 0 && it.isTui) && + handReduce?.(it)}> + + + + onInputEven?.(e, it)} maxlength={it.roll} onBlur={e => onBlur?.(e, it)}> + + handAdd?.(it)}> + + + + + } + + + + ) }) - } - + } + + ) + }) + } + - ) -}) \ No newline at end of file + ) +}) diff --git a/src/pages/applyMoney/index.tsx b/src/pages/applyMoney/index.tsx index 2304514..79d8c40 100644 --- a/src/pages/applyMoney/index.tsx +++ b/src/pages/applyMoney/index.tsx @@ -1,522 +1,516 @@ -import { View, Input, Button, Image, Text, Textarea, ScrollView } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, ReactNode, memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; +import { Button, Image, Input, ScrollView, Text, Textarea, View } from '@tarojs/components' import Taro, { faceVerifyForPay, useDidShow, useRouter } from '@tarojs/taro' +import { ReactNode, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from '@/common/format' import { - mpsaleOrder, - mpreturnApplyOrder, - mpenumrefundExplainone, -} from "@/api/order" + mpenumrefundExplainone, + mpreturnApplyOrder, + mpsaleOrder, +} from '@/api/order' import Popup from '@/components/popup' - export default () => { + useEffect(() => { + getDetail() + getEnum() + }, []) + const Router = useRouter() + const { fetchData: infoFetch } = mpsaleOrder() + const [ListArr, setListArr] = useState([]) + const [infoObj, setInfoObj] = useState({}) - useEffect(() => { - getDetail() - getEnum() - }, []) - const Router = useRouter() - const { fetchData: infoFetch } = mpsaleOrder() - const [ListArr, setListArr] = useState([]) - const [infoObj, setInfoObj] = useState({}) + // 获取订单详情 + const getDetail = async() => { + Taro.showLoading({ + title: '请稍等...', + mask: true, + }) + const res = await infoFetch({ id: Router.params.orderId }) + if (res.data) { + res.data.av_return_product.forEach((item) => { + item.av_product_color.map((it) => { + it.isTui = false + it.nums = 1 + }) + return item + }) + setInfoObj(res.data) + setListArr(res.data.av_return_product) + Taro.hideLoading() + } + } - //获取订单详情 - const getDetail = async () => { - Taro.showLoading({ + // 点击退货 + const handTui = (val) => { + const res = ListArr + res.forEach((item) => { + item.av_product_color?.map((it) => { + if (it.sale_order_detail_id == val.sale_order_detail_id) { + it.isTui = true + } + return it + }) + }) + setListArr([...res]) + } + // 点击取消退货 + const handCancel = (val) => { + ListArr.forEach((item) => { + item.av_product_color.map((it) => { + if (it.sale_order_detail_id === val.sale_order_detail_id) { + it.isTui = false + } + return it + }) + }) + setListArr([...ListArr]) + } + + // 点击减 + const handReduce = (val) => { + ListArr.forEach((item) => { + item.av_product_color.map((it) => { + if (it.sale_order_detail_id === val.sale_order_detail_id) { + if (val.nums === 1) { + it.isTui = false + it.nums = 1 + } + else { + it.nums-- + } + } + return it + }) + }) + setListArr([...ListArr]) + } + + const onInputEven = (e, val) => { + ListArr.forEach((item) => { + item.av_product_color.map((it) => { + if (it.sale_order_detail_id === val.sale_order_detail_id) { + if (Number(e.detail.value) < 1 || e.detail.value == '') { + it.isTui = false + it.nums = 1 + } + else { + it.nums = Number(e.detail.value) + } + if (Number(e.detail.value) > it.roll) { + it.nums = 1 + } + } + return it + }) + }) + setListArr([...ListArr]) + } + + const onBlur = (e, val) => { + ListArr.forEach((item) => { + item.av_product_color.map((it) => { + if (it.sale_order_detail_id === val.sale_order_detail_id) { + if (Number(e.detail.value) < 1 || e.detail.value == '') { + it.isTui = false + it.nums = 1 + } + else { + it.nums = Number(e.detail.value) + } + if (Number(e.detail.value) > it.roll) { + it.nums = 1 + } + } + return it + }) + }) + setListArr([...ListArr]) + } + + // 点击加 + const handAdd = (val) => { + ListArr.forEach((item) => { + item.av_product_color.map((it) => { + if (it.sale_order_detail_id === val.sale_order_detail_id) { + if (it.nums < it.roll) { + it.nums++ + } + else { + return + } + } + return it + }) + }) + setListArr([...ListArr]) + } + + // 获取枚举 + const [List, setList] = useState([]) + const { fetchData: explanFetch } = mpenumrefundExplainone() + const getEnum = async() => { + const res = await explanFetch() + if (res.data) { + setList(res.data.list) + } + } + + // 选择退货原因 + const handReasonOne = (item) => { + List.map((it) => { + if (it.id === item.id) { + it.default = true + } + else { + it.default = false + } + return it + }) + setList([...List]) + setQuery(val => ({ ...val, reasonId: item.id })) + queryRef.current.reasonName = item.name + } + + // 筛选内容展示 + const [showPopup, setshowPopup] = useState(false) + + const queryRef = useRef({ + reasonName: '请选择', + }) + const [Query, setQuery] = useState({ + reasonId: '', + reasonName: '请选择', + }) + + // 备注信息 + const [TextareaValue, setTextareaValue] = useState('') + const getDesc = (e) => { + setTextareaValue(e) + } + + // 取消返回 + const handCancl = () => { + Taro.navigateBack({ + delta: 1, + }) + } + + // 确认选择 + const handSlect = () => { + setQuery(val => ({ ...val, reasonName: queryRef.current.reasonName })) + setshowPopup(false) + } + + const totalNums = useMemo(() => { + const arr: any[] = [] + ListArr.forEach((item) => { + item.av_product_color.forEach((it) => { + if (it.isTui) { + arr.push(it) + } + }) + }) + return arr.length + }, [ListArr]) + + // 重置 + const handReset = () => { + setQuery(({ reasonId: '', reasonName: '请选择' })) + queryRef.current.reasonName = '请选择' + const arrOne = resetArr(List) + setList([...arrOne]) + } + + // 判断是否允许提交 + const isDisabled = useMemo(() => { + if (Query.reasonId !== '') { + return false + } + else { + return true + } + }, [Query]) + + // 判断是否允许提交 + const canTui = useMemo(() => { + if (totalNums > 0 && Query.reasonId !== '') { + return false + } + else { + return true + } + }, [Query, totalNums]) + + const noGoods = useMemo(() => { + if (Query.reasonId !== '') { + return false + } + else { + return true + } + }, [Query]) + + // 数组重置 + const resetArr = (arr) => { + arr.map((it) => { + it.default = false + return it + }) + return arr + } + // 确认退款 + const { fetchData: sureFetch } = mpreturnApplyOrder() + const handSure = () => { + if (queryRef.current.reasonName == '其他问题' && TextareaValue == '') { + Taro.showToast({ + title: '请填写其他说明', + icon: 'error', + duration: 3000, + }) + return false + } + const arr: any = [] + if (infoObj.sale_mode == 0 && infoObj.status == 9) { + ListArr.forEach((item) => { + item.av_product_color.forEach((it) => { + if (it.isTui) { + arr.push({ + product_color_id: it.sale_mode == 0 ? it.product_color_id : '', + product_id: it.sale_mode == 0 ? it.product_id : '', + product_roll: it.sale_mode == 0 ? it.nums : 0, + sale_order_detail_id: it.sale_order_detail_id, + }) + } + }) + }) + } + if ((infoObj.sale_mode == 1 && infoObj.status == 9) || (infoObj.sale_mode == 2 && infoObj.status == 9)) { + ListArr.forEach((item) => { + item.av_product_color.forEach((it) => { + if (it.isTui) { + arr.push({ + product_color_id: it.product_color_id, + product_id: it.product_id, + product_roll: 0, + sale_order_detail_id: it.sale_order_detail_id, + }) + } + }) + }) + } + const query = { + reason_describe: TextareaValue, + fabric_piece_accessory_url: [], + goods_status: 0, + return_reason: 1, + return_explain: Query.reasonId, + roll: 0, + roll_list: arr, + sale_order_id: Number(Router.params.orderId), + } + console.log(query, 888) + Taro.showModal({ + content: '确认退款吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + Taro.showLoading({ title: '请稍等...', - mask: true - }) - const res = await infoFetch({ id: Router.params.orderId }) - if (res.data) { - res.data.av_return_product.forEach(item => { - item.av_product_color.map(it => { - it.isTui = false - it.nums = 1 - }) - return item - }) - setInfoObj(res.data) - setListArr(res.data.av_return_product) - Taro.hideLoading() - } - } - - //点击退货 - const handTui = (val) => { - let res = ListArr - res.forEach(item => { - item.av_product_color?.map(it => { - if (it.sale_order_detail_id == val.sale_order_detail_id) { - it.isTui = true - } - return it - }) - - }) - setListArr([...res]) - - } - //点击取消退货 - const handCancel = (val) => { - ListArr.forEach(item => { - item.av_product_color.map(it => { - if (it.sale_order_detail_id === val.sale_order_detail_id) { - it.isTui = false - } - return it - }) - }) - setListArr([...ListArr]) - } - - //点击减 - const handReduce = (val) => { - ListArr.forEach(item => { - item.av_product_color.map(it => { - if (it.sale_order_detail_id === val.sale_order_detail_id) { - if (val.nums === 1) { - it.isTui = false - it.nums = 1 - } else { - it.nums-- - } - } - return it - }) - }) - setListArr([...ListArr]) - } - - const onInputEven = (e, val) => { - ListArr.forEach(item => { - item.av_product_color.map(it => { - if (it.sale_order_detail_id === val.sale_order_detail_id) { - if (Number(e.detail.value) < 1 || e.detail.value == '') { - it.isTui = false - it.nums = 1 - } else { - it.nums = Number(e.detail.value) - } - if (Number(e.detail.value) > it.roll) { - it.nums = 1 - } - } - return it - }) - }) - setListArr([...ListArr]) - } - - const onBlur = (e, val) => { - ListArr.forEach(item => { - item.av_product_color.map(it => { - if (it.sale_order_detail_id === val.sale_order_detail_id) { - if (Number(e.detail.value) < 1 || e.detail.value == '') { - it.isTui = false - it.nums = 1 - } else { - it.nums = Number(e.detail.value) - } - if (Number(e.detail.value) > it.roll) { - it.nums = 1 - } - } - return it - }) - }) - setListArr([...ListArr]) - } - - //点击加 - const handAdd = (val) => { - ListArr.forEach(item => { - item.av_product_color.map(it => { - if (it.sale_order_detail_id === val.sale_order_detail_id) { - if (it.nums < it.roll) { - it.nums++ - } else { - return - } - } - return it - }) - }) - setListArr([...ListArr]) - } - - //获取枚举 - const [List, setList] = useState([]) - const { fetchData: explanFetch } = mpenumrefundExplainone() - const getEnum = async () => { - const res = await explanFetch() - if (res.data) { - setList(res.data.list) - } - } - - //选择退货原因 - const handReasonOne = (item) => { - List.map(it => { - if (it.id === item.id) { - it.default = true - } else { - it.default = false - } - return it - }) - setList([...List]) - setQuery((val) => ({ ...val, reasonId: item.id })) - queryRef.current.reasonName = item.name - } - - //筛选内容展示 - const [showPopup, setshowPopup] = useState(false) - - const queryRef = useRef({ - reasonName: '请选择' - }) - const [Query, setQuery] = useState({ - reasonId: '', - reasonName: '请选择' - }) - - - //备注信息 - const [TextareaValue, setTextareaValue] = useState('') - const getDesc = (e) => { - setTextareaValue(e) - } - - //取消返回 - const handCancl = () => { - Taro.navigateBack({ - delta: 1 - }) - } - - //确认选择 - const handSlect = () => { - setQuery((val) => ({ ...val, reasonName: queryRef.current.reasonName })) - setshowPopup(false) - } - - const totalNums = useMemo(() => { - const arr: any[] = [] - ListArr.forEach(item => { - item.av_product_color.forEach(it => { - if (it.isTui) { - arr.push(it) - } - }) - }) - return arr.length - }, [ListArr]) - - //重置 - const handReset = () => { - setQuery(({ reasonId: '', reasonName: '请选择' })) - queryRef.current.reasonName = '请选择' - const arrOne = resetArr(List) - setList([...arrOne]) - } - - //判断是否允许提交 - const isDisabled = useMemo(() => { - if (Query.reasonId !== '') { - return false - } else { - return true - } - }, [Query]) - - //判断是否允许提交 - const canTui = useMemo(() => { - if (totalNums > 0 && Query.reasonId !== '') { - return false - } else { - return true - } - - }, [Query, totalNums]) - - const noGoods = useMemo(() => { - if (Query.reasonId !== '') { - return false - } else { - return true - } - - }, [Query]) - - - //数组重置 - const resetArr = (arr) => { - arr.map(it => { - it.default = false - return it - }) - return arr - } - //确认退款 - const { fetchData: sureFetch } = mpreturnApplyOrder() - const handSure = () => { - if (queryRef.current.reasonName == '其他问题' && TextareaValue == '') { + mask: true, + }) + const res = await sureFetch(query) + if (res?.msg === 'success') { Taro.showToast({ - title: '请填写其他说明', - icon: 'error', - duration: 3000 + title: '成功', }) - return false + Taro.hideLoading() + handCancl() + } + else { + Taro.hideLoading() + Taro.showToast({ + title: res?.msg, + icon: 'error', + }) + } } - let arr: any = []; - if (infoObj.sale_mode == 0 && infoObj.status == 9) { - ListArr.forEach((item) => { - item.av_product_color.forEach((it) => { - if (it.isTui) { - arr.push({ - product_color_id: it.sale_mode == 0 ? it.product_color_id : '', - product_id: it.sale_mode == 0 ? it.product_id : '', - product_roll: it.sale_mode == 0 ? it.nums : 0, - sale_order_detail_id: it.sale_order_detail_id, - }); - } + }, + }) + } - }); - }); - } - if ((infoObj.sale_mode == 1 && infoObj.status == 9) || (infoObj.sale_mode == 2 && infoObj.status == 9)) { - ListArr.forEach((item) => { - item.av_product_color.forEach((it) => { - if (it.isTui) { - arr.push({ - product_color_id: it.product_color_id, - product_id: it.product_id, - product_roll: 0, - sale_order_detail_id: it.sale_order_detail_id, - }); - } - - }); - }); - } - const query = { - reason_describe: TextareaValue, - fabric_piece_accessory_url: [], - goods_status: 0, - return_reason: 1, - return_explain: Query.reasonId, - roll: 0, - roll_list: arr, - sale_order_id: Number(Router.params.orderId), - }; - console.log(query, 888) - Taro.showModal({ - content: "确认退款吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - const res = await sureFetch(query) - if (res?.msg === 'success') { - Taro.showToast({ - title: '成功' - }) - Taro.hideLoading() - handCancl() - } else { - Taro.hideLoading() - Taro.showToast({ - title: res?.msg, - icon: 'error' - }) - } - } - - } - }) + const showItem = useMemo(() => { + if ((infoObj.sale_mode == 0 && infoObj.status == 9) || (infoObj.sale_mode == 1 && infoObj.status == 9) || (infoObj.sale_mode == 2 && infoObj.status == 9)) { + return true } + else { + return false + } + }, [infoObj]) - - - const showItem = useMemo(() => { - if ((infoObj.sale_mode == 0 && infoObj.status == 9) || (infoObj.sale_mode == 1 && infoObj.status == 9) || (infoObj.sale_mode == 2 && infoObj.status == 9)) { - return true - } else { - return false - } - - }, [infoObj]) - - return ( - - { - showItem && - handTui(item)} - handCancel={(item) => handCancel(item)} - onBlur={(e, item) => onBlur(e, item)} - handReduce={(item) => handReduce(item)} - handAdd={(item) => handAdd(item)} - onInputEven={(e, item) => onInputEven(e, item)} - > - 汇总:已选{totalNums}种商品 - - } - - { setshowPopup(true) }}> - - 退款原因 - * - { - Query.reasonName === '请选择' && 请选择 - } - { - Query.reasonName !== '请选择' && {Query.reasonName} - } - - - - - - 其他说明 - - - - - - - - - { - showItem && - - } - { - !showItem && - - } - - - { setshowPopup?.(false) }}> - - - - 退款原因 - - { - List.map((item, index) => { - return ( - { handReasonOne(item) }} className={classnames(item.default ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} - ) - }) - } - - - - - - - - - - - + return ( + + { + showItem && + handTui(item)} + handCancel={item => handCancel(item)} + onBlur={(e, item) => onBlur(e, item)} + handReduce={item => handReduce(item)} + handAdd={item => handAdd(item)} + onInputEven={(e, item) => onInputEven(e, item)} + > + 汇总:已选{totalNums}种商品 - ) + } + + { setshowPopup(true) }}> + + 退款原因 + * + { + Query.reasonName === '请选择' && 请选择 + } + { + Query.reasonName !== '请选择' && {Query.reasonName} + } + + + + + + 其他说明 + + + + + + + + + { + showItem && + + } + { + !showItem && + + } + + + { setshowPopup?.(false) }}> + + + + 退款原因 + + { + List.map((item, index) => { + return ( + { handReasonOne(item) }} className={classnames(item.default ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} + ) + }) + } + + + + + + + + + + + + + ) } - - -//产品商品元素 +// 产品商品元素 interface PropGoods { - list: any[], - obj: { - sale_mode?: number | string - }, - handTui?: (any) => void, - handCancel?: (any) => void, - onBlur?: (e: any, obj: any) => void, - onInputEven?: (e: any, obj: any) => void, - handReduce?: (any) => void, - handAdd?: (any) => void, + list: any[] + obj: { + sale_mode?: number | string + } + handTui?: (any) => void + handCancel?: (any) => void + onBlur?: (e: any, obj: any) => void + onInputEven?: (e: any, obj: any) => void + handReduce?: (any) => void + handAdd?: (any) => void } const GoodsItem = memo((porps: PropGoods) => { - const { list = [], obj = {}, handTui, handCancel, onBlur, handReduce, handAdd, onInputEven } = porps - // const [value, setValue] = useState({ count: 1 }) - // const onInputEven = (e) => { - // let res = Number(e.detail.value) - // if (res < 1) { - // setValue({ count: 1 }) - // } else { - // setValue({ count: res }) - // } - // } + const { list = [], obj = {}, handTui, handCancel, onBlur, handReduce, handAdd, onInputEven } = porps + // const [value, setValue] = useState({ count: 1 }) + // const onInputEven = (e) => { + // let res = Number(e.detail.value) + // if (res < 1) { + // setValue({ count: 1 }) + // } else { + // setValue({ count: res }) + // } + // } - return ( - <> - { - list.map((item, index) => { - return ( - - {item.product_code}# {item.product_name} - - { - item.av_product_color.map((it, inx) => { - return ( - - - {/* */} - - - {it.product_color_code} {it.product_color_name} - - - x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} - { - !it.isTui && handTui?.(it)}>退货 - } - { - (it.sale_mode != 0 && it.isTui) && handCancel?.(it)}>已选择退货 - } - { - (it.sale_mode == 0 && it.isTui) && - handReduce?.(it)}> - - - - onInputEven?.(e, it)} maxlength={it.roll} onBlur={(e) => onBlur?.(e, it)}> - - handAdd?.(it)}> - + - - - } - - - - ) - }) - } + return ( + <> + { + list.map((item, index) => { + return ( + + {item.product_code}# {item.product_name} + + { + item.av_product_color.map((it, inx) => { + return ( + + + {/* */} + + + {it.product_color_code} {it.product_color_name} - ) + + x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} + { + !it.isTui && handTui?.(it)}>退货 + } + { + (it.sale_mode != 0 && it.isTui) && handCancel?.(it)}>已选择退货 + } + { + (it.sale_mode == 0 && it.isTui) && + handReduce?.(it)}> + + + + onInputEven?.(e, it)} maxlength={it.roll} onBlur={e => onBlur?.(e, it)}> + + handAdd?.(it)}> + + + + + } + + + + ) }) - } - + } + + ) + }) + } + - ) -}) \ No newline at end of file + ) +}) diff --git a/src/pages/collectionDetail/components/form/index.tsx b/src/pages/collectionDetail/components/form/index.tsx index 2e92fcc..96b4a81 100644 --- a/src/pages/collectionDetail/components/form/index.tsx +++ b/src/pages/collectionDetail/components/form/index.tsx @@ -1,104 +1,101 @@ -import { ScrollView, View, Text, Input } from '@tarojs/components' -import { memo, useCallback, useEffect, useMemo, useState } from 'react' -import styles from './index.module.scss' -import classnames from 'classnames' -// import BottomBtns from '@/components/BottomBtns' -import { formatPriceDiv, formatDateTime } from '@/common/format' +import { Input, ScrollView, Text, View } from '@tarojs/components' import Taro from '@tarojs/taro' +import { memo, useCallback, useEffect, useMemo, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' +// import BottomBtns from '@/components/BottomBtns' +import { formatDateTime, formatPriceDiv } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' import UploadImage from '@/components/uploadImage' interface Params { - title?: string, //传入的名称 - require?: boolean, //是否显示必须选填的内容图标 - isInput?: boolean, //是否显示输入框 - inputValue?: string, //输入框的值 - inputType?: any, //输入框类型 - getInput?: (any) => void //输入框回调 - showScan?: boolean, //是否显示扫描图标 - placeholderFont?: string, //输入框默认文本 - showMore?: boolean, // 是否显示更多图标 - disabled?: boolean, // 是否输入框禁止 - onlyRead?: boolean, //图片是否只读 - showPic?: boolean, // 是否显示图片组件 - getImageList?: (any) => void //上传图片回调 - PicList?: any[], //默认图片列表 - styleNone?: boolean, //根据不同的栏目调整样式 - getScan?: (any) => void, // 扫描 - navTo?: () => void, //跳转选择 - showSizeFont?: boolean, //展示金额的大写 - bigMoney?: any //展示的大写金额 + title?: string // 传入的名称 + require?: boolean // 是否显示必须选填的内容图标 + isInput?: boolean // 是否显示输入框 + inputValue?: string // 输入框的值 + inputType?: any // 输入框类型 + getInput?: (any) => void // 输入框回调 + showScan?: boolean // 是否显示扫描图标 + placeholderFont?: string // 输入框默认文本 + showMore?: boolean // 是否显示更多图标 + disabled?: boolean // 是否输入框禁止 + onlyRead?: boolean // 图片是否只读 + showPic?: boolean // 是否显示图片组件 + getImageList?: (any) => void // 上传图片回调 + PicList?: any[] // 默认图片列表 + styleNone?: boolean // 根据不同的栏目调整样式 + getScan?: (any) => void // 扫描 + navTo?: () => void // 跳转选择 + showSizeFont?: boolean // 展示金额的大写 + bigMoney?: any // 展示的大写金额 } export default memo((pros: Params) => { - - - return ( - - - - {pros.title} - { - pros.require && * - } - - { - pros.showSizeFont && 展示大小写 - } - - { - pros.showPic && - - - - } - { - !pros.showPic && pros.navTo?.()} - style={{ - justifyContent: `${!pros.showSizeFont ? 'space-between' : ''}`, alignItems: `${!pros.showSizeFont ? 'center' : ''}`, - display: `${!pros.showSizeFont ? 'flex' : ''}` - }} - > - - { - pros.isInput && pros.getInput?.(e.detail.value)} - > - } - { - !pros.isInput && {pros.inputValue} - } - - - - { - pros.showMore && - - - } - { - pros.showScan && - - } - { - pros.showScan && pros.getScan?.(e)}> - - } - { - pros.showSizeFont && {pros.bigMoney} - } - - } - + return ( + + + + {pros.title} + { + pros.require && * + } - ) -}) \ No newline at end of file + { + pros.showSizeFont && 展示大小写 + } + + { + pros.showPic + && + + + } + { + !pros.showPic && pros.navTo?.()} + style={{ + justifyContent: `${!pros.showSizeFont ? 'space-between' : ''}`, + alignItems: `${!pros.showSizeFont ? 'center' : ''}`, + display: `${!pros.showSizeFont ? 'flex' : ''}`, + }} + > + + { + pros.isInput && pros.getInput?.(e.detail.value)} + > + } + { + !pros.isInput && {pros.inputValue} + } + + + + { + pros.showMore && + + } + { + pros.showScan && + + } + { + pros.showScan && pros.getScan?.(e)}> + + } + { + pros.showSizeFont && {pros.bigMoney} + } + + } + + + ) +}) diff --git a/src/pages/collectionDetail/index.tsx b/src/pages/collectionDetail/index.tsx index 9332231..8c9a323 100644 --- a/src/pages/collectionDetail/index.tsx +++ b/src/pages/collectionDetail/index.tsx @@ -1,88 +1,84 @@ -import { View, Input, Button, Textarea } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, } from 'react' +import { Button, Input, Textarea, View } from '@tarojs/components' +import Taro, { faceVerifyForPay, useDidShow, useRouter } from '@tarojs/taro' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import dayjs from 'dayjs' +import styles from './index.module.scss' +import Form from './components/form' import Search from '@/components/search' import { dataLoadingStatus, getFilterData } from '@/common/util' -import styles from "./index.module.scss" -import classnames from "classnames"; import Popup from '@/components/popup' import InfiniteScroll from '@/components/infiniteScroll' -import Taro, { faceVerifyForPay, useDidShow, useRouter } from '@tarojs/taro' -import Form from './components/form' import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from '@/common/format' import { - mpcashManagementOrder -} from "@/api/newCollection" -import TimePicker from "@/components/timePicker" -import dayjs from 'dayjs' -import { alert } from "@/common/common" + mpcashManagementOrder, +} from '@/api/newCollection' +import TimePicker from '@/components/timePicker' +import { alert } from '@/common/common' import smallToBig from '@/common/money' -import { IMG_CND_Prefix } from "@/common/constant"; +import { IMG_CND_Prefix } from '@/common/constant' export default () => { - - const router = useRouter() - const [Query, setQuery] = useState({}) - const { fetchData: getFetch } = mpcashManagementOrder() - useEffect(() => { - getDetail() - }, []) - const getDetail = async () => { - Taro.showLoading({ - title: '请稍等', - mask: true - }) - const res = await getFetch({ id: Number(router.params.id) }) - if (res.data) { - // res.data?.payment_credential_url?.map(it => { - // it = IMG_CND_Prefix + it - // return it - // }) - Taro.hideLoading() - setQuery(res.data) - } - + const router = useRouter() + const [Query, setQuery] = useState({}) + const { fetchData: getFetch } = mpcashManagementOrder() + useEffect(() => { + getDetail() + }, []) + const getDetail = async() => { + Taro.showLoading({ + title: '请稍等', + mask: true, + }) + const res = await getFetch({ id: Number(router.params.id) }) + if (res.data) { + // res.data?.payment_credential_url?.map(it => { + // it = IMG_CND_Prefix + it + // return it + // }) + Taro.hideLoading() + setQuery(res.data) } + } + useEffect(() => { + setQuery(Query) + }, [Query]) - useEffect(() => { - setQuery(Query) - }, [Query]) + const money = useMemo(() => { + let res = 0 + res = Query.receipt_amount / 100 + return res + }, [Query]) - const money = useMemo(() => { - let res = 0 - res = Query.receipt_amount / 100 - return res - }, [Query]) - - - return ( - <> - - 收款金额(元) - {money} - {smallToBig(typeof (money) == 'undefined' ? 0 : money)} - - - - 订单编号 - - {Query.order_no} - {Query.auditor_status_name} - - -
- {/*
+ + 收款金额(元) + {money} + {smallToBig(typeof (money) == 'undefined' ? 0 : money)} + + + + 订单编号 + + {Query.order_no} + {Query.auditor_status_name} + + + + {/*
{ showSizeFont={true} bigMoney={smallToBig(typeof (money) == 'undefined' ? 0 : money)} >
*/} -
-
- - 备注信息 - - { - Query.remark !== '' && - } +
+
+ + 备注信息 + + { + Query.remark !== '' && + } - {/* {`${typeof (Query.nums) == 'undefined' ? 0 : Query.nums}/64`} */} - - - - 创建信息 - - {Query.creator_name} - {formatDateTime(Query.create_time)} - - - - 审核信息 - - {Query.auditor_name} - {formatDateTime(Query.audit_time)} - - -
- - - ) -} \ No newline at end of file + {/* {`${typeof (Query.nums) == 'undefined' ? 0 : Query.nums}/64`} */} +
+
+ + 创建信息 + + {Query.creator_name} + {formatDateTime(Query.create_time)} + + + + 审核信息 + + {Query.auditor_name} + {formatDateTime(Query.audit_time)} + + +
+ + + ) +} diff --git a/src/pages/colorRelated/components/bluetooth/LinkBlueTooth.tsx b/src/pages/colorRelated/components/bluetooth/LinkBlueTooth.tsx index 150eacc..96918bd 100644 --- a/src/pages/colorRelated/components/bluetooth/LinkBlueTooth.tsx +++ b/src/pages/colorRelated/components/bluetooth/LinkBlueTooth.tsx @@ -1,11 +1,11 @@ import { View } from '@tarojs/components' -import { memo, useEffect, useMemo, useState } from 'react' import Taro from '@tarojs/taro' -import { useBluetooth } from '@/use/contextBlueTooth' -import SearchInput from '@/components/searchInput' -import Popup from './Popup' +import { memo, useEffect, useMemo, useState } from 'react' import classnames from 'classnames' import styles from '../css/linkBlueTooth.module.scss' +import Popup from './Popup' +import { useBluetooth } from '@/use/contextBlueTooth' +import SearchInput from '@/components/searchInput' export default memo(() => { const { state, init, startScan, connect, disconnect } = useBluetooth() @@ -18,9 +18,11 @@ export default memo(() => { useEffect(() => { if (!state.available) { setLinkStatus(1) - } else if (state.available && state.connected?.name) { + } + else if (state.available && state.connected?.name) { setLinkStatus(3) - } else { + } + else { setLinkStatus(2) } }, [state.available, state.connected]) @@ -30,13 +32,13 @@ export default memo(() => { return state.connected?.localName || '' }, [state.connected]) - //链接设备 + // 链接设备 const onLinkListen = (item) => { - if (!state.connected && !state.connecting) connect(item) + if (!state.connected && !state.connecting) { connect(item) } } const [popupShow, setPopupShow] = useState(false) - //显示设备列表 + // 显示设备列表 const onFindDevice = () => { console.log('linkStatus==>', linkStatus) if (linkStatus == 1) { @@ -44,16 +46,17 @@ export default memo(() => { title: '请打开蓝牙', icon: 'none', }) - } else { + } + else { setPopupShow(true) onFindEven() } } const onFindEven = () => { - if (!state.discovering && !state.connected && !state.connecting) startScan() + if (!state.discovering && !state.connected && !state.connecting) { startScan() } } - //断开链接 + // 断开链接 const onDisconnect = () => { disconnect() setPopupShow(false) @@ -62,19 +65,19 @@ export default memo(() => { return ( <> - + - {(linkStatus == 1 && 请开启蓝牙) || - (linkStatus == 2 && 未连接设备) || - (linkStatus == 3 && {linkName})} + {(linkStatus == 1 && 请开启蓝牙) + || (linkStatus == 2 && 未连接设备) + || (linkStatus == 3 && {linkName})} setPopupShow(false)} - onLink={(item) => onLinkListen(item)} + onLink={item => onLinkListen(item)} onOff={onDisconnect} onFind={onFindEven} /> diff --git a/src/pages/colorRelated/components/bluetooth/Popup.tsx b/src/pages/colorRelated/components/bluetooth/Popup.tsx index 1e23885..d6190bc 100644 --- a/src/pages/colorRelated/components/bluetooth/Popup.tsx +++ b/src/pages/colorRelated/components/bluetooth/Popup.tsx @@ -1,7 +1,7 @@ import { ScrollView, View } from '@tarojs/components' import { memo, useEffect, useState } from 'react' -import Loading from '@/components/loading' import style from '../css/popup.module.scss' +import Loading from '@/components/loading' interface params { state: any @@ -30,15 +30,15 @@ export default memo(({ state, show = false, onClose, onLink, onOff, onFind }: pa 搜索设备 - {(state.devices && - state.devices.length > 0 && - state?.devices.map((item) => { + {(state.devices + && state.devices.length > 0 + && state?.devices.map((item) => { return ( onLink(item)}> {item.name} - {(!state.connecting && !state.connected && 链接) || - (state.connecting && item.deviceId == state.connecting.deviceId && 正在链接...) || - (state.connected && item.deviceId == state.connected.deviceId && 链接成功)} + {(!state.connecting && !state.connected && 链接) + || (state.connecting && item.deviceId == state.connecting.deviceId && 正在链接...) + || (state.connected && item.deviceId == state.connected.deviceId && 链接成功)} ) })) || ( @@ -59,17 +59,17 @@ export default memo(({ state, show = false, onClose, onLink, onOff, onFind }: pa 断开链接 - )) || - (!state.connected && state.discovering && ( + )) + || (!state.connected && state.discovering && ( 搜索中 - + )) || ( - + 重新搜索 - - )} + + )} diff --git a/src/pages/colorRelated/findColor/components/DrawerCenter/index.tsx b/src/pages/colorRelated/findColor/components/DrawerCenter/index.tsx index d1093b7..2daf39c 100644 --- a/src/pages/colorRelated/findColor/components/DrawerCenter/index.tsx +++ b/src/pages/colorRelated/findColor/components/DrawerCenter/index.tsx @@ -1,8 +1,9 @@ -import { View } from "@tarojs/components" -import React, { FC, memo, useEffect, useState } from "react" +import { View } from '@tarojs/components' +import type { FC } from 'react' +import React, { memo, useEffect, useState } from 'react' import styles from './index.module.scss' -type PropsType = { +interface PropsType { showModal: boolean children?: React.ReactNode } @@ -20,11 +21,13 @@ const DrawerCenter: FC = memo((props) => { setShow(false) } - return show ? ( - - {children} - - - ) : null + return show + ? ( + + {children} + + + ) + : null }) export default DrawerCenter diff --git a/src/pages/colorRelated/findColor/components/HistoryColor/index.tsx b/src/pages/colorRelated/findColor/components/HistoryColor/index.tsx index 4a579aa..027b61d 100644 --- a/src/pages/colorRelated/findColor/components/HistoryColor/index.tsx +++ b/src/pages/colorRelated/findColor/components/HistoryColor/index.tsx @@ -1,18 +1,19 @@ -import Popup from '@/components/popup' import { ScrollView, View } from '@tarojs/components' -import { FC, forwardRef, useEffect, useImperativeHandle, useState } from 'react' +import Taro from '@tarojs/taro' +import type { FC } from 'react' +import { forwardRef, useEffect, useImperativeHandle, useState } from 'react' import styles from './index.module.scss' +import Popup from '@/components/popup' import { formatDateTime, formatHashTag } from '@/common/format' import { toRgb } from '@/common/bluetooth/color/colorSpace' -import Taro from '@tarojs/taro' import { usePropsValue } from '@/use/useCommon' -type PropsType = { +interface PropsType { showModal: boolean onVisibleChange?: (visible: boolean) => void onColor?: Function } -type HistoryListItem = { +interface HistoryListItem { p_time: number lab: number[] code: string @@ -50,28 +51,28 @@ const HistoryColor: FC = forwardRef((props, ref) => { setVisible(false) } - //获取本地列表(无差别存储版本) + // 获取本地列表(无差别存储版本) const getList = () => { - let historyColorList = Taro.getStorageSync('historyColor') + const historyColorList = Taro.getStorageSync('historyColor') console.log('historyColorList==>', historyColorList) setList(historyColorList || []) } const [list, setList] = useState([]) - //保留1位小数 + // 保留1位小数 const noScale = (val, num = 1) => { return val?.toFixed(num) } - //rgb转换字符串 - const labRoRgb = val => { + // rgb转换字符串 + const labRoRgb = (val) => { const rgb = toRgb(val) return `rgb(${rgb[0]},${rgb[1]},${rgb[2]})` } - const getInfo = val => { + const getInfo = (val) => { const index = list.findIndex(item => item.p_time == val.p_time) - let tempList = JSON.parse(JSON.stringify(list)) + const tempList = JSON.parse(JSON.stringify(list)) tempList.splice(index, 1) tempList.unshift(val) setList(tempList) @@ -82,32 +83,34 @@ const HistoryColor: FC = forwardRef((props, ref) => { return ( - + - {list?.length ? ( - list.map((item, index) => { - return ( - getInfo(item)}> - - - {formatHashTag(item.code, item.name)} - {formatDateTime(item.p_time)} - - - + - - L*:{noScale(item.lab[0])} - a*:{noScale(item.lab[1])} - b*:{noScale(item.lab[2])} + {list?.length + ? ( + list.map((item, index) => { + return ( + getInfo(item)}> + + + {formatHashTag(item.code, item.name)} + {formatDateTime(item.p_time)} + + + + + + L*:{noScale(item.lab[0])} + a*:{noScale(item.lab[1])} + b*:{noScale(item.lab[2])} + - - ) - }) - ) : ( - 暂无数据 - )} + ) + }) + ) + : ( + 暂无数据 + )} diff --git a/src/pages/colorRelated/findColor/components/LabColor/index.tsx b/src/pages/colorRelated/findColor/components/LabColor/index.tsx index cc56910..f0cd325 100644 --- a/src/pages/colorRelated/findColor/components/LabColor/index.tsx +++ b/src/pages/colorRelated/findColor/components/LabColor/index.tsx @@ -1,10 +1,11 @@ -import { View, Text } from '@tarojs/components' -import { FC, useMemo } from 'react' -import { toRgb } from '@/common/bluetooth/color/colorSpace' +import { Text, View } from '@tarojs/components' +import type { FC } from 'react' +import { useMemo } from 'react' import styles from './index.module.scss' +import { toRgb } from '@/common/bluetooth/color/colorSpace' import { formatDateTime } from '@/common/format' -type PropsType = { +interface PropsType { lab?: Array time?: any onLab?: Function @@ -17,7 +18,7 @@ const LabColor: FC = (props) => { } const labObj = useMemo(() => { - if (lab.length <= 0) return { lab: [], rgb: '' } + if (lab.length <= 0) { return { lab: [], rgb: '' } } const rgb = toRgb(lab) return { lab: [noScale(lab[0]), noScale(lab[1]), noScale(lab[2])], @@ -26,7 +27,7 @@ const LabColor: FC = (props) => { }, [lab]) const labTime = useMemo(() => { - if (time.length <= 0) return '' + if (time.length <= 0) { return '' } return formatDateTime(time) }, [time]) diff --git a/src/pages/colorRelated/findColor/components/RecommendColor/index.tsx b/src/pages/colorRelated/findColor/components/RecommendColor/index.tsx index 2e2bc10..34606b5 100644 --- a/src/pages/colorRelated/findColor/components/RecommendColor/index.tsx +++ b/src/pages/colorRelated/findColor/components/RecommendColor/index.tsx @@ -1,28 +1,28 @@ -import { FC, useState } from 'react' -import { View, Text } from '@tarojs/components' -import { toRgb } from '@/common/bluetooth/color/colorSpace' -import styles from './index.module.scss' -import { formatDateTime } from '@/common/format' +import { Text, View } from '@tarojs/components' +import type { FC } from 'react' +import { useState } from 'react' import classnames from 'classnames' import DrawerCenter from '../DrawerCenter' +import styles from './index.module.scss' +import { toRgb } from '@/common/bluetooth/color/colorSpace' +import { formatDateTime } from '@/common/format' -type PropsType = { +interface PropsType { list?: Array customStyle?: React.CSSProperties } const RecommendColor: FC = (props) => { - const { list, customStyle = {} } = props - //rgb转换字符串 + // rgb转换字符串 const labRoRgb = (val) => { const lab = val ? [val.l, val.a, val.b] : [] const rgb = toRgb(lab) return `rgb(${rgb[0]},${rgb[1]},${rgb[2]})` } - //保留1位小数 + // 保留1位小数 const noScale = (val, num = 1) => { return val.toFixed(num) } @@ -31,7 +31,7 @@ const RecommendColor: FC = (props) => { const [selectObj, setSelectObj] = useState({ rgb: '', product_color_code: '', - product_color_name: '' + product_color_name: '', }) const openShow = (val) => { @@ -40,7 +40,6 @@ const RecommendColor: FC = (props) => { setSelectObj({ ...val, rgb: labRoRgb(val.lab) }) } - return ( @@ -57,10 +56,10 @@ const RecommendColor: FC = (props) => { - {item.product_code + '# ' + item.product_name} + {`${item.product_code}# ${item.product_name}`} {noScale(item.match_rate_percent, 1)}% - {item.product_color_code + ' ' + item.product_color_name} + {`${item.product_color_code} ${item.product_color_name}`} {item.dyelot_number} + @@ -74,7 +73,7 @@ const RecommendColor: FC = (props) => { - {selectObj.product_color_code + ' ' + selectObj.product_color_name} + {`${selectObj.product_color_code} ${selectObj.product_color_name}`} diff --git a/src/pages/colorRelated/findColor/index.tsx b/src/pages/colorRelated/findColor/index.tsx index a49e2f1..c2d5263 100644 --- a/src/pages/colorRelated/findColor/index.tsx +++ b/src/pages/colorRelated/findColor/index.tsx @@ -1,15 +1,16 @@ -import { View, Text } from '@tarojs/components' -import { FC, useEffect, useMemo, useState } from 'react' -import styles from './index.module.scss' +import { Text, View } from '@tarojs/components' +import Taro from '@tarojs/taro' +import type { FC } from 'react' +import { useEffect, useMemo, useState } from 'react' import LineBluetooth from '../components/bluetooth/LinkBlueTooth' +import styles from './index.module.scss' import HistoryColor from './components/HistoryColor' import LabColor from './components/LabColor' +import RecommendColor from './components/RecommendColor' import SelectProduct from '@/components/selectProduct' import { useBluetooth } from '@/use/contextBlueTooth' -import RecommendColor from './components/RecommendColor' import { FindColorListApi } from '@/api/index' import Loading from '@/components/loading' -import Taro from '@tarojs/taro' import { throttle } from '@/common/util' const FindColor: FC = () => { @@ -19,8 +20,8 @@ const FindColor: FC = () => { const [list, setList] = useState([]) const [product, setProduct] = useState>({}) - //获取数据 - const getData = async lab => { + // 获取数据 + const getData = async(lab) => { const res = await ApiFindColorList({ product_id: product.id, l: lab[0], @@ -34,8 +35,8 @@ const FindColor: FC = () => { const [labArray, setlabArray] = useState>([]) const [labtime, setLabtime] = useState(+new Date()) - //点击获取lab按钮 - const labEven = throttle(async () => { + // 点击获取lab按钮 + const labEven = throttle(async() => { if (!bluetoothState.connected) { Taro.showToast({ title: '请先链接设备', icon: 'none' }) return @@ -77,16 +78,19 @@ const FindColor: FC = () => { const ResultContainer = useMemo(() => { if (!colorState.loading && list?.length > 0) { return - } else if (!colorState.loading && labArray.length == 0) { + } + else if (!colorState.loading && labArray.length == 0) { return -请取色- - } else if (!colorState.loading && labArray.length > 0 && list?.length == 0) { + } + else if (!colorState.loading && labArray.length > 0 && list?.length == 0) { return -暂无数据- - } else if (colorState.loading) { + } + else if (colorState.loading) { return } }, [colorState, list]) - //历史取样 + // 历史取样 const historyShowEven = () => { setShowHistory(true) } @@ -105,16 +109,16 @@ const FindColor: FC = () => { } }, [bluetoothState.deviceLab]) - //本地存储取色记录(无差别存储版本) - const localSave = lab => { - let historyColorList = Taro.getStorageSync('historyColor') || [] - let obj = { + // 本地存储取色记录(无差别存储版本) + const localSave = (lab) => { + const historyColorList = Taro.getStorageSync('historyColor') || [] + const obj = { ...product, p_time: +new Date(), lab, } historyColorList.unshift(obj) - if (historyColorList.length > 30) historyColorList.pop() + if (historyColorList.length > 30) { historyColorList.pop() } Taro.setStorageSync('historyColor', historyColorList) } @@ -133,7 +137,7 @@ const FindColor: FC = () => { {ResultContainer} - + ) } diff --git a/src/pages/colorRelated/sampleComparison/index.tsx b/src/pages/colorRelated/sampleComparison/index.tsx index 996152c..e9ddb41 100644 --- a/src/pages/colorRelated/sampleComparison/index.tsx +++ b/src/pages/colorRelated/sampleComparison/index.tsx @@ -1,16 +1,17 @@ import { Image, Text, Textarea, View } from '@tarojs/components' import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' -import { useBluetooth } from '@/use/contextBlueTooth' import classnames from 'classnames' -import LinkBlueTooth from '../components/bluetooth/LinkBlueTooth' -import { toRgb } from '@/common/bluetooth/color/colorSpace' -import styles from './index.module.scss' -import { productabsorbcontrast } from '@/api/index' import { isObject } from '@tarojs/shared' +import LinkBlueTooth from '../components/bluetooth/LinkBlueTooth' +import styles from './index.module.scss' +import { useBluetooth } from '@/use/contextBlueTooth' +import { toRgb } from '@/common/bluetooth/color/colorSpace' +import { productabsorbcontrast } from '@/api/index' import { alert } from '@/common/common' + export default () => { - //搜索参数 + // 搜索参数 const [searchField, setSearchField] = useState({ l1: '', a1: '', @@ -19,7 +20,7 @@ export default () => { a2: '', b2: '', }) - type ColorList = { + interface ColorList { one?: Record | null two?: Record | null } @@ -29,15 +30,17 @@ export default () => { }) const { state: colorState, measureAndGetLab } = useBluetooth() - const getLab = async val => { + const getLab = async(val) => { if (colorState.connected) { - let res = await measureAndGetLab() + const res = await measureAndGetLab() if (val === 1) { setColorList({ ...colorList, one: res }) - } else { + } + else { setColorList({ ...colorList, two: res }) } - } else { + } + else { Taro.showToast({ title: '请链接设备', icon: 'none', @@ -46,14 +49,14 @@ export default () => { } const getNowTime = () => { const yy = new Date().getFullYear() - const MM = new Date().getMonth() + 1 < 10 ? '0' + (new Date().getMonth() + 1) : new Date().getMonth() + 1 - const dd = new Date().getDate() < 10 ? '0' + new Date().getDate() : new Date().getDate() - const HH = new Date().getHours() < 10 ? '0' + new Date().getHours() : new Date().getHours() - const mm = new Date().getMinutes() < 10 ? '0' + new Date().getMinutes() : new Date().getMinutes() - const ss = new Date().getSeconds() < 10 ? '0' + new Date().getSeconds() : new Date().getSeconds() - return yy + '-' + MM + '-' + dd + ' ' + HH + ':' + mm + ':' + ss + const MM = new Date().getMonth() + 1 < 10 ? `0${new Date().getMonth() + 1}` : new Date().getMonth() + 1 + const dd = new Date().getDate() < 10 ? `0${new Date().getDate()}` : new Date().getDate() + const HH = new Date().getHours() < 10 ? `0${new Date().getHours()}` : new Date().getHours() + const mm = new Date().getMinutes() < 10 ? `0${new Date().getMinutes()}` : new Date().getMinutes() + const ss = new Date().getSeconds() < 10 ? `0${new Date().getSeconds()}` : new Date().getSeconds() + return `${yy}-${MM}-${dd} ${HH}:${mm}:${ss}` } - //监听lab数据变化 + // 监听lab数据变化 const [blueToothColor, setBlueToothColor] = useState('') const [blueToothColorTwo, setBlueToothColorTwo] = useState('') const [time, setTime] = useState('') @@ -88,7 +91,7 @@ export default () => { const [data, setData] = useState('') const [result, setResult] = useState('') const { fetchData } = productabsorbcontrast() - const handTake = async () => { + const handTake = async() => { if (searchField.l1 === '') { Taro.showToast({ title: '请填充基础样品', @@ -110,7 +113,7 @@ export default () => { const res = await fetchData(query) if (res.success) { setData(res.data) - let diffarray = [ + const diffarray = [ res.data.reddish && '偏红', res.data.yellowish && '偏黄', res.data.greenish && '偏绿', @@ -118,7 +121,7 @@ export default () => { res.data.whitish && '偏亮', res.data.darker && '偏暗', ] - let resCont = diffarray.filter(item => item).join(',') + const resCont = diffarray.filter(item => item).join(',') setResult(resCont) } alert.hideLoading() @@ -129,7 +132,7 @@ export default () => { - + 基础样品 {blueToothColor === '' && ( getLab(1)}> @@ -162,12 +165,12 @@ export default () => { {data && ( 色差值: {(data as any).ciede_2000} - {!(data as any).reddish && - !(data as any).yellowish && - !(data as any).greenish && - !(data as any).bluish && - !(data as any).whitish && - !(data as any).darker && 无明显色差} + {!(data as any).reddish + && !(data as any).yellowish + && !(data as any).greenish + && !(data as any).bluish + && !(data as any).whitish + && !(data as any).darker && 无明显色差} {result && {result}} )} diff --git a/src/pages/colorRelated/takeColor/components/ColorCard/index.tsx b/src/pages/colorRelated/takeColor/components/ColorCard/index.tsx index 77c14de..2b98845 100644 --- a/src/pages/colorRelated/takeColor/components/ColorCard/index.tsx +++ b/src/pages/colorRelated/takeColor/components/ColorCard/index.tsx @@ -1,14 +1,15 @@ -import { View, Text } from '@tarojs/components' -import React, { FC, memo, useEffect, useRef, useState, useTransition } from 'react' +import { Text, View } from '@tarojs/components' +import type { FC } from 'react' +import React, { memo, useEffect, useRef, useState, useTransition } from 'react' import classnames from 'classnames' +import dayjs from 'dayjs' import styles from './index.module.scss' import { formatHashTag } from '@/common/format' -import dayjs from 'dayjs' import { alert } from '@/common/common' -import { BluetoothStateType } from '@/use/contextBlueTooth' +import type { BluetoothStateType } from '@/use/contextBlueTooth' import { toRgb } from '@/common/bluetooth/color/colorSpace' -type PropsType = { +interface PropsType { currentTakeColorIndex?: number | null item?: Record index?: number @@ -18,20 +19,21 @@ type PropsType = { bluetoothState: BluetoothStateType } -const ColorCard: FC = params => { +const ColorCard: FC = (params) => { const { item = {}, index, onTakeColor, onPreviewRgb, currentTakeColorIndex, measureAndGetLab, bluetoothState } = params console.log('item===>', item) - const truncation = ev => { + const truncation = (ev) => { if (ev) { ev += '' - let index = ev.lastIndexOf('.') + const index = ev.lastIndexOf('.') let suffix = ev.substr(index + 1) if (suffix.length > 2) { suffix = suffix.substr(0, 1) - ev = ev.substr(0, index) + '.' + suffix + ev = `${ev.substr(0, index)}.${suffix}` } return ev - } else { + } + else { return 0 } } @@ -48,14 +50,14 @@ const ColorCard: FC = params => { } }, [currentTakeColorIndex, index]) - const handleTakeColor = async () => { + const handleTakeColor = async() => { if (bluetoothState.connected) { onTakeColor?.(index) setMoveBorder(1) console.log('moveBorder==> start measure', moveBorder) - let lab = await measureAndGetLab() - //转rgb + const lab = await measureAndGetLab() + // 转rgb const rgb = toRgb([lab.L, lab.a, lab.b]) setColor({ currnetRgb: { @@ -71,7 +73,8 @@ const ColorCard: FC = params => { }) setMoveBorder(2) console.log('moveBorder==> end measure', moveBorder) - } else { + } + else { alert.none('请连接蓝牙') } } @@ -81,7 +84,7 @@ const ColorCard: FC = params => { } return ( - + @@ -95,7 +98,8 @@ const ColorCard: FC = params => { ${color.currnetRgb?.g}, ${color.currnetRgb?.b} )`, - }}> + }} + > {color.currentLab?.l == 0 && color.currentLab?.a == 0 && color.currentLab?.b == 0 && 末取样} diff --git a/src/pages/colorRelated/takeColor/components/Texture/index.tsx b/src/pages/colorRelated/takeColor/components/Texture/index.tsx index e45290c..7cfd510 100644 --- a/src/pages/colorRelated/takeColor/components/Texture/index.tsx +++ b/src/pages/colorRelated/takeColor/components/Texture/index.tsx @@ -1,8 +1,9 @@ -import { View, Text, Image } from '@tarojs/components' -import styles from './index.module.scss' +import { Image, Text, View } from '@tarojs/components' import classnames from 'classnames' -import { FC, memo, useMemo, useRef, useState } from 'react' +import type { FC } from 'react' +import { memo, useMemo, useRef, useState } from 'react' import Upload from '../Upload' +import styles from './index.module.scss' import { screenshot } from '@/common/util' import { formatImgUrl, formatUrl } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' @@ -16,10 +17,10 @@ interface PropsType extends TextureEvent { uploadConfirmState: boolean } -const Texture: FC = params => { +const Texture: FC = (params) => { const { onUploadConfirm, list, detail, uploadConfirmState } = params console.log('detail==>', detail) - + const handleUploadConfirm = (url) => { onUploadConfirm && onUploadConfirm(url) } @@ -31,7 +32,7 @@ const Texture: FC = params => { } const calcNoSampling = useMemo(() => { - let len = list?.filter(item => { + const len = list?.filter((item) => { return item.currentLab?.l == 0 && item.currentLab?.a == 0 && item.currentLab?.b == 0 }) return len?.length ?? 0 @@ -43,17 +44,17 @@ const Texture: FC = params => { {detail.texture_url && } - + 上传纹理 - {(list?.length ?? 0) - calcNoSampling} + {(list?.length ?? 0) - calcNoSampling} 已取样 - {calcNoSampling} + {calcNoSampling} 未取样 diff --git a/src/pages/colorRelated/takeColor/components/Upload/index.tsx b/src/pages/colorRelated/takeColor/components/Upload/index.tsx index 39285be..2868c24 100644 --- a/src/pages/colorRelated/takeColor/components/Upload/index.tsx +++ b/src/pages/colorRelated/takeColor/components/Upload/index.tsx @@ -1,9 +1,9 @@ -import Popup from '@/components/popup' -import { FC, forwardRef, useEffect, useImperativeHandle, useState } from 'react' -import { View, Text, Image, RootPortal } from '@tarojs/components' -import styles from './index.module.scss' -import classnames from 'classnames' +import { Image, RootPortal, Text, View } from '@tarojs/components' import Taro from '@tarojs/taro' +import { FC, forwardRef, useEffect, useImperativeHandle, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' +import Popup from '@/components/popup' interface UploadColorEvent { onUploadConfirm?: Function @@ -19,7 +19,7 @@ const UploadColor = forwardRef((params: PropsType, ref) => { const [filePath, setFilePath] = useState('') const [file, setFile] = useState({}) - const handleUpload = async () => { + const handleUpload = async() => { Taro.chooseMedia({ count: 1, mediaType: ['image'], @@ -58,10 +58,10 @@ const UploadColor = forwardRef((params: PropsType, ref) => { return ( - handleTriggerUploadModal(false)}> + handleTriggerUploadModal(false)}> - {filePath && } + {filePath && } {filePath ? '点击修改' : '点击上传'} diff --git a/src/pages/colorRelated/takeColor/index.tsx b/src/pages/colorRelated/takeColor/index.tsx index 7f4cf91..01bb99a 100644 --- a/src/pages/colorRelated/takeColor/index.tsx +++ b/src/pages/colorRelated/takeColor/index.tsx @@ -1,14 +1,15 @@ -import { View, Input, Text } from '@tarojs/components' -import { FC, useCallback, useMemo, useRef, useState } from 'react' +import { Input, Text, View } from '@tarojs/components' +import type { FC } from 'react' +import { useCallback, useMemo, useRef, useState } from 'react' import LinkBlueTooth from '../components/bluetooth/LinkBlueTooth' -import SelectProduct from '@/components/selectProduct/index' import styles from './index.module.scss' import ColorCard from './components/ColorCard' +import Texture from './components/Texture' +import SelectProduct from '@/components/selectProduct/index' import IconFont from '@/components/iconfont/iconfont' -import { ColorListApi, ColorDetailedApi, TextureSaveApi, ColorSamplingSaveApi } from '@/api/index' +import { ColorDetailedApi, ColorListApi, ColorSamplingSaveApi, TextureSaveApi } from '@/api/index' import { breakupUrl, formatHashTag, formatImgUrl, formatUrl } from '@/common/format' import { alert } from '@/common/common' -import Texture from './components/Texture' import useUploadCDNImg from '@/use/useUploadImage' import { useBluetooth } from '@/use/contextBlueTooth' import { toRgb } from '@/common/bluetooth/color/colorSpace' @@ -23,7 +24,7 @@ const TakeColor: FC = () => { const [searchValue, setSearchValue] = useState('') const [selectedProduct, setSelectedProduct] = useState>({}) - const selectInput = async event => { + const selectInput = async(event) => { if (event) { alert.showLoading('正在加载颜色') setSelectedProduct(event) @@ -40,7 +41,8 @@ const TakeColor: FC = () => { await detailFetchData({ id: event.id }) } alert.hideLoading() - } else { + } + else { setListData([]) alert.hideLoading() } @@ -51,7 +53,7 @@ const TakeColor: FC = () => { setSearchValue('') } - const handlePrViewRgb = useCallback(event => { + const handlePrViewRgb = useCallback((event) => { setLabPreview(event) setShowLabPreview(true) }, []) @@ -59,7 +61,6 @@ const TakeColor: FC = () => { const [currentTakeColorIndex, setCurrentTakeColorIndex] = useState(null) const handleTakeColor = (index: number) => { - setCurrentTakeColorIndex(index) } @@ -73,24 +74,25 @@ const TakeColor: FC = () => { // }) // }, [state.data?.list, state]) - const onSearchInput = event => { + const onSearchInput = (event) => { const current = event.detail.value if (current === '') { setListData(state.data.list) - } else { + } + else { setListData( - state.data?.list?.filter(item => { + state.data?.list?.filter((item) => { return formatHashTag(item.product_color_name, item.product_color_code)!.includes(current) }), ) } } // 底部提交 - const handleSubmit = async () => { + const handleSubmit = async() => { if (selectedProduct.id) { - let params = { + const params = { id: selectedProduct.id, - product_color_absorb: state.data.list.map(item => { + product_color_absorb: state.data.list.map((item) => { return { product_color_id: item.product_color_id, l: item.currentLab.l, @@ -107,10 +109,12 @@ const TakeColor: FC = () => { const res = await saveFetchData(params) if (res.success) { alert.success('保存成功') - } else { + } + else { alert.error('保存失败') } - } else { + } + else { productSelectEl.current.clickEvent() alert.none('请选择面料') } @@ -120,7 +124,7 @@ const TakeColor: FC = () => { console.log('handleReset') if (selectedProduct.id) { setListData( - state.data.list.map(item => { + state.data.list.map((item) => { item.moveBorder = 0 item.currnetRgb = item.rgb item.currentLab = item.lab @@ -128,7 +132,8 @@ const TakeColor: FC = () => { return item }), ) - } else { + } + else { productSelectEl.current.clickEvent() alert.none('请选择面料') } @@ -148,14 +153,14 @@ const TakeColor: FC = () => { const [uploadConfirmState, setUploadConfirmState] = useState(false) - const handleUploadConfirm = async file => { + const handleUploadConfirm = async(file) => { setUploadConfirmState(false) if (file) { if (selectedProduct.id) { alert.showLoading('上传中') - let res = await uploadCDNImg({ path: file.tempFilePath }, 'product', 'product') + const res = await uploadCDNImg({ path: file.tempFilePath }, 'product', 'product') if (res && res?.code == 200) { - //console.log('图片地址真实',`${IMG_CND_Prefix}${res.url}`); + // console.log('图片地址真实',`${IMG_CND_Prefix}${res.url}`); // TODO: 回填到存储的地方 await textureSaveFetchData({ @@ -166,14 +171,17 @@ const TakeColor: FC = () => { await detailFetchData({ id: selectedProduct.id }) alert.none('上传成功') setUploadConfirmState(true) - } else { + } + else { res && alert.none(`${res.message}`) } - } else { + } + else { productSelectEl.current.clickEvent() alert.none('请选择面料') } - } else { + } + else { alert.none('请选择图片') } } @@ -190,34 +198,36 @@ const TakeColor: FC = () => { 颜色列表({listData?.length ?? 0}) - + - {searchValue.length > 0 && } + {searchValue.length > 0 && } - {listData.length ? ( - listData.map((item, index) => { - return ( - - ) - }) - ) : ( - -请取色- - )} + {listData.length + ? ( + listData.map((item, index) => { + return ( + + ) + }) + ) + : ( + -请取色- + )} - + 重置 @@ -233,7 +243,8 @@ const TakeColor: FC = () => { ${labPreview?.currnetRgb?.g}, ${labPreview?.currnetRgb?.b} )`, - }}> + }} + > )} diff --git a/src/pages/customerDetails/components/form/index.tsx b/src/pages/customerDetails/components/form/index.tsx index 5b4a316..2b332b7 100644 --- a/src/pages/customerDetails/components/form/index.tsx +++ b/src/pages/customerDetails/components/form/index.tsx @@ -1,38 +1,38 @@ import { View } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import React, { ReactNode, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import { alert } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' + interface Props { - title: string, - des: string | number, - isPhone?: boolean - isBorder?: boolean + title: string + des: string | number + isPhone?: boolean + isBorder?: boolean } export default memo((props: Props) => { - const { - isPhone = false, - isBorder = true, - } = props + const { + isPhone = false, + isBorder = true, + } = props - const handPhone = () => { - Taro.makePhoneCall({ - phoneNumber: props.des as string - }) - } + const handPhone = () => { + Taro.makePhoneCall({ + phoneNumber: props.des as string, + }) + } - - return ( - - {props.title} - {props.des} - { - isPhone && handPhone()}>拨打 - } - - ) -}) \ No newline at end of file + return ( + + {props.title} + {props.des} + { + isPhone && handPhone()}>拨打 + } + + ) +}) diff --git a/src/pages/customerDetails/components/tabs/index.tsx b/src/pages/customerDetails/components/tabs/index.tsx index 6ed5f40..7ce8be6 100644 --- a/src/pages/customerDetails/components/tabs/index.tsx +++ b/src/pages/customerDetails/components/tabs/index.tsx @@ -1,32 +1,32 @@ -import { View, Input, Button } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; +import { Button, Input, View } from '@tarojs/components' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' interface Props { - list: any[], - handChose?: (any) => void + list: any[] + handChose?: (any) => void } export default memo((props: Props) => { - const { list = [], handChose } = props + const { list = [], handChose } = props - return ( - - { - list.map((item, index) => { - return ( - handChose?.(item)}> - + { + list.map((item, index) => { + return ( + handChose?.(item)}> + {item?.name} - { - item.showBorder && - } - - ) - }) - } - - ) -}) \ No newline at end of file + >{item?.name} + { + item.showBorder && + } + + ) + }) + } + + ) +}) diff --git a/src/pages/customerDetails/components/tagPopup/index.tsx b/src/pages/customerDetails/components/tagPopup/index.tsx index 17b19fa..ad78e66 100644 --- a/src/pages/customerDetails/components/tagPopup/index.tsx +++ b/src/pages/customerDetails/components/tagPopup/index.tsx @@ -1,141 +1,145 @@ -import { View, ScrollView, Button } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode, forwardRef, useImperativeHandle } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; -import { alert } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' +import { Button, ScrollView, View } from '@tarojs/components' +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import React, { ReactNode, forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' +import { alert, goLink } from '@/common/common' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' -import Popup from '@/components/popup'; -import { goLink } from '@/common/common' -import { mppurchaserlist, mppurchaserlabeladd } from "@/api/customer" +import Popup from '@/components/popup' +import { mppurchaserlabeladd, mppurchaserlist } from '@/api/customer' + interface Props { - showPopup: boolean, - handClose: () => void, - purchaser_id?: string | number - diseShow?: () => void + showPopup: boolean + handClose: () => void + purchaser_id?: string | number + diseShow?: () => void } export default memo(forwardRef((props: Props, ref) => { - const router = useRouter() - useEffect(() => { - getList() - }, []) - const { fetchData } = mppurchaserlist() - const getList = async () => { - const res = await fetchData() - if (res.data) { - setModeList([...res.data.list]) - } + const router = useRouter() + useEffect(() => { + getList() + }, []) + const { fetchData } = mppurchaserlist() + const getList = async() => { + const res = await fetchData() + if (res.data) { + setModeList([...res.data.list]) } + } - //标签 - const [modeList, setModeList] = useState([]) - //选择标签 - const handCheckMode = (item) => { - modeList.map(it => { - if (it.id === item.id) { - it.checked = !it.checked - } - return it - }) - setModeList([...modeList]) + // 标签 + const [modeList, setModeList] = useState([]) + // 选择标签 + const handCheckMode = (item) => { + modeList.map((it) => { + if (it.id === item.id) { + it.checked = !it.checked + } + return it + }) + setModeList([...modeList]) + } + + const handReset = () => { + modeList.map((it) => { + it.checked = false + return it + }) + setModeList([...modeList]) + } + const { fetchData: addFetch } = mppurchaserlabeladd() + const handSure = async() => { + const arr: any[] = [] + const fltArr = modeList.filter((item) => { return item.checked }) + fltArr.forEach((item) => { + arr.push({ + label_id: item.id, + }) + }) + Taro.showLoading({ + title: '请稍等...', + mask: true, + }) + const res = await addFetch({ binding_label: arr, purchaser_id: Number(router.params.purchaser_id) }) + if (res.msg == 'success') { + Taro.showToast({ + icon: 'success', + title: '成功', + }) + Taro.hideLoading() } - - const handReset = () => { - modeList.map(it => { - it.checked = false - return it - }) - setModeList([...modeList]) + else { + Taro.showToast({ + icon: 'error', + title: res.msg, + }) + Taro.hideLoading() } - const { fetchData: addFetch } = mppurchaserlabeladd() - const handSure = async () => { - const arr: any[] = [] - const fltArr = modeList.filter(item => { return item.checked }) - fltArr.forEach(item => { - arr.push({ - label_id: item.id - }) - }) - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - const res = await addFetch({ binding_label: arr, purchaser_id: Number(router.params.purchaser_id) }) - if (res.msg == 'success') { - Taro.showToast({ - icon: 'success', - title: '成功' - }) - Taro.hideLoading() - } else { - Taro.showToast({ - icon: 'error', - title: res.msg - }) - Taro.hideLoading() - } - props?.diseShow?.() + props?.diseShow?.() + } + + const isDisabled = useMemo(() => { + const arr = modeList.filter((item) => { return item.checked }) + if (arr.length) { + return false } + else { + return true + } + }, [modeList]) - const isDisabled = useMemo(() => { - let arr = modeList.filter(item => { return item.checked }) - if (arr.length) { - return false - } else { - return true - } - }, [modeList]) + const choseNums = useMemo(() => { + const arr = modeList.filter((item) => { return item.checked }) + return arr.length + }, [modeList]) - const choseNums = useMemo(() => { - let arr = modeList.filter(item => { return item.checked }) - return arr.length - }, [modeList]) - - - useImperativeHandle(ref, () => ({ - modeList, - setModeList - })) - return ( - { props.handClose() }}> - - - 自定义标签分组 - - {modeList.map((item, index) => { - return ( - { - handCheckMode(item) - }} - className={classnames(item.checked ? styles.activemodeBox : styles.modeBox)} - key={index}> - {item.name} - - ) - })} - + useImperativeHandle(ref, () => ({ + modeList, + setModeList, + })) + return ( + { props.handClose() }}> + + + 自定义标签分组 + + {modeList.map((item, index) => { + return ( + { + handCheckMode(item) + }} + className={classnames(item.checked ? styles.activemodeBox : styles.modeBox)} + key={index} + > + {item.name} - - - - + - - - ) -})) \ No newline at end of file + + + + ) +})) diff --git a/src/pages/customerDetails/index.config.ts b/src/pages/customerDetails/index.config.ts index c4c4d7d..f07472b 100644 --- a/src/pages/customerDetails/index.config.ts +++ b/src/pages/customerDetails/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '客户详情', + navigationBarTitleText: '客户详情', } diff --git a/src/pages/customerDetails/index.tsx b/src/pages/customerDetails/index.tsx index 49f4bd3..5c78338 100644 --- a/src/pages/customerDetails/index.tsx +++ b/src/pages/customerDetails/index.tsx @@ -1,134 +1,135 @@ import { View } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import React, { ReactNode, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' +import Tabs from './components/tabs' +import Form from './components/form' +import TagPopup from './components/tagPopup' import Popup from '@/components/popup' import { debounce } from '@/common/util' -import { alert } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' -import Tabs from "./components/tabs" -import Form from "./components/form" -import AddressList from "@/components/AddressList" -import TagPopup from './components/tagPopup'; -import { goLink } from '@/common/common' +import { alert, goLink } from '@/common/common' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' +import AddressList from '@/components/AddressList' import { mppurchaser } from '@/api/customer' + export default () => { - const router = useRouter() + const router = useRouter() - const [status, setstatus] = useState(1) + const [status, setstatus] = useState(1) - useDidShow(() => { - getInfo() + useDidShow(() => { + getInfo() + }) + const [infoObj, setinfoObj] = useState() + const { fetchData: getDesc } = mppurchaser() + const getInfo = async() => { + Taro.showLoading({ + title: '请稍等...', + mask: true, }) - const [infoObj, setinfoObj] = useState() - const { fetchData: getDesc } = mppurchaser() - const getInfo = async () => { - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - const res = await getDesc({ id: router.params.purchaser_id }) - setinfoObj(res.data) - Taro.hideLoading() - setshowPopup(false) - } + const res = await getDesc({ id: router.params.purchaser_id }) + setinfoObj(res.data) + Taro.hideLoading() + setshowPopup(false) + } - //顶部栏 - const AddressListRef = useRef() - const [TarBarList, setTarBarList] = useState([{ id: 1, name: '基础信息', showBorder: true }, { id: 2, name: '收货地址', showBorder: false }]) - const handChose = (item) => { - TarBarList.map(it => { - if (it.id === item.id) { - it.showBorder = true - } else { - it.showBorder = false - } - setTarBarList([...TarBarList]) - setstatus(item.id) - // pageNum.current.page = 1 - // setOrderData(() => ({ list: [], total: 0 })) - // setSearchField((val) => ({ ...val, size: 10, status: item.id })) - }) - if (item.id == 2) { - Taro.nextTick(() => { - AddressListRef.current?.getData() - }) + // 顶部栏 + const AddressListRef = useRef() + const [TarBarList, setTarBarList] = useState([{ id: 1, name: '基础信息', showBorder: true }, { id: 2, name: '收货地址', showBorder: false }]) + const handChose = (item) => { + TarBarList.map((it) => { + if (it.id === item.id) { + it.showBorder = true + } + else { + it.showBorder = false + } + setTarBarList([...TarBarList]) + setstatus(item.id) + // pageNum.current.page = 1 + // setOrderData(() => ({ list: [], total: 0 })) + // setSearchField((val) => ({ ...val, size: 10, status: item.id })) + }) + if (item.id == 2) { + Taro.nextTick(() => { + AddressListRef.current?.getData() + }) + } + } + + const [showPopup, setshowPopup] = useState(false) + const TagPopupRef = useRef() + const handShow = () => { + TagPopupRef?.current?.modeList.map((it) => { + infoObj?.label_list?.forEach((item) => { + if (it.id == item.label_id) { + it.checked = true } - } - - const [showPopup, setshowPopup] = useState(false) - const TagPopupRef = useRef() - const handShow = () => { - TagPopupRef?.current?.modeList.map(it => { - infoObj?.label_list?.forEach(item => { - if (it.id == item.label_id) { - it.checked = true - } - }) - return it - }) - TagPopupRef.current.setModeList([...TagPopupRef.current.modeList]) - setshowPopup(true) - } - return ( - - - - - {infoObj?.name?.[0]} - - - - {infoObj?.name} - {infoObj?.phone} - - - {infoObj?.purchaser_type_name || '暂无'} - {infoObj?.sale_user_name || '暂无'} - { - infoObj?.label_list?.map(item => { - return ( - {item.label_name} - ) - }) - } - handShow()}> - + - 标签 - - - - goLink('/pages/customerEditor/index?id=' + router.params.purchaser_id + '&type=edit')}>{'编辑 >'} - - handChose?.(item)}> + }) + return it + }) + TagPopupRef.current.setModeList([...TagPopupRef.current.modeList]) + setshowPopup(true) + } + return ( + + + + + {infoObj?.name?.[0]} + + + + {infoObj?.name} + {infoObj?.phone} - { - status === 1 && -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- } - { - status === 2 && - - - - } - setshowPopup(false)} diseShow={() => getInfo()}> + + {infoObj?.purchaser_type_name || '暂无'} + {infoObj?.sale_user_name || '暂无'} + { + infoObj?.label_list?.map((item) => { + return ( + {item.label_name} + ) + }) + } + handShow()}> + + + 标签 + + +
+ goLink(`/pages/customerEditor/index?id=${router.params.purchaser_id}&type=edit`)}>{'编辑 >'}
- ) -} \ No newline at end of file + handChose?.(item)}> +
+ { + status === 1 && +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ } + { + status === 2 + && + + + } + setshowPopup(false)} diseShow={() => getInfo()}> +
+ ) +} diff --git a/src/pages/customerEditor/components/Form/index.tsx b/src/pages/customerEditor/components/Form/index.tsx index 86f2a40..ab92e1c 100644 --- a/src/pages/customerEditor/components/Form/index.tsx +++ b/src/pages/customerEditor/components/Form/index.tsx @@ -1,76 +1,73 @@ -import { View, ScrollView, Button, Input } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; -import { alert } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' +import { Button, Input, ScrollView, View } from '@tarojs/components' +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import type { ReactNode } from 'react' +import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' +import { alert, goLink } from '@/common/common' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' -import Popup from '@/components/popup'; -import { goLink } from '@/common/common' - +import Popup from '@/components/popup' interface Props { - title: string - isQuire?: boolean, - placeholderFont?: string, - handBlur?: (any) => void, - inputValue?: string, - isDisabled?: boolean, - inputType?: any, - maxlength?: number, - children?: ReactNode, - showInput?: boolean, - showMore?: boolean, - showBorder?: boolean, - handNav?: () => void + title: string + isQuire?: boolean + placeholderFont?: string + handBlur?: (any) => void + inputValue?: string + isDisabled?: boolean + inputType?: any + maxlength?: number + children?: ReactNode + showInput?: boolean + showMore?: boolean + showBorder?: boolean + handNav?: () => void } export default memo((props: Props) => { + const { + title = '标题', + isQuire = true, + placeholderFont = '请输入', + handBlur, + handNav, + inputValue, + isDisabled, + inputType = 'text', + maxlength = 999, + children, + showInput = true, + showMore = false, + showBorder = true, + } = props - let { - title = '标题', - isQuire = true, - placeholderFont = '请输入', - handBlur, - handNav, - inputValue, - isDisabled, - inputType = "text", - maxlength = 999, - children, - showInput = true, - showMore = false, - showBorder = true - } = props - - return ( - - {title} - { - isQuire && * - } - - { - !children && handNav?.()}> - { - showInput && handBlur?.(e.detail.value)} - value={inputValue} - > - } - { - showMore && - } - - } - {children} + return ( + + {title} + { + isQuire && * + } + + { + !children && handNav?.()}> + { + showInput && handBlur?.(e.detail.value)} + value={inputValue} + > + } + { + showMore && + } - ) - -}) \ No newline at end of file + } + {children} + + ) +}) diff --git a/src/pages/customerEditor/index.config.ts b/src/pages/customerEditor/index.config.ts index 4e00470..f7405a2 100644 --- a/src/pages/customerEditor/index.config.ts +++ b/src/pages/customerEditor/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '客户编辑', + navigationBarTitleText: '客户编辑', } diff --git a/src/pages/customerEditor/index.tsx b/src/pages/customerEditor/index.tsx index 240831b..1eaee74 100644 --- a/src/pages/customerEditor/index.tsx +++ b/src/pages/customerEditor/index.tsx @@ -1,382 +1,379 @@ -import { View, Button } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow, setNavigationBarTitle } from '@tarojs/taro'; +import { Button, View } from '@tarojs/components' +import Taro, { setNavigationBarTitle, useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import type { ReactNode } from 'react' +import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import Remark from '../orderDetails/components/remark' +import styles from './index.module.scss' +import Form from './components/form' import Popup from '@/components/popup' import { debounce } from '@/common/util' import { alert, goLink } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' -import Form from "./components/form" -import Remark from '../orderDetails/components/remark'; -import Address from "@/components/address" +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' +import Address from '@/components/address' import { mppurchaser, mppurchaserpost, mppurchaserput } from '@/api/customer' -type AddressParms = { - id: number, - name: string + +interface AddressParms { + id: number + name: string } export default () => { + const router = useRouter() + const [infoObj, setinfoObj] = useState() - const router = useRouter() + const [formData, setformData] = useState() - const [infoObj, setinfoObj] = useState() + const [addressArr, setaddressArr] = useState([]) + useEffect(() => { + if (router.params.type === 'edit') { + getInfo() + } + }, []) - const [formData, setformData] = useState() + // 默认业务员 + useDidShow(() => { + if (router.params.type === 'add') { + setNavigationBarTitle({ title: '新增客户' }) + } + else { + setNavigationBarTitle({ title: '客户编辑' }) + } + const userInfo = JSON.parse(Taro.getStorageSync('userInfo')) + // 获取选择的客户 + const pages = Taro.getCurrentPages() + const currPage = pages[pages.length - 1] // 获取当前页面 + // 判断是否有跳转选择业务员 + if (currPage.data?.saleuserId && currPage.data?.saleuserId !== '') { + setformData(val => ({ + ...val, + sale_user_id: currPage.data?.saleuserId, + sale_user_name: currPage.data?.saleuserName, + })) + } + // 默认业务员 + if (currPage.data?.saleuserId == null) { + setformData(e => ({ + ...e, + sale_user_id: userInfo?.user_id, + sale_user_name: userInfo?.user_name, + })) + } + }) - const [addressArr, setaddressArr] = useState([]) - useEffect(() => { - if (router.params.type === 'edit') { - getInfo() - } - }, []) - - //默认业务员 - useDidShow(() => { - if (router.params.type === 'add') { - setNavigationBarTitle({ title: "新增客户" }) - } else { - - setNavigationBarTitle({ title: "客户编辑" }) - } - let userInfo = JSON.parse(Taro.getStorageSync('userInfo')) - //获取选择的客户 - let pages = Taro.getCurrentPages(); - let currPage = pages[pages.length - 1]; // 获取当前页面 - //判断是否有跳转选择业务员 - if (currPage.data?.saleuserId && currPage.data?.saleuserId !== '') { - setformData((val) => ({ - ...val, - sale_user_id: currPage.data?.saleuserId, - sale_user_name: currPage.data?.saleuserName - })) - } - //默认业务员 - if (currPage.data?.saleuserId == null) { - setformData((e) => ({ - ...e, - sale_user_id: userInfo?.user_id, - sale_user_name: userInfo?.user_name, - })) - } + const { fetchData: getDesc } = mppurchaser() + const getInfo = async() => { + Taro.showLoading({ + title: '请稍等...', + mask: true, }) + const res = await getDesc({ id: router.params.id }) + setinfoObj(res.data) + list.map((item) => { + if (item.id == res.data.purchaser_type) { + item.check = true + } + else { + item.check = false + } + return item + }) + setlist([...list]) + setformData({ + sale_user_id: res.data?.sale_user_id, + sale_user_name: res.data?.sale_user_name, + name: res.data?.name, + short_name: res.data?.short_name, + director: res.data?.director, + phone: res.data?.phone, + addressName: res.data?.province_name + res.data?.city_name + res.data?.district_name, + address_detail: res.data?.address_detail, + purchaser_type: res.data?.purchaser_type, + district_id: res.data?.district_id, + }) + setremarkDesc(res.data?.remark) + let arr: any[] = [] + arr = [ + { id: res.data.province_id, name: res.data.province_name }, + { id: res.data.city_id, name: res.data.city_name }, + { id: res.data.district_id, name: res.data.district_name }, + ] + setaddressArr([...arr]) + Taro.hideLoading() + } - const { fetchData: getDesc } = mppurchaser() - const getInfo = async () => { - Taro.showLoading({ + const handTitle = useCallback((e) => { + setformData(val => ({ ...val, name: e })) + }, []) + + const handName = useCallback((e) => { + setformData(val => ({ ...val, short_name: e })) + }, []) + + const handUsername = useCallback((e) => { + setformData(val => ({ ...val, director: e })) + }, []) + + const handUserPhone = useCallback((e) => { + setformData(val => ({ ...val, phone: e })) + }, []) + + const handAddress = useCallback((e) => { + setformData(val => ({ ...val, address_detail: e })) + }, []) + + // 客户类型数组 + const [list, setlist] = useState([ + { + id: 1, + name: '布行', + check: false, + }, + { + id: 2, + name: '二批', + check: false, + }, + { + id: 3, + name: '制衣厂', + check: false, + }, + ]) + + // 选择客户类型 + const handItem = (item) => { + list.map((it) => { + if (it.id === item.id) { + it.check = true + } + else { + it.check = false + } + return it + }) + setlist([...list]) + setformData(val => ({ ...val, purchaser_type: item.id })) + } + + // 备注操作 + const [remarkDesc, setremarkDesc] = useState('') + const [showDesc, setShowDesc] = useState(false) + const getRemark = useCallback(async(e) => { + setShowDesc(false) + setremarkDesc(e) + // setformData((val) => ({ ...val, remark: e })) + }, []) + + // 地址选择 + const [showSiteModal, setShowSiteModal] = useState(false) + + const handleSetSite = (ev) => { + const addressName: any = [] + ev.forEach((v) => { + addressName.push(v?.name) + }) + if (ev.length === 3) { + setShowSiteModal(false) + setformData(val => ({ ...val, addressName: ev[0]?.name + ev[1]?.name + ev[2]?.name || '', district_id: ev[2]?.id })) + } + } + + const onClose = () => { + setShowSiteModal(false) + } + + const isDisabled = useMemo(() => { + let empty: any = null + if (typeof (formData) == 'undefined') { return } + for (const key in formData) { + if (formData.hasOwnProperty(key)) { + if (formData[key] !== '' && typeof (formData[key]) !== 'undefined') { + empty = false + } + else { + empty = true + break + } + } + } + return empty + }, [formData]) + + // 重置 + const handReset = () => { + setformData({ + sale_user_id: '', + sale_user_name: '', + name: '', + short_name: '', + director: '', + phone: '', + addressName: '', + address_detail: '', + purchaser_type: '', + remark: '', + district_id: '', + }) + } + + const { fetchData: postFetch } = mppurchaserpost() + const { fetchData: putFetch } = mppurchaserput() + // 提交 + const handSure = async() => { + // if (!isDisabled) return false + const query = { + ...formData, + remark: remarkDesc, + id: infoObj?.id, + } + if (router.params.type == 'add') { + delete query.id + } + Taro.showModal({ + content: '确定要提交吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + const res = await (router.params.type == 'add' ? postFetch(query) : putFetch(query)) + Taro.showLoading({ title: '请稍等...', - mask: true - }) - const res = await getDesc({ id: router.params.id }) - setinfoObj(res.data) - list.map(item => { - if (item.id == res.data.purchaser_type) { - item.check = true - } else { - item.check = false - } - return item - }) - setlist([...list]) - setformData({ - sale_user_id: res.data?.sale_user_id, - sale_user_name: res.data?.sale_user_name, - name: res.data?.name, - short_name: res.data?.short_name, - director: res.data?.director, - phone: res.data?.phone, - addressName: res.data?.province_name + res.data?.city_name + res.data?.district_name, - address_detail: res.data?.address_detail, - purchaser_type: res.data?.purchaser_type, - district_id: res.data?.district_id - }) - setremarkDesc(res.data?.remark) - let arr: any[] = [] - arr = [ - { id: res.data.province_id, name: res.data.province_name }, - { id: res.data.city_id, name: res.data.city_name }, - { id: res.data.district_id, name: res.data.district_name } - ] - setaddressArr([...arr]) - Taro.hideLoading() - } - - - - const handTitle = useCallback((e) => { - setformData((val) => ({ ...val, name: e })) - }, []) - - const handName = useCallback((e) => { - setformData((val) => ({ ...val, short_name: e })) - }, []) - - const handUsername = useCallback((e) => { - setformData((val) => ({ ...val, director: e })) - }, []) - - const handUserPhone = useCallback((e) => { - setformData((val) => ({ ...val, phone: e })) - }, []) - - const handAddress = useCallback((e) => { - setformData((val) => ({ ...val, address_detail: e })) - }, []) - - - //客户类型数组 - const [list, setlist] = useState([ - { - id: 1, - name: '布行', - check: false - }, - { - id: 2, - name: '二批', - check: false - }, - { - id: 3, - name: '制衣厂', - check: false - }, - ]) - - //选择客户类型 - const handItem = (item) => { - list.map(it => { - if (it.id === item.id) { - it.check = true - } else { - it.check = false - } - return it - }) - setlist([...list]) - setformData((val) => ({ ...val, purchaser_type: item.id })) - } - - //备注操作 - const [remarkDesc, setremarkDesc] = useState('') - const [showDesc, setShowDesc] = useState(false) - const getRemark = useCallback(async (e) => { - setShowDesc(false) - setremarkDesc(e) - // setformData((val) => ({ ...val, remark: e })) - }, []) - - //地址选择 - const [showSiteModal, setShowSiteModal] = useState(false); - - const handleSetSite = (ev) => { - var addressName: any = [] - ev.forEach(v => { - addressName.push(v?.name) - }) - if (ev.length === 3) { - setShowSiteModal(false) - setformData((val) => ({ ...val, addressName: ev[0]?.name + ev[1]?.name + ev[2]?.name || '', district_id: ev[2]?.id })) + mask: true, + }) + if (res.msg === 'success') { + Taro.showToast({ + title: '成功', + }) + Taro.hideLoading() + Taro.navigateBack({ + delta: 1, + }) + } + else { + Taro.showToast({ + title: res.msg, + icon: 'error', + }) + } } - } + }, + }) + } - const onClose = () => { - setShowSiteModal(false) - } + return ( + <> - const isDisabled = useMemo(() => { - let empty: any = null; - if (typeof (formData) == 'undefined') return - for (const key in formData) { - if (formData.hasOwnProperty(key)) { - if (formData[key] !== '' && typeof (formData[key]) !== 'undefined') { - empty = false - } else { - empty = true; - break; - } + +
+
+
+ + { + list.map((item) => { + return ( + handItem(item)}>{item.name} + ) + }) } - } - return empty; - }, [formData]) - - - //重置 - const handReset = () => { - setformData({ - sale_user_id: '', - sale_user_name: '', - name: '', - short_name: '', - director: '', - phone: '', - addressName: '', - address_detail: '', - purchaser_type: '', - remark: '', - district_id: '' - }) - } - - const { fetchData: postFetch } = mppurchaserpost() - const { fetchData: putFetch } = mppurchaserput() - //提交 - const handSure = async () => { - // if (!isDisabled) return false - let query = { - ...formData, - remark: remarkDesc, - id: infoObj?.id - } - if (router.params.type == 'add') { - delete query.id - } - Taro.showModal({ - content: "确定要提交吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - const res = await (router.params.type == 'add' ? postFetch(query) : putFetch(query)) - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - if (res.msg === 'success') { - Taro.showToast({ - title: '成功' - }) - Taro.hideLoading() - Taro.navigateBack({ - delta: 1 - }) - } else { - Taro.showToast({ - title: res.msg, - icon: 'error' - }) - } - } - } - }) - } - - - return ( - <> - - - -
-
- - { - list.map(item => { - return ( - handItem(item)}>{item.name} - ) - }) - } - -
-
-
-
setShowSiteModal(true)} - >
-
-
goLink('/pages/saleuserPage/index')} - showBorder={false} - inputValue={formData?.sale_user_name} - >
-
- `} clickNode={() => setShowDesc(true)}> - {remarkDesc === '' ? '尚未备注信息' : remarkDesc} - - setShowDesc(false)}> - getRemark(e)} defaultValue={infoObj?.remark} showInput={showDesc ? true : false} /> - -
handleSetSite(val)} defaultValue={addressArr} addressOnClose={() => onClose()} show={showSiteModal} /> - - - - - - - ) + + +
+
+
setShowSiteModal(true)} + >
+
+
goLink('/pages/saleuserPage/index')} + showBorder={false} + inputValue={formData?.sale_user_name} + >
+ + `} clickNode={() => setShowDesc(true)}> + {remarkDesc === '' ? '尚未备注信息' : remarkDesc} + + setShowDesc(false)}> + getRemark(e)} defaultValue={infoObj?.remark} showInput={!!showDesc} /> + +
handleSetSite(val)} defaultValue={addressArr} addressOnClose={() => onClose()} show={showSiteModal} /> + + + + + + + ) } - - -//卡片盒子元素 +// 卡片盒子元素 interface Obs { - title?: string, - modeName?: string, - showMode?: boolean, - children?: ReactNode, - clickNode?: () => void + title?: string + modeName?: string + showMode?: boolean + children?: ReactNode + clickNode?: () => void } const DefaultBox = memo((props: Obs) => { - const { - title = '标题', - modeName = '大货', - showMode = false, - children, - clickNode - } = props + const { + title = '标题', + modeName = '大货', + showMode = false, + children, + clickNode, + } = props - return ( - - - {title} - { - showMode && clickNode?.()}>{modeName} - } - - - {children} - - ) -}) \ No newline at end of file + return ( + + + {title} + { + showMode && clickNode?.()}>{modeName} + } + + + {children} + + ) +}) diff --git a/src/pages/customerManagement/components/ChoseCity/index.tsx b/src/pages/customerManagement/components/ChoseCity/index.tsx index 93003fc..d26b472 100644 --- a/src/pages/customerManagement/components/ChoseCity/index.tsx +++ b/src/pages/customerManagement/components/ChoseCity/index.tsx @@ -1,229 +1,228 @@ -import { View, ScrollView } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode, forwardRef, useImperativeHandle } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; +import { ScrollView, View } from '@tarojs/components' +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import React, { ReactNode, forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import Tabs from '../tabs' +import styles from './index.module.scss' import { alert } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import DropDownItem from '@/components/dropDown-item' -import { GetAddressListApi } from "@/api/addressList"; -import Tabs from "../tabs" -import IconFont from '@/components/iconfont/iconfont'; +import { GetAddressListApi } from '@/api/addressList' +import IconFont from '@/components/iconfont/iconfont' + interface Props { - handCity?: (province: any, city: any) => void, - value?: any, - onCloseOverlay?: () => void + handCity?: (province: any, city: any) => void + value?: any + onCloseOverlay?: () => void } export default memo(forwardRef((props: Props, ref) => { + const DropDownItemRef = useRef() + const close = () => { + DropDownItemRef.current.closePopup() + } + useImperativeHandle( + ref, + () => { + return { + show: DropDownItemRef?.current?.show, + showPopup: DropDownItemRef?.current.showPopup, + closePopup: DropDownItemRef?.current?.closePopup, + } + }, + [DropDownItemRef?.current], + ) + // 获取地址 + const { fetchData } = GetAddressListApi() + useEffect(() => { + getProvince() + }, []) - - const DropDownItemRef = useRef() - const close = () => { - DropDownItemRef.current.closePopup() + // 获取省 + const getProvince = async() => { + const res = await fetchData({ parent_id: 1 }) + if (res.data) { + setlist([...res.data.list]) } - useImperativeHandle( - ref, - () => { - return { - show: DropDownItemRef?.current?.show, - showPopup: DropDownItemRef?.current.showPopup, - closePopup: DropDownItemRef?.current?.closePopup, - } - }, - [DropDownItemRef?.current], - ) + } - //获取地址 - const { fetchData } = GetAddressListApi() - useEffect(() => { - getProvince() - }, []) + // 已选的集合市 + // const [choseCityArr, setchoseCityArr] = useState([]) + const choseCityArr = useRef({ list: [] }) + // 省数组 + const [list, setlist] = useState([]) + // 区数组 + const [cityList, setcityList] = useState([]) - //获取省 - const getProvince = async () => { - let res = await fetchData({ parent_id: 1 }) - if (res.data) { - setlist([...res.data.list]) - } - } + // 区分在哪一栏 + const [currentValue, setCurrentValue] = useState(1) + // 顶部栏 + const [TarBarList, setTarBarList] = useState([{ id: 1, name: '选择省', showBorder: true }, { id: 2, name: '选择市', showBorder: false }]) + const handChose = (item) => { + TarBarList.map((it) => { + if (it.id === item.id) { + it.showBorder = true + } + else { + it.showBorder = false + } + setTarBarList([...TarBarList]) + setCurrentValue(item.id) + }) + } - //已选的集合市 - // const [choseCityArr, setchoseCityArr] = useState([]) - const choseCityArr = useRef({ list: [] }) + // 选择省 + const handProvince = (item) => { + list.map((it) => { + if (item.id == it.id) { + it.check = true + } + return it + }) + setlist([...list]) + getCity(item.id) + setCurrentValue(2) + TarBarList.map((it) => { + if (it.id == currentValue) { + it.name = item.name + it.showBorder = false + } + else { + it.showBorder = true + } - //省数组 - const [list, setlist] = useState([]) - //区数组 - const [cityList, setcityList] = useState([]) + return it + }) + setTarBarList([...TarBarList]) + } - //区分在哪一栏 - const [currentValue, setCurrentValue] = useState(1) - - //顶部栏 - const [TarBarList, setTarBarList] = useState([{ id: 1, name: '选择省', showBorder: true }, { id: 2, name: '选择市', showBorder: false }]) - const handChose = (item) => { - TarBarList.map(it => { - if (it.id === item.id) { - it.showBorder = true - } else { - it.showBorder = false - } - setTarBarList([...TarBarList]) - setCurrentValue(item.id) + // 获取市 + const getCity = async(id) => { + const res = await fetchData({ parent_id: id }) + if (res.data) { + res.data.list.map((item) => { + choseCityArr.current.list.forEach((it) => { + if (item.id == it.id) { + item.check = true + } }) + return item + }) + setcityList([...res.data.list]) } + const provinceArr = list.filter((next) => { return next.check }) + props.handCity?.(provinceArr, choseCityArr.current.list) + } - //选择省 - const handProvince = (item) => { - list.map(it => { - if (item.id == it.id) { - it.check = true - } - return it - }) - setlist([...list]) - getCity(item.id) - setCurrentValue(2) - TarBarList.map(it => { - if (it.id == currentValue) { - it.name = item.name - it.showBorder = false - } else { - it.showBorder = true - } - - return it - }) - setTarBarList([...TarBarList]) + // 选择市 + const handCity = (item) => { + cityList.map((it) => { + if (item.id == it.id) { + it.check = !it.check + } + return it + }) + setcityList([...cityList]) + const cityArr = cityList.filter((next) => { return next.check }) + if (item.check) { + choseCityArr.current.list.push(item) } - - //获取市 - const getCity = async (id) => { - let res = await fetchData({ parent_id: id }) - if (res.data) { - res.data.list.map(item => { - choseCityArr.current.list.forEach(it => { - if (item.id == it.id) { - item.check = true - } - }) - return item - }) - setcityList([...res.data.list]) + else { + deleteById(item.id, choseCityArr.current.list) + } + // 将市区的全部不选后,该省的颜色不高亮 + if (cityArr.length == 0) { + list.map((item) => { + if (cityList[0]?.parent_id == item.id) { + item.check = false } - let provinceArr = list.filter(next => { return next.check }) - props.handCity?.(provinceArr, choseCityArr.current.list) + return item + }) + setlist([...list]) } + const provinceArr = list.filter((next) => { return next.check }) + props.handCity?.(provinceArr, choseCityArr.current.list) + } - - //选择市 - const handCity = (item) => { - cityList.map(it => { - if (item.id == it.id) { - it.check = !it.check - } - return it - }) - setcityList([...cityList]) - let cityArr = cityList.filter(next => { return next.check }) - if (item.check) { - choseCityArr.current.list.push(item) - } else { - deleteById(item.id, choseCityArr.current.list) - } - //将市区的全部不选后,该省的颜色不高亮 - if (cityArr.length == 0) { - list.map(item => { - if (cityList[0]?.parent_id == item.id) { - item.check = false - } - return item - }) - setlist([...list]) - } - let provinceArr = list.filter(next => { return next.check }) - props.handCity?.(provinceArr, choseCityArr.current.list) - } - - /** + /** * 根据id删除数组项 * @param {Number} id 需要删除的id * @param {Array} list 目标数组 - * - * @return {Array} + * + * @return {Array} */ - function deleteById(id, list) { - for (let index = list.length - 1; index >= 0; index--) { - if (list[index] && list[index].id === id) { - list.splice(index, 1) - } - } - return list + function deleteById(id, list) { + for (let index = list.length - 1; index >= 0; index--) { + if (list[index] && list[index].id === id) { + list.splice(index, 1) + } } + return list + } - //重置 - const handReset = () => { - TarBarList.map((item, index) => { - if (index == 0) { - item.name = '选择省' - item.showBorder = true - } else { - item.showBorder = false + // 重置 + const handReset = () => { + TarBarList.map((item, index) => { + if (index == 0) { + item.name = '选择省' + item.showBorder = true + } + else { + item.showBorder = false + } + return item + }) + setTarBarList([...TarBarList]) + setCurrentValue(1) + choseCityArr.current.list = [] + list.map((item) => { + item.check = false + return item + }) + setlist([...list]) + cityList.map((item) => { + item.check = false + return item + }) + setcityList([...cityList]) + props.handCity?.('', '') + } + return ( + + + handChose?.(item)} handReset={() => handReset()}> + { + currentValue == 1 && + { + list.map((item) => { + return ( + handProvince(item)}> + {item.name} + + + ) + }) } - return item - }) - setTarBarList([...TarBarList]) - setCurrentValue(1) - choseCityArr.current.list = [] - list.map(item => { - item.check = false - return item - }) - setlist([...list]) - cityList.map(item => { - item.check = false - return item - }) - setcityList([...cityList]) - props.handCity?.('', '') - } - return ( - - - handChose?.(item)} handReset={() => handReset()}> - { - currentValue == 1 && - { - list.map(item => { - return ( - handProvince(item)}> - {item.name} - - - ) - }) - } - - } - { - currentValue == 2 && - { - cityList.map(item => { - return ( - handCity(item)}> - {item.name} - {/* */} - - ) - }) - } - - } - - - ) -})) \ No newline at end of file + + } + { + currentValue == 2 && + { + cityList.map((item) => { + return ( + handCity(item)}> + {item.name} + {/* */} + + ) + }) + } + + } + + + ) +})) diff --git a/src/pages/customerManagement/components/ItemList/index.tsx b/src/pages/customerManagement/components/ItemList/index.tsx index 9b8151b..59a96ed 100644 --- a/src/pages/customerManagement/components/ItemList/index.tsx +++ b/src/pages/customerManagement/components/ItemList/index.tsx @@ -1,97 +1,97 @@ import { View } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import React, { ReactNode, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import { alert } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' + interface Props { - obj: any, - sortId: number | string + obj: any + sortId: number | string } export default memo((props: Props) => { + const handPhone = (e) => { + e.stopPropagation() + Taro.makePhoneCall({ + phoneNumber: props.obj?.phone, + }) + } - const handPhone = (e) => { - e.stopPropagation() - Taro.makePhoneCall({ - phoneNumber: props.obj?.phone - }) + const handNav = () => { + Taro.navigateTo({ + url: `/pages/customerDetails/index?purchaser_id=${props.obj?.id}`, + }) + } + + const time = useMemo(() => { + if (props?.sortId == '' || !props?.sortId) { + return props?.obj?.recent_order_time } - - const handNav = () => { - Taro.navigateTo({ - url: '/pages/customerDetails/index?purchaser_id=' + props.obj?.id - }) + if (props?.sortId == 1 || props?.sortId == -1) { + return props?.obj?.recent_order_time } + if (props?.sortId == 2 || props?.sortId == -2) { + return props?.obj?.create_time + } + if (props?.sortId == 3 || props?.sortId == -3) { + return props?.obj?.update_time + } + }, [props?.sortId]) - const time = useMemo(() => { - if (props?.sortId == '' || !props?.sortId) { - return props?.obj?.recent_order_time - } - if (props?.sortId == 1 || props?.sortId == -1) { - return props?.obj?.recent_order_time - } - if (props?.sortId == 2 || props?.sortId == -2) { - return props?.obj?.create_time - } - if (props?.sortId == 3 || props?.sortId == -3) { - return props?.obj?.update_time - } - }, [props?.sortId]) + const timeFont = useMemo(() => { + if (props?.sortId == '' || !props?.sortId) { + return '下单时间' + } + if (props?.sortId == 1 || props?.sortId == -1) { + return '下单时间' + } + if (props?.sortId == 2 || props?.sortId == -2) { + return '创建时间' + } + if (props?.sortId == 3 || props?.sortId == -3) { + return '更新时间' + } + }, [props?.sortId]) - const timeFont = useMemo(() => { - if (props?.sortId == '' || !props?.sortId) { - return '下单时间' - } - if (props?.sortId == 1 || props?.sortId == -1) { - return '下单时间' - } - if (props?.sortId == 2 || props?.sortId == -2) { - return '创建时间' - } - if (props?.sortId == 3 || props?.sortId == -3) { - return '更新时间' - } - }, [props?.sortId]) - - return ( - handNav()}> - - - - {props.obj.name[0]} - - - - {props.obj.name} - {props.obj.phone} - - - {props.obj.purchaser_type_name || '暂无'} - {props.obj.sale_user_name || '暂无'} - { - props.obj?.label_list?.map(item => { - return ( - {item.label_name} - ) - }) - } - - - - handPhone(e)}> - - - 联系TA - + return ( + handNav()}> + + + + {props.obj.name[0]} + + + + {props.obj.name} + {props.obj.phone} - - - {props.obj.default_address.province_name + props.obj.default_address.city_name + props.obj.default_address.district_name || '暂无'} - {timeFont}:{formatDateTime(time) || '暂无'} + + {props.obj.purchaser_type_name || '暂无'} + {props.obj.sale_user_name || '暂无'} + { + props.obj?.label_list?.map((item) => { + return ( + {item.label_name} + ) + }) + } - - ) -}) \ No newline at end of file + + + handPhone(e)}> + + + 联系TA + + + + + {props.obj.default_address.province_name + props.obj.default_address.city_name + props.obj.default_address.district_name || '暂无'} + {timeFont}:{formatDateTime(time) || '暂无'} + + + ) +}) diff --git a/src/pages/customerManagement/components/Sort/index.tsx b/src/pages/customerManagement/components/Sort/index.tsx index b6ad07c..6c119ca 100644 --- a/src/pages/customerManagement/components/Sort/index.tsx +++ b/src/pages/customerManagement/components/Sort/index.tsx @@ -1,109 +1,108 @@ import { View } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode, forwardRef, useImperativeHandle } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import React, { ReactNode, forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import { alert } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import DropDownItem from '@/components/dropDown-item' + interface Props { - handSort?: (any) => void, - value?: any, - onCloseOverlay?: () => void + handSort?: (any) => void + value?: any + onCloseOverlay?: () => void } -type ListType = { - name: string, - id: string, - checked: boolean +interface ListType { + name: string + id: string + checked: boolean } export default memo(forwardRef((props: Props, ref) => { + const DropDownItemRef = useRef() + useImperativeHandle( + ref, + () => { + return { + show: DropDownItemRef?.current?.show, + showPopup: DropDownItemRef?.current.showPopup, + closePopup: DropDownItemRef?.current?.closePopup, + } + }, + [DropDownItemRef?.current], + ) - const DropDownItemRef = useRef() - useImperativeHandle( - ref, - () => { - return { - show: DropDownItemRef?.current?.show, - showPopup: DropDownItemRef?.current.showPopup, - closePopup: DropDownItemRef?.current?.closePopup, - } - }, - [DropDownItemRef?.current], - ) + const [list, setlist] = useState([ + { + name: '下单时间正序', + id: '1', + checked: false, + }, + { + name: '创建时间正序', + id: '2', + checked: false, + }, + { + name: '更新时间正序', + id: '3', + checked: false, + }, + { + name: '下单时间倒序', + id: '-1', + checked: false, + }, + { + name: '创建时间倒序', + id: '-2', + checked: false, + }, + { + name: '更新时间倒序', + id: '-3', + checked: false, + }, + ]) + const [currentValue, setCurrentValue] = useState(-1) - const [list, setlist] = useState([ - { - name: '下单时间正序', - id: '1', - checked: false - }, - { - name: '创建时间正序', - id: '2', - checked: false - }, - { - name: '更新时间正序', - id: '3', - checked: false - }, - { - name: '下单时间倒序', - id: '-1', - checked: false - }, - { - name: '创建时间倒序', - id: '-2', - checked: false - }, - { - name: '更新时间倒序', - id: '-3', - checked: false - } - ]) + const handItem = (it) => { + list.map((item) => { + if (item.id == it.id) { + item.checked = true + } + else { + item.checked = false + } + return item + }) + setlist([...list]) + props.handSort?.(it.id) + } - const [currentValue, setCurrentValue] = useState(-1) - - const handItem = (it) => { - list.map(item => { - if (item.id == it.id) { - item.checked = true - } else { - item.checked = false - } - return item - }) - setlist([...list]) - props.handSort?.(it.id) + const title = useMemo(() => { + const arr = list.filter((item) => { return item.checked }) + if (!arr.length) { + return '默认排序' } + else { + return arr[0]?.name + } + }, [list]) - - const title = useMemo(() => { - let arr = list.filter(item => { return item.checked }) - if (!arr.length) { - return '默认排序' - } else { - return arr[0]?.name + return ( + + + { + list.map((item, index) => { + return ( + handItem?.(item)}>{item.name} + ) + }) } - }, [list]) - - - return ( - - - { - list.map((item, index) => { - return ( - handItem?.(item)}>{item.name} - ) - }) - } - - - ) -})) \ No newline at end of file + + + ) +})) diff --git a/src/pages/customerManagement/components/Tag/index.tsx b/src/pages/customerManagement/components/Tag/index.tsx index 80de9ad..a9358f9 100644 --- a/src/pages/customerManagement/components/Tag/index.tsx +++ b/src/pages/customerManagement/components/Tag/index.tsx @@ -1,118 +1,119 @@ import { View } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode, forwardRef, useImperativeHandle } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import React, { ReactNode, forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import { alert } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import { EnumPurchaserType } from '@/api/order' import DropDownItem from '@/components/dropDown-item' -import { mppurchaserlist } from "@/api/customer" +import { mppurchaserlist } from '@/api/customer' + interface Props { - handType: (any) => void, - handTags: (any) => void, - value?: any, - onCloseOverlay?: () => void + handType: (any) => void + handTags: (any) => void + value?: any + onCloseOverlay?: () => void } export default memo(forwardRef((props: Props, ref) => { + const DropDownItemRef = useRef() + useImperativeHandle( + ref, + () => { + return { + show: DropDownItemRef?.current?.show, + showPopup: DropDownItemRef?.current.showPopup, + closePopup: DropDownItemRef?.current?.closePopup, + } + }, + [DropDownItemRef?.current], + ) + const [currentValue, setCurrentValue] = useState(-1) - const DropDownItemRef = useRef() - useImperativeHandle( - ref, - () => { - return { - show: DropDownItemRef?.current?.show, - showPopup: DropDownItemRef?.current.showPopup, - closePopup: DropDownItemRef?.current?.closePopup, - } - }, - [DropDownItemRef?.current], - ) - const [currentValue, setCurrentValue] = useState(-1) + const [list, setlist] = useState([ + { + name: '二批', + id: 0, + checked: false, + }, + { + name: '制衣厂', + id: 1, + checked: false, + }, + { + name: '布行', + id: 2, + checked: false, + }, + ]) - const [list, setlist] = useState([ - { - name: '二批', - id: 0, - checked: false - }, - { - name: '制衣厂', - id: 1, - checked: false - }, - { - name: '布行', - id: 2, - checked: false - } - ]) - - useEffect(() => { - getList() - }, []) - const { fetchData: fetchPurchaserType } = EnumPurchaserType() - const { fetchData } = mppurchaserlist() - const getList = async () => { - const res = await fetchData() - const purchaserType = await fetchPurchaserType() - if (res.data) { - settaglist([...res.data.list]) - setlist([...purchaserType.data.list]) - } + useEffect(() => { + getList() + }, []) + const { fetchData: fetchPurchaserType } = EnumPurchaserType() + const { fetchData } = mppurchaserlist() + const getList = async() => { + const res = await fetchData() + const purchaserType = await fetchPurchaserType() + if (res.data) { + settaglist([...res.data.list]) + setlist([...purchaserType.data.list]) } + } - const [taglist, settaglist] = useState([]) + const [taglist, settaglist] = useState([]) - const handItem = (it) => { - list.map(item => { - if (item.id == it.id) { - item.checked = true - } else { - item.checked = false - } - return item - }) - setlist([...list]) - props.handType(list) - } + const handItem = (it) => { + list.map((item) => { + if (item.id == it.id) { + item.checked = true + } + else { + item.checked = false + } + return item + }) + setlist([...list]) + props.handType(list) + } - const handTag = (it) => { - taglist.map(item => { - if (item.id == it.id) { - item.checked = !item.checked - } - return item - }) - settaglist([...taglist]) - props.handTags(taglist) - } + const handTag = (it) => { + taglist.map((item) => { + if (item.id == it.id) { + item.checked = !item.checked + } + return item + }) + settaglist([...taglist]) + props.handTags(taglist) + } - return ( - - - 客户类型 - - { - list.map((item, index) => { - return ( - handItem?.(item)}>{item.name} - ) - }) - } - - 自定义标签 - - { - taglist.map((item, index) => { - return ( - handTag?.(item)}>{item.name} - ) - }) - } - - - - ) + return ( + + + 客户类型 + + { + list.map((item, index) => { + return ( + handItem?.(item)}>{item.name} + ) + }) + } + + 自定义标签 + + { + taglist.map((item, index) => { + return ( + handTag?.(item)}>{item.name} + ) + }) + } + + + + ) })) diff --git a/src/pages/customerManagement/components/tabs/index.tsx b/src/pages/customerManagement/components/tabs/index.tsx index e603f8e..4a7d148 100644 --- a/src/pages/customerManagement/components/tabs/index.tsx +++ b/src/pages/customerManagement/components/tabs/index.tsx @@ -1,37 +1,37 @@ -import { View, Input, Button } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; +import { Button, Input, View } from '@tarojs/components' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' interface Props { - list: any[], - handChose?: (any) => void, - handReset?: () => void + list: any[] + handChose?: (any) => void + handReset?: () => void } export default memo((props: Props) => { - const { list = [], handChose } = props + const { list = [], handChose } = props - return ( - - + return ( + + + { + list.map((item, index) => { + return ( + handChose?.(item)}> + {item?.name} { - list.map((item, index) => { - return ( - handChose?.(item)}> - {item?.name} - { - item.showBorder && - } - - ) - }) + item.showBorder && } + + ) + }) + } - - props?.handReset?.()}>重置 - - ) -}) \ No newline at end of file + + props?.handReset?.()}>重置 + + ) +}) diff --git a/src/pages/customerManagement/index.config.ts b/src/pages/customerManagement/index.config.ts index 6cfd2f0..c87840b 100644 --- a/src/pages/customerManagement/index.config.ts +++ b/src/pages/customerManagement/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '客户列表', + navigationBarTitleText: '客户列表', } diff --git a/src/pages/customerManagement/index.tsx b/src/pages/customerManagement/index.tsx index 4ffd007..359c56f 100644 --- a/src/pages/customerManagement/index.tsx +++ b/src/pages/customerManagement/index.tsx @@ -1,174 +1,171 @@ import { View } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import React, { ReactNode, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' +import Tag from './components/Tag' +import Sort from './components/Sort' +import ChoseCity from './components/ChoseCity' +import ItemLiist from './components/ItemList' import Popup from '@/components/popup' -import { debounce } from '@/common/util' -import { alert } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' -import { dataLoadingStatus, getFilterData } from '@/common/util' -import Tag from './components/Tag'; -import Sort from './components/Sort'; -import ChoseCity from './components/ChoseCity'; +import { dataLoadingStatus, debounce, getFilterData } from '@/common/util' +import { alert, goLink } from '@/common/common' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import Search from '@/components/search' -import ItemLiist from "./components/ItemList" import InfiniteScroll from '@/components/infiniteScroll' import { ClientListApi } from '@/api/order' -import { goLink } from '@/common/common' import SelectGroup from '@/components/SelectGroup' + export default () => { + const [searchField, setSearchField] = useState< + { + page: number + size: number + label_ids: string + purchaser_type: number | string + name_phone_or_sale_user: string + province_id: any[] | string + city_id: any[] | string + abstract_sort_key: string + } + >({ + page: 1, + size: 10, + label_ids: '', + purchaser_type: '', + name_phone_or_sale_user: '', + province_id: '', + city_id: '', + abstract_sort_key: '', + }) - const [searchField, setSearchField] = useState< - { - page: number; - size: number; - label_ids: string, - purchaser_type: number | string, - name_phone_or_sale_user: string, - province_id: any[] | string, - city_id: any[] | string, - abstract_sort_key: string, - } - >({ - page: 1, - size: 10, - label_ids: '', - purchaser_type: '', - name_phone_or_sale_user: '', - province_id: '', - city_id: '', - abstract_sort_key: '' + const [orderData, setOrderData] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) + const { fetchData: listFetchData, state: orderState } = ClientListApi() + const getOrderList = async() => { + const res = await listFetchData({ + ...getFilterData(searchField), }) + setOrderData(e => ({ ...e, list: res.data?.list, total: res.data?.total })) + setRefresherTriggeredStatus(() => false) + } - const [orderData, setOrderData] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) - const { fetchData: listFetchData, state: orderState } = ClientListApi() - const getOrderList = async () => { - let res = await listFetchData({ - ...getFilterData(searchField) - }) - setOrderData((e) => ({ ...e, list: res.data?.list, total: res.data?.total })) - setRefresherTriggeredStatus(() => false) + // 监听筛选条件变化 + useEffect(() => { + getOrderList() + }, [searchField]) + + // 输入了搜索关键字 + const getSearchData = useCallback((e) => { + pageNum.current.page = 1 + setOrderData(() => ({ list: [], total: 0 })) + setSearchField(val => ({ ...val, name_phone_or_sale_user: e, size: 10 })) + }, []) + + // 数据加载状态 + const statusMore = useMemo(() => { + return dataLoadingStatus({ list: orderData.list, total: orderData.total, status: orderState.loading! }) + }, [orderData, orderState]) + + // 上拉加载数据 + const pageNum = useRef({ size: searchField.size, page: searchField.page }) + const getScrolltolower = useCallback(() => { + if (orderData.list.length < orderData.total) { + pageNum.current.page++ + const size = pageNum.current.size * pageNum.current.page + setSearchField({ ...searchField, size }) } + }, [orderData]) - //监听筛选条件变化 - useEffect(() => { - getOrderList() - }, [searchField]) + // 列表下拉刷新 + const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) + const getRefresherRefresh = async() => { + pageNum.current.size = 1 + setRefresherTriggeredStatus(true) + setSearchField(val => ({ ...val, size: 10 })) + } + // 选择排序 + const sortRefRef = useRef() + const handSort = useCallback((e: string) => { + pageNum.current.page = 1 + setSearchField(val => ({ ...val, size: 10, abstract_sort_key: e })) + sortRefRef.current = e + }, []) - //输入了搜索关键字 - const getSearchData = useCallback((e) => { - pageNum.current.page = 1 - setOrderData(() => ({ list: [], total: 0 })) - setSearchField((val) => ({ ...val, name_phone_or_sale_user: e, size: 10 })) - }, []) + const SortRef = useRef() + const TagRef = useRef() - //数据加载状态 - const statusMore = useMemo(() => { - return dataLoadingStatus({ list: orderData.list, total: orderData.total, status: orderState.loading! }) - }, [orderData, orderState]) + // 筛选城市 + const ChoseCityRef = useRef() + const handCity = useCallback((provinceVal, cityVal) => { + const provinceArr: number[] = [] + const cityArr: number[] = [] + provinceVal.length && provinceVal.forEach((item) => { + provinceArr.push(item.id) + }) + cityVal.length && cityVal.forEach((item) => { + cityArr.push(item.id) + }) + pageNum.current.page = 1 + const provinceRes = provinceArr?.toString() + const cityRes = cityArr?.toString() + console.log(provinceRes, cityRes) + setSearchField(val => ({ ...val, province_id: provinceArr.length > 0 ? provinceRes : '', city_id: cityArr.length > 0 ? cityRes : '', size: 10 })) + // ChoseCityRef.current.close() + }, []) - //上拉加载数据 - const pageNum = useRef({ size: searchField.size, page: searchField.page }) - const getScrolltolower = useCallback(() => { - if (orderData.list.length < orderData.total) { - pageNum.current.page++ - const size = pageNum.current.size * pageNum.current.page - setSearchField({ ...searchField, size }) - } - }, [orderData]) + // 选择客户类型 + const handType = useCallback((val) => { + const arr = val.filter((item) => { return item.checked }) + pageNum.current.page = 1 + setSearchField(val => ({ ...val, size: 10, purchaser_type: arr[0]?.id })) + }, []) - //列表下拉刷新 - const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) - const getRefresherRefresh = async () => { - pageNum.current.size = 1 - setRefresherTriggeredStatus(true) - setSearchField((val) => ({ ...val, size: 10 })) - } + // 选择标签 + const handTags = useCallback((val) => { + const arr: any[] = [] + const arrOne = val.filter((item) => { return item.checked }) + arrOne.forEach((item) => { + arr.push(item.id) + }) + pageNum.current.page = 1 + const res = arr.toString() + setSearchField(val => ({ ...val, size: 10, label_ids: arr.length === 0 ? '' : res })) + }, []) - //选择排序 - const sortRefRef = useRef() - const handSort = useCallback((e: string) => { - pageNum.current.page = 1 - setSearchField((val) => ({ ...val, size: 10, abstract_sort_key: e })) - sortRefRef.current = e - }, []) - - const SortRef = useRef() - const TagRef = useRef() - - //筛选城市 - const ChoseCityRef = useRef() - const handCity = useCallback((provinceVal, cityVal) => { - const provinceArr: number[] = [] - const cityArr: number[] = [] - provinceVal.length && provinceVal.forEach(item => { - provinceArr.push(item.id) - }) - cityVal.length && cityVal.forEach(item => { - cityArr.push(item.id) - }) - pageNum.current.page = 1 - let provinceRes = provinceArr?.toString() - let cityRes = cityArr?.toString() - console.log(provinceRes, cityRes) - setSearchField((val) => ({ ...val, province_id: provinceArr.length > 0 ? provinceRes : '', city_id: cityArr.length > 0 ? cityRes : '', size: 10 })) - // ChoseCityRef.current.close() - }, []) - - //选择客户类型 - const handType = useCallback((val) => { - const arr = val.filter(item => { return item.checked }) - pageNum.current.page = 1 - setSearchField((val) => ({ ...val, size: 10, purchaser_type: arr[0]?.id })) - }, []) - - //选择标签 - const handTags = useCallback((val) => { - const arr: any[] = [] - const arrOne = val.filter(item => { return item.checked }) - arrOne.forEach(item => { - arr.push(item.id) - }) - pageNum.current.page = 1 - let res = arr.toString() - setSearchField((val) => ({ ...val, size: 10, label_ids: arr.length === 0 ? '' : res })) - }, []) - - - return ( - - - - - - - - true}> - true}> - true}> - - - - 共 {orderData?.total || 0} 个客户 - - - {orderData?.list?.map((item, index) => { - return ( - - ) - })} - - - - goLink('/pages/customerEditor/index?type=add')}>新建客户 - - - ) + return ( + + + + + + + + true}> + true}> + true}> + + + + 共 {orderData?.total || 0} 个客户 + + + {orderData?.list?.map((item, index) => { + return ( + + ) + })} + + + + goLink('/pages/customerEditor/index?type=add')}>新建客户 + + + ) } diff --git a/src/pages/customerPage/index.config.ts b/src/pages/customerPage/index.config.ts index 3e472f1..4dc41dc 100644 --- a/src/pages/customerPage/index.config.ts +++ b/src/pages/customerPage/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '选择客户', + navigationBarTitleText: '选择客户', } diff --git a/src/pages/customerPage/index.tsx b/src/pages/customerPage/index.tsx index d6b27bc..bad64eb 100644 --- a/src/pages/customerPage/index.tsx +++ b/src/pages/customerPage/index.tsx @@ -1,155 +1,149 @@ -import { View, ScrollView, Image, Input, Button } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; +import { Button, Image, Input, ScrollView, View } from '@tarojs/components' +import Taro, { useDidShow, useRouter } from '@tarojs/taro' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import Search from '@/components/search' import { ClientListApi } from '@/api/order' -import { useDidShow } from '@tarojs/taro'; -import Taro from '@tarojs/taro' -import { useRouter } from '@tarojs/taro' import InfiniteScroll from '@/components/infiniteScroll' import { dataLoadingStatus, getFilterData } from '@/common/util' export default () => { + const [search, setSearch] = useState({ + name_phone_or_sale_user: null, + page: 1, + size: 10, + }) + const [clentList, setClientlist] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) + const { fetchData: clitentFetch, state: orderState } = ClientListApi() + // 数据加载状态 + const statusMore = useMemo(() => { + return dataLoadingStatus({ list: clentList.list, total: clentList.total, status: orderState.loading! }) + }, [clentList, orderState]) + const [clientObj, setclientObj] = useState({ + clientId: null, + clientName: '', + }) - const [search, setSearch] = useState({ - name_phone_or_sale_user: null, - page: 1, - size: 10, + // 输入了搜索关键字 + const getSearchData = useCallback((eq) => { + pageNum.current.page = 1 + setClientlist(() => ({ list: [], total: 0 })) + setSearch(e => ({ ...e, name_phone_or_sale_user: eq, size: 10 })) + }, []) + + const router = useRouter() + + useEffect(() => { + if (search.name_phone_or_sale_user === '') { + setSearch(e => ({ ...e, name_phone_or_sale_user: null })) + } + if (search.name_phone_or_sale_user !== '') { getCuss() } + }, [search]) + + // 上拉加载数据 + const pageNum = useRef({ size: search.size, page: search.page }) + const getScrolltolower = useCallback(() => { + if (clentList.list.length < clentList.total) { + pageNum.current.page++ + const size = pageNum.current.size * pageNum.current.page + setSearch(e => ({ ...e, size })) + console.log(search, 11111) + } + }, [clentList]) + + // 列表下拉刷新 + const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) + const getRefresherRefresh = async() => { + pageNum.current.size = 1 + setRefresherTriggeredStatus(true) + setSearch(val => ({ ...val, size: 10 })) + } + const getCuss = async() => { + const res = await clitentFetch({ name_phone_or_sale_user: search.name_phone_or_sale_user === null ? '' : search.name_phone_or_sale_user, page: search.page, size: search.size }) + if (router?.params.clientId) { + res.data.list.map((item) => { + if (item.id == router?.params.clientId) { + item.checked = true + } + else { + item.checked = false + } + return item + }) + } + setClientlist(e => ({ ...e, list: res.data?.list, total: res.data?.total })) + setRefresherTriggeredStatus(() => false) + } + + // 选择客户 + const selectClient = (item) => { + clentList.list.map((it) => { + if (item.id === it.id) { + it.checked = true + } + else { + it.checked = false + } + return it }) - const [clentList, setClientlist] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) - - const { fetchData: clitentFetch, state: orderState } = ClientListApi() - //数据加载状态 - const statusMore = useMemo(() => { - return dataLoadingStatus({ list: clentList.list, total: clentList.total, status: orderState.loading! }) - }, [clentList, orderState]) - - const [clientObj, setclientObj] = useState({ - clientId: null, - clientName: '' + setclientObj(item) + const pages = Taro.getCurrentPages() // 获取当前的页面栈 + const prevPage = pages[pages.length - 2] + prevPage.setData({ // 设置上一个页面的值 + clientId: item.id, + clientName: item.name, }) - - //输入了搜索关键字 - const getSearchData = useCallback((eq) => { - pageNum.current.page = 1 - setClientlist(() => ({ list: [], total: 0 })) - setSearch((e) => ({ ...e, name_phone_or_sale_user: eq, size: 10 })) - }, []) - - - const router = useRouter() - - useEffect(() => { - if (search.name_phone_or_sale_user === '') { - setSearch((e) => ({ ...e, name_phone_or_sale_user: null })) - } - if (search.name_phone_or_sale_user !== '') getCuss() - }, [search]) - - //上拉加载数据 - const pageNum = useRef({ size: search.size, page: search.page }) - const getScrolltolower = useCallback(() => { - if (clentList.list.length < clentList.total) { - pageNum.current.page++ - const size = pageNum.current.size * pageNum.current.page - setSearch((e) => ({ ...e, size })) - console.log(search, 11111) - } - }, [clentList]) - - //列表下拉刷新 - const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) - const getRefresherRefresh = async () => { - pageNum.current.size = 1 - setRefresherTriggeredStatus(true) - setSearch((val) => ({ ...val, size: 10 })) + setClientlist(e => ({ ...e, list: clentList?.list, total: clentList?.total })) + Taro.navigateBack({ + delta: 1, + }) + } + useEffect(() => { + if (clientObj?.clientId !== null) { + setclientObj(clientObj) } - const getCuss = async () => { - let res = await clitentFetch({ name_phone_or_sale_user: search.name_phone_or_sale_user === null ? '' : search.name_phone_or_sale_user, page: search.page, size: search.size }) - if (router?.params.clientId) { - res.data.list.map(item => { - if (item.id == router?.params.clientId) { - item.checked = true - } else { - item.checked = false - } - return item - }) - } - setClientlist((e) => ({ ...e, list: res.data?.list, total: res.data?.total })) - setRefresherTriggeredStatus(() => false) - } - - - - //选择客户 - const selectClient = (item) => { - clentList.list.map(it => { - if (item.id === it.id) { - it.checked = true - } else { - it.checked = false - } - return it - }) - setclientObj(item) - let pages = Taro.getCurrentPages(); // 获取当前的页面栈 - let prevPage = pages[pages.length - 2]; - prevPage.setData({ //设置上一个页面的值 - clientId: item.id, - clientName: item.name, - }); - setClientlist((e) => ({ ...e, list: clentList?.list, total: clentList?.total })) - Taro.navigateBack({ - delta: 1 - }) - } - useEffect(() => { - if (clientObj?.clientId !== null) { - setclientObj(clientObj) - } - // else { - // let pages = Taro.getCurrentPages(); // 获取当前的页面栈 - // let prevPage = pages[pages.length - 2]; - // prevPage.setData({ //设置上一个页面的值 - // clientId: '', - // clientName: '', - // }); - // } - }, [clientObj]) - return ( - - - - - - - - - - { - clentList.list.map((item, index) => { - return ( - { selectClient(item) }}> - {item.name} - {item.phone} - {item.sale_user_name} - - ) - }) - } - - - - + // else { + // let pages = Taro.getCurrentPages(); // 获取当前的页面栈 + // let prevPage = pages[pages.length - 2]; + // prevPage.setData({ //设置上一个页面的值 + // clientId: '', + // clientName: '', + // }); + // } + }, [clientObj]) + return ( + + + + - ) + + + + + { + clentList.list.map((item, index) => { + return ( + { selectClient(item) }}> + {item.name} + {item.phone} + {item.sale_user_name} + + ) + }) + } + + + + + ) } diff --git a/src/pages/delivery/components/DeliveryStatusList/index.tsx b/src/pages/delivery/components/DeliveryStatusList/index.tsx index 150fad0..4d4cc96 100644 --- a/src/pages/delivery/components/DeliveryStatusList/index.tsx +++ b/src/pages/delivery/components/DeliveryStatusList/index.tsx @@ -1,13 +1,13 @@ -import SegmentedControl from '@/components/segmentedControl' import { FC, memo, useCallback, useEffect, useState } from 'react' +import SegmentedControl from '@/components/segmentedControl' import { EnumSaleorderStatus } from '@/api/index' -type PropsType = { - onChangeStatus?: (data: {id: number, name: string}) => void +interface PropsType { + onChangeStatus?: (data: { id: number; name: string }) => void } const DeliveryStatusList = memo((props) => { - const { onChangeStatus } = props + const { onChangeStatus } = props const { fetchData } = EnumSaleorderStatus() const [statusList, setStatusList] = useState([ { @@ -16,12 +16,12 @@ const DeliveryStatusList = memo((props) => { }, ]) // 请求 - const getDeliveryStatusList = async () => { + const getDeliveryStatusList = async() => { const res = await fetchData() - console.log(res.data.list); + console.log(res.data.list) setStatusList( res.data.list.filter((item) => { - return item.id === 3 || item.id === 4 // 待发货 已完成 + return item.id === 3 || item.id === 4 // 待发货 已完成 }), ) } @@ -32,8 +32,8 @@ const DeliveryStatusList = memo((props) => { // //状态改变 const changeStatus = useCallback( - (data: {id:number, name: string}) => { - onChangeStatus && onChangeStatus({ id: data.id, name: data.name }) + (data: { id: number; name: string }) => { + onChangeStatus && onChangeStatus({ id: data.id, name: data.name }) }, [onChangeStatus], ) diff --git a/src/pages/delivery/components/Filter/index.tsx b/src/pages/delivery/components/Filter/index.tsx index f24cc06..def817c 100644 --- a/src/pages/delivery/components/Filter/index.tsx +++ b/src/pages/delivery/components/Filter/index.tsx @@ -1,15 +1,16 @@ +import { View } from '@tarojs/components' +import Taro from '@tarojs/taro' +import classnames from 'classnames' +import type { FC } from 'react' +import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import dayjs from 'dayjs' +import styles from './index.module.scss' import NormalButton from '@/components/normalButton' import Popup from '@/components/popup' -import { View } from '@tarojs/components' -import classnames from 'classnames' -import styles from './index.module.scss' -import React, { FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' import Search from '@/components/search' import IconFont from '@/components/iconfont/iconfont' import { EnumDeliveryNoticeTypeList } from '@/api/index' -import dayjs from 'dayjs' import { getFilterData } from '@/common/util' -import Taro from '@tarojs/taro' interface SearchFilter { type?: number @@ -80,25 +81,25 @@ const DeliveryFilter = memo((props) => { const handleSelectedType = (type: string | number) => { console.log('type==>', type) if (typeof type === 'string' && type === 'default') { - setSearchFilter((e) => ({ ...e, type: undefined })) - } else { - setSearchFilter((e) => ({ ...e, type: type as number })) + setSearchFilter(e => ({ ...e, type: undefined })) + } + else { + setSearchFilter(e => ({ ...e, type: type as number })) } } - const typeList = useMemo<{ id: number; name: string }[]>(() => { return state.data.list }, [state]) useEffect(() => { - if (!!!typeList?.length) { + if (!typeList?.length) { getEnumData() console.log('getEnumData') } }, [typeList]) - const getEnumData = async () => { + const getEnumData = async() => { await fetchData() } @@ -107,18 +108,16 @@ const DeliveryFilter = memo((props) => { date_max: undefined, }) - - const handleSelectedTime = (timeOptionId) => { - setSearchFilter((e) => ({ ...e, timeKey: timeOptionId })) + setSearchFilter(e => ({ ...e, timeKey: timeOptionId })) // 不是设置了自定义时间 if (timeOptionId !== '6') { setCustomTime({ - date_min: filterTimeOptions[timeOptionId]['date_min'], - date_max: filterTimeOptions[timeOptionId]['date_max'], + date_min: filterTimeOptions[timeOptionId].date_min, + date_max: filterTimeOptions[timeOptionId].date_max, }) return - } + } onSearchTime?.() } @@ -144,8 +143,8 @@ const DeliveryFilter = memo((props) => { handleSelectedType('default')}> 不限 - {!!typeList?.length && - typeList?.map(item => { + {!!typeList?.length + && typeList?.map((item) => { return ( handleSelectedType(item?.id)}> {item.name} @@ -166,15 +165,15 @@ const DeliveryFilter = memo((props) => { ) })} handleSelectedTime('6')}> - 自定义时间 + 自定义时间 - + 重置 - + 确认 diff --git a/src/pages/delivery/components/ItemList/index.tsx b/src/pages/delivery/components/ItemList/index.tsx index 3c10fa1..11f9b1a 100644 --- a/src/pages/delivery/components/ItemList/index.tsx +++ b/src/pages/delivery/components/ItemList/index.tsx @@ -1,10 +1,10 @@ +import { Text, View } from '@tarojs/components' +import type { FC } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import LayoutBlock from '@/components/layoutBlock' import Divider from '@/components/divider' -import { View, Text } from '@tarojs/components' -import { FC } from 'react' import NormalButton from '@/components/normalButton' -import styles from './index.module.scss' -import classnames from 'classnames' import { EnumSaleMode } from '@/common/Enumerate' import { formatDateTime, formatMeterDiv } from '@/common/format' import { goLink } from '@/common/common' @@ -13,12 +13,12 @@ import { goLink } from '@/common/common' import SaleModeTag from '@/components/saleModeTag' // import { alert } from '@/common/common' -type PropsType = { +interface PropsType { itemData: Record onSuccess?: Function } -const ItemList:FC = (props) => { +const ItemList: FC = (props) => { const { itemData, onSuccess } = props // 查看详情 const handleDetail = (itemData: Record) => { @@ -41,7 +41,7 @@ const ItemList:FC = (props) => { // confirmColor: '#337FFF', // success: async (res) => { // if (res.confirm) { - // const res = await fetchData({ id }) + // const res = await fetchData({ id }) // if (res.success) { // Taro.showToast({ title: '审核成功', icon: 'success' }) // onSuccess?.() @@ -63,12 +63,12 @@ const ItemList:FC = (props) => { {itemData?.type_name} - + 货品信息: - + {itemData.delivery_product_nums}种面料,{itemData.delivery_product_color_nums}种颜色,共 {itemData?.sale_mode === EnumSaleMode.Bulk ? `${itemData?.delivery_roll}条` : `${formatMeterDiv(itemData?.delivery_length)}米`} @@ -86,10 +86,11 @@ const ItemList:FC = (props) => { handleDetail(itemData)}> + onClick={() => handleDetail(itemData)} + > 查看详情 {/* {itemData?.status === 0 && ( diff --git a/src/pages/delivery/index.tsx b/src/pages/delivery/index.tsx index 53311de..c74714e 100644 --- a/src/pages/delivery/index.tsx +++ b/src/pages/delivery/index.tsx @@ -1,21 +1,22 @@ -import { View, Text } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, FC, memo } from 'react' +import { Text, View } from '@tarojs/components' +import Taro, { useDidShow, useRouter } from '@tarojs/taro' +import type { FC } from 'react' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' import styles from './index.module.scss' +import ItemList from './components/ItemList' +import DeliveryStatusList from './components/DeliveryStatusList' +import type { SearchField } from './components/Filter' +import DeliveryFilter from './components/Filter' import Search from '@/components/search' import { DeliverNoticeOrderList, EnumSaleorderStatus } from '@/api/index' -import Taro, { useDidShow } from '@tarojs/taro' -import { useRouter } from '@tarojs/taro' import InfiniteScroll from '@/components/infiniteScroll' import { dataLoadingStatus, getFilterData } from '@/common/util' import IconText from '@/components/iconText' import IconFont from '@/components/iconfont/iconfont' -import ItemList from './components/ItemList' -import DeliveryStatusList from './components/DeliveryStatusList' import Popup from '@/components/popup' -import DeliveryFilter, { SearchField } from './components/Filter' import TimePickerPopup from '@/components/timePickerPopup' -type SearchData = { +interface SearchData { delivery_notice_order_no?: string // 发货单号 delivery_notice_order_status?: number | string // 发货状态 date_min?: string // 开始时间 @@ -25,8 +26,6 @@ type SearchData = { size: number } - - const defaultSearchFields = { delivery_notice_order_status: 0, // 待发货 page: 1, @@ -41,51 +40,51 @@ const Delivery: FC = () => { const isFirst = useRef(true) const { fetchData: FetchDeliveryOrderList, state: orderState } = DeliverNoticeOrderList() - //数据加载状态 + // 数据加载状态 const statusMore = useMemo(() => { return dataLoadingStatus({ list: deliveryOrderList.list, total: deliveryOrderList.total, status: orderState.loading! }) }, [deliveryOrderList, orderState]) - //输入搜索关键字 + // 输入搜索关键字 const getSearchData = useCallback((searchValue: string) => { - setSearch((prevProps) => ({ ...prevProps, delivery_notice_order_no: searchValue })) + setSearch(prevProps => ({ ...prevProps, delivery_notice_order_no: searchValue })) console.log('searchValue==>', searchValue) }, []) useEffect(() => { - if(!isFirst.current){ + if (!isFirst.current) { getData() } }, [search]) - useDidShow(()=>{ + useDidShow(() => { getData() }) - //上拉加载数据 + // 上拉加载数据 const pageNum = useRef({ size: search.size, page: search.page }) const getScrollToLower = useCallback(() => { if (deliveryOrderList.list.length < deliveryOrderList.total) { pageNum.current.page++ const size = pageNum.current.size * pageNum.current.page - setSearch((e) => ({ ...e, size })) + setSearch(e => ({ ...e, size })) console.log(search, 11111) } }, [deliveryOrderList]) - //列表下拉刷新 + // 列表下拉刷新 const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) - const getRefresherRefresh = async () => { + const getRefresherRefresh = async() => { pageNum.current.size = 1 setRefresherTriggeredStatus(true) - setSearch((val) => ({ ...val, size: 10 })) + setSearch(val => ({ ...val, size: 10 })) } - const getData = async () => { + const getData = async() => { const res = await FetchDeliveryOrderList(getFilterData(search)) - setDeliveryOrderList((e) => ({ ...e, list: res.data?.list, total: res.data?.total })) + setDeliveryOrderList(e => ({ ...e, list: res.data?.list, total: res.data?.total })) setRefresherTriggeredStatus(() => false) } @@ -95,11 +94,12 @@ const Delivery: FC = () => { let fuckingBadCodeId: string | number = 0 if (statusId === 3) { fuckingBadCodeId = 0 - } else if (statusId === 4) { + } + else if (statusId === 4) { fuckingBadCodeId = '1,2' } setCurrentStatus(statusName) - setSearch((e) => ({ ...e, delivery_notice_order_status: fuckingBadCodeId })) + setSearch(e => ({ ...e, delivery_notice_order_status: fuckingBadCodeId })) } const handleAuditSuccess = () => { @@ -142,9 +142,10 @@ const Delivery: FC = () => { console.log('changedFields==>changedFields', changedFields) // 自定义时间 if (timeKey === '6') { - setSearch((prevProps) => ({ ...prevProps, ...changedFields, date_min: start, date_max: end })) - } else { - setSearch((prevProps) => ({ ...prevProps, ...changedFields })) + setSearch(prevProps => ({ ...prevProps, ...changedFields, date_min: start, date_max: end })) + } + else { + setSearch(prevProps => ({ ...prevProps, ...changedFields })) } handlePopupClose() } @@ -159,7 +160,7 @@ const Delivery: FC = () => { const handleScan = () => { Taro.scanCode({ success(res) { - setSearch((e) => ({ ...e, delivery_notice_order_no: res.result })) + setSearch(e => ({ ...e, delivery_notice_order_no: res.result })) }, fail(res) { console.log(res) @@ -168,7 +169,7 @@ const Delivery: FC = () => { } return ( - + ) } @@ -176,9 +177,9 @@ const Delivery: FC = () => { return ( - + - + @@ -189,9 +190,10 @@ const Delivery: FC = () => { + selfOnRefresherRefresh={getRefresherRefresh} + > {currentStatus}共 {deliveryOrderList.total} 单 @@ -200,10 +202,10 @@ const Delivery: FC = () => { })} - + - handTime(e)}> + handTime(e)}> ) } diff --git a/src/pages/deliveryDetail/index.tsx b/src/pages/deliveryDetail/index.tsx index 996995f..5f228bb 100644 --- a/src/pages/deliveryDetail/index.tsx +++ b/src/pages/deliveryDetail/index.tsx @@ -1,3 +1,8 @@ +import { Text, View } from '@tarojs/components' +import Taro, { useRouter } from '@tarojs/taro' +import type { FC } from 'react' +import { useCallback, useEffect, useMemo, useState } from 'react' +import styles from './index.module.scss' import { DeliverNoticeOrder, DeliveryNoticeOrderAudit, DeliveryNoticeOrderUpload } from '@/api' import { formatDateTime, formatMeterDiv, formatWeightDiv } from '@/common/format' import Cell from '@/components/cell' @@ -6,12 +11,7 @@ import LayoutBlock from '@/components/layoutBlock' import NormalButton from '@/components/normalButton' import SaleModeTag from '@/components/saleModeTag' import UploadImage from '@/components/uploadImage' -import { View, Text } from '@tarojs/components' -import Taro from '@tarojs/taro' -import { useRouter } from '@tarojs/taro' import { alert } from '@/common/common' -import { FC, useCallback, useEffect, useMemo, useState } from 'react' -import styles from './index.module.scss' const DeliveryDetail: FC = () => { const router = useRouter() @@ -20,7 +20,7 @@ const DeliveryDetail: FC = () => { const [detailInfo, setDetailInfo] = useState>({}) - const getData = async () => { + const getData = async() => { const { id, order_no } = router.params const res = await fetchData({ id, @@ -39,21 +39,21 @@ const DeliveryDetail: FC = () => { const { fetchData: FetchAudit } = DeliveryNoticeOrderAudit() const DetailItem = useMemo(() => { - const element = - !!detailInfo?.weight_list?.length && - detailInfo?.weight_list.map((weightItem) => { + const element + = !!detailInfo?.weight_list?.length + && detailInfo?.weight_list.map((weightItem) => { return ( - + - + {weightItem.product_code} {weightItem.product_name} - 共 {weightItem?.sale_mode === 0 ? `${weightItem.roll} 条` : `${formatMeterDiv(weightItem?.length || 0)} 米`} + 共 {weightItem?.sale_mode === 0 ? `${weightItem.roll} 条` : `${formatMeterDiv(weightItem?.length || 0)} 米`} @@ -77,40 +77,43 @@ const DeliveryDetail: FC = () => { const handleUploadChange = (imageList: string[]) => { console.log('imageList===>', imageList) - setReadyToUploadList((prev) => [...prev, ...imageList]) + setReadyToUploadList(prev => [...prev, ...imageList]) } // 上传附件 - const handleUploadPic = useCallback(async () => { + const handleUploadPic = useCallback(async() => { const res = await uploadData({ id: Number(router.params.id), delivery_appendix: readyToUploadList, }) if (res.success) { alert.success('上传成功') - } else { + } + else { alert.error('上传核失败') } }, [readyToUploadList]) // 审核 const handleAudit = useCallback(() => { - if (readyToUploadList.length === 0 ) { + if (readyToUploadList.length === 0) { alert.error('请先上传附件') return } Taro.showModal({ confirmColor: '#337FFF', title: '确定审核?', - success: async function (res) { + async success(res) { if (res.confirm) { const res = await FetchAudit({ id: Number(router.params.id) }) if (res.success) { alert.success('审核成功') getData() - } else { + } + else { alert.error('审核失败') } - } else if (res.cancel) { + } + else if (res.cancel) { console.log('用户点击取消') } }, @@ -120,10 +123,10 @@ const DeliveryDetail: FC = () => { const BottomBar = useMemo(() => { return ( - + 上传附件 - + 确认审核 @@ -132,7 +135,7 @@ const DeliveryDetail: FC = () => { return ( - + 发货单号:{detailInfo?.order_no} {detailInfo?.status === 0 ? 待审核 : 已完成} @@ -147,19 +150,19 @@ const DeliveryDetail: FC = () => { - + 订单信息 - - - - - - + + + + + + - + 附件 - + diff --git a/src/pages/index/index.config.ts b/src/pages/index/index.config.ts index 2aa6160..86e3b2e 100644 --- a/src/pages/index/index.config.ts +++ b/src/pages/index/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '首页', + navigationBarTitleText: '首页', } diff --git a/src/pages/index/index.tsx b/src/pages/index/index.tsx index 70ef8e9..17686c8 100644 --- a/src/pages/index/index.tsx +++ b/src/pages/index/index.tsx @@ -1,372 +1,371 @@ import { View } from '@tarojs/components' +import Taro, { useDidShow } from '@tarojs/taro' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import styles from './index.module.scss' import Search from '@/components/search' import SideBar from '@/components/sideBar' import Product from '@/components/product' import ShopCart from '@/components/shoppingCart' import { goLink } from '@/common/common' -import styles from './index.module.scss' -import { useCallback, useEffect, useMemo, useRef, useState } from 'react' -import { kindListApi, ProductListApi } from '@/api/index' +import { ProductListApi, kindListApi } from '@/api/index' // import useLogin from '@/use/useLogin' -import { mpproductcolorlist, mpshoppingCartproductColorlist } from "@/api/order" -import { dataLoadingStatus } from '@/common/util' -import Taro, { useDidShow } from '@tarojs/taro' -import { getFilterData } from '@/common/util' +import { mpproductcolorlist, mpshoppingCartproductColorlist } from '@/api/order' +import { dataLoadingStatus, getFilterData } from '@/common/util' import { ClientListApi } from '@/api/order' + export default () => { + useEffect(() => { + categoryList() + getClient() + }, []) - useEffect(() => { - categoryList() - getClient() - }, []) - - //获取客户 - const [clienList, setclienList] = useState([]) - const { fetchData: listFetchData } = ClientListApi() - const getClient = async () => { - const res = await listFetchData({ - page: 1, size: 10 - }) - setclientObj({ - clientId: res.data.list.length > 0 ? res.data.list[0]?.id : -1, - clientName: res.data.list.length > 0 ? res.data.list[0]?.name : '', - }) - setclienList([...res.data.list]) - } - - //获取面料种类 - const [kindData, setKindData] = useState({ list: [], defaultId: 0 }) - const { fetchData } = kindListApi() - 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 }) - } - } - - //获取面料列表 - 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 } = ProductListApi() - //获取数据方法 - const getProductList = async () => { - const { data, total } = await productFetchData(filtrate) - setProductData({ ...productData, list: data.list, total }) - setRefresherTriggeredStatus(() => false) - } - //监听查询条件 - useEffect(() => { - if (filtrate.product_kind_id) getProductList() - }, [filtrate]) - - //点击面料类型 - const getProductKindId = useCallback((e) => { - pageNum.current.page = 1 - setProductData({ list: [], total: 0 }) - setFiltrate((list) => ({ ...list, size: 5, product_kind_id: e.id })) - }, []) - - //上拉加载数据 - const getScrolltolower = useCallback(() => { - 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 })) - } - }, [productData]) - - const [showShopCart, setShowShopCart] = useState(false) - - //列表下拉刷新 - const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) - const getRefresherRefresh = async () => { - pageNum.current.page = 1 - setFiltrate({ ...filtrate, size: 5 }) - setHasMore(true) - setRefresherTriggeredStatus(true) - } - - const onj = JSON.parse(Taro.getStorageSync('userInfo') || '{}') - const [search, setSearchObj] = useState({ - modeId: 0, - goodsId: null, - code_or_name: '', - physical_warehouse: onj.physical_warehouse, - purchaser_id: -1, + // 获取客户 + const [clienList, setclienList] = useState([]) + const { fetchData: listFetchData } = ClientListApi() + const getClient = async() => { + const res = await listFetchData({ + page: 1, size: 10, }) - - //选择的类型 - const [typeList, setTypeList] = useState([{ id: 0, name: '大货', checked: true }, { id: 1, name: '剪版', checked: false }, { id: 2, name: '散剪', checked: false }]) - //选择类型 - const handCheckMode = (item) => { - typeList.map(it => { - if (it.id === item.id) { - it.checked = true - setSearchObj((e) => ({ ...e, modeId: it.id })) - } else { - it.checked = false - } - return it - }) - setTypeList([...typeList]) - setGoodlist([]) - } - const [goodList, setGoodlist] = useState([]) - const { fetchData: colorlistFetch } = mpproductcolorlist() - const ShopCartRef = useRef(null) - - const [goodObj, setGoodsobj] = useState({}) - //点击对应商品显示购物车 - const showCart = async (item) => { - setSearchObj((e) => ({ ...e, goodsId: item.id, purchaser_id: clientObj?.clientId })) - setShowShopCart(true) - setGoodsobj(item) - ShopCartRef.current.SearchRef.current.clearInput() - } - - const getGoodList = async () => { - const res = await colorlistFetch({ product_id: search.goodsId, sale_mode: search.modeId, code_or_name: search.code_or_name, physical_warehouse: search?.physical_warehouse, purchaser_id: clientObj?.clientId }) - res.data.list.map((item) => { - item.showInput = false - if (search.modeId == 0) { - item.nums = 1 - item.buyNums = 1 - } - if (search.modeId == 1) { - item.nums = 0.5 - item.buyNums = 0.5 - } - if (search.modeId == 2) { - item.nums = 3 - item.buyNums = 3 - } - return item - }) - setGoodlist([...res.data.list]) - } - //监听选择的类型 - useEffect(() => { - setSearchObj(search) - if (search.goodsId) getGoodList() - }, [search]) - - //关闭弹窗 - const closePoup = () => { - setShowShopCart(false) - } - //数据加载状态 - const statusMore = useMemo(() => { - return dataLoadingStatus({ list: productData.list, total: productData.total, status: productState.loading }) - }, [productData, productState.loading]) - - //点击加展示输入框 - const handAdd = useCallback((item) => { - goodList.map((it) => { - if (item.id === it.id) { - it.showInput = true - } - return item - }) - setGoodlist([...goodList]) - }, [goodList]) - //点击减 - const reduceNums = useCallback((item) => { - goodList.map((it) => { - if (item.id === it.id) { - item.nums-- - if (search.modeId == 0) { - if (item.nums < 1) it.showInput = false, it.nums = 1 - } - if (search.modeId == 1) { - if (item.nums < 0.5) it.showInput = false, it.nums = 0.5 - } - if (search.modeId == 2) { - if (item.nums < 3) it.showInput = false, it.nums = 3 - } - - } - return item - }) - setGoodlist([...goodList]) - }, [goodList]) - - //点击输入框的加 - const handPlus = useCallback((item) => { - goodList.map((it) => { - if (item.id === it.id) { - it.nums++ - } - return item - }) - setGoodlist([...goodList]) - }, [goodList]) - - - //输入了搜索关键字 - const getSearchData = useCallback((eq) => { - setSearchObj((e) => ({ ...e, code_or_name: eq })) - }, []) - - const [clientObj, setclientObj] = useState({ - clientId: -1, - clientName: '' + setclientObj({ + clientId: res.data.list.length > 0 ? res.data.list[0]?.id : -1, + clientName: res.data.list.length > 0 ? res.data.list[0]?.name : '', }) + setclienList([...res.data.list]) + } - - //加入购物车 - const { fetchData: preViewFetch, } = mpshoppingCartproductColorlist() - const handSure = async () => { - const arr = goodList.filter(item => { - return item.showInput - }) - const list: any[] = [] - arr.forEach(it => { - list.push({ - roll: search.modeId === 0 ? Number(it.nums) : 0, - length: search.modeId !== 0 ? Number(it.nums) * 100 : 0, - product_color_id: Number(it.id) - }) - }) - const query = { - purchaser_id: clientObj.clientId, - sale_mode: search.modeId, - color_list: list, - sale_offect: 0 - } - let res = await preViewFetch(getFilterData(query)) - Taro.showLoading({ - mask: true, - title: '请稍等...' - }) - if (res.data) { - Taro.showToast({ - title: "加入成功", - duration: 2000, - }); - setShowShopCart(false) - goodList.map(item => { - item.showInput = false - return item - }) - setGoodlist([...goodList]) - Taro.hideLoading() - } else { - Taro.hideLoading() - Taro.showToast({ - icon: 'error', - title: res.msg, - duration: 2000, - }); - } + // 获取面料种类 + const [kindData, setKindData] = useState({ list: [], defaultId: 0 }) + const { fetchData } = kindListApi() + 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 }) } - //输入框失焦 - const onBlur = (e, id) => { - goodList.map(item => { - if (item.id == id) { - if (search.modeId == 0 && (e.detail.value == '' || Number(e.detail.value) == 0)) { - item.showInput = false - item.nums = 1 + } - } else if (search.modeId == 0 && (e.detail.value != '' || Number(e.detail.value) > 0)) { - item.nums = e.detail.value - } - if (search.modeId == 1 && Number(e.detail.value) < 0.5) { - item.nums = 0.5 - item.showInput = false - } else if (search.modeId == 1 && Number(e.detail.value) >= 0.5) { - item.nums = Number(e.detail.value).toFixed(2) - } - if (search.modeId == 2 && Number(e.detail.value) < 3) { - item.nums = 3 - item.showInput = false + // 获取面料列表 + 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 } = ProductListApi() + // 获取数据方法 + const getProductList = async() => { + const { data, total } = await productFetchData(filtrate) + setProductData({ ...productData, list: data.list, total }) + setRefresherTriggeredStatus(() => false) + } + // 监听查询条件 + useEffect(() => { + if (filtrate.product_kind_id) { getProductList() } + }, [filtrate]) - } else if (search.modeId == 2 && Number(e.detail.value) >= 3) { - item.nums = Number(e.detail.value).toFixed(2) - } + // 点击面料类型 + const getProductKindId = useCallback((e) => { + pageNum.current.page = 1 + setProductData({ list: [], total: 0 }) + setFiltrate(list => ({ ...list, size: 5, product_kind_id: e.id })) + }, []) - } - return item - }) - setGoodlist([...goodList]) + // 上拉加载数据 + const getScrolltolower = useCallback(() => { + 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 })) + } + }, [productData]) - useEffect(() => { - setGoodlist(goodList) - }, [goodList]) + const [showShopCart, setShowShopCart] = useState(false) + // 列表下拉刷新 + const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) + const getRefresherRefresh = async() => { + pageNum.current.page = 1 + setFiltrate({ ...filtrate, size: 5 }) + setHasMore(true) + setRefresherTriggeredStatus(true) + } - useDidShow(() => { - //获取选择的客户 - let pages = Taro.getCurrentPages(); - let currPage = pages[pages.length - 1]; // 获取当前页面 - //判断是否有跳转选择客户 - if (currPage.data?.clientId && currPage.data?.clientId !== '') { - setclientObj({ - clientId: currPage.data?.clientId, - clientName: currPage.data?.clientName, - }) - setSearchObj((val) => ({ ...val, purchaser_id: currPage.data?.clientId })) - } - //默认客户 - if (currPage.data?.clientId == null) { - setclientObj({ - clientId: clienList.length > 0 ? clienList[0]?.id : - 1, - clientName: clienList.length > 0 ? clienList[0]?.name : '', - }) - } + const onj = JSON.parse(Taro.getStorageSync('userInfo') || '{}') + const [search, setSearchObj] = useState({ + modeId: 0, + goodsId: null, + code_or_name: '', + physical_warehouse: onj.physical_warehouse, + purchaser_id: -1, + }) + + // 选择的类型 + const [typeList, setTypeList] = useState([{ id: 0, name: '大货', checked: true }, { id: 1, name: '剪版', checked: false }, { id: 2, name: '散剪', checked: false }]) + // 选择类型 + const handCheckMode = (item) => { + typeList.map((it) => { + if (it.id === item.id) { + it.checked = true + setSearchObj(e => ({ ...e, modeId: it.id })) + } + else { + it.checked = false + } + return it }) + setTypeList([...typeList]) + setGoodlist([]) + } + const [goodList, setGoodlist] = useState([]) + const { fetchData: colorlistFetch } = mpproductcolorlist() + const ShopCartRef = useRef(null) - return ( - // setShowShopCart(showShopCart)}> - - - {/* goLink('/pages/collection/index')}> + const [goodObj, setGoodsobj] = useState({}) + // 点击对应商品显示购物车 + const showCart = async(item) => { + setSearchObj(e => ({ ...e, goodsId: item.id, purchaser_id: clientObj?.clientId })) + setShowShopCart(true) + setGoodsobj(item) + ShopCartRef.current.SearchRef.current.clearInput() + } + + const getGoodList = async() => { + const res = await colorlistFetch({ product_id: search.goodsId, sale_mode: search.modeId, code_or_name: search.code_or_name, physical_warehouse: search?.physical_warehouse, purchaser_id: clientObj?.clientId }) + res.data.list.map((item) => { + item.showInput = false + if (search.modeId == 0) { + item.nums = 1 + item.buyNums = 1 + } + if (search.modeId == 1) { + item.nums = 0.5 + item.buyNums = 0.5 + } + if (search.modeId == 2) { + item.nums = 3 + item.buyNums = 3 + } + return item + }) + setGoodlist([...res.data.list]) + } + // 监听选择的类型 + useEffect(() => { + setSearchObj(search) + if (search.goodsId) { getGoodList() } + }, [search]) + + // 关闭弹窗 + const closePoup = () => { + setShowShopCart(false) + } + // 数据加载状态 + const statusMore = useMemo(() => { + return dataLoadingStatus({ list: productData.list, total: productData.total, status: productState.loading }) + }, [productData, productState.loading]) + + // 点击加展示输入框 + const handAdd = useCallback((item) => { + goodList.map((it) => { + if (item.id === it.id) { + it.showInput = true + } + return item + }) + setGoodlist([...goodList]) + }, [goodList]) + // 点击减 + const reduceNums = useCallback((item) => { + goodList.map((it) => { + if (item.id === it.id) { + item.nums-- + if (search.modeId == 0) { + if (item.nums < 1) { it.showInput = false, it.nums = 1 } + } + if (search.modeId == 1) { + if (item.nums < 0.5) { it.showInput = false, it.nums = 0.5 } + } + if (search.modeId == 2) { + if (item.nums < 3) { it.showInput = false, it.nums = 3 } + } + } + return item + }) + setGoodlist([...goodList]) + }, [goodList]) + + // 点击输入框的加 + const handPlus = useCallback((item) => { + goodList.map((it) => { + if (item.id === it.id) { + it.nums++ + } + return item + }) + setGoodlist([...goodList]) + }, [goodList]) + + // 输入了搜索关键字 + const getSearchData = useCallback((eq) => { + setSearchObj(e => ({ ...e, code_or_name: eq })) + }, []) + + const [clientObj, setclientObj] = useState({ + clientId: -1, + clientName: '', + }) + + // 加入购物车 + const { fetchData: preViewFetch } = mpshoppingCartproductColorlist() + const handSure = async() => { + const arr = goodList.filter((item) => { + return item.showInput + }) + const list: any[] = [] + arr.forEach((it) => { + list.push({ + roll: search.modeId === 0 ? Number(it.nums) : 0, + length: search.modeId !== 0 ? Number(it.nums) * 100 : 0, + product_color_id: Number(it.id), + }) + }) + const query = { + purchaser_id: clientObj.clientId, + sale_mode: search.modeId, + color_list: list, + sale_offect: 0, + } + const res = await preViewFetch(getFilterData(query)) + Taro.showLoading({ + mask: true, + title: '请稍等...', + }) + if (res.data) { + Taro.showToast({ + title: '加入成功', + duration: 2000, + }) + setShowShopCart(false) + goodList.map((item) => { + item.showInput = false + return item + }) + setGoodlist([...goodList]) + Taro.hideLoading() + } + else { + Taro.hideLoading() + Taro.showToast({ + icon: 'error', + title: res.msg, + duration: 2000, + }) + } + } + // 输入框失焦 + const onBlur = (e, id) => { + goodList.map((item) => { + if (item.id == id) { + if (search.modeId == 0 && (e.detail.value == '' || Number(e.detail.value) == 0)) { + item.showInput = false + item.nums = 1 + } + else if (search.modeId == 0 && (e.detail.value != '' || Number(e.detail.value) > 0)) { + item.nums = e.detail.value + } + if (search.modeId == 1 && Number(e.detail.value) < 0.5) { + item.nums = 0.5 + item.showInput = false + } + else if (search.modeId == 1 && Number(e.detail.value) >= 0.5) { + item.nums = Number(e.detail.value).toFixed(2) + } + if (search.modeId == 2 && Number(e.detail.value) < 3) { + item.nums = 3 + item.showInput = false + } + else if (search.modeId == 2 && Number(e.detail.value) >= 3) { + item.nums = Number(e.detail.value).toFixed(2) + } + } + return item + }) + setGoodlist([...goodList]) + } + + useEffect(() => { + setGoodlist(goodList) + }, [goodList]) + + useDidShow(() => { + // 获取选择的客户 + const pages = Taro.getCurrentPages() + const currPage = pages[pages.length - 1] // 获取当前页面 + // 判断是否有跳转选择客户 + if (currPage.data?.clientId && currPage.data?.clientId !== '') { + setclientObj({ + clientId: currPage.data?.clientId, + clientName: currPage.data?.clientName, + }) + setSearchObj(val => ({ ...val, purchaser_id: currPage.data?.clientId })) + } + // 默认客户 + if (currPage.data?.clientId == null) { + setclientObj({ + clientId: clienList.length > 0 ? clienList[0]?.id : -1, + clientName: clienList.length > 0 ? clienList[0]?.name : '', + }) + } + }) + + return ( + // setShowShopCart(showShopCart)}> + + + {/* goLink('/pages/collection/index')}> 我的收藏 */} - goLink('/pages/searchPage/index')}> - - - - - getRefresherRefresh()}> - showCart(item)} /> - - - {/* */} - handSure()} - clientName={clientObj?.clientName} - clientId={clientObj?.clientId} - modeFont={search.modeId} - handPlus={(item) => handPlus(item)} - obj={goodObj} - ref={ShopCartRef} - getSearchData={(e) => { getSearchData(e) }} - onBlur={(e, id) => onBlur(e, id)} - reduceNums={(item) => { reduceNums(item) }} - addNums={(item) => { handAdd(item) }} - showPopup={showShopCart} - handCheck={(item) => { handCheckMode(item) }} - closePopup={() => closePoup()} - goodList={goodList} - typeList={typeList} - > + goLink('/pages/searchPage/index')}> + - // - ) + + + getRefresherRefresh()} + > + showCart(item)} /> + + + {/* */} + handSure()} + clientName={clientObj?.clientName} + clientId={clientObj?.clientId} + modeFont={search.modeId} + handPlus={item => handPlus(item)} + obj={goodObj} + ref={ShopCartRef} + getSearchData={(e) => { getSearchData(e) }} + onBlur={(e, id) => onBlur(e, id)} + reduceNums={(item) => { reduceNums(item) }} + addNums={(item) => { handAdd(item) }} + showPopup={showShopCart} + handCheck={(item) => { handCheckMode(item) }} + closePopup={() => closePoup()} + goodList={goodList} + typeList={typeList} + > + + // + ) } // oninputEvent={(e, item) => { oninputEvent(e, item) }} diff --git a/src/pages/login/index.config.ts b/src/pages/login/index.config.ts index 044b7e5..bd25448 100644 --- a/src/pages/login/index.config.ts +++ b/src/pages/login/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '登录', + navigationBarTitleText: '登录', } diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx index 83f2117..b2747b9 100644 --- a/src/pages/login/index.tsx +++ b/src/pages/login/index.tsx @@ -1,14 +1,14 @@ +import { Image, Input, Text, View } from '@tarojs/components' +import Taro from '@tarojs/taro' +import type { FC } from 'react' +import { memo, useState } from 'react' +import styles from './index.module.scss' import Divider from '@/components/divider' import IconFont from '@/components/iconfont/iconfont' -import { View, Image, Text, Input } from '@tarojs/components' -import { FC, useState } from 'react' -import styles from './index.module.scss' import MCheckbox from '@/components/checkbox' import NormalButton from '@/components/normalButton' import IconCard from '@/components/iconCard' -import {memo} from 'react' import { LoginApi } from '@/api' -import Taro from '@tarojs/taro' import { alert } from '@/common/common' import useUserInfo from '@/use/useUserInfo' @@ -18,7 +18,7 @@ const Login: FC = () => { const [eyesStatus, setEyesStatus] = useState(true) const handlePwdVisible = () => { - setEyesStatus((value) => !value) + setEyesStatus(value => !value) } const selectCallBack = () => { @@ -33,7 +33,7 @@ const Login: FC = () => { const [account, setAccount] = useState('') const [password, setPassword] = useState('') - const formatInput = (value:string) => { + const formatInput = (value: string) => { return value.trim() } @@ -48,15 +48,10 @@ const Login: FC = () => { const { setToken, setUserInfo } = useUserInfo() - - const { fetchData } = LoginApi() - - - - const handleLogin = async () => { - if (account === '' || password === '') return alert.error('账号密码不能为空!') + const handleLogin = async() => { + if (account === '' || password === '') { return alert.error('账号密码不能为空!') } console.log('账户密码:', account, password) const res = await fetchData({ account, @@ -70,7 +65,8 @@ const Login: FC = () => { Taro.switchTab({ url: '/pages/index/index', }) - } else { + } + else { alert.error('登陆失败') } } @@ -81,27 +77,29 @@ const Login: FC = () => { return ( - + 您好, 欢迎来到蜘蛛管家 - - - + + + - - - + + + - {!eyesStatus ? ( - - ) : ( - - )} + {!eyesStatus + ? ( + + ) + : ( + + )} @@ -126,11 +124,11 @@ const Login: FC = () => { const QuickLogin: FC = memo(() => { return ( - + 或通过以下方式登录 - + ) diff --git a/src/pages/newCollection/components/itemList/index.tsx b/src/pages/newCollection/components/itemList/index.tsx index 2cc7d09..4568125 100644 --- a/src/pages/newCollection/components/itemList/index.tsx +++ b/src/pages/newCollection/components/itemList/index.tsx @@ -1,54 +1,54 @@ import { ScrollView, View } from '@tarojs/components' -import { memo, useCallback, useEffect, useMemo, useState } from 'react' -import styles from './index.module.scss' -import classnames from 'classnames' -// import BottomBtns from '@/components/BottomBtns' -import { formatPriceDiv, formatDateTime } from '@/common/format' import Taro from '@tarojs/taro' +import { memo, useCallback, useEffect, useMemo, useState } from 'react' +import classnames from 'classnames' import { navigateTo } from '@tarojs/router' +import styles from './index.module.scss' +// import BottomBtns from '@/components/BottomBtns' +import { formatDateTime, formatPriceDiv } from '@/common/format' interface Params { - obj: any + obj: any } export default memo((pros: Params) => { + const navTo = () => { + Taro.navigateTo({ + url: `/pages/collectionDetail/index?id=${pros.obj.id}`, + }) + } - - const navTo = () => { - Taro.navigateTo({ - url: '/pages/collectionDetail/index?id=' + pros.obj.id - }) + const styleColor = useMemo(() => { + if (pros.obj.auditor_status_name == '待审核') { + return '#E42945' } + else if (pros.obj.auditor_status_name == '已审核') { + return '#337FFF' + } + else if (pros.obj.auditor_status_name == '已拒绝') { + return '#000000' + } + }, [pros.obj]) - const styleColor = useMemo(() => { - if (pros.obj.auditor_status_name == '待审核') { - return '#E42945' - } else if (pros.obj.auditor_status_name == '已审核') { - return '#337FFF' - } else if (pros.obj.auditor_status_name == '已拒绝') { - return '#000000' - } - }, [pros.obj]) - - return ( - - - {pros.obj.purchaser_name} - {pros.obj.auditor_status_name} - - - 转账金额: - ¥{formatPriceDiv(pros.obj.receipt_amount)} - - - 待认款金额: - ¥{formatPriceDiv(pros.obj.pending_distribute_amount)} - - - 收款时间: - {formatDateTime(pros.obj.create_time)} - - navTo()}>查看详情 - - ) -}) \ No newline at end of file + return ( + + + {pros.obj.purchaser_name} + {pros.obj.auditor_status_name} + + + 转账金额: + ¥{formatPriceDiv(pros.obj.receipt_amount)} + + + 待认款金额: + ¥{formatPriceDiv(pros.obj.pending_distribute_amount)} + + + 收款时间: + {formatDateTime(pros.obj.create_time)} + + navTo()}>查看详情 + + ) +}) diff --git a/src/pages/newCollection/index.tsx b/src/pages/newCollection/index.tsx index 9fc285f..c6be1d6 100644 --- a/src/pages/newCollection/index.tsx +++ b/src/pages/newCollection/index.tsx @@ -1,306 +1,305 @@ -import { View, Input, Button } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, } from 'react' +import { Button, Input, View } from '@tarojs/components' +import Taro, { faceVerifyForPay, useDidShow } from '@tarojs/taro' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import dayjs from 'dayjs' +import styles from './index.module.scss' +import ItemList from './components/itemList' import Search from '@/components/search' import { dataLoadingStatus, getFilterData } from '@/common/util' -import styles from "./index.module.scss" -import classnames from "classnames"; import Popup from '@/components/popup' import InfiniteScroll from '@/components/infiniteScroll' -import Taro, { faceVerifyForPay, useDidShow } from '@tarojs/taro' -import ItemList from './components/itemList' import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from '@/common/format' import { - mpcashManagementOrderlist -} from "@/api/newCollection" + mpcashManagementOrderlist, +} from '@/api/newCollection' import TimePickerPopup from '@/components/timePickerPopup' -import dayjs from 'dayjs' import IconFont from '@/components/iconfont/iconfont' export default () => { - let myDate = new Date(); - const [searchField, setSearchField] = useState< - { - page: number; - size: number; - search_name: string; - start_time: number | string; - end_time: number | string; - }>({ - page: 1, - size: 10, - search_name: '', - start_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).subtract(14, 'day').format('YYYY-MM-DD')} 00:00:00`, - end_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).add(1, 'day').format('YYYY-MM-DD')} 00:00:00`, - }) - const pageNum = useRef({ size: searchField.size, page: searchField.page }) + const myDate = new Date() + const [searchField, setSearchField] = useState< + { + page: number + size: number + search_name: string + start_time: number | string + end_time: number | string + }>({ + page: 1, + size: 10, + search_name: '', + start_time: `${dayjs(new Date(`${myDate?.toLocaleDateString()} ` + '00:00:00')).subtract(14, 'day').format('YYYY-MM-DD')} 00:00:00`, + end_time: `${dayjs(new Date(`${myDate?.toLocaleDateString()} ` + '00:00:00')).add(1, 'day').format('YYYY-MM-DD')} 00:00:00`, + }) + const pageNum = useRef({ size: searchField.size, page: searchField.page }) - useDidShow(() => { - getOrderList() + useDidShow(() => { + getOrderList() + }) + + // 监听筛选条件变化 + useEffect(() => { + getOrderList() + }, [searchField.size, searchField.search_name]) + // 输入了搜索关键字 + const getSearchData = useCallback((e) => { + pageNum.current.page = 1 + setOrderData(() => ({ list: [], total: 0 })) + setSearchField(val => ({ ...val, search_name: e, size: 10 })) + }, []) + + // 获取订单列表 + const { fetchData: listFetchData, state: orderState } = mpcashManagementOrderlist() + const [orderData, setOrderData] = useState<{ list: any[]; total: number; summary?: any }>({ list: [], total: 0, summary: {} }) + const getOrderList = async() => { + const res = await listFetchData({ + ...searchField, }) + setOrderData(e => ({ ...e, list: res.data?.list, total: res.data?.total, summary: res.data?.summary })) + // setshowPopup(false) + setRefresherTriggeredStatus(false) + } - //监听筛选条件变化 - useEffect(() => { - getOrderList() - }, [searchField.size, searchField.search_name]) - //输入了搜索关键字 - const getSearchData = useCallback((e) => { - pageNum.current.page = 1 - setOrderData(() => ({ list: [], total: 0 })) - setSearchField((val) => ({ ...val, search_name: e, size: 10 })) - }, []) + // 列表下拉刷新 + const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) + const getRefresherRefresh = async() => { + pageNum.current.page = 1 + // pageNum.current.size = 10 + setRefresherTriggeredStatus(true) + getOrderList() + setSearchField(val => ({ ...val, size: 10 })) + } + // 数据加载状态 + const statusMore = useMemo(() => { + return dataLoadingStatus({ list: orderData.list, total: orderData.total, status: orderState.loading as any }) + }, [orderData, orderState]) - - //获取订单列表 - const { fetchData: listFetchData, state: orderState } = mpcashManagementOrderlist() - const [orderData, setOrderData] = useState<{ list: any[]; total: number, summary?: any }>({ list: [], total: 0, summary: {} }) - const getOrderList = async () => { - let res = await listFetchData({ - ...searchField - }) - setOrderData((e) => ({ ...e, list: res.data?.list, total: res.data?.total, summary: res.data?.summary })) - // setshowPopup(false) - setRefresherTriggeredStatus(false) + // 上拉加载数据 + const getScrolltolower = useCallback(() => { + if (orderData.list.length < orderData.total) { + pageNum.current.page++ + const size = pageNum.current.size * pageNum.current.page + console.log(pageNum.current.page, 'pageNum.current.page') + console.log(size, 123123) + setSearchField({ ...searchField, size }) } + }, [orderData]) - //列表下拉刷新 - const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) - const getRefresherRefresh = async () => { - pageNum.current.page = 1 - // pageNum.current.size = 10 - setRefresherTriggeredStatus(true) - getOrderList() - setSearchField((val) => ({ ...val, size: 10 })) + // 是否不允许确认筛选 + const isDisabled = useMemo(() => { + // if (searchField.stage !== '不限' || + // searchField.sale_mode !== '不限' || + // searchField.return_type !== '不限' || + // searchField.start_time !== '' || + // searchField.end_time !== '' + // ) { + // return false + // } else { + // return true + // } + return false + }, []) + + // 新建收款 + const handAdd = () => { + Taro.navigateTo({ + url: '/pages/addCollection/index', + }) + } + + // 筛选弹出 + + const [SelectPopup, setSelectPopup] = useState(false) + + // 时间数组 + const [TimeList, setTimeList] = useState( + [ + { + id: 1, + name: '默认14天内', + start_time: `${dayjs(new Date(`${myDate?.toLocaleDateString()} ` + '00:00:00')).subtract(14, 'day').format('YYYY-MM-DD')} 00:00:00`, + end_time: `${dayjs(new Date(`${myDate?.toLocaleDateString()} ` + '00:00:00')).add(1, 'day').format('YYYY-MM-DD')} 00:00:00`, + checked: true, + }, + { + id: 2, + name: '展示全部日期', + start_time: '', + end_time: '', + checked: false, + }, + ], + ) + + // 选择时间item + const handSelect = (it) => { + TimeList.map((item) => { + if (item.id == it.id) { + item.checked = true + } + else { + item.checked = false + } + return item + }) + setTimeList([...TimeList]) + pageNum.current.size = 10 + setSearchField({ ...searchField, start_time: it.start_time, end_time: it.end_time, size: 10 }) + setEnd('') + } + + // 重置 + const handReset = () => { + TimeList.map((item) => { + if (item.id == 1) { + item.checked = true + } + else { + item.checked = false + } + return item + }) + setTimeList([...TimeList]) + pageNum.current.size = 10 + setSearchField({ + ...searchField, + start_time: `${dayjs(new Date(`${myDate?.toLocaleDateString()} ` + '00:00:00')).subtract(14, 'day').format('YYYY-MM-DD')} 00:00:00`, + end_time: `${dayjs(new Date(`${myDate?.toLocaleDateString()} ` + '00:00:00')).add(1, 'day').format('YYYY-MM-DD')} 00:00:00`, + size: 10, + }) + setStart(myDate.toLocaleDateString()) + setEnd('') + } + + // 弹窗确认选择 + const handSureSelect = () => { + pageNum.current.size = 10 + setSearchField({ ...searchField, size: 10 }) + getOrderList() + setSelectPopup(false) + } + + // 展示时间筛选 + const [showTime, setShowTime] = useState(false) + // 关闭时间筛选 + const handClose = () => { + setShowTime(false) + } + + const [start, setStart] = useState(myDate.toLocaleDateString()) + const [end, setEnd] = useState('') + // 选择时间 + const handTime = (eq) => { + // 直接进来点确定的时候做处理 + if (Object.keys(eq).length === 0) { + const obj = { + start: '', + end: '', + } + obj.start = `${dayjs(new Date(`${myDate?.toLocaleDateString()} ` + '00:00:00')).format('YYYY-MM-DD')} 00:00:00`, + obj.end = `${dayjs(new Date(obj?.start)).add(1, 'day').format('YYYY-MM-DD')} 00:00:00` + eq.value = obj } - //数据加载状态 - const statusMore = useMemo(() => { - return dataLoadingStatus({ list: orderData.list, total: orderData.total, status: orderState.loading as any }) - }, [orderData, orderState]) + setSearchField(val => ({ ...val, start_time: eq?.value?.start, end_time: eq?.value?.end })) + setStart(eq?.value?.start) + setEnd(eq?.value?.end) + setShowTime(false) + pageNum.current.size = 10 + } - //上拉加载数据 - const getScrolltolower = useCallback(() => { - if (orderData.list.length < orderData.total) { - pageNum.current.page++ - const size = pageNum.current.size * pageNum.current.page - console.log(pageNum.current.page, 'pageNum.current.page') - console.log(size, 123123) - setSearchField({ ...searchField, size }) - } - }, [orderData]) - - //是否不允许确认筛选 - const isDisabled = useMemo(() => { - // if (searchField.stage !== '不限' || - // searchField.sale_mode !== '不限' || - // searchField.return_type !== '不限' || - // searchField.start_time !== '' || - // searchField.end_time !== '' - // ) { - // return false - // } else { - // return true - // } - return false - }, []) - - //新建收款 - const handAdd = () => { - Taro.navigateTo({ - url: '/pages/addCollection/index' - }) + const timeArea = useMemo(() => { + // const res = TimeList.filter(item => { + // return item.checked + // }) + // && res.length > 0 + if (end !== '') { + return `${start} ` + '-' + ` ${end}` } + else { + return '自定义起始时间' + } + }, [end]) - //筛选弹出 + useEffect(() => { + setSearchField(searchField) + }, [searchField]) - const [SelectPopup, setSelectPopup] = useState(false) - - //时间数组 - const [TimeList, setTimeList] = useState( - [ + return ( + <> + + + { setSelectPopup(true) }}> + + {/* */} + 筛选 + + + + + 时间默认14天内 + 金额汇总:{formatPriceDiv(orderData?.summary?.receipt_amount)} + + + + {orderData?.list?.map((item, index) => { + return ( + + + + ) + })} + + + + handAdd()}>新建收款 + + + { setSelectPopup(false) }}> + + { - id: 1, - name: '默认14天内', - start_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).subtract(14, 'day').format('YYYY-MM-DD')} 00:00:00`, - end_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).add(1, 'day').format('YYYY-MM-DD')} 00:00:00`, - checked: true - }, - { - id: 2, - name: '展示全部日期', - start_time: '', - end_time: '', - checked: false + TimeList.map((item, index) => { + return ( + handSelect(item)} className={classnames((item.checked && timeArea == '自定义起始时间') ? styles.activetimeOne : styles.timeOne)} key={index}>{item.name} + ) + }) } - ] - ) - - //选择时间item - const handSelect = (it) => { - - TimeList.map(item => { - if (item.id == it.id) { - item.checked = true - } else { - item.checked = false - } - return item - }) - setTimeList([...TimeList]) - pageNum.current.size = 10 - setSearchField({ ...searchField, start_time: it.start_time, end_time: it.end_time, size: 10 }) - setEnd('') - } - - //重置 - const handReset = () => { - TimeList.map(item => { - if (item.id == 1) { - item.checked = true - } else { - item.checked = false - } - return item - }) - setTimeList([...TimeList]) - pageNum.current.size = 10 - setSearchField({ - ...searchField, - start_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).subtract(14, 'day').format('YYYY-MM-DD')} 00:00:00`, - end_time: `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).add(1, 'day').format('YYYY-MM-DD')} 00:00:00`, - size: 10 - }) - setStart(myDate.toLocaleDateString()) - setEnd('') - } - - - - //弹窗确认选择 - const handSureSelect = () => { - pageNum.current.size = 10 - setSearchField({ ...searchField, size: 10 }) - getOrderList() - setSelectPopup(false) - } - - //展示时间筛选 - const [showTime, setShowTime] = useState(false) - //关闭时间筛选 - const handClose = () => { - setShowTime(false) - } - - const [start, setStart] = useState(myDate.toLocaleDateString()) - const [end, setEnd] = useState('') - //选择时间 - const handTime = (eq) => { - //直接进来点确定的时候做处理 - if (Object.keys(eq).length === 0) { - let obj = { - start: '', - end: '' - } - obj.start = `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).format('YYYY-MM-DD')} 00:00:00`, - obj.end = `${dayjs(new Date(obj?.start)).add(1, 'day').format('YYYY-MM-DD')} 00:00:00` - eq.value = obj - } - setSearchField((val) => ({ ...val, start_time: eq?.value?.start, end_time: eq?.value?.end })) - setStart(eq?.value?.start) - setEnd(eq?.value?.end) - setShowTime(false) - pageNum.current.size = 10 - } - - - const timeArea = useMemo(() => { - // const res = TimeList.filter(item => { - // return item.checked - // }) - // && res.length > 0 - if (end !== '') { - return start + ' ' + '-' + ' ' + end - } else { - return '自定义起始时间' - } - }, [end]) - - useEffect(() => { - setSearchField(searchField) - }, [searchField]) - - return ( - <> - - - { setSelectPopup(true) }}> - - {/* */} - 筛选 - - + + { setShowTime(true) }}>{timeArea} + + { + timeArea == '自定义起始时间' + && + } - - 时间默认14天内 - 金额汇总:{formatPriceDiv(orderData?.summary?.receipt_amount)} - - - - {orderData?.list?.map((item, index) => { - return ( - - - - ) - })} - - - - handAdd()}>新建收款 - - - { setSelectPopup(false) }}> - - - { - TimeList.map((item, index) => { - return ( - handSelect(item)} className={classnames((item.checked && timeArea == '自定义起始时间') ? styles.activetimeOne : styles.timeOne)} key={index}>{item.name} - ) - }) - } - - { setShowTime(true) }}>{timeArea} - - { - timeArea == '自定义起始时间' && - - } - - {/* { + {/* { timeArea == '自定义起始时间' && } */} - - - - - - - - - handTime(e)} - > - - ) + + + + + + + + + handTime(e)} + > + + ) } diff --git a/src/pages/order/components/PayPopup/index.tsx b/src/pages/order/components/PayPopup/index.tsx index 3a6ee44..6ea9010 100644 --- a/src/pages/order/components/PayPopup/index.tsx +++ b/src/pages/order/components/PayPopup/index.tsx @@ -1,193 +1,193 @@ -import { ScrollView, View, Image } from '@tarojs/components' -import { memo, useCallback, useEffect, useMemo, useState, useRef } from 'react' -import styles from './index.module.scss' -import classnames from 'classnames' -import BottomBtns from '@/components/BottomBtns' -import { formatPriceDiv, formatImgUrl } from '@/common/format' +import { Image, ScrollView, View } from '@tarojs/components' import Taro from '@tarojs/taro' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' +import BottomBtns from '@/components/BottomBtns' +import { formatImgUrl, formatPriceDiv } from '@/common/format' import Popup from '@/components/popup' import useCheckAuthorize from '@/use/useCheckAuthorize' import { alert } from '@/common/common' import IconFont from '@/components/iconfont/iconfont' + interface Props { - showPopup: true | false, - popupClose?: () => void, - obj: { - wait_pay_amount?: number | string, - actual_amount?: number | string, - total_sale_price?: number | string, - should_collect_order_id?: number | string, - pre_collect_order_id?: number | string, - status?: number | string, - }, - showSide?: boolean, - list?: any[], - clickItem?: (any) => void, - handsurePay?: (any) => void, - title: string, - picUrl?: string + showPopup: true | false + popupClose?: () => void + obj: { + wait_pay_amount?: number | string + actual_amount?: number | string + total_sale_price?: number | string + should_collect_order_id?: number | string + pre_collect_order_id?: number | string + status?: number | string + } + showSide?: boolean + list?: any[] + clickItem?: (any) => void + handsurePay?: (any) => void + title: string + picUrl?: string } export default memo((props: Props) => { - const { - showSide = true, - showPopup = false, - popupClose, - obj = { - wait_pay_amount: '', - actual_amount: '', - total_sale_price: '' - }, - clickItem, - handsurePay, - list = [], - title = '待支付款项', - picUrl = '' - } = props + const { + showSide = true, + showPopup = false, + popupClose, + obj = { + wait_pay_amount: '', + actual_amount: '', + total_sale_price: '', + }, + clickItem, + handsurePay, + list = [], + title = '待支付款项', + picUrl = '', + } = props - const fileData = useRef({ - filePath: '', - base64: '', + const fileData = useRef({ + filePath: '', + base64: '', + }) + + // 预览图片 + const showImage = () => { + const time = new Date().valueOf() + const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(picUrl) || [] + const filePath = `${Taro.env.USER_DATA_PATH}/img${time}.${format}` + fileData.current.filePath = filePath + fileData.current.base64 = bodyData + const save = Taro.getFileSystemManager() + save.writeFile({ + filePath: fileData.current.filePath, + data: fileData.current.base64, + encoding: 'base64', }) + Taro.previewImage({ + current: fileData.current.filePath, // 当前显示 + urls: [fileData.current.filePath], // 需要预览的图片http链接列表 + }) + } - //预览图片 - const showImage = () => { - const time = new Date().valueOf() - const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(picUrl) || [] - let filePath = Taro.env.USER_DATA_PATH + '/img' + time + '.' + format - fileData.current.filePath = filePath - fileData.current.base64 = bodyData - const save = Taro.getFileSystemManager() - save.writeFile({ - filePath: fileData.current.filePath, - data: fileData.current.base64, - encoding: 'base64', - }) - Taro.previewImage({ - current: fileData.current.filePath, // 当前显示 - urls: [fileData.current.filePath], // 需要预览的图片http链接列表 - }) - } + // 检查是否开启保存图片权限 + const { check } = useCheckAuthorize({ scope: 'scope.writePhotosAlbum', msg: '您没授权,无法保存图片' }) + const saveImageCheck = async() => { + const res = await check() + res && saveImage() + } + // 保存图片 + const saveImage = () => { + const time = new Date().valueOf() + const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(picUrl) || [] + const filePath = `${Taro.env.USER_DATA_PATH}/img${time}.${format}` + fileData.current.filePath = filePath + fileData.current.base64 = bodyData + const save = Taro.getFileSystemManager() + save.writeFile({ + filePath: fileData.current.filePath, + data: fileData.current.base64, + encoding: 'base64', + }) + alert.loading('正在保存图片') + Taro.saveImageToPhotosAlbum({ + filePath: fileData.current.filePath, + success() { + alert.success('图片保存成功') + }, + fail(err) { + console.log('err::', err) + }, + }) + } - //检查是否开启保存图片权限 - const { check } = useCheckAuthorize({ scope: 'scope.writePhotosAlbum', msg: '您没授权,无法保存图片' }) - const saveImageCheck = async () => { - const res = await check() - res && saveImage() - } - - //保存图片 - const saveImage = () => { - const time = new Date().valueOf() - const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(picUrl) || [] - let filePath = Taro.env.USER_DATA_PATH + '/img' + time + '.' + format - fileData.current.filePath = filePath - fileData.current.base64 = bodyData - const save = Taro.getFileSystemManager() - save.writeFile({ - filePath: fileData.current.filePath, - data: fileData.current.base64, - encoding: 'base64', - }) - alert.loading('正在保存图片') - Taro.saveImageToPhotosAlbum({ - filePath: fileData.current.filePath, - success: function () { - alert.success('图片保存成功') - }, - fail: function (err) { - console.log('err::', err) - }, - }) - } - - return ( - - popupClose?.()}> - - { - showSide && - - + return ( + + popupClose?.()}> + + { + showSide + && + ¥{formatPriceDiv(obj.wait_pay_amount)} - - - + + + 订单金额 - - + + ¥{formatPriceDiv(obj.wait_pay_amount)} - - - + + + 已付金额 - - - ¥{formatPriceDiv(obj.actual_amount)} - - - { - list.map((item, index) => { - return ( - clickItem?.(item)}> - - - - {/* */} + + ¥{formatPriceDiv(obj.actual_amount)} + + + + { + list.map((item, index) => { + return ( + clickItem?.(item)}> + + + + {/* */} + + + {item.name} + { + item.fonts && {item.fonts}{ + item.money !== '' ? '¥' : '' + }{item.money} + } + + + { + item.name !== '扫码支付' && item.name !== '线下汇款' + && + {/* */} + - - {item.name} - { - item.fonts && {item.fonts}{ - item.money !== "" ? "¥" : "" - }{item.money} - } - - - { - item.name !== '扫码支付' && item.name !== '线下汇款' && - - {/* */} - - - } - { - (item.name === '扫码支付' || item.name === '线下汇款') && - + } + { + (item.name === '扫码支付' || item.name === '线下汇款') + && // - } - - ) - }) - } + } + + ) + }) + } - } - { - showSide && handsurePay?.(props?.obj)}>确认交易 - } - { - !showSide && - - - showImage()}> - + } + { + showSide && handsurePay?.(props?.obj)}>确认交易 + } + { + !showSide + && + + showImage()}> + - } - { - !showSide && saveImageCheck()}>保存图片 - } - - - - - ) -}) \ No newline at end of file + } + { + !showSide && saveImageCheck()}>保存图片 + } + + + + + ) +}) diff --git a/src/pages/order/components/itemList/index.tsx b/src/pages/order/components/itemList/index.tsx index 42fb86b..51a9ccc 100644 --- a/src/pages/order/components/itemList/index.tsx +++ b/src/pages/order/components/itemList/index.tsx @@ -1,107 +1,108 @@ import { ScrollView, View } from '@tarojs/components' +import Taro from '@tarojs/taro' import { memo, useCallback, useEffect, useMemo, useState } from 'react' -import styles from './index.module.scss' import classnames from 'classnames' +import styles from './index.module.scss' import BottomBtns from '@/components/BottomBtns' import { formatPriceDiv } from '@/common/format' -import Taro from '@tarojs/taro' -import LabAndImg from "@/components/LabAndImg" +import LabAndImg from '@/components/LabAndImg' interface propsObj { - obj: any, - cancle?: (arg: any, obj: any) => void, - nextBuy?: (arg: any, obj: any) => void, - toPay?: (arg: any, obj: any) => void + obj: any + cancle?: (arg: any, obj: any) => void + nextBuy?: (arg: any, obj: any) => void + toPay?: (arg: any, obj: any) => void } - export default memo((props: propsObj) => { - const navTo = (e) => { - Taro.navigateTo({ - url: '/pages/orderDetails/index?id=' + props?.obj?.id - }) + const navTo = (e) => { + Taro.navigateTo({ + url: `/pages/orderDetails/index?id=${props?.obj?.id}`, + }) + } + + const totalMoney = useMemo(() => { + if (props?.obj.status == 0 || props?.obj.status == 1 || props?.obj.status == 2) { + return props?.obj?.estimate_amount } + else { + return props?.obj?.bill_total_sale_price + } + }, [props?.obj]) - const totalMoney = useMemo(() => { - if (props?.obj.status == 0 || props?.obj.status == 1 || props?.obj.status == 2) { - return props?.obj?.estimate_amount - } else { - return props?.obj?.bill_total_sale_price - } - }, [props?.obj]) + // 待接单、配布中、已配布状态时,叫预估金额,其他状态叫合计金额。 + const monyFont = useMemo(() => { + if (props?.obj?.status === 0 || props?.obj?.status === 1) { + return '预估金额' + } + else { + return '合计金额' + } + }, [props?.obj]) - //待接单、配布中、已配布状态时,叫预估金额,其他状态叫合计金额。 - const monyFont = useMemo(() => { - if (props?.obj?.status === 0 || props?.obj?.status === 1) { - return "预估金额" - } else { - return "合计金额" - } - }, [props?.obj]) + const labAndImgObj = useCallback((item) => { + return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url } + }, []) - const labAndImgObj = useCallback((item) => { - return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url } - }, []) + return ( + navTo(e)}> + + 单号:{props?.obj?.order_no} + {props?.obj?.status_name} + + {props?.obj?.purchaser_name} + + + + + + 颜色 ({props?.obj?.total_colors}) + + - return ( - navTo(e)}> - - 单号:{props?.obj?.order_no} - {props?.obj?.status_name} + + + + {props?.obj?.product_list[0]?.code} {props?.obj?.product_list[0]?.name} + {props?.obj?.sale_mode === 0 ? '大货' : props?.obj?.sale_mode === 1 ? '剪版' : '散剪'} - {props?.obj?.purchaser_name} - - - - - - 颜色 ({props?.obj?.total_colors}) - - - - - - - {props?.obj?.product_list[0]?.code} {props?.obj?.product_list[0]?.name} - {props?.obj?.sale_mode === 0 ? '大货' : props?.obj?.sale_mode === 1 ? '剪版' : '散剪'} - - {props?.obj?.shipment_mode_name} - - - {props?.obj?.product_list[0]?.product_colors[0]?.code} {props?.obj?.product_list[0]?.product_colors[0]?.name} - x{props?.obj?.sale_mode === 0 ? props?.obj?.product_list[0]?.product_colors[0]?.roll : props?.obj?.product_list[0]?.product_colors[0]?.length / 100} {props?.obj?.sale_mode === 0 ? '条' : 'm'} - ¥ {props?.obj?.product_list[0]?.product_colors[0]?.sale_price / 100}/{props?.obj?.sale_mode == 1 ? 'm' : 'kg'} - - { - props?.obj?.product_list[0]?.product_colors?.length > 1 && <> - - {props?.obj?.product_list[0]?.product_colors[1]?.code} {props?.obj?.product_list[0]?.product_colors[1]?.name} - x{props?.obj?.sale_mode === 0 ? props?.obj?.product_list[0]?.product_colors[1]?.roll : props?.obj?.product_list[0]?.product_colors[1]?.length / 100} {props?.obj?.sale_mode === 0 ? '条' : 'm'} - ¥ {props?.obj?.product_list[0]?.product_colors[1]?.sale_price / 100}/{props?.obj?.sale_mode == 1 ? 'm' : 'kg'} - - - } - - - - - 布料信息: - {props?.obj?.total_fabrics} 种面料,{props?.obj?.total_colors} 种颜色,共 {props?.obj?.sale_mode === 0 ? props?.obj?.total_number : props?.obj?.total_number / 100} {props?.obj?.sale_mode === 0 ? '条' : 'm'} - - { - props?.obj.status != 5 && - {monyFont} - ¥{formatPriceDiv(totalMoney)} - - } - - props?.cancle?.(e, props?.obj)} - nextBuy={(e) => props?.nextBuy?.(e, props?.obj)} - toPay={(e) => props?.toPay?.(e, props?.obj)} - > - - - ) -}) \ No newline at end of file + {props?.obj?.shipment_mode_name} + + + {props?.obj?.product_list[0]?.product_colors[0]?.code} {props?.obj?.product_list[0]?.product_colors[0]?.name} + x{props?.obj?.sale_mode === 0 ? props?.obj?.product_list[0]?.product_colors[0]?.roll : props?.obj?.product_list[0]?.product_colors[0]?.length / 100} {props?.obj?.sale_mode === 0 ? '条' : 'm'} + ¥ {props?.obj?.product_list[0]?.product_colors[0]?.sale_price / 100}/{props?.obj?.sale_mode == 1 ? 'm' : 'kg'} + + { + props?.obj?.product_list[0]?.product_colors?.length > 1 && <> + + {props?.obj?.product_list[0]?.product_colors[1]?.code} {props?.obj?.product_list[0]?.product_colors[1]?.name} + x{props?.obj?.sale_mode === 0 ? props?.obj?.product_list[0]?.product_colors[1]?.roll : props?.obj?.product_list[0]?.product_colors[1]?.length / 100} {props?.obj?.sale_mode === 0 ? '条' : 'm'} + ¥ {props?.obj?.product_list[0]?.product_colors[1]?.sale_price / 100}/{props?.obj?.sale_mode == 1 ? 'm' : 'kg'} + + + } + + + + + 布料信息: + {props?.obj?.total_fabrics} 种面料,{props?.obj?.total_colors} 种颜色,共 {props?.obj?.sale_mode === 0 ? props?.obj?.total_number : props?.obj?.total_number / 100} {props?.obj?.sale_mode === 0 ? '条' : 'm'} + + { + props?.obj.status != 5 && + {monyFont} + ¥{formatPriceDiv(totalMoney)} + + } + + props?.cancle?.(e, props?.obj)} + nextBuy={e => props?.nextBuy?.(e, props?.obj)} + toPay={e => props?.toPay?.(e, props?.obj)} + > + + + ) +}) diff --git a/src/pages/order/components/offlinePay/index.tsx b/src/pages/order/components/offlinePay/index.tsx index 91c2333..bfeb881 100644 --- a/src/pages/order/components/offlinePay/index.tsx +++ b/src/pages/order/components/offlinePay/index.tsx @@ -1,100 +1,101 @@ -import { Text, View } from "@tarojs/components"; -import { memo } from "react"; -import AmountShow from "../amountShow"; -import classnames from "classnames"; +import { Text, View } from '@tarojs/components' +import Taro from '@tarojs/taro' +import { memo } from 'react' +import classnames from 'classnames' +import AmountShow from '../amountShow' import styles from './index.module.scss' +import MCheckbox from '@/components/checkbox' +import Popup from '@/components/popup' +import SearchInput from '@/components/searchInput' -import MCheckbox from "@/components/checkbox"; -import Popup from "@/components/popup"; -import SearchInput from "@/components/searchInput"; -import Taro from "@tarojs/taro"; - -type Param = { - show?: true | false, - onClose?: () => void, - offlineInfo?: { - account_name: string, - bank_of_deposit: string, - transfer_remittance_account: string - }, - showKong?: true | false, +interface Param { + show?: true | false + onClose?: () => void + offlineInfo?: { + account_name: string + bank_of_deposit: string + transfer_remittance_account: string + } + showKong?: true | false } export default memo(({ show = true, onClose, offlineInfo, showKong = true }: Param) => { - //复制功能 - const clipboardData = () => { - Taro.setClipboardData({ - data: `开户名称:${offlineInfo?.account_name};\n\r 开户银行:${offlineInfo?.bank_of_deposit};\n\r 转账汇款账号:${offlineInfo?.transfer_remittance_account};`, - success: function (res) { - Taro.showToast({ - icon: 'none', - title: '复制成功' - }) - } + // 复制功能 + const clipboardData = () => { + Taro.setClipboardData({ + data: `开户名称:${offlineInfo?.account_name};\n\r 开户银行:${offlineInfo?.bank_of_deposit};\n\r 转账汇款账号:${offlineInfo?.transfer_remittance_account};`, + success(res) { + Taro.showToast({ + icon: 'none', + title: '复制成功', }) + }, + }) + } + // //复制功能 + const copy = (index) => { + let res: any = '' + if (index === 1) { + res = offlineInfo?.account_name } - // //复制功能 - const copy = (index) => { - let res: any = '' - if (index === 1) { - res = offlineInfo?.account_name - } else if (index === 2) { - res = offlineInfo?.bank_of_deposit - } else if (index === 3) { - res = offlineInfo?.transfer_remittance_account - } - Taro.setClipboardData({ - data: res || '', - success: function (res) { - Taro.showToast({ - icon: 'none', - title: '复制成功', - }) - }, + else if (index === 2) { + res = offlineInfo?.bank_of_deposit + } + else if (index === 3) { + res = offlineInfo?.transfer_remittance_account + } + Taro.setClipboardData({ + data: res || '', + success(res) { + Taro.showToast({ + icon: 'none', + title: '复制成功', }) - } - return ( - - - - - 线下汇款 - - - 开户名称 - - {offlineInfo?.account_name} - { copy(1) }}>复制 - - - - 开户银行 - - {offlineInfo?.bank_of_deposit} - { copy(2) }}>复制 - - - - 转账汇款账号 - - {offlineInfo?.transfer_remittance_account} - { copy(3) }}>复制 - - - {/* + }, + }) + } + return ( + + + + + 线下汇款 + + + 开户名称 + + {offlineInfo?.account_name} + { copy(1) }}>复制 + + + + 开户银行 + + {offlineInfo?.bank_of_deposit} + { copy(2) }}>复制 + + + + 转账汇款账号 + + {offlineInfo?.transfer_remittance_account} + { copy(3) }}>复制 + + + {/* {offlineInfo?.bank_of_deposit} {offlineInfo?.transfer_remittance_account} */} - - 复制信息 - - { - showKong && - } - - + + 复制信息 + { + showKong && + } - ) -}) \ No newline at end of file + + + + ) +}) diff --git a/src/pages/order/components/orderStatusList/index.tsx b/src/pages/order/components/orderStatusList/index.tsx index e1c7bb5..ed46c5e 100644 --- a/src/pages/order/components/orderStatusList/index.tsx +++ b/src/pages/order/components/orderStatusList/index.tsx @@ -1,17 +1,17 @@ import { ScrollView, View } from '@tarojs/components' import { memo, useEffect, useState } from 'react' -import styles from './index.module.scss' import classnames from 'classnames' +import styles from './index.module.scss' -type Param = { +interface Param { list: { id: number; name: string }[] defaultId?: number | null onSelect?: (val: number) => void } export default memo(({ list = [], defaultId = null, onSelect }: Param) => { const [selectInfo, setSelectInfo] = useState({ - selected: -1, //当前选中的id - tabId: '', //需要滚动到的id + selected: -1, // 当前选中的id + tabId: '', // 需要滚动到的id }) useEffect(() => { if (typeof defaultId === 'number' && defaultId >= 0) { @@ -21,20 +21,20 @@ export default memo(({ list = [], defaultId = null, onSelect }: Param) => { }) if (index !== -1) { const num = index > 0 ? index - 1 : 0 - setSelectInfo((e) => ({ ...e, tabId: list[num].id.toString() })) + setSelectInfo(e => ({ ...e, tabId: list[num].id.toString() })) } } - setSelectInfo((e) => ({ ...e, selected: defaultId || -1 })) + setSelectInfo(e => ({ ...e, selected: defaultId || -1 })) }, [defaultId]) const clickEvent = ({ item, index }: { item: any; index: number }) => { const num = index > 0 ? index - 1 : 0 - setSelectInfo((e) => ({ ...e, tabId: list[num].id.toString(), selected: item.id })) + setSelectInfo(e => ({ ...e, tabId: list[num].id.toString(), selected: item.id })) onSelect?.(item.id) } return ( - + {list.map((item, index) => { return ( @@ -42,7 +42,8 @@ export default memo(({ list = [], defaultId = null, onSelect }: Param) => { key={item.id} id={`tabs_${item.id}`} onClick={() => clickEvent({ item, index })} - className={classnames(styles.order_status_item, selectInfo.selected == item.id && styles.selected)}> + className={classnames(styles.order_status_item, selectInfo.selected == item.id && styles.selected)} + > {item.name} ) diff --git a/src/pages/order/index.config.ts b/src/pages/order/index.config.ts index 2e9c6fa..2b71e0f 100644 --- a/src/pages/order/index.config.ts +++ b/src/pages/order/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '订单', + navigationBarTitleText: '订单', } diff --git a/src/pages/order/index.tsx b/src/pages/order/index.tsx index 98241a7..ef7f26b 100644 --- a/src/pages/order/index.tsx +++ b/src/pages/order/index.tsx @@ -1,41 +1,42 @@ -import { View, Input, Button } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, } from 'react' -import { mpenumsaleorderstatus, OrderListApi } from '@/api/order' -import OrderStatusList from './components/orderStatusList' -import Search from '@/components/search' -import { dataLoadingStatus, getFilterData } from '@/common/util' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Popup from '@/components/popup' -import InfiniteScroll from '@/components/infiniteScroll' +import { Button, Input, View } from '@tarojs/components' import Taro, { faceVerifyForPay, useDidShow } from '@tarojs/taro' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import OrderStatusList from './components/orderStatusList' +import styles from './index.module.scss' import ItemList from './components/itemList' import OfflinePay from './components/offlinePay' +import PayPopup from './components/PayPopup' import { + GetPayCode, OrderListApi, + mpenumsaleorderstatus, mpsaleOrdercancel, mpshoppingCartproductColorlist, orderPaymentorderPaymentMethodInfo, - orderPaymentpreCollectOrderorderPaymentMethodInfo, orderPaymentorderPaymentSubmission, + orderPaymentpreCollectOrderorderPaymentMethodInfo, orderPaymentpreCollectOrderorderPaymentSubmission, - GetPayCode } from '@/api/order' -import PayPopup from './components/PayPopup' +import Search from '@/components/search' +import { dataLoadingStatus, getFilterData } from '@/common/util' +import Popup from '@/components/popup' +import InfiniteScroll from '@/components/infiniteScroll' import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' -interface filterObj { - purchaser_id?: string | number, - clientName?: string, - sale_user_id?: string | number, - saleuserName?: string, - order_no?: string | undefined, - sale_mode?: Number | undefined, - shipment_mode?: Number | undefined -} import { PAY_H5_CODE_URL } from '@/common/constant' +interface filterObj { + purchaser_id?: string | number + clientName?: string + sale_user_id?: string | number + saleuserName?: string + order_no?: string | undefined + sale_mode?: Number | undefined + shipment_mode?: Number | undefined +} + export default () => { - //页码和页数 + // 页码和页数 const [searchField, setSearchField] = useState<{ status: number | unknown; page: number; size: number; order_no: string }>({ status: -1, page: 1, @@ -43,36 +44,33 @@ export default () => { order_no: '', }) - //获取订单列表 + // 获取订单列表 const { fetchData: listFetchData, state: orderState } = OrderListApi() const [orderData, setOrderData] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) - const getOrderList = async () => { - let res = await listFetchData({ + const getOrderList = async() => { + const res = await listFetchData({ ...getFilterData(searchField), - ...getFilterData(searchObj) + ...getFilterData(searchObj), }) - setOrderData((e) => ({ ...e, list: res.data?.list, total: res.data?.total })) + setOrderData(e => ({ ...e, list: res.data?.list, total: res.data?.total })) setshowPopup(false) setRefresherTriggeredStatus(() => false) } - - - - //列表下拉刷新 + // 列表下拉刷新 const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) - const getRefresherRefresh = async () => { + const getRefresherRefresh = async() => { pageNum.current.size = 1 setRefresherTriggeredStatus(true) - setSearchField((val) => ({ ...val, size: 10 })) + setSearchField(val => ({ ...val, size: 10 })) } - //数据加载状态 + // 数据加载状态 const statusMore = useMemo(() => { console.log({ list: orderData.list, total: orderData.total, status: orderState.loading }, '{ list: orderData.list, total: orderData.total, status: orderState.loading }') return dataLoadingStatus({ list: orderData.list, total: orderData.total, status: orderState.loading }) }, [orderData, orderState]) - //上拉加载数据 + // 上拉加载数据 const pageNum = useRef({ size: searchField.size, page: searchField.page }) const getScrolltolower = useCallback(() => { if (orderData.list.length < orderData.total) { @@ -85,48 +83,46 @@ export default () => { // //获取订单状态 const { fetchData: orderStatusListFetchData } = mpenumsaleorderstatus() const [statusList, setStatusList] = useState([{ id: -1, name: '全部' }]) - const getOrderStatusList = async () => { - let res = await orderStatusListFetchData() - setStatusList((e) => [...e, ...res.data.list]) + const getOrderStatusList = async() => { + const res = await orderStatusListFetchData() + setStatusList(e => [...e, ...res.data.list]) } - //监听筛选条件变化 + // 监听筛选条件变化 useEffect(() => { - if (searchField.status != null) getOrderList() + if (searchField.status != null) { getOrderList() } }, [searchField]) // //状态改变 const changeStatus = useCallback((e) => { pageNum.current.page = 1 - setSearchField((value) => ({ ...value, status: e, size: 10 })) + setSearchField(value => ({ ...value, status: e, size: 10 })) setOrderData(() => ({ list: [], total: 0 })) }, []) - //输入了搜索关键字 + // 输入了搜索关键字 const getSearchData = useCallback((e) => { pageNum.current.page = 1 setOrderData(() => ({ list: [], total: 0 })) - setSearchField((val) => ({ ...val, order_no: e, size: 10 })) + setSearchField(val => ({ ...val, order_no: e, size: 10 })) }, []) - //筛选内容展示 + // 筛选内容展示 const [showPopup, setshowPopup] = useState(false) const showSelctPopup = () => { setshowPopup(true) } - //关闭筛选内容展示 + // 关闭筛选内容展示 const closePopup = () => { setshowPopup(false) } - useDidShow(() => { - - //获取选择的客户 - let pages = Taro.getCurrentPages(); - let currPage = pages[pages.length - 1]; // 获取当前页面 + // 获取选择的客户 + const pages = Taro.getCurrentPages() + const currPage = pages[pages.length - 1] // 获取当前页面 console.log(currPage.data, '8888') - setsearchObj((e) => ({ + setsearchObj(e => ({ ...e, purchaser_id: currPage.data?.clientId ? currPage.data?.clientId : '', clientName: currPage.data?.clientName ? currPage.data?.clientName : '', @@ -135,76 +131,77 @@ export default () => { })) }) - - - //筛选参数 + // 筛选参数 const [searchObj, setsearchObj] = useState({ purchaser_id: '', clientName: '', sale_user_id: '', saleuserName: '', sale_mode: undefined, - shipment_mode: undefined + shipment_mode: undefined, }) // 跳转选择客户 const navTo = (index) => { if (index === 1) { Taro.navigateTo({ - url: '/pages/customerPage/index?clientId=' + searchObj?.purchaser_id + url: `/pages/customerPage/index?clientId=${searchObj?.purchaser_id}`, }) - } else { + } + else { Taro.navigateTo({ - url: '/pages/saleuserPage/index?saleuserId=' + searchObj?.sale_user_id + url: `/pages/saleuserPage/index?saleuserId=${searchObj?.sale_user_id}`, }) } } - - //订单类型 + // 订单类型 const [modeList, setModeList] = useState([{ id: -1, name: '不限' }, { id: 0, name: '大货' }, { id: 1, name: '剪版' }, { id: 2, name: '散剪' }]) - //选择订单类型 + // 选择订单类型 const handCheckMode = (item) => { - modeList.map(it => { + modeList.map((it) => { if (it.id === item.id) { it.checked = true - } else { + } + else { it.checked = false } return it }) setModeList([...modeList]) - setsearchObj((e) => ({ ...e, sale_mode: item.id })) + setsearchObj(e => ({ ...e, sale_mode: item.id })) } - ///发货方式类型 + /// 发货方式类型 const [deliveryList, setdeliveryList] = useState([{ id: -1, name: '不限' }, { id: 1, name: '自提' }, { id: 2, name: '物流' }]) - //选择发货方式类型 + // 选择发货方式类型 const handCheckDelivery = (item) => { - deliveryList.map(it => { + deliveryList.map((it) => { if (it.id === item.id) { it.checked = true - } else { + } + else { it.checked = false } return it }) setdeliveryList([...deliveryList]) - setsearchObj((e) => ({ ...e, shipment_mode: item.id })) + setsearchObj(e => ({ ...e, shipment_mode: item.id })) } - //是否不允许确认筛选 + // 是否不允许确认筛选 const isDisabled = useMemo(() => { - if (searchObj.clientName !== '' || - searchObj.saleuserName !== '' || - searchObj.sale_mode !== undefined || - searchObj.shipment_mode !== undefined + if (searchObj.clientName !== '' + || searchObj.saleuserName !== '' + || searchObj.sale_mode !== undefined + || searchObj.shipment_mode !== undefined ) { return false - } else { + } + else { return true } }, [searchObj]) - //重置 + // 重置 const handReset = () => { pageNum.current.page = 1 setsearchObj({ @@ -222,29 +219,28 @@ export default () => { setdeliveryList([...arrTwo]) } - - //数组重置 + // 数组重置 const resetArr = (arr) => { - arr.map(it => { + arr.map((it) => { it.checked = false return it }) return arr } - //确认筛选 - const handSure = async () => { + // 确认筛选 + const handSure = async() => { getOrderList() } - //扫描 + // 扫描 const handScan = () => { Taro.scanCode({ success(res) { - setSearchField((val) => ({ ...val, order_no: res.result })) + setSearchField(val => ({ ...val, order_no: res.result })) }, fail(res) { - console.log(res); + console.log(res) }, - }); + }) } useEffect(() => { @@ -252,192 +248,195 @@ export default () => { }, []) const { fetchData: cancelFetch } = mpsaleOrdercancel() - //取消订单 - const cancle = async (e, item) => { - e.stopPropagation(); + // 取消订单 + const cancle = async(e, item) => { + e.stopPropagation() Taro.showModal({ - content: "确定要取消吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { + content: '确定要取消吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { if (res.confirm) { Taro.showLoading({ title: '请稍等...', - mask: true + mask: true, }) const res = await cancelFetch({ id: item.id }) if (res.msg === 'success') { Taro.showToast({ - title: '取消成功' + title: '取消成功', }) Taro.hideLoading() getOrderList() - } else { + } + else { Taro.showToast({ title: res.msg, - icon: 'error' + icon: 'error', }) } } - } + }, }) } - //再次购买 + // 再次购买 const { fetchData: buyFetch } = mpshoppingCartproductColorlist() - const nextBuy = async (e, item) => { - e.stopPropagation(); + const nextBuy = async(e, item) => { + e.stopPropagation() Taro.showLoading({ title: '请稍等...', - mask: true + mask: true, }) - let arr: any = [] - item.product_list.forEach(item => { - item.product_colors.forEach(it => { + const arr: any = [] + item.product_list.forEach((item) => { + item.product_colors.forEach((it) => { arr.push({ length: it.length, roll: it.roll, - product_color_id: it.id + product_color_id: it.id, }) }) }) - let query = { + const query = { purchaser_id: item.purchaser_id, sale_mode: item.sale_mode, - color_list: arr + color_list: arr, } const res = await buyFetch(query) if (res.msg === 'success') { Taro.showToast({ - title: '加入购物车成功!' + title: '加入购物车成功!', }) Taro.hideLoading() getOrderList() - } else { + } + else { Taro.showToast({ title: res.msg, - icon: 'error' + icon: 'error', }) } } - //去支付逻辑 + // 去支付逻辑 const { fetchData: infoOneFetch } = orderPaymentorderPaymentMethodInfo() const { fetchData: infoTwoFetch } = orderPaymentpreCollectOrderorderPaymentMethodInfo() const [itemObj, setItemObj] = useState({}) const [payList, setPayList] = useState([ { id: 2, - iconfont: "icon-yufukuan1", - name: "预存款", - fonts: "可用额度 ", - money: "", + iconfont: 'icon-yufukuan1', + name: '预存款', + fonts: '可用额度 ', + money: '', isCheck: false, }, { id: 5, - iconfont: "icon-xianxiahuizong", - name: "货到付款", - fonts: "发货后3天内付款", + iconfont: 'icon-xianxiahuizong', + name: '货到付款', + fonts: '发货后3天内付款', isCheck: false, - money: "", - color: '#ffffff' + money: '', + color: '#ffffff', }, { id: 3, - iconfont: "icon-xianxiahuizong", - name: "x天账期", - fonts: "可用额度 ", - money: "", + iconfont: 'icon-xianxiahuizong', + name: 'x天账期', + fonts: '可用额度 ', + money: '', isCheck: false, - color: '#ffffff' + color: '#ffffff', }, { - iconfont: "icon-yue", - name: "线下汇款", + iconfont: 'icon-yue', + name: '线下汇款', }, { - iconfont: "icon-saomiao", - name: "扫码支付", - color: '#ffffff' + iconfont: 'icon-saomiao', + name: '扫码支付', + color: '#ffffff', }, ]) - const toPay = async (e, item) => { - e.stopPropagation(); + const toPay = async(e, item) => { + e.stopPropagation() setItemObj(item) if (item.status !== 10) { - let res = await infoOneFetch({ id: item.should_collect_order_id }) + const res = await infoOneFetch({ id: item.should_collect_order_id }) payList.map((item) => { if (item.id === 3) { - item.name = `${res.data.account_period}天账期`; + item.name = `${res.data.account_period}天账期` item.fonts = `可用额度${formatPriceDiv( - res.data.account_period_credit_available_line - ).toLocaleString()}`; + res.data.account_period_credit_available_line, + ).toLocaleString()}` } if (item.id === 2) { item.fonts = `可用额度${formatPriceDiv( - res.data.advance_deposit_balance - ).toLocaleString()}`; + res.data.advance_deposit_balance, + ).toLocaleString()}` } - return item; - }); + return item + }) setPayList([...payList]) if (item.is_shipper_picks_up) { const obj = payList.filter((item) => { - return item.id === 6; - }); - console.log(obj, "456456"); + return item.id === 6 + }) + console.log(obj, '456456') if (obj.length === 0) { payList.unshift({ id: 6, - iconfont: "icon-xianxiahuizong", + iconfont: 'icon-xianxiahuizong', color: '#ffffff', - name: "货主自提", - fonts: "", - money: "", + name: '货主自提', + fonts: '', + money: '', isCheck: false, - }); + }) setPayList([...payList]) } } - } else { - let res = await infoTwoFetch({ id: item.pre_collect_order_id }) - const arr: any = []; + } + else { + const res = await infoTwoFetch({ id: item.pre_collect_order_id }) + const arr: any = [] arr.push( { id: 2, - iconfont: "icon-yufukuan1", - name: "预存款", + iconfont: 'icon-yufukuan1', + name: '预存款', fonts: `可用额度${formatPriceDiv( - res.data.advance_deposit_balance + res.data.advance_deposit_balance, ).toLocaleString()}`, - money: "", + money: '', isCheck: false, }, { - iconfont: "icon-yue", - name: "线下汇款", + iconfont: 'icon-yue', + name: '线下汇款', }, { - iconfont: "icon-saomiao", - name: "扫码支付", - color: '#ffffff' + iconfont: 'icon-saomiao', + name: '扫码支付', + color: '#ffffff', }, - ); + ) if (item.is_shipper_picks_up) { const obj = arr.filter((item) => { - return item.id === 6; - }); + return item.id === 6 + }) if (obj.length === 0) { arr.unshift({ id: 6, - iconfont: "icon-xianxiahuizong", - name: "货主自提", + iconfont: 'icon-xianxiahuizong', + name: '货主自提', color: '#ffffff', - fonts: "", - money: "", + fonts: '', + money: '', isCheck: false, - }); + }) } } setPayList([...arr]) @@ -447,14 +446,15 @@ export default () => { setShowPay(true) } - //选择支付方式 + // 选择支付方式 const clickItem = (item) => { if (item.name === '扫码支付') { handScanpay() } if (item.name === '线下汇款') { setShowOffine(true) } - payList.map(it => { + payList.map((it) => { if (item.id === it.id) { it.checked = true - } else { + } + else { it.checked = false } return it @@ -462,14 +462,13 @@ export default () => { setPayList([...payList]) } - - //扫码支付 + // 扫码支付 const [showSide, setShowSide] = useState(true) const [title, setTitle] = useState('') const [picUrl, setPicUrl] = useState('') const { fetchData: payFetch } = GetPayCode() - const handScanpay = async () => { - const list: any = []; + const handScanpay = async() => { + const list: any = [] itemObj.product_list.forEach((item) => { item.product_colors.forEach((it) => { list.push({ @@ -486,12 +485,12 @@ export default () => { : (it.estimate_amount / 100).toString(), length: (it.length / 100).toString(), weight_error: formatWeightDiv(it.weight_error).toString(), - }); - }); - }); + }) + }) + }) const query = { - list: list, - title: "面料销售电子确认单", + list, + title: '面料销售电子确认单', show_qrcode: true, show_barcode: true, show_wait_pay_amount: true, @@ -529,7 +528,7 @@ export default () => { order_total_weight_error: ( itemObj.total_weight_error / 1000 ).toString(), - }; + } const res = await payFetch(query) if (res.data) { console.log(res.data.base64) @@ -539,67 +538,66 @@ export default () => { } } - - //确认交易 + // 确认交易 const { fetchData: payOneFetch } = orderPaymentorderPaymentSubmission() const { fetchData: payTwoFetch } = orderPaymentpreCollectOrderorderPaymentSubmission() const handsurePay = (obj) => { let arr: any = [] // if (obj.status !== 10) { - arr = payList.filter(item => { + arr = payList.filter((item) => { return item.checked }) if (!arr.length) { Taro.showToast({ title: '请选择后再提交', - icon: 'error' + icon: 'error', }) return false } Taro.showModal({ - content: "确定交易吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { + content: '确定交易吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { if (res.confirm) { Taro.showLoading({ title: '请稍等...', - mask: true + mask: true, }) const restult = await (obj.status !== 10 ? payOneFetch({ id: Number(obj.should_collect_order_id), payment_method: Number(arr[0]?.id) }) : payTwoFetch({ id: Number(obj.pre_collect_order_id), payment_method: Number(arr[0]?.id) })) if (restult?.msg === 'success') { Taro.showToast({ - title: '交易成功' + title: '交易成功', }) Taro.hideLoading() setShowPay(false) getOrderList() - } else { + } + else { Taro.showToast({ title: restult?.msg, - icon: 'error' + icon: 'error', }) } } - - } + }, }) // } } - //显示支付 + // 显示支付 const [showPay, setShowPay] = useState(false) - //显示线下汇款 + // 显示线下汇款 const [showOffline, setShowOffine] = useState(false) return ( - handScan()} defaultValue={searchField.order_no} showScan placeholder='搜索商品/名称/颜色/订单号' showBtn={false} changeOnSearch={getSearchData} debounceTime={300}> + handScan()} defaultValue={searchField.order_no} showScan placeholder="搜索商品/名称/颜色/订单号" showBtn={false} changeOnSearch={getSearchData} debounceTime={300}> showSelctPopup()}> - + {/* */} 筛选 @@ -612,9 +610,10 @@ export default () => { + selfOnRefresherRefresh={getRefresherRefresh} + > {orderData?.list?.map((item, index) => { return ( @@ -623,14 +622,15 @@ export default () => { key={index} cancle={(e, item) => cancle(e, item)} nextBuy={(e, item) => nextBuy(e, item)} - toPay={(e, item) => toPay(e, item)}> + toPay={(e, item) => toPay(e, item)} + > ) })} {/* */} - closePopup()}> + closePopup()}> navTo(1)}> @@ -658,7 +658,8 @@ export default () => { handCheckMode(item) }} className={classnames(item.checked ? styles.activemodeBox : styles.modeBox)} - key={index}> + key={index} + > {item.name} ) @@ -675,7 +676,8 @@ export default () => { handCheckDelivery(item) }} className={classnames(item.checked ? styles.activemodeBox : styles.modeBox)} - key={index}> + key={index} + > {item.name} ) @@ -690,7 +692,8 @@ export default () => { className={styles.resetBox} onClick={() => { handReset() - }}> + }} + > {' '} 重置 @@ -699,7 +702,8 @@ export default () => { disabled={isDisabled} onClick={() => { handSure?.() - }}> + }} + > {' '} 确认 @@ -712,11 +716,12 @@ export default () => { obj={itemObj} showPopup={showPay} popupClose={() => setShowPay(false)} - clickItem={(item) => clickItem(item)} - handsurePay={(obj) => handsurePay(obj)} + clickItem={item => clickItem(item)} + handsurePay={obj => handsurePay(obj)} showSide={showSide} title={title} - picUrl={picUrl}> + picUrl={picUrl} + > setShowOffine(false)} offlineInfo={itemObj}> ) diff --git a/src/pages/orderDetails/components/BottomApply/index.tsx b/src/pages/orderDetails/components/BottomApply/index.tsx index f7a7e41..3008a20 100644 --- a/src/pages/orderDetails/components/BottomApply/index.tsx +++ b/src/pages/orderDetails/components/BottomApply/index.tsx @@ -1,89 +1,89 @@ -import { View } from "@tarojs/components" -import { memo, useEffect, useState, useMemo } from "react" -import styles from "./index.module.scss" -import classnames from "classnames"; +import { View } from '@tarojs/components' +import { memo, useEffect, useMemo, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' + interface prosObj { - obj?: { - sale_mode?: Number, - collect_status?: Number | string, - status?: Number, - payment_method?: Number, - settle_mode?: Number | string, - } - handApplyGoods?: () => void, - handApplyMoney?: () => void, - goodsObj?: any - // handSureGoods?: () => void, + obj?: { + sale_mode?: Number + collect_status?: Number | string + status?: Number + payment_method?: Number + settle_mode?: Number | string + } + handApplyGoods?: () => void + handApplyMoney?: () => void + goodsObj?: any + // handSureGoods?: () => void, } export default memo((props: prosObj) => { - const { - obj = { - sale_mode: 0, - collect_status: '', - status: '', - payment_method: 0, - settle_mode: '' - }, - handApplyGoods, - handApplyMoney, - goodsObj = {} - // handSureGoods - } = props + const { + obj = { + sale_mode: 0, + collect_status: '', + status: '', + payment_method: 0, + settle_mode: '', + }, + handApplyGoods, + handApplyMoney, + goodsObj = {}, + // handSureGoods + } = props - //判断显示申请退货 - const showTuihuo = useMemo(() => { - if ( - (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 0 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 9 && obj.settle_mode == 3 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 2 && obj.status == 9 && goodsObj?.av_return_product?.length) - ) { - return true - } else return false - }, [obj]) - //判断显示申请退款 - const showTuikuan = useMemo(() => { - if ( - (obj.sale_mode === 0 && obj.status == 2 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 7 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 7 && obj.collect_status == 3 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 11 && (obj.collect_status == 1 || obj.collect_status == 2) && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 0 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 1 && obj.status == 0 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 1 && obj.status == 9 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 2 && obj.status == 0 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) || - (obj.sale_mode === 2 && obj.status == 0 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) - ) { - return true - } else return false - }, [obj]) + // 判断显示申请退货 + const showTuihuo = useMemo(() => { + if ( + (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 0 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 9 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 9 && obj.settle_mode == 3 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 2 && obj.status == 9 && goodsObj?.av_return_product?.length) + ) { + return true + } + else { return false } + }, [obj]) + // 判断显示申请退款 + const showTuikuan = useMemo(() => { + if ( + (obj.sale_mode === 0 && obj.status == 2 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 7 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 7 && obj.collect_status == 3 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 11 && (obj.collect_status == 1 || obj.collect_status == 2) && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 0 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 0 && obj.status == 3 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 1 && obj.status == 0 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 1 && obj.status == 9 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 2 && obj.status == 0 && obj.collect_status == 1 && goodsObj?.av_return_product?.length) + || (obj.sale_mode === 2 && obj.status == 0 && obj.collect_status == 2 && goodsObj?.av_return_product?.length) + ) { + return true + } + else { return false } + }, [obj]) + return ( + < > + { + showTuihuo && handApplyGoods?.()}>申请退货 + } - return ( - < > + { + showTuikuan && handApplyMoney?.()}>申请退款 - - { - showTuihuo && handApplyGoods?.()}>申请退货 - } - - { - showTuikuan && handApplyMoney?.()}>申请退款 - - } - {/* + } + {/* { showTake && handSureGoods?.()}>确认收货 } */} - { - !showTuihuo && !showTuikuan && 暂无更多 - } - - ) -}) \ No newline at end of file + { + !showTuihuo && !showTuikuan && 暂无更多 + } + + ) +}) diff --git a/src/pages/orderDetails/components/addressDetailBox/index.tsx b/src/pages/orderDetails/components/addressDetailBox/index.tsx index 8c837fa..3bbd1ce 100644 --- a/src/pages/orderDetails/components/addressDetailBox/index.tsx +++ b/src/pages/orderDetails/components/addressDetailBox/index.tsx @@ -1,66 +1,64 @@ -import { Image, Text, View } from "@tarojs/components"; -import { memo, useEffect, useMemo, useRef, useState } from "react"; -import classnames from "classnames"; +import { Image, Text, View } from '@tarojs/components' +import { memo, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' import styles from './index.module.scss' import IconFont from '@/components/iconfont/iconfont' import { alert } from '@/common/common' interface propsObj { - receivingStatus: Number | null, - onReceivingStatus?: (any, Number) => void, - obj?: any, - navSelect?: (any) => void + receivingStatus: Number | null + onReceivingStatus?: (any, Number) => void + obj?: any + navSelect?: (any) => void } export default memo((props: propsObj) => { + const { + receivingStatus = null, + onReceivingStatus, + obj = {}, + navSelect, + } = props - const { - receivingStatus = null, - onReceivingStatus, - obj = {}, - navSelect - } = props - - - return ( - - navSelect?.(obj)}> - - - - { - receivingStatus == 1 && {obj.take_goods_address || '中华人民共和国广东省佛山市禅城区陆盈纺织仓库'} - } - { - (obj?.province_name != '' && receivingStatus == 2) && - {obj?.province_name}{obj?.city_name}{obj?.district_name}{obj?.address_detail} - } - { - (obj?.province_name == '' && receivingStatus == 2) && - {''} - } - { - receivingStatus !== 1 && - - } - - - - {receivingStatus === 1 ? '谭先生' : obj.target_user_name} - {receivingStatus === 1 ? 13242128982 : obj.purchaser_phone} - - - - onReceivingStatus?.(e, 1)}> + return ( + + navSelect?.(obj)}> + + + + { + receivingStatus == 1 && {obj.take_goods_address || '中华人民共和国广东省佛山市禅城区陆盈纺织仓库'} + } + { + (obj?.province_name != '' && receivingStatus == 2) + && {obj?.province_name}{obj?.city_name}{obj?.district_name}{obj?.address_detail} + } + { + (obj?.province_name == '' && receivingStatus == 2) + && + } + { + receivingStatus !== 1 + && + } + + + + {receivingStatus === 1 ? '谭先生' : obj.target_user_name} + {receivingStatus === 1 ? 13242128982 : obj.purchaser_phone} + + + + onReceivingStatus?.(e, 1)}> 自提 - - onReceivingStatus?.(e, 2)}> + + onReceivingStatus?.(e, 2)}> 物流 - - - - - + - - ) -}) \ No newline at end of file + + + + + + ) +}) diff --git a/src/pages/orderDetails/components/advanceOrderState/index.tsx b/src/pages/orderDetails/components/advanceOrderState/index.tsx index a6a48db..7ef9d78 100644 --- a/src/pages/orderDetails/components/advanceOrderState/index.tsx +++ b/src/pages/orderDetails/components/advanceOrderState/index.tsx @@ -1,74 +1,71 @@ -import { formatImgUrl } from "@/common/format"; -import { Image, Text, View } from "@tarojs/components"; -import { memo, useEffect, useMemo, useRef, useState } from "react"; -import classnames from "classnames"; -import styles from './index.module.scss' -import dayjs from "dayjs"; -import { useTimeCountDown } from "@/use/useCommon"; -import { ORDER_STATUS, PAYMENT_METHOD } from "@/common/enum"; +import { Image, Text, View } from '@tarojs/components' +import { memo, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import dayjs from 'dayjs' +import styles from './index.module.scss' +import { formatImgUrl } from '@/common/format' +import { useTimeCountDown } from '@/use/useCommon' +import { ORDER_STATUS, PAYMENT_METHOD } from '@/common/enum' -type List = { - status: string, - time: string, - tag: string, - desc: string, - expire_time: string +interface List { + status: string + time: string + tag: string + desc: string + expire_time: string } -type Param = { - onRefresh?: () => void, - orderInfo?: { - logistics_details:List[], //订单状态列表 - payment_method: number, //支付方式 - status: number, //订单状态 +interface Param { + onRefresh?: () => void + orderInfo?: { + logistics_details: List[] // 订单状态列表 + payment_method: number // 支付方式 + status: number // 订单状态 + } +} + +export default memo(({ orderInfo, onRefresh }: Param) => { + const { showTime, onStart, timeStatus } = useTimeCountDown() + + // 订单状态枚举 + const { SaleorderstatusWaitingPrePayment } = ORDER_STATUS + + // 获取预付款最后时间 + const endTime = useMemo(() => { + if (orderInfo?.status == SaleorderstatusWaitingPrePayment.value && orderInfo.logistics_details.length > 0) { + return orderInfo.logistics_details[0].expire_time } -} + return '' + }, [orderInfo]) + useEffect(() => { + if (endTime) { onStart(endTime) } + }, [endTime]) -export default memo(({orderInfo, onRefresh}:Param) => { + useEffect(() => { + if (timeStatus == 2) { onRefresh?.() } + }, [timeStatus]) - const {showTime, onStart, timeStatus} = useTimeCountDown() - - //订单状态枚举 - const {SaleorderstatusWaitingPrePayment} = ORDER_STATUS - - //获取预付款最后时间 - const endTime = useMemo(() => { - if(orderInfo?.status == SaleorderstatusWaitingPrePayment.value && orderInfo.logistics_details.length > 0) { - return orderInfo.logistics_details[0].expire_time - } - return '' - }, [orderInfo]) - - useEffect(() => { - if(endTime) onStart(endTime) - }, [endTime]) - - useEffect(() => { - if(timeStatus == 2) onRefresh?.() - }, [timeStatus]) - - - return ( - - - - - {showTime.HH} - : - {showTime.MM} - : - {showTime.SS} - - 等待买家付款,超时自动取消 - - - - - onRefresh?.()}> - - 刷新 - + return ( + + + + + {showTime.HH} + : + {showTime.MM} + : + {showTime.SS} - ) -}) \ No newline at end of file + 等待买家付款,超时自动取消 + + + + + onRefresh?.()}> + + 刷新 + + + ) +}) diff --git a/src/pages/orderDetails/components/orderState/index.tsx b/src/pages/orderDetails/components/orderState/index.tsx index f1af48f..a4d187d 100644 --- a/src/pages/orderDetails/components/orderState/index.tsx +++ b/src/pages/orderDetails/components/orderState/index.tsx @@ -1,79 +1,79 @@ -import { Image, Text, View } from "@tarojs/components" -import { memo, useEffect, useMemo, useRef, useState } from "react" -import styles from './index.module.scss' -import classnames from "classnames"; -import { formatDateTime, formatImgUrl } from "@/common/format"; -import { ORDER_STATUS, PAYMENT_METHOD } from "@/common/enum"; +import { Image, Text, View } from '@tarojs/components' +import { memo, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' import * as dayjs from 'dayjs' +import styles from './index.module.scss' +import { formatDateTime, formatImgUrl } from '@/common/format' +import { ORDER_STATUS, PAYMENT_METHOD } from '@/common/enum' -type List = { - status: string, - time: string, - tag: string, - desc: string, - expire_time: string +interface List { + status: string + time: string + tag: string + desc: string + expire_time: string } -type Param = { - onRefresh?: () => void, - orderInfo?: { - logistics_details:List[], //订单状态列表 - payment_method: number, //支付方式 - status: number, //订单状态 - account_period?: number, //账期 - account_period_time?: string //还款日期 - } +interface Param { + onRefresh?: () => void + orderInfo?: { + logistics_details: List[] // 订单状态列表 + payment_method: number // 支付方式 + status: number // 订单状态 + account_period?: number // 账期 + account_period_time?: string // 还款日期 + } } -export default memo(({orderInfo = {logistics_details: [],payment_method: 0, status: 0}, onRefresh}:Param) => { - useEffect(() => { - console.log('orderInfo33::',orderInfo) - }, [orderInfo]) - - const [showMore, setShowMore] = useState(false) - const changeMore = () => { - setShowMore(() => !showMore) - } - const dataList = useMemo(() => { - return orderInfo.logistics_details?orderInfo?.logistics_details.reverse():[] - }, [orderInfo.logistics_details]) +export default memo(({ orderInfo = { logistics_details: [], payment_method: 0, status: 0 }, onRefresh }: Param) => { + useEffect(() => { + console.log('orderInfo33::', orderInfo) + }, [orderInfo]) - //订单状态枚举 - const {SaleorderstatusWaitingPrePayment} = ORDER_STATUS + const [showMore, setShowMore] = useState(false) + const changeMore = () => { + setShowMore(() => !showMore) + } + const dataList = useMemo(() => { + return orderInfo.logistics_details ? orderInfo?.logistics_details.reverse() : [] + }, [orderInfo.logistics_details]) - //支付方式枚举 - const { - PaymentMethodAccountPeriod, - PaymentMethodCashOnDelivery, - } = PAYMENT_METHOD + // 订单状态枚举 + const { SaleorderstatusWaitingPrePayment } = ORDER_STATUS - return ( - <> - {(dataList?.length > 0)&& - - {dataList.map((item, index) => - {(dataList.length > 1)&&} - {(dataList.length != (index + 1))&&} - - {item.status} - {formatDateTime(item.time)} - - {item.desc} - )} - - {(dataList.length > 2) && changeMore()}> - {showMore&&'收起详情'||'点击查看详情'} - - } - - {(orderInfo.payment_method == PaymentMethodCashOnDelivery.value)&&} - {(orderInfo.payment_method == PaymentMethodAccountPeriod.value)&&} - - } - {(orderInfo.payment_method == PaymentMethodAccountPeriod.value)&& - + // 支付方式枚举 + const { + PaymentMethodAccountPeriod, + PaymentMethodCashOnDelivery, + } = PAYMENT_METHOD + + return ( + <> + {(dataList?.length > 0) && + + {dataList.map((item, index) => + {(dataList.length > 1) && } + {(dataList.length != (index + 1)) && } + + {item.status} + {formatDateTime(item.time)} + + {item.desc} + )} + + {(dataList.length > 2) && changeMore()}> + {showMore && '收起详情' || '点击查看详情'} + + } + + {(orderInfo.payment_method == PaymentMethodCashOnDelivery.value) && } + {(orderInfo.payment_method == PaymentMethodAccountPeriod.value) && } + + } + {(orderInfo.payment_method == PaymentMethodAccountPeriod.value) && + 您使用了{orderInfo.account_period}天账期支付,还款日期为{formatDateTime(orderInfo.account_period_time)} - } - - ) + } + + ) }) diff --git a/src/pages/orderDetails/components/remark/index.tsx b/src/pages/orderDetails/components/remark/index.tsx index a28cf90..16c0c92 100644 --- a/src/pages/orderDetails/components/remark/index.tsx +++ b/src/pages/orderDetails/components/remark/index.tsx @@ -1,47 +1,47 @@ -import Popup from "@/components/popup" -import { Textarea, View } from "@tarojs/components" -import { useCallback, useEffect, useState } from "react" +import { Textarea, View } from '@tarojs/components' +import { useCallback, useEffect, useState } from 'react' import styles from './index.module.scss' +import Popup from '@/components/popup' -type Param = { - onBlur?: (val: any) => void - onSave?: (val: string) => void - defaultValue?: string, - showInput: boolean +interface Param { + onBlur?: (val: any) => void + onSave?: (val: string) => void + defaultValue?: string + showInput: boolean } export default ({ onBlur, onSave, defaultValue = '', showInput = false }: Param) => { - const [descData, setDescData] = useState({ - number: 0, - value: '', - count: 200, - }) + const [descData, setDescData] = useState({ + number: 0, + value: '', + count: 200, + }) - useEffect(() => { - getDesc(defaultValue) - }, [defaultValue]) + useEffect(() => { + getDesc(defaultValue) + }, [defaultValue]) - const getDesc = (value) => { - let res = value - if (value.length > descData.count) { - res = value.slice(0, descData.count) - } - setDescData({ ...descData, number: res.length, value: res }) + const getDesc = (value) => { + let res = value + if (value.length > descData.count) { + res = value.slice(0, descData.count) } + setDescData({ ...descData, number: res.length, value: res }) + } - const setSave = () => { - onSave?.(descData.value) - } - return ( - - 编辑备注 - { - showInput && - - {descData.number}/{descData.count} - - } - - setSave()}>保存 + const setSave = () => { + onSave?.(descData.value) + } + return ( + + 编辑备注 + { + showInput && + + {descData.number}/{descData.count} - ) -} \ No newline at end of file + } + + setSave()}>保存 + + ) +} diff --git a/src/pages/orderDetails/index.config.ts b/src/pages/orderDetails/index.config.ts index d36c589..d777933 100644 --- a/src/pages/orderDetails/index.config.ts +++ b/src/pages/orderDetails/index.config.ts @@ -1,5 +1,5 @@ export default { - navigationBarTitleText: '订单详情', - enablePullDownRefresh: true, - "backgroundTextStyle": "dark" + navigationBarTitleText: '订单详情', + enablePullDownRefresh: true, + backgroundTextStyle: 'dark', } diff --git a/src/pages/orderDetails/index.tsx b/src/pages/orderDetails/index.tsx index c46923d..f23668c 100644 --- a/src/pages/orderDetails/index.tsx +++ b/src/pages/orderDetails/index.tsx @@ -1,858 +1,861 @@ import { View } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import type { ReactNode } from 'react' +import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import OfflinePay from '../order/components/offlinePay' +import PayPopup from '../order/components/PayPopup' +import styles from './index.module.scss' import AdvanceOrderState from './components/advanceOrderState' import AddressDetailBox from './components/addressDetailBox' +import BottomApply from './components/BottomApply' +import OrderState from './components/orderState' import Remark from '@/components/textareaEnhance' import Popup from '@/components/popup' -import BottomBtns from '@/components/BottomBtns'; -import BottomApply from './components/BottomApply'; +import BottomBtns from '@/components/BottomBtns' import { debounce } from '@/common/util' -import OfflinePay from '../order/components/offlinePay' -import OrderState from './components/orderState' import { - mpsaleOrder, - mpsaleOrderput, - mpshoppingCartproductColorlist, - orderPaymentorderPaymentMethodInfo, - orderPaymentpreCollectOrderorderPaymentMethodInfo, - orderPaymentorderPaymentSubmission, - orderPaymentpreCollectOrderorderPaymentSubmission, - mpsaleOrdercancel, - GetPayCode, - mpsaleOrderaddress, - mpsaleOrdershipmentMode, - mpsaleOrderreceive + GetPayCode, + mpsaleOrder, + mpsaleOrderaddress, + mpsaleOrdercancel, + mpsaleOrderput, + mpsaleOrderreceive, + mpsaleOrdershipmentMode, + mpshoppingCartproductColorlist, + orderPaymentorderPaymentMethodInfo, + orderPaymentorderPaymentSubmission, + orderPaymentpreCollectOrderorderPaymentMethodInfo, + orderPaymentpreCollectOrderorderPaymentSubmission, } from '@/api/order' import { alert, goLink } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' -import PayPopup from '../order/components/PayPopup' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' import { PAY_H5_CODE_URL } from '@/common/constant' + export default () => { - const router = useRouter() - // useEffect(() => { - // getDetail() - // }, []) - useDidShow(() => { - getDetail() + const router = useRouter() + // useEffect(() => { + // getDetail() + // }, []) + useDidShow(() => { + getDetail() + }) + // 页面下拉刷新 + usePullDownRefresh(() => { + getDetail() + }) + + // 收货方法,1:自提,2物流 + const [receivingStatus, setReceivingStatus] = useState(null) + // 切换自提或者物流 + const { fetchData: selectFetch } = mpsaleOrdershipmentMode() + const onReceivingStatus = debounce(async(e, value) => { + if (infoObj.status === 8 || infoObj.status === 9 || infoObj.status === 4 || infoObj.status === 5 || infoObj.status === 3 || infoObj.status === 11) { + alert.error('不允许更改') + return false + } + e.stopPropagation() + if (receivingStatus === value) { + alert.error('不能选择相同的方式') + return false + } + Taro.showLoading({ + title: '请稍等...', + mask: true, }) - //页面下拉刷新 - usePullDownRefresh(() => { - getDetail() - }) - - - //收货方法,1:自提,2物流 - const [receivingStatus, setReceivingStatus] = useState(null) - //切换自提或者物流 - const { fetchData: selectFetch } = mpsaleOrdershipmentMode() - const onReceivingStatus = debounce(async (e, value) => { - if (infoObj.status === 8 || infoObj.status === 9 || infoObj.status === 4 || infoObj.status === 5 || infoObj.status === 3 || infoObj.status === 11) { - alert.error('不允许更改') - return false - } - e.stopPropagation() - if (receivingStatus === value) { - alert.error('不能选择相同的方式') - return false - } - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - const res = await selectFetch({ id: Number(infoObj.id), shipment_mode: value }) - if (res.msg === 'success') { - Taro.hideLoading() - Taro.showToast({ - title: '成功', - icon: 'success' - }) - setReceivingStatus(value) - getDetail() - } else { - if (res.data.code == 70029) { - Taro.hideLoading() - Taro.showToast({ - title: res.msg, - icon: 'error' - }) - } else { - Taro.hideLoading() - Taro.showToast({ - title: '请先去新增地址', - icon: 'error' - }) - } - } - }, 300) - - const { fetchData: infoFetch } = mpsaleOrder() - const [infoObj, setInfoObj] = useState({}) - //获取订单详情 - const getDetail = async () => { - Taro.showLoading({ - title: '加载中...', - mask: true - }) - const res = await infoFetch({ id: router.params.id }) - setInfoObj(res.data) - orderMsg.map(it => { - if (it.leftTitle === '订单编号:') { - it.rightTitle = res.data.order_no - } - if (it.leftTitle === '创建时间:') { - it.rightTitle = formatDateTime(res.data.create_time) - } - if (it.leftTitle === '发货时间:') { - it.rightTitle = formatDateTime(res.data.delivery_time) - } - if (it.leftTitle === '业务员:') { - it.rightTitle = res.data.sale_user_name - } - }) - setOrderMsg([...orderMsg]) - setReceivingStatus(res.data.shipment_mode) - // 小程序提供的api,通知页面停止下拉刷新效果 - Taro.stopPullDownRefresh(); + const res = await selectFetch({ id: Number(infoObj.id), shipment_mode: value }) + if (res.msg === 'success') { + Taro.hideLoading() + Taro.showToast({ + title: '成功', + icon: 'success', + }) + setReceivingStatus(value) + getDetail() + } + else { + if (res.data.code == 70029) { Taro.hideLoading() - } - //复制功能 - const clipboardData = () => { - Taro.setClipboardData({ - data: infoObj?.order_no || '', - success: function (res) { - Taro.showToast({ - icon: 'none', - title: '复制成功', - }) - }, + Taro.showToast({ + title: res.msg, + icon: 'error', }) - } - - // useEffect(() => { - // setReceivingStatus(receivingStatus) - // }, [receivingStatus]) - //订单信息文字数组 - const [orderMsg, setOrderMsg] = useState([ - { - leftTitle: '订单编号:', - rightTitle: '------', - showBtn: true - }, - { - leftTitle: '创建时间:', - rightTitle: '------', - }, - { - leftTitle: '发货时间:', - rightTitle: '------', - }, - { - leftTitle: '业务员:', - rightTitle: '------', - } - ]) - - //备注操作 - const [showDesc, setShowDesc] = useState(false) - const { fetchData: remarkFetch } = mpsaleOrderput() - const getRemark = async () => { - const res = await remarkFetch({ remark: infoObj.remark, id: Number(router.params.id) }) - if (res.msg === 'success') { - Taro.showToast({ - title: '成功', - icon: 'success' - }) - setShowDesc(false) - getDetail() - } - } - - //更多按钮查看操作 - const [showMore, setShowMore] = useState(false) - - //刷新页面 - const refresh = useCallback(() => { - alert.loading('刷新中') - getDetail() - }, []) - - const { fetchData: cancelFetch } = mpsaleOrdercancel() - //取消订单 - const cancle = async (e, item) => { - e.stopPropagation(); - Taro.showModal({ - content: "确定要取消吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - const res = await cancelFetch({ id: item.id }) - if (res.msg === 'success') { - Taro.showToast({ - title: '取消成功' - }) - Taro.hideLoading() - getDetail() - } else { - Taro.showToast({ - title: res.msg, - icon: 'error' - }) - } - } - } + } + else { + Taro.hideLoading() + Taro.showToast({ + title: '请先去新增地址', + icon: 'error', }) + } } - //再次购买 - const { fetchData: buyFetch } = mpshoppingCartproductColorlist() - const nextBuy = async (e, item) => { - e.stopPropagation(); - Taro.showLoading({ + }, 300) + + const { fetchData: infoFetch } = mpsaleOrder() + const [infoObj, setInfoObj] = useState({}) + // 获取订单详情 + const getDetail = async() => { + Taro.showLoading({ + title: '加载中...', + mask: true, + }) + const res = await infoFetch({ id: router.params.id }) + setInfoObj(res.data) + orderMsg.map((it) => { + if (it.leftTitle === '订单编号:') { + it.rightTitle = res.data.order_no + } + if (it.leftTitle === '创建时间:') { + it.rightTitle = formatDateTime(res.data.create_time) + } + if (it.leftTitle === '发货时间:') { + it.rightTitle = formatDateTime(res.data.delivery_time) + } + if (it.leftTitle === '业务员:') { + it.rightTitle = res.data.sale_user_name + } + }) + setOrderMsg([...orderMsg]) + setReceivingStatus(res.data.shipment_mode) + // 小程序提供的api,通知页面停止下拉刷新效果 + Taro.stopPullDownRefresh() + Taro.hideLoading() + } + // 复制功能 + const clipboardData = () => { + Taro.setClipboardData({ + data: infoObj?.order_no || '', + success(res) { + Taro.showToast({ + icon: 'none', + title: '复制成功', + }) + }, + }) + } + + // useEffect(() => { + // setReceivingStatus(receivingStatus) + // }, [receivingStatus]) + // 订单信息文字数组 + const [orderMsg, setOrderMsg] = useState([ + { + leftTitle: '订单编号:', + rightTitle: '------', + showBtn: true, + }, + { + leftTitle: '创建时间:', + rightTitle: '------', + }, + { + leftTitle: '发货时间:', + rightTitle: '------', + }, + { + leftTitle: '业务员:', + rightTitle: '------', + }, + ]) + + // 备注操作 + const [showDesc, setShowDesc] = useState(false) + const { fetchData: remarkFetch } = mpsaleOrderput() + const getRemark = async() => { + const res = await remarkFetch({ remark: infoObj.remark, id: Number(router.params.id) }) + if (res.msg === 'success') { + Taro.showToast({ + title: '成功', + icon: 'success', + }) + setShowDesc(false) + getDetail() + } + } + + // 更多按钮查看操作 + const [showMore, setShowMore] = useState(false) + + // 刷新页面 + const refresh = useCallback(() => { + alert.loading('刷新中') + getDetail() + }, []) + + const { fetchData: cancelFetch } = mpsaleOrdercancel() + // 取消订单 + const cancle = async(e, item) => { + e.stopPropagation() + Taro.showModal({ + content: '确定要取消吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + Taro.showLoading({ title: '请稍等...', - mask: true - }) - let arr: any = [] - item.product_list.forEach(item => { - item.product_colors.forEach(it => { - arr.push({ - length: it.length, - roll: it.roll, - product_color_id: it.id - }) - }) - }) - let query = { - purchaser_id: item.purchaser_id, - sale_mode: item.sale_mode, - color_list: arr - } - const res = await buyFetch(query) - if (res.msg === 'success') { + mask: true, + }) + const res = await cancelFetch({ id: item.id }) + if (res.msg === 'success') { Taro.showToast({ - title: '加入购物车成功!' + title: '取消成功', }) Taro.hideLoading() getDetail() - } else { + } + else { Taro.showToast({ - title: res.msg, - icon: 'error' + title: res.msg, + icon: 'error', }) + } } - } - //去支付逻辑 - const { fetchData: infoOneFetch } = orderPaymentorderPaymentMethodInfo() - const { fetchData: infoTwoFetch } = orderPaymentpreCollectOrderorderPaymentMethodInfo() - const [payList, setPayList] = useState([ - { - id: 2, - iconfont: "icon-yufukuan1", - name: "预存款", - fonts: "可用额度 ", - money: "", - isCheck: false, - }, - { - id: 5, - iconfont: "icon-xianxiahuizong", - name: "货到付款", - fonts: "发货后3天内付款", - isCheck: false, - money: "", - }, - { - id: 3, - iconfont: "icon-xianxiahuizong", - name: "x天账期", - fonts: "可用额度 ", - money: "", - isCheck: false, - }, - { - iconfont: "icon-yue", - name: "线下汇款", - }, - { - iconfont: "icon-saomiao", - name: "扫码支付", - }, - ]) - const toPay = async (e, item) => { - e.stopPropagation(); - - if (item.status !== 10) { - let res = await infoOneFetch({ id: item.should_collect_order_id }) - payList.map((item) => { - if (item.id === 3) { - item.name = `${res.data.account_period}天账期`; - item.fonts = `可用额度${formatPriceDiv( - res.data.account_period_credit_available_line - ).toLocaleString()}`; - } - if (item.id === 2) { - item.fonts = `可用额度${formatPriceDiv( - res.data.advance_deposit_balance - ).toLocaleString()}`; - } - return item; - }); - setPayList([...payList]) - if (item.is_shipper_picks_up) { - const obj = payList.filter((item) => { - return item.id === 6; - }); - console.log(obj, "456456"); - if (obj.length === 0) { - payList.unshift({ - id: 6, - iconfont: "icon-xianxiahuizong", - name: "货主自提", - fonts: "", - money: "", - isCheck: false, - }); - setPayList([...payList]) - } - } - } else { - let res = await infoTwoFetch({ id: item.pre_collect_order_id }) - const arr: any = []; - arr.push( - { - id: 2, - iconfont: "icon-yufukuan1", - name: "预存款", - fonts: `可用额度${formatPriceDiv( - res.data.advance_deposit_balance - ).toLocaleString()}`, - money: "", - isCheck: false, - }, - { - iconfont: "icon-yue", - name: "线下汇款", - }, - { - iconfont: "icon-saomiao", - name: "扫码支付", - } - ); - if (item.is_shipper_picks_up) { - const obj = arr.filter((item) => { - return item.id === 6; - }); - if (obj.length === 0) { - arr.unshift({ - id: 6, - iconfont: "icon-xianxiahuizong", - name: "货主自提", - fonts: "", - money: "", - isCheck: false, - }); - } - } - setPayList([...arr]) - } - setShowSide(true) - setTitle('待支付款项') - setShowPay(true) - } - - //选择支付方式 - const clickItem = (item) => { - if (item.name === '扫码支付') { handScanpay() } - if (item.name === '线下汇款') { setShowOffine(true) } - payList.map(it => { - if (item.id === it.id) { - it.checked = true - } else { - it.checked = false - } - return it + }, + }) + } + // 再次购买 + const { fetchData: buyFetch } = mpshoppingCartproductColorlist() + const nextBuy = async(e, item) => { + e.stopPropagation() + Taro.showLoading({ + title: '请稍等...', + mask: true, + }) + const arr: any = [] + item.product_list.forEach((item) => { + item.product_colors.forEach((it) => { + arr.push({ + length: it.length, + roll: it.roll, + product_color_id: it.id, }) - setPayList([...payList]) + }) + }) + const query = { + purchaser_id: item.purchaser_id, + sale_mode: item.sale_mode, + color_list: arr, } + const res = await buyFetch(query) + if (res.msg === 'success') { + Taro.showToast({ + title: '加入购物车成功!', + }) + Taro.hideLoading() + getDetail() + } + else { + Taro.showToast({ + title: res.msg, + icon: 'error', + }) + } + } + // 去支付逻辑 + const { fetchData: infoOneFetch } = orderPaymentorderPaymentMethodInfo() + const { fetchData: infoTwoFetch } = orderPaymentpreCollectOrderorderPaymentMethodInfo() + const [payList, setPayList] = useState([ + { + id: 2, + iconfont: 'icon-yufukuan1', + name: '预存款', + fonts: '可用额度 ', + money: '', + isCheck: false, + }, + { + id: 5, + iconfont: 'icon-xianxiahuizong', + name: '货到付款', + fonts: '发货后3天内付款', + isCheck: false, + money: '', + }, + { + id: 3, + iconfont: 'icon-xianxiahuizong', + name: 'x天账期', + fonts: '可用额度 ', + money: '', + isCheck: false, + }, + { + iconfont: 'icon-yue', + name: '线下汇款', + }, + { + iconfont: 'icon-saomiao', + name: '扫码支付', + }, + ]) + const toPay = async(e, item) => { + e.stopPropagation() + if (item.status !== 10) { + const res = await infoOneFetch({ id: item.should_collect_order_id }) + payList.map((item) => { + if (item.id === 3) { + item.name = `${res.data.account_period}天账期` + item.fonts = `可用额度${formatPriceDiv( + res.data.account_period_credit_available_line, + ).toLocaleString()}` + } + if (item.id === 2) { + item.fonts = `可用额度${formatPriceDiv( + res.data.advance_deposit_balance, + ).toLocaleString()}` + } + return item + }) + setPayList([...payList]) + if (item.is_shipper_picks_up) { + const obj = payList.filter((item) => { + return item.id === 6 + }) + console.log(obj, '456456') + if (obj.length === 0) { + payList.unshift({ + id: 6, + iconfont: 'icon-xianxiahuizong', + name: '货主自提', + fonts: '', + money: '', + isCheck: false, + }) + setPayList([...payList]) + } + } + } + else { + const res = await infoTwoFetch({ id: item.pre_collect_order_id }) + const arr: any = [] + arr.push( + { + id: 2, + iconfont: 'icon-yufukuan1', + name: '预存款', + fonts: `可用额度${formatPriceDiv( + res.data.advance_deposit_balance, + ).toLocaleString()}`, + money: '', + isCheck: false, + }, + { + iconfont: 'icon-yue', + name: '线下汇款', + }, + { + iconfont: 'icon-saomiao', + name: '扫码支付', + }, + ) + if (item.is_shipper_picks_up) { + const obj = arr.filter((item) => { + return item.id === 6 + }) + if (obj.length === 0) { + arr.unshift({ + id: 6, + iconfont: 'icon-xianxiahuizong', + name: '货主自提', + fonts: '', + money: '', + isCheck: false, + }) + } + } + setPayList([...arr]) + } + setShowSide(true) + setTitle('待支付款项') + setShowPay(true) + } - //扫码支付 - const [showSide, setShowSide] = useState(true) - const [title, setTitle] = useState('') - const [picUrl, setPicUrl] = useState('') - const { fetchData: payFetch } = GetPayCode() - const handScanpay = async () => { - const list: any = []; - infoObj.product_list.forEach((item) => { - item.product_colors.forEach((it) => { - list.push({ - product_code: item.code, - product_name: item.name, - product_color_code: it.product_color_code, - product_color_name: it.product_color_name, - num: it.roll.toString(), - weight: formatWeightDiv(it.actual_weight).toString(), - sale_price: (it.sale_price / 100).toString(), - total_price: + // 选择支付方式 + const clickItem = (item) => { + if (item.name === '扫码支付') { handScanpay() } + if (item.name === '线下汇款') { setShowOffine(true) } + payList.map((it) => { + if (item.id === it.id) { + it.checked = true + } + else { + it.checked = false + } + return it + }) + setPayList([...payList]) + } + + // 扫码支付 + const [showSide, setShowSide] = useState(true) + const [title, setTitle] = useState('') + const [picUrl, setPicUrl] = useState('') + const { fetchData: payFetch } = GetPayCode() + const handScanpay = async() => { + const list: any = [] + infoObj.product_list.forEach((item) => { + item.product_colors.forEach((it) => { + list.push({ + product_code: item.code, + product_name: item.name, + product_color_code: it.product_color_code, + product_color_name: it.product_color_name, + num: it.roll.toString(), + weight: formatWeightDiv(it.actual_weight).toString(), + sale_price: (it.sale_price / 100).toString(), + total_price: it.total_sale_price !== 0 - ? (it.total_sale_price / 100).toString() - : (it.estimate_amount / 100).toString(), - length: (it.length / 100).toString(), - weight_error: formatWeightDiv(it.weight_error).toString(), - }); - }); - }); - const query = { - list: list, - title: "面料销售电子确认单", - show_qrcode: true, - show_barcode: true, - show_wait_pay_amount: true, - order_type: infoObj.sale_mode_name, - shipment_mode: infoObj.shipment_mode_name, - company: infoObj.title_purchaser_name, - sale_user: infoObj.sale_user_name, - order_created_time: formatDateTime(infoObj.create_time), - order_no: infoObj.order_no, - target_user_name: infoObj.target_user_name, - target_address: infoObj.address_detail, - target_description: infoObj.remark, - pay_account: infoObj.transfer_remittance_account, - bank_account_name: infoObj.account_name, - bank_name: infoObj.bank_of_deposit, - pay_type: infoObj.settle_mode_name, - client: infoObj.purchaser_name, - phone: infoObj.target_user_phone, - order_total_length: (infoObj.total_number / 100).toString(), - order_total_price: ( - infoObj.bill_total_sale_price / 100 - ).toString(), - total_weight_error_discount: ( - infoObj.total_weight_error_discount / 100 - ).toString(), - order_total_num: infoObj.total_number.toString(), - qrcode: `${PAY_H5_CODE_URL}?sale_order_no=${infoObj.order_no}`, - order_total_weight: (infoObj.total_weight / 1000).toString(), - estimate_amount: (infoObj.estimate_amount / 100).toString(), - total_sale_price: (infoObj.total_sale_price / 100).toString(), - show_total_sale_price: true, - show_total_weight_error_discount: true, - actual_amount: (infoObj.actual_amount / 100).toString(), - wait_pay_amount: (infoObj.wait_pay_amount / 100).toString(), - order_total_weight_error: ( - infoObj.total_weight_error / 1000 - ).toString(), - }; - const res = await payFetch(query) - if (res.data) { - console.log(res.data.base64) - setShowSide(false) - setTitle('查看销售码单') - setPicUrl(res.data.base64) - } + ? (it.total_sale_price / 100).toString() + : (it.estimate_amount / 100).toString(), + length: (it.length / 100).toString(), + weight_error: formatWeightDiv(it.weight_error).toString(), + }) + }) + }) + const query = { + list, + title: '面料销售电子确认单', + show_qrcode: true, + show_barcode: true, + show_wait_pay_amount: true, + order_type: infoObj.sale_mode_name, + shipment_mode: infoObj.shipment_mode_name, + company: infoObj.title_purchaser_name, + sale_user: infoObj.sale_user_name, + order_created_time: formatDateTime(infoObj.create_time), + order_no: infoObj.order_no, + target_user_name: infoObj.target_user_name, + target_address: infoObj.address_detail, + target_description: infoObj.remark, + pay_account: infoObj.transfer_remittance_account, + bank_account_name: infoObj.account_name, + bank_name: infoObj.bank_of_deposit, + pay_type: infoObj.settle_mode_name, + client: infoObj.purchaser_name, + phone: infoObj.target_user_phone, + order_total_length: (infoObj.total_number / 100).toString(), + order_total_price: ( + infoObj.bill_total_sale_price / 100 + ).toString(), + total_weight_error_discount: ( + infoObj.total_weight_error_discount / 100 + ).toString(), + order_total_num: infoObj.total_number.toString(), + qrcode: `${PAY_H5_CODE_URL}?sale_order_no=${infoObj.order_no}`, + order_total_weight: (infoObj.total_weight / 1000).toString(), + estimate_amount: (infoObj.estimate_amount / 100).toString(), + total_sale_price: (infoObj.total_sale_price / 100).toString(), + show_total_sale_price: true, + show_total_weight_error_discount: true, + actual_amount: (infoObj.actual_amount / 100).toString(), + wait_pay_amount: (infoObj.wait_pay_amount / 100).toString(), + order_total_weight_error: ( + infoObj.total_weight_error / 1000 + ).toString(), + } + const res = await payFetch(query) + if (res.data) { + console.log(res.data.base64) + setShowSide(false) + setTitle('查看销售码单') + setPicUrl(res.data.base64) + } + } + + // 确认交易 + const { fetchData: payOneFetch } = orderPaymentorderPaymentSubmission() + const { fetchData: payTwoFetch } = orderPaymentpreCollectOrderorderPaymentSubmission() + const handsurePay = (obj) => { + let arr: any = [] + // if (obj.status !== 10) { + arr = payList.filter((item) => { + return item.checked + }) + if (!arr.length) { + Taro.showToast({ + title: '请选择后再提交', + icon: 'error', + }) + return false } - - //确认交易 - const { fetchData: payOneFetch } = orderPaymentorderPaymentSubmission() - const { fetchData: payTwoFetch } = orderPaymentpreCollectOrderorderPaymentSubmission() - const handsurePay = (obj) => { - let arr: any = [] - // if (obj.status !== 10) { - arr = payList.filter(item => { - return item.checked - }) - if (!arr.length) { + Taro.showModal({ + content: '确定交易吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + Taro.showLoading({ + title: '请稍等...', + mask: true, + }) + const restult = await (obj.status !== 10 ? payOneFetch({ id: Number(obj.should_collect_order_id), payment_method: Number(arr[0]?.id) }) : payTwoFetch({ id: Number(obj.pre_collect_order_id), payment_method: Number(arr[0]?.id) })) + if (restult?.msg === 'success') { Taro.showToast({ - title: '请选择后再提交', - icon: 'error' + title: '交易成功', }) - return false - } - - Taro.showModal({ - content: "确定交易吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - let restult = await (obj.status !== 10 ? payOneFetch({ id: Number(obj.should_collect_order_id), payment_method: Number(arr[0]?.id) }) : payTwoFetch({ id: Number(obj.pre_collect_order_id), payment_method: Number(arr[0]?.id) })) - if (restult?.msg === 'success') { - Taro.showToast({ - title: '交易成功' - }) - Taro.hideLoading() - setShowPay(false) - getDetail() - } else { - Taro.hideLoading() - Taro.showToast({ - title: restult?.msg, - icon: 'error' - }) - } - } - - } - }) - - // } - } - - //显示支付 - const [showPay, setShowPay] = useState(false) - //显示线下汇款 - const [showOffline, setShowOffine] = useState(false) - //选择地址 - const handSelect = (obj) => { - if (receivingStatus === 1 || (infoObj.status === 8 || infoObj.status === 9 || infoObj.status === 4 || infoObj.status === 5 || infoObj.status === 11 || infoObj.status === 3)) { - alert.error('不允许更改') - return false - } - Taro.navigateTo({ - url: '/pages/addressManager/index?orderId=' + obj.id + '&purchaser_id=' + obj.purchaser_id - }) - } - - //申请退货 - const handApplyGood = () => { - if (infoObj.av_return_product.length == 0) { - return alert.error('暂无货物退') - } else { - Taro.navigateTo({ - url: '/pages/applyGoods/index?orderId=' + infoObj.id + Taro.hideLoading() + setShowPay(false) + getDetail() + } + else { + Taro.hideLoading() + Taro.showToast({ + title: restult?.msg, + icon: 'error', }) + } + } + }, + }) + + // } + } + + // 显示支付 + const [showPay, setShowPay] = useState(false) + // 显示线下汇款 + const [showOffline, setShowOffine] = useState(false) + // 选择地址 + const handSelect = (obj) => { + if (receivingStatus === 1 || (infoObj.status === 8 || infoObj.status === 9 || infoObj.status === 4 || infoObj.status === 5 || infoObj.status === 11 || infoObj.status === 3)) { + alert.error('不允许更改') + return false + } + Taro.navigateTo({ + url: `/pages/addressManager/index?orderId=${obj.id}&purchaser_id=${obj.purchaser_id}`, + }) + } + + // 申请退货 + const handApplyGood = () => { + if (infoObj.av_return_product.length == 0) { + return alert.error('暂无货物退') + } + else { + Taro.navigateTo({ + url: `/pages/applyGoods/index?orderId=${infoObj.id}`, + }) + setShowMore(false) + } + } + + // 申请退款 + const handApplyMoney = () => { + // 三种类型的 待收货,已收货后申请退货退款,需要选择质量/非质量问题 + if (infoObj?.status == 8 || infoObj?.status == 9) { + Taro.navigateTo({ + url: `/pages/applyGoods/index?orderId=${infoObj.id}`, + }) + } + else { + Taro.navigateTo({ + url: `/pages/applyMoney/index?orderId=${infoObj.id}`, + }) + } + setShowMore(false) + } + + // 确认收货 + const { fetchData: receveFetch } = mpsaleOrderreceive() + const handSureGoods = async() => { + Taro.showModal({ + content: '确认收货吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + Taro.showLoading({ + title: '请稍等...', + mask: true, + }) + const res = await receveFetch({ sale_order_id: Number(infoObj.id) }) + if (res?.msg === 'success') { + Taro.showToast({ + title: '成功', + }) + Taro.hideLoading() setShowMore(false) - } - } - - //申请退款 - const handApplyMoney = () => { - //三种类型的 待收货,已收货后申请退货退款,需要选择质量/非质量问题 - if (infoObj?.status == 8 || infoObj?.status == 9) { - Taro.navigateTo({ - url: '/pages/applyGoods/index?orderId=' + infoObj.id - }) - } else { - Taro.navigateTo({ - url: '/pages/applyMoney/index?orderId=' + infoObj.id + getDetail() + } + else { + Taro.hideLoading() + Taro.showToast({ + title: res?.msg, + icon: 'error', }) + } } - setShowMore(false) + }, + }) + } + + const onChange = (e) => { + setInfoObj(val => ({ ...val, remark: e })) + } + + useEffect(() => { + setInfoObj(infoObj) + }, [infoObj]) + const showRemarkFont = useMemo(() => { + if (infoObj.status === 10 || infoObj.status == 0 || infoObj.status == 1 || infoObj.status == 2 || infoObj.status == 7) { + return `${'填写/修改备注'} >` } - - - //确认收货 - const { fetchData: receveFetch } = mpsaleOrderreceive() - const handSureGoods = async () => { - Taro.showModal({ - content: "确认收货吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - const res = await receveFetch({ sale_order_id: Number(infoObj.id) }) - if (res?.msg === 'success') { - Taro.showToast({ - title: '成功' - }) - Taro.hideLoading() - setShowMore(false) - getDetail() - } else { - Taro.hideLoading() - Taro.showToast({ - title: res?.msg, - icon: 'error' - }) - } - } - - } - }) + else { + return '' } + }, [infoObj]) - const onChange = (e) => { - setInfoObj((val) => ({ ...val, remark: e })) + const BottomBtnsRef = useRef() + const [showOther, setshowOther] = useState(false) + useMemo(() => { + Taro.nextTick(() => { + if (BottomBtnsRef.current?.itemNums >= 4) { + setshowOther(true) + return true + } + else { + setshowOther(false) + return false + } + }) + }, [infoObj]) + // 待接单、配布中、已配布状态时,叫预估金额,其他状态叫合计金额。 + const payFont = useMemo(() => { + if (infoObj?.status === 0 || infoObj?.status === 1 || infoObj?.status === 2) { + return '预估金额' } + else { + return '合计金额' + } + }, [infoObj]) - useEffect(() => { - setInfoObj(infoObj) - }, [infoObj]) - const showRemarkFont = useMemo(() => { - if (infoObj.status === 10 || infoObj.status == 0 || infoObj.status == 1 || infoObj.status == 2 || infoObj.status == 7) { - return `${'填写/修改备注'} >` - } else { - return '' - } - }, [infoObj]) - - const BottomBtnsRef = useRef() - const [showOther, setshowOther] = useState(false) - useMemo(() => { - Taro.nextTick(() => { - if (BottomBtnsRef.current?.itemNums >= 4) { - setshowOther(true) - return true - } else { - setshowOther(false) - return false - } - }) - }, [infoObj]) - //待接单、配布中、已配布状态时,叫预估金额,其他状态叫合计金额。 - const payFont = useMemo(() => { - if (infoObj?.status === 0 || infoObj?.status === 1 || infoObj?.status === 2) { - return "预估金额" - } else { - return "合计金额" - } - }, [infoObj]) - - - return ( - - {(infoObj?.status != 10 && )} - { - infoObj.status === 10 && refresh()} /> - } - handSelect(obj)} - obj={infoObj} - receivingStatus={receivingStatus} - onReceivingStatus={(e, value) => onReceivingStatus(e, value)} - > - - - {infoObj.purchaser_name} - {infoObj.purchaser_phone} - - - {infoObj.total_fabrics} 种面料,{infoObj.total_colors} 个颜色,共 {infoObj.sale_mode === 0 ? infoObj.total_number : infoObj.total_number / 100} {infoObj.sale_mode === 0 ? '条' : 'm'} - - - - - {payFont} - {/* */} - - ¥{formatPriceDiv(infoObj.bill_total_sale_price)} - - - - 实付金额 - {/* */} - - ¥{formatPriceDiv(infoObj.actual_amount)} - - { - infoObj?.wait_pay_amount < 0 && - - {infoObj?.wait_pay_amount?.toString().indexOf('-') !== -1 ? '退款金额' : '待付金额'} - {/* */} - - ¥{formatPriceDiv(infoObj.wait_pay_amount)} - - } - { - infoObj?.wait_pay_amount > 0 && - - {infoObj?.wait_pay_amount?.toString().indexOf('-') !== -1 ? '退款金额' : '待付金额'} - {/* */} - - ¥{formatPriceDiv(infoObj.wait_pay_amount)} - - } - - + return ( + + {(infoObj?.status != 10 && )} + { + infoObj.status === 10 && refresh()} /> + } + handSelect(obj)} + obj={infoObj} + receivingStatus={receivingStatus} + onReceivingStatus={(e, value) => onReceivingStatus(e, value)} + > + + + {infoObj.purchaser_name} + {infoObj.purchaser_phone} + + + {infoObj.total_fabrics} 种面料,{infoObj.total_colors} 个颜色,共 {infoObj.sale_mode === 0 ? infoObj.total_number : infoObj.total_number / 100} {infoObj.sale_mode === 0 ? '条' : 'm'} + + + + + {payFont} + {/* */} + + ¥{formatPriceDiv(infoObj.bill_total_sale_price)} + + + + 实付金额 + {/* */} + + ¥{formatPriceDiv(infoObj.actual_amount)} + + { + infoObj?.wait_pay_amount < 0 && + + {infoObj?.wait_pay_amount?.toString().indexOf('-') !== -1 ? '退款金额' : '待付金额'} + {/* */} - - { - orderMsg.map((item, index) => { - return ( - - - {item.leftTitle} - - - {item.rightTitle} - {item.showBtn && clipboardData()}>复制} - + ¥{formatPriceDiv(infoObj.wait_pay_amount)} + + } + { + infoObj?.wait_pay_amount > 0 && + + {infoObj?.wait_pay_amount?.toString().indexOf('-') !== -1 ? '退款金额' : '待付金额'} + {/* */} + + ¥{formatPriceDiv(infoObj.wait_pay_amount)} + + } - - ) - }) - } - - - setShowDesc(showRemarkFont != '' ? true : false)}> - {infoObj.remark === '' ? '暂无' : infoObj.remark} - - - setShowDesc(false)}> - - getRemark(e)} - onChange={(e) => onChange(e)} - defaultValue={infoObj.remark} /> - getRemark()}>保存 + + + { + orderMsg.map((item, index) => { + return ( + + + {item.leftTitle} + + + {item.rightTitle} + {item.showBtn && clipboardData()}>复制} - - - - { - showOther && - <> - { - !showMore && setShowMore(true)}>更多 - } - { - showMore && setShowMore(false)}>关闭 - } - { - showMore && - handApplyGood?.()} - handApplyMoney={() => handApplyMoney?.()} - > - - } + + ) + }) + } + + + setShowDesc(showRemarkFont != '')}> + {infoObj.remark === '' ? '暂无' : infoObj.remark} + + + setShowDesc(false)}> + + getRemark(e)} + onChange={e => onChange(e)} + defaultValue={infoObj.remark} + /> + getRemark()}>保存 + + + + + + { + showOther + && <> + { + !showMore && setShowMore(true)}>更多 + } + { + showMore && setShowMore(false)}>关闭 + } + { + showMore && + handApplyGood?.()} + handApplyMoney={() => handApplyMoney?.()} + > + + } - } + } - - cancle?.(e, infoObj)} - nextBuy={(e) => nextBuy?.(e, infoObj)} - toPay={(e) => toPay?.(e, infoObj)} - handSureGoods={() => handSureGoods?.()} - handApplyGoods={() => handApplyGood?.()} - handApplyMoney={() => handApplyMoney?.()} - > - - setShowPay(false)} - clickItem={(infoObj) => clickItem(infoObj)} - handsurePay={(infoObj) => handsurePay(infoObj)} - showSide={showSide} - title={title} - picUrl={picUrl} - > - setShowOffine(false)} offlineInfo={infoObj}> - - ) + cancle?.(e, infoObj)} + nextBuy={e => nextBuy?.(e, infoObj)} + toPay={e => toPay?.(e, infoObj)} + handSureGoods={() => handSureGoods?.()} + handApplyGoods={() => handApplyGood?.()} + handApplyMoney={() => handApplyMoney?.()} + > + + setShowPay(false)} + clickItem={infoObj => clickItem(infoObj)} + handsurePay={infoObj => handsurePay(infoObj)} + showSide={showSide} + title={title} + picUrl={picUrl} + > + setShowOffine(false)} offlineInfo={infoObj}> + + ) } - - -//卡片盒子元素 +// 卡片盒子元素 interface Obs { - title?: string, - modeName?: string, - showMode?: boolean, - children?: ReactNode, - clickNode?: () => void + title?: string + modeName?: string + showMode?: boolean + children?: ReactNode + clickNode?: () => void } const DefaultBox = memo((props: Obs) => { - const { - title = '标题', - modeName = '大货', - showMode = false, - children, - clickNode - } = props + const { + title = '标题', + modeName = '大货', + showMode = false, + children, + clickNode, + } = props - return ( - - - {title} - { - showMode && clickNode?.()}>{modeName} - } - - - {children} - - ) + return ( + + + {title} + { + showMode && clickNode?.()}>{modeName} + } + + + {children} + + ) }) - -//产品商品元素 +// 产品商品元素 interface PropGoods { - // item?: { - // code?: string | number - // } - list: any[], - obj: { - sale_mode?: number | string - }, + // item?: { + // code?: string | number + // } + list: any[] + obj: { + sale_mode?: number | string + } } const GoodsItem = memo((porps: PropGoods) => { - const { list = [], obj = {} } = porps - return ( - <> - { - list.map((item, index) => { - return ( - - {item.code}# {item.name} - - { - item.product_colors.map((it, inx) => { - return ( - - - - - {it.code}# {it.name} - x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} - - - ¥{it.sale_price / 100}/{obj?.sale_mode === 1 ? 'm' : 'kg'} - ¥{formatPriceDiv(it.total_sale_price)} - - - - ) - }) - } + const { list = [], obj = {} } = porps + return ( + <> + { + list.map((item, index) => { + return ( + + {item.code}# {item.name} + + { + item.product_colors.map((it, inx) => { + return ( + + + + + {it.code}# {it.name} + x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} - ) + + ¥{it.sale_price / 100}/{obj?.sale_mode === 1 ? 'm' : 'kg'} + ¥{formatPriceDiv(it.total_sale_price)} + + + + ) }) - } - + } + + ) + }) + } + - ) + ) }) - diff --git a/src/pages/refundDetail/components/addressDetailBox/index.tsx b/src/pages/refundDetail/components/addressDetailBox/index.tsx index 6387138..ade546a 100644 --- a/src/pages/refundDetail/components/addressDetailBox/index.tsx +++ b/src/pages/refundDetail/components/addressDetailBox/index.tsx @@ -1,48 +1,49 @@ -import { Image, Text, View } from "@tarojs/components"; -import { memo, useEffect, useMemo, useRef, useState } from "react"; -import classnames from "classnames"; +import { Image, Text, View } from '@tarojs/components' +import { memo, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' import styles from './index.module.scss' import IconFont from '@/components/iconfont/iconfont' + interface propsObj { - receivingStatus?: Number | null, - onReceivingStatus?: (any, Number) => void, - obj: any, - handUp?: (any) => void + receivingStatus?: Number | null + onReceivingStatus?: (any, Number) => void + obj: any + handUp?: (any) => void } export default memo((props: propsObj) => { + const { + obj = {}, + handUp, + } = props - const { - obj = {}, - handUp - } = props + const seeFont = useMemo(() => { + if (obj.stage == 1) { + return '上传物流回单' + } + else { + return '查看物流回单' + } + }, [obj]) - const seeFont = useMemo(() => { - if (obj.stage == 1) { - return '上传物流回单' - } else { - return '查看物流回单' + return ( + + 请按以下退货地址寄回货物并提供退货物流信息 + + + + + 广东省佛山市禅城区陆盈纺织仓库 + + + + + 谭先生 + {13242128982} + + { + obj.stage != 0 && handUp?.(obj)}>{seeFont} } - }, [obj]) - - return ( - - 请按以下退货地址寄回货物并提供退货物流信息 - - - - - {'广东省佛山市禅城区陆盈纺织仓库'} - - - - - {'谭先生'} - {13242128982} - - { - obj.stage != 0 && handUp?.(obj)}>{seeFont} - } - - - ) -}) \ No newline at end of file + + + ) +}) diff --git a/src/pages/refundDetail/components/orderState/index.tsx b/src/pages/refundDetail/components/orderState/index.tsx index a2dbd37..d7a721b 100644 --- a/src/pages/refundDetail/components/orderState/index.tsx +++ b/src/pages/refundDetail/components/orderState/index.tsx @@ -1,70 +1,68 @@ -import { Image, Text, View } from "@tarojs/components" -import { memo, useEffect, useMemo, useRef, useState } from "react" -import styles from './index.module.scss' -import classnames from "classnames"; -import { formatDateTime, formatImgUrl } from "@/common/format"; -import { ORDER_STATUS, PAYMENT_METHOD } from "@/common/enum"; +import { Image, Text, View } from '@tarojs/components' +import { memo, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' import * as dayjs from 'dayjs' +import styles from './index.module.scss' +import { formatDateTime, formatImgUrl } from '@/common/format' +import { ORDER_STATUS, PAYMENT_METHOD } from '@/common/enum' -type List = { - status: string, - time: string, - tag: string, - desc: string, - expire_time: string +interface List { + status: string + time: string + tag: string + desc: string + expire_time: string } -type Param = { - onRefresh?: () => void, - orderInfo?: { - logistics_details: List[], //订单状态列表 - payment_method: number, //支付方式 - status: number, //订单状态 - account_period?: number, //账期 - account_period_time?: string //还款日期 - } +interface Param { + onRefresh?: () => void + orderInfo?: { + logistics_details: List[] // 订单状态列表 + payment_method: number // 支付方式 + status: number // 订单状态 + account_period?: number // 账期 + account_period_time?: string // 还款日期 + } } export default memo(({ orderInfo = { logistics_details: [], payment_method: 0, status: 0 }, onRefresh }: Param) => { - useEffect(() => { - console.log('orderInfo33::', orderInfo) - }, [orderInfo]) + useEffect(() => { + console.log('orderInfo33::', orderInfo) + }, [orderInfo]) - const [showMore, setShowMore] = useState(false) - const changeMore = () => { - setShowMore(() => !showMore) + const [showMore, setShowMore] = useState(false) + const changeMore = () => { + setShowMore(() => !showMore) + } + const dataList = useMemo(() => { + const arr = orderInfo?.logistics_details + if (orderInfo.logistics_details) { + return arr.reverse() } - const dataList = useMemo(() => { - let arr = orderInfo?.logistics_details - if (orderInfo.logistics_details) { - return arr.reverse() - } else { - return [] - } - }, [orderInfo.logistics_details]) + else { + return [] + } + }, [orderInfo.logistics_details]) - - - - return ( - <> - {(dataList?.length > 0) && - - {dataList.map((item, index) => - {(dataList.length > 1) && } - {(dataList.length != (index + 1)) && } - - {item.status} - {formatDateTime(item.time)} - - {item.desc} - )} - - {(dataList.length > 2) && changeMore()}> - {showMore && '收起详情' || '点击查看详情'} - - } - } - - ) + return ( + <> + {(dataList?.length > 0) && + + {dataList.map((item, index) => + {(dataList.length > 1) && } + {(dataList.length != (index + 1)) && } + + {item.status} + {formatDateTime(item.time)} + + {item.desc} + )} + + {(dataList.length > 2) && changeMore()}> + {showMore && '收起详情' || '点击查看详情'} + + } + } + + ) }) diff --git a/src/pages/refundDetail/index.config.ts b/src/pages/refundDetail/index.config.ts index f2ae6e9..619ba00 100644 --- a/src/pages/refundDetail/index.config.ts +++ b/src/pages/refundDetail/index.config.ts @@ -1,5 +1,5 @@ export default { - navigationBarTitleText: '售后详情', - enablePullDownRefresh: true, - "backgroundTextStyle": "dark" + navigationBarTitleText: '售后详情', + enablePullDownRefresh: true, + backgroundTextStyle: 'dark', } diff --git a/src/pages/refundDetail/index.tsx b/src/pages/refundDetail/index.tsx index 677794a..b2315f0 100644 --- a/src/pages/refundDetail/index.tsx +++ b/src/pages/refundDetail/index.tsx @@ -1,439 +1,437 @@ -import { View, Input, Button, Image } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, ReactNode, memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { faceVerifyForPay, useDidShow, useRouter, usePullDownRefresh } from '@tarojs/taro' +import { Button, Image, Input, View } from '@tarojs/components' +import Taro, { faceVerifyForPay, useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import type { ReactNode } from 'react' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import ItemList from './components/itemList' -import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from '@/common/format' -import { - mpreturnApplyOrder, - returnApplyOrdercancel, - returnApplyOrderuploadAccessory -} from "@/api/refound" import OrderState from './components/orderState' import AddressDetailBox from './components/addressDetailBox' -import { IMG_CND_Prefix } from "@/common/constant"; -import Popup from '@/components/popup'; +import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from '@/common/format' +import { + mpreturnApplyOrder, + returnApplyOrdercancel, + returnApplyOrderuploadAccessory, +} from '@/api/refound' +import { IMG_CND_Prefix } from '@/common/constant' +import Popup from '@/components/popup' import UploadImage from '@/components/uploadImage' -import { alert } from '@/common/common'; -import RefundCodelist from "@/components/RefundCodelist" -import LabAndImg from "@/components/LabAndImg" +import { alert } from '@/common/common' +import RefundCodelist from '@/components/RefundCodelist' +import LabAndImg from '@/components/LabAndImg' + export default () => { - //页面下拉刷新 - usePullDownRefresh(() => { - getDetail() + // 页面下拉刷新 + usePullDownRefresh(() => { + getDetail() + }) + const router = useRouter() + useEffect(() => { + getDetail() + }, []) + // 获取详情 + const { fetchData: detailFetch } = mpreturnApplyOrder() + const [DeatailObj, setDeatailObj] = useState({}) + const getDetail = async() => { + Taro.showLoading({ + title: '加载中...', + mask: true, }) - const router = useRouter() - useEffect(() => { - getDetail() - }, []) - //获取详情 - const { fetchData: detailFetch } = mpreturnApplyOrder() - const [DeatailObj, setDeatailObj] = useState({}) - const getDetail = async () => { - Taro.showLoading({ - title: '加载中...', - mask: true + const res = await detailFetch({ id: Number(router.params.id) }) + if (res.data) { + setDeatailObj(res.data) + orderMsg.map((it) => { + if (it.leftTitle === '售后编号:') { + it.rightTitle = res.data.return_order_no + } + if (it.leftTitle === '订单号:') { + it.rightTitle = res.data.order_no + } + if (it.leftTitle === '退货原因:') { + it.rightTitle = res.data.return_reason_name + } + if (it.leftTitle === '退货说明:') { + it.rightTitle = res.data.return_explain_name + } + if (it.leftTitle === '其他说明:') { + it.rightTitle = res.data.reason_describe + } + if (it.leftTitle === '货物状况:') { + it.rightTitle = res.data.goods_status_name + } + if (it.leftTitle === '申请时间:') { + it.rightTitle = formatDateTime(res.data.apply_time) + } + }) + setOrderMsg([...orderMsg]) + setPicList([...res.data?.accessory_url !== null ? res.data?.accessory_url : []]) + Taro.hideLoading() + // 小程序提供的api,通知页面停止下拉刷新效果 + Taro.stopPullDownRefresh() + } + } + + // 分辨用质检中还是质检前的数组 + const productList = useMemo(() => { + if (DeatailObj.stage === 0 + || (DeatailObj.sale_mode == 1 && DeatailObj.type == 1) || DeatailObj.stage === 1 || DeatailObj.stage === 2) { + return DeatailObj.product_list + } + else { + return DeatailObj.quality_check_pass_product + } + }, [DeatailObj]) + + // 订单信息文字数组 + const [orderMsg, setOrderMsg] = useState([ + { + leftTitle: '售后编号:', + rightTitle: '------', + showBtn: true, + }, + { + leftTitle: '订单号:', + rightTitle: '------', + showBtn: true, + }, + { + leftTitle: '退货原因:', + rightTitle: '------', + }, + { + leftTitle: '退货说明:', + rightTitle: '------', + }, + { + leftTitle: '其他说明:', + rightTitle: '------', + }, + { + leftTitle: '货物状况:', + rightTitle: '------', + }, + { + leftTitle: '申请时间:', + rightTitle: '------', + }, + ]) + + // 复制功能 + const clipboardData = (val) => { + Taro.setClipboardData({ + data: val || '', + success(res) { + Taro.showToast({ + icon: 'none', + title: '复制成功', }) - const res = await detailFetch({ id: Number(router.params.id) }) - if (res.data) { - setDeatailObj(res.data) - orderMsg.map(it => { - if (it.leftTitle === '售后编号:') { - it.rightTitle = res.data.return_order_no - } - if (it.leftTitle === '订单号:') { - it.rightTitle = res.data.order_no - } - if (it.leftTitle === '退货原因:') { - it.rightTitle = res.data.return_reason_name - } - if (it.leftTitle === '退货说明:') { - it.rightTitle = res.data.return_explain_name - } - if (it.leftTitle === '其他说明:') { - it.rightTitle = res.data.reason_describe - } - if (it.leftTitle === '货物状况:') { - it.rightTitle = res.data.goods_status_name - } - if (it.leftTitle === '申请时间:') { - it.rightTitle = formatDateTime(res.data.apply_time) - } + }, + }) + } + + // 取消退货 + const { fetchData: cancelFetch } = returnApplyOrdercancel() + const handCancle = async() => { + Taro.showModal({ + content: '确定要取消吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + const res = await cancelFetch({ id: Number(DeatailObj.id) }) + Taro.showLoading({ + title: '请稍等...', + mask: true, + }) + if (res.msg === 'success') { + Taro.showToast({ + title: '取消成功', }) - setOrderMsg([...orderMsg]) - setPicList([...res.data?.accessory_url !== null ? res.data?.accessory_url : []]) Taro.hideLoading() - // 小程序提供的api,通知页面停止下拉刷新效果 - Taro.stopPullDownRefresh(); + getDetail() + } + else { + Taro.showToast({ + title: res.msg, + icon: 'error', + }) + } } - } + }, + }) + } + // 查看图片 + const [ShowPic, setShowPic] = useState(false) - //分辨用质检中还是质检前的数组 - const productList = useMemo(() => { - if (DeatailObj.stage === 0 || - (DeatailObj.sale_mode == 1 && DeatailObj.type == 1) || DeatailObj.stage === 1 || DeatailObj.stage === 2) { - return DeatailObj.product_list - } else { - return DeatailObj.quality_check_pass_product + const [PicList, setPicList] = useState([]) + + const handUp = (value) => { + setShowPic(true) + } + + const onlyRead = useMemo(() => { + if (DeatailObj.stage == 1) { + return false + } + else { + return true + } + }, [DeatailObj]) + + // 获取图片列表 + const picUrl = useRef([]) + const getImageList = useCallback((list) => { + picUrl.current = list + }, []) + + // 提交附件 + const { fetchData: sureFetch } = returnApplyOrderuploadAccessory() + const handSure = () => { + let arr: any = [] + arr = [...picUrl.current] + if (arr == 0) { + return alert.error('请先添加附件') + } + Taro.showModal({ + content: '确定要提交吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + const res = await sureFetch({ id: Number(DeatailObj.id), accessory_url: arr }) + Taro.showLoading({ + title: '请稍等...', + mask: true, + }) + if (res.msg === 'success') { + Taro.showToast({ + title: '成功', + }) + setShowPic(false) + Taro.hideLoading() + getDetail() + } + else { + Taro.showToast({ + title: res.msg, + icon: 'error', + }) + } } - }, [DeatailObj]) + }, + }) + } + const proview = (item) => { + Taro.previewImage({ + current: IMG_CND_Prefix + item, // 当前显示图片的 http 链接 + urls: DeatailObj.fabric_piece_accessory_url.map((item) => { + item = IMG_CND_Prefix + item + return item + }), // 需要预览的图片 http 链接列表 + }) + } + const [ShowCode, setShowCode] = useState(false) + const handSee = () => { + setShowCode(true) + } - - //订单信息文字数组 - const [orderMsg, setOrderMsg] = useState([ + return ( + + + handUp(DeatailObj)} + > + + + {DeatailObj.purchaser_name} + {DeatailObj.purchaser_phone} + + + + + + 总计 + {DeatailObj.total_fabrics} 种面料,{DeatailObj?.total_colors} 种颜色,共 { + DeatailObj?.sale_mode == 0 ? DeatailObj?.return_roll : DeatailObj?.total_number / 100 + } {DeatailObj?.sale_mode == 0 ? '条' : '米'} + { - leftTitle: '售后编号:', - rightTitle: '------', - showBtn: true - }, - { - leftTitle: '订单号:', - rightTitle: '------', - showBtn: true - }, - { - leftTitle: '退货原因:', - rightTitle: '------', - }, - { - leftTitle: '退货说明:', - rightTitle: '------', - }, - { - leftTitle: '其他说明:', - rightTitle: '------', - }, - { - leftTitle: '货物状况:', - rightTitle: '------', - }, - { - leftTitle: '申请时间:', - rightTitle: '------', - } - ]) - - //复制功能 - const clipboardData = (val) => { - Taro.setClipboardData({ - data: val || '', - success: function (res) { - Taro.showToast({ - icon: 'none', - title: '复制成功', - }) - }, - }) - } - - //取消退货 - const { fetchData: cancelFetch } = returnApplyOrdercancel() - const handCancle = async () => { - Taro.showModal({ - content: "确定要取消吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - const res = await cancelFetch({ id: Number(DeatailObj.id) }) - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - if (res.msg === 'success') { - Taro.showToast({ - title: '取消成功' - }) - Taro.hideLoading() - getDetail() - } else { - Taro.showToast({ - title: res.msg, - icon: 'error' - }) - } - } - } - }) - - - } - //查看图片 - const [ShowPic, setShowPic] = useState(false) - - - const [PicList, setPicList] = useState([]) - - const handUp = (value) => { - setShowPic(true) - } - - const onlyRead = useMemo(() => { - if (DeatailObj.stage == 1) { - return false - } else { - return true - } - }, [DeatailObj]) - - //获取图片列表 - const picUrl = useRef([]) - const getImageList = useCallback((list) => { - picUrl.current = list - }, []) - - //提交附件 - const { fetchData: sureFetch } = returnApplyOrderuploadAccessory() - const handSure = () => { - let arr: any = [] - arr = [...picUrl.current] - if (arr == 0) { - return alert.error('请先添加附件') - } - Taro.showModal({ - content: "确定要提交吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - const res = await sureFetch({ id: Number(DeatailObj.id), accessory_url: arr, }) - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - if (res.msg === 'success') { - Taro.showToast({ - title: '成功' - }) - setShowPic(false) - Taro.hideLoading() - getDetail() - } else { - Taro.showToast({ - title: res.msg, - icon: 'error' - }) - } - } - } - }) - } - const proview = (item) => { - Taro.previewImage({ - current: IMG_CND_Prefix + item, // 当前显示图片的 http 链接 - urls: DeatailObj.fabric_piece_accessory_url.map((item) => { - item = IMG_CND_Prefix + item; - return item; - }), // 需要预览的图片 http 链接列表 - }); - }; - const [ShowCode, setShowCode] = useState(false) - const handSee = () => { - setShowCode(true) - } - - return ( - - - handUp(DeatailObj)} - > - - - {DeatailObj.purchaser_name} - {DeatailObj.purchaser_phone} - - - - - - 总计 - {DeatailObj.total_fabrics} 种面料,{DeatailObj?.total_colors} 种颜色,共 { - DeatailObj?.sale_mode == 0 ? DeatailObj?.return_roll : DeatailObj?.total_number / 100 - } {DeatailObj?.sale_mode == 0 ? "条" : "米"} - - { - (DeatailObj.stage == 3) && - - 退款金额 - ¥{ - formatPriceDiv(DeatailObj.refund_amount) - } + (DeatailObj.stage == 3) + && + 退款金额 + ¥{ + formatPriceDiv(DeatailObj.refund_amount) + } - } - - - { - orderMsg.map((item, index) => { - return ( - - - {item.leftTitle} - - - {item.rightTitle} - {item.showBtn && clipboardData(item.rightTitle)}>复制} - - - - ) - }) - } - - - - - { - DeatailObj?.fabric_piece_accessory_url?.length > 0 && DeatailObj?.fabric_piece_accessory_url.map((item, index) => { - return ( - proview(item)} - mode="aspectFill" src={IMG_CND_Prefix + item}> - ) - }) - } - { - DeatailObj?.fabric_piece_accessory_url?.length === 0 && 暂无图片 - } + } + + + { + orderMsg.map((item, index) => { + return ( + + + {item.leftTitle} + + + {item.rightTitle} + {item.showBtn && clipboardData(item.rightTitle)}>复制} - - - - { - (DeatailObj.stage === 0 || DeatailObj.stage === 1) && handCancle()}>取消退货 + + ) + }) + } - } - { - (DeatailObj.sale_mode == 0 && DeatailObj.stage == 3 && (DeatailObj.type == 1 || DeatailObj.type == 3)) && { handSee() }}>查看码单 - } - - - setShowCode(false)} - > - setShowPic(false)}> - <> - - { - - !onlyRead && handSure()}>确认修改 - } - - + + + + { + DeatailObj?.fabric_piece_accessory_url?.length > 0 && DeatailObj?.fabric_piece_accessory_url.map((item, index) => { + return ( + proview(item)} + mode="aspectFill" src={IMG_CND_Prefix + item} + > + ) + }) + } + { + DeatailObj?.fabric_piece_accessory_url?.length === 0 && 暂无图片 + } - ) + + + + + { + (DeatailObj.stage === 0 || DeatailObj.stage === 1) && handCancle()}>取消退货 + + } + { + (DeatailObj.sale_mode == 0 && DeatailObj.stage == 3 && (DeatailObj.type == 1 || DeatailObj.type == 3)) && { handSee() }}>查看码单 + } + + + setShowCode(false)} + > + setShowPic(false)}> + <> + + { + + !onlyRead && handSure()}>确认修改 + } + + + + ) } - - - - interface Obs { - title?: string, - modeName?: string, - showMode?: boolean, - children?: ReactNode, - clickNode?: () => void + title?: string + modeName?: string + showMode?: boolean + children?: ReactNode + clickNode?: () => void } const DefaultBox = memo((props: Obs) => { - const { - title = '标题', - modeName = '大货', - showMode = false, - children, - clickNode - } = props + const { + title = '标题', + modeName = '大货', + showMode = false, + children, + clickNode, + } = props - return ( - - - {title} - { - showMode && clickNode?.()}>{modeName} - } - - - {children} - - ) + return ( + + + {title} + { + showMode && clickNode?.()}>{modeName} + } + + + {children} + + ) }) - interface PropGoods { - // item?: { - // code?: string | number - // } - list: any[], - obj: any + // item?: { + // code?: string | number + // } + list: any[] + obj: any } const GoodsItem = memo((porps: PropGoods) => { - const { list = [], obj = {} } = porps + const { list = [], obj = {} } = porps - const labAndImgObj = useCallback((item) => { - return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url } - }, []) - return ( - <> - { - list.map((item, index) => { - return ( - - {item.code}# {item.name} - { - item.product_colors.map((it, inx) => { - return ( - - { - it.texture_url === '' && - - } - { - it.texture_url !== '' && - - + const labAndImgObj = useCallback((item) => { + return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url } + }, []) + return ( + <> + { + list.map((item, index) => { + return ( + + {item.code}# {item.name} + { + item.product_colors.map((it, inx) => { + return ( + + { + it.texture_url === '' + && + } + { + it.texture_url !== '' + && + - } - - - - {it.code}# {it.name} - {/* x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} */} - { - obj.sale_mode == 0 && x{obj.stage == 0 || obj.stage == 1 || obj.stage == 2 - ? it.roll - : obj.stage == 5 || obj.stage == 6 || obj.stage == 3 - ? it.return_roll - : it.roll}{obj?.sale_mode == 0 ? '条' : 'm'} - } - { - obj.sale_mode != 0 && x{it.length / 100}m - } - - - ¥{it.sale_price / 100}/{obj?.sale_mode == 0 ? 'kg' : 'm'} - {/* ¥{formatPriceDiv(it.total_sale_price)} */} - - - - ) - }) - } + } + + + + {it.code}# {it.name} + {/* x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} */} + { + obj.sale_mode == 0 && x{obj.stage == 0 || obj.stage == 1 || obj.stage == 2 + ? it.roll + : obj.stage == 5 || obj.stage == 6 || obj.stage == 3 + ? it.return_roll + : it.roll}{obj?.sale_mode == 0 ? '条' : 'm'} + } + { + obj.sale_mode != 0 && x{it.length / 100}m + } - ) + + ¥{it.sale_price / 100}/{obj?.sale_mode == 0 ? 'kg' : 'm'} + {/* ¥{formatPriceDiv(it.total_sale_price)} */} + + + + ) }) - } - + } + + ) + }) + } + - ) -}) \ No newline at end of file + ) +}) diff --git a/src/pages/refundMoneyDetail/components/addressDetailBox/index.tsx b/src/pages/refundMoneyDetail/components/addressDetailBox/index.tsx index 196395a..98a0518 100644 --- a/src/pages/refundMoneyDetail/components/addressDetailBox/index.tsx +++ b/src/pages/refundMoneyDetail/components/addressDetailBox/index.tsx @@ -1,49 +1,49 @@ -import { Image, Text, View } from "@tarojs/components"; -import { memo, useEffect, useMemo, useRef, useState } from "react"; -import classnames from "classnames"; +import { Image, Text, View } from '@tarojs/components' +import { memo, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' import styles from './index.module.scss' interface propsObj { - receivingStatus?: Number | null, - onReceivingStatus?: (any, Number) => void, - obj: any, - handUp?: (any) => void + receivingStatus?: Number | null + onReceivingStatus?: (any, Number) => void + obj: any + handUp?: (any) => void } export default memo((props: propsObj) => { + const { + obj = {}, + handUp, + } = props - const { - obj = {}, - handUp - } = props + const seeFont = useMemo(() => { + if (obj.stage == 1) { + return '上传物流回单' + } + else { + return '查看物流回单' + } + }, [obj]) - const seeFont = useMemo(() => { - if (obj.stage == 1) { - return '上传物流回单' - } else { - return '查看物流回单' - } - }, [obj]) + return ( + + 请按以下退货地址寄回货物并提供退货物流信息 + + + + + 广东省佛山市禅城区陆盈纺织仓库 + + + + 谭先生 + {13242128982} - return ( - - 请按以下退货地址寄回货物并提供退货物流信息 - - - - - {'广东省佛山市禅城区陆盈纺织仓库'} - - - - {'谭先生'} - {13242128982} + handUp?.(obj)}>{seeFont} - handUp?.(obj)}>{seeFont} - - {/* { + {/* { obj.stage !== 1 && } */} - - - ) -}) \ No newline at end of file + + + ) +}) diff --git a/src/pages/refundMoneyDetail/components/orderState/index.tsx b/src/pages/refundMoneyDetail/components/orderState/index.tsx index a2dbd37..d7a721b 100644 --- a/src/pages/refundMoneyDetail/components/orderState/index.tsx +++ b/src/pages/refundMoneyDetail/components/orderState/index.tsx @@ -1,70 +1,68 @@ -import { Image, Text, View } from "@tarojs/components" -import { memo, useEffect, useMemo, useRef, useState } from "react" -import styles from './index.module.scss' -import classnames from "classnames"; -import { formatDateTime, formatImgUrl } from "@/common/format"; -import { ORDER_STATUS, PAYMENT_METHOD } from "@/common/enum"; +import { Image, Text, View } from '@tarojs/components' +import { memo, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' import * as dayjs from 'dayjs' +import styles from './index.module.scss' +import { formatDateTime, formatImgUrl } from '@/common/format' +import { ORDER_STATUS, PAYMENT_METHOD } from '@/common/enum' -type List = { - status: string, - time: string, - tag: string, - desc: string, - expire_time: string +interface List { + status: string + time: string + tag: string + desc: string + expire_time: string } -type Param = { - onRefresh?: () => void, - orderInfo?: { - logistics_details: List[], //订单状态列表 - payment_method: number, //支付方式 - status: number, //订单状态 - account_period?: number, //账期 - account_period_time?: string //还款日期 - } +interface Param { + onRefresh?: () => void + orderInfo?: { + logistics_details: List[] // 订单状态列表 + payment_method: number // 支付方式 + status: number // 订单状态 + account_period?: number // 账期 + account_period_time?: string // 还款日期 + } } export default memo(({ orderInfo = { logistics_details: [], payment_method: 0, status: 0 }, onRefresh }: Param) => { - useEffect(() => { - console.log('orderInfo33::', orderInfo) - }, [orderInfo]) + useEffect(() => { + console.log('orderInfo33::', orderInfo) + }, [orderInfo]) - const [showMore, setShowMore] = useState(false) - const changeMore = () => { - setShowMore(() => !showMore) + const [showMore, setShowMore] = useState(false) + const changeMore = () => { + setShowMore(() => !showMore) + } + const dataList = useMemo(() => { + const arr = orderInfo?.logistics_details + if (orderInfo.logistics_details) { + return arr.reverse() } - const dataList = useMemo(() => { - let arr = orderInfo?.logistics_details - if (orderInfo.logistics_details) { - return arr.reverse() - } else { - return [] - } - }, [orderInfo.logistics_details]) + else { + return [] + } + }, [orderInfo.logistics_details]) - - - - return ( - <> - {(dataList?.length > 0) && - - {dataList.map((item, index) => - {(dataList.length > 1) && } - {(dataList.length != (index + 1)) && } - - {item.status} - {formatDateTime(item.time)} - - {item.desc} - )} - - {(dataList.length > 2) && changeMore()}> - {showMore && '收起详情' || '点击查看详情'} - - } - } - - ) + return ( + <> + {(dataList?.length > 0) && + + {dataList.map((item, index) => + {(dataList.length > 1) && } + {(dataList.length != (index + 1)) && } + + {item.status} + {formatDateTime(item.time)} + + {item.desc} + )} + + {(dataList.length > 2) && changeMore()}> + {showMore && '收起详情' || '点击查看详情'} + + } + } + + ) }) diff --git a/src/pages/refundMoneyDetail/index.config.ts b/src/pages/refundMoneyDetail/index.config.ts index f2ae6e9..619ba00 100644 --- a/src/pages/refundMoneyDetail/index.config.ts +++ b/src/pages/refundMoneyDetail/index.config.ts @@ -1,5 +1,5 @@ export default { - navigationBarTitleText: '售后详情', - enablePullDownRefresh: true, - "backgroundTextStyle": "dark" + navigationBarTitleText: '售后详情', + enablePullDownRefresh: true, + backgroundTextStyle: 'dark', } diff --git a/src/pages/refundMoneyDetail/index.tsx b/src/pages/refundMoneyDetail/index.tsx index 76c66d9..9bf836a 100644 --- a/src/pages/refundMoneyDetail/index.tsx +++ b/src/pages/refundMoneyDetail/index.tsx @@ -1,414 +1,408 @@ -import { View, Input, Button, Image } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, ReactNode, memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { faceVerifyForPay, useDidShow, useRouter, usePullDownRefresh } from '@tarojs/taro' +import { Button, Image, Input, View } from '@tarojs/components' +import Taro, { faceVerifyForPay, useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import type { ReactNode } from 'react' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import ItemList from './components/itemList' +import OrderState from './components/orderState' import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from '@/common/format' import { - mpreturnApplyOrder, - returnApplyOrdercancel, - returnApplyOrderuploadAccessory -} from "@/api/refound" -import OrderState from './components/orderState' + mpreturnApplyOrder, + returnApplyOrdercancel, + returnApplyOrderuploadAccessory, +} from '@/api/refound' // import AddressDetailBox from './components/addressDetailBox' -import { IMG_CND_Prefix } from "@/common/constant"; -import RefundCodelist from "@/components/RefundCodelist" -import LabAndImg from "@/components/LabAndImg" +import { IMG_CND_Prefix } from '@/common/constant' +import RefundCodelist from '@/components/RefundCodelist' +import LabAndImg from '@/components/LabAndImg' + export default () => { - const router = useRouter() - useEffect(() => { - getDetail() - }, []) - //页面下拉刷新 - usePullDownRefresh(() => { - getDetail() + const router = useRouter() + useEffect(() => { + getDetail() + }, []) + // 页面下拉刷新 + usePullDownRefresh(() => { + getDetail() + }) + + // 获取详情 + const { fetchData: detailFetch } = mpreturnApplyOrder() + const [DeatailObj, setDeatailObj] = useState({}) + const getDetail = async() => { + Taro.showLoading({ + title: '加载中...', + mask: true, }) + const res = await detailFetch({ id: Number(router.params.id) }) + if (res.data) { + setDeatailObj(res.data) + orderMsg.map((it) => { + if (it.leftTitle === '售后编号:') { + it.rightTitle = res.data.return_order_no + } + if (it.leftTitle === '订单号:') { + it.rightTitle = res.data.order_no + } + if (it.leftTitle === '退货原因:') { + it.rightTitle = res.data.return_reason_name + } + if (it.leftTitle === '退货说明:') { + it.rightTitle = res.data.return_explain_name + } + if (it.leftTitle === '其他说明:') { + it.rightTitle = res.data.reason_describe + } + // if (it.leftTitle === '货物状况:') { + // it.rightTitle = res.data.goods_status_name + // } + if (it.leftTitle === '申请时间:') { + it.rightTitle = formatDateTime(res.data.apply_time) + } + }) + setOrderMsg([...orderMsg]) + Taro.stopPullDownRefresh() + // setPicList([...res.data?.accessory_url !== null ? res.data?.accessory_url : []]) + Taro.hideLoading() + } + } + // 分辨用质检中还是质检前的数组 + const productList = useMemo(() => { + if (DeatailObj?.stage == 0 || DeatailObj?.type == 3 || DeatailObj?.type == 2) { + return DeatailObj?.product_list + } + else { + return DeatailObj?.quality_check_pass_product + } + }, [DeatailObj]) - //获取详情 - const { fetchData: detailFetch } = mpreturnApplyOrder() - const [DeatailObj, setDeatailObj] = useState({}) - const getDetail = async () => { - Taro.showLoading({ - title: '加载中...', - mask: true + // 订单信息文字数组 + const [orderMsg, setOrderMsg] = useState([ + { + leftTitle: '售后编号:', + rightTitle: '------', + showBtn: true, + }, + { + leftTitle: '订单号:', + rightTitle: '------', + showBtn: true, + }, + { + leftTitle: '退货原因:', + rightTitle: '------', + }, + { + leftTitle: '退货说明:', + rightTitle: '------', + }, + { + leftTitle: '其他说明:', + rightTitle: '------', + }, + // { + // leftTitle: '货物状况:', + // rightTitle: '------', + // }, + { + leftTitle: '申请时间:', + rightTitle: '------', + }, + ]) + + // 复制功能 + const clipboardData = (val) => { + Taro.setClipboardData({ + data: val || '', + success(res) { + Taro.showToast({ + icon: 'none', + title: '复制成功', }) - const res = await detailFetch({ id: Number(router.params.id) }) - if (res.data) { - setDeatailObj(res.data) - orderMsg.map(it => { - if (it.leftTitle === '售后编号:') { - it.rightTitle = res.data.return_order_no - } - if (it.leftTitle === '订单号:') { - it.rightTitle = res.data.order_no - } - if (it.leftTitle === '退货原因:') { - it.rightTitle = res.data.return_reason_name - } - if (it.leftTitle === '退货说明:') { - it.rightTitle = res.data.return_explain_name - } - if (it.leftTitle === '其他说明:') { - it.rightTitle = res.data.reason_describe - } - // if (it.leftTitle === '货物状况:') { - // it.rightTitle = res.data.goods_status_name - // } - if (it.leftTitle === '申请时间:') { - it.rightTitle = formatDateTime(res.data.apply_time) - } + }, + }) + } + + // 取消退货 + const { fetchData: cancelFetch } = returnApplyOrdercancel() + const handCancle = async() => { + Taro.showModal({ + content: '确定要取消吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + const res = await cancelFetch({ id: Number(DeatailObj.id) }) + Taro.showLoading({ + title: '请稍等...', + mask: true, + }) + if (res.msg === 'success') { + Taro.showToast({ + title: '取消成功', }) - setOrderMsg([...orderMsg]) - Taro.stopPullDownRefresh(); - // setPicList([...res.data?.accessory_url !== null ? res.data?.accessory_url : []]) Taro.hideLoading() + getDetail() + } + else { + Taro.showToast({ + title: res.msg, + icon: 'error', + }) + } } - } + }, + }) + } + // //查看图片 + // const [ShowPic, setShowPic] = useState(false) - //分辨用质检中还是质检前的数组 - const productList = useMemo(() => { - if (DeatailObj?.stage == 0 || DeatailObj?.type == 3 || DeatailObj?.type == 2) { - return DeatailObj?.product_list - } else { - return DeatailObj?.quality_check_pass_product - } - }, [DeatailObj]) + // const [PicList, setPicList] = useState([]) + // const handUp = (value) => { + // setShowPic(true) + // } - //订单信息文字数组 - const [orderMsg, setOrderMsg] = useState([ - { - leftTitle: '售后编号:', - rightTitle: '------', - showBtn: true - }, - { - leftTitle: '订单号:', - rightTitle: '------', - showBtn: true - }, - { - leftTitle: '退货原因:', - rightTitle: '------', - }, - { - leftTitle: '退货说明:', - rightTitle: '------', - }, - { - leftTitle: '其他说明:', - rightTitle: '------', - }, - // { - // leftTitle: '货物状况:', - // rightTitle: '------', - // }, - { - leftTitle: '申请时间:', - rightTitle: '------', - } - ]) + // const onlyRead = useMemo(() => { + // if (DeatailObj.stage == 1) { + // return false + // } else { + // return true + // } + // }, [DeatailObj]) - //复制功能 - const clipboardData = (val) => { - Taro.setClipboardData({ - data: val || '', - success: function (res) { - Taro.showToast({ - icon: 'none', - title: '复制成功', - }) - }, - }) - } + // //获取图片列表 + // const picUrl = useRef([]) + // const getImageList = useCallback((list) => { + // picUrl.current = list + // }, []) - //取消退货 - const { fetchData: cancelFetch } = returnApplyOrdercancel() - const handCancle = async () => { - Taro.showModal({ - content: "确定要取消吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - const res = await cancelFetch({ id: Number(DeatailObj.id) }) - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - if (res.msg === 'success') { - Taro.showToast({ - title: '取消成功' - }) - Taro.hideLoading() - getDetail() - } else { - Taro.showToast({ - title: res.msg, - icon: 'error' - }) - } - } - } - }) + const proview = (item) => { + Taro.previewImage({ + current: IMG_CND_Prefix + item, // 当前显示图片的 http 链接 + urls: DeatailObj.fabric_piece_accessory_url.map((item) => { + item = IMG_CND_Prefix + item + return item + }), // 需要预览的图片 http 链接列表 + }) + } + const [ShowCode, setShowCode] = useState(false) + const handSee = () => { + setShowCode(true) + } - - } - // //查看图片 - // const [ShowPic, setShowPic] = useState(false) - - - // const [PicList, setPicList] = useState([]) - - // const handUp = (value) => { - // setShowPic(true) - // } - - // const onlyRead = useMemo(() => { - // if (DeatailObj.stage == 1) { - // return false - // } else { - // return true - // } - // }, [DeatailObj]) - - // //获取图片列表 - // const picUrl = useRef([]) - // const getImageList = useCallback((list) => { - // picUrl.current = list - // }, []) - - - const proview = (item) => { - Taro.previewImage({ - current: IMG_CND_Prefix + item, // 当前显示图片的 http 链接 - urls: DeatailObj.fabric_piece_accessory_url.map((item) => { - item = IMG_CND_Prefix + item; - return item; - }), // 需要预览的图片 http 链接列表 - }); - }; - const [ShowCode, setShowCode] = useState(false) - const handSee = () => { - setShowCode(true) - } - - return ( - - - {/* + + {/* handUp(DeatailObj)} > */} - - - {DeatailObj.purchaser_name} - {DeatailObj.purchaser_phone} - - - - - - 总计 - {DeatailObj.total_fabrics} 种面料,{DeatailObj?.total_colors} 种颜色,共 { - DeatailObj?.sale_mode == 0 ? DeatailObj?.return_roll : DeatailObj?.total_number / 100 - } {DeatailObj?.sale_mode == 0 ? "条" : "米"} - - { - DeatailObj.stage == 0 && - - 合计金额 - ¥{ - formatPriceDiv(DeatailObj.total_refund_amount) - } - - } - { - (DeatailObj.stage == 3) && - 退款金额 - ¥{ - formatPriceDiv(DeatailObj.refund_amount) - } - - } - { - (DeatailObj.stage == 3) && - 其他扣除金额 - ¥{ - formatPriceDiv(DeatailObj.other_deduction_amount) - } - - } - { - (DeatailObj.stage == 3) && - 退款去向 - { - DeatailObj.refund_flow_name - } - - } - - - { - orderMsg.map((item, index) => { - return ( - - - {item.leftTitle} - - - {item.rightTitle} - {item.showBtn && clipboardData(item.rightTitle)}>复制} - - - - ) - }) - } - - - - - { - DeatailObj?.fabric_piece_accessory_url?.length > 0 && DeatailObj?.fabric_piece_accessory_url.map((item, index) => { - return ( - proview(item)} - mode="aspectFill" src={IMG_CND_Prefix + item}> - ) - }) - } - { - DeatailObj?.fabric_piece_accessory_url?.length === 0 && 暂无图片 - } - - - - - { - (DeatailObj.stage === 0 || DeatailObj.stage === 1) && handCancle()}>取消退货 - - } - { - (DeatailObj.sale_mode == 0 && DeatailObj.stage == 3 && (DeatailObj.type == 1 || DeatailObj.type == 3)) && { handSee() }}>查看码单 - } - - - setShowCode(false)} - > + + + {DeatailObj.purchaser_name} + {DeatailObj.purchaser_phone} - ) + + + + + 总计 + {DeatailObj.total_fabrics} 种面料,{DeatailObj?.total_colors} 种颜色,共 { + DeatailObj?.sale_mode == 0 ? DeatailObj?.return_roll : DeatailObj?.total_number / 100 + } {DeatailObj?.sale_mode == 0 ? '条' : '米'} + + { + DeatailObj.stage == 0 && + + 合计金额 + ¥{ + formatPriceDiv(DeatailObj.total_refund_amount) + } + + } + { + (DeatailObj.stage == 3) && + 退款金额 + ¥{ + formatPriceDiv(DeatailObj.refund_amount) + } + + } + { + (DeatailObj.stage == 3) && + 其他扣除金额 + ¥{ + formatPriceDiv(DeatailObj.other_deduction_amount) + } + + } + { + (DeatailObj.stage == 3) && + 退款去向 + { + DeatailObj.refund_flow_name + } + + } + + + { + orderMsg.map((item, index) => { + return ( + + + {item.leftTitle} + + + {item.rightTitle} + {item.showBtn && clipboardData(item.rightTitle)}>复制} + + + + ) + }) + } + + + + + { + DeatailObj?.fabric_piece_accessory_url?.length > 0 && DeatailObj?.fabric_piece_accessory_url.map((item, index) => { + return ( + proview(item)} + mode="aspectFill" src={IMG_CND_Prefix + item} + > + ) + }) + } + { + DeatailObj?.fabric_piece_accessory_url?.length === 0 && 暂无图片 + } + + + + + { + (DeatailObj.stage === 0 || DeatailObj.stage === 1) && handCancle()}>取消退货 + + } + { + (DeatailObj.sale_mode == 0 && DeatailObj.stage == 3 && (DeatailObj.type == 1 || DeatailObj.type == 3)) && { handSee() }}>查看码单 + } + + + setShowCode(false)} + > + + ) } - - - - interface Obs { - title?: string, - modeName?: string, - showMode?: boolean, - children?: ReactNode, - clickNode?: () => void + title?: string + modeName?: string + showMode?: boolean + children?: ReactNode + clickNode?: () => void } const DefaultBox = memo((props: Obs) => { - const { - title = '标题', - modeName = '大货', - showMode = false, - children, - clickNode - } = props + const { + title = '标题', + modeName = '大货', + showMode = false, + children, + clickNode, + } = props - return ( - - - {title} - { - showMode && clickNode?.()}>{modeName} - } - - - {children} - - ) + return ( + + + {title} + { + showMode && clickNode?.()}>{modeName} + } + + + {children} + + ) }) - interface PropGoods { - // item?: { - // code?: string | number - // } - list: any[], - obj: any + // item?: { + // code?: string | number + // } + list: any[] + obj: any } const GoodsItem = memo((porps: PropGoods) => { - const { list = [], obj = {} } = porps - const labAndImgObj = useCallback((item) => { - return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url } - }, []) - return ( - <> - { - list.map((item, index) => { - return ( - - {item.code}# {item.name} - { - item?.product_colors.map((it, inx) => { - return ( - - { - it.texture_url === '' && - - } - { - it.texture_url !== '' && - - + const { list = [], obj = {} } = porps + const labAndImgObj = useCallback((item) => { + return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url } + }, []) + return ( + <> + { + list.map((item, index) => { + return ( + + {item.code}# {item.name} + { + item?.product_colors.map((it, inx) => { + return ( + + { + it.texture_url === '' + && + } + { + it.texture_url !== '' + && + - } - {/* */} - - - - {it.code}# {it.name} - {/* x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} */} - { - obj.sale_mode == 0 && x{obj.stage == 0 || obj.stage == 1 || obj.stage == 2 - ? it.roll - : obj.stage == 5 || obj.stage == 6 || obj.stage == 3 - ? it.return_roll - : it.roll}{obj?.sale_mode == 0 ? '条' : 'm'} - } - { - obj.sale_mode != 0 && x{it.length / 100}m - } - - - ¥{it.sale_price / 100}/{obj?.sale_mode == 0 ? 'kg' : 'm'} - {/* ¥{formatPriceDiv(it.total_sale_price)} */} - - - - ) - }) - } + } + {/* */} + + + + {it.code}# {it.name} + {/* x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} */} + { + obj.sale_mode == 0 && x{obj.stage == 0 || obj.stage == 1 || obj.stage == 2 + ? it.roll + : obj.stage == 5 || obj.stage == 6 || obj.stage == 3 + ? it.return_roll + : it.roll}{obj?.sale_mode == 0 ? '条' : 'm'} + } + { + obj.sale_mode != 0 && x{it.length / 100}m + } - ) + + ¥{it.sale_price / 100}/{obj?.sale_mode == 0 ? 'kg' : 'm'} + {/* ¥{formatPriceDiv(it.total_sale_price)} */} + + + + ) }) - } - + } + + ) + }) + } + - ) -}) \ No newline at end of file + ) +}) diff --git a/src/pages/refundPage/components/itemList/index.tsx b/src/pages/refundPage/components/itemList/index.tsx index a5c5df0..1cca9ab 100644 --- a/src/pages/refundPage/components/itemList/index.tsx +++ b/src/pages/refundPage/components/itemList/index.tsx @@ -1,128 +1,127 @@ -import { ScrollView, View, Image } from '@tarojs/components' +import { Image, ScrollView, View } from '@tarojs/components' +import Taro from '@tarojs/taro' import { memo, useCallback, useEffect, useMemo, useState } from 'react' -import styles from './index.module.scss' import classnames from 'classnames' +import styles from './index.module.scss' // import BottomBtns from '@/components/BottomBtns' import { formatPriceDiv } from '@/common/format' -import Taro from '@tarojs/taro' -import LabAndImg from "@/components/LabAndImg" +import LabAndImg from '@/components/LabAndImg' + interface propsObj { - obj: any, - cancle?: (arg: any, obj: any) => void, - nextBuy?: (arg: any, obj: any) => void, - toPay?: (arg: any, obj: any) => void - handSee?: (any) => void + obj: any + cancle?: (arg: any, obj: any) => void + nextBuy?: (arg: any, obj: any) => void + toPay?: (arg: any, obj: any) => void + handSee?: (any) => void } - export default memo((props: propsObj) => { - const navTo = (e) => { - if (e.type == 1) { - Taro.navigateTo({ - url: '/pages/refundDetail/index?id=' + props?.obj?.id - }) - } else { - Taro.navigateTo({ - url: '/pages/refundMoneyDetail/index?id=' + props?.obj?.id - }) - } - + const navTo = (e) => { + if (e.type == 1) { + Taro.navigateTo({ + url: `/pages/refundDetail/index?id=${props?.obj?.id}`, + }) } + else { + Taro.navigateTo({ + url: `/pages/refundMoneyDetail/index?id=${props?.obj?.id}`, + }) + } + } - const labAndImgObj = useCallback((item) => { - return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url } - }, []) + const labAndImgObj = useCallback((item) => { + return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url } + }, []) - - return ( - navTo(props.obj)}> - - 单号:{props?.obj?.order_no} - {props?.obj?.stage_name} - - {props?.obj?.purchaser_name} - - - - - { - props?.obj?.product_list[0]?.texture_url === '' && - - } - { - props?.obj?.product_list[0]?.texture_url !== '' && - <> - - - } - 颜色 ({props?.obj?.total_colors}) - - - - - - {props?.obj?.product_list[0]?.code} {props?.obj?.product_list[0]?.name} - {props?.obj?.sale_mode === 0 ? '大货' : props?.obj?.sale_mode === 1 ? '剪版' : '散剪'} - - {props?.obj?.shipment_mode_name} - - - {props?.obj?.product_list[0]?.product_colors[0]?.code} {props?.obj?.product_list[0]?.product_colors[0]?.name} - x{ - props?.obj?.product_list && props?.obj.sale_mode === 0 - ? (props?.obj?.product_list && props?.obj.stage == 0) || - props?.obj.stage == 1 || - props?.obj.stage == 2 - ? props?.obj?.product_list[0]?.product_colors[0]?.roll - : props?.obj.stage == 5 || props?.obj.stage == 6 || props?.obj.stage == 3 - ? props?.obj?.product_list[0]?.product_colors[0]?.return_roll - : props?.obj?.product_list[0]?.product_colors[0]?.roll - : props?.obj?.product_list && - props?.obj?.product_list[0]?.product_colors[0]?.length / 100 - } {props?.obj?.sale_mode === 0 ? '条' : 'm'} - ¥ {props?.obj?.product_list[0]?.product_colors[0]?.sale_price / 100}/kg - - { - props?.obj?.product_list[0]?.product_colors?.length > 1 && <> - - {props?.obj?.product_list[0]?.product_colors[1]?.code} {props?.obj?.product_list[0]?.product_colors[1]?.name} - x{ - props?.obj?.product_list && props?.obj.sale_mode === 0 - ? (props?.obj?.product_list && props?.obj.stage == 0) || - props?.obj.stage == 1 || - props?.obj.stage == 2 - ? props?.obj?.product_list[0]?.product_colors[1]?.roll - : props?.obj.stage == 5 || props?.obj.stage == 6 || props?.obj.stage == 3 - ? props?.obj?.product_list[0]?.product_colors[1]?.return_roll - : props?.obj?.product_list[0]?.product_colors[1]?.roll - : props?.obj?.product_list && - props?.obj?.product_list[0]?.product_colors[1]?.length / 100 - } {props?.obj?.sale_mode === 0 ? '条' : 'm'} - ¥ {props?.obj?.product_list[0]?.product_colors[1]?.sale_price / 100}/kg - - - } - - - - - 布料信息: - {props?.obj?.total_fabrics} 种面料,{ - props?.obj?.total_colors - } 种颜色,共 {props?.obj?.sale_mode === 0 ? props?.obj?.total_number : props?.obj?.total_number / 100} {props?.obj?.sale_mode === 0 ? '条' : 'm'} - + return ( + navTo(props.obj)}> + + 单号:{props?.obj?.order_no} + {props?.obj?.stage_name} + + {props?.obj?.purchaser_name} + + + + { - (props?.obj.stage == 3) && - 退款金额: - - ¥{formatPriceDiv(props?.obj?.refund_amount)} - + props?.obj?.product_list[0]?.texture_url === '' + && } { - (props.obj.sale_mode == 0 && props?.obj.stage == 3 && (props?.obj.type == 1 || props?.obj.type == 3)) && - { props?.handSee?.(e) }}>查看码单 - + props?.obj?.product_list[0]?.texture_url !== '' + && <> + + } + 颜色 ({props?.obj?.total_colors}) + - ) -}) \ No newline at end of file + + + + {props?.obj?.product_list[0]?.code} {props?.obj?.product_list[0]?.name} + {props?.obj?.sale_mode === 0 ? '大货' : props?.obj?.sale_mode === 1 ? '剪版' : '散剪'} + + {props?.obj?.shipment_mode_name} + + + {props?.obj?.product_list[0]?.product_colors[0]?.code} {props?.obj?.product_list[0]?.product_colors[0]?.name} + x{ + props?.obj?.product_list && props?.obj.sale_mode === 0 + ? (props?.obj?.product_list && props?.obj.stage == 0) + || props?.obj.stage == 1 + || props?.obj.stage == 2 + ? props?.obj?.product_list[0]?.product_colors[0]?.roll + : props?.obj.stage == 5 || props?.obj.stage == 6 || props?.obj.stage == 3 + ? props?.obj?.product_list[0]?.product_colors[0]?.return_roll + : props?.obj?.product_list[0]?.product_colors[0]?.roll + : props?.obj?.product_list + && props?.obj?.product_list[0]?.product_colors[0]?.length / 100 + } {props?.obj?.sale_mode === 0 ? '条' : 'm'} + ¥ {props?.obj?.product_list[0]?.product_colors[0]?.sale_price / 100}/kg + + { + props?.obj?.product_list[0]?.product_colors?.length > 1 && <> + + {props?.obj?.product_list[0]?.product_colors[1]?.code} {props?.obj?.product_list[0]?.product_colors[1]?.name} + x{ + props?.obj?.product_list && props?.obj.sale_mode === 0 + ? (props?.obj?.product_list && props?.obj.stage == 0) + || props?.obj.stage == 1 + || props?.obj.stage == 2 + ? props?.obj?.product_list[0]?.product_colors[1]?.roll + : props?.obj.stage == 5 || props?.obj.stage == 6 || props?.obj.stage == 3 + ? props?.obj?.product_list[0]?.product_colors[1]?.return_roll + : props?.obj?.product_list[0]?.product_colors[1]?.roll + : props?.obj?.product_list + && props?.obj?.product_list[0]?.product_colors[1]?.length / 100 + } {props?.obj?.sale_mode === 0 ? '条' : 'm'} + ¥ {props?.obj?.product_list[0]?.product_colors[1]?.sale_price / 100}/kg + + + } + + + + + 布料信息: + {props?.obj?.total_fabrics} 种面料,{ + props?.obj?.total_colors + } 种颜色,共 {props?.obj?.sale_mode === 0 ? props?.obj?.total_number : props?.obj?.total_number / 100} {props?.obj?.sale_mode === 0 ? '条' : 'm'} + + { + (props?.obj.stage == 3) && + 退款金额: + + ¥{formatPriceDiv(props?.obj?.refund_amount)} + + } + { + (props.obj.sale_mode == 0 && props?.obj.stage == 3 && (props?.obj.type == 1 || props?.obj.type == 3)) && + { props?.handSee?.(e) }}>查看码单 + + } + + ) +}) diff --git a/src/pages/refundPage/components/tabs/index.tsx b/src/pages/refundPage/components/tabs/index.tsx index 6ed5f40..7ce8be6 100644 --- a/src/pages/refundPage/components/tabs/index.tsx +++ b/src/pages/refundPage/components/tabs/index.tsx @@ -1,32 +1,32 @@ -import { View, Input, Button } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; +import { Button, Input, View } from '@tarojs/components' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' interface Props { - list: any[], - handChose?: (any) => void + list: any[] + handChose?: (any) => void } export default memo((props: Props) => { - const { list = [], handChose } = props + const { list = [], handChose } = props - return ( - - { - list.map((item, index) => { - return ( - handChose?.(item)}> - + { + list.map((item, index) => { + return ( + handChose?.(item)}> + {item?.name} - { - item.showBorder && - } - - ) - }) - } - - ) -}) \ No newline at end of file + >{item?.name} + { + item.showBorder && + } + + ) + }) + } + + ) +}) diff --git a/src/pages/refundPage/index.config.ts b/src/pages/refundPage/index.config.ts index cb0dbd7..9889566 100644 --- a/src/pages/refundPage/index.config.ts +++ b/src/pages/refundPage/index.config.ts @@ -1,5 +1,5 @@ export default { - navigationBarTitleText: '退款/售后', - // enablePullDownRefresh: true, - // "backgroundTextStyle": "dark" + navigationBarTitleText: '退款/售后', + // enablePullDownRefresh: true, + // "backgroundTextStyle": "dark" } diff --git a/src/pages/refundPage/index.tsx b/src/pages/refundPage/index.tsx index 97c7e25..2b5a6de 100644 --- a/src/pages/refundPage/index.tsx +++ b/src/pages/refundPage/index.tsx @@ -1,422 +1,418 @@ -import { View, Input, Button, ScrollView } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, } from 'react' +import { Button, Input, ScrollView, View } from '@tarojs/components' +import Taro, { faceVerifyForPay, useDidShow } from '@tarojs/taro' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import dayjs from 'dayjs' +import styles from './index.module.scss' +import ItemList from './components/itemList' +import Tabs from './components/tabs' import Search from '@/components/search' import { dataLoadingStatus, getFilterData } from '@/common/util' -import styles from "./index.module.scss" -import classnames from "classnames"; import Popup from '@/components/popup' import InfiniteScroll from '@/components/infiniteScroll' -import Taro, { faceVerifyForPay, useDidShow } from '@tarojs/taro' -import ItemList from './components/itemList' import { formatDateTime, formatHashTag, formatImgUrl, formatPriceDiv, formatWeightDiv } from '@/common/format' import { - mpreturnApplyOrderlist, - mpenumreturnStage, - mpenumreturnType -} from "@/api/refound" -import Tabs from "./components/tabs" + mpenumreturnStage, + mpenumreturnType, + mpreturnApplyOrderlist, +} from '@/api/refound' import TimePickerPopup from '@/components/timePickerPopup' -import dayjs from 'dayjs' import IconFont from '@/components/iconfont/iconfont' -import RefundCodelist from "@/components/RefundCodelist" +import RefundCodelist from '@/components/RefundCodelist' + export default () => { - //页码和页数 + // 页码和页数 - const [searchField, setSearchField] = useState< - { - status: number | unknown; - page: number; - size: number; - name: string; - sale_mode: number | string; - stage: number | string; - return_type: number | string; - sale_start_time: number | string; - sale_end_time: number | string; - }>({ - status: 1, - page: 1, - size: 10, - name: '', - sale_mode: '不限', - stage: '不限', - return_type: '不限', - sale_start_time: '', - sale_end_time: '' - }) - const pageNum = useRef({ size: searchField.size, page: searchField.page }) + const [searchField, setSearchField] = useState< + { + status: number | unknown + page: number + size: number + name: string + sale_mode: number | string + stage: number | string + return_type: number | string + sale_start_time: number | string + sale_end_time: number | string + }>({ + status: 1, + page: 1, + size: 10, + name: '', + sale_mode: '不限', + stage: '不限', + return_type: '不限', + sale_start_time: '', + sale_end_time: '', + }) + const pageNum = useRef({ size: searchField.size, page: searchField.page }) - //监听筛选条件变化 - useEffect(() => { - getOrderList() - }, [searchField.size, searchField.name, searchField.status]) + // 监听筛选条件变化 + useEffect(() => { + getOrderList() + }, [searchField.size, searchField.name, searchField.status]) - //获取订单列表 - const { fetchData: listFetchData, state: orderState } = mpreturnApplyOrderlist() - const [orderData, setOrderData] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) - const getOrderList = async () => { - let res = await listFetchData({ - ...searchField - // ...getFilterData(searchField), - // ...getFilterData(searchObj) - }) - setOrderData((e) => ({ ...e, list: res.data?.list, total: res.data?.total })) - // setshowPopup(false) - setRefresherTriggeredStatus(false) + // 获取订单列表 + const { fetchData: listFetchData, state: orderState } = mpreturnApplyOrderlist() + const [orderData, setOrderData] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) + const getOrderList = async() => { + const res = await listFetchData({ + ...searchField, + // ...getFilterData(searchField), + // ...getFilterData(searchObj) + }) + setOrderData(e => ({ ...e, list: res.data?.list, total: res.data?.total })) + // setshowPopup(false) + setRefresherTriggeredStatus(false) + } + + // 输入了搜索关键字 + const getSearchData = useCallback((e) => { + pageNum.current.page = 1 + setOrderData(() => ({ list: [], total: 0 })) + setSearchField(val => ({ ...val, name: e, size: 10 })) + }, []) + + // 列表下拉刷新 + const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) + const getRefresherRefresh = async() => { + pageNum.current.size = 1 + setRefresherTriggeredStatus(true) + setSearchField(val => ({ ...val, size: 10 })) + getOrderList() + } + // 数据加载状态 + const statusMore = useMemo(() => { + return dataLoadingStatus({ list: orderData.list, total: orderData.total, status: orderState.loading! }) + }, [orderData, orderState]) + + // 上拉加载数据 + const getScrolltolower = useCallback(() => { + if (orderData.list.length < orderData.total) { + pageNum.current.page++ + const size = pageNum.current.size * pageNum.current.page + setSearchField({ ...searchField, size }) } + }, [orderData]) + // 顶部栏 + const [TarBarList, setTarBarList] = useState([{ id: 1, name: '售后申请', showBorder: true }, { id: 2, name: '申请记录', showBorder: false }]) + const handChose = (item) => { + if (item.id === searchField.status) { return } + TarBarList.map((it) => { + if (it.id === item.id) { + it.showBorder = true + } + else { + it.showBorder = false + } + setTarBarList([...TarBarList]) + pageNum.current.page = 1 + setOrderData(() => ({ list: [], total: 0 })) + setSearchField(val => ({ ...val, size: 10, status: item.id })) + // getOrderList() + }) + } + // 筛选内容展示 + const [showPopup, setshowPopup] = useState(false) + const showSelctPopup = () => { + setshowPopup(true) + } + // 关闭筛选内容展示 + const closePopup = () => { + setshowPopup(false) + } + // 订单类型 + const [modeList, setModeList] = useState([{ id: '', name: '不限' }, { id: 0, name: '大货' }, { id: 1, name: '剪版' }, { id: 2, name: '散剪' }]) + // 选择订单类型 + const handCheckMode = (item) => { + modeList.map((it) => { + if (it.id === item.id) { + it.checked = true + } + else { + it.checked = false + } + return it + }) + setModeList([...modeList]) + setSearchField(e => ({ ...e, sale_mode: item.id })) + } + useEffect(() => { + getStagelist() + getTypeList() + }, []) - //输入了搜索关键字 - const getSearchData = useCallback((e) => { - pageNum.current.page = 1 - setOrderData(() => ({ list: [], total: 0 })) - setSearchField((val) => ({ ...val, name: e, size: 10 })) - }, []) - - //列表下拉刷新 - const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) - const getRefresherRefresh = async () => { - pageNum.current.size = 1 - setRefresherTriggeredStatus(true) - setSearchField((val) => ({ ...val, size: 10 })) - getOrderList() + // 售后状态 + const [stageList, setStageList] = useState([]) + const { fetchData: stageFetch } = mpenumreturnStage() + const getStagelist = async() => { + const res = await stageFetch() + if (res.data) { + res.data.list.unshift({ id: '', name: '不限', checked: false }) + res.data.list.map((it) => { + it.checked = false + return it + }) + setStageList([...res.data.list]) } - //数据加载状态 - const statusMore = useMemo(() => { - return dataLoadingStatus({ list: orderData.list, total: orderData.total, status: orderState.loading! }) - }, [orderData, orderState]) + } - //上拉加载数据 - const getScrolltolower = useCallback(() => { - if (orderData.list.length < orderData.total) { - pageNum.current.page++ - const size = pageNum.current.size * pageNum.current.page - setSearchField({ ...searchField, size }) - } - }, [orderData]) + // 选择售后状态 + const handCheckStange = (item) => { + stageList.map((it) => { + if (it.id === item.id) { + it.checked = true + } + else { + it.checked = false + } + return it + }) + setStageList([...stageList]) + setSearchField(val => ({ ...val, stage: item.id })) + } - - //顶部栏 - const [TarBarList, setTarBarList] = useState([{ id: 1, name: '售后申请', showBorder: true }, { id: 2, name: '申请记录', showBorder: false }]) - const handChose = (item) => { - if (item.id === searchField.status) return - TarBarList.map(it => { - if (it.id === item.id) { - it.showBorder = true - } else { - it.showBorder = false - } - setTarBarList([...TarBarList]) - pageNum.current.page = 1 - setOrderData(() => ({ list: [], total: 0 })) - setSearchField((val) => ({ ...val, size: 10, status: item.id })) - // getOrderList() - }) + // 退款类型 + const [typeList, setTypeList] = useState([]) + const { fetchData: typeFetch } = mpenumreturnType() + const getTypeList = async() => { + const res = await typeFetch() + if (res.data) { + res.data.list.unshift({ id: '', name: '不限', checked: false }) + res.data.list.map((it) => { + it.checked = false + return it + }) + setTypeList([...res.data.list]) } + } - //筛选内容展示 - const [showPopup, setshowPopup] = useState(false) - const showSelctPopup = () => { - setshowPopup(true) + // 选择售后类型 + const handType = (item) => { + typeList.map((it) => { + if (it.id === item.id) { + it.checked = true + } + else { + it.checked = false + } + return it + }) + setTypeList([...typeList]) + setSearchField(val => ({ ...val, return_type: item.id })) + } + + // 是否不允许确认筛选 + const isDisabled = useMemo(() => { + if (searchField.stage !== '不限' + || searchField.sale_mode !== '不限' + || searchField.return_type !== '不限' + || searchField.sale_start_time !== '' + || searchField.sale_end_time !== '' + ) { + return false } - - //关闭筛选内容展示 - const closePopup = () => { - setshowPopup(false) + else { + return true } + }, [searchField]) - //订单类型 - const [modeList, setModeList] = useState([{ id: '', name: '不限' }, { id: 0, name: '大货' }, { id: 1, name: '剪版' }, { id: 2, name: '散剪' }]) - //选择订单类型 - const handCheckMode = (item) => { - modeList.map(it => { - if (it.id === item.id) { - it.checked = true - } else { - it.checked = false - } - return it - }) - setModeList([...modeList]) - setSearchField((e) => ({ ...e, sale_mode: item.id, })) + // 重置 + const handReset = () => { + const arrOne = resetArr(modeList) + setModeList([...arrOne]) + const arrTwo = resetArr(typeList) + setTypeList([...arrTwo]) + const arrThree = resetArr(stageList) + setStageList([...arrThree]) + setSearchField(e => ({ + ...e, + sale_mode: '不限', + stage: '不限', + return_type: '不限', + sale_start_time: '', + sale_end_time: '', + })) + setStart(myDate.toLocaleDateString()) + getOrderList() + setEnd('') + } + + // 数组重置 + const resetArr = (arr) => { + arr.map((it) => { + it.checked = false + return it + }) + return arr + } + + // 展示时间筛选 + const [showTime, setShowTime] = useState(false) + // 关闭时间筛选 + const handClose = () => { + setShowTime(false) + } + let myDate = new Date() + const [start, setStart] = useState(myDate.toLocaleDateString()) + const [end, setEnd] = useState('') + // 选择时间 + const handTime = (eq) => { + // 直接进来点确定的时候做处理 + if (Object.keys(eq).length === 0) { + const obj = { + start: '', + end: '', + } + obj.start = `${dayjs(new Date(`${myDate?.toLocaleDateString()} ` + '00:00:00')).format('YYYY-MM-DD')} 00:00:00`, + obj.end = `${dayjs(new Date(obj?.start)).add(1, 'day').format('YYYY-MM-DD')} 00:00:00` + eq.value = obj } - useEffect(() => { - getStagelist() - getTypeList() - }, []) + setSearchField(val => ({ ...val, sale_start_time: eq?.value?.start, sale_end_time: eq?.value?.end, size: 10 })) + setStart(eq?.value?.start) + setEnd(eq?.value?.end) + setShowTime(false) + } - - - //售后状态 - const [stageList, setStageList] = useState([]) - const { fetchData: stageFetch } = mpenumreturnStage() - const getStagelist = async () => { - const res = await stageFetch() - if (res.data) { - res.data.list.unshift({ id: '', name: '不限', checked: false }) - res.data.list.map(it => { - it.checked = false - return it - }) - setStageList([...res.data.list]) - - } + const timeArea = useMemo(() => { + if (end !== '') { + return `${start} ` + '-' + ` ${end}` } - - //选择售后状态 - const handCheckStange = (item) => { - stageList.map(it => { - if (it.id === item.id) { - it.checked = true - } else { - it.checked = false - } - return it - }) - setStageList([...stageList]) - setSearchField((val) => ({ ...val, stage: item.id })) + else { + return '自定义起始时间' } + }, [end]) + const handSure = () => { + pageNum.current.page = 1 + setSearchField(val => ({ ...val, size: 10 })) + setshowPopup?.(false) + getOrderList() + } + useEffect(() => { + setSearchField(searchField) + }, [searchField]) - //退款类型 - const [typeList, setTypeList] = useState([]) - const { fetchData: typeFetch } = mpenumreturnType() - const getTypeList = async () => { - const res = await typeFetch() - if (res.data) { - res.data.list.unshift({ id: '', name: '不限', checked: false }) - res.data.list.map(it => { - it.checked = false - return it - }) - setTypeList([...res.data.list]) - } - } + const [ShowCode, setShowCode] = useState(false) + const [ItemInfo, setItemInfo] = useState({}) + const handSee = (e, item) => { + e.stopPropagation() + setItemInfo(item) + setShowCode(true) + } - //选择售后类型 - const handType = (item) => { - typeList.map(it => { - if (it.id === item.id) { - it.checked = true - } else { - it.checked = false - } - return it - }) - setTypeList([...typeList]) - setSearchField((val) => ({ ...val, return_type: item.id })) - } - - //是否不允许确认筛选 - const isDisabled = useMemo(() => { - if (searchField.stage !== '不限' || - searchField.sale_mode !== '不限' || - searchField.return_type !== '不限' || - searchField.sale_start_time !== '' || - searchField.sale_end_time !== '' - ) { - return false - } else { - return true - } - }, [searchField]) - - - //重置 - const handReset = () => { - const arrOne = resetArr(modeList) - setModeList([...arrOne]) - const arrTwo = resetArr(typeList) - setTypeList([...arrTwo]) - const arrThree = resetArr(stageList) - setStageList([...arrThree]) - setSearchField((e) => ({ - ...e, - sale_mode: '不限', - stage: '不限', - return_type: '不限', - sale_start_time: '', - sale_end_time: '', - })) - setStart(myDate.toLocaleDateString()) - getOrderList() - setEnd('') - } - - //数组重置 - const resetArr = (arr) => { - arr.map(it => { - it.checked = false - return it - }) - return arr - } - - //展示时间筛选 - const [showTime, setShowTime] = useState(false) - //关闭时间筛选 - const handClose = () => { - setShowTime(false) - } - let myDate = new Date(); - const [start, setStart] = useState(myDate.toLocaleDateString()) - const [end, setEnd] = useState('') - //选择时间 - const handTime = (eq) => { - //直接进来点确定的时候做处理 - if (Object.keys(eq).length === 0) { - let obj = { - start: '', - end: '' - } - obj.start = `${dayjs(new Date(myDate?.toLocaleDateString() + ' ' + '00:00:00',)).format('YYYY-MM-DD')} 00:00:00`, - obj.end = `${dayjs(new Date(obj?.start)).add(1, 'day').format('YYYY-MM-DD')} 00:00:00` - eq.value = obj - } - setSearchField((val) => ({ ...val, sale_start_time: eq?.value?.start, sale_end_time: eq?.value?.end, size: 10 })) - setStart(eq?.value?.start) - setEnd(eq?.value?.end) - setShowTime(false) - } - - const timeArea = useMemo(() => { - if (end !== '') { - return start + ' ' + '-' + ' ' + end - } else { - return '自定义起始时间' - } - }, [end]) - - const handSure = () => { - pageNum.current.page = 1 - setSearchField((val) => ({ ...val, size: 10 })) - setshowPopup?.(false) - getOrderList() - } - - useEffect(() => { - setSearchField(searchField) - }, [searchField]) - - - const [ShowCode, setShowCode] = useState(false) - const [ItemInfo, setItemInfo] = useState({}) - const handSee = (e, item) => { - e.stopPropagation() - setItemInfo(item) - setShowCode(true) - } - - return ( - <> - - - showSelctPopup()}> - - {/* */} - 筛选 - - + return ( + <> + + + showSelctPopup()}> + + {/* */} + 筛选 + + + + handChose?.(item)}> + + + {orderData?.list?.map((item, index) => { + return ( + + handSee(e, item)} + > + + ) + })} + + + + closePopup()}> + + + + 售后状态 + + { + stageList.map((item, index) => { + return ( + { handCheckStange(item) }} className={classnames(item.checked ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} + ) + }) + } + - handChose?.(item)}> - - - {orderData?.list?.map((item, index) => { - return ( - - handSee(e, item)} - > - - ) - })} - - + + 订单类型 + + { + modeList.map((item, index) => { + return ( + { handCheckMode(item) }} className={classnames(item.checked ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} + ) + }) + } + - closePopup()}> - - - - 售后状态 - - { - stageList.map((item, index) => { - return ( - { handCheckStange(item) }} className={classnames(item.checked ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} - ) - }) - } - - - - 订单类型 - - { - modeList.map((item, index) => { - return ( - { handCheckMode(item) }} className={classnames(item.checked ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} - ) - }) - } - - - - 退款类型 - - { - typeList.map((item, index) => { - return ( - { handType(item) }} className={classnames(item.checked ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} - ) - }) - } - - - - 售后时间 - { setShowTime(true) }}>{timeArea} - - { - timeArea == '自定义起始时间' && - - } - - - - - - - - - - - {/* */} + + 退款类型 + + { + typeList.map((item, index) => { + return ( + { handType(item) }} className={classnames(item.checked ? styles.activemodeBox : styles.modeBox)} key={index}>{item.name} + ) + }) + } + + + + 售后时间 + { setShowTime(true) }}>{timeArea} + + { + timeArea == '自定义起始时间' + && + } - - handTime(e)} - > - setShowCode(false)} - > - - ) + + + + + + + + + + {/* */} + + + handTime(e)} + > + setShowCode(false)} + > + + ) } diff --git a/src/pages/saleStatistic/config.ts b/src/pages/saleStatistic/config.ts index 86b59d9..81c58b6 100644 --- a/src/pages/saleStatistic/config.ts +++ b/src/pages/saleStatistic/config.ts @@ -178,4 +178,3 @@ export const ReturnGoodsOrderForm = { }, }, } - diff --git a/src/pages/saleStatistic/index.tsx b/src/pages/saleStatistic/index.tsx index 6d84e30..3eab592 100644 --- a/src/pages/saleStatistic/index.tsx +++ b/src/pages/saleStatistic/index.tsx @@ -1,5 +1,11 @@ +import { Text, View } from '@tarojs/components' +import classnames from 'classnames' +import dayjs from 'dayjs' +import { memo, useCallback, useEffect, useRef, useState } from 'react' +import styles from './index.module.scss' +import { ArrangedForm, OrderForm, PaymentAmountForm, ReturnGoodsOrderForm } from './config' import { ProductRankApi, PurchaserRankApi, SaleOrderDataFormApi, SalesmanRankApi } from '@/api/statistic/saleStatistic' -import { formatPriceDiv, setPriceUnit, dataUnit } from '@/common/format' +import { dataUnit, formatPriceDiv, setPriceUnit } from '@/common/format' import { getFilterData } from '@/common/util' import Cell from '@/components/cell' import Divider from '@/components/Divider' @@ -8,19 +14,15 @@ import LayoutBlock from '@/components/layoutBlock' import SelectMarketingDepartment from '@/components/SelectMarketingDepartment' import SelectSaleRankingIndicators from '@/components/SelectSaleRankingIndicators' import SelectSaleType from '@/components/SelectSaleType' -import SelectTimePicker, { ChangedValue } from '@/components/SelectTimePicker' -import Table, { TablePropsType } from '@/components/table' +import type { ChangedValue } from '@/components/SelectTimePicker' +import SelectTimePicker from '@/components/SelectTimePicker' +import type { TablePropsType } from '@/components/table' +import Table from '@/components/table' import ToolTip from '@/components/toolTips' -import { View, Text } from '@tarojs/components' -import classnames from 'classnames' -import dayjs from 'dayjs' -import { memo, useCallback, useEffect, useRef, useState } from 'react' -import styles from './index.module.scss' -import { OrderForm, ArrangedForm, PaymentAmountForm, ReturnGoodsOrderForm } from './config' import IconText from '@/components/iconText' import SelectGroup from '@/components/SelectGroup' -//处理金额(后端单位分,转元) +// 处理金额(后端单位分,转元) const priceformat = (val: number) => { return dataUnit(val / 100) } @@ -28,7 +30,7 @@ const priceformat = (val: number) => { const defaultLimit = 10 const FilterTimeOptions = { - '0': { + 0: { name: '今天', date_min: `${dayjs(new Date()) .add(0, 'day') @@ -37,7 +39,7 @@ const FilterTimeOptions = { .add(1, 'day') .format('YYYY-MM-DD')} 00:00:00`, }, - '1': { + 1: { name: '昨日', date_min: `${dayjs(new Date()) .add(-1, 'day') @@ -46,7 +48,7 @@ const FilterTimeOptions = { .add(0, 'day') .format('YYYY-MM-DD')} 00:00:00`, }, - '2': { + 2: { name: '近7日', date_min: `${dayjs(new Date()) .add(-7, 'day') @@ -55,7 +57,7 @@ const FilterTimeOptions = { .add(0, 'day') .format('YYYY-MM-DD')} 00:00:00`, }, - '3': { + 3: { name: '近30日', date_min: `${dayjs(new Date()) .add(-30, 'day') @@ -64,7 +66,7 @@ const FilterTimeOptions = { .add(0, 'day') .format('YYYY-MM-DD')} 00:00:00`, }, - '4': { + 4: { name: '近90日', date_min: `${dayjs(new Date()) .add(-90, 'day') @@ -90,7 +92,7 @@ const saleStatistic = () => { getData() }, [saleType, saleDepartmentId, dateRange]) - const getData = async () => { + const getData = async() => { const res = await fetchData( getFilterData({ sale_type: saleType, @@ -142,7 +144,8 @@ const saleStatistic = () => { // 全部 if (saleType === -1) { setSaleType(null) - } else { + } + else { setSaleType(saleType) } }, []) @@ -152,7 +155,8 @@ const saleStatistic = () => { // 全部 if (department === -1) { setSaleDepartmentId(null) - } else { + } + else { setSaleDepartmentId(department) } }, []) @@ -165,22 +169,22 @@ const saleStatistic = () => { - true} ref={selectSaleTypeRef}> - true} ref={selectMarketingDepartmentRef}> - true} defaultValue='0' timeOptions={FilterTimeOptions} ref={selectTimePickerRef}> + true} ref={selectSaleTypeRef}> + true} ref={selectMarketingDepartmentRef}> + true} defaultValue="0" timeOptions={FilterTimeOptions} ref={selectTimePickerRef}> - - - + + + - + - - + + {OrderForm.summary.summaryTitle} - + {OrderForm.summary.value.num} @@ -194,29 +198,30 @@ const saleStatistic = () => { - + + {value.cellTitle} - + } desc={value.value.num} customDescClassName={value.value.cls} - customClassName={styles['cell-desc']}> + customClassName={styles['cell-desc']} + > ) })} - - - + + + - + - - + + {ArrangedForm.summary.summaryTitle} - + {ArrangedForm.summary.value.num} @@ -230,31 +235,32 @@ const saleStatistic = () => { - + + {value.cellTitle} - + } desc={value.value.num} customDescClassName={value.value.cls} - customClassName={styles['cell-desc']}> - {((index + 1) % 3 === 0 && (index + 1) !== 9) ? : null} + customClassName={styles['cell-desc']} + > + {((index + 1) % 3 === 0 && (index + 1) !== 9) ? : null} ) })} - - - + + + - + - - + + {PaymentAmountForm.summary.summaryTitle} - + {PaymentAmountForm.summary.value.num} @@ -264,29 +270,30 @@ const saleStatistic = () => { - + + {value.cellTitle} - + } desc={value.value.num} customDescClassName={value.value.cls} - customClassName={styles['cell-desc']}> + customClassName={styles['cell-desc']} + > ) })} - - - + + + - + - - + + {ReturnGoodsOrderForm.summary.summaryTitle} - + @@ -298,16 +305,17 @@ const saleStatistic = () => { - + + {value.cellTitle} - + } desc={value.value.num} customDescClassName={value.value.cls} - customClassName={styles['cell-desc']}> + customClassName={styles['cell-desc']} + > ) })} @@ -317,9 +325,9 @@ const saleStatistic = () => { ) } -//需要传进来的数据示例 +// 需要传进来的数据示例 -//需要传进来的表头数据示例 +// 需要传进来的表头数据示例 const productRankingColumns = [ { key: 'index', @@ -352,7 +360,7 @@ const productRankingColumns = [ }, ] -//需要传进来的表头数据示例 +// 需要传进来的表头数据示例 const purchaserRankingColumns = [ { key: 'index', @@ -385,7 +393,7 @@ const purchaserRankingColumns = [ }, ] -//需要传进来的表头数据示例 +// 需要传进来的表头数据示例 const salesmanRankingColumns = [ { key: 'index', @@ -440,14 +448,14 @@ interface RankingBlockPropsType { date_max?: string } // 销售排行 -const RankingBlock = memo(props => { +const RankingBlock = memo((props) => { const { saleType, saleDepartmentId, date_min, date_max } = props const { fetchData: fetchProductRank } = ProductRankApi() const { fetchData: fetchPurchaserRank } = PurchaserRankApi() const { fetchData: fetchSalesmanRank } = SalesmanRankApi() - let [limit, setLimit] = useState(defaultLimit) + const [limit, setLimit] = useState(defaultLimit) const [indicator, setIndicator] = useState(null) @@ -456,22 +464,23 @@ const RankingBlock = memo(props => { console.log('indicators', indicators) if (indicators === -1) { setIndicator(null) - } else { + } + else { setIndicator(indicators) } }, []) const [currentKey, setCurrentKey] = useState(tabsConfig[0].key) - const handleClickTab = event => { + const handleClickTab = (event) => { const key = event.target.dataset.key - if (key === currentKey) return + if (key === currentKey) { return } setCurrentKey(key) setLimit(defaultLimit) } const getData = useCallback( - async (tabKey: number) => { + async(tabKey: number) => { let res: any const payload = { limit, @@ -483,9 +492,11 @@ const RankingBlock = memo(props => { } if (tabKey === 0) { res = await fetchProductRank(getFilterData(payload)) - } else if (tabKey === 1) { + } + else if (tabKey === 1) { res = await fetchPurchaserRank(getFilterData(payload)) - } else { + } + else { res = await fetchSalesmanRank(getFilterData(payload)) } if (res.data) { @@ -504,7 +515,8 @@ const RankingBlock = memo(props => { total: res.data.total, }, })) - } else if (tabKey === 1) { + } + else if (tabKey === 1) { setCurrentTable(() => ({ columns: purchaserRankingColumns, dataSource: { @@ -518,7 +530,8 @@ const RankingBlock = memo(props => { total: res.data.total, }, })) - } else { + } + else { setCurrentTable(() => ({ columns: salesmanRankingColumns, dataSource: { @@ -555,20 +568,20 @@ const RankingBlock = memo(props => { return ( <> {/* 销售排行 */} - + - - + + 销售排行 - + - + - {tabsConfig.map(item => { + {tabsConfig.map((item) => { return ( {item.name} diff --git a/src/pages/saleuserPage/index.config.ts b/src/pages/saleuserPage/index.config.ts index 4b0d8e4..f43056d 100644 --- a/src/pages/saleuserPage/index.config.ts +++ b/src/pages/saleuserPage/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '选择业务员', + navigationBarTitleText: '选择业务员', } diff --git a/src/pages/saleuserPage/index.tsx b/src/pages/saleuserPage/index.tsx index 138b9b9..d66da09 100644 --- a/src/pages/saleuserPage/index.tsx +++ b/src/pages/saleuserPage/index.tsx @@ -1,151 +1,148 @@ -import { View, ScrollView, Image, Input, Button } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, memo } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; +import { Button, Image, Input, ScrollView, View } from '@tarojs/components' +import Taro, { useDidShow, useRouter } from '@tarojs/taro' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import Search from '@/components/search' import { mpenumsaleUserlist } from '@/api/order' -import { useDidShow } from '@tarojs/taro'; -import Taro from '@tarojs/taro' -import { useRouter } from '@tarojs/taro' import InfiniteScroll from '@/components/infiniteScroll' import { dataLoadingStatus, getFilterData } from '@/common/util' export default () => { + const [search, setSearch] = useState({ + name: null, + page: 1, + size: 10, + }) + const [clentList, setClientlist] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) + const { fetchData: clitentFetch, state: orderState } = mpenumsaleUserlist() + // 数据加载状态 + const statusMore = useMemo(() => { + return dataLoadingStatus({ list: clentList.list, total: clentList.total, status: orderState.loading! }) + }, [clentList, orderState]) + const [clientObj, setclientObj] = useState({ + saleuserId: null, + saleuserName: '', + }) - const [search, setSearch] = useState({ - name: null, - page: 1, - size: 10, + // 输入了搜索关键字 + const getSearchData = useCallback((eq) => { + pageNum.current.page = 1 + setClientlist(() => ({ list: [], total: 0 })) + setSearch(e => ({ ...e, name: eq, size: 10 })) + }, []) + + const router = useRouter() + + useEffect(() => { + if (search.name === '') { + setSearch(e => ({ ...e, name: null })) + } + if (search.name !== '') { getCuss() } + }, [search]) + + // 上拉加载数据 + const pageNum = useRef({ size: search.size, page: search.page }) + const getScrolltolower = useCallback(() => { + if (clentList.list.length < clentList.total) { + pageNum.current.page++ + const size = pageNum.current.size * pageNum.current.page + setSearch(e => ({ ...e, size })) + console.log(search, 11111) + } + }, [clentList]) + + // 列表下拉刷新 + const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) + const getRefresherRefresh = async() => { + pageNum.current.size = 1 + setRefresherTriggeredStatus(true) + setSearch(val => ({ ...val, size: 10 })) + } + const getCuss = async() => { + const res = await clitentFetch({ name: search.name === null ? '' : search.name, page: search.page, size: search.size }) + if (router?.params.clientId) { + res.data.list.map((item) => { + if (item.id == router?.params.clientId) { + item.checked = true + } + else { + item.checked = false + } + return item + }) + } + setClientlist(e => ({ ...e, list: res.data?.list, total: res.data?.total })) + setRefresherTriggeredStatus(() => false) + } + // 选择业务员 + const selectClient = (item) => { + clentList.list.map((it) => { + if (item.id === it.id) { + it.checked = true + } + else { + it.checked = false + } + return it }) - const [clentList, setClientlist] = useState<{ list: any[]; total: number }>({ list: [], total: 0 }) - - const { fetchData: clitentFetch, state: orderState } = mpenumsaleUserlist() - //数据加载状态 - const statusMore = useMemo(() => { - return dataLoadingStatus({ list: clentList.list, total: clentList.total, status: orderState.loading! }) - }, [clentList, orderState]) - - const [clientObj, setclientObj] = useState({ - saleuserId: null, - saleuserName: '' + const pages = Taro.getCurrentPages() // 获取当前的页面栈 + const prevPage = pages[pages.length - 2] + prevPage.setData({ // 设置上一个页面的值 + saleuserId: item.id, + saleuserName: item.name, }) - - //输入了搜索关键字 - const getSearchData = useCallback((eq) => { - pageNum.current.page = 1 - setClientlist(() => ({ list: [], total: 0 })) - setSearch((e) => ({ ...e, name: eq, size: 10 })) - }, []) - - - const router = useRouter() - - useEffect(() => { - if (search.name === '') { - setSearch((e) => ({ ...e, name: null })) - } - if (search.name !== '') getCuss() - }, [search]) - - //上拉加载数据 - const pageNum = useRef({ size: search.size, page: search.page }) - const getScrolltolower = useCallback(() => { - if (clentList.list.length < clentList.total) { - pageNum.current.page++ - const size = pageNum.current.size * pageNum.current.page - setSearch((e) => ({ ...e, size })) - console.log(search, 11111) - } - }, [clentList]) - - //列表下拉刷新 - const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) - const getRefresherRefresh = async () => { - pageNum.current.size = 1 - setRefresherTriggeredStatus(true) - setSearch((val) => ({ ...val, size: 10 })) + setClientlist(e => ({ ...e, list: clentList?.list, total: clentList?.total })) + setclientObj(item) + Taro.navigateBack({ + delta: 1, + }) + } + useEffect(() => { + if (clientObj?.saleuserId !== null) { + setclientObj(clientObj) } - const getCuss = async () => { - let res = await clitentFetch({ name: search.name === null ? '' : search.name, page: search.page, size: search.size }) - if (router?.params.clientId) { - res.data.list.map(item => { - if (item.id == router?.params.clientId) { - item.checked = true - } else { - item.checked = false - } - return item - }) - } - setClientlist((e) => ({ ...e, list: res.data?.list, total: res.data?.total })) - setRefresherTriggeredStatus(() => false) + else { + const pages = Taro.getCurrentPages() // 获取当前的页面栈 + const prevPage = pages[pages.length - 2] + prevPage.setData({ // 设置上一个页面的值 + saleuserId: '', + saleuserName: '', + }) } - //选择业务员 - const selectClient = (item) => { - clentList.list.map(it => { - if (item.id === it.id) { - it.checked = true - } else { - it.checked = false - } - return it - }) - let pages = Taro.getCurrentPages(); // 获取当前的页面栈 - let prevPage = pages[pages.length - 2]; - prevPage.setData({ //设置上一个页面的值 - saleuserId: item.id, - saleuserName: item.name - }); - setClientlist((e) => ({ ...e, list: clentList?.list, total: clentList?.total })) - setclientObj(item) - Taro.navigateBack({ - delta: 1 - }) - } - useEffect(() => { - if (clientObj?.saleuserId !== null) { - setclientObj(clientObj) - } else { - let pages = Taro.getCurrentPages(); // 获取当前的页面栈 - let prevPage = pages[pages.length - 2]; - prevPage.setData({ //设置上一个页面的值 - saleuserId: '', - saleuserName: '', - }); - } - }, [clientObj]) - return ( - - - - - - - - - - { - clentList.list.map((item, index) => { - return ( - { selectClient(item) }}> - {item.name} - {item.phone} - {item.sale_user_name} - - ) - }) - } - - - - + }, [clientObj]) + return ( + + + + - ) + + + + + { + clentList.list.map((item, index) => { + return ( + { selectClient(item) }}> + {item.name} + {item.phone} + {item.sale_user_name} + + ) + }) + } + + + + + ) } diff --git a/src/pages/searchPage/components/goods/index.tsx b/src/pages/searchPage/components/goods/index.tsx index d81b000..18c9b16 100644 --- a/src/pages/searchPage/components/goods/index.tsx +++ b/src/pages/searchPage/components/goods/index.tsx @@ -1,44 +1,42 @@ -import { View, Image } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState } from 'react' -import styles from "../goods/index.module.scss" -import LabAndImg from "@/components/LabAndImg" +import { Image, View } from '@tarojs/components' +import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import styles from '../goods/index.module.scss' +import LabAndImg from '@/components/LabAndImg' +const Goods = (props: any) => { + const labAndImgObj = useCallback((item) => { + return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url } + }, []) + return ( + props?.clickItem?.()}> + { + props.data?.texture_url === '' && <> -export default memo((props: any) => { - - - const labAndImgObj = useCallback((item) => { - return { lab: item.lab, rgb: item.rgb, texture_url: item.texture_url } - }, []) - return ( - props?.clickItem?.()}> - { - props.data?.texture_url === '' && <> - - - - {props.data?.product_color_count}色 - + + + {props.data?.product_color_count}色 + + + } + { + props.data?.texture_url !== '' + && <> + + + {/* */} + {props.data?.product_color_count}色 + - } - { - props.data?.texture_url !== '' && - <> - - - {/* */} - {props.data?.product_color_count}色 - - - } - - {props.data?.code}#{props.data?.name} - {props.data?.component} - - {props.data?.width} - {props.data?.weight_density} - - + } + + {props.data?.code}#{props.data?.name} + {props.data?.component} + + {props.data?.width} + {props.data?.weight_density} - ) -}) \ No newline at end of file + + + ) +} +export default memo(Goods) diff --git a/src/pages/searchPage/index.config.ts b/src/pages/searchPage/index.config.ts index 942d2c4..6241274 100644 --- a/src/pages/searchPage/index.config.ts +++ b/src/pages/searchPage/index.config.ts @@ -1,3 +1,3 @@ export default { - navigationBarTitleText: '搜索', + navigationBarTitleText: '搜索', } diff --git a/src/pages/searchPage/index.tsx b/src/pages/searchPage/index.tsx index 0009528..ece313a 100644 --- a/src/pages/searchPage/index.tsx +++ b/src/pages/searchPage/index.tsx @@ -1,427 +1,427 @@ import { View } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState } from 'react' -import Search from '@/components/search' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Empty from '@/components/empty' -import Taro, { useDidShow } from '@tarojs/taro'; +import Taro, { useDidShow } from '@tarojs/taro' +import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import Goods from './components/goods' -import { mpproductlist } from "@/api/search" -import { debounce } from "@/common/util"; +import Search from '@/components/search' +import Empty from '@/components/empty' +import { mpproductlist } from '@/api/search' +import { debounce, getFilterData } from '@/common/util' import ShopCart from '@/components/shoppingCart' import { - mpproductcolorlist, - mpshoppingCartproductColorlist, - mpsearchHistorylist, - mpsearchHistory -} from "@/api/order" -import { getFilterData } from '@/common/util' -import { ClientListApi } from '@/api/order' + ClientListApi, + mpproductcolorlist, + mpsearchHistory, + mpsearchHistorylist + , mpshoppingCartproductColorlist, +} from '@/api/order' -export default memo(() => { +const SearchPage = () => { + const [clientObj, setclientObj] = useState({ + clientId: -1, + clientName: '', + }) - - useEffect(() => { - getClient() - }, []) - - const [clientObj, setclientObj] = useState({ - clientId: -1, - clientName: '' + // 获取客户 + const [clienList, setclienList] = useState([]) + const { fetchData: listFetchData } = ClientListApi() + const getClient = async() => { + const res = await listFetchData({ + page: 1, size: 10, }) - - //获取客户 - const [clienList, setclienList] = useState([]) - const { fetchData: listFetchData } = ClientListApi() - const getClient = async () => { - const res = await listFetchData({ - page: 1, size: 10 - }) - setclientObj({ - clientId: res.data.list.length > 0 ? res.data.list[0]?.id : -1, - clientName: res.data.list.length > 0 ? res.data.list[0]?.name : '', - }) - setclienList([...res.data.list]) - } - - useDidShow(() => { - //获取选择的客户 - let pages = Taro.getCurrentPages(); - let currPage = pages[pages.length - 1]; // 获取当前页面 - //判断是否有跳转选择客户 - if (currPage.data?.clientId && currPage.data?.clientId !== '') { - setclientObj({ - clientId: currPage.data?.clientId, - clientName: currPage.data?.clientName, - }) - setSearchObj((val) => ({ ...val, purchaser_id: currPage.data?.clientId })) - } - //默认客户 - if (currPage.data?.clientId == null) { - setclientObj({ - clientId: clienList.length > 0 ? clienList[0]?.id : - 1, - clientName: clienList.length > 0 ? clienList[0]?.name : '', - }) - } + setclientObj({ + clientId: res.data.list.length > 0 ? res.data.list[0]?.id : -1, + clientName: res.data.list.length > 0 ? res.data.list[0]?.name : '', }) + setclienList([...res.data.list]) + } + useEffect(() => { + getClient() + }, []) - //选择的类型 - const [typeList, setTypeList] = useState([{ id: 0, name: '大货', checked: true }, { id: 1, name: '剪版', checked: false }, { id: 2, name: '散剪', checked: false }]) - const [goodList, setGoodlist] = useState([]) - const onj = JSON.parse(Taro.getStorageSync('userInfo')) - const [search, setSearchObj] = useState({ - modeId: 0, - goodsId: null, - code_or_name: '', - physical_warehouse: onj.physical_warehouse, - purchaser_id: -1 + const onj = JSON.parse(Taro.getStorageSync('userInfo')) + const [search, setSearchObj] = useState({ + modeId: 0, + goodsId: null, + code_or_name: '', + physical_warehouse: onj.physical_warehouse, + purchaser_id: -1, + }) + + useDidShow(() => { + // 获取选择的客户 + const pages = Taro.getCurrentPages() + const currPage = pages[pages.length - 1] // 获取当前页面 + // 判断是否有跳转选择客户 + if (currPage.data?.clientId && currPage.data?.clientId !== '') { + setclientObj({ + clientId: currPage.data?.clientId, + clientName: currPage.data?.clientName, + }) + setSearchObj(val => ({ ...val, purchaser_id: currPage.data?.clientId })) + } + // 默认客户 + if (currPage.data?.clientId == null) { + setclientObj({ + clientId: clienList.length > 0 ? clienList[0]?.id : -1, + clientName: clienList.length > 0 ? clienList[0]?.name : '', + }) + } + }) + + // 选择的类型 + const [typeList, setTypeList] = useState([{ id: 0, name: '大货', checked: true }, { id: 1, name: '剪版', checked: false }, { id: 2, name: '散剪', checked: false }]) + const [goodList, setGoodlist] = useState([]) + + const [showShopCart, setShowShopCart] = useState(false) + + // 获取商品 + const { fetchData: colorlistFetch } = mpproductcolorlist() + const getGoodList = async() => { + const res = await colorlistFetch({ product_id: search.goodsId, sale_mode: search.modeId, code_or_name: search.code_or_name, physical_warehouse: search?.physical_warehouse, purchaser_id: clientObj?.clientId }) + res.data.list.map((item) => { + item.showInput = false + if (search.modeId == 0) { + item.nums = 1 + item.buyNums = 1 + } + if (search.modeId == 1) { + item.nums = 0.5 + item.buyNums = 0.5 + } + if (search.modeId == 2) { + item.nums = 3 + item.buyNums = 3 + } + return item }) - const [showShopCart, setShowShopCart] = useState(false) + setGoodlist([...res.data.list]) + } + // 监听选择的类型 + useEffect(() => { + setSearchObj(search) + if (search.goodsId) { getGoodList() } + }, [search]) - //监听选择的类型 - useEffect(() => { - setSearchObj(search) - if (search.goodsId) getGoodList() - }, [search]) - - - //获取商品 - const { fetchData: colorlistFetch } = mpproductcolorlist() - const getGoodList = async () => { - const res = await colorlistFetch({ product_id: search.goodsId, sale_mode: search.modeId, code_or_name: search.code_or_name, physical_warehouse: search?.physical_warehouse, purchaser_id: clientObj?.clientId }) - res.data.list.map((item) => { - item.showInput = false - if (search.modeId == 0) { - item.nums = 1 - item.buyNums = 1 - } - if (search.modeId == 1) { - item.nums = 0.5 - item.buyNums = 0.5 - } - if (search.modeId == 2) { - item.nums = 3 - item.buyNums = 3 - } - return item - }) - setGoodlist([...res.data.list]) + // 加入购物车 + const { fetchData: preViewFetch } = mpshoppingCartproductColorlist() + const handSure = async() => { + const arr = goodList.filter((item) => { + return item.showInput + }) + const list: any[] = [] + arr.forEach((it) => { + list.push({ + roll: search.modeId === 0 ? it.nums : 0, + length: search.modeId !== 0 ? it.nums * 100 : 0, + product_color_id: Number(it.id), + }) + }) + const query = { + purchaser_id: clientObj.clientId, + sale_mode: search.modeId, + color_list: list, + sale_offect: 0, } + const res = await preViewFetch(getFilterData(query)) + Taro.showLoading({ + mask: true, + title: '请稍等...', + }) + if (res.data) { + Taro.showToast({ + title: '加入成功', + duration: 2000, + }) + setShowShopCart(false) + goodList.map((item) => { + item.showInput = false + return item + }) + setGoodlist([...goodList]) + console.log(search, '000000.0.0.') + Taro.hideLoading() + } + else { + Taro.hideLoading() + Taro.showToast({ + title: res.msg, + duration: 2000, + }) + } + } - //加入购物车 - const { fetchData: preViewFetch, } = mpshoppingCartproductColorlist() - const handSure = async () => { - const arr = goodList.filter(item => { - return item.showInput - }) - const list: any[] = [] - arr.forEach(it => { - list.push({ - roll: search.modeId === 0 ? it.nums : 0, - length: search.modeId !== 0 ? it.nums * 100 : 0, - product_color_id: Number(it.id) - }) - }) - const query = { - purchaser_id: clientObj.clientId, - sale_mode: search.modeId, - color_list: list, - sale_offect: 0 + // 点击输入框的加 + const handPlus = useCallback((item) => { + goodList.map((it) => { + if (item.id === it.id) { + // if (it.nums > item.buyNums) { + it.nums++ + // } + } + return item + }) + setGoodlist([...goodList]) + }, [goodList]) + + // 输入了搜索关键字 + const getSearchDataInput = useCallback((eq) => { + setSearchObj(e => ({ ...e, code_or_name: eq })) + }, []) + + const [goodObj, setGoodsobj] = useState({}) + const ShopCartRef = useRef() + // 点击对应商品显示购物车 + const showCart = async(item) => { + setSearchObj(e => ({ ...e, goodsId: item.id, purchaser_id: clientObj?.clientId })) + setShowShopCart(true) + setGoodsobj(item) + ShopCartRef.current.SearchRef.current.clearInput() + } + + // 点击加展示输入框 + const handAdd = useCallback((item) => { + goodList.map((it) => { + if (item.id === it.id) { + it.showInput = true + } + return item + }) + setGoodlist([...goodList]) + }, [goodList]) + + // 点击减 + const reduceNums = useCallback((item) => { + goodList.map((it) => { + if (item.id === it.id) { + item.nums-- + if (search.modeId == 0) { + if (item.nums < 1) { it.showInput = false, it.nums = 1 } } - let res = await preViewFetch(getFilterData(query)) - Taro.showLoading({ - mask: true, - title: '请稍等...' - }) - if (res.data) { - Taro.showToast({ - title: "加入成功", - duration: 2000, - }); - setShowShopCart(false) - goodList.map(item => { - item.showInput = false - return item - }) - setGoodlist([...goodList]) - console.log(search, '000000.0.0.') - Taro.hideLoading() - } else { - Taro.hideLoading() - Taro.showToast({ - title: res.msg, - duration: 2000, - }); + if (search.modeId == 1) { + if (item.nums < 0.5) { it.showInput = false, it.nums = 0.5 } } - } - - //点击输入框的加 - const handPlus = useCallback((item) => { - goodList.map((it) => { - if (item.id === it.id) { - // if (it.nums > item.buyNums) { - it.nums++ - // } - } - return item - }) - setGoodlist([...goodList]) - }, [goodList]) - - - //输入了搜索关键字 - const getSearchDataInput = useCallback((eq) => { - setSearchObj((e) => ({ ...e, code_or_name: eq })) - }, []) - - const [goodObj, setGoodsobj] = useState({}) - const ShopCartRef = useRef() - //点击对应商品显示购物车 - const showCart = async (item) => { - setSearchObj((e) => ({ ...e, goodsId: item.id, purchaser_id: clientObj?.clientId })) - setShowShopCart(true) - setGoodsobj(item) - ShopCartRef.current.SearchRef.current.clearInput() - } - - //点击加展示输入框 - const handAdd = useCallback((item) => { - goodList.map((it) => { - if (item.id === it.id) { - it.showInput = true - } - return item - }) - setGoodlist([...goodList]) - }, [goodList]) - - - //点击减 - const reduceNums = useCallback((item) => { - goodList.map((it) => { - if (item.id === it.id) { - item.nums-- - if (search.modeId == 0) { - if (item.nums < 1) it.showInput = false, it.nums = 1 - } - if (search.modeId == 1) { - if (item.nums < 0.5) it.showInput = false, it.nums = 0.5 - } - if (search.modeId == 2) { - if (item.nums < 3) it.showInput = false, it.nums = 3 - } - - } - return item - }) - setGoodlist([...goodList]) - }, [goodList]) - - //选择类型 - const handCheckMode = (item) => { - typeList.map(it => { - if (it.id === item.id) { - it.checked = true - setSearchObj((e) => ({ ...e, modeId: it.id })) - } else { - it.checked = false - } - return it - }) - setTypeList([...typeList]) - setGoodlist([]) - } - - //关闭弹窗 - const closePoup = () => { - setShowShopCart(false) - } - - //获取关键字数据 - const [histroyList, setHistroyList] = useState([]) - const { fetchData: historyFetch } = mpsearchHistorylist() - const getHistory = async () => { - Taro.showLoading({ - title: '加载中...', - mask: true - }) - const res = await historyFetch() - if (res.data) { - setHistroyList([...res?.data?.list]) - Taro.hideLoading() + if (search.modeId == 2) { + if (item.nums < 3) { it.showInput = false, it.nums = 3 } } - } + } + return item + }) + setGoodlist([...goodList]) + }, [goodList]) - //搜索商品的数组 - const [searchList, setSearchList] = useState([]) - //是否有值输入框 - const [hasFonts, setHasFonts] = useState(false) - useEffect(() => { + // 选择类型 + const handCheckMode = (item) => { + typeList.map((it) => { + if (it.id === item.id) { + it.checked = true + setSearchObj(e => ({ ...e, modeId: it.id })) + } + else { + it.checked = false + } + return it + }) + setTypeList([...typeList]) + setGoodlist([]) + } + + // 关闭弹窗 + const closePoup = () => { + setShowShopCart(false) + } + + // 获取关键字数据 + const [histroyList, setHistroyList] = useState([]) + const { fetchData: historyFetch } = mpsearchHistorylist() + const getHistory = async() => { + Taro.showLoading({ + title: '加载中...', + mask: true, + }) + const res = await historyFetch() + if (res.data) { + setHistroyList([...res?.data?.list]) + Taro.hideLoading() + } + } + + // 搜索商品的数组 + const [searchList, setSearchList] = useState([]) + // 是否有值输入框 + const [hasFonts, setHasFonts] = useState(false) + useEffect(() => { + getHistory() + }, []) + + // 搜索获取商品数据 + const { fetchData: productFetch } = mpproductlist() + const { fetchData: historyputFetch } = mpsearchHistory() + const getProduct = debounce(async(e) => { + Taro.showLoading({ + title: '加载中...', + mask: true, + }) + await historyputFetch({ key: e, scene: 0 }).then((res) => { + if (res.data) { getHistory() - }, []) - //输入了搜索关键字 - const getSearchData = useCallback((e) => { - if (e) { - setHasFonts(true) - getProduct(e) - } else { - setHasFonts(false) - setSearchList([]) + } + }) + productFetch({ code_or_name: e }).then((res) => { + if (res.data) { + Taro.hideLoading() + setSearchList([...res?.data?.list]) + } + }) + }, 300) + + // 输入了搜索关键字 + const getSearchData = useCallback((e) => { + if (e) { + setHasFonts(true) + getProduct(e) + } + else { + setHasFonts(false) + setSearchList([]) + } + }, []) + + // 返回 + const back = () => { + Taro.navigateBack({ + delta: 1, + }) + } + + // 输入框失焦 + const onBlur = (e, id) => { + goodList.map((item) => { + if (item.id == id) { + if (search.modeId == 0 && (e.detail.value == '' || Number(e.detail.value) == 0)) { + item.showInput = false + item.nums = 1 } - }, []) - //搜索获取商品数据 - const { fetchData: productFetch } = mpproductlist() - const { fetchData: historyputFetch } = mpsearchHistory() - const getProduct = debounce(async (e) => { - Taro.showLoading({ - title: '加载中...', - mask: true - }) - await historyputFetch({ key: e, scene: 0 }).then((res) => { - if (res.data) { - getHistory() - } - }) - productFetch({ code_or_name: e }).then((res) => { - if (res.data) { - Taro.hideLoading() - setSearchList([...res?.data?.list]) - } - }) - }, 300) - //返回 - const back = () => { - Taro.navigateBack({ - delta: 1 - }) - } + else if (search.modeId == 0 && (e.detail.value != '' || Number(e.detail.value) > 0)) { + item.nums = e.detail.value + } + if (search.modeId == 1 && Number(e.detail.value) < 0.5) { + item.nums = 0.5 + item.showInput = false + } + else if (search.modeId == 1 && Number(e.detail.value) >= 0.5) { + item.nums = Number(e.detail.value).toFixed(2) + } + if (search.modeId == 2 && Number(e.detail.value) < 3) { + item.nums = 3 + item.showInput = false + } + else if (search.modeId == 2 && Number(e.detail.value) >= 3) { + item.nums = Number(e.detail.value).toFixed(2) + } + } + return item + }) + setGoodlist([...goodList]) + } - //输入框失焦 - const onBlur = (e, id) => { - goodList.map(item => { - if (item.id == id) { - if (search.modeId == 0 && (e.detail.value == '' || Number(e.detail.value) == 0)) { - item.showInput = false - item.nums = 1 + // 选择中后的值到输入框 + const [defaultvalue, setdefaultvalue] = useState('') - } else if (search.modeId == 0 && (e.detail.value != '' || Number(e.detail.value) > 0)) { - item.nums = e.detail.value - } - if (search.modeId == 1 && Number(e.detail.value) < 0.5) { - item.nums = 0.5 - item.showInput = false - } else if (search.modeId == 1 && Number(e.detail.value) >= 0.5) { - item.nums = Number(e.detail.value).toFixed(2) - } - if (search.modeId == 2 && Number(e.detail.value) < 3) { - item.nums = 3 - item.showInput = false - - } else if (search.modeId == 2 && Number(e.detail.value) >= 3) { - item.nums = Number(e.detail.value).toFixed(2) - } - - } - return item - }) - setGoodlist([...goodList]) - } - - //选择中后的值到输入框 - const [defaultvalue, setdefaultvalue] = useState('') - - //点击关键字搜索内容 - const handItem = (item) => { - Taro.showLoading({ - title: '加载中...', - mask: true - }) - productFetch({ code_or_name: item.search_key }).then((res) => { - if (res.data) { - setHasFonts(true) - setSearchList([...res.data.list]) - Taro.hideLoading() - } - }) - setdefaultvalue(item.search_key) - } - //点击返回文字 - const handBack = () => { - setHasFonts(false) - setSearchList([]) - } - return ( - - - - back()}>取消 - - - - { - !hasFonts && <> - - 历史搜索 - - - {!!histroyList.length && - - {histroyList.map((item, index) => { - return ( - handItem(item)} key={index} className={styles.itemBox}>{item.search_key} - ) - })} - - } - { - !histroyList.length && - } - - } - { - hasFonts && <> - - - 搜索结果 - handBack()}>返回 - - - { - !!searchList.length && searchList.map((item, index) => { + // 点击关键字搜索内容 + const handItem = (item) => { + Taro.showLoading({ + title: '加载中...', + mask: true, + }) + productFetch({ code_or_name: item.search_key }).then((res) => { + if (res.data) { + setHasFonts(true) + setSearchList([...res.data.list]) + Taro.hideLoading() + } + }) + setdefaultvalue(item.search_key) + } + // 点击返回文字 + const handBack = () => { + setHasFonts(false) + setSearchList([]) + } + return ( + + + + back()}>取消 + + + + { + !hasFonts && <> + + 历史搜索 + + + {!!histroyList.length + && + {histroyList.map((item, index) => { return ( - showCart(item)} key={index} data={item}> + handItem(item)} key={index} className={styles.itemBox}>{item.search_key} ) - }) - } - { - !searchList.length && - } - - } - handSure()} - clientName={clientObj?.clientName} - clientId={clientObj?.clientId} - modeFont={search.modeId} - handPlus={(item) => handPlus(item)} - obj={goodObj} - getSearchData={(e) => { getSearchDataInput(e) }} - hasBottom={false} - reduceNums={(item) => { reduceNums(item) }} - addNums={(item) => { handAdd(item) }} - showPopup={showShopCart} - handCheck={(item) => { handCheckMode(item) }} - closePopup={() => closePoup()} - goodList={goodList} - typeList={typeList} - onBlur={(e, id) => onBlur(e, id)} - > + })} + + } + { + !histroyList.length && + } + + } + { + hasFonts && <> + + + 搜索结果 + handBack()}>返回 + + + { + !!searchList.length && searchList.map((item, index) => { + return ( + showCart(item)} key={index} data={item}> + ) + }) + } + { + !searchList.length && + } + + } + handSure()} + clientName={clientObj?.clientName} + clientId={clientObj?.clientId} + modeFont={search.modeId} + handPlus={item => handPlus(item)} + obj={goodObj} + getSearchData={(e) => { getSearchDataInput(e) }} + hasBottom={false} + reduceNums={(item) => { reduceNums(item) }} + addNums={(item) => { handAdd(item) }} + showPopup={showShopCart} + handCheck={(item) => { handCheckMode(item) }} + closePopup={() => closePoup()} + goodList={goodList} + typeList={typeList} + onBlur={(e, id) => onBlur(e, id)} + > - + - ) -}) + ) +} +export default memo(SearchPage) // oninputEvent={(e, item) => { onInputEven?.(e, item) }} diff --git a/src/pages/shopping/components/bottomEditBar/index.tsx b/src/pages/shopping/components/bottomEditBar/index.tsx index ea9d210..56c7e82 100644 --- a/src/pages/shopping/components/bottomEditBar/index.tsx +++ b/src/pages/shopping/components/bottomEditBar/index.tsx @@ -1,11 +1,11 @@ -import NormalButton from '@/components/normalButton' -import { View, Text } from '@tarojs/components' +import { Text, View } from '@tarojs/components' +import { ShoppingDispatchType, useShoppingDispatch } from '../../context' import styles from './index.module.scss' +import NormalButton from '@/components/normalButton' import MCheckbox from '@/components/checkbox' import { usePropsValue } from '@/use/useCommon' -import { ShoppingDispatchType, useShoppingDispatch } from '../../context' -type PropsType = { +interface PropsType { onDelete?: Function onSelectCheckbox?: (bool: boolean) => void disabled?: boolean @@ -41,15 +41,16 @@ export default (props: PropsType) => { status={isSelectAll} disabled={disabled} round - size='small' + size="small" onSelect={selectCallBack} onClose={closeCallBack} - customStyles={{ color: '$color: #000000, $alpha: 0.6' }}> + customStyles={{ color: '$color: #000000, $alpha: 0.6' }} + > 全选 - + 删除 diff --git a/src/pages/shopping/components/bottomSettleBar/index.tsx b/src/pages/shopping/components/bottomSettleBar/index.tsx index ecec741..3ff555c 100644 --- a/src/pages/shopping/components/bottomSettleBar/index.tsx +++ b/src/pages/shopping/components/bottomSettleBar/index.tsx @@ -1,10 +1,10 @@ -import { formatMillionYuan, toDecimal2 } from '@/common/format' -import NormalButton from '@/components/normalButton' -import { View, Text } from '@tarojs/components' +import { Text, View } from '@tarojs/components' import { memo } from 'react' import styles from './index.module.scss' +import NormalButton from '@/components/normalButton' +import { formatMillionYuan, toDecimal2 } from '@/common/format' -type PropsType = { +interface PropsType { amount?: number onSettleAccount?: Function } @@ -25,11 +25,11 @@ export default (props: PropsType) => { {Number(Number(amount) .toFixed(2)) .toLocaleString()} - + - + 结算 diff --git a/src/pages/shopping/components/colorKindItem/index.tsx b/src/pages/shopping/components/colorKindItem/index.tsx index 1ef9643..2d51f8f 100644 --- a/src/pages/shopping/components/colorKindItem/index.tsx +++ b/src/pages/shopping/components/colorKindItem/index.tsx @@ -1,20 +1,23 @@ -import { View, Text, Image } from '@tarojs/components' +import { Image, Text, View } from '@tarojs/components' +import type { FC } from 'react' +import { forwardRef, memo, useCallback, useEffect, useState } from 'react' +import classnames from 'classnames' +import { selectList } from '../../config' +import type { ShoppingStateContextValue } from '../../context' +import { Goods, ShoppingDispatchType, useShoppingDispatch, useShoppingState } from '../../context' +import type { ShoppingStore } from '../../context/shoppingStore' +import { events } from '../../context/shoppingStore' +import styles from './index.module.scss' import MCheckbox from '@/components/checkbox' import Counter from '@/components/counter' -import { FC, forwardRef, memo, useCallback, useEffect, useState } from 'react' -import classnames from 'classnames' -import styles from './index.module.scss' import { debounce } from '@/common/util' import { formatImgUrl, formatMeterDiv, formatMeterMul, formatPriceDiv } from '@/common/format' import { EnumSaleMode } from '@/common/Enumerate' -import { selectList } from '../../config' import { AdjestShoppingCartApi } from '@/api/shopping/index' -import { Goods, ShoppingDispatchType, ShoppingStateContextValue, useShoppingDispatch, useShoppingState } from '../../context' -import { events, ShoppingStore } from '../../context/shoppingStore' import LabAndImg from '@/components/LabAndImg' import { usePropsValue } from '@/use/useCommon' -type PropsType = { +interface PropsType { state?: { Observer: ShoppingStore } @@ -24,31 +27,30 @@ type PropsType = { onChange?: (isChecked: boolean, goodsId: number) => void } -const ColorKindItem: FC = props => { - console.log('rerender component ColorKindItem', props); +const ColorKindItem: FC = (props) => { + console.log('rerender component ColorKindItem', props) const { state, purchaserId, itemData, checked = false } = props const [isChecked, setCheck] = usePropsValue({ value: checked, defaultValue: checked, onChange: (value) => { props.onChange?.(value, itemData.id) - } + }, }) - //格式化数量 - const formatCount = itemData => { + // 格式化数量 + const formatCount = (itemData) => { return itemData.sale_mode == EnumSaleMode.Bulk ? itemData.roll : formatMeterDiv(itemData.length) } useEffect(() => { - console.log('itemData==>',itemData); + console.log('itemData==>', itemData) setCount(formatCount(itemData)) }, [itemData.roll, itemData.length]) - const [count, setCount] = useState(formatCount(itemData)) - //格式化金额 + // 格式化金额 const formatPrice = (price: number) => { return Number(formatPriceDiv(price)) } @@ -56,10 +58,9 @@ const ColorKindItem: FC = props => { const handleCountChange = (nextValue: number) => { setCount(nextValue) } - - //格式化单位 - const formatUnit = itemData => { + // 格式化单位 + const formatUnit = (itemData) => { return itemData.sale_mode == EnumSaleMode.Bulk ? '条' : '米' } // 选中 @@ -83,7 +84,7 @@ const ColorKindItem: FC = props => { const { fetchData } = AdjestShoppingCartApi() // 调整条数/米数的接口 并在调整完成后重新请求整个购物车页面 - const getInputValue = useCallback(debounce(async (num) => { + const getInputValue = useCallback(debounce(async(num) => { console.log('num===>', num) const targetColor: Record = { roll: 0, @@ -92,7 +93,8 @@ const ColorKindItem: FC = props => { if (itemData.sale_mode === EnumSaleMode.Bulk) { itemData.roll = num targetColor.roll = num - } else { + } + else { itemData.length = formatMeterMul(num) targetColor.length = formatMeterMul(num) } @@ -106,7 +108,7 @@ const ColorKindItem: FC = props => { } }, 460), [itemData]) - const labAndImgObj = useCallback(item => { + const labAndImgObj = useCallback((item) => { return { lab: item.lab, rgb: item.rgb, texture_url: item.product_color_texture_url } }, []) @@ -116,11 +118,12 @@ const ColorKindItem: FC = props => { onSelect={handleSelect} onClose={handleClose} customClassName={classnames(styles.checkbox, isChecked ? styles.selected : '')} - customTextClass={styles.colorKindItem}> - + customTextClass={styles.colorKindItem} + > + - + {itemData.product_code}# {itemData.product_name} @@ -129,7 +132,7 @@ const ColorKindItem: FC = props => { {itemData.product_color_name} - + ¥ {formatPrice(itemData.sale_price)}/{itemData.sale_mode == EnumSaleMode.Plate ? '米' : 'kg'} = props => { // 那么当 context 内的 value 被更新的时候,react 只会强制渲染 Wrapper const withStateSlice = (comp, slice) => { const MemoComp = memo(comp, (prevProps, nextProps) => { - let needMemo = true + let needMemo = true if (prevProps.itemData !== nextProps.itemData) { - console.log('itemData 有变化'); + console.log('itemData 有变化') needMemo = false } if (prevProps.state.Observer !== nextProps.state.Observer) { - console.log('Observer 有变化'); + console.log('Observer 有变化') needMemo = false } if (prevProps.checked !== nextProps.checked) { - console.log('checked 有变化', prevProps.checked, nextProps.checked); + console.log('checked 有变化', prevProps.checked, nextProps.checked) needMemo = false } if (prevProps.purchaserId !== nextProps.purchaserId) { - console.log('purchaserId 有变化'); + console.log('purchaserId 有变化') needMemo = false } return needMemo diff --git a/src/pages/shopping/components/shoppingCart/index.tsx b/src/pages/shopping/components/shoppingCart/index.tsx index 07e97de..9e52a6b 100644 --- a/src/pages/shopping/components/shoppingCart/index.tsx +++ b/src/pages/shopping/components/shoppingCart/index.tsx @@ -1,19 +1,23 @@ import produce from 'immer' -import { FC, ReactNode, useEffect, useMemo, useReducer, useRef } from 'react' -import { +import type { FC, ReactNode } from 'react' +import { useEffect, useMemo, useReducer, useRef } from 'react' +import type { + ColorStore, GoodsMeta, ShoppingAction, - ShoppingDispatchContext, + ShoppingDispatchContextValue, - ShoppingDispatchType, - shoppingReducer, - ShoppingStateContext, - throwError, + ShoppingStateContextValue, +} from '../../context' +import { + ShoppingDispatchContext, + ShoppingDispatchType, + ShoppingStateContext, + shoppingReducer, throwError, } from '../../context' -import { ColorStore, ShoppingStateContextValue } from '../../context' import { ShoppingStore } from '../../context/shoppingStore' -export type TriggerCheckboxOptions = { +export interface TriggerCheckboxOptions { multipleSelection: GoodsMeta['multipleSelection'] setSelectedAmount: ShoppingDispatchContextValue['UPDATE_SELECTED_AMOUNT'] } @@ -24,7 +28,7 @@ export interface ShoppingCartPropsType { children?: ReactNode } // 购物车上下文组件 -export const ShoppingProvider: FC = props => { +export const ShoppingProvider: FC = (props) => { const { children, onTriggerCheckbox, initialValues } = props const onTriggerCheckboxRef = useRef(onTriggerCheckbox) diff --git a/src/pages/shopping/components/shoppingCartItem/index.tsx b/src/pages/shopping/components/shoppingCartItem/index.tsx index 5451899..baa2b94 100644 --- a/src/pages/shopping/components/shoppingCartItem/index.tsx +++ b/src/pages/shopping/components/shoppingCartItem/index.tsx @@ -1,24 +1,27 @@ import { Text, View } from '@tarojs/components' -import { FC, forwardRef, memo, useCallback, useEffect, useMemo, useRef, useState, useTransition } from 'react' -import styles from './index.module.scss' +import { nextTick } from '@tarojs/taro' +import type { FC } from 'react' +import { forwardRef, memo, useCallback, useEffect, useMemo, useRef, useState, useTransition } from 'react' import classnames from 'classnames' +import classNames from 'classnames' +import produce, { setAutoFreeze } from 'immer' +import ColorKindItem from '../colorKindItem' +import { selectList } from '../../config' +import type { Goods, GoodsMeta, ShoppingStateContextValue } from '../../context' +import { ShoppingDispatchType, useShoppingDispatch, useShoppingState } from '../../context' +import type { ShoppingStore } from '../../context/shoppingStore' +import { events } from '../../context/shoppingStore' +import styles from './index.module.scss' import { formatMeterDiv } from '@/common/format' import LayoutBlock from '@/components/layoutBlock' import Tag from '@/components/tag' import Divider from '@/components/divider' -import ColorKindItem from '../colorKindItem' import { EnumSaleMode } from '@/common/Enumerate' -import { selectList } from '../../config' -import { Goods, GoodsMeta, ShoppingDispatchType, ShoppingStateContextValue, useShoppingDispatch, useShoppingState } from '../../context' import IconFont from '@/components/iconfont/iconfont' import { alert, isEmptyObject } from '@/common/common' -import classNames from 'classnames' import LoadingCard from '@/components/loadingCard' import { ShoppingCartListApi } from '@/api' -import { events, ShoppingStore } from '../../context/shoppingStore' import { usePropsValue } from '@/use/useCommon' -import produce, { setAutoFreeze } from 'immer' -import { nextTick } from '@tarojs/taro' interface ButtonPropsType { isActive: boolean @@ -28,7 +31,7 @@ interface ButtonPropsType { } type OperationType = 'add' | 'delete' // 订单类型 -const SaleModeButton: FC = props => { +const SaleModeButton: FC = (props) => { const { onClick, children, isActive = false, customStyle } = props const handleClick = () => { onClick?.() @@ -43,7 +46,7 @@ const SaleModeButton: FC = props => { const DrawerButton = memo<{ isOpen: boolean }>(({ isOpen }) => { return ( - {isOpen ? : } + {isOpen ? : } ) }) @@ -54,7 +57,7 @@ enum BackEndSaleModeListFieldMap { weight_cut_color_list = 2, } -type PropsType = { +interface PropsType { itemData?: ShoppingCartData state?: { multipleSelection?: GoodsMeta['multipleSelection'] @@ -63,7 +66,7 @@ type PropsType = { } } -const ShoppingCartItem: FC = props => { +const ShoppingCartItem: FC = (props) => { const { state } = props console.log('rerender component ShoppingCartItem', props) @@ -84,7 +87,7 @@ const ShoppingCartItem: FC = props => { const [selected, setSelect] = useState(0) const onSelectOrderType = (type: EnumSaleMode) => { - if (isPending) return + if (isPending) { return } setSelect(type) dispatch({ type: ShoppingDispatchType.UPDATE_CURRENT_CHECKED_SALEMODE, data: type }) // 重置预估金额 @@ -92,7 +95,6 @@ const ShoppingCartItem: FC = props => { dispatch({ type: ShoppingDispatchType.UPDATE_MULTIPLE_SELECTION_STATUS, data: false }) } - const handleClickLayout = () => { if (currentCheckedPurchaserId === itemData?.purchaser_id) { return @@ -108,7 +110,7 @@ const ShoppingCartItem: FC = props => { // 统计已选面料 const materialChecked = useMemo(() => { - if (!multipleSelection || isEmptyObject(multipleSelection)) return 0 + if (!multipleSelection || isEmptyObject(multipleSelection)) { return 0 } return new Set( Object.values(multipleSelection)?.reduce((prev, item: Goods) => { if (item.sale_mode === selected) { @@ -121,8 +123,8 @@ const ShoppingCartItem: FC = props => { // 统计已选颜色 const colorChecked = useMemo(() => { - console.log('colorChecked item',multipleSelection); - if (!multipleSelection || isEmptyObject(multipleSelection)) return 0 + console.log('colorChecked item', multipleSelection) + if (!multipleSelection || isEmptyObject(multipleSelection)) { return 0 } return new Set( Object.values(multipleSelection).reduce((prev, item: Goods) => { if (item.sale_mode === selected) { @@ -135,8 +137,8 @@ const ShoppingCartItem: FC = props => { // 统计已选条数 / 米数 const lengthOrRollChecked = useMemo(() => { - console.log('lengthOrRollChecked item',multipleSelection); - if (!multipleSelection || isEmptyObject(multipleSelection)) return 0 + console.log('lengthOrRollChecked item', multipleSelection) + if (!multipleSelection || isEmptyObject(multipleSelection)) { return 0 } return ( Object.values(multipleSelection).reduce((prev, item: Goods) => { return prev + item.count @@ -148,37 +150,38 @@ const ShoppingCartItem: FC = props => { const { fetchData } = ShoppingCartListApi() // 更新当前客户的多选项 const updatePurchaserMultipleSelection = (purchaserId, payload, operationType: OperationType, goodsId: number) => { - if(operationType === 'add'){ + if (operationType === 'add') { dispatch({ type: ShoppingDispatchType.UPDATE_CHANGED_CHECKBOX, data: { - purchaserId: purchaserId, - multipleSelection: produce(multipleSelection, (multipleSelectionDraft) =>{ - if(!multipleSelectionDraft){ + purchaserId, + multipleSelection: produce(multipleSelection, (multipleSelectionDraft) => { + if (!multipleSelectionDraft) { return { - [goodsId]: payload + [goodsId]: payload, } - }else{ + } + else { multipleSelectionDraft[goodsId] = payload } }), }, }) - - }else if(operationType === 'delete'){ - const temp = {...multipleSelection} + } + else if (operationType === 'delete') { + const temp = { ...multipleSelection } delete temp?.[goodsId] dispatch({ type: ShoppingDispatchType.UPDATE_CHANGED_CHECKBOX, data: { - purchaserId: purchaserId, + purchaserId, multipleSelection: temp, }, }) } } // 发布订阅 - useEffect(()=>{ + useEffect(() => { events.on('updatePurchaserMultipleSelection', updatePurchaserMultipleSelection) return () => { events.off('updatePurchaserMultipleSelection', updatePurchaserMultipleSelection) @@ -186,9 +189,9 @@ const ShoppingCartItem: FC = props => { }, [updatePurchaserMultipleSelection]) // 发布订阅 useEffect(() => { - console.log('update multipleSelection',multipleSelection); - const unsubscribe = state?.Observer?.subscribe(async id => { - if (itemData?.purchaser_id !== id) return + console.log('update multipleSelection', multipleSelection) + const unsubscribe = state?.Observer?.subscribe(async(id) => { + if (itemData?.purchaser_id !== id) { return } console.log('request new data start run') const res = await fetchData({ purchaser_id: id, @@ -235,7 +238,8 @@ const ShoppingCartItem: FC = props => { }, }) setItemData(() => res.data[0]) - }else{ + } + else { alert.error('请求失败') } }) @@ -247,12 +251,13 @@ const ShoppingCartItem: FC = props => { + onClick={handleClickLayout} + > - + {itemData?.purchaser_name} - + {itemData?.sale_user_name} @@ -278,19 +283,22 @@ const ShoppingCartItem: FC = props => { onSelectOrderType(EnumSaleMode.Bulk)}> + onClick={() => onSelectOrderType(EnumSaleMode.Bulk)} + > 大货 onSelectOrderType(EnumSaleMode.Plate)}> + onClick={() => onSelectOrderType(EnumSaleMode.Plate)} + > 剪板 onSelectOrderType(EnumSaleMode.BulkCut)}> + onClick={() => onSelectOrderType(EnumSaleMode.BulkCut)} + > 散剪 @@ -299,7 +307,7 @@ const ShoppingCartItem: FC = props => { 布料颜色 - + {selectList[selected].title}单位:{selectList[selected].unit} @@ -327,7 +335,7 @@ interface GoodsListPropType { isPending: boolean startTransition: React.TransitionStartFunction } -const GoodsList = memo(props => { +const GoodsList = memo((props) => { const { itemData, selected, isPending, startTransition, multipleSelection } = props const prevMultipleSelection = useRef(multipleSelection) const currentSelected = useRef(null) @@ -338,49 +346,51 @@ const GoodsList = memo(props => { // 使用 produce 更新特定的 ColorKindItem const updateSpecifiedComponent = () => { let newId - if(multipleSelection && prevMultipleSelection.current !== multipleSelection){ - for(let key in multipleSelection){ - if(!prevMultipleSelection.current?.hasOwnProperty(key)){ + if (multipleSelection && prevMultipleSelection.current !== multipleSelection) { + for (const key in multipleSelection) { + if (!prevMultipleSelection.current?.hasOwnProperty(key)) { newId = key break } - } + } } - console.log('multipleSelection==+>',multipleSelection); - console.log('currentSelected', currentSelected.current, selected); - console.log('component',component); - if(component){ - if(itemData?.[BackEndSaleModeListFieldMap[selected]].length !== 0){ + console.log('multipleSelection==+>', multipleSelection) + console.log('currentSelected', currentSelected.current, selected) + console.log('component', component) + if (component) { + if (itemData?.[BackEndSaleModeListFieldMap[selected]].length !== 0) { setComponent(produce(component, (draft) => { - console.log('prev',component); - const index = (draft as unknown as any[]).findIndex((item)=> item.key === newId) - console.log('index',index) - if(index !== -1) { - const item = itemData?.[BackEndSaleModeListFieldMap[selected]].find(item => { + console.log('prev', component) + const index = (draft as unknown as any[]).findIndex(item => item.key === newId) + console.log('index', index) + if (index !== -1) { + const item = itemData?.[BackEndSaleModeListFieldMap[selected]].find((item) => { return item.id === Number(newId) }) - console.log('item', item, newId); + console.log('item', item, newId) draft![index] = } })) - }else{ + } + else { setComponent(暂无数据) } } prevMultipleSelection.current = multipleSelection - } // 更新 GoodsList 组件 const updateComponent = () => { setComponent( - () => itemData?.[BackEndSaleModeListFieldMap[selected]].length !== 0 ? ( - itemData?.[BackEndSaleModeListFieldMap[selected]].map(item => { - console.log('item===>', item, multipleSelection?.hasOwnProperty(item.id)) - return - }) - ) : ( - 暂无数据 - ) + () => itemData?.[BackEndSaleModeListFieldMap[selected]].length !== 0 + ? ( + itemData?.[BackEndSaleModeListFieldMap[selected]].map((item) => { + console.log('item===>', item, multipleSelection?.hasOwnProperty(item.id)) + return + }) + ) + : ( + 暂无数据 + ), ) prevMultipleSelection.current = multipleSelection } @@ -406,11 +416,12 @@ const GoodsList = memo(props => { data: { purchaserId: itemData?.purchaser_id!, goodsKind: newGoodsKind, - multipleSelection: multipleSelection, + multipleSelection, }, }) updateComponent() - } else { + } + else { currentSelected.current = selected // 重新把当前的选中状态赋值给ref 作为下一次比较的旧状态 dispatch({ @@ -427,13 +438,15 @@ const GoodsList = memo(props => { return ( <> - {isPending ? ( - - - - ) : ( - component - )} + {isPending + ? ( + + + + ) + : ( + component + )} ) }) @@ -445,27 +458,27 @@ const withStateSlice = (comp, slice) => { if (JSON.stringify(prevProps.itemData) !== JSON.stringify(nextProps.itemData)) { needMemo = false } - if(prevProps.itemData.purchaser_name === 'JENNIE'){ - console.log('------withStateSlice props-------'); - console.log('withStateSlice props prevProps', prevProps); - console.log('withStateSlice props prevProps comparison itemData', prevProps.itemData === nextProps.itemData); - console.log('withStateSlice props nextProps', nextProps); - console.log('withStateSlice props prevProps comparison multipleSelection', prevProps.state.multipleSelection === nextProps.state.multipleSelection); - console.log('withStateSlice props prevProps comparison currentCheckedPurchaserId', prevProps.state.currentCheckedPurchaserId === nextProps.state.currentCheckedPurchaserId); - console.log('withStateSlice props prevProps comparison Observer', prevProps.state.Observer === nextProps.state.Observer); - console.log('withStateSlice props prevProps comparison state', prevProps.state === nextProps.state); - console.log('------withStateSlice props-------'); + if (prevProps.itemData.purchaser_name === 'JENNIE') { + console.log('------withStateSlice props-------') + console.log('withStateSlice props prevProps', prevProps) + console.log('withStateSlice props prevProps comparison itemData', prevProps.itemData === nextProps.itemData) + console.log('withStateSlice props nextProps', nextProps) + console.log('withStateSlice props prevProps comparison multipleSelection', prevProps.state.multipleSelection === nextProps.state.multipleSelection) + console.log('withStateSlice props prevProps comparison currentCheckedPurchaserId', prevProps.state.currentCheckedPurchaserId === nextProps.state.currentCheckedPurchaserId) + console.log('withStateSlice props prevProps comparison Observer', prevProps.state.Observer === nextProps.state.Observer) + console.log('withStateSlice props prevProps comparison state', prevProps.state === nextProps.state) + console.log('------withStateSlice props-------') } if (prevProps.state.Observer !== nextProps.state.Observer) { - console.log('Observer 有变化'); + console.log('Observer 有变化') needMemo = false } if (prevProps.state.multipleSelection !== nextProps.state.multipleSelection) { - console.log('multipleSelection 有变化'); + console.log('multipleSelection 有变化') needMemo = false } if (prevProps.state.currentCheckedPurchaserId !== nextProps.state.currentCheckedPurchaserId) { - console.log('currentCheckedPurchaserId 有变化'); + console.log('currentCheckedPurchaserId 有变化') needMemo = false } return needMemo @@ -478,7 +491,7 @@ const withStateSlice = (comp, slice) => { } const ShoppingCartItemWithStateSlice = withStateSlice(ShoppingCartItem, (state: ShoppingStateContextValue, props) => ({ - multipleSelection: state.colorStore?.[props.itemData?.purchaser_id]?.['multipleSelection'], + multipleSelection: state.colorStore?.[props.itemData?.purchaser_id]?.multipleSelection, currentCheckedPurchaserId: state.currentCheckedPurchaserId, Observer: state.Observer, })) diff --git a/src/pages/shopping/context/index.ts b/src/pages/shopping/context/index.ts index 64545e6..cf60c04 100644 --- a/src/pages/shopping/context/index.ts +++ b/src/pages/shopping/context/index.ts @@ -1,8 +1,8 @@ -import { EnumSaleMode } from '@/common/Enumerate' import produce from 'immer' -import React, { Dispatch } from 'react' -import { useContext } from 'react' -import { ShoppingStore } from './shoppingStore' +import type { Dispatch } from 'react' +import React, { useContext } from 'react' +import type { ShoppingStore } from './shoppingStore' +import type { EnumSaleMode } from '@/common/Enumerate' /** * 456: { @@ -30,11 +30,9 @@ import { ShoppingStore } from './shoppingStore' * } * } */ -export type ColorStore = { - [purchaserId: GoodsMeta['purchaserId']]: GoodsMeta -} +export type ColorStore = Record -export type Goods = { +export interface Goods { id: number product_code: number // 面料编号 product_color_code: number // 颜色编号 @@ -47,9 +45,7 @@ export type Goods = { // 分组 export interface GoodsMeta { purchaserId: number - goodsKind?: { - [id: Goods['id']]: Goods - } + goodsKind?: Record multipleSelection?: GoodsMeta['goodsKind'] } @@ -83,13 +79,12 @@ export interface ShoppingDispatchContextValue { [ShoppingDispatchType.UPDATE_CHANGED_CHECKBOX]: (amount: React.SetStateAction) => void } - -export type ShoppingAction = { +export interface ShoppingAction { type: ShoppingDispatchType data?: any } -export const shoppingReducer = produce((draft: ShoppingStateContextValue, action: ShoppingAction)=>{ +export const shoppingReducer = produce((draft: ShoppingStateContextValue, action: ShoppingAction) => { const { type, data } = action switch (type) { case ShoppingDispatchType.UPDATE_MANAGE_STATUS: { @@ -117,14 +112,15 @@ export const shoppingReducer = produce((draft: ShoppingStateContextValue, action break } case ShoppingDispatchType.UPDATE_CHANGED_CHECKBOX: { - if(!draft.colorStore[data.purchaserId]){ + if (!draft.colorStore[data.purchaserId]) { draft.colorStore[data.purchaserId] = { purchaserId: data.purchaserId, goodsKind: data.goodsKind, - multipleSelection: data.multipleSelection + multipleSelection: data.multipleSelection, } - }else{ - draft.colorStore[data.purchaserId] = produce(draft.colorStore[data.purchaserId], purchaserDraft => { + } + else { + draft.colorStore[data.purchaserId] = produce(draft.colorStore[data.purchaserId], (purchaserDraft) => { purchaserDraft.purchaserId = data.purchaserId purchaserDraft.goodsKind = { ...purchaserDraft.goodsKind, ...data.goodsKind } purchaserDraft.multipleSelection = data.multipleSelection ? data.multipleSelection : purchaserDraft?.multipleSelection @@ -136,7 +132,6 @@ export const shoppingReducer = produce((draft: ShoppingStateContextValue, action throwError() } }) - export const ShoppingStateContext = React.createContext(null) @@ -160,7 +155,7 @@ export function useShoppingDispatch() { export function useWatch(purchaserId: GoodsMeta['purchaserId'], id: number) { const { colorStore } = useShoppingState() - return id ? colorStore[purchaserId]['goodsKind']![id] : colorStore[purchaserId]['goodsKind'] + return id ? colorStore[purchaserId].goodsKind![id] : colorStore[purchaserId].goodsKind } export interface ShoppingCartAction { diff --git a/src/pages/shopping/context/shoppingStore.ts b/src/pages/shopping/context/shoppingStore.ts index bc20efe..110c3eb 100644 --- a/src/pages/shopping/context/shoppingStore.ts +++ b/src/pages/shopping/context/shoppingStore.ts @@ -1,8 +1,9 @@ // 用于优化数据流 结合发布订阅 更新组件内部状态可以组件自己处理 -import { Events } from "@tarojs/taro" -import { ColorStore } from "." +import { Events } from '@tarojs/taro' +import type { ColorStore } from '.' + export const events = new Events() export type SubscribeCallback = (changedGoods: any) => void @@ -16,10 +17,12 @@ export class ShoppingStore { constructor(initialValue?: any) { initialValue && this.updateStore(initialValue) } + // 更新全局缓存 private updateStore(nextStore: ColorStore) { this.store = nextStore } + // 订阅 subscribe(callback: SubscribeCallback) { this.observers.push(callback) @@ -30,10 +33,11 @@ export class ShoppingStore { }) } } + // 通知 notify(changedGoods: any) { // 循环调用 - this.observers.forEach(callback => { + this.observers.forEach((callback) => { callback(changedGoods) }) } diff --git a/src/pages/shopping/index.config.ts b/src/pages/shopping/index.config.ts index f0dc887..1f72589 100644 --- a/src/pages/shopping/index.config.ts +++ b/src/pages/shopping/index.config.ts @@ -1,4 +1,4 @@ export default { - navigationBarTitleText: '购物页面', - + navigationBarTitleText: '购物页面', + } diff --git a/src/pages/shopping/index.tsx b/src/pages/shopping/index.tsx index 216a81a..5be4970 100644 --- a/src/pages/shopping/index.tsx +++ b/src/pages/shopping/index.tsx @@ -1,19 +1,21 @@ -import Search from '@/components/search' import { View } from '@tarojs/components' import Taro, { useDidShow } from '@tarojs/taro' -import { FC, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, useTransition } from 'react' -import styles from './index.module.scss' +import type { FC } from 'react' +import { memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, useTransition } from 'react' import classnames from 'classnames' -import IconText from '@/components/iconText' -import InfiniteScroll from '@/components/infiniteScroll' +import styles from './index.module.scss' import ItemList from './components/shoppingCartItem/index' -import { formatPriceDiv } from '@/common/format' import BottomSettleBar from './components/bottomSettleBar' import BottomEditBar from './components/bottomEditBar' -import { ShoppingCartDeleteApi, ShoppingCartListApi } from '@/api/index' -import { dataLoadingStatus, debounce, getFilterData } from '@/common/util' import { ShoppingProvider } from './components/shoppingCart/index' -import { Goods, ShoppingDispatchType, useShoppingDispatch, useShoppingState } from './context' +import type { Goods } from './context' +import { ShoppingDispatchType, useShoppingDispatch, useShoppingState } from './context' +import { dataLoadingStatus, debounce, getFilterData } from '@/common/util' +import { ShoppingCartDeleteApi, ShoppingCartListApi } from '@/api/index' +import { formatPriceDiv } from '@/common/format' +import InfiniteScroll from '@/components/infiniteScroll' +import IconText from '@/components/iconText' +import Search from '@/components/search' import { alert, goLink, isEmptyObject } from '@/common/common' export const Shopping: FC = memo(() => { @@ -22,12 +24,13 @@ export const Shopping: FC = memo(() => { console.log('handleTriggerCheckbox==>', multipleSelection) if (multipleSelection) { - const result = Object.values(multipleSelection).reduce((prev: number , value: Goods) => { + const result = Object.values(multipleSelection).reduce((prev: number, value: Goods) => { return prev + Number(formatPriceDiv(value.estimate_amount)) }, 0) as number // 同步修改上下文的 预估金额 setSelectedAmount(result) - } else { + } + else { setSelectedAmount(0) } } @@ -43,7 +46,7 @@ interface SearchOptions { } const ShoppingCartContainer: FC = () => { - let isFirst = useRef(true) + const isFirst = useRef(true) const { isMultipleSelection, isManageStatus, selectedAmount, currentCheckedPurchaserId, currentCheckedSaleMode, colorStore } = useShoppingState() @@ -82,8 +85,8 @@ const ShoppingCartContainer: FC = () => { }, [searchOptions]) // 输入了搜索关键字 - const getSearchData = useCallback(e => { - console.log('getSearchData===>',e); + const getSearchData = useCallback((e) => { + console.log('getSearchData===>', e) setSearchOptions({ short_name_or_phone: e }) }, []) @@ -92,8 +95,7 @@ const ShoppingCartContainer: FC = () => { total: number }>({ list: [], total: 0 }) - - //数据加载状态 + // 数据加载状态 const statusMore = useMemo(() => { console.log('shoppingCartData==>', shoppingCartData, state) const status = dataLoadingStatus({ @@ -107,22 +109,22 @@ const ShoppingCartContainer: FC = () => { // useLayoutEffect 执行在DOM更新之后,浏览器绘制之前 如果放在 useEffect 里面会产生多一次不必要的回流和重绘,可能会引起视图闪现 useLayoutEffect(() => { - ;(async () => { + (async() => { console.log('useLayoutEffect') await fetchData(getFilterData(searchOptions)) isFirst.current = false - let query = Taro.createSelectorQuery() + const query = Taro.createSelectorQuery() console.log('query', query) query.select('#shoppingContainer').boundingClientRect() query.select('#topBar').boundingClientRect() query.select('#bottomBar').boundingClientRect() - query.exec(res => { + query.exec((res) => { console.log('res==>', res) const containerHeight = res[0].height const topBarHeight = res[1].height const bottomBarHeight = res[2].height const listHeight = containerHeight - topBarHeight - bottomBarHeight - listHeightRef.current = listHeight + 'px' + listHeightRef.current = `${listHeight}px` // 强制刷新 setForceUpdate({}) }) @@ -131,19 +133,19 @@ const ShoppingCartContainer: FC = () => { useEffect(() => { if (state.success) { - console.log('fetch success', state); + console.log('fetch success', state) setShoppingCartData({ list: state.data.list, total: state.data.total }) } }, [state]) // 结算 const handleSettleAccount = debounce(() => { - const multipleSelection = colorStore?.[currentCheckedPurchaserId]?.['multipleSelection'] - if (!multipleSelection) return alert.error('请先选择客户') + const multipleSelection = colorStore?.[currentCheckedPurchaserId]?.multipleSelection + if (!multipleSelection) { return alert.error('请先选择客户') } const checkedGoodsKind = Object.values(multipleSelection).reduce((prev, item: Goods) => { return [...prev, item.id] }, []) - if (checkedGoodsKind.length === 0) return alert.error('请先选择商品') + if (checkedGoodsKind.length === 0) { return alert.error('请先选择商品') } goLink('/pages/submitOrder/index', { purchaser_id: currentCheckedPurchaserId, sale_mode: currentCheckedSaleMode, @@ -155,16 +157,16 @@ const ShoppingCartContainer: FC = () => { const { fetchData: deleteApi } = ShoppingCartDeleteApi() // 批量某个客户的删除商品 - const handleDelete = async () => { + const handleDelete = async() => { const multipleSelection = colorStore?.[currentCheckedPurchaserId].multipleSelection - let checked: Goods[] = Object.values(multipleSelection!) + const checked: Goods[] = Object.values(multipleSelection!) if (checked.length === 0) { return alert.error('请选择商品') } console.log('checked==>', checked) Taro.showModal({ title: '要删除这些商品吗?', - success: async function(res) { + async success(res) { if (res.confirm) { alert.showLoading('删除中') const res = await deleteApi({ @@ -184,7 +186,8 @@ const ShoppingCartContainer: FC = () => { }) fetchData(searchOptions) // Observer.notify(currentCheckedPurchaserId) - } else { + } + else { alert.hideLoading() alert.none(res.msg) } @@ -195,7 +198,7 @@ const ShoppingCartContainer: FC = () => { // 全选 const handleSelectAllCheckbox = (isSelectAll: boolean) => { const targetGoodsKind = colorStore?.[currentCheckedPurchaserId].goodsKind - if (!targetGoodsKind) return alert.error('请先选择客户') + if (!targetGoodsKind) { return alert.error('请先选择客户') } const tempObject = { ...targetGoodsKind } dispatch({ @@ -211,13 +214,14 @@ const ShoppingCartContainer: FC = () => { const [refreshStatus, setRefreshStatus] = useState(false) // 下拉刷新 - const handleRefresh = async () => { + const handleRefresh = async() => { setRefreshStatus(true) const res = await fetchData(getFilterData(searchOptions)) if (res.success) { setRefreshStatus(false) alert.success('刷新成功') - } else { + } + else { alert.error('刷新失败') setRefreshStatus(false) } @@ -225,40 +229,45 @@ const ShoppingCartContainer: FC = () => { // const [isPending, startTransition] = useTransition() return ( - - - + + + - {isManageStatus ? ( - - ) : ( - - )} + {isManageStatus + ? ( + + ) + : ( + + )} - - + + { - !!shoppingCartData?.list?.length && - shoppingCartData?.list?.map((item, index) => { + !!shoppingCartData?.list?.length + && shoppingCartData?.list?.map((item, index) => { return }) } - - {isManageStatus ? ( - handleSelectAllCheckbox(isAll)}> - ) : ( - - )} + + {isManageStatus + ? ( + handleSelectAllCheckbox(isAll)} + > + ) + : ( + + )} ) diff --git a/src/pages/shopping/types.ts b/src/pages/shopping/types.ts index 7404159..99a41be 100644 --- a/src/pages/shopping/types.ts +++ b/src/pages/shopping/types.ts @@ -7,8 +7,8 @@ interface ShoppingCartData { sale_user_id: number sale_user_name: string bulk_color_list: ColorList - length_cut_color_list: ColorList // 剪板 - weight_cut_color_list: ColorList // 散剪 + length_cut_color_list: ColorList // 剪板 + weight_cut_color_list: ColorList // 散剪 [Property: string]: any } interface ColorList { diff --git a/src/pages/submitOrder/index.config.ts b/src/pages/submitOrder/index.config.ts index cbe03aa..f26d28a 100644 --- a/src/pages/submitOrder/index.config.ts +++ b/src/pages/submitOrder/index.config.ts @@ -1,4 +1,4 @@ export default { - navigationBarTitleText: '确认订单', - -} \ No newline at end of file + navigationBarTitleText: '确认订单', + +} diff --git a/src/pages/submitOrder/index.tsx b/src/pages/submitOrder/index.tsx index afcc5c6..7d20bec 100644 --- a/src/pages/submitOrder/index.tsx +++ b/src/pages/submitOrder/index.tsx @@ -1,311 +1,306 @@ import { View } from '@tarojs/components' -import React, { useCallback, memo, useEffect, useMemo, useRef, useState, ReactNode } from 'react' -import styles from "./index.module.scss" -import classnames from "classnames"; -import Taro, { usePullDownRefresh, useRouter, useDidShow } from '@tarojs/taro'; +import Taro, { useDidShow, usePullDownRefresh, useRouter } from '@tarojs/taro' +import type { ReactNode } from 'react' +import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import classnames from 'classnames' import AddressDetailBox from '../orderDetails/components/addressDetailBox' import Remark from '../orderDetails/components//remark' +import styles from './index.module.scss' import Popup from '@/components/popup' import { debounce } from '@/common/util' import { - mpsaleOrderpreView, - mpsaleOrderpost, + mpsaleOrderpost, + mpsaleOrderpreView, } from '@/api/order' import { alert } from '@/common/common' -import { formatPriceDiv, formatDateTime, formatWeightDiv } from '@/common/format' +import { formatDateTime, formatPriceDiv, formatWeightDiv } from '@/common/format' import IconFont from '@/components/iconfont/iconfont' + export default () => { - const router: any = useRouter() - const [infoObj, setInfoObj] = useState({}) - let selectId: number = -1 - useDidShow(() => { - //获取选择的地址 - let pages = Taro.getCurrentPages(); - let currPage = pages[pages.length - 1]; // 获取当前页面 - setInfoObj((val) => ({ - ...val, - sale_mode: Number(router.params.sale_mode), - province_name: currPage.data?.addressObj?.province_name ? currPage.data?.addressObj?.province_name : '', - address_id: currPage.data?.addressObj?.id ? currPage.data?.addressObj?.id : '', - city_name: currPage.data?.addressObj?.city_name ? currPage.data?.addressObj?.city_name : '', - address_detail: currPage.data?.addressObj?.address_detail ? currPage.data?.addressObj?.address_detail : '', - district_name: currPage.data?.addressObj?.district_name ? currPage.data?.addressObj?.district_name : '', - target_user_name: currPage.data?.addressObj?.name ? currPage.data?.addressObj?.name : '', - purchaser_phone: currPage.data?.addressObj?.phone ? currPage.data?.addressObj?.phone : '', - })) - selectId = currPage.data?.addressObj?.id - let obj = currPage?.data?.ids?.filter(item => { return item == selectId }) - if (currPage?.data?.ids && obj.length === 0) { - setInfoObj((val) => ({ - ...val, - sale_mode: Number(router.params.sale_mode), - province_name: '', - address_id: '', - city_name: '', - address_detail: '', - district_name: '', - target_user_name: '', - purchaser_phone: '', - })) - } - if (!currPage.data?.addressObj) { - setReceivingStatus(1) - } else { - setReceivingStatus(2) - } + const router: any = useRouter() + const [infoObj, setInfoObj] = useState({}) + let selectId = -1 + useDidShow(() => { + // 获取选择的地址 + const pages = Taro.getCurrentPages() + const currPage = pages[pages.length - 1] // 获取当前页面 + setInfoObj(val => ({ + ...val, + sale_mode: Number(router.params.sale_mode), + province_name: currPage.data?.addressObj?.province_name ? currPage.data?.addressObj?.province_name : '', + address_id: currPage.data?.addressObj?.id ? currPage.data?.addressObj?.id : '', + city_name: currPage.data?.addressObj?.city_name ? currPage.data?.addressObj?.city_name : '', + address_detail: currPage.data?.addressObj?.address_detail ? currPage.data?.addressObj?.address_detail : '', + district_name: currPage.data?.addressObj?.district_name ? currPage.data?.addressObj?.district_name : '', + target_user_name: currPage.data?.addressObj?.name ? currPage.data?.addressObj?.name : '', + purchaser_phone: currPage.data?.addressObj?.phone ? currPage.data?.addressObj?.phone : '', + })) + selectId = currPage.data?.addressObj?.id + const obj = currPage?.data?.ids?.filter((item) => { return item == selectId }) + if (currPage?.data?.ids && obj.length === 0) { + setInfoObj(val => ({ + ...val, + sale_mode: Number(router.params.sale_mode), + province_name: '', + address_id: '', + city_name: '', + address_detail: '', + district_name: '', + target_user_name: '', + purchaser_phone: '', + })) + } + if (!currPage.data?.addressObj) { + setReceivingStatus(1) + } + else { + setReceivingStatus(2) + } + }) + useEffect(() => { + getDetail() + }, []) + + // 收货方法,1:自提,2物流 + const [receivingStatus, setReceivingStatus] = useState(null) + // 切换自提或者物流 + const onReceivingStatus = debounce(async(e, value) => { + e.stopPropagation() + if (receivingStatus == value) { + alert.error('不能选择相同的方式') + return false + } + Taro.showLoading({ + title: '请稍等...', + mask: true, }) - useEffect(() => { - getDetail() - }, []) + setReceivingStatus(value) + Taro.hideLoading() + }, 300) + const { fetchData: infoFetch } = mpsaleOrderpreView() + const [pussName, setPusername] = useState('') + // 获取订单详情 + const getDetail = async() => { + let arr: any[] = [] + setPusername(decodeURIComponent(router.params.purchaser_name)) + arr = JSON.parse(decodeURIComponent(router.params.shopping_cart_product_color_list)) + const list: any[] = [] + arr?.forEach((item) => { + list.push({ + shopping_cart_product_color_id: item, + sale_price: 0, + }) + }) + const query = { + purchaser_id: Number(router.params.purchaser_id), + sale_mode: Number(router.params.sale_mode), + shopping_cart_product_color_list: list, + } + const res = await infoFetch(query) + setInfoObj(res.data) + } - //收货方法,1:自提,2物流 - const [receivingStatus, setReceivingStatus] = useState(null) - //切换自提或者物流 - const onReceivingStatus = debounce(async (e, value) => { - e.stopPropagation() - if (receivingStatus == value) { - alert.error('不能选择相同的方式') - return false - } - Taro.showLoading({ + // 备注操作 + const [showDesc, setShowDesc] = useState(false) + const getRemark = useCallback(async(e) => { + setShowDesc(false) + setInfoObj(val => ({ ...val, remark: e })) + }, []) + + const handSelect = (obj) => { + if (receivingStatus == 1) { return false } + Taro.navigateTo({ + url: '/pages/addressManager/index?orderId=' + '-100' + `&purchaser_id=${router.params.purchaser_id}`, + }) + } + + // 提交订单 + const { fetchData: postFetch } = mpsaleOrderpost() + const handSure = () => { + if (receivingStatus == 2 && !infoObj.address_id) { + return alert.error('请选择地址') + } + const list: any[] = [] + infoObj.product_list.forEach((item) => { + item.product_colors.forEach((it) => { + list.push({ + sale_price: it.sale_price, + shopping_cart_product_color_id: Number(it.id), + }) + }) + }) + const query = { + address_id: Number(infoObj.address_id) ? Number(infoObj.address_id) : 0, + list, + physical_warehouse: infoObj.physical_warehouse, + purchaser_id: Number(router.params.purchaser_id), + remark: infoObj.remark, + sale_mode: infoObj.sale_mode, + shipment_mode: receivingStatus, + } + Taro.showModal({ + content: '确认提交吗?', + confirmText: '确认', + cancelText: '取消', + async success(res) { + if (res.confirm) { + Taro.showLoading({ title: '请稍等...', - mask: true - }) - setReceivingStatus(value) - Taro.hideLoading() - }, 300) - - const { fetchData: infoFetch } = mpsaleOrderpreView() - const [pussName, setPusername] = useState('') - //获取订单详情 - const getDetail = async () => { - let arr: any[] = [] - setPusername(decodeURIComponent(router.params.purchaser_name)) - arr = JSON.parse(decodeURIComponent(router.params.shopping_cart_product_color_list)) - let list: any[] = [] - arr?.forEach(item => { - list.push({ - shopping_cart_product_color_id: item, - sale_price: 0 + mask: true, + }) + const res = await postFetch(query) + if (res?.msg === 'success') { + Taro.showToast({ + title: '成功', }) - }) - const query = { - purchaser_id: Number(router.params.purchaser_id), - sale_mode: Number(router.params.sale_mode), - shopping_cart_product_color_list: list - } - const res = await infoFetch(query) - setInfoObj(res.data) - } - - //备注操作 - const [showDesc, setShowDesc] = useState(false) - const getRemark = useCallback(async (e) => { - setShowDesc(false) - setInfoObj((val) => ({ ...val, remark: e })) - }, []) - - - - - const handSelect = (obj) => { - if (receivingStatus == 1) return false - Taro.navigateTo({ - url: '/pages/addressManager/index?orderId=' + '-100' + '&purchaser_id=' + router.params.purchaser_id - }) - } - - //提交订单 - const { fetchData: postFetch } = mpsaleOrderpost() - const handSure = () => { - if (receivingStatus == 2 && !infoObj.address_id) { - return alert.error('请选择地址') - } - let list: any[] = [] - infoObj.product_list.forEach(item => { - item.product_colors.forEach(it => { - list.push({ - sale_price: it.sale_price, - shopping_cart_product_color_id: Number(it.id) - }) + Taro.hideLoading() + Taro.redirectTo({ + url: `/pages/orderDetails/index?id=${res.data.id}`, }) - }) - let query = { - address_id: Number(infoObj.address_id) ? Number(infoObj.address_id) : 0, - list: list, - physical_warehouse: infoObj.physical_warehouse, - purchaser_id: Number(router.params.purchaser_id), - remark: infoObj.remark, - sale_mode: infoObj.sale_mode, - shipment_mode: receivingStatus + } + else { + Taro.hideLoading() + Taro.showToast({ + title: res?.msg, + icon: 'error', + }) + } } - Taro.showModal({ - content: "确认提交吗?", - confirmText: "确认", - cancelText: "取消", - success: async function (res) { - if (res.confirm) { - Taro.showLoading({ - title: '请稍等...', - mask: true - }) - const res = await postFetch(query) - if (res?.msg === 'success') { - Taro.showToast({ - title: '成功' - }) - Taro.hideLoading() - Taro.redirectTo({ - url: '/pages/orderDetails/index?id=' + res.data.id - }) - } else { - Taro.hideLoading() - Taro.showToast({ - title: res?.msg, - icon: 'error' - }) - } - } + }, + }) + } - } - }) - } - - useEffect(() => { - setInfoObj(infoObj) - }, [infoObj]) - return ( - - handSelect(obj)} - obj={infoObj} - receivingStatus={receivingStatus} - onReceivingStatus={(e, value) => onReceivingStatus(e, value)} - > - - - {pussName} - {/* {infoObj.purchaser_phone} */} - - - {/* {infoObj.product_list?.length} 种面料,{infoObj.total_colors} 个颜色,共 {infoObj.sale_mode === 0 ? infoObj.total_number : infoObj.total_number / 100} {infoObj.sale_mode === 0 ? '条' : 'm'} */} - - - - - 合计金额 - - {/* */} - - ¥{formatPriceDiv(infoObj.estimate_amount)} - - - `} clickNode={() => setShowDesc(true)}> - {infoObj.remark === '' ? '暂无' : infoObj.remark} - - setShowDesc(false)}> - getRemark(e)} defaultValue={infoObj.remark} showInput={showDesc ? true : false} /> - - - - - - 预估金额: - ¥{formatPriceDiv(infoObj.estimate_amount)} - - {infoObj.product_list?.length} 种面料,{infoObj.total_colors} 种颜色,共 {infoObj.sale_mode === 0 ? infoObj.total_number : infoObj.total_number / 100} {infoObj.sale_mode === 0 ? '条' : 'm'} - - handSure()}>提交订单 - + useEffect(() => { + setInfoObj(infoObj) + }, [infoObj]) + return ( + + handSelect(obj)} + obj={infoObj} + receivingStatus={receivingStatus} + onReceivingStatus={(e, value) => onReceivingStatus(e, value)} + > + + + {pussName} + {/* {infoObj.purchaser_phone} */} - ) + + {/* {infoObj.product_list?.length} 种面料,{infoObj.total_colors} 个颜色,共 {infoObj.sale_mode === 0 ? infoObj.total_number : infoObj.total_number / 100} {infoObj.sale_mode === 0 ? '条' : 'm'} */} + + + + + 合计金额 + + {/* */} + + ¥{formatPriceDiv(infoObj.estimate_amount)} + + + `} clickNode={() => setShowDesc(true)}> + {infoObj.remark === '' ? '暂无' : infoObj.remark} + + setShowDesc(false)}> + getRemark(e)} defaultValue={infoObj.remark} showInput={!!showDesc} /> + + + + + + 预估金额: + ¥{formatPriceDiv(infoObj.estimate_amount)} + + {infoObj.product_list?.length} 种面料,{infoObj.total_colors} 种颜色,共 {infoObj.sale_mode === 0 ? infoObj.total_number : infoObj.total_number / 100} {infoObj.sale_mode === 0 ? '条' : 'm'} + + handSure()}>提交订单 + + + ) } - - -//卡片盒子元素 +// 卡片盒子元素 interface Obs { - title?: string, - modeName?: string, - showMode?: boolean, - children?: ReactNode, - clickNode?: () => void + title?: string + modeName?: string + showMode?: boolean + children?: ReactNode + clickNode?: () => void } const DefaultBox = memo((props: Obs) => { - const { - title = '标题', - modeName = '大货', - showMode = false, - children, - clickNode - } = props + const { + title = '标题', + modeName = '大货', + showMode = false, + children, + clickNode, + } = props - return ( - - - {title} - { - showMode && clickNode?.()}>{modeName} - } - - - {children} - - ) + return ( + + + {title} + { + showMode && clickNode?.()}>{modeName} + } + + + {children} + + ) }) - -//产品商品元素 +// 产品商品元素 interface PropGoods { - // item?: { - // code?: string | number - // } - list: any[], - obj: { - sale_mode?: number | string - }, + // item?: { + // code?: string | number + // } + list: any[] + obj: { + sale_mode?: number | string + } } const GoodsItem = memo((porps: PropGoods) => { - const { list = [], obj = {} } = porps - return ( - <> - { - list.map((item, index) => { - return ( - - {item.code}# {item.name} - - { - item.product_colors.map((it, inx) => { - return ( - - - - - {it.code} {it.name} - x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} - - - ¥{it.sale_price / 100}/{obj?.sale_mode === 1 ? 'm' : 'kg'} - ¥{formatPriceDiv(it.estimate_amount)} - - - - ) - }) - } + const { list = [], obj = {} } = porps + return ( + <> + { + list.map((item, index) => { + return ( + + {item.code}# {item.name} + + { + item.product_colors.map((it, inx) => { + return ( + + + + + {it.code} {it.name} + x{obj?.sale_mode === 0 ? it.roll : it.length / 100}{obj?.sale_mode === 0 ? '条' : 'm'} - ) + + ¥{it.sale_price / 100}/{obj?.sale_mode === 1 ? 'm' : 'kg'} + ¥{formatPriceDiv(it.estimate_amount)} + + + + ) }) - } - + } + + ) + }) + } + - ) + ) }) - diff --git a/src/pages/takeDelivery/components/DeliveryStatusList/index.tsx b/src/pages/takeDelivery/components/DeliveryStatusList/index.tsx index 067237e..2929646 100644 --- a/src/pages/takeDelivery/components/DeliveryStatusList/index.tsx +++ b/src/pages/takeDelivery/components/DeliveryStatusList/index.tsx @@ -1,8 +1,8 @@ -import SegmentedControl from '@/components/segmentedControl' import { FC, memo, useCallback, useEffect, useState } from 'react' +import SegmentedControl from '@/components/segmentedControl' import { EnumTakeGoodsOrderStatus } from '@/api/index' -type PropsType = { +interface PropsType { onChangeStatus?: (data: { id: number; name: string }) => void } @@ -16,7 +16,7 @@ const DeliveryStatusList = memo((props) => { }, ]) // 请求 - const getDeliveryStatusList = async () => { + const getDeliveryStatusList = async() => { const res = await fetchData() console.log(res.data.list) setStatusList( diff --git a/src/pages/takeDelivery/components/Filter/index.tsx b/src/pages/takeDelivery/components/Filter/index.tsx index 352acf8..035785f 100644 --- a/src/pages/takeDelivery/components/Filter/index.tsx +++ b/src/pages/takeDelivery/components/Filter/index.tsx @@ -1,12 +1,12 @@ -import NormalButton from '@/components/normalButton' import { View } from '@tarojs/components' import classnames from 'classnames' -import styles from './index.module.scss' import React, { FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' +import dayjs from 'dayjs' +import styles from './index.module.scss' +import NormalButton from '@/components/normalButton' import Search from '@/components/search' import IconFont from '@/components/iconfont/iconfont' import { EnumTakeGoodsOrderTypeList } from '@/api/index' -import dayjs from 'dayjs' import { getFilterData } from '@/common/util' import FilterButton from '@/components/filterButton' @@ -72,26 +72,25 @@ const DeliveryFilter = memo((props) => { const handleSelectedType = (type: string | number) => { console.log('type==>', type) if (typeof type === 'string' && type === 'default') { - setSearchFilter((e) => ({ ...e, take_goods_order_type: undefined })) - } else { - setSearchFilter((e) => ({ ...e, take_goods_order_type: type as number })) + setSearchFilter(e => ({ ...e, take_goods_order_type: undefined })) + } + else { + setSearchFilter(e => ({ ...e, take_goods_order_type: type as number })) } } - - const typeList = useMemo<{ id: number; name: string }[]>(() => { return state.data.list }, [state]) useEffect(() => { - if (!!!typeList?.length) { + if (!typeList?.length) { getEnumData() console.log('getEnumData') } }, [typeList]) - const getEnumData = async () => { + const getEnumData = async() => { await fetchData() } @@ -100,23 +99,21 @@ const DeliveryFilter = memo((props) => { date_max: undefined, }) - - const handleSelectedTime = (timeOptionId) => { - setSearchFilter((e) => ({ ...e, timeKey: timeOptionId })) + setSearchFilter(e => ({ ...e, timeKey: timeOptionId })) // 不是设置了自定义时间 if (timeOptionId !== '6') { setCustomTime({ - date_min: filterTimeOptions[timeOptionId]['date_min'], - date_max: filterTimeOptions[timeOptionId]['date_max'], + date_min: filterTimeOptions[timeOptionId].date_min, + date_max: filterTimeOptions[timeOptionId].date_max, }) return - } + } onSearchTime?.() } const handleReset = () => { - setSearchFilter({ take_goods_order_type: undefined, timeKey: '0'}) + setSearchFilter({ take_goods_order_type: undefined, timeKey: '0' }) onReset?.() } const handleConfirm = () => { @@ -129,7 +126,6 @@ const DeliveryFilter = memo((props) => { onConfirm?.(changedField, searchFilter.timeKey) } - return ( <> @@ -138,8 +134,8 @@ const DeliveryFilter = memo((props) => { handleSelectedType('default')}> 不限 - {!!typeList?.length && - typeList?.map(item => { + {!!typeList?.length + && typeList?.map((item) => { return ( handleSelectedType(item?.id)}> {item.name} @@ -163,15 +159,15 @@ const DeliveryFilter = memo((props) => { ) })} handleSelectedTime('6')}> - 自定义时间 + 自定义时间 - + 重置 - + 确认 @@ -179,5 +175,4 @@ const DeliveryFilter = memo((props) => { ) }) - export default DeliveryFilter diff --git a/src/pages/takeDelivery/components/ItemList/index.tsx b/src/pages/takeDelivery/components/ItemList/index.tsx index fb4bae4..d06ae3e 100644 --- a/src/pages/takeDelivery/components/ItemList/index.tsx +++ b/src/pages/takeDelivery/components/ItemList/index.tsx @@ -1,24 +1,24 @@ +import { Text, View } from '@tarojs/components' +import Taro from '@tarojs/taro' +import type { FC } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' import LayoutBlock from '@/components/layoutBlock' import Divider from '@/components/divider' import Tag from '@/components/tag' -import { View, Text } from '@tarojs/components' -import { FC } from 'react' import NormalButton from '@/components/normalButton' -import styles from './index.module.scss' -import classnames from 'classnames' import { EnumSaleMode } from '@/common/Enumerate' import { formatDateTime, formatMeterDiv } from '@/common/format' import { goLink } from '@/common/common' import { TakeGoodsOrderAudit } from '@/api/index' -import Taro from '@tarojs/taro' import SaleModeTag from '@/components/saleModeTag' -type PropsType = { +interface PropsType { itemData: Record onSuccess?: Function } -const ItemList:FC = (props) => { +const ItemList: FC = (props) => { const { itemData, onSuccess } = props // 查看详情 const handleDetail = (itemData: Record) => { @@ -34,13 +34,14 @@ const ItemList:FC = (props) => { Taro.showModal({ content: '确认要提货吗?', confirmColor: '#337FFF', - success: async (res) => { + success: async(res) => { if (res.confirm) { const res = await fetchData({ take_goods_order_id: [id] }) if (res.success) { Taro.showToast({ title: '提货成功', icon: 'success' }) onSuccess?.() - }else{ + } + else { Taro.showToast({ title: '操作失败', icon: 'error' }) } } @@ -60,12 +61,12 @@ const ItemList:FC = (props) => { {itemData?.take_goods_order_type_name} - + 货品信息: - + {itemData.product_count}种面料,{itemData.product_color_count}种颜色,共 {itemData?.sale_mode === EnumSaleMode.Bulk ? `${itemData?.take_roll}条` : `${formatMeterDiv(itemData?.take_meters)}米`} @@ -82,15 +83,16 @@ const ItemList:FC = (props) => { handleDetail(itemData)}> + onClick={() => handleDetail(itemData)} + > 查看详情 {itemData?.status === 0 && ( - handleAudit(itemData?.id)}> + handleAudit(itemData?.id)}> 确认审核 )} diff --git a/src/pages/takeDelivery/components/remark/index.tsx b/src/pages/takeDelivery/components/remark/index.tsx index db4b68f..4b64487 100644 --- a/src/pages/takeDelivery/components/remark/index.tsx +++ b/src/pages/takeDelivery/components/remark/index.tsx @@ -1,43 +1,43 @@ -import Popup from "@/components/popup" -import { Textarea, View } from "@tarojs/components" -import { useCallback, useEffect, useState } from "react" -import styles from './index.module.scss' +import { Textarea, View } from '@tarojs/components' +import { useCallback, useEffect, useState } from 'react' +import styles from './index.module.scss' +import Popup from '@/components/popup' -type Param = { - onBlur?: (val:any) => void - onSave?: (val: string) => void - defaultValue?: string +interface Param { + onBlur?: (val: any) => void + onSave?: (val: string) => void + defaultValue?: string } -export default ({onBlur, onSave, defaultValue = ''}:Param) => { - const [descData, setDescData] = useState({ - number: 0, - value: '', - count: 200 - }) +export default ({ onBlur, onSave, defaultValue = '' }: Param) => { + const [descData, setDescData] = useState({ + number: 0, + value: '', + count: 200, + }) - useEffect(() => { - getDesc(defaultValue) - }, [defaultValue]) + useEffect(() => { + getDesc(defaultValue) + }, [defaultValue]) - const getDesc = (value) => { - let res = value - if(value.length > descData.count) { - res = value.slice(0, descData.count) - } - setDescData({...descData, number:res.length, value: res}) + const getDesc = (value) => { + let res = value + if (value.length > descData.count) { + res = value.slice(0, descData.count) } + setDescData({ ...descData, number: res.length, value: res }) + } - const setSave = () => { - onSave?.(descData.value) - } - return ( - - 编辑备注 - - - {descData.number}/{descData.count} - - setSave()}>保存 - - ) -} \ No newline at end of file + const setSave = () => { + onSave?.(descData.value) + } + return ( + + 编辑备注 + + + {descData.number}/{descData.count} + + setSave()}>保存 + + ) +} diff --git a/src/pages/takeDelivery/index.tsx b/src/pages/takeDelivery/index.tsx index 6f7abe2..475d083 100644 --- a/src/pages/takeDelivery/index.tsx +++ b/src/pages/takeDelivery/index.tsx @@ -1,23 +1,24 @@ -import { View, Text } from '@tarojs/components' -import { useCallback, useEffect, useMemo, useRef, useState, FC, memo } from 'react' +import { Text, View } from '@tarojs/components' +import Taro, { useDidShow, useRouter } from '@tarojs/taro' +import type { FC } from 'react' +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react' import styles from './index.module.scss' +import ItemList from './components/ItemList' +import DeliveryStatusList from './components/DeliveryStatusList' +import type { SearchField } from './components/Filter' +import DeliveryFilter from './components/Filter' import Search from '@/components/search' import { TakeGoodsOrderList } from '@/api/index' -import Taro, { useDidShow } from '@tarojs/taro' -import { useRouter } from '@tarojs/taro' import InfiniteScroll from '@/components/infiniteScroll' import { dataLoadingStatus, getFilterData } from '@/common/util' import IconText from '@/components/iconText' import IconFont from '@/components/iconfont/iconfont' -import ItemList from './components/ItemList' -import DeliveryStatusList from './components/DeliveryStatusList' import Popup from '@/components/popup' -import DeliveryFilter, { SearchField } from './components/Filter' import TimePickerPopup from '@/components/timePickerPopup' import Empty from '@/components/empty' import { LIST_EMPTY_IMAGE } from '@/common/constant' -type SearchData = { +interface SearchData { take_goods_order_no?: string // 提货单号 take_goods_status?: number | string // 提货状态 date_min?: string // 开始时间 @@ -27,8 +28,6 @@ type SearchData = { size: number } - - const defaultSearchFields = { take_goods_status: 0, // 待提货 page: 1, @@ -43,55 +42,55 @@ const Delivery: FC = () => { const isFirst = useRef(true) const { fetchData: FetchDeliveryOrderList, state: orderState } = TakeGoodsOrderList() - //数据加载状态 + // 数据加载状态 const statusMore = useMemo(() => { return dataLoadingStatus({ list: takeDeliveryOrderList.list, total: takeDeliveryOrderList.total, status: orderState.loading! }) }, [takeDeliveryOrderList, orderState]) - //输入搜索关键字 + // 输入搜索关键字 const getSearchData = useCallback((searchValue: string) => { - setSearch((prevProps) => ({ ...prevProps, take_goods_order_no: searchValue })) + setSearch(prevProps => ({ ...prevProps, take_goods_order_no: searchValue })) console.log('searchValue==>', searchValue) }, []) useEffect(() => { console.log('useEffect ===> search', search) // 已经不是第一次加载该页面了 - if(!isFirst.current){ + if (!isFirst.current) { getData() } }, [search]) - useDidShow(()=>{ + useDidShow(() => { getData() isFirst.current = false }) - //上拉加载数据 + // 上拉加载数据 const pageNum = useRef({ size: search.size, page: search.page }) const getScrollToLower = useCallback(() => { if (takeDeliveryOrderList.list.length < takeDeliveryOrderList.total) { pageNum.current.page++ const size = pageNum.current.size * pageNum.current.page - setSearch((e) => ({ ...e, size })) + setSearch(e => ({ ...e, size })) console.log(search, 11111) } }, [takeDeliveryOrderList]) - //列表下拉刷新 + // 列表下拉刷新 const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false) - const getRefresherRefresh = async () => { + const getRefresherRefresh = async() => { pageNum.current.size = 1 setRefresherTriggeredStatus(true) - setSearch((val) => ({ ...val, size: 10 })) + setSearch(val => ({ ...val, size: 10 })) } // 请求数据 - const getData = async () => { + const getData = async() => { const res = await FetchDeliveryOrderList(getFilterData(search)) - setDeliveryOrderList((e) => ({ ...e, list: res.data?.list, total: res.data?.total })) + setDeliveryOrderList(e => ({ ...e, list: res.data?.list, total: res.data?.total })) setRefresherTriggeredStatus(() => false) } @@ -99,7 +98,7 @@ const Delivery: FC = () => { const handleChangeStatus = ({ id: statusId, name: statusName }) => { setCurrentStatus(statusName) - setSearch((e) => ({ ...e, take_goods_status: statusId })) + setSearch(e => ({ ...e, take_goods_status: statusId })) } const handleAuditSuccess = () => { @@ -142,9 +141,10 @@ const Delivery: FC = () => { console.log('changedFields==>changedFields', changedFields) // 自定义时间 if (timeKey === '6') { - setSearch((prevProps) => ({ ...prevProps, ...changedFields, date_min: start, date_max: end })) - } else { - setSearch((prevProps) => ({ ...prevProps, ...changedFields })) + setSearch(prevProps => ({ ...prevProps, ...changedFields, date_min: start, date_max: end })) + } + else { + setSearch(prevProps => ({ ...prevProps, ...changedFields })) } handlePopupClose() } @@ -159,7 +159,7 @@ const Delivery: FC = () => { const handleScan = () => { Taro.scanCode({ success(res) { - setSearch((e) => ({ ...e, take_goods_order_no: res.result })) + setSearch(e => ({ ...e, take_goods_order_no: res.result })) }, fail(res) { console.log(res) @@ -168,7 +168,7 @@ const Delivery: FC = () => { } return ( - + ) } @@ -176,9 +176,9 @@ const Delivery: FC = () => { return ( - + - + @@ -187,12 +187,13 @@ const Delivery: FC = () => { } + emptySlot={} statusMore={statusMore} selfonScrollToLower={getScrollToLower} - refresherEnabled={true} + refresherEnabled refresherTriggered={refresherTriggeredStatus} - selfOnRefresherRefresh={getRefresherRefresh}> + selfOnRefresherRefresh={getRefresherRefresh} + > {currentStatus}共 {takeDeliveryOrderList.total} 单 @@ -201,10 +202,10 @@ const Delivery: FC = () => { })} - + - handTime(e)}> + handTime(e)}> ) } diff --git a/src/pages/takeDeliveryDetail/index.tsx b/src/pages/takeDeliveryDetail/index.tsx index 4dd59f4..afede8e 100644 --- a/src/pages/takeDeliveryDetail/index.tsx +++ b/src/pages/takeDeliveryDetail/index.tsx @@ -1,3 +1,9 @@ +import { Text, View } from '@tarojs/components' +import Taro, { useRouter } from '@tarojs/taro' +import type { FC } from 'react' +import { useCallback, useEffect, useMemo, useState } from 'react' +import Remark from '../takeDelivery/components/remark' +import styles from './index.module.scss' import { TakeGoodsOrder, TakeGoodsOrderAudit, TakeGoodsOrderRefuse } from '@/api' import { formatDateTime, formatMeterDiv, formatWeightDiv } from '@/common/format' import Cell from '@/components/cell' @@ -6,14 +12,8 @@ import LayoutBlock from '@/components/layoutBlock' import NormalButton from '@/components/normalButton' import SaleModeTag from '@/components/saleModeTag' import UploadImage from '@/components/uploadImage' -import { View, Text } from '@tarojs/components' -import Taro from '@tarojs/taro' -import { useRouter } from '@tarojs/taro' import { alert } from '@/common/common' -import { FC, useCallback, useEffect, useMemo, useState } from 'react' -import styles from './index.module.scss' import Popup from '@/components/popup' -import Remark from '../takeDelivery/components/remark' const TakeDeliveryDetail: FC = () => { const router = useRouter() @@ -22,7 +22,7 @@ const TakeDeliveryDetail: FC = () => { const [detailInfo, setDetailInfo] = useState>({}) - const getData = async () => { + const getData = async() => { const { id } = router.params const res = await fetchData({ id, @@ -42,21 +42,21 @@ const TakeDeliveryDetail: FC = () => { const { fetchData: FetchAudit } = TakeGoodsOrderAudit() const DetailItem = useMemo(() => { - const element = - !!detailInfo?.dyelot_number_list?.length && - detailInfo?.dyelot_number_list.map((weightItem) => { + const element + = !!detailInfo?.dyelot_number_list?.length + && detailInfo?.dyelot_number_list.map((weightItem) => { return ( - + - + {weightItem.product_code}# {weightItem.product_name} - 共 {weightItem?.sale_mode === 0 ? `${weightItem.sale_roll} 条` : `${formatMeterDiv(weightItem?.sale_length || 0)} 米`} + 共 {weightItem?.sale_mode === 0 ? `${weightItem.sale_roll} 条` : `${formatMeterDiv(weightItem?.sale_length || 0)} 米`} @@ -80,29 +80,29 @@ const TakeDeliveryDetail: FC = () => { const handleUploadChange = (imageList: string[]) => { console.log('imageList===>', imageList) - setReadyToUploadList((prev) => [...prev, ...imageList]) + setReadyToUploadList(prev => [...prev, ...imageList]) } const { fetchData: refuseOrder } = TakeGoodsOrderRefuse() const [showRemarkModal, setShowRemarkModal] = useState(false) - const handleRefuseOrder = async (remark: string) => { + const handleRefuseOrder = async(remark: string) => { const res = await refuseOrder({ id: Number(router.params.id), - remark: remark, + remark, }) if (res.success) { alert.success('拒收成功') getData() - } else { + } + else { alert.error('该操作失败') } } - const onRemarkSave = async (remark: string) => { + const onRemarkSave = async(remark: string) => { handleRefuseOrder(remark) - } // 拒收 @@ -110,20 +110,19 @@ const TakeDeliveryDetail: FC = () => { setShowRemarkModal(true) }, []) - - // 审核 const handleAudit = useCallback(() => { Taro.showModal({ confirmColor: '#337FFF', title: '确定要提货?', - success: async function (res) { + async success(res) { if (res.confirm) { const res = await FetchAudit({ take_goods_order_id: [Number(router.params.id)] }) if (res.success) { alert.success('提货成功') getData() - } else { + } + else { alert.error('请求失败') } } @@ -133,24 +132,24 @@ const TakeDeliveryDetail: FC = () => { // 底部按钮栏 const BottomBar = useMemo(() => { - if (detailInfo?.take_goods_order_type !== 0) { // 采购提货 return ( - + 确认提货 ) - } else { + } + else { // 退货提货 return ( - + 拒收 - + 确认提货 @@ -160,14 +159,16 @@ const TakeDeliveryDetail: FC = () => { return ( - + 提货单号:{detailInfo?.take_order_no} - {detailInfo?.take_goods_status === 0 ? ( - {detailInfo?.take_goods_status_name} - ) : ( - {detailInfo?.take_goods_status_name} - )} + {detailInfo?.take_goods_status === 0 + ? ( + {detailInfo?.take_goods_status_name} + ) + : ( + {detailInfo?.take_goods_status_name} + )} {detailInfo?.take_goods_order_type === 0 && 供应信息:{detailInfo?.supplier_name}} {DetailItem} @@ -182,33 +183,33 @@ const TakeDeliveryDetail: FC = () => { {detailInfo?.take_goods_order_type !== 0 && ( <> - + 退货布匹附件 - + - + 退货物流附件 - + )} - + 订单信息 - - - - - + + + + + {detailInfo?.take_goods_order_type !== 0 && ( - + 备注信息 - - {detailInfo?.remark} + + {detailInfo?.remark} )} diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index 4d4c543..589f5ae 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -1,132 +1,129 @@ -import { View, Image, Text } from '@tarojs/components' -import { FC, useEffect, useState } from 'react' -import styles from './index.module.scss' +import { Image, Text, View } from '@tarojs/components' +import { useDidShow } from '@tarojs/taro' +import type { FC } from 'react' +import { useEffect, useState } from 'react' +import { useDispatch } from 'react-redux' +import type { Dispatch } from 'redux' import defaultAvatar from '../../styles/image/defaultAvatar.png' +import styles from './index.module.scss' import NormalButton from '@/components/normalButton' import Tag from '@/components/tag' import Divider from '@/components/Divider' import LayoutBlock from '@/components/layoutBlock' import IconCard from '@/components/iconCard' -import { IconNames } from '@/components/iconfont/iconfont' +import type { IconNames } from '@/components/iconfont/iconfont' import useUserInfo from '@/use/useUserInfo' -import { goLink } from '@/common/common' -import { checkKey } from "@/common/common" -import { useDidShow } from '@tarojs/taro' -import { useDispatch } from 'react-redux' -import { Dispatch } from 'redux' -import { TabBarAction, TabBarIndex } from '@/reducers/tabBar' +import { checkKey, goLink } from '@/common/common' +import type { TabBarAction } from '@/reducers/tabBar' +import { TabBarIndex } from '@/reducers/tabBar' import { TabBarType } from '@/constants/tabbar' -type IconCardType = { - jurisdiction?: string //权限key值 + +interface IconCardType { + jurisdiction?: string // 权限key值 iconName: IconNames name: string path: string } - - -let feature: IconCardType[] = [ +const feature: IconCardType[] = [ { iconName: 'icon-lingquseka', name: '领取色卡', path: '', - jurisdiction: 'receive_color_card_page' + jurisdiction: 'receive_color_card_page', }, { iconName: 'icon-pandiansaoma', name: '盘点扫码', path: '', - jurisdiction: 'counting_scanning_code_page' + jurisdiction: 'counting_scanning_code_page', }, { iconName: 'icon-fahuoliebiao', name: '发货列表', path: '/pages/delivery/index', - jurisdiction: 'shipping_list_page' + jurisdiction: 'shipping_list_page', }, { iconName: 'icon-yaoqingma', name: '邀请码', path: '', - jurisdiction: 'invitation_code_page' + jurisdiction: 'invitation_code_page', }, { iconName: 'icon-tihuoliebiao', name: '提货列表', path: '/pages/takeDelivery/index', - jurisdiction: 'picking_list_module_page' + jurisdiction: 'picking_list_module_page', }, { iconName: 'icon-shouhouzhongxin', name: '退货退款', path: '/pages/refundPage/index', - jurisdiction: 'return_and_refund_page' + jurisdiction: 'return_and_refund_page', }, { iconName: 'icon-shoukuanliebiao', name: '收款列表', path: '/pages/newCollection/index', - jurisdiction: 'collection_list_page' + jurisdiction: 'collection_list_page', }, { iconName: 'icon-kehuxinxi', name: '客户列表', path: '/pages/customerManagement/index', - jurisdiction: 'customer_list_page' + jurisdiction: 'customer_list_page', }, ] -let fabric: IconCardType[] = [ +const fabric: IconCardType[] = [ { iconName: 'icon-yansequyang', name: '颜色取样', path: '/pages/colorRelated/takeColor/index', - jurisdiction: 'color_sampling_page' + jurisdiction: 'color_sampling_page', }, { iconName: 'icon-qusechazhao', name: '取色查找', path: '/pages/colorRelated/findColor/index', - jurisdiction: 'color_search_page' + jurisdiction: 'color_search_page', }, { iconName: 'icon-yangpinduibi', name: '样品对比', path: '/pages/colorRelated/sampleComparison/index', - jurisdiction: 'sample_comparison_page' + jurisdiction: 'sample_comparison_page', }, ] -let statisticAnalysis: IconCardType[] = [ +const statisticAnalysis: IconCardType[] = [ { iconName: 'icon-xiaoshou', name: '销售', path: '/pages/saleStatistic/index', - jurisdiction: 'sales_page' + jurisdiction: 'sales_page', }, { iconName: 'icon-duizhang', name: '对账', path: '', - jurisdiction: 'reconciliation_page' + jurisdiction: 'reconciliation_page', }, { iconName: 'icon-yuncangkucun', name: '云仓库存', path: '', - jurisdiction: 'cloud_warehouse_inventory_page' + jurisdiction: 'cloud_warehouse_inventory_page', }, { iconName: 'icon-qianzhicangkucun', name: '前置仓库存', path: '', - jurisdiction: 'front_warehouse_page' + jurisdiction: 'front_warehouse_page', }, ] - - - // 用户信息 const UserInfo: FC = () => { const { removeToken, removeUserInfo, userInfo } = useUserInfo() @@ -153,7 +150,6 @@ const UserInfo: FC = () => { goLink(item.path, {}, 'navigateTo') } - const [Features, setFeatures] = useState([]) const [Coloring, setColoring] = useState([]) const [Statistics, setStatistics] = useState([]) @@ -161,18 +157,17 @@ const UserInfo: FC = () => { let arr: any[] = [] let arrOne: any[] = [] let arrTwo: any[] = [] - arr = feature.filter((item) => checkKey(item.jurisdiction)); - arrOne = fabric.filter((item) => checkKey(item.jurisdiction)); - arrTwo = statisticAnalysis.filter((item) => checkKey(item.jurisdiction)); + arr = feature.filter(item => checkKey(item.jurisdiction)) + arrOne = fabric.filter(item => checkKey(item.jurisdiction)) + arrTwo = statisticAnalysis.filter(item => checkKey(item.jurisdiction)) setFeatures([...arr]) setColoring([...arrOne]) setStatistics([...arrTwo]) }) - return ( <> - + @@ -182,17 +177,17 @@ const UserInfo: FC = () => { {userInfo.userInfo.user_code} - + 退出登录 {/* 部门 */} - + {userInfo.userInfo.department_name} - + {/* 职责 */} {userInfo.userInfo.duty_name} @@ -201,7 +196,7 @@ const UserInfo: FC = () => { !!Features.length && 功能特色 - {Features.map(item => { + {Features.map((item) => { return handleClickIconCard(item)}> })} @@ -211,7 +206,7 @@ const UserInfo: FC = () => { !!Coloring.length && 布料取色 - {Coloring.map(item => { + {Coloring.map((item) => { return handleClickIconCard(item)}> })} @@ -221,7 +216,7 @@ const UserInfo: FC = () => { !!Statistics.length && 统计分析 - {Statistics.map(item => { + {Statistics.map((item) => { return handleClickIconCard(item)}> })} @@ -235,7 +230,7 @@ const UserInfo: FC = () => { const UserAvatar = ({ src }) => { return ( - + {src ? null : 编辑} ) diff --git a/src/reducers/commonData.ts b/src/reducers/commonData.ts index 75d22dc..8a8e3f4 100644 --- a/src/reducers/commonData.ts +++ b/src/reducers/commonData.ts @@ -1,34 +1,34 @@ -//公共数据,什么都可往里面传,可用于临时传参 +// 公共数据,什么都可往里面传,可用于临时传参 import Taro from '@tarojs/taro' -import { - SET_SHOPCOUNT, - CLEAR_SHOPCOUNT, - STORAGE_SHOPCOUNT +import { + CLEAR_SHOPCOUNT, + SET_SHOPCOUNT, + STORAGE_SHOPCOUNT, } from '../constants/common' -export type DataParam = { - shopCount: number //购物车数量 +export interface DataParam { + shopCount: number // 购物车数量 } -type Action = { - type?: string, +interface Action { + type?: string data?: DataParam } const INIT = { - shopCount: Taro.getStorageSync(STORAGE_SHOPCOUNT)?JSON.parse(Taro.getStorageSync(STORAGE_SHOPCOUNT)).shopCount:0, + shopCount: Taro.getStorageSync(STORAGE_SHOPCOUNT) ? JSON.parse(Taro.getStorageSync(STORAGE_SHOPCOUNT)).shopCount : 0, } export default (state = INIT, action: Action) => { - const {type, data} = action - switch (type) { - case SET_SHOPCOUNT: - Taro.setStorageSync(STORAGE_SHOPCOUNT,JSON.stringify(data?.shopCount)) - return {...state,...data} - case CLEAR_SHOPCOUNT: - Taro.removeStorageSync(STORAGE_SHOPCOUNT) - return {...state, shopCount: 0} - default: - return state - } + const { type, data } = action + switch (type) { + case SET_SHOPCOUNT: + Taro.setStorageSync(STORAGE_SHOPCOUNT, JSON.stringify(data?.shopCount)) + return { ...state, ...data } + case CLEAR_SHOPCOUNT: + Taro.removeStorageSync(STORAGE_SHOPCOUNT) + return { ...state, shopCount: 0 } + default: + return state + } } diff --git a/src/reducers/hooks.ts b/src/reducers/hooks.ts index 02e2714..8156f68 100644 --- a/src/reducers/hooks.ts +++ b/src/reducers/hooks.ts @@ -1,12 +1,14 @@ -//该方法纯粹只是个Ts类型定义文件 -import { useSelector as useReduxSelector, TypedUseSelectorHook } from 'react-redux'; -import { DataParam as userInfoParam } from './userInfo'; -import { DataParam as commonDataParam } from './commonData'; -import { TabBarData as tabbarDataParam } from './tabBar'; -type Params = { +// 该方法纯粹只是个Ts类型定义文件 +import type { TypedUseSelectorHook } from 'react-redux' +import { useSelector as useReduxSelector } from 'react-redux' +import type { DataParam as userInfoParam } from './userInfo' +import type { DataParam as commonDataParam } from './commonData' +import type { TabBarData as tabbarDataParam } from './tabBar' + +interface Params { userInfoData: userInfoParam commonData: commonDataParam tabBarData: tabbarDataParam } -export const useSelector: TypedUseSelectorHook = useReduxSelector; +export const useSelector: TypedUseSelectorHook = useReduxSelector diff --git a/src/reducers/index.ts b/src/reducers/index.ts index 9ea8aed..0b70ccc 100644 --- a/src/reducers/index.ts +++ b/src/reducers/index.ts @@ -3,7 +3,7 @@ import userInfoData from './userInfo' import commonData from './commonData' import tabBarReducer from './tabBar' -export type Reducers = { +export interface Reducers { userInfoData: typeof userInfoData commonData: typeof commonData tabBarData: typeof tabBarReducer diff --git a/src/reducers/tabBar.ts b/src/reducers/tabBar.ts index 93c99b0..25c447b 100644 --- a/src/reducers/tabBar.ts +++ b/src/reducers/tabBar.ts @@ -1,26 +1,23 @@ import { TabBarType } from '../constants/tabbar' -import IconFont from '@/components/iconfont/iconfont' +import type IconFont from '@/components/iconfont/iconfont' type IconfontName = Parameters['0']['name'] -type TabBarIndexMap = { - [Property: number]: { - id: number - pagePath: string - text: string - iconPath: IconfontName - selectedIconPath: IconfontName - } -} +type TabBarIndexMap = Record export enum TabBarIndex { INDEX = 1, SHOPPING = 2, ORDER = 3, - USER = 4 + USER = 4, } - const INITIAL_STATE = { selectedId: TabBarIndex.INDEX, tabItem: [ @@ -55,12 +52,12 @@ const INITIAL_STATE = { ], } -export type TabBarData = { +export interface TabBarData { selectedId: number tabItem?: TabBarIndexMap[number][] } -export type TabBarAction = { +export interface TabBarAction { type: TabBarType data: TabBarData } diff --git a/src/reducers/userInfo.ts b/src/reducers/userInfo.ts index 36fdbfc..5d61739 100644 --- a/src/reducers/userInfo.ts +++ b/src/reducers/userInfo.ts @@ -2,7 +2,7 @@ import Taro from '@tarojs/taro' import { UserInfoActionType } from '../constants/userInfo' -export type UserParam = { +export interface UserParam { department_code?: string department_id?: string department_name?: string @@ -16,58 +16,57 @@ export type UserParam = { avatar_url?: string } -export type UserAdminParam = { - avatar_url?: string, - open_id?: string, - physical_warehouse?: number, - physical_warehouse_name?: string, - union_id?: string, - user_code?: string, - user_id?: number, - user_name?: string, - wechat_user_open_id?: number - is_authorize_name?: boolean, - is_authorize_phone?: boolean, - phone?:string, - authentication_status?:number, - authentication_status_name: string, - company_id?: number, - company_name?: string, - founder_user_id?: string, - founder_user_name?: string, - order_access_status?: number, - order_access_status_name?: string, - purchaser_type?: number, - purchaser_type_name?: string +export interface UserAdminParam { + avatar_url?: string + open_id?: string + physical_warehouse?: number + physical_warehouse_name?: string + union_id?: string + user_code?: string + user_id?: number + user_name?: string + wechat_user_open_id?: number + is_authorize_name?: boolean + is_authorize_phone?: boolean + phone?: string + authentication_status?: number + authentication_status_name: string + company_id?: number + company_name?: string + founder_user_id?: string + founder_user_name?: string + order_access_status?: number + order_access_status_name?: string + purchaser_type?: number + purchaser_type_name?: string } -export type SortCodeParam = { - shareShortDetail?: {title:string, code: string, img: string}, //详情分享页面短码 - shareShortPage?: {title:string, code: string, img: string}, //右上角分享页面短码 +export interface SortCodeParam { + shareShortDetail?: { title: string; code: string; img: string } // 详情分享页面短码 + shareShortPage?: { title: string; code: string; img: string } // 右上角分享页面短码 } -export type DataParam = { - token?: string - session_key?: string, - userInfo: UserParam, - adminUserInfo: UserAdminParam, - sort_code: SortCodeParam - logingStatus?: boolean //登录状态 true 正在登录 - } +export interface DataParam { + token?: string + session_key?: string + userInfo: UserParam + adminUserInfo: UserAdminParam + sort_code: SortCodeParam + logingStatus?: boolean // 登录状态 true 正在登录 +} -export type UserInfoAction = { +export interface UserInfoAction { type: UserInfoActionType data?: DataParam } - const INIT_USER = { - userInfo: Taro.getStorageSync('userInfo')?JSON.parse(Taro.getStorageSync('userInfo')):null, - adminUserInfo: Taro.getStorageSync('adminUserInfo')?JSON.parse(Taro.getStorageSync('adminUserInfo')):null, - token: Taro.getStorageSync('token')||'', - session_key: Taro.getStorageSync('session_key')||'', - sort_code: Taro.getStorageSync('sort_code')?JSON.parse(Taro.getStorageSync('sort_code')):null, - logingStatus: false + userInfo: Taro.getStorageSync('userInfo') ? JSON.parse(Taro.getStorageSync('userInfo')) : null, + adminUserInfo: Taro.getStorageSync('adminUserInfo') ? JSON.parse(Taro.getStorageSync('adminUserInfo')) : null, + token: Taro.getStorageSync('token') || '', + session_key: Taro.getStorageSync('session_key') || '', + sort_code: Taro.getStorageSync('sort_code') ? JSON.parse(Taro.getStorageSync('sort_code')) : null, + logingStatus: false, } export default (state = INIT_USER, action: UserInfoAction) => { diff --git a/src/store/index.ts b/src/store/index.ts index 63bf194..c8c7122 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1,16 +1,16 @@ -import { createStore, applyMiddleware, compose } from 'redux' +import { applyMiddleware, compose, createStore } from 'redux' import thunkMiddleware from 'redux-thunk' import rootReducer from '@/reducers' -const composeEnhancers = - typeof window === 'object' && - (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? - (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ +const composeEnhancers + = typeof window === 'object' + && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ + ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ // Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize... }) : compose const middlewares = [ - thunkMiddleware + thunkMiddleware, ] if (process.env.NODE_ENV === 'development' && process.env.TARO_ENV !== 'quickapp') { @@ -21,7 +21,7 @@ const enhancer = composeEnhancers( applyMiddleware(...middlewares), ) -export default function configStore () { +export default function configStore() { const store = createStore(rootReducer, enhancer) return store -} \ No newline at end of file +} diff --git a/src/types/calendar.d.ts b/src/types/calendar.d.ts index 2bc8d32..2705b47 100644 --- a/src/types/calendar.d.ts +++ b/src/types/calendar.d.ts @@ -1,5 +1,5 @@ -import dayjs from 'dayjs' -import { BaseEvent } from '@tarojs/components/types/common' +import type dayjs from 'dayjs' +import type { BaseEvent } from '@tarojs/components/types/common' // #region Calendar declare namespace Calendar { @@ -8,7 +8,7 @@ declare namespace Calendar { export type classNameType = | string | Array - | { [key: string]: boolean } + | Record export interface Mark { value: DateArg @@ -62,7 +62,7 @@ declare namespace Calendar { export type List = Array - export type ListInfo = { + export interface ListInfo { value: number list: List @@ -159,7 +159,7 @@ export interface AtCalendarState { } export type AtCalendarPropsWithDefaults = AtCalendarProps & - AtCalendarDefaultProps +AtCalendarDefaultProps // #endregion // #region AtCalendarController diff --git a/src/use/BlueToothCopy.tsx b/src/use/BlueToothCopy.tsx index 2619492..a34611d 100644 --- a/src/use/BlueToothCopy.tsx +++ b/src/use/BlueToothCopy.tsx @@ -1,5 +1,5 @@ -import React, { useRef, useState } from 'react' import Taro from '@tarojs/taro' +import React, { useRef, useState } from 'react' import { Command } from '@/common/bluetooth/command' import { uint8ArrayToFloat32, uint8ArrayToHex, waitFor } from '@/common/bluetooth/utils' @@ -33,13 +33,13 @@ interface stateStype { /** 是否显示蓝牙调试信息 */ debug: any - //搜索到的设备 + // 搜索到的设备 devices: any - //取色仪主动返回的数据 + // 取色仪主动返回的数据 deviceLab: any } -let stateObj: stateStype = { +const stateObj: stateStype = { /** 事件监听器 */ listeners: new Set(), /** 正在扫描设备 */ @@ -64,25 +64,26 @@ let stateObj: stateStype = { /** 是否显示蓝牙调试信息 */ debug: true, - //搜索到的设备 + // 搜索到的设备 devices: [], - //取色仪主动返回的数据 + // 取色仪主动返回的数据 deviceLab: null, } export default (props) => { - let refStatus = useRef(stateObj) - let [state, setState] = useState(refStatus.current) + const refStatus = useRef(stateObj) + const [state, setState] = useState(refStatus.current) const changeStatus = (obj: Object): void => { refStatus.current = { ...refStatus.current, ...obj } setState({ ...refStatus.current }) } - const init = async () => { + const init = async() => { try { await openAdapter() - } catch (e) { + } + catch (e) { changeStatus({ available: false }) } @@ -94,11 +95,12 @@ export default (props) => { emit({ type: res.connected ? 'connected' : 'disconnect', detail: res }) }) Taro.onBLECharacteristicValueChange(({ value }) => notifySubscriber(value)) - subscribe(async (ev) => { + subscribe(async(ev) => { if (ev.type === 'stateUpdate') { // 蓝牙状态发生的变化 changeStatus({ discovering: ev.detail.discovering, available: ev.detail.available }) - } else if (ev.type === 'disconnect' && refStatus.current.connected && refStatus.current.connected.deviceId === ev.detail.deviceId) { + } + else if (ev.type === 'disconnect' && refStatus.current.connected && refStatus.current.connected.deviceId === ev.detail.deviceId) { // 断开连接 changeStatus({ connected: null, @@ -108,12 +110,14 @@ export default (props) => { devices: [], }) Taro.showToast({ icon: 'none', title: '蓝牙连接已断开' }) - } else if (ev.type === 'connected' && refStatus.current.connecting) { + } + else if (ev.type === 'connected' && refStatus.current.connecting) { // 连接成功 changeStatus({ connected: refStatus.current.connecting, connecting: null }) Taro.showToast({ title: '蓝牙已连接' }) - } else if (ev.type === 'measure') { - //监听取色仪主动推送lab + } + else if (ev.type === 'measure') { + // 监听取色仪主动推送lab await measureAndGetLab() } }) @@ -186,11 +190,11 @@ export default (props) => { }) } - //获取搜索到的设备 + // 获取搜索到的设备 const getDevices = (res) => { res.devices.forEach((device) => { // 排除掉已搜索到的设备和名称不合法的设备, 将新发现的设备添加到列表中 - if (/^CM/.test(device.name) && !refStatus.current.devices.find((i) => i.deviceId === device.deviceId)) { + if (/^CM/.test(device.name) && !refStatus.current.devices.find(i => i.deviceId === device.deviceId)) { changeStatus({ devices: [...refStatus.current.devices, device] }) } }) @@ -200,7 +204,7 @@ export default (props) => { * 连接设备 * @param {{ name: string, deviceId: string, RSSI: number }} device */ - const connect = async (device) => { + const connect = async(device) => { try { changeStatus({ connecting: device }) console.log('connecting::', device) @@ -208,7 +212,8 @@ export default (props) => { await discoverService(device.deviceId) await discoverCharacteristic(device.deviceId) await notifyCharacteristicValueChange(device.deviceId) - } catch (e) { + } + catch (e) { changeStatus({ connecting: null }) Taro.showToast({ icon: 'none', title: '蓝牙连接失败' }) throw e @@ -216,8 +221,8 @@ export default (props) => { } /** 断开当前连接的设备 */ - const disconnect = async () => { - if (!refStatus.current.connected && !refStatus.current.connecting) return + const disconnect = async() => { + if (!refStatus.current.connected && !refStatus.current.connecting) { return } if (refStatus.current.connected) { await closeConnection(refStatus.current.connected.deviceId) resetCommand() @@ -265,10 +270,11 @@ export default (props) => { Taro.getBLEDeviceServices({ deviceId, success: ({ services }) => { - const service = services.find((i) => refStatus.current.serviceRule.test(i.uuid)) + const service = services.find(i => refStatus.current.serviceRule.test(i.uuid)) if (!service) { reject(new Error('服务不可用')) - } else { + } + else { changeStatus({ serviceId: service.uuid }) resolve(service) } @@ -285,10 +291,11 @@ export default (props) => { deviceId, serviceId: refStatus.current.serviceId, success: ({ characteristics }) => { - const characteristic = characteristics.find((i) => refStatus.current.characteristicRule.test(i.uuid)) + const characteristic = characteristics.find(i => refStatus.current.characteristicRule.test(i.uuid)) if (!characteristic) { reject(new Error('特征不可用')) - } else { + } + else { changeStatus({ characteristicId: characteristic.uuid }) resolve(characteristic) } @@ -325,14 +332,16 @@ export default (props) => { if (refStatus.current.command.isComplete) { if (refStatus.current.command.isValid && refStatus.current.responseResolve) { refStatus.current.responseResolve(refStatus.current.command.response) - } else if (!refStatus.current.command.isValid) { + } + else if (!refStatus.current.command.isValid) { refStatus.current.responseReject(new Error('无效数据')) } resetCommand() } - } else { + } + else { const uint8Array = new Uint8Array(buffer) - if (uint8Array[0] === 0xbb && uint8Array[1] === 1 && uint8Array[3] === 0) { + if (uint8Array[0] === 0xBB && uint8Array[1] === 1 && uint8Array[3] === 0) { const ev = { type: 'measure', detail: { mode: uint8Array[2] } } emit(ev) } @@ -345,10 +354,11 @@ export default (props) => { * @returns {Promise} */ function exec(command) { - return new Promise(async (resolve, reject) => { + return new Promise(async(resolve, reject) => { if (refStatus.current.command) { reject(new Error('正在执行其他命令')) - } else { + } + else { try { refStatus.current.command = command const data = command.data @@ -359,7 +369,8 @@ export default (props) => { if (command.responseSize <= 0) { resolve(true) resetCommand() - } else { + } + else { refStatus.current.responseReject = reject refStatus.current.responseResolve = resolve refStatus.current.responseTimer = setTimeout(() => { @@ -367,7 +378,8 @@ export default (props) => { resetCommand() }, command.timeout) } - } catch (e) { + } + catch (e) { reject(e) } } @@ -471,7 +483,8 @@ export const useBluetoothTwo = () => { const res = React.useContext(Context) if (res) { return { ...res } - } else { + } + else { return {} } } diff --git a/src/use/contextBlueTooth.tsx b/src/use/contextBlueTooth.tsx index ce97242..66f9a9e 100644 --- a/src/use/contextBlueTooth.tsx +++ b/src/use/contextBlueTooth.tsx @@ -1,5 +1,5 @@ -import React, { useRef, useState } from 'react' import Taro from '@tarojs/taro' +import React, { useRef, useState } from 'react' import { Command } from '@/common/bluetooth/command' import { uint8ArrayToFloat32, uint8ArrayToHex, waitFor } from '@/common/bluetooth/utils' @@ -33,13 +33,13 @@ export interface BluetoothStateType { /** 是否显示蓝牙调试信息 */ debug: any - //搜索到的设备 + // 搜索到的设备 devices: any - //取色仪主动返回的数据 + // 取色仪主动返回的数据 deviceLab: any } -let stateObj: BluetoothStateType = { +const stateObj: BluetoothStateType = { /** 事件监听器 */ listeners: new Set(), /** 正在扫描设备 */ @@ -64,25 +64,26 @@ let stateObj: BluetoothStateType = { /** 是否显示蓝牙调试信息 */ debug: true, - //搜索到的设备 + // 搜索到的设备 devices: [], - //取色仪主动返回的数据 + // 取色仪主动返回的数据 deviceLab: null, } export default (props) => { - let refStatus = useRef(stateObj) - let [state, setState] = useState(refStatus.current) + const refStatus = useRef(stateObj) + const [state, setState] = useState(refStatus.current) const changeStatus = (obj: Object): void => { refStatus.current = { ...refStatus.current, ...obj } setState({ ...refStatus.current }) } - const init = async () => { + const init = async() => { try { await openAdapter() - } catch (e) { + } + catch (e) { changeStatus({ available: false }) } @@ -94,11 +95,12 @@ export default (props) => { emit({ type: res.connected ? 'connected' : 'disconnect', detail: res }) }) Taro.onBLECharacteristicValueChange(({ value }) => notifySubscriber(value)) - subscribe(async (ev) => { + subscribe(async(ev) => { if (ev.type === 'stateUpdate') { // 蓝牙状态发生的变化 changeStatus({ discovering: ev.detail.discovering, available: ev.detail.available }) - } else if (ev.type === 'disconnect' && refStatus.current.connected && refStatus.current.connected.deviceId === ev.detail.deviceId) { + } + else if (ev.type === 'disconnect' && refStatus.current.connected && refStatus.current.connected.deviceId === ev.detail.deviceId) { // 断开连接 changeStatus({ connected: null, @@ -108,12 +110,14 @@ export default (props) => { devices: [], }) Taro.showToast({ icon: 'none', title: '蓝牙连接已断开' }) - } else if (ev.type === 'connected' && refStatus.current.connecting) { + } + else if (ev.type === 'connected' && refStatus.current.connecting) { // 连接成功 changeStatus({ connected: refStatus.current.connecting, connecting: null }) Taro.showToast({ title: '蓝牙已连接' }) - } else if (ev.type === 'measure') { - //监听取色仪主动推送lab + } + else if (ev.type === 'measure') { + // 监听取色仪主动推送lab await measureAndGetLab() } }) @@ -186,11 +190,11 @@ export default (props) => { }) } - //获取搜索到的设备 + // 获取搜索到的设备 const getDevices = (res) => { res.devices.forEach((device) => { // 排除掉已搜索到的设备和名称不合法的设备, 将新发现的设备添加到列表中 - if (/^CM/.test(device.name) && !refStatus.current.devices.find((i) => i.deviceId === device.deviceId)) { + if (/^CM/.test(device.name) && !refStatus.current.devices.find(i => i.deviceId === device.deviceId)) { changeStatus({ devices: [...refStatus.current.devices, device] }) } }) @@ -200,7 +204,7 @@ export default (props) => { * 连接设备 * @param {{ name: string, deviceId: string, RSSI: number }} device */ - const connect = async (device) => { + const connect = async(device) => { try { changeStatus({ connecting: device }) console.log('connecting::', device) @@ -208,7 +212,8 @@ export default (props) => { await discoverService(device.deviceId) await discoverCharacteristic(device.deviceId) await notifyCharacteristicValueChange(device.deviceId) - } catch (e) { + } + catch (e) { changeStatus({ connecting: null }) Taro.showToast({ icon: 'none', title: '蓝牙连接失败' }) throw e @@ -216,8 +221,8 @@ export default (props) => { } /** 断开当前连接的设备 */ - const disconnect = async () => { - if (!refStatus.current.connected && !refStatus.current.connecting) return + const disconnect = async() => { + if (!refStatus.current.connected && !refStatus.current.connecting) { return } if (refStatus.current.connected) { await closeConnection(refStatus.current.connected.deviceId) resetCommand() @@ -265,10 +270,11 @@ export default (props) => { Taro.getBLEDeviceServices({ deviceId, success: ({ services }) => { - const service = services.find((i) => refStatus.current.serviceRule.test(i.uuid)) + const service = services.find(i => refStatus.current.serviceRule.test(i.uuid)) if (!service) { reject(new Error('服务不可用')) - } else { + } + else { changeStatus({ serviceId: service.uuid }) resolve(service) } @@ -285,10 +291,11 @@ export default (props) => { deviceId, serviceId: refStatus.current.serviceId, success: ({ characteristics }) => { - const characteristic = characteristics.find((i) => refStatus.current.characteristicRule.test(i.uuid)) + const characteristic = characteristics.find(i => refStatus.current.characteristicRule.test(i.uuid)) if (!characteristic) { reject(new Error('特征不可用')) - } else { + } + else { changeStatus({ characteristicId: characteristic.uuid }) resolve(characteristic) } @@ -325,14 +332,16 @@ export default (props) => { if (refStatus.current.command.isComplete) { if (refStatus.current.command.isValid && refStatus.current.responseResolve) { refStatus.current.responseResolve(refStatus.current.command.response) - } else if (!refStatus.current.command.isValid) { + } + else if (!refStatus.current.command.isValid) { refStatus.current.responseReject(new Error('无效数据')) } resetCommand() } - } else { + } + else { const uint8Array = new Uint8Array(buffer) - if (uint8Array[0] === 0xbb && uint8Array[1] === 1 && uint8Array[3] === 0) { + if (uint8Array[0] === 0xBB && uint8Array[1] === 1 && uint8Array[3] === 0) { const ev = { type: 'measure', detail: { mode: uint8Array[2] } } emit(ev) } @@ -345,10 +354,11 @@ export default (props) => { * @returns {Promise} */ function exec(command) { - return new Promise(async (resolve, reject) => { + return new Promise(async(resolve, reject) => { if (refStatus.current.command) { reject(new Error('正在执行其他命令')) - } else { + } + else { try { refStatus.current.command = command const data = command.data @@ -359,7 +369,8 @@ export default (props) => { if (command.responseSize <= 0) { resolve(true) resetCommand() - } else { + } + else { refStatus.current.responseReject = reject refStatus.current.responseResolve = resolve refStatus.current.responseTimer = setTimeout(() => { @@ -367,7 +378,8 @@ export default (props) => { resetCommand() }, command.timeout) } - } catch (e) { + } + catch (e) { reject(e) } } @@ -471,7 +483,8 @@ export const useBluetooth = () => { const res = React.useContext(Context) if (res) { return { ...res } - } else { + } + else { return {} } } diff --git a/src/use/useCheckAuthorize.tsx b/src/use/useCheckAuthorize.tsx index abad977..a5ad7c7 100644 --- a/src/use/useCheckAuthorize.tsx +++ b/src/use/useCheckAuthorize.tsx @@ -1,6 +1,6 @@ -import { alert } from '@/common/common' import Taro from '@tarojs/taro' import { memo, useCallback, useState } from 'react' +import { alert } from '@/common/common' type Scope = | 'scope.userLocation' @@ -16,21 +16,22 @@ type Scope = | 'scope.invoiceTitle' | 'scope.invoice' | 'scope.userInfo' -type Param = { +interface Param { scope: Scope - msg: string //检查不通过时警告 + msg: string // 检查不通过时警告 } export default ({ scope, msg }: Param) => { - //这个hook微信授权检查授权 + // 这个hook微信授权检查授权 const check = useCallback(() => { return new Promise((reslove, reject) => { Taro.getSetting({ success: (res) => { if (res.authSetting[scope]) { reslove(true) - } else if (res.authSetting[scope] === undefined) { + } + else if (res.authSetting[scope] === undefined) { Taro.authorize({ - scope: scope, + scope, success() { reslove(true) }, @@ -39,12 +40,14 @@ export default ({ scope, msg }: Param) => { reject(false) }, }) - } else { + } + else { Taro.openSetting({ success(res) { if (res.authSetting[scope]) { reslove(true) - } else { + } + else { alert.none(msg) reject(false) } diff --git a/src/use/useCommon.ts b/src/use/useCommon.ts index 8edbc10..6b8168e 100644 --- a/src/use/useCommon.ts +++ b/src/use/useCommon.ts @@ -1,9 +1,10 @@ -import { useSelector } from '@/reducers/hooks' import { useRouter } from '@tarojs/taro' import dayjs from 'dayjs' -import { useEffect, useRef, useState, SetStateAction, useMemo, useCallback } from 'react' +import type { SetStateAction } from 'react' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import { useSelector } from '@/reducers/hooks' -//倒计时hook +// 倒计时hook export const useTimeCountDown = () => { const [showTime, setShowTime] = useState({ DD: '', @@ -11,7 +12,7 @@ export const useTimeCountDown = () => { MM: '', SS: '', }) - const [timeStatus, setTimeStatus] = useState<0 | 1 | 2>(0) //倒计时状体 0:倒计时未开始 1:倒计时中, 2:倒计时已结束 + const [timeStatus, setTimeStatus] = useState<0 | 1 | 2>(0) // 倒计时状体 0:倒计时未开始 1:倒计时中, 2:倒计时已结束 const timeObj: any = useRef() const endTime = useRef('') const onStart = (val = '') => { @@ -30,8 +31,8 @@ export const useTimeCountDown = () => { } }, []) const count_down = () => { - var startData = dayjs() - var endDate = dayjs(endTime.current) + const startData = dayjs() + const endDate = dayjs(endTime.current) setTimeStatus(() => 1) if (startData >= endDate) { clearInterval(timeObj.current) @@ -39,19 +40,19 @@ export const useTimeCountDown = () => { setTimeStatus(() => 2) 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') + const _dd = endDate.diff(startData, 'day') + const _hh = endDate.diff(startData, 'hour') + const _mm = endDate.diff(startData, 'minute') + const _ss = endDate.diff(startData, 'second') // 转换 - var hh = _hh - _dd * 24 - var mm = _mm - _hh * 60 - var ss = _ss - _mm * 60 + const hh = _hh - _dd * 24 + const mm = _mm - _hh * 60 + const 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) + const DD = (`00${_dd}`).slice(-2) + const HH = (`00${hh}`).slice(-2) + const MM = (`00${mm}`).slice(-2) + const SS = (`00${ss}`).slice(-2) // console.log('endTime::', `${DD}-${HH}-${MM}-${SS}`) setShowTime(e => ({ ...e, DD, HH, MM, SS })) } @@ -62,7 +63,7 @@ export const useTimeCountDown = () => { } } -//订阅消息hook +// 订阅消息hook // export const UseSubscriptionMessage = () => { // const { fetchData: fetchDataMessage } = SubscriptionMessageApi() // const openSubscriptionMessage = ({ orderId = 0, scenes = 0 }: { orderId?: number; scenes: number }) => { @@ -90,7 +91,7 @@ export const useTimeCountDown = () => { // } type NormalPropsType = Record -type Options = { +interface Options { deep?: boolean } @@ -115,7 +116,7 @@ export const useNeedMemoCallback = (options: Options = defaultOptions) => { // 循环props对象 const handleDiff = () => { - for (let [key, value] of Object.entries(prevProps)) { + for (const [key, value] of Object.entries(prevProps)) { if (!Object.is(value, nextProps[key])) { // console.log('函数不相等',value === nextProps[key]) // console.log('asdfasdf',value) @@ -150,7 +151,7 @@ export const useNeedMemoCallback = (options: Options = defaultOptions) => { } } -type UsePropsValueOptions = { +interface UsePropsValueOptions { value?: T defaultValue: T onChange?: (v: T) => void @@ -166,10 +167,10 @@ export function usePropsValue(options: UsePropsValueOptions) { stateRef.current = value } - const setState = useCallback((v: SetStateAction, forceTrigger: boolean = false) => { + const setState = useCallback((v: SetStateAction, forceTrigger = false) => { // `forceTrigger` 意思是 触发 `onChange` 不管 `v` 是否和 `stateRef.current` 相等 const nextValue = typeof v === 'function' ? (v as (prevState: T) => T)(stateRef.current) : v - if (!forceTrigger && nextValue === stateRef.current) return + if (!forceTrigger && nextValue === stateRef.current) { return } stateRef.current = nextValue setForceUpdate({}) return onChange?.(nextValue) @@ -179,7 +180,7 @@ export function usePropsValue(options: UsePropsValueOptions) { // 点击自定义 tab 时触发。 export function useCustomTabItemTap(callback) { - const { selectedId, tabItem } = useSelector(state => { + const { selectedId, tabItem } = useSelector((state) => { return state.tabBarData }) const targetPagePayload = tabItem?.find(item => item.id === selectedId) diff --git a/src/use/useCommonData.ts b/src/use/useCommonData.ts index cf515ab..5d3ef87 100644 --- a/src/use/useCommonData.ts +++ b/src/use/useCommonData.ts @@ -1,11 +1,12 @@ import { useDispatch } from 'react-redux' -import { SET_SHOPCOUNT, CLEAR_SHOPCOUNT } from '@/constants/common' -import { DataParam } from '@/reducers/commonData' import { useCallback, useState } from 'react' +import { CLEAR_SHOPCOUNT, SET_SHOPCOUNT } from '@/constants/common' +import { DataParam } from '@/reducers/commonData' // import { GetShoppingCartApi } from '@/api/shopCart' -import { useSelector } from '@/reducers/hooks' +import { useSelector } from '@/reducers/hooks' + export default () => { - const commonData = useSelector((state) => state.commonData) + const commonData = useSelector(state => state.commonData) const dispatch = useDispatch() const setShopCount = (shopCount: number) => { @@ -17,10 +18,10 @@ export default () => { } // const { fetchData: fetchDataShopCount } = GetShoppingCartApi() - const getShopCount = async () => { - //获取购物车数据数量 + const getShopCount = async() => { + // 获取购物车数据数量 // const { data } = await fetchDataShopCount() - let color_list = data.color_list || [] + const color_list = data.color_list || [] setShopCount(color_list.length) } diff --git a/src/use/useHttp.ts b/src/use/useHttp.ts index 58a2c44..5682717 100644 --- a/src/use/useHttp.ts +++ b/src/use/useHttp.ts @@ -1,12 +1,12 @@ import Taro, { useRouter } from '@tarojs/taro' import { useEffect, useRef, useState } from 'react' -import { BASE_URL, WX_APPID } from '@/common/constant' -import useUserInfo from './useUserInfo' import qs from 'qs' +import useUserInfo from './useUserInfo' import useLogin from './useLogin' import useLoginRequest from './useLoginRequest' +import { BASE_URL, WX_APPID } from '@/common/constant' -type Params = { +interface Params { code: string | null success: boolean data: any @@ -23,8 +23,8 @@ type Params = { page?: number pageSize?: number } -type OptionData = Record | any[] | null -type option = { +type OptionData = Record | any[] | null +interface option { url?: string method?: 'get' | 'post' | 'put' | 'delete' type?: string @@ -101,11 +101,11 @@ export const useRequest = ( pageSize: 24, pagination: false, // 是否分页 base_url: '', - apiMsgStatus: true, //是否直接弹出后端错误 + apiMsgStatus: true, // 是否直接弹出后端错误 }, ) => { options.url = `${options.base_url || BASE_URL}${options.url}` - let params: Params = { + const params: Params = { code: null, // 业务码 success: false, // 请求是否成功 data: {}, @@ -129,9 +129,9 @@ export const useRequest = ( const { login } = useLoginRequest() // 请求函数 - const fetchData = async (sub_options?: any) => { + const fetchData = async(sub_options?: any) => { stateRef.current.loading = true - setState((e) => ({ ...e, loading: true })) + setState(e => ({ ...e, loading: true })) stateRef.current.query = { ...sub_options, ...(options.pagination && { @@ -142,7 +142,7 @@ export const useRequest = ( ...stateRef.current.sort, } try { - let token = Taro.getStorageSync('token') + const token = Taro.getStorageSync('token') const q = { ...options, ...{ @@ -154,30 +154,31 @@ export const useRequest = ( }, ...(options.method?.toUpperCase() == 'GET' ? { - data: stateRef.current.query, - } + data: stateRef.current.query, + } : { - data: options.type?.toUpperCase() == 'FORMDATA' ? qs.stringify(stateRef.current.query) : stateRef.current.query, - }), + data: options.type?.toUpperCase() == 'FORMDATA' ? qs.stringify(stateRef.current.query) : stateRef.current.query, + }), } const result = await Taro.request(q as any) const { statusCode } = result const { code, msg, data } = result.data if (statusCode === 200) { - stateRef.current.success = code === 0 ? true : false + stateRef.current.success = code === 0 stateRef.current.code = code stateRef.current.msg = msg stateRef.current.data = data stateRef.current.total = data?.list ? data?.total : 0 if (code !== 0) { - options.apiMsgStatus !== false && - Taro.showToast({ + options.apiMsgStatus !== false + && Taro.showToast({ title: `${msg}`, icon: 'none', }) console.log('错误::', msg) } - } else { + } + else { if (statusCode === 401) { removeToken() // removeSessionKey() @@ -196,14 +197,16 @@ export const useRequest = ( // }) // } // }) - } else { + } + else { Taro.showToast({ title: `错误:${showStatus(statusCode)}`, icon: 'none', }) } } - } catch (e) { + } + catch (e) { stateRef.current.success = false stateRef.current.error = true stateRef.current.msg = e.errMsg @@ -211,7 +214,7 @@ export const useRequest = ( } stateRef.current.error = false stateRef.current.loading = false - setState(() => ({...stateRef.current})) + setState(() => ({ ...stateRef.current })) return stateRef.current } return { diff --git a/src/use/useLogin.ts b/src/use/useLogin.ts index c839260..5169f7f 100644 --- a/src/use/useLogin.ts +++ b/src/use/useLogin.ts @@ -1,7 +1,7 @@ -import useUserInfo from './useUserInfo' import Taro, { useDidShow, useRouter } from '@tarojs/taro' -import { GetWxUserInfoApi, GetAdminUserInfoApi, GetPhoneNumberApi, BindingCompanyApi } from '@/api/user' +import useUserInfo from './useUserInfo' import useLoginRequest from './useLoginRequest' +import { BindingCompanyApi, GetAdminUserInfoApi, GetPhoneNumberApi, GetWxUserInfoApi } from '@/api/user' import { SHARE_SCENE } from '@/common/enum' import { GetShortCodeApi } from '@/api/share' import { alert } from '@/common/common' @@ -15,34 +15,36 @@ export default () => { checkLogin() }) - //登录请求 + // 登录请求 const { login } = useLoginRequest() // const {fetchData:login} = LoginApi() - const wxLogin = async () => { + const wxLogin = async() => { try { await login() getAdminUserInfo() - } catch (e) { + } + catch (e) { console.log('登录失败::', e) } } - //获取用户信息 + // 获取用户信息 const { fetchData: useFetchData } = GetAdminUserInfoApi() - const getAdminUserInfo = async () => { - let res = await useFetchData() + const getAdminUserInfo = async() => { + const res = await useFetchData() setAdminUserInfo({ ...res.data }) getShortCode(res.data.user_id) } - //登录加checkLogin检查 + // 登录加checkLogin检查 const checkLogin = () => { - return new Promise(async (reslove) => { + return new Promise(async(reslove) => { if (!userInfo.token) { await wxLogin() reslove(true) - } else { - //这个东西不要打开,checkSession有调用频率问题 + } + else { + // 这个东西不要打开,checkSession有调用频率问题 // Taro.checkSession({ // success: async () => { // reslove(true) @@ -57,9 +59,9 @@ export default () => { }) } - //获取用户头像等信息数据 + // 获取用户头像等信息数据 const { fetchData: fetchDataUserInfo } = GetWxUserInfoApi() - const getSelfUserInfo = async () => { + const getSelfUserInfo = async() => { return new Promise((reslove, reject) => { if (userInfo.adminUserInfo?.is_authorize_name) { reslove(true) @@ -67,7 +69,7 @@ export default () => { } Taro.getUserProfile({ desc: '用于完善会员资料', - success: async (res) => { + success: async(res) => { if (!userInfo.session_key) { await wxLogin() } @@ -82,7 +84,8 @@ export default () => { setUserInfo({ ...user_res.data }) getAdminUserInfo() reslove(true) - } else { + } + else { reject(user_res.msg) } }, @@ -94,11 +97,11 @@ export default () => { }) } - //获取手机号码 + // 获取手机号码 const { fetchData: fetchDataUserPhone } = GetPhoneNumberApi() const { fetchData: fetchBindingCompany } = BindingCompanyApi() const getPhoneNumber = (code) => { - return new Promise(async (reslove, reject) => { + return new Promise(async(reslove, reject) => { if (userInfo.adminUserInfo?.is_authorize_phone) { reslove(true) return true @@ -109,18 +112,19 @@ export default () => { await fetchBindingCompany() getAdminUserInfo() reslove(res.data) - } else { + } + else { reject(res.msg) } }) } - //获取分享码(右上角分享码) + // 获取分享码(右上角分享码) const { SharePage } = SHARE_SCENE const { fetchData: fetchDataShortCode } = GetShortCodeApi() - const getShortCode = async (user_id) => { + const getShortCode = async(user_id) => { const { data: resPage } = await fetchDataShortCode({ share_user_id: user_id, type: SharePage.value }) - setSortCode({ ...userInfo.sort_code, shareShortPage: { title: '打造面料爆品 专注客户服务', code: resPage.md5_key, img: IMG_CND_Prefix + '/mall/share_img_01.png' } }) + setSortCode({ ...userInfo.sort_code, shareShortPage: { title: '打造面料爆品 专注客户服务', code: resPage.md5_key, img: `${IMG_CND_Prefix}/mall/share_img_01.png` } }) } return { diff --git a/src/use/useLoginRequest.ts b/src/use/useLoginRequest.ts index 749532e..c6c2f70 100644 --- a/src/use/useLoginRequest.ts +++ b/src/use/useLoginRequest.ts @@ -1,28 +1,29 @@ -import { BASE_URL, WX_APPID } from '@/common/constant' import Taro, { useRouter } from '@tarojs/taro' import { useRef } from 'react' import qs from 'qs' import useUserInfo from './useUserInfo' +// eslint-disable-next-line import/first +import { BASE_URL, WX_APPID } from '@/common/constant' -//开这个hook 主要是为了让useHttp 能够调用 +// 开这个hook 主要是为了让useHttp 能够调用 -type Param = { success: boolean; data: any; msg: string; code: null | number; loading: boolean } -let loginStatus = false //登录状态,true登录中 +interface Param { success: boolean; data: any; msg: string; code: null | number; loading: boolean } +let loginStatus = false // 登录状态,true登录中 export default () => { - let initData = { + const initData = { success: false, data: null, msg: '', code: null, loading: false, } - let loginData = useRef(initData) + const loginData = useRef(initData) const { setToken, setSessionKey } = useUserInfo() const router = useRouter() - //微信登录请求v2 - const fetchDataLogin = async (login_code) => { + // 微信登录请求v2 + const fetchDataLogin = async(login_code) => { const q = { - url: BASE_URL + '/v2/mp/login', + url: `${BASE_URL}/v2/mp/login`, header: { Platform: 3, Appid: WX_APPID, @@ -35,20 +36,22 @@ export default () => { const result = await Taro.request(q as any) const { code, data, msg } = result.data if (result.statusCode === 200) { - loginData.current.success = code === 0 ? true : false + loginData.current.success = code === 0 loginData.current.code = code loginData.current.msg = msg loginData.current.data = data - } else { + } + else { Taro.showToast({ - title: `错误:登录失败`, + title: '错误:登录失败', icon: 'none', }) console.log('登录错误:', result.errMsg) } - } catch (e) { + } + catch (e) { Taro.showToast({ - title: `错误:登录失败`, + title: '错误:登录失败', icon: 'none', }) console.log('登录错误:', e.errMsg) @@ -56,44 +59,48 @@ export default () => { return loginData.current } - //微信登录 + // 微信登录 const login = () => { return new Promise((resolve, reject) => { - if (loginStatus) return reject(false) + // eslint-disable-next-line prefer-promise-reject-errors + if (loginStatus) { return reject(false) } loginStatus = true Taro.login({ - success: async (res) => { + success: async(res) => { if (res.code) { const { data, success, msg } = await fetchDataLogin(res.code) if (success) { setToken(data.token) setSessionKey(data.session_key) resolve(data) - let params = router.params + const params = router.params delete params.$taroTimestamp if (router.path === '/pages/index/index' || router.path === '/pages/user/index') { Taro.reLaunch({ - url: router.path + '?' + qs.stringify(params), - }) - } else { - Taro.redirectTo({ - url: router.path + '?' + qs.stringify(params), + url: `${router.path}?${qs.stringify(params)}`, }) } - } else { + else { + Taro.redirectTo({ + url: `${router.path}?${qs.stringify(params)}`, + }) + } + } + else { Taro.showToast({ title: '登录失败', icon: 'none', }) reject(msg) } - } else { - console.log('登录失败!' + res.errMsg) + } + else { + console.log(`登录失败!${res.errMsg}`) reject(res.errMsg) } loginStatus = false }, - fail: function (e) { + fail(e) { console.log('登录失败!::', e) reject(e) loginStatus = false diff --git a/src/use/useUploadImage.ts b/src/use/useUploadImage.ts index 45b31ff..d3df98f 100644 --- a/src/use/useUploadImage.ts +++ b/src/use/useUploadImage.ts @@ -3,7 +3,7 @@ import { UPLOAD_CDN_URL } from '@/common/constant' import { GetSignApi } from '@/api/cdn' export default () => { - const { fetchData: GetSign, state } = GetSignApi() + const { fetchData: GetSign } = GetSignApi() // 上传图片 获取auth,Policy /* @@ -11,18 +11,21 @@ export default () => { type 类型值,区分上传业务bucket */ const getSecret = (scene, type) => { - return new Promise(async (resolve, reject) => { + // eslint-disable-next-line no-async-promise-executor + return new Promise(async(resolve, reject) => { const SAVE_PATH = `/${scene}/{filemd5}{day}{hour}{min}{sec}{.suffix}` - let params = { + const params = { method: 'post', save_key: SAVE_PATH, } // 获取签名 - let res = await GetSign(params) + const res = await GetSign(params) if (res.success) { resolve(res.data) - } else { + } + else { + // eslint-disable-next-line prefer-promise-reject-errors reject({ code: res.code || '9999', msg: res.msg, @@ -31,15 +34,17 @@ export default () => { }) } 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 (!name) { return false } + const imgType = ['gif', 'jpeg', 'jpg', 'bmp', 'png'] + const videoType = ['avi', 'wmv', 'mkv', 'mp4', 'mov', 'rm', '3gp', 'flv', 'mpg', 'rmvb', 'quicktime'] - if (RegExp('.?(' + imgType.join('|') + ')$', 'i').test(name.toLowerCase())) { + if (RegExp(`.?(${imgType.join('|')})$`, 'i').test(name.toLowerCase())) { return 'image' - } else if (RegExp('.(' + videoType.join('|') + ')$', 'i').test(name.toLowerCase())) { + } + else if (RegExp(`.(${videoType.join('|')})$`, 'i').test(name.toLowerCase())) { return 'video' - } else { + } + else { return false } } @@ -52,7 +57,7 @@ export default () => { * @returns */ const uploadCDNImg = (file, secene, type) => { - let filetype = file.path + const filetype = file.path console.log('filetype::', filetype) if (!getFileType(filetype)) { Taro.showToast({ @@ -66,9 +71,9 @@ export default () => { return new Promise>((resolve, reject) => { getSecret(secene, type) .then((result) => { - let res: any = result + const res: any = result console.log('bucket', res.bucket) - var formdata = { + const formdata = { authorization: res.authorization, policy: res.policy, } @@ -93,7 +98,8 @@ export default () => { Taro.showLoading({ title: '上传中...', }) - } else { + } + else { Taro.hideLoading() } }) @@ -109,10 +115,10 @@ export default () => { }) } - // product 产品相关,图片、纹理图等 全平台 - // after-sale 售后(申请退货、退款)相关的、图片、视频 全平台 - // mall 电子商城相关的 全平台 - // logistics 物流(发货、提货)相关的、图片、视频 全平台 + // product 产品相关,图片、纹理图等 全平台 + // after-sale 售后(申请退货、退款)相关的、图片、视频 全平台 + // mall 电子商城相关的 全平台 + // logistics 物流(发货、提货)相关的、图片、视频 全平台 type cdn_upload_type_Param = 'product' | 'after-sale' | 'mall' | 'logistics' /** * 上传手机图片 @@ -120,27 +126,29 @@ export default () => { * @param count // 1时返回一张图片信息, 大于1时返回图片数组 * @returns */ - const getWxPhoto = (cdn_upload_type: cdn_upload_type_Param, count: number = 1) => { + const getWxPhoto = (cdn_upload_type: cdn_upload_type_Param, count = 1) => { return new Promise((resolve, reject) => { - let list: any[] = [] + const list: any[] = [] Taro.chooseImage({ - count: count, + count, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], - success: async function (res) { + async success(res) { try { if (count > 1) { for (let i = 0; i < res.tempFiles.length; i++) { - let data = await uploadCDNImg(res.tempFiles[i], cdn_upload_type, cdn_upload_type) + const data = await uploadCDNImg(res.tempFiles[i], cdn_upload_type, cdn_upload_type) list.push(data) } resolve(list) - } else { - //兼容以前上传一张的情况 - let data = await uploadCDNImg(res.tempFiles[0], cdn_upload_type, cdn_upload_type) + } + else { + // 兼容以前上传一张的情况 + const data = await uploadCDNImg(res.tempFiles[0], cdn_upload_type, cdn_upload_type) resolve(data) } - } catch (res) { + } + catch (res) { reject(res) } }, @@ -148,36 +156,38 @@ export default () => { }) } - // product 产品相关,图片、纹理图等 全平台 - // after-sale 售后(申请退货、退款)相关的、图片、视频 全平台 - // mall 电子商城相关的 全平台 - // logistics 物流(发货、提货)相关的、图片、视频 全平台 + // product 产品相关,图片、纹理图等 全平台 + // after-sale 售后(申请退货、退款)相关的、图片、视频 全平台 + // mall 电子商城相关的 全平台 + // logistics 物流(发货、提货)相关的、图片、视频 全平台 /** * 上传聊天记录图片 * @param cdn_upload_type 场景值 * @param count // 1时返回一张图片信息, 大于1时返回图片数组 * @returns */ - const getChatPhoto = (cdn_upload_type: cdn_upload_type_Param, count: number = 1) => { + const getChatPhoto = (cdn_upload_type: cdn_upload_type_Param, count = 1) => { return new Promise((resolve, reject) => { - let list: any[] = [] + const list: any[] = [] Taro.chooseMessageFile({ - count: count, + count, type: 'image', - success: async function (res) { + async success(res) { try { if (count > 1) { for (let i = 0; i < res.tempFiles.length; i++) { - let data = await uploadCDNImg(res.tempFiles[i], cdn_upload_type, cdn_upload_type) + const data = await uploadCDNImg(res.tempFiles[i], cdn_upload_type, cdn_upload_type) list.push(data) } resolve(list) - } else { - //兼容以前上传一张的情况 - let data = await uploadCDNImg(res.tempFiles[0], cdn_upload_type, cdn_upload_type) + } + else { + // 兼容以前上传一张的情况 + const data = await uploadCDNImg(res.tempFiles[0], cdn_upload_type, cdn_upload_type) resolve(data) } - } catch (res) { + } + catch (res) { reject(res) } }, @@ -188,6 +198,6 @@ export default () => { return { uploadCDNImg, getWxPhoto, - getChatPhoto + getChatPhoto, } } diff --git a/src/use/useUserInfo.ts b/src/use/useUserInfo.ts index a231136..25ae9dc 100644 --- a/src/use/useUserInfo.ts +++ b/src/use/useUserInfo.ts @@ -1,34 +1,35 @@ import { useDispatch } from 'react-redux' +import type { Dispatch } from 'redux' import { UserInfoActionType } from '@/constants/userInfo' -import { DataParam, UserParam, UserAdminParam, SortCodeParam, UserInfoAction } from '@/reducers/userInfo' -import { Dispatch } from 'redux' +import type { SortCodeParam, UserAdminParam, UserInfoAction, UserParam } from '@/reducers/userInfo' import { useSelector } from '@/reducers/hooks' + export default () => { - const userInfo = useSelector((state) => state.userInfoData) + const userInfo = useSelector(state => state.userInfoData) const dispatch = useDispatch>() const setToken = (token: string) => { - // @ts-ignore + // @ts-expect-error data 类型没有约束好 dispatch({ type: UserInfoActionType.SET_TOKEN, data: { token } }) } const setSessionKey = (sessionkey: string) => { - // @ts-ignore + // @ts-expect-error data 类型没有约束好 dispatch({ type: UserInfoActionType.SET_SESSIONKEY, data: { session_key: sessionkey } }) } - const setUserInfo = (userInfo: UserParam) => { - // @ts-ignore - dispatch({ type: UserInfoActionType.SET_USERINFO, data: { userInfo } }) + const setUserInfo = (userInfoProp: UserParam) => { + // @ts-expect-error data 类型没有约束好 + dispatch({ type: UserInfoActionType.SET_USERINFO, data: { userInfoProp } }) } const setAdminUserInfo = (adminUserInfo: UserAdminParam) => { - // @ts-ignore + // @ts-expect-error data 类型没有约束好 dispatch({ type: UserInfoActionType.SET_ADMINUSERINFO, data: { adminUserInfo } }) } const setSortCode = (sortCode: SortCodeParam) => { - // @ts-ignore + // @ts-expect-error data 类型没有约束好 dispatch({ type: UserInfoActionType.SET_SORTCODE, data: { sort_code: sortCode } }) } @@ -53,6 +54,6 @@ export default () => { removeToken, removeSessionKey, setSortCode, - userInfo, //响应式数据返回 + userInfo, // 响应式数据返回 } } diff --git a/yarn.lock b/yarn.lock index 509aac4..cee82a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,42 @@ # yarn lockfile v1 +"@aaronghx/eslint-config-basic@0.1.11": + version "0.1.11" + resolved "https://registry.npmjs.org/@aaronghx/eslint-config-basic/-/eslint-config-basic-0.1.11.tgz#dbe504382482dad95c23d6ced9af3d3636fed530" + integrity sha512-mQxMuEX1WhEWHGII+GxrJe2aY2Q2ZO9V0bYxnzbTjTo8AApVO3gMoKm+GrJqhwYm7sWdWfEUXS7nO1BLzxLLxg== + dependencies: + eslint-config-standard "17.0.0" + eslint-plugin-eslint-comments "^3.2.0" + eslint-plugin-html "^7.1.0" + eslint-plugin-import "^2.26.0" + eslint-plugin-jsonc "^2.5.0" + eslint-plugin-markdown "^3.0.0" + eslint-plugin-n "^15.5.1" + eslint-plugin-promise "^6.1.1" + eslint-plugin-unicorn "^45.0.0" + eslint-plugin-yml "^1.2.0" + jsonc-eslint-parser "^2.1.0" + yaml-eslint-parser "^1.1.0" + +"@aaronghx/eslint-config-react@^0.1.11": + version "0.1.11" + resolved "https://registry.npmjs.org/@aaronghx/eslint-config-react/-/eslint-config-react-0.1.11.tgz#9d8bf77ed6bd58767d096c2b9bffca19dbb8640c" + integrity sha512-DajbTKCg9uVQ0KJlx9A4P4lt/aLpqaZ8MJvprvnXuWKAm1enEbU/+JBUvXF+GpGYoDPVnZH9g4bJOuJgPcZ+MA== + dependencies: + "@aaronghx/eslint-config-ts" "0.1.11" + eslint-plugin-react "^7.31.11" + eslint-plugin-react-hooks "^4.6.0" + +"@aaronghx/eslint-config-ts@0.1.11": + version "0.1.11" + resolved "https://registry.npmjs.org/@aaronghx/eslint-config-ts/-/eslint-config-ts-0.1.11.tgz#20478854b7428a83963e4248588b9a69cf273e3c" + integrity sha512-CxXYVhl1j3C8i3zZh6kAlMlAarQAw6fAS87hUGzfP1NM3dZpRnkiMQnaWvQz6cvZRfb4ixsjI9MEryYRXtbQdw== + dependencies: + "@aaronghx/eslint-config-basic" "0.1.11" + "@typescript-eslint/eslint-plugin" "^5.44.0" + "@typescript-eslint/parser" "^5.44.0" + "@ampproject/remapping@^2.1.0": version "2.2.0" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" @@ -52,7 +88,7 @@ "@babel/eslint-parser@^7.17.0": version "7.19.1" - resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz" + resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz#4f68f6b0825489e00a24b41b6a1ae35414ecd2f4" integrity sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ== dependencies: "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" @@ -274,9 +310,9 @@ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz" integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== -"@babel/helper-validator-identifier@^7.18.6": +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/helper-validator-option@^7.12.17", "@babel/helper-validator-option@^7.18.6": @@ -314,7 +350,7 @@ "@babel/highlight@^7.18.6": version "7.18.6" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== dependencies: "@babel/helper-validator-identifier" "^7.18.6" @@ -1274,6 +1310,21 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + "@hapi/hoek@^9.0.0": version "9.3.0" resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" @@ -1295,6 +1346,15 @@ debug "^4.1.1" minimatch "^3.0.4" +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + "@humanwhocodes/gitignore-to-minimatch@^1.0.2": version "1.0.2" resolved "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz" @@ -1376,14 +1436,14 @@ "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" - resolved "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz" + resolved "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" integrity sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg== dependencies: eslint-scope "5.1.1" "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1391,7 +1451,7 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.stat@^1.1.2": @@ -1399,9 +1459,9 @@ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz" integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== -"@nodelib/fs.walk@^1.2.3": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -2221,14 +2281,14 @@ dependencies: "@types/node" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/lodash.debounce@^4.0.6": @@ -2243,6 +2303,13 @@ resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.185.tgz" integrity sha512-evMDG1bC4rgQg4ku9tKpuMh5iBNEwNa3tf9zRHdP1qlv+1WUg44xat4IxCE14gIpZRGUUWAx2VhItCZc25NfMA== +"@types/mdast@^3.0.0": + version "3.0.10" + resolved "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz#4724244a82a4598884cbbe9bcfd73dff927ee8af" + integrity sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA== + dependencies: + "@types/unist" "*" + "@types/mime@*": version "3.0.1" resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz" @@ -2278,6 +2345,11 @@ resolved "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz" integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== +"@types/normalize-package-data@^2.4.0": + version "2.4.1" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" @@ -2324,6 +2396,11 @@ resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/semver@^7.3.12": + version "7.3.13" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + "@types/serve-index@^1.9.1": version "1.9.1" resolved "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz" @@ -2346,6 +2423,11 @@ dependencies: "@types/node" "*" +"@types/unist@*", "@types/unist@^2.0.2": + version "2.0.6" + resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + "@types/use-sync-external-store@^0.0.3": version "0.0.3" resolved "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz" @@ -2371,118 +2453,87 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^4.15.1": - version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz" - integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== +"@typescript-eslint/eslint-plugin@^5.44.0": + version "5.44.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz#105788f299050c917eb85c4d9fd04b089e3740de" + integrity sha512-j5ULd7FmmekcyWeArx+i8x7sdRHzAtXTkmDPthE4amxZOWKFK7bomoJ4r7PJ8K7PoMzD16U8MmuZFAonr1ERvw== dependencies: - "@typescript-eslint/experimental-utils" "4.33.0" - "@typescript-eslint/scope-manager" "4.33.0" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - ignore "^5.1.8" - regexpp "^3.1.0" - semver "^7.3.5" + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/type-utils" "5.44.0" + "@typescript-eslint/utils" "5.44.0" + debug "^4.3.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + regexpp "^3.2.0" + semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/experimental-utils@4.33.0": - version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz" - integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== +"@typescript-eslint/parser@^5.20.0", "@typescript-eslint/parser@^5.44.0": + version "5.44.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.44.0.tgz#99e2c710a2252191e7a79113264f438338b846ad" + integrity sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA== dependencies: - "@types/json-schema" "^7.0.7" - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - -"@typescript-eslint/parser@^4.15.1": - version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz" - integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== - dependencies: - "@typescript-eslint/scope-manager" "4.33.0" - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/typescript-estree" "4.33.0" - debug "^4.3.1" - -"@typescript-eslint/parser@^5.20.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.37.0.tgz" - integrity sha512-01VzI/ipYKuaG5PkE5+qyJ6m02fVALmMPY3Qq5BHflDx3y4VobbLdHQkSMg9VPRS4KdNt4oYTMaomFoHonBGAw== - dependencies: - "@typescript-eslint/scope-manager" "5.37.0" - "@typescript-eslint/types" "5.37.0" - "@typescript-eslint/typescript-estree" "5.37.0" + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/typescript-estree" "5.44.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@4.33.0": - version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz" - integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== +"@typescript-eslint/scope-manager@5.44.0": + version "5.44.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz#988c3f34b45b3474eb9ff0674c18309dedfc3e04" + integrity sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g== dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/visitor-keys" "5.44.0" -"@typescript-eslint/scope-manager@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.37.0.tgz" - integrity sha512-F67MqrmSXGd/eZnujjtkPgBQzgespu/iCZ+54Ok9X5tALb9L2v3G+QBSoWkXG0p3lcTJsL+iXz5eLUEdSiJU9Q== +"@typescript-eslint/type-utils@5.44.0": + version "5.44.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.44.0.tgz#bc5a6e8a0269850714a870c9268c038150dfb3c7" + integrity sha512-A1u0Yo5wZxkXPQ7/noGkRhV4J9opcymcr31XQtOzcc5nO/IHN2E2TPMECKWYpM3e6olWEM63fq/BaL1wEYnt/w== dependencies: - "@typescript-eslint/types" "5.37.0" - "@typescript-eslint/visitor-keys" "5.37.0" - -"@typescript-eslint/types@4.33.0": - version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz" - integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== - -"@typescript-eslint/types@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.37.0.tgz" - integrity sha512-3frIJiTa5+tCb2iqR/bf7XwU20lnU05r/sgPJnRpwvfZaqCJBrl8Q/mw9vr3NrNdB/XtVyMA0eppRMMBqdJ1bA== - -"@typescript-eslint/typescript-estree@4.33.0": - version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz" - integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== - dependencies: - "@typescript-eslint/types" "4.33.0" - "@typescript-eslint/visitor-keys" "4.33.0" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" + "@typescript-eslint/typescript-estree" "5.44.0" + "@typescript-eslint/utils" "5.44.0" + debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.37.0.tgz" - integrity sha512-JkFoFIt/cx59iqEDSgIGnQpCTRv96MQnXCYvJi7QhBC24uyuzbD8wVbajMB1b9x4I0octYFJ3OwjAwNqk1AjDA== +"@typescript-eslint/types@5.44.0": + version "5.44.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.44.0.tgz#f3f0b89aaff78f097a2927fe5688c07e786a0241" + integrity sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ== + +"@typescript-eslint/typescript-estree@5.44.0": + version "5.44.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz#0461b386203e8d383bb1268b1ed1da9bc905b045" + integrity sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw== dependencies: - "@typescript-eslint/types" "5.37.0" - "@typescript-eslint/visitor-keys" "5.37.0" + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/visitor-keys" "5.44.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.33.0": - version "4.33.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz" - integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== +"@typescript-eslint/utils@5.44.0": + version "5.44.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.44.0.tgz#d733da4d79d6c30f1a68b531cdda1e0c1f00d52d" + integrity sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw== dependencies: - "@typescript-eslint/types" "4.33.0" - eslint-visitor-keys "^2.0.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.44.0" + "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/typescript-estree" "5.44.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.37.0": - version "5.37.0" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.37.0.tgz" - integrity sha512-Hp7rT4cENBPIzMwrlehLW/28EVCOcE9U1Z1BQTc8EA8v5qpr7GRGuG+U58V5tTY48zvUOA3KHvw3rA8tY9fbdA== +"@typescript-eslint/visitor-keys@5.44.0": + version "5.44.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz#10740dc28902bb903d12ee3a005cc3a70207d433" + integrity sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ== dependencies: - "@typescript-eslint/types" "5.37.0" + "@typescript-eslint/types" "5.44.0" eslint-visitor-keys "^3.3.0" "@vue/babel-helper-vue-jsx-merge-props@^1.4.0": @@ -2742,7 +2793,7 @@ acorn-import-assertions@^1.7.6: resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz" integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn-jsx@^5.0.0, acorn-jsx@^5.2.0, acorn-jsx@^5.3.2: +acorn-jsx@^5.0.0, acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -2762,7 +2813,7 @@ acorn@^6.0.1, acorn@^6.0.7: resolved "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.1.0, acorn@^7.1.1: +acorn@^7.1.0: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -2854,7 +2905,7 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: +ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -2878,12 +2929,12 @@ ansi-regex@^3.0.0: ansi-regex@^4.1.0: version "4.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: @@ -2898,14 +2949,14 @@ ansi-styles@^2.2.1: ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" @@ -2942,7 +2993,7 @@ arg@^4.1.0: argparse@^1.0.7: version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" @@ -2999,7 +3050,7 @@ array-flatten@^2.1.0: resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.1, array-includes@^3.1.4, array-includes@^3.1.5: +array-includes@^3.1.1: version "3.1.5" resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz" integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ== @@ -3010,6 +3061,17 @@ array-includes@^3.1.1, array-includes@^3.1.4, array-includes@^3.1.5: get-intrinsic "^1.1.1" is-string "^1.0.7" +array-includes@^3.1.4, array-includes@^3.1.5, array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" + array-union@^1.0.1, array-union@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" @@ -3019,7 +3081,7 @@ array-union@^1.0.1, array-union@^1.0.2: array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array-union@^3.0.1: @@ -3043,25 +3105,36 @@ array-unique@^0.3.2: integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== array.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== + version "1.3.1" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz" - integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" + arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" @@ -3091,7 +3164,7 @@ assign-symbols@^1.0.0: astral-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== async@^2.6.4: @@ -3571,7 +3644,7 @@ bail@^1.0.0: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.0, base64-js@^1.3.1: @@ -3703,7 +3776,7 @@ boxen@^1.2.1: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -3812,11 +3885,18 @@ buffer@^5.2.1: base64-js "^1.3.1" ieee754 "^1.1.13" -builtin-modules@^3.0.0: +builtin-modules@^3.0.0, builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== +builtins@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + bytes@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" @@ -3919,7 +3999,7 @@ callsites@^2.0.0: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^3.0.0: @@ -4041,7 +4121,7 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -4083,7 +4163,7 @@ chardet@^0.4.0: chardet@^0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== charenc@0.0.2: @@ -4131,6 +4211,11 @@ ci-info@^1.5.0: resolved "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz" integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== +ci-info@^3.6.1: + version "3.7.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz#6d01b3696c59915b6ce057e4aa4adfc2fa25f5ef" + integrity sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog== + circular-json@^0.3.1: version "0.3.3" resolved "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz" @@ -4165,6 +4250,13 @@ clean-css@^5.2.2: dependencies: source-map "~0.6.0" +clean-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz#8df7c7aae51fd36874e8f8d05b9180bc11a3fed7" + integrity sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw== + dependencies: + escape-string-regexp "^1.0.5" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" @@ -4191,7 +4283,7 @@ cli-cursor@^2.1.0: cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" @@ -4223,11 +4315,6 @@ cli-width@^2.0.0: resolved "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - cliui@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" @@ -4331,26 +4418,26 @@ collection-visit@^1.0.0: color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colord@^2.9.1: @@ -4437,7 +4524,7 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.4.7, concat-stream@^1.6.2: @@ -4643,7 +4730,7 @@ cross-spawn@^5.0.1: cross-spawn@^6.0.5: version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" @@ -4911,7 +4998,7 @@ debug@4.1.1: dependencies: ms "^2.1.1" -debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -5215,7 +5302,7 @@ dir-glob@^2.2.2: dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" @@ -5249,7 +5336,7 @@ doctrine@^2.1.0: doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" @@ -5278,6 +5365,15 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + dom7@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/dom7/-/dom7-3.0.0.tgz" @@ -5290,7 +5386,7 @@ domelementtype@1, domelementtype@^1.3.1: resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1, domelementtype@^2.2.0: +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== @@ -5316,6 +5412,13 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" +domhandler@^5.0.1, domhandler@^5.0.2: + version "5.0.3" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + domutils@^1.5.1: version "1.7.0" resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" @@ -5333,6 +5436,15 @@ domutils@^2.5.2, domutils@^2.8.0: domelementtype "^2.2.0" domhandler "^4.2.0" +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" @@ -5428,12 +5540,12 @@ electron@^11.1.0: emoji-regex@^7.0.1: version "7.0.3" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emojis-list@^3.0.0: @@ -5471,6 +5583,11 @@ entities@^2.0.0: resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.2.0, entities@^4.3.0: + version "4.4.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" @@ -5509,7 +5626,7 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.3.4" -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5: +es-abstract@^1.19.0, es-abstract@^1.19.5: version "1.20.2" resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz" integrity sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ== @@ -5538,6 +5655,36 @@ es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19 string.prototype.trimstart "^1.0.5" unbox-primitive "^1.0.2" +es-abstract@^1.20.4: + version "1.20.4" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + es-module-lexer@^0.10.4: version "0.10.5" resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz" @@ -5550,7 +5697,7 @@ es-module-lexer@^0.9.0: es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" @@ -5720,7 +5867,7 @@ escape-html@~1.0.3: escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: @@ -5740,17 +5887,22 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" -eslint-config-taro@3.5.5: - version "3.5.5" - resolved "https://registry.npmjs.org/eslint-config-taro/-/eslint-config-taro-3.5.5.tgz" - integrity sha512-IL/FqHCKp3vCfWvaubM6BpzQzPSS8KEXacqAL19itZn6T+/sWPT5RrKL9BDRuBTvKQa282N/1IOa/gswQPYo9Q== +eslint-config-standard@17.0.0: + version "17.0.0" + resolved "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz#fd5b6cf1dcf6ba8d29f200c461de2e19069888cf" + integrity sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg== + +eslint-config-taro@3.5.7: + version "3.5.7" + resolved "https://registry.npmjs.org/eslint-config-taro/-/eslint-config-taro-3.5.7.tgz#c35d11c71dcc1f6acd8d9affcf2828174364821e" + integrity sha512-g/ErULI0pkxNEJeJZMLkwYe0nJTbOfRWgcu0Lso8sIfgZrwKO1eXIPBqWWmgGOqmfl8FKZsyhN1BPFDstRYJ2Q== dependencies: "@babel/eslint-parser" "^7.17.0" "@typescript-eslint/parser" "^5.20.0" eslint-import-resolver-node@^0.3.6: version "0.3.6" - resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== dependencies: debug "^3.2.7" @@ -5758,14 +5910,37 @@ eslint-import-resolver-node@^0.3.6: eslint-module-utils@^2.7.3: version "2.7.4" - resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" -eslint-plugin-import@^2.12.0: +eslint-plugin-es@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9" + integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-eslint-comments@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz#9e1cd7b4413526abb313933071d7aba05ca12ffa" + integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== + dependencies: + escape-string-regexp "^1.0.5" + ignore "^5.0.5" + +eslint-plugin-html@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-7.1.0.tgz#aec2a3772b40ccf51a5be4f972f07600539d3b3e" + integrity sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg== + dependencies: + htmlparser2 "^8.0.1" + +eslint-plugin-import@^2.26.0: version "2.26.0" - resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== dependencies: array-includes "^3.1.4" @@ -5782,9 +5957,44 @@ eslint-plugin-import@^2.12.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" -eslint-plugin-react-hooks@^4.2.0: +eslint-plugin-jsonc@^2.5.0: + version "2.5.0" + resolved "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.5.0.tgz#b0daea12f0927a3bba99557902ce6e0b48c37b4b" + integrity sha512-G257khwkrOQ5MJpSzz4yQh5K12W4xFZRcHmVlhVFWh2GCLDX+JwHnmkQoUoFDbOieSPBMsPFZDTJScwrXiWlIg== + dependencies: + eslint-utils "^3.0.0" + jsonc-eslint-parser "^2.0.4" + natural-compare "^1.4.0" + +eslint-plugin-markdown@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.0.tgz#69a63ab3445076a3c2eb6fce6f5114785b19d318" + integrity sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg== + dependencies: + mdast-util-from-markdown "^0.8.5" + +eslint-plugin-n@^15.5.1: + version "15.5.1" + resolved "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.5.1.tgz#b3991857d1edaa47e0108ead825470ce63f391c1" + integrity sha512-kAd+xhZm7brHoFLzKLB7/FGRFJNg/srmv67mqb7tto22rpr4wv/LV6RuXzAfv3jbab7+k1wi42PsIhGviywaaw== + dependencies: + builtins "^5.0.1" + eslint-plugin-es "^4.1.0" + eslint-utils "^3.0.0" + ignore "^5.1.1" + is-core-module "^2.11.0" + minimatch "^3.1.2" + resolve "^1.22.1" + semver "^7.3.8" + +eslint-plugin-promise@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + +eslint-plugin-react-hooks@^4.6.0: version "4.6.0" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz" + resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react@7.10.0: @@ -5797,25 +6007,26 @@ eslint-plugin-react@7.10.0: jsx-ast-utils "^2.0.1" prop-types "^15.6.2" -eslint-plugin-react@^7.8.2: - version "7.31.8" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.8.tgz" - integrity sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw== +eslint-plugin-react@^7.31.11: + version "7.31.11" + resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz#011521d2b16dcf95795df688a4770b4eaab364c8" + integrity sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw== dependencies: - array-includes "^3.1.5" - array.prototype.flatmap "^1.3.0" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.1" - object.values "^1.1.5" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" prop-types "^15.8.1" resolve "^2.0.0-next.3" semver "^6.3.0" - string.prototype.matchall "^4.0.7" + string.prototype.matchall "^4.0.8" eslint-plugin-taro@^2.2.10: version "2.2.18" @@ -5824,6 +6035,38 @@ eslint-plugin-taro@^2.2.10: dependencies: has "^1.0.1" +eslint-plugin-unicorn@^45.0.0: + version "45.0.0" + resolved "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.0.tgz#a6650ff3000dc1a87cc2f6ac3a11edcde61712e2" + integrity sha512-iP8cMRxXKHonKioOhnCoCcqVhoqhAp6rB+nsoLjXFDxTHz3btWMAp8xwzjHA0B1K6YV/U/Yvqn1bUXZt8sJPuQ== + dependencies: + "@babel/helper-validator-identifier" "^7.19.1" + ci-info "^3.6.1" + clean-regexp "^1.0.0" + eslint-utils "^3.0.0" + esquery "^1.4.0" + indent-string "^4.0.0" + is-builtin-module "^3.2.0" + jsesc "3.0.2" + lodash "^4.17.21" + pluralize "^8.0.0" + read-pkg-up "^7.0.1" + regexp-tree "^0.1.24" + regjsparser "0.9.1" + safe-regex "^2.1.1" + semver "^7.3.8" + strip-indent "^3.0.0" + +eslint-plugin-yml@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.2.0.tgz#4574e5ab2fbaea5f2b278819b19ea273f8b58af0" + integrity sha512-v0jAU/F5SJg28zkpxwGpY04eGZMWFP6os8u2qaEAIRjSH2GqrNl0yBR5+sMHLU/026kAduxVbvLSqmT3Mu3O0g== + dependencies: + debug "^4.3.2" + lodash "^4.17.21" + natural-compare "^1.4.0" + yaml-eslint-parser "^1.1.0" + eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz" @@ -5832,7 +6075,7 @@ eslint-scope@3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@5.1.1, eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -5856,13 +6099,20 @@ eslint-scope@^7.1.1: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^1.3.1, eslint-utils@^1.4.3: +eslint-utils@^1.3.1: version "1.4.3" resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz" integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-utils@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" @@ -5872,7 +6122,7 @@ eslint-utils@^3.0.0: eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: @@ -5880,7 +6130,7 @@ eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.3.0: +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== @@ -5927,49 +6177,6 @@ eslint@5.16.0: table "^5.2.3" text-table "^0.2.0" -eslint@^6.8.0: - version "6.8.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - eslint@^8.12.0: version "8.23.1" resolved "https://registry.npmjs.org/eslint/-/eslint-8.23.1.tgz" @@ -6015,6 +6222,51 @@ eslint@^8.12.0: strip-json-comments "^3.1.0" text-table "^0.2.0" +eslint@^8.28.0: + version "8.28.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" + integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + regexpp "^3.2.0" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + espree@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz" @@ -6024,14 +6276,14 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== +espree@^9.0.0: + version "9.4.1" + resolved "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" espree@^9.4.0: version "9.4.0" @@ -6044,7 +6296,7 @@ espree@^9.4.0: esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1, esquery@^1.4.0: @@ -6056,14 +6308,14 @@ esquery@^1.0.1, esquery@^1.4.0: esrecurse@^4.1.0, esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: @@ -6073,7 +6325,7 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: @@ -6264,7 +6516,7 @@ external-editor@^2.1.0: external-editor@^3.0.3: version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -6314,7 +6566,7 @@ extsprintf@^1.2.0: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^2.0.2, fast-glob@^2.2.6: @@ -6331,7 +6583,7 @@ fast-glob@^2.0.2, fast-glob@^2.2.6: fast-glob@^3.2.7, fast-glob@^3.2.9: version "3.2.12" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -6342,7 +6594,7 @@ fast-glob@^3.2.7, fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: @@ -6352,7 +6604,7 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: fastq@^1.6.0: version "1.13.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" @@ -6386,13 +6638,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz" @@ -6403,7 +6648,7 @@ file-entry-cache@^2.0.0: file-entry-cache@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: flat-cache "^2.0.1" @@ -6497,7 +6742,7 @@ fill-range@^4.0.0: fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" @@ -6556,6 +6801,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + find-up@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" @@ -6590,7 +6843,7 @@ flat-cache@^1.2.1: flat-cache@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== dependencies: flatted "^2.0.0" @@ -6607,7 +6860,7 @@ flat-cache@^3.0.4: flatted@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz" + resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== flatted@^3.1.0: @@ -6708,7 +6961,7 @@ fs-monkey@^1.0.3: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.1.2: @@ -6738,7 +6991,7 @@ function.prototype.name@^1.1.5: functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== functions-have-names@^1.2.2: @@ -6756,7 +7009,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.2, get-intrinsic@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz" integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== @@ -6867,14 +7120,14 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob-parent@^6.0.1: +glob-parent@^6.0.1, glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== @@ -6979,13 +7232,6 @@ globals@^11.1.0, globals@^11.7.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - globals@^13.15.0: version "13.17.0" resolved "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz" @@ -7005,9 +7251,9 @@ globalthis@^1.0.1: dependencies: define-properties "^1.1.3" -globby@^11.0.1, globby@^11.0.3, globby@^11.1.0: +globby@^11.0.1, globby@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -7191,12 +7437,12 @@ has-flag@^1.0.0: has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: @@ -7429,6 +7675,16 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" +htmlparser2@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + domutils "^3.0.1" + entities "^4.3.0" + http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" @@ -7548,7 +7804,7 @@ ignore@^4.0.3, ignore@^4.0.6: resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0: +ignore@^5.0.5, ignore@^5.1.1, ignore@^5.1.9, ignore@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -7596,7 +7852,7 @@ import-lazy@^3.1.0: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^2.1.0: @@ -7623,7 +7879,7 @@ indexes-of@^1.0.1: inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -7701,25 +7957,6 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" @@ -7851,11 +8088,23 @@ is-buffer@^1.1.4, is-buffer@^1.1.5, is-buffer@~1.1.6: resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-builtin-module@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" + integrity sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw== + dependencies: + builtin-modules "^3.3.0" + is-callable@^1.1.4, is-callable@^1.2.4: version "1.2.6" resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz" integrity sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q== +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-ci@^1.0.10, is-ci@^1.0.8: version "1.2.1" resolved "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz" @@ -7863,7 +8112,14 @@ is-ci@^1.0.10, is-ci@^1.0.8: dependencies: ci-info "^1.5.0" -is-core-module@^2.8.1, is-core-module@^2.9.0: +is-core-module@^2.11.0, is-core-module@^2.8.1: + version "2.11.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-core-module@^2.9.0: version "2.10.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz" integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg== @@ -7960,7 +8216,7 @@ is-extglob@^1.0.0: is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finite@^1.0.0: @@ -7977,12 +8233,12 @@ is-fullwidth-code-point@^1.0.0: is-fullwidth-code-point@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^2.0.0, is-glob@^2.0.1: @@ -8072,7 +8328,7 @@ is-number@^4.0.0: is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^1.0.0: @@ -8102,7 +8358,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-path-inside@^3.0.2: +is-path-inside@^3.0.2, is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== @@ -8249,7 +8505,7 @@ isbinaryfile@^4.0.0: isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^2.0.0: @@ -8343,7 +8599,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.4.2, js-yaml@^3.9.0: @@ -8403,6 +8659,11 @@ jsesc@2, jsesc@^2.5.1: resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz" @@ -8430,7 +8691,7 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: @@ -8445,7 +8706,7 @@ json-schema@0.4.0: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: @@ -8475,6 +8736,16 @@ json5@^2.1.2, json5@^2.2.0, json5@^2.2.1: resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== +jsonc-eslint-parser@^2.0.4, jsonc-eslint-parser@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2" + integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g== + dependencies: + acorn "^8.5.0" + eslint-visitor-keys "^3.0.0" + espree "^9.0.0" + semver "^7.3.5" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" @@ -8518,7 +8789,7 @@ jsx-ast-utils@^2.0.1: "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.3" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz" + resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" integrity sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw== dependencies: array-includes "^3.1.5" @@ -8633,7 +8904,7 @@ less@^4.1.0: levn@^0.3.0, levn@~0.3.0: version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== dependencies: prelude-ls "~1.1.2" @@ -8783,6 +9054,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" @@ -8921,7 +9199,7 @@ lru-cache@^4.0.0, lru-cache@^4.0.1: lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" @@ -9011,6 +9289,22 @@ mdast-util-compact@^1.0.0: dependencies: unist-util-visit "^1.1.0" +mdast-util-from-markdown@^0.8.5: + version "0.8.5" + resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" @@ -9108,7 +9402,7 @@ merge-stream@^2.0.0: merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== methods@~1.1.2: @@ -9162,6 +9456,14 @@ metro-react-native-babel-preset@^0.66.2: "@babel/template" "^7.0.0" react-refresh "^0.4.0" +micromark@~2.11.0: + version "2.11.4" + resolved "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + micromatch@^2.3.11: version "2.3.11" resolved "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz" @@ -9237,7 +9539,7 @@ mimic-fn@^1.0.0: mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^1.0.0, mimic-response@^1.0.1: @@ -9245,6 +9547,11 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + mini-css-extract-plugin@2.4.6: version "2.4.6" resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.6.tgz" @@ -9257,7 +9564,7 @@ minimalistic-assert@^1.0.0: resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -9284,11 +9591,16 @@ minimist@1.2.5: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: version "1.2.6" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minimist@^1.2.6: + version "1.2.7" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + miniprogram-api-typings@^3.2.2: version "3.6.0" resolved "https://registry.npmjs.org/miniprogram-api-typings/-/miniprogram-api-typings-3.6.0.tgz" @@ -9328,7 +9640,7 @@ mixin-deep@^1.2.0: mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.6: version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" @@ -9350,7 +9662,7 @@ ms@2.0.0: ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3, ms@^2.1.1: @@ -9394,7 +9706,7 @@ mute-stream@0.0.7: mute-stream@0.0.8: version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== mz@^2.4.0: @@ -9433,9 +9745,14 @@ native-request@^1.0.5: resolved "https://registry.npmjs.org/native-request/-/native-request-1.1.0.tgz" integrity sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== needle@^3.1.0: @@ -9459,7 +9776,7 @@ neo-async@^2.6.2: nice-try@^1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== no-case@^2.2.0: @@ -9501,7 +9818,7 @@ node-sass-tilde-importer@^1.0.2: dependencies: find-parent-dir "^0.3.0" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -9689,31 +10006,31 @@ object.assign@^4.1.0, object.assign@^4.1.3, object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== +object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.hasown@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz" - integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A== +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== dependencies: define-properties "^1.1.4" - es-abstract "^1.19.5" + es-abstract "^1.20.4" object.omit@^2.0.0: version "2.0.1" @@ -9730,14 +10047,14 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== +object.values@^1.1.5, object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" @@ -9777,7 +10094,7 @@ onetime@^2.0.0: onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" @@ -9791,7 +10108,7 @@ open@^8.0.9: is-docker "^2.1.1" is-wsl "^2.2.0" -optionator@^0.8.1, optionator@^0.8.2, optionator@^0.8.3: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.3" resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== @@ -9883,7 +10200,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -9911,6 +10228,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-locate@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" @@ -9987,7 +10311,7 @@ param-case@^3.0.4: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" @@ -10004,6 +10328,18 @@ parse-entities@^1.0.2, parse-entities@^1.1.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz" @@ -10181,7 +10517,7 @@ path-type@^3.0.0: path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== pend@~1.2.0: @@ -10262,6 +10598,11 @@ please-upgrade-node@^3.1.1: dependencies: semver-compare "^1.0.0" +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + pn@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz" @@ -10720,7 +11061,7 @@ prelude-ls@^1.2.1: prelude-ls@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== prepend-http@^1.0.1: @@ -10773,7 +11114,7 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: progress@^2.0.0, progress@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== promise-polyfill@^7.1.0: @@ -10828,7 +11169,7 @@ pump@^3.0.0: punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== qs@6.10.3: @@ -10886,7 +11227,7 @@ querystringify@^2.1.1: queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^1.0.0: @@ -11045,6 +11386,15 @@ read-pkg-up@^3.0.0: find-up "^2.0.0" read-pkg "^3.0.0" +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" @@ -11063,6 +11413,16 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + "readable-stream@2 || 3", readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.6.0" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" @@ -11204,7 +11564,12 @@ regex-parser@^2.2.11: resolved "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz" integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: +regexp-tree@^0.1.24, regexp-tree@~0.1.1: + version "0.1.24" + resolved "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d" + integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw== + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: version "1.4.3" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== @@ -11215,10 +11580,10 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1, regexp.prototype.f regexpp@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpp@^3.1.0, regexpp@^3.2.0: +regexpp@^3.0.0, regexpp@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== @@ -11269,7 +11634,7 @@ regjsgen@^0.7.1: resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz" integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== -regjsparser@^0.9.1: +regjsparser@0.9.1, regjsparser@^0.9.1: version "0.9.1" resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== @@ -11456,7 +11821,7 @@ resolve-from@^3.0.0: resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-pathname@^3.0.0: @@ -11487,7 +11852,7 @@ resolve@1.15.1: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.8.1: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.8.1: version "1.22.1" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -11498,7 +11863,7 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20. resolve@^2.0.0-next.3: version "2.0.0-next.4" - resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" + resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: is-core-module "^2.9.0" @@ -11530,7 +11895,7 @@ restore-cursor@^2.0.0: restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -11548,12 +11913,12 @@ retry@^0.13.1: reusify@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@2.6.3, rimraf@~2.6.2: version "2.6.3" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" @@ -11591,14 +11956,14 @@ run-async@^0.1.0: dependencies: once "^1.3.0" -run-async@^2.2.0, run-async@^2.4.0: +run-async@^2.2.0: version "2.4.1" resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" @@ -11615,7 +11980,7 @@ rxjs@^5.5.2: dependencies: symbol-observable "1.0.1" -rxjs@^6.4.0, rxjs@^6.6.0: +rxjs@^6.4.0: version "6.6.7" resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -11632,6 +11997,15 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" @@ -11639,6 +12013,13 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== + dependencies: + regexp-tree "~0.1.1" + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" @@ -11797,7 +12178,14 @@ semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7: +semver@^7.0.0, semver@^7.3.7, semver@^7.3.8: + version "7.3.8" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.2, semver@^7.3.5: version "7.3.7" resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== @@ -11894,7 +12282,7 @@ shallow-clone@^3.0.0: shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -11908,7 +12296,7 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: @@ -11956,7 +12344,7 @@ slash@^2.0.0: slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slash@^4.0.0: @@ -11973,7 +12361,7 @@ slice-ansi@1.0.0: slice-ansi@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== dependencies: ansi-styles "^3.2.0" @@ -12182,7 +12570,7 @@ sprintf-js@^1.1.2: sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: @@ -12303,18 +12691,18 @@ string.fromcodepoint@^0.2.1: resolved "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz" integrity sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg== -string.prototype.matchall@^4.0.7: - version "4.0.7" - resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz" - integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg== +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.4.1" + regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" string.prototype.trimend@^1.0.5: @@ -12382,7 +12770,7 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" @@ -12450,12 +12838,19 @@ strip-indent@^2.0.0: resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz" integrity sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA== +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -12585,7 +12980,7 @@ supports-color@^3.2.3: supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" @@ -12667,7 +13062,7 @@ table@^4.0.1: table@^5.2.3: version "5.4.6" - resolved "https://registry.npmjs.org/table/-/table-5.4.6.tgz" + resolved "https://registry.npmjs.org/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== dependencies: ajv "^6.10.2" @@ -12754,7 +13149,7 @@ terser@^5.10.0, terser@^5.14.1: text-table@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thenify-all@^1.0.0: @@ -12801,7 +13196,7 @@ timed-out@^4.0.0, timed-out@^4.0.1: tmp@^0.0.33: version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" @@ -12843,7 +13238,7 @@ to-regex-range@^2.1.0: to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" @@ -12950,7 +13345,7 @@ ts-node@^10.9.1: tsconfig-paths@^3.14.1: version "3.14.1" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ== dependencies: "@types/json5" "^0.0.29" @@ -12960,7 +13355,7 @@ tsconfig-paths@^3.14.1: tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.3, tslib@^2.3.0: @@ -12970,7 +13365,7 @@ tslib@^2.0.3, tslib@^2.3.0: tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" @@ -13001,7 +13396,7 @@ type-check@^0.4.0, type-check@~0.4.0: type-check@~0.3.2: version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== dependencies: prelude-ls "~1.1.2" @@ -13018,12 +13413,17 @@ type-fest@^0.20.2: type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== type-is@~1.6.18: @@ -13168,6 +13568,13 @@ unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz" integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + unist-util-visit-parents@^2.0.0: version "2.1.2" resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz" @@ -13248,7 +13655,7 @@ upper-case@^1.1.1: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" @@ -13334,11 +13741,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" @@ -13712,7 +14114,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^2.0.0: @@ -13726,7 +14128,7 @@ write-file-atomic@^2.0.0: write@1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/write/-/write-1.0.3.tgz" + resolved "https://registry.npmjs.org/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: mkdirp "^0.5.1" @@ -13810,14 +14212,28 @@ yallist@^2.1.2: yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml-eslint-parser@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.1.0.tgz#62703e2f4afbe5a17d3fe297882740bf89504e78" + integrity sha512-b464Q1fYiX1oYx2kE8k4mEp6S9Prk+tfDsY/IPxQ0FCjEuj3AKko5Skf3/yQJeYTTDyjDE+aWIJemnv29HvEWQ== + dependencies: + eslint-visitor-keys "^3.0.0" + lodash "^4.17.21" + yaml "^2.0.0" + yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.0.0: + version "2.1.3" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz#9b3a4c8aff9821b696275c79a8bee8399d945207" + integrity sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg== + yargs-parser@^10.0.0: version "10.1.0" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz"