From c848d51eb43c87463fc8ce0b8e4996bb3f80894c Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期三, 22 十月 2025 18:39:24 +0800
Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/flexJobAdminBClient

---
 src/views/FlexJobManage/FlexJobManage.vue                         |   53 ++++++++++++++++++++++++++
 src/views/ServiceChargeManage/ServiceChargeDetail.vue             |    1 
 src/views/EmploymentManage/TaskManageList.vue                     |    4 +
 src/views/EmploymentManage/CheckReceiveTaskDetail.vue             |   10 +++-
 src/views/EmploymentManage/components/AddOrEditEmploymentView.vue |   12 ++++-
 src/views/EmploymentManage/CheckManage.vue                        |    4 +
 src/views/UserManage/UserManageList.vue                           |   33 +++++++++++++++-
 7 files changed, 107 insertions(+), 10 deletions(-)

diff --git a/src/views/EmploymentManage/CheckManage.vue b/src/views/EmploymentManage/CheckManage.vue
index 438e1b8..a6a5623 100644
--- a/src/views/EmploymentManage/CheckManage.vue
+++ b/src/views/EmploymentManage/CheckManage.vue
@@ -164,7 +164,9 @@
       serviceFee: {
         type: 'money',
         formatter: (row) => {
-          return `${row.serviceFee}${EnumBillingMethodUnitText[row.billingMethod]}`;
+          return row.billingMethod === EnumBillingMethod.Face
+            ? ''
+            : `${row.serviceFee}${EnumBillingMethodUnitText[row.billingMethod]}`;
         },
       },
       settlementCycle: { type: 'enum', valueEnum: EnumSettlementCycleText },
diff --git a/src/views/EmploymentManage/CheckReceiveTaskDetail.vue b/src/views/EmploymentManage/CheckReceiveTaskDetail.vue
index b56f43e..ad67149 100644
--- a/src/views/EmploymentManage/CheckReceiveTaskDetail.vue
+++ b/src/views/EmploymentManage/CheckReceiveTaskDetail.vue
@@ -1,5 +1,5 @@
 <template>
-  <LoadingLayout :loading="state.loading">
+  <LoadingLayout v-loading="state.loading">
     <AppContainer>
       <el-card class="query-filter-bar-wrapper" shadow="never">
         <ProForm :model="taskInfo" is-read>
@@ -16,7 +16,11 @@
             </ProFormColItem>
             <ProFormColItem :span="8">
               <ProFormItemV2 label="鏈嶅姟璐归噾棰�:">
-                {{ `${taskInfo.serviceFee}${EnumBillingMethodUnitText[taskInfo.billingMethod]}` }}
+                {{
+                  taskInfo.billingMethod === EnumBillingMethod.Face
+                    ? EnumBillingMethodText[taskInfo.billingMethod]
+                    : `${taskInfo.serviceFee}${EnumBillingMethodUnitText[taskInfo.billingMethod]}`
+                }}
               </ProFormItemV2>
             </ProFormColItem>
           </ProFormCol>
@@ -70,7 +74,7 @@
 import * as taskServices from '@/services/api/task';
 import { useQuery } from '@tanstack/vue-query';
 import { CheckReceiveTaskDetailColumns } from './constants';
-import { EnumBillingMethodUnitText } from '@/constants';
+import { EnumBillingMethodUnitText, EnumBillingMethod, EnumBillingMethodText } from '@/constants';
 import dayjs from 'dayjs';
 import CheckManageDialog from './components/CheckManageDialog.vue';
 import ManualCheckManageDialog from './components/ManualCheckManageDialog.vue';
diff --git a/src/views/EmploymentManage/TaskManageList.vue b/src/views/EmploymentManage/TaskManageList.vue
index a19bbc4..f6f6850 100644
--- a/src/views/EmploymentManage/TaskManageList.vue
+++ b/src/views/EmploymentManage/TaskManageList.vue
@@ -226,7 +226,9 @@
       serviceFee: {
         type: 'money',
         formatter: (row) => {
-          return `${row.serviceFee}${EnumBillingMethodUnitText[row.billingMethod]}`;
+          return row.billingMethod === EnumBillingMethod.Face
+            ? ''
+            : `${row.serviceFee}${EnumBillingMethodUnitText[row.billingMethod]}`;
         },
       },
       applyBeginTime: { type: 'date', format: 'YYYY-MM-DD' },
