From c2447e7d63e22bea1a8b6119a210b470f8aa17d4 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期三, 03 十二月 2025 15:06:00 +0800
Subject: [PATCH] feat: 通知

---
 apps/underTakeMiniApp/src/subpackages/mine/setting/setting.vue              |   20 +
 apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue                 |    6 
 apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue                   |    5 
 apps/bMiniApp/src/constants/app.ts                                          |    3 
 apps/bMiniApp/src/subpackages/login/authorization/authorization.vue         |   35 --
 apps/bMiniApp/project.private.config.json                                   |    7 
 packages/hooks/task.ts                                                      |   21 +
 packages/components/src/Card/TaskCard.vue                                   |    6 
 packages/services/apiV2/syncDatabase.ts                                     |   15 -
 apps/bMiniApp/src/hooks/user.ts                                             |    5 
 apps/bMiniApp/src/stores/modules/user.ts                                    |    1 
 packages/constants/apiEnum.ts                                               |   60 ++---
 apps/cMiniApp/src/pages/mine/index.vue                                      |    6 
 apps/bMiniApp/.eslintrc-auto-import.json                                    |    4 
 apps/bMiniApp/src/subpackages/mine/setting/setting.vue                      |   20 +
 apps/bMiniApp/auto-imports.d.ts                                             |    4 
 apps/cMiniApp/src/subpackages/mine/mineHired/InnerPage.vue                  |    4 
 apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue                   |    4 
 packages/services/apiV2/auth.ts                                             |   15 +
 apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue                 |    7 
 apps/underTakeMiniApp/src/subpackages/login/authorization/authorization.vue |   37 --
 apps/underTakeMiniApp/src/hooks/user.ts                                     |    5 
 apps/bMiniApp/src/subpackages/login/loginByForm/accountLoginForm.vue        |  143 +++++++++++--
 apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue              |    7 
 packages/services/apiV2/task.ts                                             |   18 +
 packages/services/apiV2/typings.d.ts                                        |  135 +++++++++----
 apps/underTakeMiniApp/src/constants/app.ts                                  |    3 
 27 files changed, 396 insertions(+), 200 deletions(-)

diff --git a/apps/bMiniApp/.eslintrc-auto-import.json b/apps/bMiniApp/.eslintrc-auto-import.json
index 28f1710..5036610 100644
--- a/apps/bMiniApp/.eslintrc-auto-import.json
+++ b/apps/bMiniApp/.eslintrc-auto-import.json
@@ -125,6 +125,8 @@
     "DirectiveBinding": true,
     "MaybeRef": true,
     "MaybeRefOrGetter": true,
-    "TabBarPageRouterList": true
+    "TabBarPageRouterList": true,
+    "APP_ENV": true,
+    "NODE_ENV": true
   }
 }
diff --git a/apps/bMiniApp/auto-imports.d.ts b/apps/bMiniApp/auto-imports.d.ts
index b393104..b925506 100644
--- a/apps/bMiniApp/auto-imports.d.ts
+++ b/apps/bMiniApp/auto-imports.d.ts
@@ -5,6 +5,7 @@
 // Generated by unplugin-auto-import
 export {}
 declare global {
+  const APP_ENV: typeof import('./src/constants/app')['APP_ENV']
   const AppLocalConfig: typeof import('./src/constants/app')['AppLocalConfig']
   const BackType: typeof import('./src/constants/enum')['BackType']
   const EffectScope: typeof import('vue')['EffectScope']
@@ -29,6 +30,7 @@
   const EnumUserStatus: typeof import('./src/constants/apiEnum')['EnumUserStatus']
   const EnumUserType: typeof import('./src/constants/apiEnum')['EnumUserType']
   const HomeOrderType: typeof import('./src/hooks/task')['HomeOrderType']
+  const NODE_ENV: typeof import('./src/constants/app')['NODE_ENV']
   const OssAssets: typeof import('./src/constants/img')['OssAssets']
   const RouterPath: typeof import('./src/constants/router')['RouterPath']
   const TabBarPageRouter: typeof import('./src/constants/tabBar')['TabBarPageRouter']
@@ -134,9 +136,11 @@
 import { UnwrapRef } from 'vue'
 declare module 'vue' {
   interface ComponentCustomProperties {
+    readonly APP_ENV: UnwrapRef<typeof import('./src/constants/app')['APP_ENV']>
     readonly AppLocalConfig: UnwrapRef<typeof import('./src/constants/app')['AppLocalConfig']>
     readonly BackType: UnwrapRef<typeof import('./src/constants/enum')['BackType']>
     readonly EffectScope: UnwrapRef<typeof import('vue')['EffectScope']>
+    readonly NODE_ENV: UnwrapRef<typeof import('./src/constants/app')['NODE_ENV']>
     readonly OssAssets: UnwrapRef<typeof import('./src/constants/img')['OssAssets']>
     readonly RouterPath: UnwrapRef<typeof import('./src/constants/router')['RouterPath']>
     readonly TabBarPageRouter: UnwrapRef<typeof import('./src/constants/tabBar')['TabBarPageRouter']>
diff --git a/apps/bMiniApp/project.private.config.json b/apps/bMiniApp/project.private.config.json
index a630d9b..571984f 100644
--- a/apps/bMiniApp/project.private.config.json
+++ b/apps/bMiniApp/project.private.config.json
@@ -70,6 +70,13 @@
                     "query": "id=ed553142-801d-40b4-5582-08de0fa2a04b&operatorToken=627f56a2-d8a2-4606-b69f-36eadf770ecb",
                     "launchMode": "default",
                     "scene": null
+                },
+                {
+                    "name": "",
+                    "pathName": "subpackages/login/loginByForm/loginByForm",
+                    "query": "redirect=%2Fpages%2Fmine%2Findex&%24taroTimestamp=1764663566375",
+                    "launchMode": "default",
+                    "scene": null
                 }
             ]
         }
diff --git a/apps/bMiniApp/src/constants/app.ts b/apps/bMiniApp/src/constants/app.ts
index c7ddda3..1627c13 100644
--- a/apps/bMiniApp/src/constants/app.ts
+++ b/apps/bMiniApp/src/constants/app.ts
@@ -5,3 +5,6 @@
   clientType: EnumClientType.Wxmp,
   enterpriseType: EnumEnterpriseType.PartyA,
 };
+
+export const APP_ENV = process.env.APP_ENV;
+export const NODE_ENV = process.env.NODE_ENV;
diff --git a/apps/bMiniApp/src/hooks/user.ts b/apps/bMiniApp/src/hooks/user.ts
index 100955b..61c3123 100644
--- a/apps/bMiniApp/src/hooks/user.ts
+++ b/apps/bMiniApp/src/hooks/user.ts
@@ -19,12 +19,17 @@
     return userDetail.value?.enterpriseIsReal;
   });
 
