已修改52个文件
已重命名2个文件
已添加26个文件
已删除3个文件
5290 ■■■■■ 文件已修改
apps/bStandardMiniApp/project.config.json 118 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/project.private.config.json 166 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/app.config.ts 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/constants/app.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/constants/router.ts 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/constants/tabBar.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/custom-tab-bar/index.tsx 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/pages/workbenches/InnerPage.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/pages/workbenches/workbenches.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManage/InnerPage.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManage/appointmentManage.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManage/appointmentManage.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManageDetail/InnerPage.vue 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManageDetail/appointmentManageDetail.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManageDetail/appointmentManageDetail.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/login/loginByForm/accountLoginForm.vue 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/orderManage/orderManage/InnerPage.vue 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/orderManage/orderManage/orderManage.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/orderManage/orderManage/orderManage.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/orderManage/orderManageDetail/InnerPage.vue 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/orderManage/orderManageDetail/orderManageDetail.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/subpackages/orderManage/orderManageDetail/orderManageDetail.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/src/utils/page.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cStandardMiniApp/project.private.config.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/cStandardMiniApp/src/styles/nut.scss 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/.eslintrc-auto-import.json 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/auto-imports.d.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/ci/private.wx3669dd12a0915f7d.key 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/ci/private.wxb9e0baf4f87aa0de.key 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/ci/upload.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/project.private.config.json 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/app.config.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/assets/flexJob/icon-attention-lg-active.png 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/assets/flexJob/icon-attention-lg.png 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/assets/flexJob/icon-localtion.png 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/assets/flexJob/icon-share.png 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/components/Card/StandardServiceCard.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/constants/router.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/hooks/authentication.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/hooks/enterprise.ts 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/hooks/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/hooks/user.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/pages/home/hooks/index.ts 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/pages/home/index.vue 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/pages/service/3x_categoryData.ts 2095 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/pages/service/InnerPage.vue 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/pages/service/service.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/stores/modules/system.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/styles/nut.scss 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/components/MineServiceDetailView.vue 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/login/components/LoginPageLayout/LoginPageLayout.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/mine/addressManange/InnerPage.vue 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/mine/editAddress/InnerPage.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/mine/mineCollectTask/mineCollectTask.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/mine/mineOrderDetail/InnerPage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/mine/mineOrderManage/InnerPage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/mine/mineReserveService/InnerPage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/mine/mineReserveServiceDetail/InnerPage.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue 232 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/MineServiceDetailView.vue 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/ReserveServiceCard.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/ServiceDetailAddressCard.vue 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/ServiceDetailGoodCard.vue 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Category/Category.vue 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Chunk/SquareView.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Input/ChooseInputWithDatePicker.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Sku/Sku.vue 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Sku/sku.ts 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/index.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/constants/apiEnum.ts 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/hooks/dic.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/hooks/standardOrder.ts 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/index.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/standardOrder.ts 128 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/standardService.ts 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/typings.d.ts 585 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/services/apiV2/userWallet.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bStandardMiniApp/project.config.json
@@ -1,61 +1,61 @@
{
  "miniprogramRoot": "dist/",
  "description": "",
  "setting": {
    "urlCheck": false,
    "es6": false,
    "enhance": false,
    "postcss": false,
    "preloadBackgroundData": false,
    "minified": false,
    "newFeature": false,
    "coverView": true,
    "nodeModules": false,
    "autoAudits": false,
    "showShadowRootInWxmlPanel": true,
    "scopeDataCheck": false,
    "uglifyFileName": false,
    "checkInvalidKey": true,
    "checkSiteMap": false,
    "uploadWithSourceMap": true,
    "compileHotReLoad": false,
    "lazyloadPlaceholderEnable": false,
    "useMultiFrameRuntime": true,
    "babelSetting": {
      "ignore": [],
      "disablePlugins": [],
      "outputPath": ""
    "miniprogramRoot": "dist/",
    "description": "",
    "setting": {
        "urlCheck": false,
        "es6": true,
        "enhance": true,
        "postcss": false,
        "preloadBackgroundData": false,
        "minified": false,
        "newFeature": false,
        "coverView": true,
        "nodeModules": false,
        "autoAudits": false,
        "showShadowRootInWxmlPanel": true,
        "scopeDataCheck": false,
        "uglifyFileName": false,
        "checkInvalidKey": true,
        "checkSiteMap": false,
        "uploadWithSourceMap": true,
        "compileHotReLoad": false,
        "lazyloadPlaceholderEnable": false,
        "useMultiFrameRuntime": true,
        "babelSetting": {
            "ignore": [],
            "disablePlugins": [],
            "outputPath": ""
        },
        "enableEngineNative": false,
        "useIsolateContext": true,
        "userConfirmedBundleSwitch": false,
        "packNpmManually": false,
        "packNpmRelationList": [],
        "minifyWXSS": false,
        "disableUseStrict": false,
        "minifyWXML": false,
        "showES6CompileOption": false,
        "useCompilerPlugins": false,
        "ignoreUploadUnusedFiles": false,
        "condition": false,
        "compileWorklet": false,
        "localPlugins": false,
        "swc": false,
        "disableSWC": true
    },
    "enableEngineNative": false,
    "useIsolateContext": true,
    "userConfirmedBundleSwitch": false,
    "packNpmManually": false,
    "packNpmRelationList": [],
    "minifyWXSS": false,
    "disableUseStrict": false,
    "minifyWXML": false,
    "showES6CompileOption": false,
    "useCompilerPlugins": false,
    "ignoreUploadUnusedFiles": false,
    "condition": false,
    "compileWorklet": false,
    "localPlugins": false,
    "swc": false,
    "disableSWC": true
  },
  "compileType": "miniprogram",
  "editorSetting": {
    "tabIndent": "insertSpaces",
    "tabSize": 4
  },
  "srcMiniprogramRoot": "dist/",
  "condition": {},
  "libVersion": "3.9.3",
  "packOptions": {
    "ignore": [],
    "include": []
  },
  "appid": "wx3669dd12a0915f7d",
  "projectname": "bStandardMiniApp",
  "simulatorPluginLibVersion": {}
}
    "compileType": "miniprogram",
    "editorSetting": {
        "tabIndent": "insertSpaces",
        "tabSize": 4
    },
    "srcMiniprogramRoot": "dist/",
    "condition": {},
    "libVersion": "3.9.3",
    "packOptions": {
        "ignore": [],
        "include": []
    },
    "appid": "wxc47d6f255e7d0566",
    "projectname": "bStandardMiniApp",
    "simulatorPluginLibVersion": {}
}
apps/bStandardMiniApp/project.private.config.json
@@ -1,85 +1,85 @@
{
  "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json ä¸­çš„相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
  "projectname": "bStandardMiniApp",
  "setting": {
    "compileHotReLoad": true,
    "bigPackageSizeSupport": true,
    "urlCheck": false,
    "coverView": true,
    "lazyloadPlaceholderEnable": false,
    "preloadBackgroundData": false,
    "autoAudits": false,
    "useApiHook": true,
    "useApiHostProcess": true,
    "showShadowRootInWxmlPanel": true,
    "useStaticServer": false,
    "useLanDebug": false,
    "showES6CompileOption": false,
    "checkInvalidKey": true,
    "ignoreDevUnusedFiles": true,
    "useIsolateContext": true
  },
  "condition": {
    "miniprogram": {
      "list": [
        {
          "name": "灵工详情",
          "pathName": "subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask",
          "query": "enterpriseEmployeeId=304f7e38-b973-478c-88aa-08ddf02e3176&id=ddecb887-8273-449b-6bcd-08de20009bf4&taskInfoId=ec3f301e-fa95-47a1-b8ee-08de1da3c153",
          "launchMode": "default",
          "scene": null
        },
        {
          "name": "待验收-验收详情",
          "pathName": "subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail",
          "query": "id=546401cc-c148-47d0-c647-08de1e75af01&date=2025-11-28&taskInfoId=5a22c18b-0b49-4540-6658-08de1da80d7c",
          "launchMode": "default",
          "scene": null
        },
        {
          "name": "报名列表",
          "pathName": "subpackages/jobApplicationManage/jobApplicationDetail/jobApplicationDetail",
          "query": "id=d74bca5e-a26e-4bb9-6b53-08de257fa022",
          "launchMode": "default",
          "scene": null
        },
        {
          "name": "发布任务",
          "pathName": "subpackages/task/publishTask/publishTask",
          "query": "",
          "launchMode": "default",
          "scene": null
        },
        {
          "name": "已验收-验收详情",
          "pathName": "subpackages/task/taskCheckDetail/taskCheckDetail",
          "query": "id=523366f9-e74d-4cf9-222c-08de1e84dd6a&date=2025-11-08&checkReceiveStatus=30",
          "launchMode": "default",
          "scene": null
        },
        {
          "name": "验收详情",
          "pathName": "subpackages/task/taskCheckDetail/taskCheckDetail",
          "query": "id=523366f9-e74d-4cf9-222c-08de1e84dd6a&date=2025-11-08&checkReceiveStatus=20",
          "launchMode": "default",
          "scene": null
        },
        {
          "name": "人员详情",
          "pathName": "subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail",
          "query": "id=d4ff597f-20e3-41ff-87a4-08de1dbc63e7&date=2025-11-07&taskInfoId=b0e79981-56d5-4730-83e7-08de1d1fb9dd",
          "launchMode": "default",
          "scene": null
        },
        {
          "name": "发薪详情",
          "pathName": "subpackages/payrollManage/payrollManageDetail/payrollManageDetail",
          "query": "id=ed553142-801d-40b4-5582-08de0fa2a04b&operatorToken=627f56a2-d8a2-4606-b69f-36eadf770ecb",
          "launchMode": "default",
          "scene": null
    "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json ä¸­çš„相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
    "projectname": "bStandardMiniApp",
    "setting": {
        "compileHotReLoad": true,
        "bigPackageSizeSupport": true,
        "urlCheck": false,
        "coverView": true,
        "lazyloadPlaceholderEnable": false,
        "preloadBackgroundData": false,
        "autoAudits": false,
        "useApiHook": true,
        "useApiHostProcess": true,
        "showShadowRootInWxmlPanel": true,
        "useStaticServer": false,
        "useLanDebug": false,
        "showES6CompileOption": false,
        "checkInvalidKey": true,
        "ignoreDevUnusedFiles": true,
        "useIsolateContext": true
    },
    "condition": {
        "miniprogram": {
            "list": [
                {
                    "name": "灵工详情",
                    "pathName": "subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask",
                    "query": "enterpriseEmployeeId=304f7e38-b973-478c-88aa-08ddf02e3176&id=ddecb887-8273-449b-6bcd-08de20009bf4&taskInfoId=ec3f301e-fa95-47a1-b8ee-08de1da3c153",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "待验收-验收详情",
                    "pathName": "subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail",
                    "query": "id=546401cc-c148-47d0-c647-08de1e75af01&date=2025-11-28&taskInfoId=5a22c18b-0b49-4540-6658-08de1da80d7c",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "报名列表",
                    "pathName": "subpackages/jobApplicationManage/jobApplicationDetail/jobApplicationDetail",
                    "query": "id=d74bca5e-a26e-4bb9-6b53-08de257fa022",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "发布任务",
                    "pathName": "subpackages/task/publishTask/publishTask",
                    "query": "",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "已验收-验收详情",
                    "pathName": "subpackages/task/taskCheckDetail/taskCheckDetail",
                    "query": "id=523366f9-e74d-4cf9-222c-08de1e84dd6a&date=2025-11-08&checkReceiveStatus=30",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "验收详情",
                    "pathName": "subpackages/task/taskCheckDetail/taskCheckDetail",
                    "query": "id=523366f9-e74d-4cf9-222c-08de1e84dd6a&date=2025-11-08&checkReceiveStatus=20",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "人员详情",
                    "pathName": "subpackages/task/taskHandleCheckDetail/taskHandleCheckDetail",
                    "query": "id=d4ff597f-20e3-41ff-87a4-08de1dbc63e7&date=2025-11-07&taskInfoId=b0e79981-56d5-4730-83e7-08de1d1fb9dd",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "发薪详情",
                    "pathName": "subpackages/payrollManage/payrollManageDetail/payrollManageDetail",
                    "query": "id=ed553142-801d-40b4-5582-08de0fa2a04b&operatorToken=627f56a2-d8a2-4606-b69f-36eadf770ecb",
                    "launchMode": "default",
                    "scene": null
                }
            ]
        }
      ]
    }
  },
  "libVersion": "3.8.12"
}
    },
    "libVersion": "3.8.12"
}
apps/bStandardMiniApp/src/app.config.ts
@@ -1,6 +1,6 @@
export default defineAppConfig({
  entryPagePath: 'pages/home/index',
  pages: ['pages/home/index', 'pages/mine/index', 'pages/workbenches/workbenches'],
  entryPagePath: 'pages/workbenches/workbenches',
  pages: ['pages/mine/index', 'pages/workbenches/workbenches'],
  requiredPrivateInfos: ['getLocation', 'chooseLocation'],
  permission: {
    'scope.userLocation': {
@@ -19,12 +19,12 @@
  },
  tabBar: {
    list: [
      {
        pagePath: 'pages/home/index',
        iconPath: 'assets/tabbar/icon-home.png',
        selectedIconPath: 'assets/tabbar/icon-home-active.png',
        text: '首页',
      },
      // {
      //   pagePath: 'pages/home/index',
      //   iconPath: 'assets/tabbar/icon-home.png',
      //   selectedIconPath: 'assets/tabbar/icon-home-active.png',
      //   text: '首页',
      // },
      {
        pagePath: 'pages/workbenches/workbenches',
        iconPath: 'assets/tabbar/icon-task.png',
@@ -99,6 +99,17 @@
      ],
    },
    {
      root: 'subpackages/appointmentManage',
      pages: [
        'appointmentManage/appointmentManage',
        'appointmentManageDetail/appointmentManageDetail',
      ],
    },
    {
      root: 'subpackages/orderManage',
      pages: ['orderManage/orderManage', 'orderManageDetail/orderManageDetail'],
    },
    {
      root: 'subpackages/jobApplicationManage',
      pages: [
        'jobApplicationManage/jobApplicationManage',
apps/bStandardMiniApp/src/constants/app.ts
@@ -3,7 +3,7 @@
export const AppLocalConfig = {
  userType: EnumUserType.Enterprise,
  clientType: EnumClientType.Wxmp,
  enterpriseType: EnumEnterpriseType.PartyA,
  enterpriseType: EnumEnterpriseType.Supplier,
};
export const APP_ENV = process.env.APP_ENV;
apps/bStandardMiniApp/src/constants/router.ts
@@ -6,11 +6,17 @@
  mineUserPolicy = '/subpackages/login/mineUserPolicy/mineUserPolicy',
  privacyPolicy = '/subpackages/login/privacyPolicy/privacyPolicy',
  registerForm = '/subpackages/login/registerForm/registerForm',
  home = '/pages/home/index',
  // home = '/pages/home/index',
  mine = '/pages/mine/index',
  workbenches = '/pages/workbenches/workbenches',
  editRichContent = '/subpackages/editRichContent/editRichContent',
  appointmentManage = '/subpackages/appointmentManage/appointmentManage/appointmentManage',
  appointmentManageDetail = '/subpackages/appointmentManage/appointmentManageDetail/appointmentManageDetail',
  orderManage = '/subpackages/orderManage/orderManage/orderManage',
  orderManageDetail = '/subpackages/orderManage/orderManageDetail/orderManageDetail',
  flexJobDetail = '/subpackages/flexJob/flexJobDetail/flexJobDetail',
  flexJobDetailFromTask = '/subpackages/flexJob/flexJobDetailFromTask/flexJobDetailFromTask',
apps/bStandardMiniApp/src/constants/tabBar.ts
@@ -5,7 +5,7 @@
};
export const TabBarPageRouterList = [
  TabBarPageRouter.Home,
  // TabBarPageRouter.Home,
  TabBarPageRouter.Workbenches,
  TabBarPageRouter.Mine,
];
apps/bStandardMiniApp/src/custom-tab-bar/index.tsx
@@ -49,7 +49,7 @@
  click: (url: string, index: number) => typeof url === 'string',
};
const whitePageList = [RouterPath.home, RouterPath.mine];
const whitePageList = [RouterPath.workbenches, RouterPath.mine];
export default {
  name: 'CustomTabBar',
@@ -104,7 +104,7 @@
          Message.confirm({ message: '请前往登录' })
            .then(() => {
              Taro.navigateTo({
                url: `${RouterPath.authorization}?redirect=${RouterPath.home}`,
                url: `${RouterPath.authorization}?redirect=${RouterPath.workbenches}`,
              });
            })
            .finally(() => {
@@ -129,26 +129,15 @@
          }}
        >
          <TarBarItem
            text={'首页'}
            icon="../assets/tabbar/icon-home.png"
            activeIcon="../assets/tabbar/icon-home-active.png"
            pagePath={TabBarPageRouter.Home}
            currentPath={_router.path}
            index={0}
            active={system.activeTab === 0}
            className="home"
            onClick={switchTab}
          ></TarBarItem>
          <TarBarItem
            text="工作台"
            icon="../assets/tabbar/icon-task.png"
            activeIcon="../assets/tabbar/icon-task-active.png"
            pagePath={TabBarPageRouter.Workbenches}
            currentPath={_router.path}
            active={system.activeTab === 1}
            active={system.activeTab === 0}
            className="task"
            onClick={switchTab}
            index={1}
            index={0}
          ></TarBarItem>
          <TarBarItem
            text="我的"
apps/bStandardMiniApp/src/pages/workbenches/InnerPage.vue
@@ -1,45 +1,22 @@
<template>
  <ContentView>
    <!-- <div class="workbenches-banner-wrapper">
      <nut-swiper :auto-play="3000">
        <nut-swiper-item v-for="(item, index) in list" :key="index">
          <img :src="item" class="banner-img" draggable="false" />
        </nut-swiper-item>
      </nut-swiper>
    </div> -->
    <Cell :show-title="false" class="workbenches-cell">
      <CellChunk title="任务">
        <div class="workbenches-cell-list">
          <TaskDetailWelfareItem :icon="IconPublishTask" text="发布任务" @click="goPublishTask" />
          <TaskDetailWelfareItem :icon="IconPersonManage" text="用人管理" @click="goPersonManage" />
        </div>
      </CellChunk>
      <CellChunk title="用人">
      <CellChunk title="">
        <div class="workbenches-cell-list">
          <TaskDetailWelfareItem
            :icon="IconFlexjobManage"
            text="灵工管理"
            @click="goPage(RouterPath.flexJobManage)"
          />
          <TaskDetailWelfareItem
            :icon="IconTaskManage"
            text="任务安排"
            @click="goPage(RouterPath.taskManage)"
            text="预约管理"
            @click="goPage(RouterPath.appointmentManage)"
          />
          <TaskDetailWelfareItem
            :icon="IconAcceptManage"
            text="验收管理"
            @click="goPage(RouterPath.taskCheck)"
          />
        </div>
      </CellChunk>
      <CellChunk title="发薪">
        <div class="workbenches-cell-list">
          <TaskDetailWelfareItem
            :icon="IconPayrollManage"
            text="发薪管理"
            @click="goPage(RouterPath.payrollManage)"
            :icon="IconTaskManage"
            text="订单管理"
            @click="goPage(RouterPath.orderManage)"
          />
        </div>
      </CellChunk>
@@ -53,10 +30,7 @@
import { RouterPath } from '@/constants';
import IconAcceptManage from '@/assets/workbenches/icon-accept-manage.png';
import IconFlexjobManage from '@/assets/workbenches/icon-flexjob-manage.png';
import IconPersonManage from '@/assets/workbenches/icon-person-manage.png';
import IconPublishTask from '@/assets/workbenches/icon-publish-task.png';
import IconTaskManage from '@/assets/workbenches/icon-task-manage.png';
import IconPayrollManage from '@/assets/workbenches/icon-payroll.png';
import { useAccessLogin } from '@/hooks';
defineOptions({
apps/bStandardMiniApp/src/pages/workbenches/workbenches.vue
@@ -1,5 +1,5 @@
<template>
  <PageLayoutWithBg class="workbenches-page-wrapper" title="工作台">
  <PageLayoutWithBg class="workbenches-page-wrapper" title="工作台" :needAuth="false">
    <InnerPage />
  </PageLayoutWithBg>
</template>
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManage/InnerPage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
<template>
  <ProTabs
    v-model="queryState.status"
    name="home-tab"
    :showPaneContent="false"
    class="home-tabs"
    isTransparent
    title-gutter="12"
    title-scroll
  >
    <ProTabPane :title="`全部`" :pane-key="0"></ProTabPane>
    <ProTabPane
      :title="`待确认`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitHire"
    ></ProTabPane>
    <ProTabPane
      :title="`待服务`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitSignContract"
    ></ProTabPane>
    <ProTabPane
      :title="`已完成`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.HireRefuse"
    ></ProTabPane>
    <ProTabPane :title="`已取消`" :pane-key="40"></ProTabPane>
  </ProTabs>
  <InfiniteLoading
    scrollViewClassName="common-infinite-scroll-list home-list"
    v-bind="infiniteLoadingProps"
    :key="queryState.status"
  >
    <template #renderItem="{ item }">
      <ReserveServiceCard
        :name="item.name"
        :begin-time="item.beginTime"
        :end-time="item.endTime"
        :billing-method="item.billingMethod"
        :benefits="item.benefits"
        :service-fee="item.serviceFee"
        :settlement-cycle="item.settlementCycle"
        :address-name="item.addressName"
        @click="goDetail(item)"
      >
      </ReserveServiceCard>
    </template>
  </InfiniteLoading>
</template>
<script setup lang="ts">
import { ProTabs, ProTabPane, ReserveServiceCard } from '@12333/components';
import { useUserStore } from '@/stores/modules/user';
import { useInfiniteLoading } from '@12333/hooks';
import { EnumPagedListOrder, GetPersonalApplyTaskInfosQueryStatus } from '@12333/constants';
import * as taskServices from '@12333/services/apiV2/task';
import Taro from '@tarojs/taro';
defineOptions({
  name: 'InnerPage',
});
const queryState = reactive({
  status: 0 as any as GetPersonalApplyTaskInfosQueryStatus,
});
const userStore = useUserStore();
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetTaskInfosQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      },
    };
    return taskServices.getOpenTaskInfos(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['taskServices/getOpenTaskInfos', queryState],
  }
);
function goDetail(item: any) {
  Taro.navigateTo({
    url: `${RouterPath.appointmentManageDetail}?id=${item.id}`,
  });
}
</script>
<style lang="scss">
@import '@/styles/common.scss';
</style>
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManage/appointmentManage.config.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManage/appointmentManage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<template>
  <PageLayoutWithBg class="appointmentManage-page-wrapper" :title="'预约管理'">
    <InnerPage></InnerPage>
  </PageLayoutWithBg>
</template>
<script setup lang="ts">
import InnerPage from './InnerPage.vue';
defineOptions({
  name: 'appointmentManage',
});
</script>
<style lang="scss">
@import '@/styles/common.scss';
</style>
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManageDetail/InnerPage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
<template>
  <!-- <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> -->
  <ContentScrollView hasPaddingTop>
    <MineServiceDetailView />
  </ContentScrollView>
  <PageFooter>
    <PageFooterBtn type="primary" class="business-card-btn" @click="goCancel"
      >取消预约</PageFooterBtn
    >
    <PageFooterBtn type="primary" class="business-card-btn" @click="goConfirm"
      >确认预约</PageFooterBtn
    >
  </PageFooter>
  <!-- </LoadingLayout> -->
</template>
<script setup lang="ts">
import { MineServiceDetailView } from '@12333/components';
import Taro from '@tarojs/taro';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
import { RouterPath } from '@/constants';
defineOptions({
  name: 'InnerPage',
});
const route = Taro.useRouter();
const id = route.params?.id as string;
function goCancel() {}
function goConfirm() {}
</script>
<style lang="scss">
@import '@/styles/common.scss';
</style>
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManageDetail/appointmentManageDetail.config.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/bStandardMiniApp/src/subpackages/appointmentManage/appointmentManageDetail/appointmentManageDetail.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <PageLayout class="appointmentManageDetail-page-wrapper" title="预约详情" has-border>
    <InnerPage />
  </PageLayout>
</template>
<script setup lang="ts">
import InnerPage from './InnerPage.vue';
defineOptions({
  name: 'appointmentManageDetail',
});
</script>
apps/bStandardMiniApp/src/subpackages/login/loginByForm/accountLoginForm.vue
@@ -105,6 +105,7 @@
async function handleLogin() {
  try {
    let code = await Taro.login();
    if (props.policyChecked) {
      const { valid } = await formRef.value.validate();
      if (valid) {
@@ -112,7 +113,7 @@
        await userStore.loginByPassword({
          userName: form.userName,
          password: form.userPassword,
          code: loginRes.value?.code,
          code: code.code,
        });
        handleLoginSuccess();
      }
@@ -120,7 +121,7 @@
      noAccess();
    }
  } catch (error) {
    loginRes.value = await Taro.login();
    // loginRes.value = await Taro.login();
  } finally {
    form.loading = false;
  }
@@ -132,25 +133,24 @@
async function handleLoginSuccess() {
  try {
    if (!Taro.requestSubscribeMessage) {
      await Message.confirm({ message: '你的微信版本过低,不支持订阅消息,是否继续?' });
    }
    const res = await Taro.getSetting({
      withSubscriptions: true,
    });
    let setting: boolean[] = [];
    if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings) {
      setting = subscribeMessageTemplateIdsForB
        .map((id) => res.subscriptionsSetting.itemSettings[id] !== 'accept')
        .filter(Boolean);
    }
    Taro.requestSubscribeMessage({
      tmplIds: subscribeMessageTemplateIdsForB,
      success: function (res) {
        console.log('res: ', res);
      },
    });
    console.log('setting: ', setting);
    // if (!Taro.requestSubscribeMessage) {
    //   await Message.confirm({ message: '你的微信版本过低,不支持订阅消息,是否继续?' });
    // }
    // const res = await Taro.getSetting({
    //   withSubscriptions: true,
    // });
    // let setting: boolean[] = [];
    // if (res.subscriptionsSetting && res.subscriptionsSetting.itemSettings) {
    //   setting = subscribeMessageTemplateIdsForB
    //     .map((id) => res.subscriptionsSetting.itemSettings[id] !== 'accept')
    //     .filter(Boolean);
    // }
    // Taro.requestSubscribeMessage({
    //   tmplIds: subscribeMessageTemplateIdsForB,
    //   success: function (res) {
    //     console.log('res: ', res);
    //   },
    // });
    Message.success('登录成功', {
      onClosed: () => {
        jump();
@@ -187,7 +187,7 @@
      isAccount.value = false;
    }
  } finally {
    loginRes.value = await Taro.login();
    // loginRes.value = await Taro.login();
  }
});
</script>
apps/bStandardMiniApp/src/subpackages/orderManage/orderManage/InnerPage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
<template>
  <ProTabs
    v-model="queryState.status"
    name="home-tab"
    :showPaneContent="false"
    class="home-tabs"
    isTransparent
    title-gutter="12"
    title-scroll
  >
    <ProTabPane :title="`全部`" :pane-key="0"></ProTabPane>
    <ProTabPane
      :title="`待支付`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitHire"
    ></ProTabPane>
    <ProTabPane
      :title="`已支付`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.WaitSignContract"
    ></ProTabPane>
    <ProTabPane
      :title="`已完成`"
      :pane-key="GetPersonalApplyTaskInfosQueryStatus.HireRefuse"
    ></ProTabPane>
  </ProTabs>
  <InfiniteLoading
    scrollViewClassName="common-infinite-scroll-list home-list"
    v-bind="infiniteLoadingProps"
    :key="queryState.status"
  >
    <template #renderItem="{ item }">
      <ReserveServiceCard
        :name="item.name"
        :begin-time="item.beginTime"
        :end-time="item.endTime"
        :billing-method="item.billingMethod"
        :benefits="item.benefits"
        :service-fee="item.serviceFee"
        :settlement-cycle="item.settlementCycle"
        :address-name="item.addressName"
        @click="goOrderDetail(item)"
      >
      </ReserveServiceCard>
    </template>
  </InfiniteLoading>
</template>
<script setup lang="ts">
import { ProTabs, ProTabPane, ReserveServiceCard } from '@12333/components';
import { useUserStore } from '@/stores/modules/user';
import { useInfiniteLoading } from '@12333/hooks';
import { EnumPagedListOrder, GetPersonalApplyTaskInfosQueryStatus } from '@12333/constants';
import * as taskServices from '@12333/services/apiV2/task';
import Taro from '@tarojs/taro';
defineOptions({
  name: 'InnerPage',
});
const queryState = reactive({
  status: 0 as any as GetPersonalApplyTaskInfosQueryStatus,
});
const userStore = useUserStore();
const { infiniteLoadingProps } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetTaskInfosQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
      },
    };
    return taskServices.getOpenTaskInfos(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['taskServices/getOpenTaskInfos', queryState],
  }
);
function goOrderDetail(item: any) {
  Taro.navigateTo({
    url: `${RouterPath.orderManageDetail}?id=${item.id}`,
  });
}
</script>
<style lang="scss">
@import '@/styles/common.scss';
</style>
apps/bStandardMiniApp/src/subpackages/orderManage/orderManage/orderManage.config.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/bStandardMiniApp/src/subpackages/orderManage/orderManage/orderManage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<template>
  <PageLayoutWithBg class="orderManage-page-wrapper" :title="'订单管理'">
    <InnerPage></InnerPage>
  </PageLayoutWithBg>
</template>
<script setup lang="ts">
import InnerPage from './InnerPage.vue';
defineOptions({
  name: 'orderManage',
});
</script>
<style lang="scss">
@import '@/styles/common.scss';
</style>
apps/bStandardMiniApp/src/subpackages/orderManage/orderManageDetail/InnerPage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
<template>
  <!-- <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> -->
  <ContentScrollView hasPaddingTop>
    <MineServiceDetailView />
  </ContentScrollView>
  <PageFooter class="order-settle-bar">
    <div class="order-settle-price-wrapper">
      <div class="order-settle-price-label">支付:</div>
      <nut-price :price="155" size="large" />
    </div>
    <PageFooterBtn type="primary" class="business-card-btn">立即下单</PageFooterBtn>
  </PageFooter>
  <!-- </LoadingLayout> -->
</template>
<script setup lang="ts">
import { MineServiceDetailView } from '@12333/components';
import Taro from '@tarojs/taro';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
import { useCheckReceiveTaskUserSubmit } from '@12333/hooks';
defineOptions({
  name: 'InnerPage',
});
const route = Taro.useRouter();
const id = route.params?.id as string;
</script>
<style lang="scss">
@import '@/styles/common.scss';
.orderManageDetail-page-wrapper {
  .order-settle-bar {
    .order-settle-price-wrapper {
      height: 100%;
      flex: 1;
      min-width: 0;
      display: flex;
      align-items: center;
      margin-left: 28px;
      .order-settle-price-label {
        color: boleGetCssVar('text-color', 'primary');
      }
    }
  }
}
</style>
apps/bStandardMiniApp/src/subpackages/orderManage/orderManageDetail/orderManageDetail.config.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/bStandardMiniApp/src/subpackages/orderManage/orderManageDetail/orderManageDetail.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <PageLayout class="orderManageDetail-page-wrapper" title="订单详情" has-border>
    <InnerPage />
  </PageLayout>
</template>
<script setup lang="ts">
import InnerPage from './InnerPage.vue';
defineOptions({
  name: 'orderManageDetail',
});
</script>
apps/bStandardMiniApp/src/utils/page.ts
@@ -20,6 +20,6 @@
  const systemStore = useSystemStoreWithOut();
  systemStore.setTabIndex(0);
  Taro.switchTab({
    url: '/pages/home/index',
    url: '/pages/workbenches/workbenches',
  });
}
apps/cStandardMiniApp/project.private.config.json
@@ -17,8 +17,7 @@
        "showES6CompileOption": false,
        "checkInvalidKey": true,
        "ignoreDevUnusedFiles": true,
        "useIsolateContext": true,
        "skylineRenderEnable": false
        "useIsolateContext": true
    },
    "condition": {
        "miniprogram": {
@@ -27,11 +26,11 @@
                    "name": "简历",
                    "pathName": "subpackages/curriculum/mineCurriculumVitae/mineCurriculumVitae",
                    "query": "",
                    "scene": null,
                    "launchMode": "default"
                    "launchMode": "default",
                    "scene": null
                }
            ]
        }
    },
    "libVersion": "3.11.2"
    "libVersion": "3.13.0"
}
apps/cStandardMiniApp/src/styles/nut.scss
@@ -127,6 +127,11 @@
  .bole-input-textarea:not(.nut-input--disabled) {
    color: boleGetCssVar('text-color', 'primary') !important;
    height: 100rpx;
    .textarea-placeholder {
      color: boleGetCssVar('text-color', 'placeholder') !important;
      font-size: 26rpx;
    }
  }
  .bole-input-text-placeholder {
apps/housekeepingMiniApp/.eslintrc-auto-import.json
@@ -111,6 +111,8 @@
    "MaybeRef": true,
    "MaybeRefOrGetter": true,
    "NODE_ENV": true,
    "TabBarPageRouterList": true
    "TabBarPageRouterList": true,
    "useaa": true,
    "useEnterpriseAddresses": true
  }
}
apps/housekeepingMiniApp/auto-imports.d.ts
@@ -83,6 +83,7 @@
  const useAuth: typeof import('./src/hooks/user')['useAuth']
  const useCssModule: typeof import('vue')['useCssModule']
  const useCssVars: typeof import('vue')['useCssVars']
  const useEnterpriseAddresses: typeof import('./src/hooks/enterprise')['useEnterpriseAddresses']
  const useGoLogin: typeof import('./src/hooks/user')['useGoLogin']
  const useId: typeof import('vue')['useId']
  const useIsLogin: typeof import('./src/hooks/user')['useIsLogin']
