From f9a12ecb4ea4b7b103b50634335704140237fef7 Mon Sep 17 00:00:00 2001
From: 朱桂飞 <zhuguifei@zhuguifeideMacBook-Air.local>
Date: 星期三, 19 二月 2025 15:11:28 +0800
Subject: [PATCH] 完成工具借用、归还相关

---
 eims-ui/apps/web-antd/src/views/eims/fixture/index.vue |   84 +++++++++++++++++++++++++++++++++--------
 1 files changed, 67 insertions(+), 17 deletions(-)

diff --git a/eims-ui/apps/web-antd/src/views/eims/fixture/index.vue b/eims-ui/apps/web-antd/src/views/eims/fixture/index.vue
index 76e3dde..022cd7f 100644
--- a/eims-ui/apps/web-antd/src/views/eims/fixture/index.vue
+++ b/eims-ui/apps/web-antd/src/views/eims/fixture/index.vue
@@ -1,11 +1,12 @@
 <script setup lang="ts">
 import type { Recordable } from '@vben/types';
 
-import { onMounted, ref } from 'vue';
-import { useRouter } from 'vue-router';
+import { computed, onMounted, ref } from 'vue';
 
+import { useAccess } from '@vben/access';
 import { Page, useVbenDrawer, useVbenModal, type VbenFormProps } from '@vben/common-ui';
 import { $t } from '@vben/locales';
+import { useUserStore } from '@vben/stores';
 import { addFullName, getPopupContainer, getVxePopupContainer } from '@vben/utils';
 
 import { Modal, Popconfirm, Space } from 'ant-design-vue';
@@ -14,14 +15,21 @@
 import { delFixture, fixtureExport, listFixture } from '#/api/eims/fixture';
 import { getDeptTree, userList } from '#/api/system/user';
 import { commonDownloadExcel } from '#/utils/file/download';
+import fixtureBorrowDrawer from '#/views/eims/fixture-borrow/fixture-borrow-drawer.vue';
 
 import { columns, querySchema } from './data';
 import fixtureDrawer from './fixture-drawer.vue';
 import fixtureImportModal from './fixture-import-modal.vue';
 import FixtureTypeTree from './fixture-type-tree.vue';
 
+const userStore = useUserStore();
+const userId = userStore.userInfo?.userId;
+
 // 宸﹁竟宸ュ叿绫诲瀷
 const selectTypeId = ref<string[]>([]);
+defineExpose({
+  tableSelect
+});
 
 const formOptions: VbenFormProps = {
   commonConfig: {
@@ -104,6 +112,10 @@
   connectedComponent: fixtureDrawer
 });
 
+const [FixtureBorrowDrawer, fixtureBorrowDrawerApi] = useVbenDrawer({
+  connectedComponent: fixtureBorrowDrawer
+});
+
 /**
  * 瀵煎叆
  */
@@ -143,17 +155,29 @@
     }
   });
 }
-
+function handleBorrow(row: Recordable<any>, status: string) {
+  if (userId === null || userId === undefined || userId === '') {
+    Modal.error({
+      content: '鑾峰彇鐢ㄦ埛淇℃伅澶辫触锛岃閲嶆柊鐧诲綍鍚庨噸璇曪紒',
+      title: '鎻愮ず'
+    });
+    return false;
+  }
+  // 宸ュ叿鍙拌处鍊熺敤鐘舵�乀ODO fixture_borrow_status 0-绌洪棽 1-鍊熷嚭
+  if (status === '0') {
+    // 绌洪棽鏃跺�熷嚭锛屾柊澧炰竴鏉″�熷嚭鏁版嵁
+    fixtureBorrowDrawerApi.setData({ status, borrowUser: userId, fixtureId: row.id, fixtureName: row.fixtureName, fixturePage: true });
+    fixtureBorrowDrawerApi.open();
+  } else if (status === '1') {
+    // 鍊熷嚭鏃跺綊杩橈紝鏇存柊鍊熷嚭鏁版嵁
+    fixtureBorrowDrawerApi.setData({ id: row.curBorrowId });
+    fixtureBorrowDrawerApi.open();
+  }
+}
 function handleDownloadExcel() {
   commonDownloadExcel(fixtureExport, '宸ュ叿鍙拌处', tableApi.formApi.form.values, {
     fieldMappingTime: formOptions.fieldMappingTime
   });
-}
-
-const router = useRouter();
-
-function handleDetail(record: Recordable<any>) {
-  router.push(`/fixture/detail/${record.id}`);
 }
 
 /**
@@ -226,6 +250,30 @@
 onMounted(async () => {
   await setupDeptSelect();
 });
+
+const { hasAccessByRoles } = useAccess();
+const isSuperAdmin = computed(() => hasAccessByRoles(['superadmin']));
+/**
+ * 鍙湁鍊熺敤鐢ㄦ埛鍜岀鐞嗗憳鍙互鐐瑰嚮褰掕繕
+ */
+function isBorrowUser(row: any) {
+  return isSuperAdmin.value || row?.borrowUser === userId;
+}
+
+function isBorrow(row: any) {
+  // TODO 瀵瑰簲瀛楀吀鐘舵�乫ixture_borrow_status 0-绌洪棽 1-鍊熷嚭
+  return row.borrowStatus === '0' || row.borrowStatus === null;
+}
+
+function isReturn(row: any) {
+  // TODO 瀵瑰簲瀛楀吀鐘舵�乫ixture_borrow_status 0-绌洪棽 1-鍊熷嚭
+  return row.borrowStatus === '1';
+}
+
+// 閫変腑鏁版嵁
+function tableSelect() {
+  return tableApi.grid.getCheckboxRecords();
+}
 </script>
 
 <template>
@@ -256,19 +304,20 @@
           </Space>
         </template>
 
-        <template #equName="{ row }">
-          <Space>
-            <a-button type="link" @click="handleDetail(row)"> {{ row.equName }}</a-button>
-          </Space>
-        </template>
-
         <template #action="{ row }">
           <Space>
             <ghost-button v-access:code="['eims:fixture:edit']" @click.stop="handleEdit(row)">
               {{ $t('pages.common.edit') }}
             </ghost-button>
-            <ghost-button v-if="row.menuType !== 'F'" class="btn-success" v-access:code="['eims:fixture:list']" @click="handleDetail(row)">
-              {{ $t('pages.common.info') }}
+            <ghost-button v-if="isBorrow(row)" class="btn-success" v-access:code="['eims:fixture:borrow']" @click="handleBorrow(row, '0')">
+              鍊熺敤
+            </ghost-button>
+            <ghost-button
+              v-else-if="isReturn(row) && isBorrowUser(row)"
+              v-access:code="['eims:fixture:borrow']"
+              @click="handleBorrow(row, '1')"
+            >
+              褰掕繕
             </ghost-button>
             <Popconfirm :get-popup-container="getVxePopupContainer" placement="left" title="纭鍒犻櫎锛�" @confirm="handleDelete(row)">
               <ghost-button danger v-access:code="['eims:fixture:remove']" @click.stop="">
@@ -280,6 +329,7 @@
       </BasicTable>
     </div>
     <FixtureDrawer @reload="tableApi.query()" />
+    <FixtureBorrowDrawer @reload="tableApi.query()" />
     <FixtureImportModal @reload="tableApi.query()" />
   </Page>
 </template>

--
Gitblit v1.9.3