diff --git a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
index 31a7f8c..c0d783d 100644
--- a/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
+++ b/src/views/EmploymentManage/components/AddOrEditEmploymentView.vue
@@ -25,7 +25,7 @@
                       if (!form.billingMethod) {
                         callback(new Error('璇烽�夋嫨鏈嶅姟璐圭被鍨�'));
                       }
-                      if (!form.serviceFee) {
+                      if (!form.serviceFee && form.billingMethod !== EnumBillingMethod.Face) {
                         callback(new Error('璇疯緭鍏ユ湇鍔¤垂'));
                       }
                       callback();
@@ -42,6 +42,7 @@
                 >
                   <template #extra>
                     <ProFormInputNumber
+                      v-if="form.billingMethod !== EnumBillingMethod.Face"
                       :controls="false"
                       v-model="form.serviceFee"
                       placeholder="璇疯緭鍏�"
@@ -278,6 +279,7 @@
                   start-placeholder="寮�濮嬫棩鏈�"
                   end-placeholder="缁撴潫鏃ユ湡"
                   :disabled-date="disabledDate"
+                  @change="handleTimeChange"
                 ></ProFormDatePicker>
               </ProFormItemV2>
             </ProFormColItem>
@@ -392,11 +394,11 @@
 }
 
 function disabledapplyDate(time: Date) {
-  return dayjs(time).isBefore(form.time[0], 'day') || dayjs(time).isAfter(form.time[1], 'day');
+  return dayjs(time).isAfter(dayjs(form.time[1]), 'day') || dayjs(time).isBefore(dayjs(), 'day');
 }
 
 const feeCannotEdit = computed(() => {
-  return dayjs(form.time[0]).isBefore(dayjs(), 'day');
+  return dayjs().isAfter(form.time[0], 'second') && isEdit;
 });
 
 const eventContext = useGlobalEventContext();
@@ -506,6 +508,10 @@
   form.settlementDate = null as number;
 }
 