+  const isBindWechat = computed(() => {
+    return userDetail.value?.bindWxmpId;
+  });
+
   return {
     user: userInfo,
     userDetail: userDetail,
     updateUserInfo,
     isCertified,
     locationCity,
+    isBindWechat,
   };
 }
 
diff --git a/apps/bMiniApp/src/stores/modules/user.ts b/apps/bMiniApp/src/stores/modules/user.ts
index 5fc3404..1d8a70a 100644
--- a/apps/bMiniApp/src/stores/modules/user.ts
+++ b/apps/bMiniApp/src/stores/modules/user.ts
@@ -139,6 +139,7 @@
     async loginByPassword(params: API.PasswordLoginCommand) {
       let res = await authServices.passwordLogin(
         {
+          code: params.code,
           userName: params.userName,
           password: params.password,
           // password: md5Encrypt(params.password),
diff --git a/apps/bMiniApp/src/subpackages/login/authorization/authorization.vue b/apps/bMiniApp/src/subpackages/login/authorization/authorization.vue
index 3f1b760..748c81e 100644
--- a/apps/bMiniApp/src/subpackages/login/authorization/authorization.vue
+++ b/apps/bMiniApp/src/subpackages/login/authorization/authorization.vue
@@ -60,7 +60,6 @@
 import IconCaptcha from '@/assets/login/icon-btn-captcha.png';
 import IconPassword from '@/assets/login/icon-btn-password.png';
 import { LoginFormTabs } from '../constants';
-import { subscribeMessageTemplateIdsForB } from '@12333/constants';
 import * as authServices from '@12333/services/apiV2/auth';
 
 defineOptions({
@@ -167,34 +166,12 @@
   } catch (error) {}
 }
 
-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);
-    }
-    if (setting.length > 0) {
-      Taro.requestSubscribeMessage({
-        tmplIds: subscribeMessageTemplateIdsForB,
-        success: function (res) {
-          console.log('res: ', res);
-        },
-      });
-    }
-    Message.success('鎺堟潈鐧诲綍鎴愬姛', {
-      onClosed: () => {
-        jump();
-      },
-    });
-  } catch (error) {}
+function handleLoginSuccess() {
+  Message.success('鎺堟潈鐧诲綍鎴愬姛', {
+    onClosed: () => {
+      jump();
+    },
+  });
 }
 
 function goLoginByForm(tab = LoginFormTabs.VerificationCodeLogin) {
diff --git a/apps/bMiniApp/src/subpackages/login/loginByForm/accountLoginForm.vue b/apps/bMiniApp/src/subpackages/login/loginByForm/accountLoginForm.vue
index 61dc409..1095240 100644
--- a/apps/bMiniApp/src/subpackages/login/loginByForm/accountLoginForm.vue
+++ b/apps/bMiniApp/src/subpackages/login/loginByForm/accountLoginForm.vue
@@ -1,32 +1,58 @@
 <template>
   <div class="verification-code-login-form-wrapper">
-    <nut-form class="verification-code-login-form" ref="formRef" :model-value="form" :rules="rules">
-      <nut-form-item label="" class="bole-form-item" prop="userName" required>
-        <nut-input
-          v-model.trim="form.userName"
-          class="bole-input-text"
-          placeholder="璇疯緭鍏ヨ处鍙�/鎵嬫満鍙�/閭"
-          type="text"
-        />
-      </nut-form-item>
-      <nut-form-item label="" class="bole-form-item" prop="userPassword" required>
-        <nut-input
-          v-model.trim="form.userPassword"
-          class="bole-input-text"
-          placeholder="璇疯緭鍏ュ瘑鐮�"
-          :type="isShowPassword ? 'text' : 'password'"
-          :key="isShowPassword ? 'text' : 'password'"
-        >
-          <template #right>
-            <div class="password-icon-wrapper" @click="isShowPassword = !isShowPassword">
-              <Eye v-if="isShowPassword"></Eye>
-              <Marshalling v-else></Marshalling>
-            </div>
-          </template>
-        </nut-input>
-      </nut-form-item>
-    </nut-form>
-    <LargeButton class="login-btn" @click="handleLogin" :loading="form.loading">鐧诲綍</LargeButton>
+    <nut-button
+      v-if="isAccount"
+      type="primary"
+      class="authorization-page-wechat-wrapper"
+      @click="handleLoginByHasAccount"
+    >
+      <div class="authorization-page-wechat">鎵嬫満鍙峰揩閫熺櫥褰�</div></nut-button
+    >
+    <template v-else>
+      <nut-form
+        class="verification-code-login-form"
+        ref="formRef"
+        :model-value="form"
+        :rules="rules"
+      >
+        <nut-form-item label="" class="bole-form-item" prop="userName" required>
+          <nut-input
+            v-model.trim="form.userName"
+            class="bole-input-text"
+            placeholder="璇疯緭鍏ヨ处鍙�/鎵嬫満鍙�/閭"
+            type="text"
+          />
+        </nut-form-item>
+        <nut-form-item label="" class="bole-form-item" prop="userPassword" required>
+          <nut-input
+            v-model.trim="form.userPassword"
+            class="bole-input-text"
+            placeholder="璇疯緭鍏ュ瘑鐮�"
+            :type="isShowPassword ? 'text' : 'password'"
+            :key="isShowPassword ? 'text' : 'password'"
+          >
+            <template #right>
+              <div class="password-icon-wrapper" @click="isShowPassword = !isShowPassword">
+                <Eye v-if="isShowPassword"></Eye>
+                <Marshalling v-else></Marshalling>
+              </div>
+            </template>
+          </nut-input>
+        </nut-form-item>
+      </nut-form>
+      <LargeButton class="login-btn" @click="handleLogin" :loading="form.loading">鐧诲綍</LargeButton>
+    </template>
+
+    <!-- <AccessOpenTypeButton
+      type="primary"
+      class="authorization-page-wechat-wrapper"
+      open-type="getPhoneNumber"
+      :access="policyChecked"
+      @noAccess="noAccess"
+      @getphonenumber="handleLogin"
+    >
+      <div class="authorization-page-wechat">鐧诲綍</div>
+    </AccessOpenTypeButton> -->
     <!-- <div class="go-register-btn" @click="goRegister">绔嬪嵆娉ㄥ唽</div> -->
   </div>
 </template>
@@ -39,6 +65,8 @@
 import { useUserStore } from '@/stores/modules/user';
 import { Eye, Marshalling } from '@nutui/icons-vue-taro';
 import Taro from '@tarojs/taro';
+import { AccessOpenTypeButton } from '@12333/components';
+import * as authServices from '@12333/services/apiV2/auth';
 
 defineOptions({
   name: 'AccountLoginForm',
@@ -57,6 +85,8 @@
 const isShowPassword = ref(false);
 
 const formRef = ref(null);
+const isAccount = ref(false);
+const wxMiniAppUserLoginRes = ref<API.LoginCommandCallback>();
 
 const form = reactive({
   loading: false,
@@ -69,8 +99,24 @@
   userPassword: [{ required: true, message: '璇疯緭鍏ュ瘑鐮�' }],
 });
 
+async function handleLoginByHasAccount() {
+  try {
+    if (props.policyChecked) {
+      userStore.loginSuccess(wxMiniAppUserLoginRes.value);
+      Message.success('鐧诲綍鎴愬姛', {
+        onClosed: () => {
+          jump();
+        },
+      });
+    } else {
+      noAccess();
+    }
+  } catch (error) {}
+}
+
 async function handleLogin() {
   try {
+    let loginRes = await Taro.login();
     if (props.policyChecked) {
       const { valid } = await formRef.value.validate();
       if (valid) {
@@ -78,6 +124,7 @@
         await userStore.loginByPassword({
           userName: form.userName,
           password: form.userPassword,
+          code: loginRes.code,
         });
         jump();
       }
@@ -100,6 +147,27 @@
     url: RouterPath.registerForm,
   });
 }
+
+onMounted(async () => {
+  try {
+    let loginRes = await Taro.login();
+    const params: API.WxmpLoginCommand = {
+      code: loginRes.code,
+      type: AppLocalConfig.userType,
+      enterpriseType: AppLocalConfig.enterpriseType,
+    };
+    wxMiniAppUserLoginRes.value = await authServices.wxmpLogin(params, {
+      skipErrorHandler: true,
+    });
+    if (wxMiniAppUserLoginRes.value?.isBindPhoneNumber) {
+      isAccount.value = true;
+    }
+  } catch (error) {
+    if (error?.info?.errorCode == 's401') {
+      isAccount.value = false;
+    }
+  }
+});
 </script>
 
 <style lang="scss">
@@ -114,5 +182,26 @@
       font-size: 28px;
     }
   }
+
+  .authorization-page-wechat-wrapper {
+    width: 100%;
+    height: 88px;
+  }
+
+  .authorization-page-wechat {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    font-weight: 400;
+    font-size: 32px;
+    color: #ffffff;
+    line-height: 44px;
+
+    .authorization-page-wechat-icon {
+      width: 44px;
+      height: 36px;
+      margin-right: 10px;
+    }
+  }
 }
 </style>