@@ -98,6 +99,7 @@
  const useTemplateRef: typeof import('vue')['useTemplateRef']
  const useUser: typeof import('./src/hooks/user')['useUser']
  const useUserResume: typeof import('./src/hooks/user')['useUserResume']
  const useaa: typeof import('./src/hooks/enterprise')['useaa']
  const watch: typeof import('vue')['watch']
  const watchEffect: typeof import('vue')['watchEffect']
  const watchPostEffect: typeof import('vue')['watchPostEffect']
@@ -199,6 +201,7 @@
    readonly useAuth: UnwrapRef<typeof import('./src/hooks/user')['useAuth']>
    readonly useCssModule: UnwrapRef<typeof import('vue')['useCssModule']>
    readonly useCssVars: UnwrapRef<typeof import('vue')['useCssVars']>
    readonly useEnterpriseAddresses: UnwrapRef<typeof import('./src/hooks/enterprise')['useEnterpriseAddresses']>
    readonly useGoLogin: UnwrapRef<typeof import('./src/hooks/user')['useGoLogin']>
    readonly useId: UnwrapRef<typeof import('vue')['useId']>
    readonly useIsLogin: UnwrapRef<typeof import('./src/hooks/user')['useIsLogin']>
apps/housekeepingMiniApp/ci/private.wx3669dd12a0915f7d.key
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAt7umJG8uX79rUR1PY3p6cUs1Op9iOdC88HomDSZkW12UumEz
PoR4uQgSgd1JgPebHHnzXZYVPujPHV7wRbMlQ4qjdoJW3NjSpVpNfP6lt99BlrZV
CUl4OMBTGuP1xEzqnyHuWSHTwKEHtuD0Ypg4E5yECbRrE1L5MbFD5A5be9OFHcIx
6JJ6Enn7vhCpHP8nHgctRRf0tYjb+h9F9sn5/RTwWf3TJvvliaqq8cmIM3GhV+e8
DfDHh911ZYC5mQmARr/Laj1IIUdGEZPK/AGz/MZx2ipto7FghETwxgXKVfaWIHub
o4HVXjJxjtO12hH8DvLtkpHBFTsidhbAA+3rrQIDAQABAoIBABlEmEvIcpM+aw7j
vghLTs2H71EZnFOhLmrQEa2bSw/5pbugJIEDjOq9fnYXrcUryEw5RUvomRFmyR0b
8mVThttsFKD2ueVzeDy/V4rKJpZMAOQuPTGixgLgCE3ZbfJKNbYe332olkuWmc3/
z/xDPOsNimcfRd6JebXo0BJsGw7DQ4yB242No85GkmFTjaPabOFahqJQz7+P4d41
oq8h9fdskugtkG7OmhXT869ECjwyLHs+XtMVHCxH17wYjnqPJvuQGzLAeGFnUEzA
ZHsgXsRdTBbCRbbLW95wDAmOk4G76wl58DWrgT/CQx49SwuT5xfpouM8aicYmyZf
lepakYECgYEA32ERnryGEN3r9wbEtt3Fek8qFz+muvMaL8ILvXg4PON+N7TH1hbD
e5elnfqwdndFDHD8WlTJvz6Y+ZMyaBpoRi52IB0CLUJbIZbCGVnhsnEvcmCbHHpd
vHmPnVSjpia91h7D7Tl1WYBYn1DKvOymD16aAN8+prCkff2YEZRwY6ECgYEA0pBs
+RmqfoKgAe9zvYwN/4ZsYbFFMtGGZ+C4s7sirbHCSF+qe2Qmx0RNqeNO/j5dIds4
saM6FXRMWdpOsx0o5Qjj/d/b1g2Kh0PWvjrMMMmmRB/Su7qqOVYCFj6qdGMLvLNh
r0cJE+cRRKpan8XUJWMnkK1Sqn9SqoVtCN+rjI0CgYAOpIZLKYCASovVPZRXiGIR
im7v5zQ+vQDScJ3kZaUKGL+FV0xiNEvMJjytBmna2iakkiN4qGYxKyFL+uIrANAl
CZaktEIYRWlD4mYG02WAFPtPPBXu3/aVDELlxU6U7aU0DAA75LBUlZ05lEo16C1a
hJEDzZ6Fvr6Jo738KQbVAQKBgGx2FIvjmpz78CvPChFS+UrsFRvlUj2xC8iqSrnZ
5S0PaYIaNRjGJ+tw1YhzHBd+TD7KS1PFPoAandGS0AMXPB9uCvKUwwppgzfVy+HF
K7TdyhVBRy2II3LRSNXohajZ9AvJYsIElzp3Rb/W+ENghbyUbKbrgK9uUkif3eA6
RoVpAoGBANhHCdaCjtshYptU5RUGDJfQP776IjIsYMDMPfy5D3ezrBmTFXywp5Vj
MpallPlgIY5CLx4NEgKclNJRWaQqD5LllNOKxGw3pxWk5rgHCFF5pEpXmnSKLEUE
V7ugDI6vPviJ8k1CQ5zSfhuEMnp19k0jRUTT7dVHjf5mcFVFlfH6
-----END RSA PRIVATE KEY-----
apps/housekeepingMiniApp/ci/private.wxb9e0baf4f87aa0de.key
ÎļþÒÑɾ³ý
apps/housekeepingMiniApp/ci/upload.js
@@ -27,7 +27,7 @@
  return {
    weapp: {
      appid: config.appid,
      privateKeyPath: `${projectPath}/ci/private.wxb9e0baf4f87aa0de.key`,
      privateKeyPath: `${projectPath}/ci/private.wx3669dd12a0915f7d.key`,
      robot: robot,
      setting: {
        minify: false,
apps/housekeepingMiniApp/project.private.config.json
@@ -23,11 +23,32 @@
        "miniprogram": {
            "list": [
                {
                    "name": "选择地址",
                    "pathName": "subpackages/mine/addressManange/addressManange",
                    "query": "type=select",
                    "scene": null,
                    "launchMode": "default"
                },
                {
                    "name": "预约下单",
                    "pathName": "subpackages/sercice/addStandardOrder/addStandardOrder",
                    "query": "specNumber=1&specId=72ec3beb-90dc-473b-d214-08de429af188&id=53208c5d-a823-40d3-e79e-08de429af17b",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "新增地址",
                    "pathName": "subpackages/mine/editAddress/editAddress",
                    "query": "id=53208c5d-a823-40d3-e79e-08de429af17b",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "服务详情",
                    "pathName": "subpackages/sercice/serciceDetail/serciceDetail",
                    "query": "id=53208c5d-a823-40d3-e79e-08de429af17b",
                    "scene": null,
                    "launchMode": "default"
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "服务确认",
@@ -58,13 +79,6 @@
                    "scene": null
                },
                {
                    "name": "新增地址",
                    "pathName": "subpackages/mine/editAddress/editAddress",
                    "query": "",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "地址管理",
                    "pathName": "subpackages/mine/addressManange/addressManange",
                    "query": "",
@@ -123,5 +137,5 @@
            ]
        }
    },
    "libVersion": "3.11.2"
    "libVersion": "3.12.1"
}
apps/housekeepingMiniApp/src/app.config.ts
@@ -91,7 +91,7 @@
    },
    {
      root: 'subpackages/sercice',
      pages: ['serciceDetail/serciceDetail'],
      pages: ['serciceDetail/serciceDetail', 'addStandardOrder/addStandardOrder'],
    },
    {
      root: 'subpackages/user',
apps/housekeepingMiniApp/src/assets/flexJob/icon-attention-lg-active.png
apps/housekeepingMiniApp/src/assets/flexJob/icon-attention-lg.png
apps/housekeepingMiniApp/src/assets/flexJob/icon-localtion.png
apps/housekeepingMiniApp/src/assets/flexJob/icon-share.png
apps/housekeepingMiniApp/src/components/Card/StandardServiceCard.vue
ÎļþÃû´Ó apps/housekeepingMiniApp/src/pages/home/StandardServiceCard.vue ÐÞ¸Ä
@@ -1,6 +1,8 @@
<template>
  <div class="standard-service-card-wrapper">
    <img :src="setOSSLink(file)" class="standard-service-card-cover" />
    <SquareView>
      <img :src="setOSSLink(file)" class="standard-service-card-cover" />
    </SquareView>
    <div class="standard-service-card-content">
      <div class="standard-service-card-content-title">{{ name }}</div>
      <div class="standard-service-card-content-price-wrapper">
@@ -13,6 +15,7 @@
<script setup lang="ts">
import { setOSSLink } from '@12333/utils';
import { SquareView } from '@12333/components';
defineOptions({
  name: 'StandardServiceCard',
@@ -37,7 +40,7 @@
  border-radius: 12px;
  .standard-service-card-cover {
    height: 240px;
    height: 100%;
    border-radius: 12px;
    object-fit: cover;
    width: 100%;
@@ -62,6 +65,7 @@
        font-weight: 600;
        font-size: 32px;
        color: #ff3949;
        margin-right: 8px;
      }
      .standard-service-card-content-suffix {
apps/housekeepingMiniApp/src/constants/router.ts
@@ -34,6 +34,7 @@
  mineReserveServiceConfirm = '/subpackages/mine/mineReserveServiceConfirm/mineReserveServiceConfirm',
  serciceDetail = '/subpackages/sercice/serciceDetail/serciceDetail',
  addStandardOrder = '/subpackages/sercice/addStandardOrder/addStandardOrder',
  extraPage = '/subpackages/extraPage/extraPage/extraPage',
}
apps/housekeepingMiniApp/src/hooks/authentication.ts
@@ -1,7 +1,5 @@
import * as electronSignServices from '@12333/services/apiV2/electronSign';
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import { getUserCertificationFrontStatusAdapter } from '@12333/utils';
import { UserCertificationFrontStatus } from '@12333/constants';
import { useUser } from './user';
type UseMyCertificationAuditInfoOptions = {
apps/housekeepingMiniApp/src/hooks/enterprise.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
import { BaseData, useInfiniteLoading } from '@12333/hooks';
import Taro from '@tarojs/taro';
import * as enterpriseServices from '@12333/services/apiV2/enterprise';
import { InfiniteData } from '@tanstack/vue-query';
type UseEnterpriseAddressesOptions = {
  rows?: number;
  onSuccess?: (data: InfiniteData<BaseData<API.GetEnterpriseAddressesQueryResultItem>>) => any;
};
export function useEnterpriseAddresses(options: UseEnterpriseAddressesOptions = {}) {
  const { rows = 20, onSuccess } = options;
  const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
    ({ pageParam }) => {
      let params: API.GetEnterpriseAddressesQuery = {
        pageModel: {
          rows: rows,
          page: pageParam,
        },
      };
      return enterpriseServices.getEnterpriseAddresses(params, {
        showLoading: false,
      });
    },
    {
      queryKey: ['enterpriseServices/getEnterpriseAddresses', rows],
      onSuccess(data) {
        onSuccess?.(data);
      },
    }
  );
  return { infiniteLoadingProps, invalidateQueries };
}
apps/housekeepingMiniApp/src/hooks/index.ts
@@ -4,3 +4,4 @@
export * from './login';
export * from './authentication';
export * from './app';
export * from './enterprise';
apps/housekeepingMiniApp/src/hooks/user.ts
@@ -1,15 +1,9 @@
import { useUserStore } from '@/stores/modules/user';
import Taro from '@tarojs/taro';
import { object2query, LocationUtils } from '@12333/utils';
import {
  EnumUserBankCardAccess,
  ParkOrHRStatus,
  UserCertificationFrontStatus,
} from '@12333/constants';
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import { MaybeRef } from 'vue';
import { useRefeshDidShow } from '@12333/hooks/infiniteLoading';
import * as userResumeServices from '@12333/services/apiV2/userResume';
import { useUserResume as useUserResumeHook } from '@12333/hooks';
export function useUser() {
apps/housekeepingMiniApp/src/pages/home/hooks/index.ts
@@ -6,7 +6,7 @@
export function useShowAdvertisements() {
  const { data: advertisements, refetch } = useQuery({
    queryKey: ['enterpriseWalletServices/getEnterpriseWalletAccessSelect'],
    queryKey: ['advertisementServices/getShowAdvertisements'],
    queryFn: () => {
      return advertisementServices.getShowAdvertisements(
        {
@@ -38,5 +38,6 @@
  return {
    positionListChunk,
    positionGrid,
    positionList,
  };
}
apps/housekeepingMiniApp/src/pages/home/index.vue
@@ -1,10 +1,10 @@
<template>
  <PageLayoutWithBg class="index-page-wrapper" :title="''" :need-auth="false">
    <template #left>
  <PageLayoutWithBg class="index-page-wrapper" :title="'首页'" :need-auth="false">
    <!-- <template #left>
      <div class="menu-btn-wrapper menu-logo">
        <img :src="IconLogo" class="logo" />
      </div>
    </template>
    </template> -->
    <InfiniteLoading
      scrollViewClassName="common-infinite-scroll-list home-list"
      commonMode
@@ -25,13 +25,13 @@
            <div class="city-btn-text">{{ locationCity }}</div>
          </div>
        </div>
        <div class="home-banner-wrapper">
          <nut-swiper :auto-play="3000">
        <SquareView class="home-banner-wrapper" :width-power="2">
          <nut-swiper :auto-play="3000" class="home-banner-swiper">
            <nut-swiper-item v-for="(item, index) in advertisements" :key="item.id">
              <img :src="item.file" class="banner-img" draggable="false" />
            </nut-swiper-item>
          </nut-swiper>
        </div>
        </SquareView>
        <!-- <div class="home-recommend-wrapper">
          <div class="home-recommend-item">推荐</div>
          <div class="home-recommend-item">推荐</div>
@@ -44,7 +44,12 @@
            style="height: 160px"
          > -->
        <nut-grid class="home-gird" :column-num="5">
          <nut-grid-item v-for="item in positionGrid" :key="item.value" :text="item.label">
          <nut-grid-item
            v-for="item in positionGrid"
            :key="item.value"
            :text="item.label"
            @click="goService(item)"
          >
            <img :src="setOSSLink(item.data.field2)" class="home-grid-item-icon" />
            <!-- <Dongdong /> -->
          </nut-grid-item>
@@ -81,7 +86,7 @@
import { setLocationCity } from '@/utils';
import _ from 'lodash';
import IconLogo from '@/assets/home/icon-logo.png';
import { TaskCard } from '@12333/components';
import { SquareView } from '@12333/components';
import IconLocaltion from '@/assets/task/icon-localtion.png';
import { useAllAreaList, useInfiniteLoading, useTaskList } from '@12333/hooks';
import { useAccessLogin } from '@/hooks';
@@ -89,7 +94,7 @@
import { setOSSLink, trim } from '@12333/utils';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
import { EnumPagedListOrder, EnumStandardServiceReleaseStatus } from '@12333/constants';
import StandardServiceCard from './StandardServiceCard.vue';
import { useSystemStore } from '@/stores/modules/system';
const { locationCity } = useUser();
@@ -117,12 +122,12 @@
      keywords: queryState.keywords,
    };
    return standardServiceServices.getStandardServices(params, {
    return standardServiceServices.getOpenStandardServices(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['standardServiceServices/getStandardServices', queryState],
    queryKey: ['standardServiceServices/getOpenStandardServices', queryState],
  }
);
@@ -153,6 +158,16 @@
    url: `${RouterPath.serciceDetail}?id=${item.id}`,
  });
}
const switchTab = useSwitchTab();
const systemStore = useSystemStore();
function goService(item: API.SelectOptionStringGetDictionaryDataSelectQueryResultOption) {
  systemStore.setServicePageJobCode(item.value);
  switchTab({
    url: `${RouterPath.service}`,
  });
}
</script>
<style lang="scss">
@@ -200,10 +215,16 @@
  .home-banner-wrapper {
    margin-bottom: 20px;
    .home-banner-swiper {
      width: 100%;
      height: 100%;
    }
    .banner-img {
      width: 100%;
      height: 260px;
      height: 100%;
      object-fit: cover;
      object-position: center top;
    }
  }
apps/housekeepingMiniApp/src/pages/service/3x_categoryData.ts
ÎļþÒÑɾ³ý
apps/housekeepingMiniApp/src/pages/service/InnerPage.vue
@@ -1,32 +1,112 @@
<template>
  <nut-category :category="data.category" @change="change" class="category-page-inner">
  <ProCategory ref="categoryRef" :category="category" @change="change" class="category-page-inner">
    <nut-category-pane :categoryChild="data.categoryChild" @onChange="onChange">
    </nut-category-pane>
  </nut-category>
  </ProCategory>
</template>
<script setup lang="ts">
import Taro from '@tarojs/taro';
import { useCheckReceiveTasks, useTaskList } from '@12333/hooks';
import { EnumTaskCheckReceiveStatus, EnumTaskCheckReceiveMethod } from '@12333/constants';
import dayjs from 'dayjs';
import { categorydata } from './3x_categoryData';
import { useDictionaryDataSelect, useStandardServiceList } from '@12333/hooks';
import { CategoryCode, EnumStandardServiceReleaseStatus, PositionCodeEnum } from '@12333/constants';
import { setOSSLink } from '@12333/utils';
import { ProCategory } from '@12333/components';
import { useSystemStore } from '@/stores/modules/system';
defineOptions({
  name: 'InnerPage',
});
const router = Taro.useRouter();
const systemStore = useSystemStore();
const { servicePageJobCode } = storeToRefs(systemStore);
const categoryRef = ref();
const data = reactive({
  categoryInfo: categorydata.categoryInfo,
  category: categorydata.categoryInfo.category,
  categoryChild: categorydata.categoryChild,
  category: [],
  categoryChild: [],
});
const { dictionaryDataList: positionList, ensureQueryData } = useDictionaryDataSelect({
  categoryCode: CategoryCode.Position,
  field1: PositionCodeEnum.Housekeeping,
});
const { ensureStandardServiceList, standardServiceListForCategoryMap } = useStandardServiceList({
  params: {
    releaseStatus: EnumStandardServiceReleaseStatus.InProcess,
  },
});
onMounted(async () => {
  try {
    await Promise.all([ensureQueryData(), ensureStandardServiceList()]);
    if (positionList.value.length > 0 && categoryRef.value) {
      initCategory();
      // const first = positionList.value[0];
      // data.categoryChild = convertCategoryChild(
      //   first.value,
      //   standardServiceListForCategoryMap.value[first.value]
      // );
    }
  } catch (error) {}
});
function initCategory() {
  const currentIndex = Math.max(
    positionList.value.findIndex((x) => x.value === servicePageJobCode.value),
    0
  );
  categoryRef.value.getChildList(currentIndex);
  systemStore.setServicePageJobCode('');
}
watch(servicePageJobCode, () => {
  if (servicePageJobCode.value) {
    initCategory();
  }
});
function convertCategoryChild(jobCode: string, list: API.GetStandardServicesQueryResultItem[]) {
  const categoryChild = {
    catId: jobCode,
    catName: '',
    catLevel: 2,
    catType: 1,
    childCateList: [],
  };
  if (list?.length > 0) {
    categoryChild.childCateList = list.map((x) => ({
      backImg: setOSSLink(x.file),
      catId: x.id,
      catName: x.name,
      showPic: true,
      showVideo: false,
    }));
  }
  return [categoryChild];
}
const category = computed(() =>
  positionList.value.map((x) => ({
    ...x,
    catName: x.label,
  }))
);
const change = (index: number) => {
  data.categoryChild = [].concat(data.categoryInfo.category[index + 1].children);
  const current = positionList.value[index];
  data.categoryChild = convertCategoryChild(
    current.value,
    standardServiceListForCategoryMap.value[current.value]
  );
};
const onChange = () => {
  console.log('当前分类数据');
const onChange = (ev) => {
  console.log('当前分类数据', ev);
  Taro.navigateTo({
    url: `${RouterPath.serciceDetail}?id=${ev.catId}`,
  });
};
</script>
apps/housekeepingMiniApp/src/pages/service/service.vue
@@ -1,7 +1,7 @@
<template>
  <PageLayoutWithBg class="task-page-wrapper" title="全部分类">
  <PageLayout class="task-page-wrapper" title="全部分类" has-border>
    <InnerPage />
  </PageLayoutWithBg>
  </PageLayout>
</template>
<script setup lang="ts">
apps/housekeepingMiniApp/src/stores/modules/system.ts
@@ -17,6 +17,8 @@
  redirectPath: string;
  isTabSwitch: boolean;
  isFirstEnter: boolean;
  servicePageJobCode: string;
}
export const useSystemStore = defineStore({
@@ -51,6 +53,8 @@
    menuButtonTop: 0,
    isFirstEnter: true,
    servicePageJobCode: '',
  }),
  actions: {
@@ -58,6 +62,10 @@
      this.options = options; // æ”¾ä¸€ä¸‹é¡µé¢ç›¸å…³çš„æ•°æ®ä¾‹å¦‚scene等 é¡µé¢é«˜åº¦ä¹‹ç±»çš„不存!
    },
    setServicePageJobCode(jobCode: string) {
      this.servicePageJobCode = jobCode;
    },
    setInfo(info: Taro.getSystemInfoSync.Result) {
      this.info = info;
      console.log('info: ', info);
apps/housekeepingMiniApp/src/styles/nut.scss
@@ -127,6 +127,11 @@
  .bole-input-textarea:not(.nut-input--disabled) {
    color: boleGetCssVar('text-color', 'primary') !important;
    height: 100rpx;
    .textarea-placeholder {
      color: boleGetCssVar('text-color', 'placeholder') !important;
      font-size: 26rpx;
    }
  }
  .bole-input-text-placeholder {
apps/housekeepingMiniApp/src/subpackages/components/MineServiceDetailView.vue
ÎļþÒÑɾ³ý
apps/housekeepingMiniApp/src/subpackages/login/components/LoginPageLayout/LoginPageLayout.vue
@@ -7,7 +7,7 @@
      <img :src="OssAssets.login.AuthBg" class="authorization-page-auth" />
    </template>
    <div class="authorization-page-title">欢迎使用工易赚</div>
    <div class="authorization-page-title">欢迎使用818家政</div>
    <slot></slot>
  </PageLayout>
apps/housekeepingMiniApp/src/subpackages/mine/addressManange/InnerPage.vue
@@ -1,6 +1,6 @@
<template>
  <InfiniteLoading
    scrollViewClassName="common-infinite-scroll-list home-list"
    scrollViewClassName="common-page-infinite-scroll-list"
    v-bind="infiniteLoadingProps"
  >
    <nut-address-list
@@ -19,7 +19,7 @@
</template>
<script setup lang="ts">
import { useInfiniteLoading, useTaskList } from '@12333/hooks';
import { useInfiniteLoading } from '@12333/hooks';
import Taro from '@tarojs/taro';
import * as enterpriseServices from '@12333/services/apiV2/enterprise';
import { Message } from '@12333/utils';
@@ -28,6 +28,11 @@
  name: 'InnerPage',
});
const route = Taro.useRouter();
const id = route.params?.id ?? '';
const mode = route.params?.mode ?? '';
const isSelectMode = mode === 'select';
const dataOptions = reactive({
  id: 'id',
  addressDetail: 'addressDetail',
@@ -56,23 +61,7 @@
  goAddress(item.id);
};
const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetEnterpriseAddressesQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
      },
    };
    return enterpriseServices.getEnterpriseAddresses(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['enterpriseServices/getEnterpriseAddresses'],
  }
);
const { infiniteLoadingProps, invalidateQueries } = useEnterpriseAddresses();
function goAddress(id?: string) {
  Taro.navigateTo({
apps/housekeepingMiniApp/src/subpackages/mine/editAddress/InnerPage.vue
@@ -113,6 +113,7 @@
      countyCode: data.areaCode,
      latitude: data.latitude,
      longitude: data.longitude,
      address: data.addressName,
    };
    form.addressDetail = data.addressDetail;
    form.isDefault = data.isDefault;
apps/housekeepingMiniApp/src/subpackages/mine/mineCollectTask/InnerPage.vue
@@ -1,10 +1,10 @@
<template>
  <InfiniteLoading
    scrollViewClassName="common-infinite-scroll-list home-list"
    scrollViewClassName="common-page-infinite-scroll-list"
    v-bind="infiniteLoadingProps"
  >
    <div class="mineCollectTask-service-list">
      <TaskCard
      <StandardServiceCard
        v-for="item in infiniteLoadingProps.flattenListData"
        :key="item.id"
        @click="goSerciceDetail(item)"
@@ -16,36 +16,42 @@
</template>
<script setup lang="ts">
import { TaskCard } from '@12333/components';
import * as taskServices from '@12333/services/apiV2/task';
import * as taskUserServices from '@12333/services/apiV2/taskUser';
import { useInfiniteLoading, useTaskList } from '@12333/hooks';
import { useInfiniteLoading } from '@12333/hooks';
import Taro from '@tarojs/taro';
import { EnumPagedListOrder, EnumStandardServiceReleaseStatus } from '@12333/constants';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
defineOptions({
  name: 'InnerPage',
});
const queryState = reactive({
  releaseStatus: EnumStandardServiceReleaseStatus.InProcess,
  isCollected: true,
});
const { infiniteLoadingProps, invalidateQueries } = useInfiniteLoading(
  ({ pageParam }) => {
    let params: API.GetTaskInfosQuery = {
    let params: API.GetStandardServicesQuery = {
      pageModel: {
        rows: 20,
        page: pageParam,
        orderInput: [{ property: 'collectionTime', order: EnumPagedListOrder.Desc }],
      },
      isCollected: true,
      releaseStatus: queryState.releaseStatus,
      isCollected: queryState.isCollected,
    };
    return taskServices.getOpenTaskInfos(params, {
    return standardServiceServices.getOpenStandardServices(params, {
      showLoading: false,
    });
  },
  {
    queryKey: ['taskServices/getOpenTaskInfos'],
    queryKey: ['standardServiceServices/getOpenStandardServices', queryState],
  }
);
function goSerciceDetail(item: any) {
function goSerciceDetail(item: API.GetStandardServicesQueryResultItem) {
  Taro.navigateTo({
    url: `${RouterPath.serciceDetail}?id=${item.id}`,
  });
apps/housekeepingMiniApp/src/subpackages/mine/mineCollectTask/mineCollectTask.vue
@@ -1,7 +1,7 @@
<template>
  <PageLayoutWithBg class="mineCollectTask-page-wrapper" :title="'我收藏的任务'">
  <PageLayout class="mineCollectTask-page-wrapper" :title="'我收藏的任务'">
    <InnerPage></InnerPage>
  </PageLayoutWithBg>
  </PageLayout>
</template>
<script setup lang="ts">
apps/housekeepingMiniApp/src/subpackages/mine/mineOrderDetail/InnerPage.vue
@@ -14,7 +14,7 @@
</template>
<script setup lang="ts">
import MineServiceDetailView from '../../components/MineServiceDetailView.vue';
import { MineServiceDetailView } from '@12333/components';
import Taro from '@tarojs/taro';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
import { useCheckReceiveTaskUserSubmit } from '@12333/hooks';
apps/housekeepingMiniApp/src/subpackages/mine/mineOrderManage/InnerPage.vue
@@ -45,7 +45,7 @@
</template>
<script setup lang="ts">
import { ProTabs, ProTabPane } from '@12333/components';
import { ProTabs, ProTabPane, ReserveServiceCard } from '@12333/components';
import { useUserStore } from '@/stores/modules/user';
import { useInfiniteLoading } from '@12333/hooks';
import { EnumPagedListOrder, GetPersonalApplyTaskInfosQueryStatus } from '@12333/constants';
apps/housekeepingMiniApp/src/subpackages/mine/mineReserveService/InnerPage.vue
@@ -46,7 +46,7 @@
</template>
<script setup lang="ts">
import { ProTabs, ProTabPane } from '@12333/components';
import { ProTabs, ProTabPane, ReserveServiceCard } from '@12333/components';
import { useUserStore } from '@/stores/modules/user';
import { useInfiniteLoading } from '@12333/hooks';
import { EnumPagedListOrder, GetPersonalApplyTaskInfosQueryStatus } from '@12333/constants';
apps/housekeepingMiniApp/src/subpackages/mine/mineReserveServiceDetail/InnerPage.vue
@@ -15,7 +15,7 @@
</template>
<script setup lang="ts">
import MineServiceDetailView from '../../components/MineServiceDetailView.vue';
import { MineServiceDetailView } from '@12333/components';
import Taro from '@tarojs/taro';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
import { RouterPath } from '@/constants';
apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/InnerPage.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,277 @@
<template>
  <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
    <ContentScrollView hasPaddingTop>
      <ServiceDetailAddressCard
        :name="selectedAddress?.name ?? ''"
        :contactPhoneNumber="selectedAddress?.contactPhoneNumber ?? ''"
        :addressDetail="selectedAddress?.addressDetail ?? ''"
        showArrow
        @click="goSelectAddress"
      />
      <ServiceDetailGoodCard
        :name="detail?.name"
        :price="spec?.price"
        :specName="spec?.name"
        :specNumber="specNumber"
        :imgUrl="detail?.files?.[0]"
      />
      <!-- <List>
        <ListItem title="服务时间">
          <template #extra>
            <div class="mine-service-detail-view-list-item">{{ '请选择' }}</div>
          </template>
        </ListItem>
        <ListItem title="服务机构">
          <template #extra>
            <div class="mine-service-detail-view-list-item">{{ '请选择' }}</div>
          </template>
        </ListItem>
      </List> -->
      <nut-form :model-value="form" ref="formRef" :rules="rules" class="addStandardOrder-form">
        <nut-form-item
          label="服务开始时间:"
          class="bole-form-item"
          prop="beginTime"
          label-width="90px"
        >
          <ChooseInputWithDatePicker
            v-model="form.beginTime"
            :minDate="nowDate"
            placeholder="请选择"
            type="datetime"
            format="YYYY-MM-DD HH:mm:ss"
          ></ChooseInputWithDatePicker>
        </nut-form-item>
        <nut-form-item
          label="服务结束时间:"
          class="bole-form-item"
          prop="endTime"
          label-width="90px"
        >
          <ChooseInputWithDatePicker
            v-model="form.endTime"
            :minDate="endMinTime"
            :maxDate="endMaxTime"
            placeholder="请选择"
            type="datetime"
            format="YYYY-MM-DD HH:mm:ss"
          ></ChooseInputWithDatePicker>
        </nut-form-item>
        <nut-form-item
          label="备注:"
          class="bole-form-item alignTop"
          prop="remark"
          label-width="90px"
        >
          <nut-textarea
            v-model="form.remark"
            class="bole-input-textarea"
            rows="4"
            placeholder="请填写备注信息"
          >
          </nut-textarea>
        </nut-form-item>
      </nut-form>
    </ContentScrollView>
    <PageFooter>
      <PageFooterBtn type="primary" class="business-card-btn" @click="goConfirm"
        >立即下单</PageFooterBtn
      >
    </PageFooter>
    <nut-address
      v-model:visible="form.selectAddressVisible"
      v-model:value="form.addressId"
      type="exist"
      :exist-address="existAddress"
      :is-show-custom-address="false"
      @selected="selected"
      exist-address-title="选择地址"
    ></nut-address>
  </LoadingLayout>
</template>
<script setup lang="ts">
import {
  ServiceDetailAddressCard,
  ServiceDetailGoodCard,
  List,
  ListItem,
  ChooseInputWithDatePicker,
} from '@12333/components';
import Taro from '@tarojs/taro';
import { RouterPath } from '@/constants';
import { useStandardServiceDetail } from '@12333/hooks';
import * as standardOrderServices from '@12333/services/apiV2/standardOrder';
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
import dayjs from 'dayjs';
defineOptions({
  name: 'InnerPage',
});
const route = Taro.useRouter();
const id = route.params?.id ?? '';
const specId = route.params?.specId ?? '';
const specNumber = Number(route.params?.specNumber);
const form = reactive({
  addressId: '',
  selectAddressVisible: false,
  beginTime: '',
  endTime: '',
  supplierEnterpriseId: '',
  enterpriseEmployeeIds: [] as string[],
  remark: '',
});
const nowDate = dayjs().toDate();
const endMinTime = computed(() => {
  if (form.beginTime) {
    return dayjs(form.beginTime).add(1, 'minute').toDate();
  } else {
    return dayjs().toDate();
  }
});
const endMaxTime = computed(() => {
  if (form.beginTime) {
    return dayjs(dayjs(form.beginTime).format('YYYY-MM-DD 23:59:59')).toDate();
  } else {
    return undefined;
  }
});
const rules = reactive<FormRules>({
  beginTime: [{ required: true, message: '请选择服务开始时间' }],
  endTime: [{ required: true, message: '请选择服务结束时间' }],
});
const { isLoading, isError, detail, refetch } = useStandardServiceDetail({
  id,
});
const spec = computed(() => {
  if (detail.value.specs?.length > 0) {
    return detail.value.specs.find((x) => x.id === specId);
  }
  return null;
});
const { infiniteLoadingProps } = useEnterpriseAddresses({
  rows: 100,
  onSuccess(res) {
    const data = res.pages[0].data;
    const address = data.find((item) => item.isDefault);
    if (address) {
      form.addressId = address.id;
    } else {
      form.addressId = data[0].id;
    }
  },
});
const existAddress = computed(() => {
  return infiniteLoadingProps.value.flattenListData.map((x) => ({
    id: x.id,
    addressDetail: x.addressDetail,
    cityName: '',
    countyName: '',
    provinceName: '',
    selectedAddress: x.id === form.addressId,
    townName: '',
    name: x.name,
    phone: x.contactPhoneNumber,
  }));
});
const selectedAddress = computed(() => {
  const address = infiniteLoadingProps.value.flattenListData.find(
    (item) => item.id === form.addressId
  );
  return address || infiniteLoadingProps.value.flattenListData[0];
});
function goSelectAddress() {
  // Taro.navigateTo({
  //   url: `${RouterPath.addressManange}?mode=select`,
  // });
  form.selectAddressVisible = true;
}
const selected = (prevExistAdd, nowExistAdd, arr) => {
  form.addressId = nowExistAdd.id;
};
const formRef = ref<any>(null);
function goConfirm() {
  if (!formRef.value) return;
  formRef.value.validate().then(({ valid, errors }: any) => {
    if (valid) {
      // addStandardOrder();
    }
  });
}
async function addStandardOrder() {
  try {
    let params: API.AddStandardOrderCommand = {
      serviceId: detail.value.id,
      serviceName: detail.value.name,
      serviceCode: detail.value.code,
      specId: spec.value.id,
      specName: spec.value.name,
      specPrice: spec.value.price ?? 0,
      specNumber: specNumber,
      addressId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
      name: detail.value.name,
      contactPhoneNumber: 'string',
      provinceCode: 'string',
      provinceContent: 'string',
      cityCode: 'string',
      cityContent: 'string',
      areaCode: 'string',
      areaContent: 'string',
      addressName: 'string',
      addressDetail: 'string',
      longitude: 0,
      latitude: 0,
      beginTime: '2025-12-24T08:25:08.372Z',
      endTime: '2025-12-24T08:25:08.372Z',
      supplierEnterpriseId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
      enterpriseEmployeeIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
      remark: 'string',
      payAccess: 1,
    };
    let res = await standardOrderServices.addStandardOrder(params);
  } catch (error) {}
}
async function pay() {
  try {
    let params: API.PayStandardOrderCommand = {
      id: '9e919af2-3d33-4eac-f6dc-08de429676b3',
    };
    let res = await standardOrderServices.payStandardOrder(params);
    if (res) {
      Taro.requestPayment({
        timeStamp: res.timestamp,
        nonceStr: res.nonceStr,
        package: res.package,
        signType: res.signType as any,
        paySign: res.paySign,
      });
    }
  } catch (error) {}
}
</script>
<style lang="scss">
@import '@/styles/common.scss';
.addStandardOrder-page-wrapper {
  .addStandardOrder-form {
    .nut-cell-group__wrap {
      box-shadow: none;
    }
  }
}
</style>
apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.config.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/housekeepingMiniApp/src/subpackages/sercice/addStandardOrder/addStandardOrder.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
<template>
  <PageLayout class="addStandardOrder-page-wrapper" title="预约下单" has-border>
    <InnerPage />
  </PageLayout>
</template>
<script setup lang="ts">
import InnerPage from './InnerPage.vue';
defineOptions({
  name: 'addStandardOrder',
});
</script>
apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.config.ts
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/housekeepingMiniApp/src/subpackages/sercice/serciceDetail/serciceDetail.vue
@@ -1,23 +1,67 @@
<template>
  <PageLayoutWithBg class="mineHire-page-wrapper" :title="'服务名'" :need-auth="false">
  <PageLayout class="serciceDetail-page-wrapper" :title="detail?.name ?? ''" :need-auth="false">
    <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch">
      <ContentScrollView style="background-color: transparent"> serciceDetail </ContentScrollView>
      <PageFooter>
        <!-- <PageFooterAction
            :icon="IconShare"
            text="分享"
            :isFlex="false"
            openType="share"
          ></PageFooterAction>
          <PageFooterAction
            :icon="userResumeInfo.isCollected ? IconAttentionActive : IconAttention"
            text="收藏"
            :isFlex="false"
            @click="handleAttention"
          ></PageFooterAction> -->
        <PageFooterBtn type="primary" @click="skuState.visible = true">预约下单</PageFooterBtn>
        <PageFooterBtn type="primary" @click="pay">预约下单</PageFooterBtn>
      </PageFooter>
      <InfiniteLoading
        commonMode
        :refetch="refetch"
        :isLoading="isLoading"
        :isError="isError"
        :showMoreText="false"
        scrollViewClassName="common-infinite-scroll-list-no-padding"
      >
        <div class="serciceDetail-top-view">
          <SquareView>
            <nut-swiper
              :auto-play="3000"
              v-if="detail?.files?.length > 0"
              class="serciceDetail-swiper"
            >
              <nut-swiper-item
                v-for="(item, index) in detail.files"
                :key="item"
                class="serciceDetail-swiper-item"
              >
                <img
                  :src="setOSSLink(item)"
                  class="serciceDetail-swiper-item-img"
                  draggable="false"
                />
              </nut-swiper-item>
            </nut-swiper>
          </SquareView>
          <div class="serciceDetail-top-view-title-wrapper">
            <div class="serciceDetail-price-wrapper">
              <div class="serciceDetail-price">{{ toThousand(minPrice) }}</div>
              <div class="serciceDetail-price-unit">元起</div>
            </div>
            <div class="serciceDetail-top-view-title">{{ detail?.name ?? '' }}</div>
          </div>
        </div>
        <List class="serciceDetail-content-list">
          <ListItem title="规格" @click="openSkuDialog()">
            <template #extra>
              <div>共{{ detail.specs?.length }}ç±»</div>
            </template>
          </ListItem>
        </List>
        <ProTabs
          v-model="tab"
          name="serciceDetail-content-tab"
          class="serciceDetail-content-tabs"
          flexTitle
        >
          <ProTabPane :title="`服务详情`" pane-key="1">
            <RichEditorContent :content="detail?.description ?? ''"></RichEditorContent>
          </ProTabPane>
          <ProTabPane :title="`客户评价`" pane-key="2">
            <NoData />
          </ProTabPane>
          <ProTabPane :title="`相关推荐`" pane-key="3">
            <NoData />
          </ProTabPane>
        </ProTabs>
      </InfiniteLoading>
      <Sku
        v-model:visible="skuState.visible"
        :sku="skuState.sku"
@@ -25,16 +69,46 @@
        @clickBtnOperate="clickBtnOperate"
      >
      </Sku>
      <PageFooter>
        <PageFooterAction
          :icon="detail.isCollection ? IconAttentionActive : IconAttention"
          text="收藏"
          :isFlex="false"
          @click="handleAttention"
        ></PageFooterAction>
        <PageFooterAction
          :icon="IconShare"
          text="客服"
          :isFlex="false"
          :open-type="'contact'"
        ></PageFooterAction>
        <PageFooterBtn type="primary" @click="openSkuDialog()">预约下单</PageFooterBtn>
      </PageFooter>
    </LoadingLayout>
  </PageLayoutWithBg>
  </PageLayout>
</template>
<script setup lang="ts">
import { useStandardServiceDetail } from '@12333/hooks';
import Taro from '@tarojs/taro';
import * as standardOrderServices from '@12333/services/apiV2/standardOrder';
import { toThousand, setOSSLink } from '@12333/utils';
import { Sku, Goods, SkuItem } from '@12333/components';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
import { toThousand, setOSSLink, Message } from '@12333/utils';
import {
  Sku,
  Goods,
  SkuItem,
  SkuUtils,
  List,
  ListItem,
  ProTabs,
  ProTabPane,
  SquareView,
} from '@12333/components';
import { useAccessLogin } from '@/hooks';
import IconShare from '@/assets/flexJob/icon-share.png';
import IconAttention from '@/assets/flexJob/icon-attention-lg.png';
import IconAttentionActive from '@/assets/flexJob/icon-attention-lg-active.png';
defineOptions({
  name: 'serciceDetail',
@@ -43,23 +117,26 @@
const router = Taro.useRouter();
const id = router.params?.id ?? '';
const { isLoading, isError, detail, refetch } = useStandardServiceDetail({
const tab = ref('1');
const { isLoading, isError, detail, refetch, minPrice } = useStandardServiceDetail({
  id,
  onSuccess(res) {
    skuState.sku = [
      {
        id: '1',
        id: SkuUtils.DefaultSkuSpecId,
        name: '规格',
        list: res.specs.map((item, index) => ({
          id: item.id,
          name: item.name,
          price: item.price,
          active: index === 0,
          disable: false,
        })),
      },
    ];
    skuState.goods = {
      skuId: '1',
      skuId: SkuUtils.DefaultSkuSpecId,
      price: toThousand(res.specs[0].price),
      imagePath: setOSSLink(res.files[0]),
      name: res.name,
@@ -74,45 +151,30 @@
});
// åº•部操作按钮触发
const clickBtnOperate = (op) => {
  console.log('点击了操作按钮', op);
const clickBtnOperate = (op: { type: string; value: number }) => {
  goAddStandardOrder(op.value);
};
async function addStandardOrder() {
  try {
    let params: API.AddStandardOrderCommand = {
      serviceId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
      serviceName: 'string',
      specId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
      specName: 'string',
      specPrice: 0,
      specNumber: 0,
      addressId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
      beginTime: '2025-12-24T06:44:24.840Z',
      endTime: '2025-12-24T06:44:24.840Z',
      supplierEnterpriseId: '3fa85f64-5717-4562-b3fc-2c963f66afa6',
      enterpriseEmployeeIds: ['3fa85f64-5717-4562-b3fc-2c963f66afa6'],
      remark: 'string',
      payAccess: 1,
    };
    let res = await standardOrderServices.addStandardOrder(params);
  } catch (error) {}
}
const openSkuDialog = () => {
  skuState.visible = true;
};
async function pay() {
const goAddStandardOrder = useAccessLogin((specNumber: number) => {
  const spec = SkuUtils.getCurrentActiveSpec(skuState.sku);
  Taro.navigateTo({
    url: `${RouterPath.addStandardOrder}?specNumber=${specNumber}&specId=${spec.id}&id=${id}`,
  });
});
async function handleAttention() {
  try {
    let params: API.PayStandardOrderCommand = {
      id: '9e919af2-3d33-4eac-f6dc-08de429676b3',
    let params: API.CollectionStandardServiceCommand = {
      ids: [id],
      isCollect: !detail.value.isCollection,
    };
    let res = await standardOrderServices.payStandardOrder(params);
    let res = await standardServiceServices.collectionStandardService(params);
    if (res) {
      Taro.requestPayment({
        timeStamp: res.timestamp,
        nonceStr: res.nonceStr,
        package: res.package,
        signType: res.signType as any,
        paySign: res.paySign,
      });
      refetch({ type: 'inactive' });
    }
  } catch (error) {}
}
@@ -120,4 +182,60 @@
<style lang="scss">
@import '@/styles/common.scss';
.serciceDetail-page-wrapper {
  .serciceDetail-swiper {
    width: 100%;
    height: 100%;
    .serciceDetail-swiper-item-img {
      width: 100%;
      height: 100%;
      object-fit: cover;
      /* å¯é€‰ï¼šè°ƒæ•´å›¾ç‰‡è£å‰ªçš„对齐方式(默认居中) */
      object-position: center center;
    }
  }
  .serciceDetail-top-view {
    margin-bottom: 20px;
    background-color: #fff;
    .serciceDetail-top-view-title-wrapper {
      padding: 24px boleGetCssVar('size', 'body-padding-h') 32px;
      .serciceDetail-price-wrapper {
        display: flex;
        align-items: flex-end;
        margin-bottom: 24px;
        .serciceDetail-price {
          font-weight: 600;
          font-size: 48px;
          color: #ff6414;
          line-height: 52px;
          margin-right: 8px;
        }
        .serciceDetail-price-unit {
          font-weight: 400;
          font-size: 28px;
          color: #ff6414;
          line-height: 40px;
        }
      }
      .serciceDetail-top-view-title {
        font-weight: 500;
        font-size: 32px;
        color: boleGetCssVar('text-color', 'primary');
        line-height: 44px;
      }
    }
  }
  .serciceDetail-content-list {
    margin-bottom: 20px;
  }
}
</style>
package.json
@@ -27,6 +27,8 @@
    "CClient:staging:build": "pnpm run -C apps/cMiniApp build:weapp:staging:upload",
    "UnderTakeClient:build": "pnpm run -C apps/underTakeMiniApp build:weapp:upload",
    "UnderTakeClient:staging:build": "pnpm run -C apps/underTakeMiniApp build:weapp:staging:upload",
    "Housekeeping:build": "pnpm run -C apps/housekeepingMiniApp build:weapp:upload",
    "Housekeeping:staging:build": "pnpm run -C apps/housekeepingMiniApp build:weapp:staging:upload",
    "build:all": "pnpm run -r --parallel build:weapp:upload"
  },
  "browserslist": [
packages/components/src/Card/MineServiceDetailView.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
<template>
  <div class="mine-service-detail-view-wrapper">
    <ServiceDetailAddressCard
      :name="contactName"
      :contactPhoneNumber="contactPhoneNumber"
      :addressDetail="addressDetail"
    />
    <ServiceDetailGoodCard
      :name="serviceName"
      :price="price"
      :specName="specName"
      :specNumber="specNumber"
      :imgUrl="imgUrl"
    />
    <List>
      <ListItem title="订单状态" :showArrow="false">
        <template #extra>
          <div class="mine-service-detail-view-list-item">{{ '订单状态' }}</div>
        </template>
      </ListItem>
      <ListItem title="服务时间" :showArrow="false">
        <template #extra>
          <div class="mine-service-detail-view-list-item">
            {{ '2025-12-12 12:00-14:00' }}
          </div>
        </template>
      </ListItem>
      <ListItem title="服务机构" :showArrow="false">
        <template #extra>
          <div class="mine-service-detail-view-list-item">{{ 'xxxxx公司' }}</div>
        </template>
      </ListItem>
      <ListItem title="备注" :showArrow="false">
        <template #extra>
          <div class="mine-service-detail-view-list-item">{{ '我是备注信息' }}</div>
        </template>
      </ListItem>
    </List>
  </div>
</template>
<script setup lang="ts">
import List from '../List/List.vue';
import ListItem from '../List/ListItem.vue';
import ServiceDetailAddressCard from './ServiceDetailAddressCard.vue';
import ServiceDetailGoodCard from './ServiceDetailGoodCard.vue';
defineOptions({
  name: 'MineServiceDetailView',
});
type Props = {
  contactName?: string;
  /** è”系电话 */
  contactPhoneNumber?: string;
  /** çœå¸‚区+详细地址+门牌号 */
  addressDetail?: string;
  serviceName?: string;
  price?: number;
  specName?: string;
  specNumber?: number;
  imgUrl?: string;
};
const props = withDefaults(defineProps<Props>(), {});
</script>
<style lang="scss">
@import '@/styles/common.scss';
.mine-service-detail-view-wrapper {
  .mine-service-detail-card {
    padding: 24px 32px;
    margin-bottom: 24px;
    background-color: #fff;
    border-radius: 12px;
  }
  .mine-service-detail-view-list-item {
    font-weight: 400;
    font-size: 28px;
    color: boleGetCssVar('text-color', 'secondary');
    line-height: 40px;
  }
}
</style>
packages/components/src/Card/ReserveServiceCard.vue
ÎļþÃû´Ó apps/housekeepingMiniApp/src/components/Card/ReserveServiceCard.vue ÐÞ¸Ä
@@ -37,14 +37,11 @@
  EnumTaskSettlementStatus,
  EnumTaskStatus,
  EnumUserGender,
  EnumBillingMethodText,
  EnumUserGenderText,
  EnumSettlementCycleText,
  BillingMethodEnumUnit,
  EnumTaskUserHireStatus,
} from '@12333/constants';
import dayjs from 'dayjs';
import { TaskUtils, toThousand } from '@12333/utils';
import { toThousand } from '@12333/utils';
import { TaskPrice } from '@12333/components';
defineOptions({
packages/components/src/Card/ServiceDetailAddressCard.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
<template>
  <div class="mine-service-detail-view-address">
    <div class="mine-service-detail-view-address-inner">
      <div class="mine-service-detail-view-title-wrapper">
        <div class="mine-service-detail-view-title">服务地址</div>
      </div>
      <div class="mine-service-detail-view-item">{{ addressDetail }}</div>
      <div class="mine-service-detail-view-item">{{ name }} {{ contactPhoneNumber }}</div>
    </div>
    <img v-if="showArrow" :src="IconArrow" class="mine-service-detail-view-arrow" />
  </div>
</template>
<script setup lang="ts">
import IconArrow from '@/assets/setting/icon-arrow.png';
defineOptions({
  name: 'ServiceDetailAddressCard',
});
type Props = {
  name?: string;
  /** è”系电话 */
  contactPhoneNumber?: string;
  /** çœå¸‚区+详细地址+门牌号 */
  addressDetail?: string;
  showArrow?: boolean;
};
const props = withDefaults(defineProps<Props>(), {
  showArrow: false,
});
</script>
<style lang="scss">
@import '@/styles/common.scss';
.mine-service-detail-view-address {
  padding: 24px 32px;
  margin-bottom: 24px;
  background-color: #fff;
  border-radius: 12px;
  display: flex;
  align-items: center;
  .mine-service-detail-view-address-inner {
    flex: 1;
    min-width: 0;
  }
  .mine-service-detail-view-title-wrapper {
    display: flex;
    align-items: center;
    margin-bottom: 14px;
    .mine-service-detail-view-title {
      flex: 1;
      min-width: 0;
      @include ellipsis;
      font-size: 30px;
      color: boleGetCssVar('text-color', 'primary');
      line-height: 42px;
    }
  }
  .mine-service-detail-view-item {
    font-weight: 400;
    @include ellipsis;
    font-size: 24px;
    color: boleGetCssVar('text-color', 'primary');
    line-height: 36px;
    & + .mine-service-detail-view-item {
      margin-top: 14px;
    }
  }
  .mine-service-detail-view-arrow {
    width: 32px;
    height: 32px;
    margin-left: 12px;
  }
}
</style>
packages/components/src/Card/ServiceDetailGoodCard.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
<template>
  <div class="service-detail-good-card">
    <nut-card
      :img-url="setOSSLink(imgUrl)"
      :title="name ?? ''"
      :price="toThousand(price ?? 0)"
      class="service-good-card"
    >
      <template #prolist>
        <div class="card-tag-list">
          <span class="tag">{{ specName }}</span>
        </div>
      </template>
      <template #origin>
        <div></div>
      </template>
      <template #footer>
        <div class="card-footer">x{{ specNumber }}</div>
      </template>
    </nut-card>
  </div>
</template>
<script setup lang="ts">
import { toThousand, setOSSLink } from '@12333/utils';
defineOptions({
  name: 'ServiceDetailGoodCard',
});
type Props = {
  name?: string;
  price?: number;
  specName?: string;
  specNumber?: number;
  imgUrl?: string;
};
const props = withDefaults(defineProps<Props>(), {});
</script>
<style lang="scss">
@import '@/styles/common.scss';
.service-detail-good-card {
  padding: 24px 32px;
  margin-bottom: 24px;
  background-color: #fff;
  border-radius: 12px;
  .card-tag-list {
    margin: 6px 0 2px;
    height: 30px;
    overflow: hidden;
    display: flex;
    .tag {
      padding: 0 10px;
      border-radius: 2px;
      font-size: 20px;
      height: 30px;
      line-height: 30px;
      color: #999;
      background-color: #f2f2f7;
      margin-right: 10px;
    }
  }
  .nut-card__right__shop {
    /* flex: 1;
      min-height: 0; */
  }
  .card-footer {
    /* justify-content: flex-end; */
    color: boleGetCssVar('text-color', 'primary');
  }
}
</style>
packages/components/src/Category/Category.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
<template>
  <div class="nut-category">
    <div class="nut-category__cateList">
      <div v-if="type == 'classify' || type == 'text'">
        <div v-for="(item, index) in category" :key="index" class="nut-category__cateListLeft">
          <div
            :class="[
              checkIndex == index
                ? 'nut-category__cateListItemChecked'
                : 'nut-category__cateListItem',
            ]"
            @click="getChildList(index)"
          >
            {{ item.catName }}
          </div>
        </div>
      </div>
      <slot></slot>
    </div>
  </div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
defineOptions({
  name: 'ProCategory',
});
type CategoryType = {
  catName?: string;
  [key: string]: any;
};
type Props = {
  type?: 'classify' | 'text' | 'custom';
  category?: CategoryType[];
};
const props = withDefaults(defineProps<Props>(), {
  type: 'classify',
  category: () => [],
});
const emit = defineEmits<{
  (e: 'change', index: number): void;
}>();
const checkIndex = ref(0);
const categoryLeft = ref(false); //是否显示slot
const getChildList = (index: number) => {
  checkIndex.value = index;
  emit('change', index);
};
defineExpose({ getChildList });
</script>
packages/components/src/Chunk/SquareView.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
<template>
  <div class="square-view" :style="{ paddingTop: pTopRate }">
    <div class="square-view-inner">
      <slot></slot>
    </div>
  </div>
</template>
<script setup lang="ts">
import { computed } from 'vue';
defineOptions({
  name: 'SquareView',
});
type Props = {
  widthPower?: number;
  heightPower?: number;
};
const props = withDefaults(defineProps<Props>(), {
  widthPower: 1,
  heightPower: 1,
});
const pTopRate = computed(() => {
  return `${(props.heightPower / props.widthPower) * 100}%`;
});
</script>
<style lang="scss">
@import '@/styles/common.scss';
.square-view {
  position: relative;
  .square-view-inner {
    position: absolute;
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;
  }
}
</style>
packages/components/src/Input/ChooseInputWithDatePicker.vue
@@ -53,7 +53,15 @@
                  type: props.type,
                  maxDate: props.maxDate,
                  onConfirm: ({ selectedValue }) => {
                    emit('update:modelValue', dayjs(selectedValue.join('-')).format(props.format));
                    let _selectedVale = '';
                    if (selectedValue.length > 3) {
                      _selectedVale = `${selectedValue.slice(0, 3).join('-')} ${selectedValue
                        .slice(3)
                        .join(':')}`;
                    } else {
                      _selectedVale = selectedValue.join('-');
                    }
                    emit('update:modelValue', dayjs(_selectedVale).format(props.format));
                    onClose();
                  },
                  onChange: () => {
packages/components/src/Sku/Sku.vue
@@ -9,15 +9,20 @@
    <template #sku-header-price>
      <div class="pro-sku-header">
        <div class="pro-sku-header-title">{{ goods.name }}</div>
        <nut-price :price="goods.price" />
        <div class="pro-sku-header-spec">{{ currentSpecName }}</div>
        <nut-price :price="goods.price" size="large" />
      </div>
    </template>
    <template #sku-header-extra>
      <div></div>
    </template>
  </nut-sku>
</template>
<script setup lang="ts">
import { toThousand } from '@12333/utils';
import { Goods, SkuItem } from './sku';
import { Goods, SkuItem, SkuUtils } from './sku';
import { computed } from 'vue';
defineOptions({
  name: 'Sku',
@@ -34,6 +39,7 @@
const selectSku = (ss) => {
  const { sku, skuIndex, parentSku, parentIndex } = ss;
  console.log('sku: ', sku);
  if (sku.disable) return false;
  props.sku[parentIndex].list.forEach((s) => {
    s.active = s.id == sku.id;
@@ -41,9 +47,17 @@
  goods.value = {
    ...goods.value,
    skuId: sku.id,
    price: toThousand(sku.price),
    price: sku.price,
  };
};
const currentSpecName = computed(() => {
  const spec = SkuUtils.getCurrentActiveSpec(props.sku);
  if (spec) {
    return spec.name ?? '';
  }
  return '';
});
</script>
<style lang="scss">
@@ -53,6 +67,23 @@
  .pro-sku-header {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    .pro-sku-header-title {
      color: boleGetCssVar('text-color', 'primary');
    }
    .pro-sku-header-spec {
      color: boleGetCssVar('text-color', 'secondary');
      font-size: 26px;
    }
  }
  .nut-sku-content {
    width: 100%;
    box-sizing: border-box;
  }
}
</style>
packages/components/src/Sku/sku.ts
@@ -6,6 +6,7 @@
    disable: boolean;
    id: string;
    name: string;
    price: number;
  }[];
};
@@ -15,3 +16,25 @@
  skuId: string;
  name: string;
};
export class SkuUtils {
  static DefaultSkuSpecId = 'spec';
  static getCurrentSku(skuList: SkuItem[], goods: Goods) {
    const sku = skuList.find((item) => item.id === goods.skuId);
    return sku;
  }
  static getCurrentSpecSkuItem(skuList: SkuItem[]) {
    const sku = skuList.find((item) => item.id === this.DefaultSkuSpecId);
    return sku;
  }
  static getCurrentActiveSpec(skuList: SkuItem[]) {
    const sku = this.getCurrentSpecSkuItem(skuList);
    if (sku) {
      return sku.list.find((item) => item.active);
    }
    return null;
  }
}
packages/components/src/index.ts
@@ -34,9 +34,11 @@
export { default as TaskPrice } from './Card/TaskPrice.vue';
export { default as TaskDetailWelfareItem } from './Card/TaskDetailWelfareItem.vue';
export { default as TaskCheckPersonalView } from './Card/TaskCheckPersonalView.vue';
export { default as MineServiceDetailView } from './Card/MineServiceDetailView.vue';
export { default as TaskCheckHistoryCard } from './Card/TaskCheckHistoryCard.vue';
export { default as FlexJobTopView } from './Card/FlexJobTopView.vue';
export { default as PayrollManageDetailCard } from './Card/PayrollManageDetailCard.vue';
export { default as ReserveServiceCard } from './Card/ReserveServiceCard.vue';
export { default as QueryMenuView } from './Menu/QueryMenuView.vue';
export { default as QueryMenuItem } from './Menu/QueryMenuItem.vue';
export { default as ProRadio } from './Form/ProRadio.vue';
@@ -53,3 +55,7 @@
export { default as ChunkTitle } from './Chunk/ChunkTitle.vue';
export { default as Sku } from './Sku/Sku.vue';
export * from './Sku/sku';
export { default as SquareView } from './Chunk/SquareView.vue';
export { default as ProCategory } from './Category/Category.vue';
export { default as ServiceDetailAddressCard } from './Card/ServiceDetailAddressCard.vue';
export { default as ServiceDetailGoodCard } from './Card/ServiceDetailGoodCard.vue';
packages/constants/apiEnum.ts
@@ -303,6 +303,16 @@
  Pass = 30,
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•分页列表-限制场景 */
export enum EnumGetStandardOrdersQueryScene {
  /**预约订单 */
  Appointment = 10,
  /**支付订单 */
  Pay = 20,
  /**结算订单 */
  Settlement = 30,
}
/** æŠ•保供应商账号 */
export enum EnumInsuranceSupplierAccess {
  /**人资园 */
@@ -597,6 +607,16 @@
  Cancelled = 30,
}
/** æ ‡å‡†è®¢å•退款状态 */
export enum EnumStandardOrderRefundStatus {
  /**待退款 */
  Wait = 10,
  /**已退款 */
  Completed = 20,
  /**退款失败 */
  Fail = 30,
}
/** æ ‡å‡†è®¢å•结算状态 */
export enum EnumStandardOrderSettlementStatus {
  /**待结算 */
@@ -825,6 +845,8 @@
export enum EnumUserWalletTransactionType {
  /**支付 */
  Payment = 1,
  /**退款 */
  Refund = 2,
  /**收入 */
  Income = 10,
  /**提现 */
packages/hooks/dic.ts
@@ -112,13 +112,13 @@
    return queryClient.ensureQueryData<
      API.SelectOptionStringGetDictionaryDataSelectQueryResultOption[]
    >({
      queryKey: ['dictionaryServices/getDictionaryDataSelect'],
      queryKey: ['dictionaryServices/getDictionaryDataSelect', params],
    });
  }
  function updateDictionaryDataSelect(categoryId?: string) {
    queryClient.invalidateQueries({
      queryKey: ['dictionaryServices/getDictionaryDataSelect'],
      queryKey: ['dictionaryServices/getDictionaryDataSelect', params],
    });
  }
packages/hooks/standardOrder.ts
@@ -1,6 +1,7 @@
import { useQuery, useQueryClient } from '@tanstack/vue-query';
import * as standardServiceServices from '@12333/services/apiV2/standardService';
import { MaybeRef, unref } from 'vue';
import { computed, MaybeRef, unref } from 'vue';
import { groupBy } from 'lodash';
type UseStandardServiceDetailOptions = {
  id: MaybeRef<string>;
@@ -25,10 +26,72 @@
    },
  });
  const minPrice = computed(() => {
    if (!data.value?.specs?.length) {
      return 0;
    } else {
      return Math.min(...data.value.specs.map((x) => x.price));
    }
  });
  return {
    detail: data,
    refetch,
    isLoading,
    isError,
    minPrice,
  };
}
type UseStandardServiceListOptions = {
  params?: MaybeRef<API.GetOpenStandardServiceListQuery>;
  onSuccess?: (data: API.GetStandardServicesQueryResultItem[]) => any;
};
export function useStandardServiceList(options: UseStandardServiceListOptions = {}) {
  const { params = {}, onSuccess } = options;
  const {
    data: standardServiceList,
    refetch,
    isLoading,
    isError,
  } = useQuery({
    queryKey: ['standardServiceServices/getOpenStandardServiceList', params],
    queryFn: async () => {
      return await standardServiceServices.getOpenStandardServiceList(unref(params), {
        showLoading: false,
      });
    },
    placeholderData: () => [] as API.GetStandardServicesQueryResultItem[],
    onSuccess(data) {
      onSuccess?.(data);
    },
  });
  const standardServiceListForCategory = computed(() => {
    return standardServiceList.value.map((x) => ({
      ...x,
      catName: x.name,
    }));
  });
  const standardServiceListForCategoryMap = computed(() => {
    const group = groupBy(standardServiceListForCategory.value, 'jobCode');
    return group;
  });
  const queryClient = useQueryClient();
  function ensureStandardServiceList() {
    return queryClient.ensureQueryData<API.GetStandardServicesQueryResultItem[]>({
      queryKey: ['standardServiceServices/getOpenStandardServiceList', params],
    });
  }
  return {
    standardServiceList,
    ensureStandardServiceList,
    standardServiceListForCategory,
    standardServiceListForCategoryMap,
  };
}
packages/services/apiV2/index.ts
@@ -14,12 +14,12 @@
import * as logRecords from './logRecords';
import * as dictionary from './dictionary';
import * as taskCheckReceive from './taskCheckReceive';
import * as standardOrder from './standardOrder';
import * as standardService from './standardService';
import * as userResume from './userResume';
import * as auth from './auth';
import * as taskUser from './taskUser';
import * as enterpriseInsuranceProduct from './enterpriseInsuranceProduct';
import * as standardOrder from './standardOrder';
import * as eventUtils from './eventUtils';
import * as enterpriseCooperationWallet from './enterpriseCooperationWallet';
import * as insuranceProduct from './insuranceProduct';
@@ -45,12 +45,12 @@
  logRecords,
  dictionary,
  taskCheckReceive,
  standardOrder,
  standardService,
  userResume,
  auth,
  taskUser,
  enterpriseInsuranceProduct,
  standardOrder,
  eventUtils,
  enterpriseCooperationWallet,
  insuranceProduct,
packages/services/apiV2/standardOrder.ts
@@ -17,7 +17,7 @@
  });
}
/** æ ‡å‡†è®¢å•取消 POST /api/flexjob/standardOrder/cancelStandardOrderAppointment */
/** æ ‡å‡†è®¢å•取消预约 POST /api/flexjob/standardOrder/cancelStandardOrderAppointment */
export async function cancelStandardOrderAppointment(
  body: API.CancelStandardOrderAppointmentCommand,
  options?: API.RequestConfig
@@ -32,6 +32,42 @@
  });
}
/** æ ‡å‡†è®¢å•校验支付结果 POST /api/flexjob/standardOrder/checkPayStandardOrder */
export async function checkPayStandardOrder(
  body: API.CheckPayStandardOrderCommand,
  options?: API.RequestConfig
) {
  return request<API.CheckPayStandardOrderCommandResult>(
    '/api/flexjob/standardOrder/checkPayStandardOrder',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** æ ‡å‡†è®¢å•校验退款结果 POST /api/flexjob/standardOrder/checkRefundStandardOrder */
export async function checkRefundStandardOrder(
  body: API.CheckRefundStandardOrderCommand,
  options?: API.RequestConfig
) {
  return request<API.CheckRefundStandardOrderCommandResult>(
    '/api/flexjob/standardOrder/checkRefundStandardOrder',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•详情 GET /api/flexjob/standardOrder/getStandardOrder */
export async function getStandardOrder(
  // å åŠ ç”Ÿæˆçš„Param类型 (非body参数swagger默认没有生成对象)
@@ -47,42 +83,6 @@
  });
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•预约分页列表 POST /api/flexjob/standardOrder/getStandardOrderAppointments */
export async function getStandardOrderAppointments(
  body: API.GetStandardOrderAppointmentsQuery,
  options?: API.RequestConfig
) {
  return request<API.GetStandardOrderAppointmentsQueryResult>(
    '/api/flexjob/standardOrder/getStandardOrderAppointments',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•支付分页列表 POST /api/flexjob/standardOrder/getStandardOrderPays */
export async function getStandardOrderPays(
  body: API.GetStandardOrderPaysQuery,
  options?: API.RequestConfig
) {
  return request<API.GetStandardOrderPaysQueryResult>(
    '/api/flexjob/standardOrder/getStandardOrderPays',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•分页列表 POST /api/flexjob/standardOrder/getStandardOrders */
export async function getStandardOrders(
  body: API.GetStandardOrdersQuery,
@@ -98,60 +98,6 @@
  });
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•服务人员分页列表 POST /api/flexjob/standardOrder/getStandardOrderServers */
export async function getStandardOrderServers(
  body: API.GetStandardOrderServersQuery,
  options?: API.RequestConfig
) {
  return request<API.GetStandardOrderServersQueryResult>(
    '/api/flexjob/standardOrder/getStandardOrderServers',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•结算分页列表 POST /api/flexjob/standardOrder/getStandardOrderSettlements */
export async function getStandardOrderSettlements(
  body: API.GetStandardOrderSettlementsQuery,
  options?: API.RequestConfig
) {
  return request<API.GetStandardOrderSettlementsQueryResult>(
    '/api/flexjob/standardOrder/getStandardOrderSettlements',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•供应商分页列表 POST /api/flexjob/standardOrder/getStandardOrderSupplierEnterprises */
export async function getStandardOrderSupplierEnterprises(
  body: API.GetStandardOrderSupplierEnterprisesQuery,
  options?: API.RequestConfig
) {
  return request<API.GetStandardOrderSupplierEnterprisesQueryResult>(
    '/api/flexjob/standardOrder/getStandardOrderSupplierEnterprises',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** æ ‡å‡†è®¢å•支付 POST /api/flexjob/standardOrder/payStandardOrder */
export async function payStandardOrder(
  body: API.PayStandardOrderCommand,
packages/services/apiV2/standardService.ts
@@ -17,6 +17,60 @@
  });
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•服务详情 GET /api/flexjob/standardService/getOpenStandardService */
export async function getOpenStandardService(
  // å åŠ ç”Ÿæˆçš„Param类型 (非body参数swagger默认没有生成对象)
  params: API.APIgetOpenStandardServiceParams,
  options?: API.RequestConfig
) {
  return request<API.GetStandardServiceQueryResult>(
    '/api/flexjob/standardService/getOpenStandardService',
    {
      method: 'GET',
      params: {
        ...params,
      },
      ...(options || {}),
    }
  );
}
/** æŸ¥è¯¢å¼€æ”¾æ ‡å‡†è®¢å•服务分页列表 POST /api/flexjob/standardService/getOpenStandardServiceList */
export async function getOpenStandardServiceList(
  body: API.GetOpenStandardServiceListQuery,
  options?: API.RequestConfig
) {
  return request<API.GetStandardServicesQueryResultItem[]>(
    '/api/flexjob/standardService/getOpenStandardServiceList',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** æŸ¥è¯¢å¼€æ”¾æ ‡å‡†è®¢å•服务分页列表 POST /api/flexjob/standardService/getOpenStandardServices */
export async function getOpenStandardServices(
  body: API.GetOpenStandardServicesQuery,
  options?: API.RequestConfig
) {
  return request<API.GetStandardServicesQueryResult>(
    '/api/flexjob/standardService/getOpenStandardServices',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•服务详情 GET /api/flexjob/standardService/getStandardService */
export async function getStandardService(
  // å åŠ ç”Ÿæˆçš„Param类型 (非body参数swagger默认没有生成对象)
@@ -71,6 +125,42 @@
  );
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•服务人员分页列表 POST /api/flexjob/standardService/getStandardServiceServers */
export async function getStandardServiceServers(
  body: API.GetStandardServiceServersQuery,
  options?: API.RequestConfig
) {
  return request<API.GetStandardServiceServersQueryResult>(
    '/api/flexjob/standardService/getStandardServiceServers',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** æŸ¥è¯¢æ ‡å‡†è®¢å•服务供应商分页列表 POST /api/flexjob/standardService/getStandardServiceSupplierEnterprises */
export async function getStandardServiceSupplierEnterprises(
  body: API.GetStandardServiceSupplierEnterprisesQuery,
  options?: API.RequestConfig
) {
  return request<API.GetStandardServiceSupplierEnterprisesQueryResult>(
    '/api/flexjob/standardService/getStandardServiceSupplierEnterprises',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json-patch+json',
      },
      data: body,
      ...(options || {}),
    }
  );
}
/** ä¿å­˜æ ‡å‡†è®¢å•服务 POST /api/flexjob/standardService/saveStandardService */
export async function saveStandardService(
  body: API.SaveStandardServiceCommand,
packages/services/apiV2/typings.d.ts
@@ -314,6 +314,11 @@
    roleId?: string;
  }
  interface APIgetOpenStandardServiceParams {
    /** Id */
    id?: string;
  }
  interface APIgetPartyAEnterpriseParams {
    /** åˆä½œId */
    id?: string;
@@ -718,6 +723,19 @@
    operatorToken?: string;
  }
  interface CheckPayStandardOrderCommand {
    /** è®¢å•Id */
    id?: string;
  }
  interface CheckPayStandardOrderCommandResult {
    payStatus?: EnumStandardOrderPayStatus;
    /** æ”¯ä»˜æ—¶é—´ */
    payTime?: string;
    /** æ”¯ä»˜å®Œæˆæ—¶é—´ */
    payCompletedTime?: string;
  }
  interface CheckReceiveTaskCommand {
    /** æäº¤Id */
    id?: string;
@@ -741,6 +759,26 @@
    checkReceiveStatus?: EnumTaskUserSubmitCheckReceiveStatus;
  }
  interface CheckRefundStandardOrderCommand {
    /** è®¢å•Id(二选一) */
    id?: string;
    /** é€€æ¬¾äº¤æ˜“编号(二选一) */
    refundCode?: string;
  }
  interface CheckRefundStandardOrderCommandResult {
    payStatus?: EnumStandardOrderPayStatus;
    /** æ”¯ä»˜æ—¶é—´ */
    payTime?: string;
    /** æ”¯ä»˜å®Œæˆæ—¶é—´ */
    payCompletedTime?: string;
    refundStatus?: EnumStandardOrderRefundStatus;
    /** é€€æ¬¾æ—¶é—´ */
    refundTime?: string;
    /** é€€æ¬¾å®Œæˆæ—¶é—´ */
    refundCompletedTime?: string;
  }
  type ChooseWxmpPhoneNumberCommand = Record<string, any>;
  type ClearTaskCollectCommand = Record<string, any>;
@@ -1198,6 +1236,15 @@
    Pass = 30,
  }
  enum EnumGetStandardOrdersQueryScene {
    /**预约订单 */
    Appointment = 10,
    /**支付订单 */
    Pay = 20,
    /**结算订单 */
    Settlement = 30,
  }
  enum EnumInsuranceSupplierAccess {
    /**人资园 */
    WaterDropCloud = 10,
@@ -1471,6 +1518,15 @@
    Cancelled = 30,
  }
  enum EnumStandardOrderRefundStatus {
    /**待退款 */
    Wait = 10,
    /**已退款 */
    Completed = 20,
    /**退款失败 */
    Fail = 30,
  }
  enum EnumStandardOrderSettlementStatus {
    /**待结算 */
    Wait = 10,
@@ -1674,6 +1730,8 @@
  enum EnumUserWalletTransactionType {
    /**支付 */
    Payment = 1,
    /**退款 */
    Refund = 2,
    /**收入 */
    Income = 10,
    /**提现 */
@@ -2004,6 +2062,42 @@
    timestamp?: number;
  }
  interface FriendlyResultCheckPayStandardOrderCommandResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
    /** çŠ¶æ€ç  */
    code?: number;
    /** é”™è¯¯ç  */
    errorCode?: string;
    data?: CheckPayStandardOrderCommandResult;
    /** æ‰§è¡ŒæˆåŠŸ */
    success?: boolean;
    /** é”™è¯¯ä¿¡æ¯ */
    msg?: any;
    /** é™„加数据 */
    extras?: any;
    /** æ—¶é—´æˆ³ */
    timestamp?: number;
  }
  interface FriendlyResultCheckRefundStandardOrderCommandResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
    /** çŠ¶æ€ç  */
    code?: number;
    /** é”™è¯¯ç  */
    errorCode?: string;
    data?: CheckRefundStandardOrderCommandResult;
    /** æ‰§è¡ŒæˆåŠŸ */
    success?: boolean;
    /** é”™è¯¯ä¿¡æ¯ */
    msg?: any;
    /** é™„加数据 */
    extras?: any;
    /** æ—¶é—´æˆ³ */
    timestamp?: number;
  }
  interface FriendlyResultEnterpriseUserElectronSignCommandResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
@@ -3265,42 +3359,6 @@
    timestamp?: number;
  }
  interface FriendlyResultGetStandardOrderAppointmentsQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
    /** çŠ¶æ€ç  */
    code?: number;
    /** é”™è¯¯ç  */
    errorCode?: string;
    data?: GetStandardOrderAppointmentsQueryResult;
    /** æ‰§è¡ŒæˆåŠŸ */
    success?: boolean;
    /** é”™è¯¯ä¿¡æ¯ */
    msg?: any;
    /** é™„加数据 */
    extras?: any;
    /** æ—¶é—´æˆ³ */
    timestamp?: number;
  }
  interface FriendlyResultGetStandardOrderPaysQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
    /** çŠ¶æ€ç  */
    code?: number;
    /** é”™è¯¯ç  */
    errorCode?: string;
    data?: GetStandardOrderPaysQueryResult;
    /** æ‰§è¡ŒæˆåŠŸ */
    success?: boolean;
    /** é”™è¯¯ä¿¡æ¯ */
    msg?: any;
    /** é™„加数据 */
    extras?: any;
    /** æ—¶é—´æˆ³ */
    timestamp?: number;
  }
  interface FriendlyResultGetStandardOrderQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
@@ -3319,42 +3377,6 @@
    timestamp?: number;
  }
  interface FriendlyResultGetStandardOrderServersQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
    /** çŠ¶æ€ç  */
    code?: number;
    /** é”™è¯¯ç  */
    errorCode?: string;
    data?: GetStandardOrderServersQueryResult;
    /** æ‰§è¡ŒæˆåŠŸ */
    success?: boolean;
    /** é”™è¯¯ä¿¡æ¯ */
    msg?: any;
    /** é™„加数据 */
    extras?: any;
    /** æ—¶é—´æˆ³ */
    timestamp?: number;
  }
  interface FriendlyResultGetStandardOrderSettlementsQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
    /** çŠ¶æ€ç  */
    code?: number;
    /** é”™è¯¯ç  */
    errorCode?: string;
    data?: GetStandardOrderSettlementsQueryResult;
    /** æ‰§è¡ŒæˆåŠŸ */
    success?: boolean;
    /** é”™è¯¯ä¿¡æ¯ */
    msg?: any;
    /** é™„加数据 */
    extras?: any;
    /** æ—¶é—´æˆ³ */
    timestamp?: number;
  }
  interface FriendlyResultGetStandardOrdersQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
@@ -3373,24 +3395,6 @@
    timestamp?: number;
  }
  interface FriendlyResultGetStandardOrderSupplierEnterprisesQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
    /** çŠ¶æ€ç  */
    code?: number;
    /** é”™è¯¯ç  */
    errorCode?: string;
    data?: GetStandardOrderSupplierEnterprisesQueryResult;
    /** æ‰§è¡ŒæˆåŠŸ */
    success?: boolean;
    /** é”™è¯¯ä¿¡æ¯ */
    msg?: any;
    /** é™„加数据 */
    extras?: any;
    /** æ—¶é—´æˆ³ */
    timestamp?: number;
  }
  interface FriendlyResultGetStandardServiceCommentsQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
@@ -3427,6 +3431,24 @@
    timestamp?: number;
  }
  interface FriendlyResultGetStandardServiceServersQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
    /** çŠ¶æ€ç  */
    code?: number;
    /** é”™è¯¯ç  */
    errorCode?: string;
    data?: GetStandardServiceServersQueryResult;
    /** æ‰§è¡ŒæˆåŠŸ */
    success?: boolean;
    /** é”™è¯¯ä¿¡æ¯ */
    msg?: any;
    /** é™„加数据 */
    extras?: any;
    /** æ—¶é—´æˆ³ */
    timestamp?: number;
  }
  interface FriendlyResultGetStandardServicesQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
@@ -3445,6 +3467,24 @@
    timestamp?: number;
  }
  interface FriendlyResultGetStandardServiceSupplierEnterprisesQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
    /** çŠ¶æ€ç  */
    code?: number;
    /** é”™è¯¯ç  */
    errorCode?: string;
    data?: GetStandardServiceSupplierEnterprisesQueryResult;
    /** æ‰§è¡ŒæˆåŠŸ */
    success?: boolean;
    /** é”™è¯¯ä¿¡æ¯ */
    msg?: any;
    /** é™„加数据 */
    extras?: any;
    /** æ—¶é—´æˆ³ */
    timestamp?: number;
  }
  interface FriendlyResultGetTaskEnterpriseQueryResult {
    /** è·Ÿè¸ªId */
    traceId?: string;
@@ -4033,6 +4073,25 @@
    timestamp?: number;
  }
  interface FriendlyResultListGetStandardServicesQueryResultItem {
    /** è·Ÿè¸ªId */
    traceId?: string;
    /** çŠ¶æ€ç  */
    code?: number;
    /** é”™è¯¯ç  */
    errorCode?: string;
    /** æ•°æ® */
    data?: GetStandardServicesQueryResultItem[];
    /** æ‰§è¡ŒæˆåŠŸ */
    success?: boolean;
    /** é”™è¯¯ä¿¡æ¯ */
    msg?: any;
    /** é™„加数据 */
    extras?: any;
    /** æ—¶é—´æˆ³ */
    timestamp?: number;
  }
  interface FriendlyResultListGetUserInfoRolesQueryResultItem {
    /** è·Ÿè¸ªId */
    traceId?: string;
@@ -6610,6 +6669,37 @@
    remark?: string;
  }
  interface GetOpenStandardServiceListQuery {
    /** å…³é”®å­—(服务名/Id) */
    keywords?: string;
    /** å²—位编号 */
    jobCode?: string;
    /** åˆ›å»ºæ—¶é—´-起始 */
    createdTimeBegin?: string;
    /** åˆ›å»ºæ—¶é—´-截止 */
    createdTimeEnd?: string;
    releaseStatus?: EnumStandardServiceReleaseStatus;
    recommendStatus?: EnumStandardServiceRecommendStatus;
    /** æ˜¯å¦æ”¶è— */
    isCollected?: boolean;
  }
  interface GetOpenStandardServicesQuery {
    /** å…³é”®å­—(服务名/Id) */
    keywords?: string;
    /** å²—位编号 */
    jobCode?: string;
    /** åˆ›å»ºæ—¶é—´-起始 */
    createdTimeBegin?: string;
    /** åˆ›å»ºæ—¶é—´-截止 */
    createdTimeEnd?: string;
    releaseStatus?: EnumStandardServiceReleaseStatus;
    recommendStatus?: EnumStandardServiceRecommendStatus;
    /** æ˜¯å¦æ”¶è— */
    isCollected?: boolean;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetOpenTaskInfosQuery {
    /** å…³é”®å­—(任务名称) */
    keywords?: string;
@@ -7860,68 +7950,6 @@
    signName?: string;
  }
  interface GetStandardOrderAppointmentsQuery {
    appointmentStatus?: EnumStandardOrderAppointmentStatus;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetStandardOrderAppointmentsQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** æ•°æ® */
    data?: GetStandardOrderAppointmentsQueryResultItem[];
  }
  interface GetStandardOrderAppointmentsQueryResultItem {
    /** è®¢å•Id */
    id?: string;
    /** æœåŠ¡åç§° */
    serviceName?: string;
    /** å®žä»˜é‡‘额 */
    payAmount?: number;
    /** æœåŠ¡èµ·å§‹æ—¶é—´ */
    beginTime?: string;
    /** æœåŠ¡æˆªæ­¢æ—¶é—´ */
    endTime?: string;
    /** æœåŠ¡åœ°å€ï¼ˆçœå¸‚åŒº+详细地址+门牌号) */
    addressDetail?: string;
    /** æœåŠ¡æœºæž„ */
    supplierEnterpriseName?: string;
    /** æœåŠ¡äººå‘˜ */
    serverNames?: string[];
    appointmentStatus?: EnumStandardOrderAppointmentStatus;
  }
  interface GetStandardOrderPaysQuery {
    payStatus?: EnumStandardOrderPayStatus;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetStandardOrderPaysQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** æ•°æ® */
    data?: GetStandardOrderPaysQueryResultItem[];
  }
  interface GetStandardOrderPaysQueryResultItem {
    /** è®¢å•Id */
    id?: string;
    /** æœåŠ¡åç§° */
    serviceName?: string;
    /** å®žä»˜é‡‘额 */
    payAmount?: number;
    /** æœåŠ¡èµ·å§‹æ—¶é—´ */
    beginTime?: string;
    /** æœåŠ¡æˆªæ­¢æ—¶é—´ */
    endTime?: string;
    /** æœåŠ¡åœ°å€ï¼ˆçœå¸‚åŒº+详细地址+门牌号) */
    addressDetail?: string;
    /** æœåŠ¡æœºæž„ */
    supplierEnterpriseName?: string;
    /** æœåŠ¡äººå‘˜ */
    serverNames?: string[];
    payStatus?: EnumStandardOrderPayStatus;
  }
  interface GetStandardOrderQueryResult {
    /** è®¢å•Id */
    id?: string;
@@ -8004,99 +8032,8 @@
    settlementAmount?: number;
  }
  interface GetStandardOrderServersQuery {
    /** è®¢å•Id */
    orderId?: string;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetStandardOrderServersQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** æ•°æ® */
    data?: GetStandardOrderServersQueryResultItem[];
  }
  interface GetStandardOrderServersQueryResultItem {
    /** Id */
    id?: string;
    /** å¤´åƒ */
    avatar?: string;
    /** å§“名 */
    name?: string;
    gender?: EnumUserGender;
    /** æ˜¯å¦å®žå */
    isReal?: boolean;
    realMethod?: EnumUserRealMethod;
    /** å¹´é¾„ */
    age?: number;
    /** èº«ä»½ç¼–号 */
    personalIdentityCode?: string;
    /** èº«ä»½ */
    personalIdentityContent?: string;
    /** å­¦åŽ†ç¼–å· */
    educationalBackgroundCode?: string;
    /** å­¦åކ */
    educationalBackgroundContent?: string;
    /** ä¸Šå²—次数 */
    taskCount?: number;
    /** å·¥ä½œèµ„历 */
    workSeniority?: string;
    /** å·¥ä½œç»éªŒ */
    workExperience?: string;
  }
  interface GetStandardOrderSettlementsQuery {
    /** å…³é”®å­—(订单号/服务名/供应商) */
    keywords?: string;
    settlementStatus?: EnumStandardOrderSettlementStatus;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetStandardOrderSettlementsQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** æ•°æ® */
    data?: GetStandardOrderSettlementsQueryResultItem[];
  }
  interface GetStandardOrderSettlementsQueryResultItem {
    /** è®¢å•Id */
    id?: string;
    /** è®¢å•号 */
    code?: string;
    /** æœåŠ¡åç§° */
    serviceName?: string;
    /** æœåŠ¡å•å· */
    serviceCode?: string;
    /** ç”²æ–¹ä¼ä¸šId */
    partyAEnterpriseId?: string;
    /** ç”²æ–¹ä¼ä¸š */
    partyAEnterpriseName?: string;
    /** æœåŠ¡åœ°å€ï¼ˆçœå¸‚åŒº+详细地址+门牌号) */
    addressDetail?: string;
    /** æœåŠ¡æœºæž„ */
    supplierEnterpriseName?: string;
    /** æœåŠ¡äººå‘˜ */
    serverNames?: string[];
    /** å®žä»˜é‡‘额 */
    payAmount?: number;
    /** å®žæ”¶é‡‘额 */
    receiveAmount?: number;
    /** æœåŠ¡è´¹ */
    serviceFee?: number;
    /** ç»“算金额 */
    settlementAmount?: number;
    /** ç»“算单号 */
    settlementCode?: string;
    settlementStatus?: EnumStandardOrderSettlementStatus;
    /** ç»“ç®—æ—¶é—´ */
    settlementTime?: string;
    /** æœåŠ¡èµ·å§‹æ—¶é—´ */
    beginTime?: string;
    /** æœåŠ¡æˆªæ­¢æ—¶é—´ */
    endTime?: string;
  }
  interface GetStandardOrdersQuery {
    scene?: EnumGetStandardOrdersQueryScene;
    /** å…³é”®å­—(订单号/服务名) */
    keywords?: string;
    /** ä¸‹å•æ—¶é—´-起始 */
@@ -8109,6 +8046,7 @@
    payTimeEnd?: string;
    appointmentStatus?: EnumStandardOrderAppointmentStatus;
    payStatus?: EnumStandardOrderPayStatus;
    settlementStatus?: EnumStandardOrderSettlementStatus;
    pageModel?: PagedListQueryPageModel;
  }
@@ -8127,56 +8065,43 @@
    serviceName?: string;
    /** æœåŠ¡å•å· */
    serviceCode?: string;
    /** ä¸‹å•用户Id */
    createdUserId?: string;
    /** ä¸‹å•用户 */
    createdUserName?: string;
    /** è”系电话 */
    createdUserContactPhoneNumber?: string;
    /** ä¸‹å•æ—¶é—´ */
    createdTime?: string;
    /** æ”¯ä»˜æ—¶é—´ */
    payTime?: string;
    appointmentStatus?: EnumStandardOrderAppointmentStatus;
    payStatus?: EnumStandardOrderPayStatus;
    settlementStatus?: EnumStandardOrderSettlementStatus;
    /** ç”²æ–¹ä¼ä¸šId */
    partyAEnterpriseId?: string;
    /** ç”²æ–¹ä¼ä¸š */
    partyAEnterpriseName?: string;
    /** è”系电话 */
    contactPhoneNumber?: string;
    /** ä¾›åº”商Id */
    supplierEnterpriseId?: string;
    /** ä¾›åº”商 */
    supplierEnterpriseName?: string;
    /** ä¾›åº”商联系电话 */
    supplierContactPhoneNumber?: string;
    payStatus?: EnumStandardOrderPayStatus;
    /** æ”¯ä»˜å®Œæˆæ—¶é—´ */
    payCompletedTime?: string;
    /** å®žä»˜é‡‘额 */
    payAmount?: number;
    /** å®žæ”¶é‡‘额 */
    receiveAmount?: number;
    /** æœåŠ¡è´¹ */
    serviceFee?: number;
    settlementStatus?: EnumStandardOrderSettlementStatus;
    /** ç»“算单号 */
    settlementCode?: string;
    /** ç»“ç®—æ—¶é—´ */
    settlementTime?: string;
    /** ç»“算金额 */
    settlementAmount?: number;
  }
  interface GetStandardOrderSupplierEnterprisesQuery {
    /** è®¢å•Id */
    orderId?: string;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetStandardOrderSupplierEnterprisesQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** æ•°æ® */
    data?: GetStandardOrderSupplierEnterprisesQueryResultItem[];
  }
  interface GetStandardOrderSupplierEnterprisesQueryResultItem {
    /** Id */
    id?: string;
    /** å¤´åƒ */
    avatar?: string;
    /** ä¼ä¸šå…¨ç§° */
    enterpriseName?: string;
    /** æœåŠ¡äººå‘˜ */
    serverCount?: number;
    /** æœåŠ¡äººæ¬¡ */
    serviceCount?: number;
    /** ç»è¥èŒƒå›´ */
    mainBusiness?: string;
  }
  interface GetStandardServiceCommentsQuery {
    pageModel?: PagedListQueryPageModel;
  }
@@ -8261,6 +8186,51 @@
    cityContent?: string;
  }
  interface GetStandardServiceServersQuery {
    /** ä¾›åº”商Id */
    supplierEnterpriseId?: string;
    /** æœåŠ¡èµ·å§‹æ—¶é—´ */
    beginTime?: string;
    /** æœåŠ¡æˆªæ­¢æ—¶é—´ */
    endTime?: string;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetStandardServiceServersQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** æ•°æ® */
    data?: GetStandardServiceServersQueryResultItem[];
  }
  interface GetStandardServiceServersQueryResultItem {
    /** Id */
    id?: string;
    /** å¤´åƒ */
    avatar?: string;
    /** å§“名 */
    name?: string;
    gender?: EnumUserGender;
    /** æ˜¯å¦å®žå */
    isReal?: boolean;
    realMethod?: EnumUserRealMethod;
    /** å¹´é¾„ */
    age?: number;
    /** èº«ä»½ç¼–号 */
    personalIdentityCode?: string;
    /** èº«ä»½ */
    personalIdentityContent?: string;
    /** å­¦åŽ†ç¼–å· */
    educationalBackgroundCode?: string;
    /** å­¦åކ */
    educationalBackgroundContent?: string;
    /** ä¸Šå²—次数 */
    taskCount?: number;
    /** å·¥ä½œèµ„历 */
    workSeniority?: string;
    /** å·¥ä½œç»éªŒ */
    workExperience?: string;
  }
  interface GetStandardServicesQuery {
    /** å…³é”®å­—(服务名/Id) */
    keywords?: string;
@@ -8290,6 +8260,8 @@
    file?: string;
    /** è¡Œä¸šç±»åˆ« */
    industryCategoryContent?: string;
    /** å²—位编号 */
    jobCode?: string;
    /** å²—位 */
    jobContent?: string;
    /** æœåŠ¡å */
@@ -8302,12 +8274,41 @@
    recommendStatus?: EnumStandardServiceRecommendStatus;
    /** æ˜¯å¦æ”¶è— */
    isCollection?: boolean;
    /** æ”¶è—æ—¶é—´ */
    collectionTime?: string;
    /** åˆ›å»ºæ—¶é—´ */
    createdTime?: string;
    /** ä¾›åº”商数量 */
    supplierCount?: number;
  }
  interface GetStandardServiceSupplierEnterprisesQuery {
    /** æœåŠ¡Id */
    serviceId?: string;
    pageModel?: PagedListQueryPageModel;
  }
  interface GetStandardServiceSupplierEnterprisesQueryResult {
    pageModel?: PagedListQueryResultPageModel;
    /** æ•°æ® */
    data?: GetStandardServiceSupplierEnterprisesQueryResultItem[];
  }
  interface GetStandardServiceSupplierEnterprisesQueryResultItem {
    /** Id */
    id?: string;
    /** å¤´åƒ */
    avatar?: string;
    /** ä¼ä¸šå…¨ç§° */
    enterpriseName?: string;
    /** æœåŠ¡äººå‘˜ */
    serverCount?: number;
    /** æœåŠ¡äººæ¬¡ */
    serviceCount?: number;
    /** ç»è¥èŒƒå›´ */
    mainBusiness?: string;
  }
  type GetSupplierEnterpriseSelectQuery = Record<string, any>;
  interface GetSupplierEnterpriseSelectQueryOption {
@@ -11426,6 +11427,36 @@
    reject_reason: string;
  }
  interface WeChatPayTransactionsJsApiNotifyCommand {
    /** é€šçŸ¥ID,回调通知的唯一编号 */
    id?: string;
    /** é€šçŸ¥åˆ›å»ºæ—¶é—´
1、定义:本次回调通知创建的时间
2、格式:遵循rfc3339标准格式:yyyy-MM-DDTHH:mm:ss+TIMEZONE(示例:2015-05-20T13:29:35+08:00 è¡¨ç¤ºåŒ—京时间2015å¹´5月20日13点29分35秒) */
    create_time?: string;
    /** é€šçŸ¥çš„类型,微信支付回调通知的类型
支付成功通知的类型为TRANSACTION.SUCCESS */
    event_type?: string;
    /** é€šçŸ¥æ•°æ®ç±»åž‹ï¼Œé€šçŸ¥çš„资源数据类型,固定为encrypt-resource */
    resource_type?: string;
    resource?: WeChatPayTransactionsJsApiNotifyCommandResource;
    /** å›žè°ƒæ‘˜è¦ï¼Œå¾®ä¿¡æ”¯ä»˜å¯¹å›žè°ƒå†…容的摘要备注 */
    summary?: string;
  }
  interface WeChatPayTransactionsJsApiNotifyCommandResource {
    /** åŠ å¯†ç®—æ³•ç±»åž‹ï¼Œå›žè°ƒæ•°æ®å¯†æ–‡çš„åŠ å¯†ç®—æ³•ç±»åž‹ï¼Œç›®å‰ä¸ºAEAD_AES_256_GCM,开发者需要使用同样类型的数据进行解密 */
    algorithm?: string;
    /** æ•°æ®å¯†æ–‡ï¼ŒBase64编码后的回调数据密文,服务商需Base64解码并使用APIV3密钥解密,具体参考如何解密证书和回调报文 */
    ciphertext?: string;
    /** é™„加数据,参与解密的附加数据,该字段可能为空 */
    associated_data?: string;
    /** åŽŸå§‹å›žè°ƒç±»åž‹ï¼ŒåŠ å¯†å‰çš„å¯¹è±¡ç±»åž‹ï¼Œä¸ºtransaction */
    original_type?: string;
    /** éšæœºä¸²ï¼Œå‚与解密的随机串 */
    nonce?: string;
  }
  interface WxmpLoginCommand {
    /** ç”¨æˆ·ç™»å½•凭证 */
    code: string;
packages/services/apiV2/userWallet.ts
@@ -16,3 +16,18 @@
    ...(options || {}),
  });
}
/** å¾®ä¿¡JS支付通知 POST /api/user/userWallet/weChatPayTransactionsJsApiNotify */
export async function weChatPayTransactionsJsApiNotify(
  body: API.WeChatPayTransactionsJsApiNotifyCommand,
  options?: API.RequestConfig
) {
  return request<boolean>('/api/user/userWallet/weChatPayTransactionsJsApiNotify', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json-patch+json',
    },
    data: body,
    ...(options || {}),
  });
}