Просмотр исходного кода

添加入住办理的审核组件

chenjun 1 месяц назад
Родитель
Сommit
8465cbc316

+ 2 - 0
src/views/elderly/contracts/ContractManageForm.vue

@@ -632,6 +632,7 @@ const renderAttachmentContent = (key: string) => {
           :is-text-mode="isTextMode"
           v-model="contractSignatureData"
           :attachment-ids="attachments"
+          :visible="visible"
           @update:form-data="handFormData"
           @update:data="handleContractDataChange"
           @update:attachments="handleAttachmentsLoad"
@@ -767,6 +768,7 @@ const renderAttachmentContent = (key: string) => {
         :is-text-mode="true"
         v-model="contractSignatureData"
         :attachment-ids="attachments"
+        :visible="true"
       />
 
       <!-- 已选的附件 -->

+ 26 - 11
src/views/elderly/contracts/components/ContractBody.vue

@@ -72,6 +72,7 @@ const props = defineProps<{
   signatureData?: any
   modelValue?: any
   attachmentIds?: Record<string, any>
+  visible?: boolean
 }>()
 
 const emit = defineEmits<{
@@ -429,6 +430,8 @@ const fillContractForm = (data: any) => {
 
 const fetchContractData = async (row: any) => {
   if (!row) return
+  // 切换人员/重新打开抽屉时,先清空上一个人的附件缓存,避免残留到当前合同
+  contractForm.attachments = {}
   // // 如果已经有完整数据(如直接返回了elderlyContractDO),直接填充
   // if (row.elderlyContractDO) {
   //   console.log('有历史完整数据,直接填充')
@@ -526,14 +529,29 @@ const fetchContractData = async (row: any) => {
   }
 }
 
+// 用于避免抽屉关闭/打开相同数据时重复请求,同时在重新打开时强制刷新
+let lastFetchedKey: string | number | undefined
+
+const tryFetchContractData = () => {
+  const row = props.recordRow
+  if (!row || !props.visible) return
+  const key = row.id ?? row.elderId
+  if (key === lastFetchedKey) return
+  lastFetchedKey = key
+  fetchContractData(row)
+}
+
+watch(() => props.recordRow, tryFetchContractData, { immediate: true })
 watch(
-  () => props.recordRow,
-  (row) => {
-    if (row) {
-      fetchContractData(row)
+  () => props.visible,
+  (val) => {
+    if (!val) {
+      // 抽屉关闭后重置标记,下次打开同一条数据会重新请求接口
+      lastFetchedKey = undefined
+    } else {
+      tryFetchContractData()
     }
-  },
-  { immediate: true }
+  }
 )
 
 watch(
@@ -738,11 +756,8 @@ const contractFormUpdate = ref({})
 
 const saveContract = async () => {
   try {
-    console.log('历史:', contractForm.attachments)
-    if (!contractForm.attachments) {
-      contractForm.attachments = {}
-    }
-   // const attachmentData: Record<string, any> = {}
+    // 保存时只保留当前选中的附件,防止历史/上一个人的附件残留
+    contractForm.attachments = {}
     if (props.attachmentIds) {
       Object.keys(props.attachmentIds).forEach((key) => {
         const row = props.attachmentIds![key]

+ 74 - 44
src/views/elderly/elder/elder-file/index.vue

@@ -9,19 +9,48 @@
       :inline="true"
       label-width="80px"
     >
-      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds"/>
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名" prop="elderName">
-        <el-input @keyup.enter="handleQuery" v-model="queryParams.elderName" placeholder="请输入长者姓名" class="!w-240px" />
+        <el-input
+          @keyup.enter="handleQuery"
+          v-model="queryParams.elderName"
+          placeholder="请输入长者姓名"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="合同号" prop="contractNumber">
+        <el-input
+          @keyup.enter="handleQuery"
+          v-model="queryParams.contractNumber"
+          placeholder="请输入长者姓名"
+          class="!w-240px"
+        />
       </el-form-item>
+
       <el-form-item label="楼栋">
-        <el-select v-model="queryParams.buildId" placeholder="选择楼栋" style="width: 180px" @change="handleBuildChange">
-          <el-option v-for="(item,index) in buildList" :key="index" :label="item.buildName" :value="item.id" />
+        <el-select
+          v-model="queryParams.buildId"
+          placeholder="选择楼栋"
+          style="width: 180px"
+          @change="handleBuildChange"
+        >
+          <el-option
+            v-for="(item, index) in buildList"
+            :key="index"
+            :label="item.buildName"
+            :value="item.id"
+          />
         </el-select>
       </el-form-item>
 
       <el-form-item label="楼层">
-        <el-select  v-model="queryParams.floorId" placeholder="选择楼层" style="width: 180px" >
-          <el-option v-for="(item,index) in floorList" :key="index" :label="item.floorName" :value="item.id" />
+        <el-select v-model="queryParams.floorId" placeholder="选择楼层" style="width: 180px">
+          <el-option
+            v-for="(item, index) in floorList"
+            :key="index"
+            :label="item.floorName"
+            :value="item.id"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="入住状态" prop="inStatus">
@@ -35,7 +64,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="床位号" prop="bedId">
-        <SelectRoom v-model="queryParams.bedId" class="!w-240px" :tId="queryParams.tenantIds"/>
+        <SelectRoom v-model="queryParams.bedId" class="!w-240px" :tId="queryParams.tenantIds" />
       </el-form-item>
       <el-form-item label="供养类型" prop="careType">
         <el-select v-model="queryParams.careType" placeholder="请选择" class="!w-240px" clearable>
@@ -107,7 +136,7 @@
   <!-- 导出床头卡弹窗 -->
   <el-dialog
     v-model="dialogVisible"
-    :title="`批量导出${type==1?'床头卡':'分享卡'}`"
+    :title="`批量导出${type == 1 ? '床头卡' : '分享卡'}`"
     :close-on-press-escape="false"
     :close-on-click-modal="false"
     width="28vw"
@@ -137,7 +166,6 @@
         >
           <template #prepend>数量</template>
         </el-input>
-
       </div>
 
       <div class="description" style="margin-top: 20px">
@@ -148,9 +176,17 @@
         <p>4. 建议单次导出数量不超过200张,以免影响系统性能</p>
         <p>5. 导出需要较长时间,请耐心等待。200张大约需要20分钟!</p>
       </div>
-      <div style="width: 100%;display: flex;flex-direction: row">
-        <el-button  @click="dialogVisible=false" style="margin-top: 10px;margin-left: auto">关 闭</el-button>
-        <el-button :loading="loadingImport" type="primary" @click="startExport" style="margin-top: 10px;margin-left: 20px">开始导出</el-button>
+      <div style="width: 100%; display: flex; flex-direction: row">
+        <el-button @click="dialogVisible = false" style="margin-top: 10px; margin-left: auto"
+          >关 闭</el-button
+        >
+        <el-button
+          :loading="loadingImport"
+          type="primary"
+          @click="startExport"
+          style="margin-top: 10px; margin-left: 20px"
+          >开始导出</el-button
+        >
       </div>
     </div>
   </el-dialog>
@@ -163,10 +199,10 @@ import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
 import { useUserStore } from '@/store/modules/user'
 import Import from '@/components/ImportFile/index.vue'
 import download from '@/utils/download'
-import {importCard} from '@/utils/outBedCard'
-import {getElderHealthRecordById} from "@/api/elderly/elder/health-record";
-import {getBuildList} from "@/api/system/badManage";
-import {ref} from "vue";
+import { importCard } from '@/utils/outBedCard'
+import { getElderHealthRecordById } from '@/api/elderly/elder/health-record'
+import { getBuildList } from '@/api/system/badManage'
+import { ref } from 'vue'
 defineOptions({ name: 'ElderFile' })
 const userStore = useUserStore()
 const message = useMessage()
@@ -181,11 +217,12 @@ const queryParams = reactive({
   pageSize: 10,
   buildId: '',
   floorId: '',
+  contractNumber: '',
   elderName: undefined,
   inStatus: '1',
   bedId: undefined,
   careType: undefined,
-  tenantIds: userStore.orgTenantId,
+  tenantIds: userStore.orgTenantId
 })
 const queryFormRef = ref() // 搜索的表单
 const router = useRouter()
@@ -220,6 +257,7 @@ const handleQuery = async () => {
 const resetQuery = () => {
   queryParams.buildId = ''
   queryParams.floorId = ''
+  queryParams.contractNumber = ''
   queryFormRef.value.resetFields()
   handleQuery()
 }
@@ -229,11 +267,10 @@ const type = ref(1)
 //批量导出
 const handleImportCard = (t) => {
   // 显示弹窗
-  type.value=t
+  type.value = t
   dialogVisible.value = true
 }
 
-
 const loadingImport = ref(false)
 // 开始导出
 const startExport = async () => {
@@ -258,37 +295,33 @@ const startExport = async () => {
       elderName: undefined,
       inStatus: '1',
       bedId: undefined,
-      tenantIds: userStore.orgTenantId,
+      tenantIds: userStore.orgTenantId
     }
     const data = await getElderlyPage(queryParams)
-    if(type.value==1){
-      for(const [index, item] of data.list.entries()){
+    if (type.value == 1) {
+      for (const [index, item] of data.list.entries()) {
         try {
           const res = await getElderHealthRecordById(item.id)
           // console.log("长者健康档案:",index)
           // 判断是否为最后一个数据
           const param = index === data.list.length - 1 ? 3 : 2
-          await importCard(res||{}, item, param)
-        } catch (e) { }
+          await importCard(res || {}, item, param)
+        } catch (e) {}
       }
-    }else {
-      for(const [index, item] of data.list.entries()){
+    } else {
+      for (const [index, item] of data.list.entries()) {
         try {
           const param = index === data.list.length - 1 ? 3 : 2
           await importCard(undefined, item, param)
-        } catch (e) { }
+        } catch (e) {}
       }
-
     }
 
-
     loadingImport.value = false
-  }catch (_){
+  } catch (_) {
     loadingImport.value = false
     message.warning('获取数据失败,无法导出!')
   }
-
-
 }
 
 /** 添加/修改操作 */
@@ -301,7 +334,7 @@ const openForm = (row: any = {}) => {
 const openDetail = (row: any = {}) => {
   router.push({
     name: 'ElderFileDetail',
-    params:{
+    params: {
       id: row.id
     }
   })
@@ -309,11 +342,11 @@ const openDetail = (row: any = {}) => {
 
 const handleSortChange = (val) => {
   queryParams.prop = val.prop
-  if(val.order === 'ascending'){
+  if (val.order === 'ascending') {
     queryParams.order = 'asc'
-  }else if(val.order === 'descending'){
+  } else if (val.order === 'descending') {
     queryParams.order = 'desc'
-  }else{
+  } else {
     queryParams.order = ''
   }
   if (queryParams.pageNo === 1) {
@@ -325,12 +358,12 @@ const handleSortChange = (val) => {
 
 const ids = ref([])
 const handleSelection = (val) => {
-  ids.value = val.map(item => item.id)
+  ids.value = val.map((item) => item.id)
 }
 
 /** 删除按钮操作 */
 const handleDelete = async () => {
-  if(!ids.value.length){
+  if (!ids.value.length) {
     message.error('请选择一条数据')
     return
   }
@@ -338,7 +371,7 @@ const handleDelete = async () => {
     // 删除的二次确认
     await message.delConfirm()
     // 发起删除
-    ids.value.map(async item=>{
+    ids.value.map(async (item) => {
       await delElderlyInfo(item)
     })
     message.success(t('common.delSuccess'))
@@ -378,7 +411,6 @@ const handleBuildChange = (buildId: any) => {
   const selectedBuild = buildList.value.find((item: any) => item.id === buildId)
   if (selectedBuild) {
     floorList.value = selectedBuild.floorList || []
-
   }
 }
 
@@ -386,9 +418,7 @@ const handleBuildChange = (buildId: any) => {
 onMounted(async () => {
   getList()
   try {
-    buildList.value = await getBuildList({tenantIds: queryParams.tenantIds[0]})
-  } catch (e)
-  {}
-
+    buildList.value = await getBuildList({ tenantIds: queryParams.tenantIds[0] })
+  } catch (e) {}
 })
 </script>

+ 23 - 16
src/views/elderly/elder/family-appointment/time-setting/index.vue

@@ -106,7 +106,7 @@
                       <el-button
                         :type="group.cycleType === 'daily' ? 'success' : 'default'"
                         size="small"
-                        :disabled="isDisabled"
+                        :disabled="isDisabled || group.enable == 0"
                         @click="setCycleType(group, 'daily')"
                       >
                         每天
@@ -114,7 +114,7 @@
                       <el-button
                         :type="group.cycleType === 'weekly' ? 'success' : 'default'"
                         size="small"
-                        :disabled="isDisabled"
+                        :disabled="isDisabled || group.enable == 0"
                         @click="openWeeklyDialog(group)"
                       >
                         每周
@@ -122,7 +122,7 @@
                       <el-button
                         :type="group.cycleType === 'monthly' ? 'success' : 'default'"
                         size="small"
-                        :disabled="isDisabled"
+                        :disabled="isDisabled || group.enable == 0"
                         @click="openMonthlyDialog(group)"
                       >
                         每月
@@ -130,16 +130,19 @@
                       <el-button
                         :type="group.cycleType === 'custom' ? 'success' : 'default'"
                         size="small"
-                        :disabled="isDisabled"
+                        :disabled="isDisabled || group.enable == 0"
                         @click="openCustomDialog(group)"
                       >
                         自定义
                       </el-button>
                     </div>
                     <el-switch
-                      v-model="formData.appointmentEnabled"
+                      v-model="group.enable"
                       active-text="启用"
                       size="small"
+                      :disabled="isDisabled"
+                      :active-value="1"
+                      :inactive-value="0"
                       style="margin-right: 1vw"
                       inactive-text="关闭"
                     />
@@ -148,7 +151,7 @@
                       type="danger"
                       link
                       size="small"
-                      :disabled="isDisabled"
+                      :disabled="isDisabled || group.enable == 0"
                       @click="removeGroup(groupIndex)"
                     >
                       <el-icon><Delete /></el-icon>
@@ -229,10 +232,10 @@
                       <div v-for="(item, itemIndex) in group.items" :key="item.id" class="item-row">
                         <div
                           class="item-delete-btn"
-                          :class="{ disabled: isDisabled }"
+                          :class="{ disabled: isDisabled || group.enable == 0 }"
                           @click="removeItem(group, itemIndex)"
                         >
-                          <el-icon><Minus /></el-icon>
+                          <el-icon><Delete /></el-icon>
                         </div>
                         <div class="item-fields">
                           <div class="field-block">
@@ -244,7 +247,7 @@
                               placeholder="开始时间"
                               size="small"
                               style="width: 110px"
-                              :disabled="isDisabled"
+                              :disabled="isDisabled || group.enable == 0"
                               @change="checkTimeOverlap(group, itemIndex)"
                             />
                             <span class="time-sep">至</span>
@@ -255,7 +258,7 @@
                               placeholder="结束时间"
                               size="small"
                               style="width: 110px"
-                              :disabled="isDisabled"
+                              :disabled="isDisabled || group.enable == 0"
                               @change="checkTimeOverlap(group, itemIndex)"
                             />
                           </div>
@@ -267,7 +270,7 @@
                               :max="9999"
                               size="small"
                               style="width: 110px"
-                              :disabled="isDisabled"
+                              :disabled="isDisabled || group.enable == 0"
                             />
                           </div>
                         </div>
@@ -278,7 +281,7 @@
                       <el-button
                         type="success"
                         size="small"
-                        :disabled="isDisabled"
+                        :disabled="isDisabled || group.enable == 0"
                         @click="addItem(group)"
                       >
                         <el-icon><Plus /></el-icon>
@@ -512,7 +515,6 @@
 import { ref, reactive, onMounted, computed } from 'vue'
 import { Setting, Calendar, User, Plus, Delete, Tickets, Minus } from '@element-plus/icons-vue'
 import type { FormInstance, FormRules } from 'element-plus'
-import fetchHttp from '@/config/axios/fetchHttp'
 import { useUserStore } from '@/store/modules/user'
 import {
   appointmentConfigADD,
@@ -545,6 +547,7 @@ type AppointmentItem = {
 type AppointmentGroup = {
   id: number
   cycleType: CycleType
+  enable: number
   weeklyDays: number[]
   monthlyDays: number[]
   customDates: string[]
@@ -555,7 +558,7 @@ type AppointmentConfigDO = {
   id?: number
   advanceDays?: number
   beginBookDays?: number
-  enabled?: number
+  enable?: number
   personDailyLimit?: number
   personMonthlyLimit?: number
   personWeeklyLimit?: number
@@ -572,6 +575,7 @@ type AppointmentGroupDO = {
   customDates?: string
   dateType?: string
   endTime?: string
+  enable?: number
   limitCount?: number
   monthDays?: string
   tenantId?: number
@@ -713,6 +717,7 @@ const addAppointmentGroup = () => {
   appointmentGroups.value.push({
     id: groupIdCounter,
     cycleType: 'daily',
+    enable: 1,
     weeklyDays: [],
     monthlyDays: [],
     customDates: [],
@@ -922,12 +927,14 @@ const parseGroups = (groups: AppointmentGroupDO[]): AppointmentGroup[] => {
     const weekDays = g.weekDays || ''
     const monthDays = g.monthDays || ''
     const customDates = g.customDates || ''
+    const enable = g.enable ?? 1
     const key = `${cycleType}_${weekDays}_${monthDays}_${customDates}`
     if (!map.has(key)) {
       groupIdCounter++
       map.set(key, {
         id: groupIdCounter,
         cycleType,
+        enable,
         weeklyDays: weekDays ? weekDays.split(',').map(Number) : [],
         monthlyDays: monthDays ? monthDays.split(',').map(Number) : [],
         customDates: customDates ? customDates.split(',') : [],
@@ -1165,6 +1172,7 @@ const handleSubmit = async () => {
       const weekDays = g.weeklyDays.join(',') || undefined
       const monthDays = g.monthlyDays.join(',') || undefined
       const customDates = g.customDates.join(',') || undefined
+      const enable = g.enable || 0
       g.items.forEach((item) => {
         group.push({
           dateType,
@@ -1172,6 +1180,7 @@ const handleSubmit = async () => {
           monthDays,
           customDates,
           beginTime: item.startTime,
+          enable: enable,
           endTime: item.endTime,
           limitCount: item.limitCount,
           tenantId: organizationId
@@ -1483,8 +1492,6 @@ onMounted(() => {
   align-items: center;
 }
 
-
-
 :deep(.date-selector-dialog) {
   .date-selector-body {
     padding: 6px 0;

+ 26 - 1
src/views/elderly/fee/column.ts

@@ -262,7 +262,7 @@ export const levelSettleColumn = [
   {
     label: '所属机构',
     field: 'tenantName',
-    type: '99',
+    type: '99'
   },
   {
     label: '长者姓名',
@@ -278,6 +278,31 @@ export const levelSettleColumn = [
     dictArr: DICT_TYPE.SETTLEMENT_STATUS,
     type: '1'
   },
+  {
+    label: '退住日期',
+    field: 'retreatDate',
+    width: 160
+  },
+  {
+    label: '费用截止日期',
+    field: 'costDeadlineDate',
+    width: 160
+  },
+  {
+    label: '应退金额',
+    field: 'refundableAmount',
+    width: 120
+  },
+  {
+    label: '应收金额',
+    field: 'receivableAmount',
+    width: 120
+  },
+  {
+    label: '实缴金额',
+    field: 'refundAmount',
+    width: 120
+  },
   {
     label: '结算时间',
     field: 'settlementTime',

+ 1 - 1
src/views/elderly/fee/leave-settle/Form.vue

@@ -10,7 +10,7 @@
     >
       <div class="header">
         <div class="info">
-          <span class="name">{{ dataForm.elderName }}</span>
+          <span class="name" style="font-weight: bold">{{ dataForm.elderName }}</span>
           <span>
 <!--            <el-button plain @click="handleEdit" class="mr-10px"  v-hasPermi="['leave_update_fee']">修改押金费用</el-button>-->
 

+ 51 - 14
src/views/elderly/fee/leave-settle/index.vue

@@ -8,9 +8,14 @@
       :inline="true"
       label-width="100px"
     >
-      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds"/>
+      <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
       <el-form-item label="长者姓名" prop="elderName">
-        <el-input @keyup.enter="handleQuery" v-model="queryParams.elderName" placeholder="请输入长者姓名" class="!w-240px" />
+        <el-input
+          @keyup.enter="handleQuery"
+          v-model="queryParams.elderName"
+          placeholder="请输入长者姓名"
+          class="!w-240px"
+        />
       </el-form-item>
       <el-form-item label="床位号" prop="bedId">
         <SelectRoom v-model="queryParams.bedId" class="!w-240px" />
@@ -25,6 +30,31 @@
           />
         </el-select>
       </el-form-item>
+
+<!--      <el-form-item label="退住日期" prop="retreatDate">-->
+<!--        <el-date-picker-->
+<!--          v-model="queryParams.retreatDate"-->
+<!--          class="!w-240px"-->
+<!--          placeholder="请选择"-->
+<!--          end-placeholder="结束日期"-->
+<!--          start-placeholder="开始日期"-->
+<!--          type="date"-->
+<!--          value-format="YYYY-MM-DD"-->
+<!--        />-->
+<!--      </el-form-item>-->
+
+<!--      <el-form-item label="费用截止日期" prop="costDeadlineDate">-->
+<!--        <el-date-picker-->
+<!--          v-model="queryParams.costDeadlineDate"-->
+<!--          class="!w-240px"-->
+<!--          placeholder="请选择"-->
+<!--          end-placeholder="结束日期"-->
+<!--          start-placeholder="开始日期"-->
+<!--          type="date"-->
+<!--          value-format="YYYY-MM-DD"-->
+<!--        />-->
+<!--      </el-form-item>-->
+
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@@ -34,6 +64,10 @@
 
   <!-- 列表 -->
   <ContentWrap>
+    <el-button plain type="success" @click="handleExport">
+      <Icon class="mr-5px" icon="ep:download" />
+      导出
+    </el-button>
     <TabBarBtn />
 
     <Table2
@@ -47,15 +81,15 @@
       :showDetailCondition="showDetailCondition"
     >
       <template #pre="{ scope }">
-<!--        <el-button-->
-<!--          link-->
-<!--          type="success"-->
-<!--          @click="openRefundForm(scope)"-->
-<!--          v-hasPermi="['leave-settle:refund-settle']"-->
-<!--          v-show="scope.status == 1"-->
-<!--        >-->
-<!--          补充结算-->
-<!--        </el-button>-->
+        <!--        <el-button-->
+        <!--          link-->
+        <!--          type="success"-->
+        <!--          @click="openRefundForm(scope)"-->
+        <!--          v-hasPermi="['leave-settle:refund-settle']"-->
+        <!--          v-show="scope.status == 1"-->
+        <!--        >-->
+        <!--          补充结算-->
+        <!--        </el-button>-->
         <el-button
           link
           type="primary"
@@ -98,6 +132,9 @@ const queryParams = reactive({
   elderName: undefined,
   bedId: undefined,
   status: undefined,
+  costDeadlineDate: undefined,
+  retreatDate: undefined,
+  refundAmount: undefined,
   tenantIds: userStore.orgTenantId
 })
 const queryFormRef = ref() // 搜索的表单
@@ -136,11 +173,11 @@ const openForm = (row: any = {}, isDetail: boolean = false) => {
   // formRef.value.open(row.id, row.elderId, isDetail)
   router.push({
     name: isDetail ? 'LevelSettleDetail' : 'LevelSettleForm', //详情和结算是同一个 form
-    params:{
+    params: {
       id: row.id,
       elderId: row.elderId,
       tId: row.tenantId,
-      isDetail:isDetail
+      isDetail: isDetail
     }
   })
 }
@@ -157,7 +194,7 @@ const showDetailCondition = (row) => {
 
 const printRef = ref()
 const handlePrint = (row) => {
-  printRef.value.open(row.id,row.status==1)
+  printRef.value.open(row.id, row.status == 1)
 }
 /** 初始化 **/
 onMounted(() => {

+ 39 - 14
src/views/warehouses/materialsIn/components/Print.vue

@@ -1,22 +1,43 @@
 <template>
   <Dialog v-model="dialogVisible" title="预览" width="60%" scroll>
     <div class="materialsIn-print" id="printArea" v-loading="loading">
-      <div class="title">广东颐年养老服务有限公司物品入库单</div>
+      <div class="title">{{tName}} - 物资入库单</div>
 
       <div class="meta-row">
-        <div class="meta-item"><span class="label">入库单号:</span><span class="value">{{ detail.orderNo || '' }}</span></div>
-        <div class="meta-item"><span class="label">日期:</span><span class="value">{{ detail.orderDate || '' }}</span></div>
-        <div class="meta-item"><span class="label">经办人:</span><span class="value">{{ detail.creator || '' }}</span></div>
+        <div class="meta-item"
+          ><span class="label">入库单号:</span
+          ><span class="value">{{ detail.orderNo || '' }}</span></div
+        >
+        <div class="meta-item"
+          ><span class="label">日期:</span
+          ><span class="value">{{ detail.orderDate || '' }}</span></div
+        >
+        <div class="meta-item"
+          ><span class="label">经办人:</span
+          ><span class="value">{{ detail.creator || '' }}</span></div
+        >
       </div>
 
       <div class="meta-row">
-        <div class="meta-item"><span class="label">总金额:</span><span class="value">{{ totalAmount().toFixed(2) }}</span></div>
-        <div class="meta-item"><span class="label">确认日期:</span><span class="value">{{ formatDate(detail.auditTime) }}</span></div>
-        <div class="meta-item"><span class="label">确认人员:</span><span class="value">{{ detail.auditor || '' }}</span></div>
+        <div class="meta-item"
+          ><span class="label">总金额:</span
+          ><span class="value">{{ totalAmount().toFixed(2) }}</span></div
+        >
+        <div class="meta-item"
+          ><span class="label">确认日期:</span
+          ><span class="value">{{ formatDate(detail.auditTime) }}</span></div
+        >
+        <div class="meta-item"
+          ><span class="label">确认人员:</span
+          ><span class="value">{{ detail.auditor || '' }}</span></div
+        >
       </div>
 
       <div class="meta-row">
-        <div class="meta-item"><span class="label">备注:</span><span class="value">{{ detail.remark || '' }}</span></div>
+        <div class="meta-item"
+          ><span class="label">备注:</span
+          ><span class="value">{{ detail.remark || '' }}</span></div
+        >
       </div>
 
       <table class="items-table">
@@ -37,17 +58,17 @@
           </tr>
         </thead>
         <tbody>
-          <tr v-for="(it, idx) in (detail.items || [])" :key="it.id ?? idx">
+          <tr v-for="(it, idx) in detail.items || []" :key="it.id ?? idx">
             <td class="text-center">{{ idx + 1 }}</td>
             <td>{{ it.materialName || '' }}</td>
             <td></td>
             <td></td>
             <td class="text-center">{{ it.supplierName || '' }}</td>
             <td class="text-center">{{ it.refInStoreName || '' }}</td>
-            <td class="text-right">{{ (it.inUnitPrice ?? '') }}</td>
+            <td class="text-right">{{ it.inUnitPrice ?? '' }}</td>
             <td class="text-center">{{ it.materialUnit || '' }}</td>
             <td class="text-center">{{ it.inQty ?? '' }}</td>
-            <td class="text-right">{{ (Number(it.amount ?? 0)).toFixed(2) }}</td>
+            <td class="text-right">{{ Number(it.amount ?? 0).toFixed(2) }}</td>
             <td class="text-center">
               <span class="check-group">
                 <span class="check-item"><span class="box"></span>合格</span>
@@ -72,7 +93,9 @@
 
       <div class="sign-row">
         <div class="sign-item"><span class="label">送货员:</span><span class="line"></span></div>
-        <div class="sign-item"><span class="label">送货员电话:</span><span class="line"></span></div>
+        <div class="sign-item"
+          ><span class="label">送货员电话:</span><span class="line"></span
+        ></div>
       </div>
     </div>
     <template #footer>
@@ -85,9 +108,11 @@
 import { nextTick, reactive, ref } from 'vue'
 import { getMaterialIoInboundDetail } from '@/api/material/stockInAndOut'
 import { formatDate } from '@/utils/formatTime'
-
+import { useUserStore } from '@/store/modules/user'
 const dialogVisible = ref(false)
 const loading = ref(false)
+const tName = ref('')
+const userStore = useUserStore()
 
 type InboundItem = {
   id?: number
@@ -146,6 +171,7 @@ const handleClosed = () => {
 const open = async (id: number | string) => {
   dialogVisible.value = true
   loading.value = true
+  tName.value = userStore.getTenantName || ''
   try {
     const res: any = await getMaterialIoInboundDetail(id)
     const data: InboundDetail = res?.data ?? res ?? {}
@@ -193,7 +219,6 @@ const print = {
 }
 
 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
-
 </script>
 <style media="print" lang="scss">
 @page {

+ 29 - 12
src/views/warehouses/materialsOut/components/Print.vue

@@ -1,12 +1,21 @@
 <template>
   <Dialog v-model="dialogVisible" title="预览" width="60%" scroll>
     <div class="materialsOut-print" id="printArea" v-loading="loading">
-      <div class="title">物资出库单</div>
+      <div class="title">{{ tName }} - 物资出库单</div>
 
       <div class="meta-row">
-        <div class="meta-item"><span class="label">申领科室:</span><span class="value">{{ detail.outDeptName || '' }}</span></div>
-        <div class="meta-item"><span class="label">出库时间:</span><span class="value">{{ detail.orderDate || '' }}</span></div>
-        <div class="meta-item"><span class="label">出库单号:</span><span class="value">{{ detail.orderNo || '' }}</span></div>
+        <div class="meta-item"
+          ><span class="label">申领科室:</span
+          ><span class="value">{{ detail.outDeptName || '' }}</span></div
+        >
+        <div class="meta-item"
+          ><span class="label">出库时间:</span
+          ><span class="value">{{ detail.orderDate || '' }}</span></div
+        >
+        <div class="meta-item"
+          ><span class="label">出库单号:</span
+          ><span class="value">{{ detail.orderNo || '' }}</span></div
+        >
       </div>
 
       <div class="meta-row">
@@ -29,15 +38,15 @@
           </tr>
         </thead>
         <tbody>
-          <tr v-for="(it, idx) in (detail.items || [])" :key="it.id ?? idx">
+          <tr v-for="(it, idx) in detail.items || []" :key="it.id ?? idx">
             <td class="text-center">{{ idx + 1 }}</td>
             <td>{{ it.materialNumber || '' }}</td>
             <td>{{ it.materialName || '' }}</td>
             <td>{{ it.specification || '' }}</td>
             <td class="text-center">{{ it.materialUnit || '' }}</td>
             <td class="text-center">{{ it.quantity ?? '' }}</td>
-            <td class="text-right">{{ (it.inUnitPrice ?? '') }}</td>
-            <td class="text-right">{{ (Number(it.amount ?? 0)).toFixed(2) }}</td>
+            <td class="text-right">{{ it.inUnitPrice ?? '' }}</td>
+            <td class="text-right">{{ Number(it.amount ?? 0).toFixed(2) }}</td>
             <td></td>
           </tr>
           <tr v-if="!(detail.items && detail.items.length)">
@@ -56,9 +65,15 @@
       <div class="sign-row">
         <div class="sign-item"><span class="label">会计:</span><span class="line"></span></div>
         <div class="sign-item"><span class="label">保管:</span><span class="line"></span></div>
-        <div class="sign-item"><span class="label">领用人:</span><span class="line">{{ detail.outUser || '' }}</span></div>
+        <div class="sign-item"
+          ><span class="label">领用人:</span
+          ><span class="line">{{ detail.outUser || '' }}</span></div
+        >
         <div class="sign-item"><span class="label">审核:</span><span class="line"></span></div>
-        <div class="sign-item"><span class="label">制表:</span><span class="value">{{ detail.creator || '' }}</span></div>
+        <div class="sign-item"
+          ><span class="label">制表:</span
+          ><span class="value">{{ detail.creator || '' }}</span></div
+        >
       </div>
     </div>
     <template #footer>
@@ -70,9 +85,11 @@
 <script setup lang="ts">
 import { nextTick, reactive, ref } from 'vue'
 import { getMaterialOutboundDetail } from '@/api/material/stockInAndOut'
-
+import { useUserStore } from '@/store/modules/user'
+const userStore = useUserStore()
 const dialogVisible = ref(false)
 const loading = ref(false)
+const tName = ref('')
 
 type OutboundItem = {
   id?: number
@@ -132,6 +149,7 @@ const handleClosed = () => {
 const open = async (id: number | string) => {
   dialogVisible.value = true
   loading.value = true
+  tName.value = userStore.getTenantName || ''
   try {
     const res: any = await getMaterialOutboundDetail(id)
     const data: OutboundDetail = res?.data ?? res ?? {}
@@ -179,7 +197,6 @@ const print = {
 }
 
 defineExpose({ open }) // 提供 open 方法,用于打开弹窗
-
 </script>
 <style media="print" lang="scss">
 @page {
@@ -280,4 +297,4 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
   margin-left: 6px;
   height: 18px;
 }
-</style>
+</style>