diff --git a/apps/bMiniApp/src/subpackages/mine/setting/setting.vue b/apps/bMiniApp/src/subpackages/mine/setting/setting.vue
index 11b99e2..91110b0 100644
--- a/apps/bMiniApp/src/subpackages/mine/setting/setting.vue
+++ b/apps/bMiniApp/src/subpackages/mine/setting/setting.vue
@@ -10,6 +10,7 @@
       </ListItem> -->
       <ListItem title="鐢ㄦ埛鍗忚" @click="goMineUserPolicy"></ListItem>
       <ListItem title="闅愮鏀跨瓥" @click="goPrivacyPolicy"></ListItem>
+      <ListItem title="寰俊瑙g粦" @click="handleUnbindWechat"></ListItem>
       <ListItem title="閫�鍑虹櫥褰�" @click="handleLoginout"></ListItem>
     </List>
   </PageLayout>
@@ -22,16 +23,18 @@
 import { useUserStore } from '@/stores/modules/user';
 import { useQueryClient } from '@tanstack/vue-query';
 import Taro from '@tarojs/taro';
+import * as authServices from '@12333/services/apiV2/auth';
 
 defineOptions({
   name: 'setting',
 });
 
 const userStore = useUserStore();
+const { isBindWechat } = useUser();
 const queryClient = useQueryClient();
 
 const userAccount = computed(() => {
-  return addStarForString(userStore?.userDetail?.userName, 4, 8);
+  return addStarForString(userStore?.userDetail?.name, 4, 8);
 });
 
 function goMineUserPolicy() {
@@ -54,6 +57,21 @@
     queryClient.removeQueries();
   } catch (error) {}
 }
+
+async function handleUnbindWechat() {
+  try {
+    if (!isBindWechat) {
+      Message.error('鎮ㄨ繕娌℃湁缁戝畾寰俊');
+      return;
+    }
+    await Message.confirm({ message: '纭畾瑕佽В缁戝井淇″悧锛�' });
+    let params: API.UnBindUserWxmpIdCommand = {};
+    let res = await authServices.unBindUserWxmpId(params);
+    if (res) {
+      Message.success('瑙g粦鎴愬姛');
+    }
+  } catch (error) {}
+}
 </script>
 
 <style lang="scss">
diff --git a/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
index cb1513b..b66d93b 100644
--- a/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/batchTaskList/InnerPage.vue
@@ -23,9 +23,10 @@
         :showFooterLeft="false"
       >
         <template #footerRight>
-          <nut-button v-if="showQueryState" type="primary" @click.stop="handleArrange(item)"
-            >瀹夋帓</nut-button
-          >
+          <template v-if="showQueryState">
+            <nut-button type="primary" @click.stop="handleArrange(item)">瀹夋帓</nut-button>
+            <nut-button type="primary" @click.stop="handleArrange(item)">鍙栨秷褰曠敤</nut-button>
+          </template>
           <div v-else class="batch-task-card-status">宸插畨鎺�</div>
         </template>
       </FlexJobCard>
diff --git a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
index 57dafbd..ca5ddd0 100644
--- a/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
+++ b/apps/bMiniApp/src/subpackages/task/taskManage/InnerPage.vue
@@ -40,6 +40,12 @@
               >浜哄憳瀹夋帓</nut-button
             >
             <nut-button
+              type="primary"
+              class="dark-btn"
+              @click.stop="goBatchTaskList(item, EnumTaskUserArrangeStatus.Wait)"
+              >鍙栨秷褰曠敤</nut-button
+            >
+            <nut-button
               v-if="item.status === EnumTaskStatus.Complete"
               type="primary"
               :color="Colors.Info"
diff --git a/apps/cMiniApp/src/pages/mine/index.vue b/apps/cMiniApp/src/pages/mine/index.vue
index fdc1db4..68cc1c8 100644
--- a/apps/cMiniApp/src/pages/mine/index.vue
+++ b/apps/cMiniApp/src/pages/mine/index.vue
@@ -91,7 +91,7 @@
           <nut-badge
             class="mine-order-list-item"
             top="8"
-            :value="userDetail?.taskCount ?? 0"
+            :dot="userDetail?.taskCount > 0"
             @click="goMineSign"
           >
             <img :src="IconOrderSign" class="mine-order-list-icon" />