+function handleTimeChange() {
+  form.applyTime = [] as unknown as ModelValueType;
+}
+
 function handleBack() {
   closeViewPush(route, {
     name: 'TaskManageList',
diff --git a/src/views/FlexJobManage/FlexJobManage.vue b/src/views/FlexJobManage/FlexJobManage.vue
index d27bffd..b4522c1 100644
--- a/src/views/FlexJobManage/FlexJobManage.vue
+++ b/src/views/FlexJobManage/FlexJobManage.vue
@@ -84,6 +84,7 @@
           <el-button @click="handleBatchUnSign()" type="primary">鎵归噺瑙g害</el-button>
           <el-button @click="handleSendShotMessage()" type="primary">鐭俊鍙戦��</el-button>
           <el-button @click="handleBatchSign()" type="primary">鎵归噺绛剧害</el-button>
+          <el-button @click="handleEnterpriseBatchSign()" type="primary">鎵归噺浼佷笟绛剧害</el-button>
         </template>
       </ProTableQueryFilterBar>
       <ProTableV2
@@ -138,6 +139,7 @@
 import SignDialog from './components/SignDialog.vue';
 import * as enterpriseEmployeeServices from '@/services/api/enterpriseEmployee';
 import { ModelValueType } from 'element-plus';
+import _ from 'lodash';
 
 defineOptions({
   name: 'FlexJobManageList',
@@ -512,6 +514,57 @@
   }
 }
 
+const handleEnterpriseBatchSign = _.debounce(
+  () => {
+    const selectionRows = getSelectionRows();
+    if (selectionRows) {
+      const hasSigned = selectionRows?.some(
+        (x) =>
+          !(
+            x.userSignContractStatus === EnumTaskUserSignContractStatus.Pass &&
+            x.enterpriseSignContractStatus === EnumTaskUserSignContractStatus.Wait
+          )
+      );
+      if (hasSigned) {
+        Message.warnMessage('鍕鹃�変汉鍛樹腑鍖呭惈宸蹭紒涓氱绾︺�佹湭褰曠敤浜哄憳鎴栨湭绛剧害瀹屾垚浜哄憳');
+        return;
+      }
+      const ids = selectionRows.map((x) => x.id);
+      handleBatchEnterpriseSign(ids);
+    }
+  },
+  1000,
+  { leading: true, trailing: false }
+);
+
+async function handleBatchEnterpriseSign(ids: string[]) {
+  try {
+    state.loading = true;
+    let res = await enterpriseEmployeeServices.batchEnterpriseSignContract({ ids: ids });
+    if (res) {
+      Message.successMessage('鎿嶄綔鎴愬姛');
+      getList(paginationState.pageIndex);
+      if (res?.errors?.length > 0) {
+        Message.tipMessage('瀛樺湪绛剧害澶辫触鐨勭伒宸ヤ俊鎭暟鎹紝鏄惁瀵煎嚭锛�').then(() => {
+          XLSXUtils.exportToXLSX({
+            workbookDataList: res.errors,
+            fileName: '绛剧害澶辫触鐏靛伐淇℃伅',
+            workbookHeaderMap: {
+              name: '濮撳悕',
+              contactPhoneNumber: '鎵嬫満鍙�',
+              identity: '韬唤璇佸彿',
+              errorMessages: '閿欒淇℃伅',
+            },
+          });
+        });
+      }
+    }
+  } catch (error) {
+  } finally {
+    state.loading = false;
+  }
+}
+
 async function signContract() {
   try {
     let params: API.InviteElectronSignCommand = {
diff --git a/src/views/ServiceChargeManage/ServiceChargeDetail.vue b/src/views/ServiceChargeManage/ServiceChargeDetail.vue
index 440afdb..ea1a5ec 100644
--- a/src/views/ServiceChargeManage/ServiceChargeDetail.vue
+++ b/src/views/ServiceChargeManage/ServiceChargeDetail.vue
@@ -414,6 +414,7 @@
               bank: '鎵�灞為摱琛�',
               bankBranch: '鎵�灞炴敮琛�',
               receiveAccount: '鏀舵璐︽埛',
+              totalWorkHours: '绱宸ユ椂锛堝皬鏃讹級',
               settlementAmount: '缁撶畻閲戦',
               actualSettlementAmount: '瀹炲彂閲戦',
               errorMessage: '閿欒淇℃伅',
diff --git a/src/views/UserManage/UserManageList.vue b/src/views/UserManage/UserManageList.vue
index 17fec99..10d42bb 100644
--- a/src/views/UserManage/UserManageList.vue
+++ b/src/views/UserManage/UserManageList.vue
@@ -22,6 +22,16 @@
         :columns="UserManageColumns"
         :operationBtns="operationBtns"
       >
+        <template #status="{ row }">
+          <FieldSwitch
+            v-model="row.status"
+            active-text="鍚敤"
+            :active-value="EnumUserStatus.Normal"
+            inactive-text="绂佺敤"
+            :inactive-value="EnumUserStatus.Disabled"
+            :before-change="() => setUserInfoStatus(row)"
+          />
+        </template>
       </ProTableV2>
     </AppContainer>
     <AddOrEditUserDialog v-bind="dialogProps" />
@@ -43,10 +53,11 @@
   useTable,
   useFormDialog,
   defineOperationBtns,
+  FieldSwitch,
 } from '@bole-core/components';
 import * as userServices from '@/services/api/user';
 import { UserManageColumns } from './constants';
-import { EnumUserStatusText } from '@/constants';
+import { EnumUserStatus, EnumUserStatusText } from '@/constants';
 import { ModelValueType } from 'element-plus';
 import { Message } from '@bole-core/core';
 import AddOrEditUserDialog from './components/AddOrEditUserDialog.vue';
@@ -141,7 +152,7 @@
         formatter: (role: API.GetOperationUserInfosQueryResultItem) =>
           role.roles?.length > 0 ? role.roles.map((x) => x.name).join(',') : '',
       },
-      status: { type: 'enum', valueEnum: EnumUserStatusText },
+      // status: { type: 'enum', valueEnum: EnumUserStatusText },
     },
   }
 );
@@ -257,6 +268,24 @@
   });
 }
 
+async function setUserInfoStatus(row: API.GetOperationUserInfosQueryResultItem) {
+  try {
+    await Message.tipMessage(
+      `纭瑕�${row.status === EnumUserStatus.Normal ? '绂佺敤' : '鍚敤'}璇ョ敤鎴峰悧锛焋
+    );
+    const res = await userServices.setUserInfoStatus({
+      ids: [row.id],
+      status:
+        row.status === EnumUserStatus.Normal ? EnumUserStatus.Disabled : EnumUserStatus.Normal,
+    });
+    if (res) {
+      getList(paginationState.pageIndex);
+      Message.successMessage(`鎿嶄綔鎴愬姛`);
+      return !!res;
+    }
+  } catch (error) {}
+}
+
 async function resetPassword() {
   try {
     let params: API.ResetUserPasswordsCommand = {

--
Gitblit v1.9.1