@@ -100,7 +100,7 @@
           <nut-badge
             class="mine-order-list-item"
             top="8"
-            :value="userDetail?.hirePassTaskCount ?? 0"
+            :dot="userDetail?.hirePassTaskCount > 0"
             @click="goMineHired"
           >
             <img :src="IconOrderHire" class="mine-order-list-icon" />
@@ -109,7 +109,7 @@
           <nut-badge
             class="mine-order-list-item"
             top="8"
-            :value="userDetail?.arrangeCompleteTaskCount ?? 0"
+            :dot="userDetail?.arrangeCompleteTaskCount > 0"
             @click="goMineHire"
           >
             <img :src="IconOrderHire" class="mine-order-list-icon" />
diff --git a/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
index 2605683..494c1a5 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineHire/InnerPage.vue
@@ -34,6 +34,7 @@
         :service-fee="item.serviceFee"
         :settlement-cycle="item.settlementCycle"
         :address-name="item.addressName"
+        :unRead="item.unRead"
         @click="goTaskDetail(item)"
       >
         <template #actions>
@@ -58,6 +59,7 @@
   GetPersonalHireTaskInfosQueryStatusText,
   GetPersonalHireTaskInfosQueryStatusColor,
   EnumTaskUserArrangeStatus,
+  EnumReadScene,
 } from '@12333/constants';
 import * as taskServices from '@12333/services/apiV2/task';
 import Taro from '@tarojs/taro';
@@ -95,7 +97,7 @@
 
 function goTaskDetail(item: API.GetPersonalHireTaskInfosQueryResultItem) {
   Taro.navigateTo({
-    url: `${RouterPath.taskDetail}?id=${item.id}&from=hire`,
+    url: `${RouterPath.taskDetail}?id=${item.id}&from=hire&readScene=${EnumReadScene.TaskUserArrangePassForPersonal}`,
   });
 }
 </script>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineHired/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineHired/InnerPage.vue
index 6bd3a03..c24d147 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineHired/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineHired/InnerPage.vue
@@ -34,6 +34,7 @@
         :service-fee="item.serviceFee"
         :settlement-cycle="item.settlementCycle"
         :address-name="item.addressName"
+        :unRead="item.unRead"
         @click="goTaskDetail(item)"
       >
         <template #actions>
@@ -58,6 +59,7 @@
   GetPersonalHireTaskInfosQueryStatusText,
   GetPersonalHireTaskInfosQueryStatusColor,
   EnumTaskUserHireStatus,
+  EnumReadScene,
 } from '@12333/constants';
 import * as taskServices from '@12333/services/apiV2/task';
 import Taro from '@tarojs/taro';
@@ -94,7 +96,7 @@
 
 function goTaskDetail(item: API.GetPersonalHireTaskInfosQueryResultItem) {
   Taro.navigateTo({
-    url: `${RouterPath.taskDetail}?id=${item.id}`,
+    url: `${RouterPath.taskDetail}?id=${item.id}&readScene=${EnumReadScene.TaskUserHirePassForPersonal}`,
   });
 }
 </script>
diff --git a/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue b/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
index 0c508cf..0115ec4 100644
--- a/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/mine/mineSign/InnerPage.vue
@@ -37,7 +37,7 @@
         :service-fee="item.serviceFee"
         :settlement-cycle="item.settlementCycle"
         :address-name="item.addressName"
-        :isRead="false"
+        :unRead="item.unRead"
         @click="goTaskDetail(item)"
       >
         <template #actions>
@@ -62,6 +62,7 @@
   GetPersonalApplyTaskInfosQueryStatus,
   GetPersonalApplyTaskInfosQueryStatusText,
   GetPersonalApplyTaskInfosQueryStatusColor,
+  EnumReadScene,
 } from '@12333/constants';
 import * as taskServices from '@12333/services/apiV2/task';
 import Taro from '@tarojs/taro';
@@ -99,7 +100,7 @@
 
 function goTaskDetail(item: API.GetPersonalApplyTaskInfosQueryResultItem) {
   Taro.navigateTo({
-    url: `${RouterPath.taskDetail}?id=${item.id}&from=sign`,
+    url: `${RouterPath.taskDetail}?id=${item.id}&from=sign&readScene=${EnumReadScene.TaskUserApplyForPersonal}`,
   });
 }
 </script>
diff --git a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
index d7a1d9c..a174d88 100644
--- a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -126,6 +126,7 @@
   GetTaskInfoQueryResultHireButton,
   GetTaskInfoQueryResultApplyButton,
   EnumTaskCheckReceiveMethod,
+  EnumReadScene,
 } from '@12333/constants';
 import { useAccessLogin } from '@/hooks';
 import { useTaskInfo } from '@12333/hooks';
@@ -142,8 +143,12 @@
 const router = Taro.useRouter();
 const id = router.params?.id ?? '';
 const from = router.params?.from ?? '';
+const readScene = router.params?.readScene ?? '';
 
-const { isLoading, isError, detail, refetch, isContainCheckIn } = useTaskInfo({ id });
+const { isLoading, isError, detail, refetch, isContainCheckIn } = useTaskInfo({
+  id,
+  readScene: readScene,
+});
 
 const { isCollapse, setTrue } = useToggle();
 
diff --git a/apps/underTakeMiniApp/src/constants/app.ts b/apps/underTakeMiniApp/src/constants/app.ts
index c948dea..f361721 100644
--- a/apps/underTakeMiniApp/src/constants/app.ts
+++ b/apps/underTakeMiniApp/src/constants/app.ts
@@ -5,3 +5,6 @@
   clientType: EnumClientType.Wxmp,
   enterpriseType: EnumEnterpriseType.Supplier,
 };
+
+export const APP_ENV = process.env.APP_ENV;
+export const NODE_ENV = process.env.NODE_ENV;
diff --git a/apps/underTakeMiniApp/src/hooks/user.ts b/apps/underTakeMiniApp/src/hooks/user.ts
index 100955b..61c3123 100644
--- a/apps/underTakeMiniApp/src/hooks/user.ts
+++ b/apps/underTakeMiniApp/src/hooks/user.ts
@@ -19,12 +19,17 @@
     return userDetail.value?.enterpriseIsReal;
   });
 
+  const isBindWechat = computed(() => {
+    return userDetail.value?.bindWxmpId;
+  });
+
   return {
     user: userInfo,
     userDetail: userDetail,
     updateUserInfo,
     isCertified,
     locationCity,
+    isBindWechat,
   };
 }
 
diff --git a/apps/underTakeMiniApp/src/subpackages/login/authorization/authorization.vue b/apps/underTakeMiniApp/src/subpackages/login/authorization/authorization.vue
index 56640a5..cd8af0c 100644
--- a/apps/underTakeMiniApp/src/subpackages/login/authorization/authorization.vue
+++ b/apps/underTakeMiniApp/src/subpackages/login/authorization/authorization.vue
@@ -25,7 +25,7 @@
       v-model="state.policyChecked"
       policyBtnText="鑻ユ墜鏈哄彿鏈敞鍐岋紝灏嗕负鎮ㄧ洿鎺ユ敞鍐岃处鍙凤紝娉ㄥ唽鍗充负鍚屾剰"
     />
-    <div class="other-login-channel-wrapper" v-if="!isLoginByWeb">
+    <div class="other-login-channel-wrapper" v-if="NODE_ENV === 'development'">
       <nut-divider>鍏朵粬鐧诲綍鏂瑰紡</nut-divider>
       <div class="other-login-channel-list">
         <div class="other-login-channel-list-item" @click="goLoginByForm()">
@@ -62,6 +62,7 @@
 import { LoginFormTabs } from '../constants';
 import * as authServices from '@12333/services/apiV2/auth';
 import { subscribeMessageTemplateIdsForU } from '@12333/constants';
+import { NODE_ENV } from '@/constants';
 
 defineOptions({
   name: 'authorization',
@@ -167,34 +168,12 @@
   } catch (error) {}
 }
 
-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 = subscribeMessageTemplateIdsForU
-        .map((id) => res.subscriptionsSetting.itemSettings[id] !== 'accept')
-        .filter(Boolean);
-    }
-    if (setting.length > 0) {
-      Taro.requestSubscribeMessage({
-        tmplIds: subscribeMessageTemplateIdsForU,
-        success: function (res) {
-          console.log('res: ', res);
-        },
-      });
-    }
-    Message.success('鎺堟潈鐧诲綍鎴愬姛', {
-      onClosed: () => {
-        jump();
-      },
-    });
-  } catch (error) {}
+function handleLoginSuccess() {
+  Message.success('鎺堟潈鐧诲綍鎴愬姛', {
+    onClosed: () => {
+      jump();
+    },
+  });
 }
 
 function goLoginByForm(tab = LoginFormTabs.VerificationCodeLogin) {
diff --git a/apps/underTakeMiniApp/src/subpackages/mine/setting/setting.vue b/apps/underTakeMiniApp/src/subpackages/mine/setting/setting.vue
index 11b99e2..91110b0 100644
--- a/apps/underTakeMiniApp/src/subpackages/mine/setting/setting.vue
+++ b/apps/underTakeMiniApp/src/subpackages/mine/setting/setting.vue
@@ -10,6 +10,7 @@
       </ListItem> -->
       <ListItem title="鐢ㄦ埛鍗忚" @click="goMineUserPolicy"></ListItem>
       <ListItem title="闅愮鏀跨瓥" @click="goPrivacyPolicy"></ListItem>
+      <ListItem title="寰俊瑙g粦" @click="handleUnbindWechat"></ListItem>
       <ListItem title="閫�鍑虹櫥褰�" @click="handleLoginout"></ListItem>
     </List>
   </PageLayout>
@@ -22,16 +23,18 @@
 import { useUserStore } from '@/stores/modules/user';
 import { useQueryClient } from '@tanstack/vue-query';
 import Taro from '@tarojs/taro';
+import * as authServices from '@12333/services/apiV2/auth';
 
 defineOptions({
   name: 'setting',
 });
 
 const userStore = useUserStore();
+const { isBindWechat } = useUser();
 const queryClient = useQueryClient();
 
 const userAccount = computed(() => {
-  return addStarForString(userStore?.userDetail?.userName, 4, 8);
+  return addStarForString(userStore?.userDetail?.name, 4, 8);
 });
 
 function goMineUserPolicy() {
@@ -54,6 +57,21 @@
     queryClient.removeQueries();
   } catch (error) {}
 }
+
+async function handleUnbindWechat() {
+  try {
+    if (!isBindWechat) {
+      Message.error('鎮ㄨ繕娌℃湁缁戝畾寰俊');
+      return;
+    }
+    await Message.confirm({ message: '纭畾瑕佽В缁戝井淇″悧锛�' });
+    let params: API.UnBindUserWxmpIdCommand = {};
+    let res = await authServices.unBindUserWxmpId(params);
+    if (res) {
+      Message.success('瑙g粦鎴愬姛');
+    }
+  } catch (error) {}
+}
 </script>
 
 <style lang="scss">
diff --git a/packages/components/src/Card/TaskCard.vue b/packages/components/src/Card/TaskCard.vue
index cf9cc09..d8f6899 100644
--- a/packages/components/src/Card/TaskCard.vue
+++ b/packages/components/src/Card/TaskCard.vue
@@ -1,5 +1,5 @@
 <template>
-  <div class="task-card-wrapper" :class="{ 'un-read': !isRead }">
+  <div class="task-card-wrapper" :class="{ 'un-read': unRead }">
     <div class="task-card-title-wrapper">
       <div class="task-card-title">{{ name }}</div>
       <slot name="title-right">
@@ -123,13 +123,13 @@
   createdTime?: string;
   hireStatus?: EnumTaskUserHireStatus;
 
-  isRead?: boolean;
+  unRead?: boolean;
 };
 
 const props = withDefaults(defineProps<Props>(), {
   showActions: true,
 
-  isRead: true,
+  unRead: false,
 });
 
 const emit = defineEmits<{
diff --git a/packages/constants/apiEnum.ts b/packages/constants/apiEnum.ts
index 586337d..d8f26f2 100644
--- a/packages/constants/apiEnum.ts
+++ b/packages/constants/apiEnum.ts
@@ -395,6 +395,16 @@
   Real = 100,
 }
 
+/** 宸茶鍦烘櫙 */
+export enum EnumReadScene {
+  /**C绔汉鍛� */
+  TaskUserApplyForPersonal = 0,
+  /**C绔汉鍛� */
+  TaskUserHirePassForPersonal = 1,
+  /**C绔汉鍛� */
+  TaskUserArrangePassForPersonal = 2,
+}
+
 /** 瀹炲悕閫氶亾 */
 export enum EnumRealAccess {
   /**涓婁笂绛� */
@@ -429,36 +439,38 @@
   CommonServerSmsUtils = 10,
   /**閰嶇疆 */
   CommonServerSettings = 11,
+  /**宸茶 */
+  CommonServerReadRecord = 12,
   /**鐢ㄦ埛璁よ瘉 */
-  UserServerAuth = 12,
+  UserServerAuth = 13,
   /**鐢ㄦ埛鑿滃崟 */
-  UserServerMenu = 13,
+  UserServerMenu = 14,
   /**鐢ㄦ埛璧勬簮 */
-  UserServerResource = 14,
+  UserServerResource = 15,
   /**鐢ㄦ埛瑙掕壊 */
-  UserServerRole = 15,
+  UserServerRole = 16,
   /**鐢ㄦ埛淇℃伅 */
-  UserServerUser = 16,
+  UserServerUser = 17,
   /**鐢ㄦ埛閽卞寘 */
-  UserServerUserWallet = 17,
+  UserServerUserWallet = 18,
   /**鐢靛瓙绛� */
-  UserServerElectronSign = 18,
+  UserServerElectronSign = 19,
   /**鐢ㄦ埛绠�鍘� */
-  UserServerUserResume = 19,
+  UserServerUserResume = 20,
   /**浼佷笟淇℃伅 */
-  UserServerEnterprise = 20,
+  UserServerEnterprise = 21,
   /**浼佷笟閽卞寘 */
-  UserServerEnterpriseWallet = 21,
+  UserServerEnterpriseWallet = 22,
   /**浼佷笟鍚堜綔閽卞寘 */
-  UserServerEnterpriseCooperationWallet = 22,
+  UserServerEnterpriseCooperationWallet = 23,
   /**鐏靛伐淇℃伅 */
-  UserServerEnterpriseEmployee = 23,
+  UserServerEnterpriseEmployee = 24,
   /**鐢靛瓙绛� */
-  ElectronSignServerElectronSign = 24,
+  ElectronSignServerElectronSign = 25,
   /**鐭俊 */
-  ToolServerSms = 25,
+  ToolServerSms = 26,
   /**灏忕▼搴� */
-  ToolServerWxmp = 26,
+  ToolServerWxmp = 27,
 }
 
 /** 璧勬簮璇锋眰鏂瑰紡 */
@@ -639,6 +651,8 @@
   Pass = 20,
   /**宸茶阿缁� */
   Refuse = 30,
+  /**宸插彇娑� */
+  Cancel = 40,
 }
 
 /** 浠诲姟鐢ㄦ埛绛剧害鐘舵�� */
@@ -895,22 +909,6 @@
   VERIFY_FAIL = 1,
   /**楠岃瘉涓紝鍟嗘埛鍙彂璧锋彁鐜板皾璇� */
   VERIFYING = 2,
-}
-
-/** 寰俊灏忕▼搴忚闃呮秷鎭ā鏉� */
-export enum EnumWxmpSubscribMessageTemplate {
-  /**鏀粯鎴愬姛鎻愰啋  缁撶畻瀹屾垚鍚庡悜鎵挎徑绔鐞嗗憳鎺ㄩ�� */
-  SettlementCompletedToSupplier = 0,
-  /**鎶ラ叕缁撶畻瀹℃牳缁撴灉閫氱煡  鐢叉柟缁撶畻纭鍚庡悜鎵挎徑绔鐞嗗憳鎺ㄩ�� */
-  SettlementAuditCompletedToSupplier = 1,
-  /**宸ヨ祫鍙戞斁閫氱煡  缁撶畻瀹屾垚鍚庡悜C绔汉鍛橀�氱煡 */
-  SettlementReceiveCompletedToUser = 2,
-  /**鎶ュ悕褰曠敤缁撴灉閫氱煡  琚綍鐢ㄥ悗鍚慍绔汉鍛橀�氱煡 */
-  HireCompletedToUser = 3,
-  /**鎺掔彮鎴愬姛閫氱煡  鎺掔彮鍚庡悜C绔汉鍛橀�氱煡 */
-  ArrangeCompletedToUser = 4,
-  /**娴嬭瘯 */
-  Test = 5,
 }
 
 /** 鎴戠殑鎶ュ悕鍒嗛〉鍒楄〃-鐘舵�� */
diff --git a/packages/hooks/task.ts b/packages/hooks/task.ts
index 58642d8..3e2af80 100644
--- a/packages/hooks/task.ts
+++ b/packages/hooks/task.ts
@@ -10,6 +10,7 @@
   EnumTaskStatus,
   EnumUserGender,
   EnumTaskUserApplyStatus,
+  EnumReadScene,
 } from '@12333/constants';
 import _ from 'lodash';
 import { OrderUtils, trim } from '@12333/utils';
@@ -228,24 +229,28 @@
 
 type UseTaskInfoOptions = {
   id: MaybeRef<string>;
+  readScene?: string | EnumReadScene;
   onSuccess?: (data: API.GetTaskInfoQueryResult) => any;
 };
 
-export function useTaskInfo({ id, onSuccess }: UseTaskInfoOptions) {
+export function useTaskInfo({ id, readScene, onSuccess }: UseTaskInfoOptions) {
   const {
     isLoading,
     isError,
     data: detail,
     refetch,
   } = useQuery({
-    queryKey: ['taskServices/getTaskInfo', id],
+    queryKey: ['taskServices/getTaskInfo', id, readScene],
     queryFn: async () => {
-      return await taskServices.getTaskInfo(
-        { id: unref(id) },
-        {
-          showLoading: false,
-        }
-      );
+      const params: API.APIgetTaskInfoParams = {
+        id: unref(id),
+      };
+      if (!!readScene) {
+        params.readScene = Number(readScene);
+      }
+      return await taskServices.getTaskInfo(params, {
+        showLoading: false,
+      });
     },
     placeholderData: () => ({} as API.GetTaskInfoQueryResult),
     onSuccess(data) {
diff --git a/packages/services/apiV2/auth.ts b/packages/services/apiV2/auth.ts
index 29e4032..87bd6be 100644
--- a/packages/services/apiV2/auth.ts
+++ b/packages/services/apiV2/auth.ts
@@ -169,6 +169,21 @@
   });
 }
 
+/** 瑙g粦寰俊灏忕▼搴忓揩鎹风櫥褰� POST /api/user/auth/unBindUserWxmpId */
+export async function unBindUserWxmpId(
+  body: API.UnBindUserWxmpIdCommand,
+  options?: API.RequestConfig
+) {
+  return request<string>('/api/user/auth/unBindUserWxmpId', {
+    method: 'POST',
+    headers: {
+      'Content-Type': 'application/json-patch+json',
+    },
+    data: body,
+    ...(options || {}),
+  });
+}
+
 /** 鍙戦�佹洿鎹㈡墜鏈哄彿鐭俊 POST /api/user/auth/updatePhoneNumberVerifyCode */
 export async function updatePhoneNumberVerifyCode(
   body: API.UpdatePhoneNumberVerifyCodeCommand,
diff --git a/packages/services/apiV2/syncDatabase.ts b/packages/services/apiV2/syncDatabase.ts
index 2d526e7..b40e50d 100644
--- a/packages/services/apiV2/syncDatabase.ts
+++ b/packages/services/apiV2/syncDatabase.ts
@@ -2,21 +2,6 @@
 // @ts-ignore
 import { request } from '@/utils/request';
 
-/** 鍚屾鏁版嵁搴� POST /api/common/syncDatabase/sendWxmpSubscribMessage */
-export async function sendWxmpSubscribMessage(
-  body: API.SendWxmpSubscribMessageCommand,
-  options?: API.RequestConfig
-) {
-  return request<boolean>('/api/common/syncDatabase/sendWxmpSubscribMessage', {
-    method: 'POST',
-    headers: {
-      'Content-Type': 'application/json-patch+json',
-    },
-    data: body,
-    ...(options || {}),
-  });
-}
-
 /** 鍚屾鏁版嵁搴� POST /api/common/syncDatabase/syncDatabase */
 export async function syncDatabase(body: API.SyncDatabaseCommand, options?: API.RequestConfig) {
   return request<number>('/api/common/syncDatabase/syncDatabase', {
diff --git a/packages/services/apiV2/task.ts b/packages/services/apiV2/task.ts
index 05569e2..5ec27db 100644
--- a/packages/services/apiV2/task.ts
+++ b/packages/services/apiV2/task.ts
@@ -281,6 +281,24 @@
   });
 }
 
+/** 鏌ヨ鍙戞斁鏄庣粏鎶ヨ〃鍒嗛〉鍒楄〃鏁版嵁 POST /api/flexjob/task/getTaskSettlementReleaseReports */
+export async function getTaskSettlementReleaseReports(
+  body: API.GetTaskSettlementReleaseReportsQuery,
+  options?: API.RequestConfig
+) {
+  return request<API.GetTaskSettlementReleaseReportsQueryResult>(
+    '/api/flexjob/task/getTaskSettlementReleaseReports',
+    {
+      method: 'POST',
+      headers: {
+        'Content-Type': 'application/json-patch+json',
+      },
+      data: body,
+      ...(options || {}),
+    }
+  );
+}
+
 /** 瀵煎叆缁撶畻鍚嶅崟 POST /api/flexjob/task/importTaskSettlementOrderRosters */
 export async function importTaskSettlementOrderRosters(
   body: API.ImportTaskSettlementOrderRostersCommand,
diff --git a/packages/services/apiV2/typings.d.ts b/packages/services/apiV2/typings.d.ts
index d58f216..6ae7cfb 100644
--- a/packages/services/apiV2/typings.d.ts
+++ b/packages/services/apiV2/typings.d.ts
@@ -317,6 +317,8 @@
   interface APIgetTaskInfoParams {
     /** Id */
     id?: string;
+    /** 鍦烘櫙 */
+    readScene?: EnumReadScene;
   }
 
   interface APIgetTaskSelectParams {
@@ -1140,6 +1142,15 @@
     Real = 100,
   }
 
+  enum EnumReadScene {
+    /**C绔汉鍛� */
+    TaskUserApplyForPersonal = 0,
+    /**C绔汉鍛� */
+    TaskUserHirePassForPersonal = 1,
+    /**C绔汉鍛� */
+    TaskUserArrangePassForPersonal = 2,
+  }
+
   enum EnumRealAccess {
     /**涓婁笂绛� */
     BestSign = 10,
@@ -1172,36 +1183,38 @@
     CommonServerSmsUtils = 10,
     /**閰嶇疆 */
     CommonServerSettings = 11,
+    /**宸茶 */
+    CommonServerReadRecord = 12,
     /**鐢ㄦ埛璁よ瘉 */
-    UserServerAuth = 12,
+    UserServerAuth = 13,
     /**鐢ㄦ埛鑿滃崟 */
-    UserServerMenu = 13,
+    UserServerMenu = 14,
     /**鐢ㄦ埛璧勬簮 */
-    UserServerResource = 14,
+    UserServerResource = 15,
     /**鐢ㄦ埛瑙掕壊 */
-    UserServerRole = 15,
+    UserServerRole = 16,
     /**鐢ㄦ埛淇℃伅 */
-    UserServerUser = 16,
+    UserServerUser = 17,
     /**鐢ㄦ埛閽卞寘 */
-    UserServerUserWallet = 17,
+    UserServerUserWallet = 18,
     /**鐢靛瓙绛� */
-    UserServerElectronSign = 18,
+    UserServerElectronSign = 19,
     /**鐢ㄦ埛绠�鍘� */
-    UserServerUserResume = 19,
+    UserServerUserResume = 20,
     /**浼佷笟淇℃伅 */
-    UserServerEnterprise = 20,
+    UserServerEnterprise = 21,
     /**浼佷笟閽卞寘 */
-    UserServerEnterpriseWallet = 21,
+    UserServerEnterpriseWallet = 22,
     /**浼佷笟鍚堜綔閽卞寘 */
-    UserServerEnterpriseCooperationWallet = 22,
+    UserServerEnterpriseCooperationWallet = 23,
     /**鐏靛伐淇℃伅 */
-    UserServerEnterpriseEmployee = 23,
+    UserServerEnterpriseEmployee = 24,
     /**鐢靛瓙绛� */
-    ElectronSignServerElectronSign = 24,
+    ElectronSignServerElectronSign = 25,
     /**鐭俊 */
-    ToolServerSms = 25,
+    ToolServerSms = 26,
     /**灏忕▼搴� */
-    ToolServerWxmp = 26,
+    ToolServerWxmp = 27,
   }
 
   enum EnumResourceMethod {
@@ -1364,6 +1377,8 @@
     Pass = 20,
     /**宸茶阿缁� */
     Refuse = 30,
+    /**宸插彇娑� */
+    Cancel = 40,
   }
 
   enum EnumTaskUserSignContractStatus {
@@ -1599,21 +1614,6 @@
     VERIFY_FAIL = 1,
     /**楠岃瘉涓紝鍟嗘埛鍙彂璧锋彁鐜板皾璇� */
     VERIFYING = 2,
-  }
-
-  enum EnumWxmpSubscribMessageTemplate {
-    /**鏀粯鎴愬姛鎻愰啋  缁撶畻瀹屾垚鍚庡悜鎵挎徑绔鐞嗗憳鎺ㄩ�� */
-    SettlementCompletedToSupplier = 0,
-    /**鎶ラ叕缁撶畻瀹℃牳缁撴灉閫氱煡  鐢叉柟缁撶畻纭鍚庡悜鎵挎徑绔鐞嗗憳鎺ㄩ�� */
-    SettlementAuditCompletedToSupplier = 1,
-    /**宸ヨ祫鍙戞斁閫氱煡  缁撶畻瀹屾垚鍚庡悜C绔汉鍛橀�氱煡 */
-    SettlementReceiveCompletedToUser = 2,
-    /**鎶ュ悕褰曠敤缁撴灉閫氱煡  琚綍鐢ㄥ悗鍚慍绔汉鍛橀�氱煡 */
-    HireCompletedToUser = 3,
-    /**鎺掔彮鎴愬姛閫氱煡  鎺掔彮鍚庡悜C绔汉鍛橀�氱煡 */
-    ArrangeCompletedToUser = 4,
-    /**娴嬭瘯 */
-    Test = 5,
   }
 
   interface ExportEnterpriseBalanceDetailsCommand {
@@ -2944,6 +2944,24 @@
     timestamp?: number;
   }
 
+  interface FriendlyResultGetTaskSettlementReleaseReportsQueryResult {
+    /** 璺熻釜Id */
+    traceId?: string;
+    /** 鐘舵�佺爜 */
+    code?: number;
+    /** 閿欒鐮� */
+    errorCode?: string;
+    data?: GetTaskSettlementReleaseReportsQueryResult;
+    /** 鎵ц鎴愬姛 */
+    success?: boolean;
+    /** 閿欒淇℃伅 */
+    msg?: any;
+    /** 闄勫姞鏁版嵁 */
+    extras?: any;
+    /** 鏃堕棿鎴� */
+    timestamp?: number;
+  }
+
   interface FriendlyResultGetTaskUserHireStatusQueryResult {
     /** 璺熻釜Id */
     traceId?: string;
@@ -4183,6 +4201,8 @@
     /** 鏈�杩戦獙鏀舵椂闂� */
     lastCheckReceiveTime?: string;
     checkedStatus?: EnumGetCheckReceiveTasksQueryResultItemCheckStatus;
+    /** 浜哄憳鏁伴噺 */
+    arrangeUserCount?: number;
   }
 
   interface GetCheckReceiveTaskUserSubmitCheckHistoriesQuery {
@@ -5028,6 +5048,8 @@
     collectedUserCount?: number;
     /** 鑱旂郴璁板綍 */
     contactedRecordCount?: number;
+    /** 缁戝畾寰俊蹇嵎鐧诲綍 */
+    bindWxmpId?: boolean;
   }
 
   interface GetEnterpriseQueryResult {
@@ -5881,6 +5903,8 @@
     /** 浠诲姟鍦扮偣鍚嶇О */
     addressName?: string;
     status?: GetPersonalApplyTaskInfosQueryStatus;
+    /** 鏈 */
+    unRead?: boolean;
   }
 
   enum GetPersonalApplyTaskInfosQueryStatus {
@@ -5992,6 +6016,8 @@
     /** 浠诲姟鍦扮偣鍚嶇О */
     addressName?: string;
     status?: GetPersonalHireTaskInfosQueryStatus;
+    /** 鏈 */
+    unRead?: boolean;
   }
 
   enum GetPersonalHireTaskInfosQueryStatus {
@@ -6244,8 +6270,6 @@
     code?: string;
     /** 浠诲姟鍚嶇О */
     taskName?: string;
-    /** 浠诲姟鍗曞彿 */
-    taskCode?: string;
     /** 浼佷笟鍚嶇О */
     enterpriseName?: string;
     /** 缁撶畻鏃ユ湡 */
@@ -7060,6 +7084,8 @@
     status?: EnumTaskStatus;
     releaseStatus?: EnumTaskReleaseStatus;
     hireStatus?: EnumTaskUserHireStatus;
+    /** 褰曠敤澶囨敞 */
+    hireRemark?: string;
     /** 鐏靛伐Id */
     enterpriseEmployeeId?: string;
     applyButton?: GetTaskInfoQueryResultApplyButton;
@@ -7233,6 +7259,33 @@
     code?: string;
     /** 浠诲姟鍚嶇О */
     name?: string;
+  }
+
+  interface GetTaskSettlementReleaseReportsQuery {
+    /** 寮�濮嬫棩鏈� */
+    startMonth?: string;
+    /** 缁撴潫鏃ユ湡 */
+    endMonth?: string;
+    pageModel?: PagedListQueryPageModel;
+  }
+
+  interface GetTaskSettlementReleaseReportsQueryResult {
+    pageModel?: PagedListQueryResultPageModel;
+    /** 鏁版嵁 */
+    data?: GetTaskSettlementReleaseReportsQueryResultItem[];
+  }
+
+  interface GetTaskSettlementReleaseReportsQueryResultItem {
+    /** 鏃ユ湡 */
+    month?: string;
+    /** 鍙戞斁閲戦 */
+    amount?: number;
+    /** 鍙戞斁浜烘暟 */
+    peopleCount?: number;
+    /** 鐢熸垚鏃ユ湡 */
+    createdTime?: string;
+    /** 姹囨�昏〃鏍� */
+    url?: string;
   }
 
   interface GetTaskUserHireStatusQueryResult {
@@ -7955,6 +8008,8 @@
   }
 
   interface PasswordLoginCommand {
+    /** 鐢ㄦ埛鐧诲綍鍑瘉 */
+    code?: string;
     /** 璐﹀彿 */
     userName: string;
     /** 瀵嗙爜 */
@@ -8747,18 +8802,6 @@
     phoneNumber: string;
   }
 
-  interface SendWxmpSubscribMessageCommand {
-    /** 灏忕▼搴忕紪鍙� */
-    wxmpCode: string;
-    template: EnumWxmpSubscribMessageTemplate;
-    /** 鐐瑰嚮妯℃澘鍗$墖鍚庣殑璺宠浆椤甸潰锛屼粎闄愭湰灏忕▼搴忓唴鐨勯〉闈€�傛敮鎸佸甫鍙傛暟,锛堢ず渚媔ndex?foo=bar锛夈�傝瀛楁涓嶅~鍒欐ā鏉挎棤璺宠浆 */
-    page?: string;
-    /** 鎺ユ敹鑰咃紙鐢ㄦ埛锛夌殑 openid */
-    touser: string;
-    /** 妯℃澘鍐呭锛屾牸寮忓舰濡倇 "phrase3": { "value": "瀹℃牳閫氳繃" }, "name1": { "value": "璁㈤槄" }, "date2": { "value": "2019-12-25 09:42" } } */
-    data: any;
-  }
-
   interface SetDictionaryDataIsDisabledCommand {
     ids?: string[];
     /** 鏄惁宸茬鐢� */
@@ -8835,6 +8878,8 @@
     /** 浠诲姟浜哄憳Id */
     id?: string;
     hireStatus?: EnumTaskUserHireStatus;
+    /** 褰曠敤澶囨敞 */
+    hireRemark?: string;
   }
 
   enum SettlementReceiveStatus {
@@ -9080,6 +9125,8 @@
 
   type TestEventCommand = Record<string, any>;
 
+  type UnBindUserWxmpIdCommand = Record<string, any>;
+
   interface UpdateEnterpriseWeChatPayWalletBankAccountInfoCommand {
     /** 浼佷笟Id */
     enterpriseId?: string;

--
Gitblit v1.9.1