فهرست منبع

Merge remote-tracking branch 'origin/dev' into dev

Hwf 6 ماه پیش
والد
کامیت
836171e5c7

+ 241 - 0
src/views/comprehensiveGuarantee/MaterialReserveManagement/BarcodeManagement.vue

@@ -0,0 +1,241 @@
+<!--条码管理-->
+<template>
+  <div>
+    <div v-show="!BussinessAddState.show && !BussinessEditState.show " class="app-container">
+      <div>
+        <transition name="fade">
+          <div v-show="showSearch" class="mb-[10px]">
+            <el-row :gutter="10" class="mb8">
+              <el-col :span="1.5">
+                <el-button type="primary" icon="Plus" >导出</el-button>
+<!--                @click="handleAdd"-->
+              </el-col>
+            </el-row>
+          </div>
+        </transition>
+        <el-table ref="multipleTable" v-loading="loading" :data="tableData" border :max-height="maxHeight" style="width: 96%" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center" fixed />
+          <el-table-column label="物资名称" align="center" prop="material_name" fixed show-overflow-tooltip/>
+          <el-table-column label="物资编号" align="center" prop="material_code" show-overflow-tooltip/>
+          <el-table-column label="条形码" align="center" prop="bar_code" show-overflow-tooltip>
+          <template #default="scope">
+            <el-button type="text" class="common-btn-text-primary" @click="showQRCode(scope.row.bar_code)">查看</el-button>
+          </template>
+          </el-table-column>
+          <el-table-column label="二维码" align="center" prop="QR_code" show-overflow-tooltip>
+            <template #default="scope">
+              <el-button type="text" class="common-btn-text-primary" @click="showQRCode(scope.row.QR_code)">查看</el-button>
+            </template>
+          </el-table-column>
+          <el-table-column label="条码状态" align="center" prop="barcode_status" show-overflow-tooltip>
+            <template #default="scope">
+              <div>
+                <span  v-if="Number(scope.row.barcode_status) === 0">禁用</span>
+                <span   v-if="Number(scope.row.barcode_status) === 1">启用</span>
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
+            <template #default="scope">
+              <div>
+                <span class="common-btn-text-primary"  v-if="Number(scope.row.barcode_status) === 1">禁用</span>
+                <span  class="common-btn-text-primary"  v-if="Number(scope.row.barcode_status) === 0">启用</span>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <el-dialog :visible.sync="dialogVisible" title="二维码">
+          <div class="flex justify-center items-center h-[400px]">
+            <img :src="dialogVisible.QR_code" alt="二维码" class="w-[300px] h-[300px]">
+          </div>
+        </el-dialog>
+        <pagination
+          v-show="total > 0"
+          v-model:page="queryParams.page"
+          v-model:limit="queryParams.pageSize"
+          :total="total"
+          @pagination="tableData"
+        />
+      </div>
+    </div>
+    <BussinessAdd v-if="BussinessAddState.show"  @close="handleCancel" />
+    <BussinessEdit v-if="BussinessEditState.show" :event-id="BussinessEditState.eventId"  @close="handleCancel" />
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref,reactive, onMounted, onBeforeUnmount } from "vue";
+import {companyDelete, getCompanyList} from "@/api/riskPrevention/BusinessPortraits";
+import BussinessAdd from "@/views/riskPrevention/SafetyProductionManagement/BussinessAdd.vue";
+// import BussinessEdit from "./BussinessEdit.vue";
+import {to} from "await-to-js";
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const showSearch = ref(true);
+// const tableData = ref();
+const multiple = ref(true);
+const ids = ref<Array<number | string>>([]);
+const single = ref(true);
+// 定义响应式变量
+const loading = ref(false);
+const maxHeight = ref(window.innerHeight * 0.8);
+const total = ref();
+// 处理窗口大小变化
+const handleResize = () => {
+  maxHeight.value = window.innerHeight * 0.8;
+};
+const initFormData = reactive({
+  material_name: '',
+  material_code: '',
+  bar_code: '',
+  QR_code: '',
+  barcode_status: ''
+});
+const data =reactive({
+  form: {...initFormData},
+  queryParams:{
+    page: '1',
+    pageSize: '10',
+    area_code: '',
+    keycode: ''
+  }
+})
+
+const { queryParams, form } = toRefs(data);
+
+const county = [
+  { value: '', label: '全部' },
+  { value: '0', label: '茂南区' },
+  { value: '1', label: '电白区' },
+  { value: '2', label: '高州市' },
+  { value: '3', label: '化州市' },
+  { value: '4', label: '信宜市' },
+];
+const tableData = [
+  {
+    "material_name": "螺丝刀套装",
+    "material_code": "SC001",
+    "bar_code": "1234567890123",
+    "QR_code": "https://example.com/qrcode1.png",
+    "barcode_status": "1",
+    "operation": "编辑"
+  },
+  {
+    "material_name": "A4 打印纸",
+    "material_code": "PAPER001",
+    "bar_code": "9876543210987",
+    "QR_code": "https://example.com/qrcode2.png",
+    "barcode_status": "0",
+    "operation": "删除"
+  },
+  {
+    "material_name": "USB 存储器",
+    "material_code": "USB001",
+    "bar_code": "6543219876543",
+    "QR_code": "qrcode://usb001",
+    "barcode_status": "0",
+    "operation": "查看"
+  },
+  {
+    "material_name": "签字笔",
+    "material_code": "PEN001",
+    "bar_code": "3456781234567",
+    "QR_code": "qrcode://pen001",
+    "barcode_status": "1",
+    "operation": "编辑"
+  },
+  {
+    "material_name": "笔记本",
+    "material_code": "NOTEBOOK001",
+    "bar_code": "7654329876543",
+    "QR_code": "qrcode://notebook001",
+    "barcode_status": "0",
+    "operation": "重新生成条码"
+  }
+];
+const dialogVisible = ref({
+  visible: false,
+  QR_code: ''
+});
+
+const showQRCode = (QR_code) => {
+  dialogVisible.value = { QR_code };
+  dialogVisible.visible = true;
+};
+const handleQuery = () => {
+  queryParams.value.page = 1;
+  fetchWorkrData();
+};
+const resetQuery = () => {
+  queryParams.value = { page: 1, pageSize: 10, area_code: '', keycode: '' };
+  handleQuery();
+};
+const BussinessAddState = reactive({
+  show: false, // 初始化show为false
+});
+
+const BussinessEditState = reactive({
+  show:false
+});
+
+const handleAdd = () => {
+  BussinessAddState.show = true;
+};
+
+const handleDelete = async (row) => {
+  let id = [];
+  if (row) {
+    id = [row.id];
+  } else {
+    id = ids.value;
+  }
+  const [err] = await to(proxy?.$modal.confirm('是否确认删除选择的数据项?') as any);
+  if (!err) {
+    await companyDelete(id);
+    proxy.$modal.msgSuccess('删除成功');
+    fetchWorkrData();
+  }
+};
+const handleedit = (row) => {
+  BussinessEditState.eventId = row.id + "";
+  BussinessEditState.show = true;
+};
+
+const handleCancel = () => {
+  BussinessAddState.show = false;
+  BussinessEditState.show =false;
+};
+
+const fetchWorkrData = () => {
+  // loading.value = true;
+  // getCompanyList(queryParams.value)
+  //   .then((res) => {
+  //     tableData.value = res.data;
+  //     total.value = res.total;
+  //   })
+  //   .finally(() => {
+  //     loading.value = false;
+  //   });
+};
+
+const handleSelectionChange = (selection) => {
+  ids.value = selection.map((item) => item.id);
+  selectedRow.value = selection.length === 1 ? selection[0] : null;
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+onMounted(() => {
+  window.addEventListener('resize', handleResize);
+  fetchWorkrData();
+});
+
+// 在组件卸载前移除窗口大小变化监听器
+onBeforeUnmount(() => {
+  window.removeEventListener('resize', handleResize);
+
+});
+</script>
+
+<style lang="scss" scoped></style>
+

+ 1 - 0
src/views/comprehensiveGuarantee/MaterialReserveManagement/GodownManagement.vue

@@ -133,6 +133,7 @@ const upload = () => {
 
 const handleCancel = () => {
   addGodownState.show = false;
+  outboundDetailsState.show = false
 };
 
 const handleWrite = () => {

+ 1 - 0
src/views/comprehensiveGuarantee/MaterialReserveManagement/InboundManagement.vue

@@ -138,6 +138,7 @@ const upload = () => {
 
 const handleCancel = () => {
   addInboundState.show = false;
+  inboundDetailsState.show = false;
 };
 
 const handleWrite = () => {

+ 247 - 0
src/views/comprehensiveGuarantee/MaterialReserveManagement/InventoryDetails.vue

@@ -0,0 +1,247 @@
+<!--库存明细-->
+<!--企业画像-->
+<template>
+  <div>
+    <div v-show="!BussinessAddState.show && !BussinessEditState.show " class="app-container">
+      <div>
+        <transition name="fade">
+          <div v-show="showSearch" class="mb-[10px]">
+            <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+              <el-form-item :span="5" label="商品信息:" prop="area_code" label-width="auto">
+                <el-input
+                  v-model="queryParams.keyword1"
+                  placeholder="请输入物资ID"
+                  clearable
+                  @keyup.enter="handleQuery"
+                />
+              </el-form-item>
+              <el-form-item  :span="5" label="出入库单号:"  prop="keyword" label-width="auto">
+                <el-input
+                  v-model="queryParams.keyword2"
+                  placeholder="请输入出入库单号"
+                  clearable
+                  @keyup.enter="handleQuery"
+                />
+              </el-form-item>
+              <el-form-item  :span="5"  prop="keyword" label-width="auto">
+                <el-select v-model="queryParams.type" placeholder="全部" clearable>
+                  <el-option v-for="item in type" :key="item.value" :label="item.label" :value="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item>
+                <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+              </el-form-item>
+              <el-form-item>
+                <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+              </el-form-item>
+            </el-form>
+<!--            <el-row :gutter="10" class="mb8">-->
+<!--              <el-col :span="1.5">-->
+<!--                <el-button type="primary" icon="Plus" @click="handleAdd">新建</el-button>-->
+<!--              </el-col>-->
+<!--              <el-col :span="1.5">-->
+<!--                <el-button type="danger" plain :disabled="multiple" icon="Delete" @click="handleDelete(selectedRow)"> 删除 </el-button>-->
+<!--              </el-col>-->
+<!--            </el-row>-->
+          </div>
+        </transition>
+        <el-table ref="multipleTable" v-loading="loading" :data="tableData" border :max-height="maxHeight" style="width: 96%" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center" fixed />
+          <el-table-column label="商品信息" align="center" prop="goods_information" fixed show-overflow-tooltip/>
+          <el-table-column label="出入库单号" align="center" prop="odd_numbers" show-overflow-tooltip/>
+          <el-table-column label="入库/出库" align="center" prop="type" show-overflow-tooltip/>
+          <el-table-column label="变动库存" align="center" prop="change_inventory" show-overflow-tooltip/>
+          <el-table-column label="剩余库存" align="center" prop="remaining_inventory" show-overflow-tooltip/>
+          <el-table-column label="创建时间" align="center" prop="created_time" show-overflow-tooltip/>
+<!--          <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">-->
+<!--            <template #default="scope">-->
+<!--              <el-button type="text" class="common-btn-text-primary" @click="handleedit(scope.row)">编辑</el-button>-->
+<!--              <el-button type="text" class="common-btn-text-primary" @click="handleDelete(scope.row)">移除</el-button>-->
+<!--            </template>-->
+<!--          </el-table-column>-->
+        </el-table>
+        <pagination
+          v-show="total > 0"
+          v-model:page="queryParams.page"
+          v-model:limit="queryParams.pageSize"
+          :total="total"
+          @pagination="tableData"
+        />
+      </div>
+    </div>
+    <BussinessAdd v-if="BussinessAddState.show"  @close="handleCancel" />
+    <BussinessEdit v-if="BussinessEditState.show" :event-id="BussinessEditState.eventId"  @close="handleCancel" />
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref,reactive, onMounted, onBeforeUnmount } from "vue";
+import {companyDelete, getCompanyList} from "@/api/riskPrevention/BusinessPortraits";
+import BussinessAdd from "@/views/riskPrevention/SafetyProductionManagement/BussinessAdd.vue";
+// import BussinessEdit from "./BussinessEdit.vue";
+import {to} from "await-to-js";
+
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const showSearch = ref(true);
+// const tableData = ref();
+const multiple = ref(true);
+const ids = ref<Array<number | string>>([]);
+const single = ref(true);
+// 定义响应式变量
+const loading = ref(false);
+const maxHeight = ref(window.innerHeight * 0.8);
+const total = ref();
+// 处理窗口大小变化
+const handleResize = () => {
+  maxHeight.value = window.innerHeight * 0.8;
+};
+const initFormData = reactive({
+  goods_information: '',
+  odd_numbers: '',
+  type: '',
+  change_inventory: '',
+  remaining_inventory: '',
+  created_time: ''
+});
+const data =reactive({
+  form: {...initFormData},
+  queryParams:{
+    page: '1',
+    pageSize: '10',
+    type: '',
+    keycode1: '',
+    keyword2: ''
+  },
+  selectedRow: null,
+  selectedRowKeys: []
+});
+const tableData = ref([
+  {
+    "goods_information": "苹果 iPhone 13 Pro Max 256GB 石墨色",
+    "odd_numbers": "WH20230401001",
+    "type": "入库",
+    "change_inventory": 50,
+    "remaining_inventory": 200,
+    "created_time": "2023-04-01T10:30:00Z"
+  },
+  {
+    "goods_information": "华为 MateBook X Pro 笔记本电脑",
+    "odd_numbers": "WH20230401002",
+    "type": "出库",
+    "change_inventory": -10,
+    "remaining_inventory": 190,
+    "created_time": "2023-04-01T11:15:00Z"
+  },
+  {
+    "goods_information": "小米 Redmi Note 11 Pro+ 5G 手机",
+    "odd_numbers": "WH20230401003",
+    "type": "入库",
+    "change_inventory": 30,
+    "remaining_inventory": 150,
+    "created_time": "2023-04-01T13:45:00Z"
+  },
+  {
+    "goods_information": "三星 Galaxy S22 Ultra 5G 手机",
+    "odd_numbers": "WH20230401004",
+    "type": "出库",
+    "change_inventory": -5,
+    "remaining_inventory": 55,
+    "created_time": "2023-04-01T15:00:00Z"
+  },
+  {
+    "goods_information": "戴尔 XPS 13 9310 笔记本电脑",
+    "odd_numbers": "WH20230402001",
+    "type": "入库",
+    "change_inventory": 15,
+    "remaining_inventory": 30,
+    "created_time": "2023-04-02T09:00:00Z"
+  }
+])
+
+
+const { queryParams, form } = toRefs(data);
+
+const type = [
+  { value: '', label: '全部' },
+  { value: '0', label: '出库' },
+  { value: '1', label: '入库' }
+];
+
+const handleQuery = () => {
+  queryParams.value.page = 1;
+  // fetchWorkrData();
+};
+const resetQuery = () => {
+  queryParams.value = { page: 1, pageSize: 10, area_code: '', keycode: '' };
+  handleQuery();
+};
+const BussinessAddState = reactive({
+  show: false, // 初始化show为false
+});
+
+const BussinessEditState = reactive({
+  show:false
+});
+
+const handleAdd = () => {
+  BussinessAddState.show = true;
+};
+
+const handleDelete = async (row) => {
+  let id = [];
+  if (row) {
+    id = [row.id];
+  } else {
+    id = ids.value;
+  }
+  const [err] = await to(proxy?.$modal.confirm('是否确认删除选择的数据项?') as any);
+  if (!err) {
+    await companyDelete(id);
+    proxy.$modal.msgSuccess('删除成功');
+    fetchWorkrData();
+  }
+};
+const handleedit = (row) => {
+  BussinessEditState.eventId = row.id + "";
+  BussinessEditState.show = true;
+};
+
+const handleCancel = () => {
+  BussinessAddState.show = false;
+  BussinessEditState.show =false;
+};
+
+const fetchWorkrData = () => {
+  // loading.value = true;
+  // getCompanyList(queryParams.value)
+  //   .then((res) => {
+  //     tableData.value = res.data;
+  //     total.value = res.total;
+  //   })
+  //   .finally(() => {
+  //     loading.value = false;
+  //   });
+};
+
+const handleSelectionChange = (selection) => {
+  ids.value = selection.map((item) => item.id);
+  selectedRow.value = selection.length === 1 ? selection[0] : null;
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+onMounted(() => {
+  window.addEventListener('resize', handleResize);
+  fetchWorkrData();
+});
+
+// 在组件卸载前移除窗口大小变化监听器
+onBeforeUnmount(() => {
+  window.removeEventListener('resize', handleResize);
+
+});
+</script>
+
+<style lang="scss" scoped></style>
+
+

+ 14 - 15
src/views/comprehensiveGuarantee/MaterialReserveManagement/MaterialInformation.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div v-show="!addMaterialInformationState.show " class="app-container">
+    <div v-show="!addMaterialInformationState.show && !MaterialInformationDetailsState.show " class="app-container">
       <div>
         <transition name="fade">
           <div v-show="showSearch" class="mb-[10px]">
@@ -41,8 +41,8 @@
             <el-row :gutter="30" style="height: 50px">
               <el-col :span="10">
                 <el-button type="primary" @click="handleAdd">新增</el-button>
-                <el-button type="primary" @click="handleImport">数据导入</el-button>
-                <el-button type="primary" @click="handleExport">导出盘点</el-button>
+                <el-button type="primary" >数据导入</el-button>
+                <el-button type="primary" >导出盘点</el-button>
               </el-col>
             </el-row>
           </div>
@@ -89,9 +89,9 @@
           <el-table-column label="保质期预警推送人" align="center" prop="shelfLifeWarningNotifier" show-overflow-tooltip/>
           <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
             <template #default="scope">
-              <el-button type="text" class="common-btn-text-primary" @click="handleAdd">详情</el-button>
-              <el-button type="text" class="common-btn-text-primary" @click="handleAdd">编辑</el-button>
-              <el-button type="text" class="common-btn-text-primary" @click="handleView">移除</el-button>
+              <el-button type="text" class="common-btn-text-primary" @click="handleEdit">详情</el-button>
+              <el-button type="text" class="common-btn-text-primary" @click="handleEdit">编辑</el-button>
+              <el-button type="text" class="common-btn-text-primary" >移除</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -105,13 +105,13 @@
       </div>
     </div>
     <addMaterialInformation v-if="addMaterialInformationState.show" @close="handleCancel" />
-<!--    <impotTypesMaterials v-if="impotTypesMaterialsState.show" @close="handleCancel" />-->
+    <MaterialInformationDetails v-if="MaterialInformationDetailsState.show" @close="handleCancel" />
   </div>
 </template>
 
 <script setup lang="ts">
 import addMaterialInformation from "./addMaterialInformation.vue";
-import impotTypesMaterials from "./impotTypesMaterials.vue";
+import MaterialInformationDetails from "./MaterialInformationDetails.vue";
 import { ref,reactive, onMounted, onBeforeUnmount } from "vue";
 const showSearch = ref(true);
 // 定义响应式变量
@@ -257,22 +257,21 @@ const resetQuery = () => {
 const addMaterialInformationState = reactive({
   show: false, // 初始化show为false
 });
+const MaterialInformationDetailsState = reactive({
+  show:false,
+})
 
 const handleAdd = () => {
   addMaterialInformationState.show = true;
 };
 
-const upload = () => {
-  // 这里可能需要实现上传逻辑,暂时只是显示WriteForm作为示例
-  addMaterialInformationState.show = true;
+const handleEdit = () => {
+  MaterialInformationDetailsState.show = true;
 };
 
 const handleCancel = () => {
   addMaterialInformationState.show = false;
-};
-
-const handleImport = () => {
-  impotTypesMaterialsState.show=true;
+  MaterialInformationDetailsState.show = false;
 };
 
 const handleView = () => {

+ 289 - 0
src/views/comprehensiveGuarantee/MaterialReserveManagement/MaterialInformationDetails.vue

@@ -0,0 +1,289 @@
+<template>
+  <div class="common-dialog">
+    <div class="common-dialog-content">
+      <div class="common-dialog-title-box">
+        <i class="common-dialog-title-icon" />
+        <div>新增</div>
+      </div>
+      <div class="common-dialog-box">
+        <el-form ref="eventFormRef" :model="form" :rules="rules" label-width="120px">
+          <el-form-item label="物资图片数据:" prop="materialImageData">
+            <el-input v-model="form.materialImageData" placeholder="请输入物资图片数据" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="物资编码:" prop="materialCode">
+            <el-input v-model="form.materialCode" placeholder="请输入物资编码" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="物资名称:" prop="materialName">
+            <el-input v-model="form.materialName" placeholder="请输入物资名称" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="仓库:" prop="warehouseName">
+            <el-input v-model="form.warehouseName" placeholder="请输入仓库名称" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="库存:" prop="stockQuantity">
+            <el-input v-model="form.stockQuantity" placeholder="请输入库存数量" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="规格:" prop="specification">
+            <el-input v-model="form.specification" placeholder="请输入规格" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="型号:" prop="model">
+            <el-input v-model="form.model" placeholder="请输入型号" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="分类名称:" prop="categoryName">
+            <el-input v-model="form.categoryName" placeholder="请输入分类名称" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="物资类型:" prop="materialType">
+            <el-input v-model="form.materialType" placeholder="请输入物资类型" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="计量单位名称:" prop="measurementUnit">
+            <el-input v-model="form.measurementUnit" placeholder="请输入计量单位名称" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="品牌名称:" prop="brandName">
+            <el-input v-model="form.brandName" placeholder="请输入品牌名称" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="长(cm):" prop="lengthCm">
+            <el-input v-model="form.lengthCm" placeholder="请输入长度(cm)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="宽(cm):" prop="widthCm">
+            <el-input v-model="form.widthCm" placeholder="请输入宽度(cm)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="高(cm):" prop="heightCm">
+            <el-input v-model="form.heightCm" placeholder="请输入高度(cm)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="体积(cm³):" prop="volumeCm3">
+            <el-input v-model="form.volumeCm3" placeholder="请输入体积(cm³)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="毛重(kg):" prop="grossWeightKg">
+            <el-input v-model="form.grossWeightKg" placeholder="请输入毛重(kg)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="净重(kg):" prop="netWeightKg">
+            <el-input v-model="form.netWeightKg" placeholder="请输入净重(kg)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="生产厂商:" prop="manufacturer">
+            <el-input v-model="form.manufacturer" placeholder="请输入生产厂商" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="库存预警推送人:" prop="stockWarningNotifier">
+            <el-input v-model="form.stockWarningNotifier" placeholder="请输入库存预警推送人" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="产地:" prop="origin">
+            <el-input v-model="form.origin" placeholder="请输入产地" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="状态:" prop="status">
+            <el-input v-model="form.status" placeholder="请输入状态" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="备注:" prop="remarks">
+            <el-input v-model="form.remarks" placeholder="请输入备注" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="库房:" prop="storageRoom">
+            <el-input v-model="form.storageRoom" placeholder="请输入库房" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="包装数量:" prop="packagingQuantity">
+            <el-input v-model="form.packagingQuantity" placeholder="请输入包装数量" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="包装体积(cm³):" prop="packagingVolumeCm3">
+            <el-input v-model="form.packagingVolumeCm3" placeholder="请输入包装体积(cm³)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="包装重量(kg):" prop="packagingWeightKg">
+            <el-input v-model="form.packagingWeightKg" placeholder="请输入包装重量(kg)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="价格:" prop="price">
+            <el-input v-model="form.price" placeholder="请输入价格" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="售卖价格:" prop="sellingPrice">
+            <el-input v-model="form.sellingPrice" placeholder="请输入售卖价格" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="价值:" prop="value">
+            <el-input v-model="form.value" placeholder="请输入价值" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="成本价格:" prop="costPrice">
+            <el-input v-model="form.costPrice" placeholder="请输入成本价格" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="适用灾种:" prop="applicableDisasterType">
+            <el-input v-model="form.applicableDisasterType" placeholder="请输入适用灾种" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="使用保养:" prop="usageAndMaintenance">
+            <el-input v-model="form.usageAndMaintenance" placeholder="请输入使用保养信息" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="供应商名称:" prop="supplierName">
+            <el-input v-model="form.supplierName" placeholder="请输入供应商名称" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="特殊运输要求:" prop="specialTransportRequirements">
+            <el-input v-model="form.specialTransportRequirements" placeholder="请输入特殊运输要求" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="材质:" prop="material">
+            <el-input v-model="form.material" placeholder="请输入材质" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="保质期:" prop="shelfLife">
+            <el-input v-model="form.shelfLife" placeholder="请输入保质期" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="库存预警数量:" prop="stockWarningQuantity">
+            <el-input v-model="form.stockWarningQuantity" placeholder="请输入库存预警数量" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="保质期到期预警天数:" prop="shelfLifeWarningDays">
+            <el-input v-model="form.shelfLifeWarningDays" placeholder="请输入保质期到期预警天数" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="使用预警推送人:" prop="shelfLifeWarningNotifier">
+            <el-input v-model="form.shelfLifeWarningNotifier" placeholder="请输入使用预警推送人" style="width: 468px !important" />
+          </el-form-item>
+        </el-form>
+        <div class="common-dialog-footer">
+          <el-button @click="closeDialog">取消</el-button>
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script setup lang="ts">
+import { ref, reactive, toRefs } from 'vue';
+const emits = defineEmits(['close']);
+const buttonLoading = ref(false);
+// 表单初始数据
+// const initFormData = {
+//   "materialImageData": '',
+//   "materialCode": '',
+//   "materialName": '',
+//   "warehouseName": '',
+//   "stockQuantity": '',
+//   "specification": '',
+//   "model": '',
+//   "categoryName": '',
+//   "materialType": '',
+//   "measurementUnit": '',
+//   "brandName": '',
+//   "lengthCm": '',
+//   "widthCm": '',
+//   "heightCm": '',
+//   "volumeCm3": '',
+//   "grossWeightKg": '',
+//   "netWeightKg": '',
+//   "manufacturer": '',
+//   "stockWarningNotifier": '',
+//   "origin": '',
+//   "status": '',
+//   "remarks": '',
+//   "storageRoom": '',
+//   "packagingQuantity": '',
+//   "packagingVolumeCm3": '',
+//   "packagingWeightKg": '',
+//   "price": '',
+//   "sellingPrice": '',
+//   "value": '',
+//   "costPrice": '',
+//   "applicableDisasterType": '',
+//   "usageAndMaintenance": '',
+//   "supplierName": '',
+//   "specialTransportRequirements": '',
+//   "material": '',
+//   "shelfLife": '',
+//   "stockWarningQuantity": '',
+//   "shelfLifeWarningDays": '',
+//   "shelfLifeWarningNotifier": ''
+// };
+
+const form = {
+  "materialImageData": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/...",
+  "materialCode": "M001",
+  "materialName": "钢制螺丝",
+  "warehouseName": "一号仓库",
+  "stockQuantity": "500",
+  "specification": "M10x30",
+  "model": "A123",
+  "categoryName": "五金件",
+  "materialType": "金属",
+  "measurementUnit": "个",
+  "brandName": "精工",
+  "lengthCm": "3",
+  "widthCm": "0.5",
+  "heightCm": "10",
+  "volumeCm3": "15",
+  "grossWeightKg": "2.5",
+  "netWeightKg": "2",
+  "manufacturer": "精工制造有限公司",
+  "stockWarningNotifier": "仓库管理员",
+  "origin": "中国",
+  "status": "在库",
+  "remarks": "无特殊备注",
+  "storageRoom": "一楼东区",
+  "packagingQuantity": "100",
+  "packagingVolumeCm3": "1500",
+  "packagingWeightKg": "25",
+  "price": "0.5",
+  "sellingPrice": "1",
+  "value": "500",
+  "costPrice": "0.4",
+  "applicableDisasterType": "无",
+  "usageAndMaintenance": "定期检查,防止生锈",
+  "supplierName": "精工供应商",
+  "specialTransportRequirements": "无特殊要求",
+  "material": "钢",
+  "shelfLife": "24个月",
+  "stockWarningQuantity": "100",
+  "shelfLifeWarningDays": "30",
+  "shelfLifeWarningNotifier": "采购部"
+};
+
+// 表单数据
+// const data = reactive({
+//   // form: { ...initFormData },
+//   rules: {
+//     // event_title: [{ required: true, message: '事件标题不能为空', trigger: 'blur' }]
+//   }
+// });
+
+// const { form, rules } = toRefs(data);
+
+const closeDialog = () => {
+  emits('close');
+};
+const submitForm = () => {
+}
+</script>
+
+<style lang="scss" scoped>
+.flex {
+  display: flex;
+  span {
+    white-space: nowrap;
+  }
+}
+</style>
+
+

+ 3 - 2
src/views/comprehensiveGuarantee/MaterialReserveManagement/OutboundManagement.vue

@@ -237,10 +237,11 @@ const upload = () => {
 
 const handleCancel = () => {
   addOutboundState.show = false;
+  outboundDetailsState.show = false;
 };
 
-const handleWrite = (row) => {
-  outboundDetailsState.eventId = row.outboundOrderId + "";
+const handleWrite = (row:any) => {
+  outboundDetailsState.eventId = row.id + "";
   outboundDetailsState.show=true;
 };
 

+ 101 - 0
src/views/comprehensiveGuarantee/MaterialReserveManagement/TypesMaterialsDetails.vue

@@ -0,0 +1,101 @@
+<template>
+  <div class="common-dialog">
+    <div class="common-dialog-content">
+      <div class="common-dialog-title-box">
+        <i class="common-dialog-title-icon" />
+        <div>新增物资种类</div>
+      </div>
+      <div class="common-dialog-box">
+        <el-form ref="eventFormRef" :model="form" :rules="rules" label-width="120px">
+          <el-form-item label="物资类别id:" prop="material_category_id">
+            <el-input v-model="form.material_category_id" placeholder="请输入物资类别id" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="父类id:" prop="parent_category_id">
+            <el-input v-model="form.parent_category_id" placeholder="请输入父类id" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="物资类别名称:" prop="material_category_name">
+            <el-input v-model="form.material_category_name" placeholder="请输入物资类别名称" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="物资类别等级:" prop="material_category_level">
+            <el-input v-model="form.material_category_level" placeholder="请输入物资类别等级" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="排序:" prop="sort_order">
+            <el-input v-model="form.sort_order" placeholder="请输入排序" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="显示状态(0隐藏 1显示):" prop="display_status">
+            <el-select v-model="form.display_status" placeholder="请选择显示状态">
+              <el-option label="隐藏" value="0"></el-option>
+              <el-option label="显示" value="1"></el-option>
+            </el-select>
+          </el-form-item>
+        </el-form>
+        <div class="common-dialog-footer">
+          <el-button @click="closeDialog">取消</el-button>
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script setup lang="ts">
+import { ref, reactive, toRefs } from 'vue';
+const emits = defineEmits(['close']);
+const buttonLoading = ref(false);
+// 表单初始数据
+// const initFormData = {
+//   material_category_id: '',         // 物资类别id
+//   parent_category_id: '',           // 父类id
+//   material_category_name: '',       // 物资类别名称
+//   material_category_level: '',      // 物资类别等级
+//   sort_order: '',                   // 排序
+//   display_status: ''
+// };
+
+const form = {
+  "material_category_id": "MC001",
+  "parent_category_id": "PC001",
+  "material_category_name": "电子设备",
+  "material_category_level": 2,
+  "sort_order": 10,
+  "display_status": 1
+};
+
+// 表单数据
+const data = reactive({
+  // form: { ...initFormData },
+  rules: {
+    event_title: [{ required: true, message: '事件标题不能为空', trigger: 'blur' }],
+    event_type: [{ required: true, message: '事件类型不能为空', trigger: 'blur' }],
+    event_level: [{ required: true, message: '事件等级不能为空', trigger: 'blur' }],
+    event_status: [{ required: true, message: '事件状态不能为空', trigger: 'blur' }],
+    address: [{ required: true, message: '事件地点不能为空', trigger: 'blur' }],
+    event_time: [{ required: true, message: '事发时间不能为空', trigger: 'blur' }],
+    report_time: [{ required: true, message: '上报时间不能为空', trigger: 'blur' }],
+    event_source: [{ required: true, message: '事件来源不能为空', trigger: 'blur' }],
+    event_description: [{ required: true, message: '事件描述不能为空', trigger: 'blur' }],
+    contact: [{ required: true, message: '联系方式不能为空', trigger: 'blur' }]
+  }
+});
+
+// const { form, rules } = toRefs(data);
+
+const closeDialog = () => {
+  emits('close');
+};
+const submitForm = () => {
+}
+</script>
+
+<style lang="scss" scoped>
+.flex {
+  display: flex;
+  span {
+    white-space: nowrap;
+  }
+}
+</style>

+ 17 - 9
src/views/comprehensiveGuarantee/MaterialReserveManagement/TypesMaterialsManagement.vue

@@ -1,7 +1,7 @@
 <!--物资种类管理-->
 <template>
   <div>
-    <div v-show="!addTypesMaterialsState.show && ! impotTypesMaterialsState.show" class="app-container">
+    <div v-show="!addTypesMaterialsState.show && ! impotTypesMaterialsState.show &&! TypesMaterialsDetailsState.show" class="app-container">
       <div>
         <transition name="fade">
           <el-row :gutter="30" style="height: 50px">
@@ -22,7 +22,7 @@
           <el-table-column label="显示状态(0隐藏 1显示)" align="center" prop="display_status" show-overflow-tooltip/>
           <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
             <template #default="scope">
-              <el-button type="text" class="common-btn-text-primary" @click="handleAdd">详情</el-button>
+              <el-button type="text" class="common-btn-text-primary" @click="handleEdit">详情</el-button>
               <el-button type="text" class="common-btn-text-primary" @click="handleAdd">编辑</el-button>
               <el-button type="text" class="common-btn-text-primary" @click="handleView">移除</el-button>
             </template>
@@ -38,12 +38,14 @@
       </div>
     </div>
     <addTypesMaterials v-if="addTypesMaterialsState.show" @close="handleCancel" />
+    <TypesMaterialsDetails v-if="TypesMaterialsDetailsState.show" @close="handleCancel" />
     <impotTypesMaterials v-if="impotTypesMaterialsState.show" @close="handleCancel" />
   </div>
 </template>
 <script setup lang="ts">
 import addTypesMaterials from "./addTypesMaterials.vue";
 import impotTypesMaterials from "./impotTypesMaterials.vue";
+import TypesMaterialsDetails from "./TypesMaterialsDetails.vue";
 import { ref,reactive, onMounted, onBeforeUnmount } from "vue";
 // 定义响应式变量
 const loading = ref(false);
@@ -115,9 +117,9 @@ const addTypesMaterialsState = reactive({
   show: false, // 初始化show为false
 });
 
-const outboundDetailsState = reactive({
-  show: false, // 初始化show为false
-});
+const TypesMaterialsDetailsState = reactive({
+  show: false,
+})
 
 const impotTypesMaterialsState = reactive({
   show: false,
@@ -127,6 +129,14 @@ const handleAdd = () => {
   addTypesMaterialsState.show = true;
 };
 
+const handleEdit = () => {
+  TypesMaterialsDetailsState.show=true;
+};
+
+const handleView = () => {
+
+};
+
 const upload = () => {
   // 这里可能需要实现上传逻辑,暂时只是显示WriteForm作为示例
   addTypesMaterialsState.show = true;
@@ -134,16 +144,14 @@ const upload = () => {
 
 const handleCancel = () => {
   addTypesMaterialsState.show = false;
+  impotTypesMaterialsState.show=false;
+  TypesMaterialsDetailsState.show=false;
 };
 
 const handleImport = () => {
   impotTypesMaterialsState.show=true;
 };
 
-const handleView = () => {
-  outboundDetailsState.show=true;
-};
-
 const handlePaginationChange = (page: number) => {
   queryParams.page = page;
   // fetchTableData(); //

+ 122 - 0
src/views/comprehensiveGuarantee/MaterialReserveManagement/WarehouseDetails.vue

@@ -0,0 +1,122 @@
+<template>
+  <div class="common-dialog">
+    <div class="common-dialog-content">
+      <div class="common-dialog-title-box">
+        <i class="common-dialog-title-icon" />
+        <div>新增出库单</div>
+      </div>
+      <div class="common-dialog-box">
+        <el-form ref="eventFormRef" :model="form" :rules="rules" label-width="120px">
+          <el-form-item label="库房名称:" prop="warehouse_name">
+            <el-input v-model="form.warehouse_name" placeholder="请输入库房名称" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="所在仓库:" prop="warehouse_location">
+            <el-input v-model="form.warehouse_location" placeholder="请输入所在仓库" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="库房面积(平方米):" prop="warehouse_area_square_meters">
+            <el-input v-model="form.warehouse_area_square_meters" type="number" placeholder="请输入库房面积(平方米)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="可用仓储面积(平方米):" prop="available_warehouse_area_square_meters">
+            <el-input v-model="form.available_warehouse_area_square_meters" type="number" placeholder="请输入可用仓储面积(平方米)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="高度(米):" prop="height_meters">
+            <el-input v-model="form.height_meters" type="number" placeholder="请输入高度(米)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="库房容积(立方米):" prop="warehouse_volume_cubic_meters">
+            <el-input v-model="form.warehouse_volume_cubic_meters" type="number" placeholder="请输入库房容积(立方米)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="可用库房容积(立方米):" prop="available_warehouse_volume_cubic_meters">
+            <el-input v-model="form.available_warehouse_volume_cubic_meters" type="number" placeholder="请输入可用库房容积(立方米)" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="保管类型:" prop="storage_type">
+            <el-input v-model="form.storage_type" placeholder="请输入保管类型" style="width: 468px !important" />
+            <!-- 注意:如果保管类型是固定选项,则可以使用el-select -->
+          </el-form-item>
+
+          <el-form-item label="等级:" prop="grade">
+            <el-input v-model="form.grade" placeholder="请输入等级" style="width: 468px !important" />
+            <!-- 注意:如果等级是固定选项(如A/B/C),则可以使用el-select -->
+          </el-form-item>
+
+          <el-form-item label="存放类型:" prop="storage_placement_type">
+            <el-input v-model="form.storage_placement_type" placeholder="请输入存放类型" style="width: 468px !important" />
+          </el-form-item>
+
+          <el-form-item label="库存确认最新时间:" prop="inventory_confirmation_latest_time">
+            <el-date-picker
+              v-model="form.inventory_confirmation_latest_time"
+              type="datetime"
+              placeholder="请选择库存确认最新时间"
+              style="width: 468px !important"
+            />
+          </el-form-item>
+        </el-form>
+        <div class="common-dialog-footer">
+          <el-button @click="closeDialog">取消</el-button>
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm">确定</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script setup lang="ts">
+import { ref, reactive, toRefs } from 'vue';
+const emits = defineEmits(['close']);
+const buttonLoading = ref(false);
+// 表单初始数据
+// const initFormData = {
+//   warehouse_name: '',
+//   warehouse_location: '',
+//   warehouse_area_square_meters: '',
+//   available_warehouse_area_square_meters: '',
+//   height_meters: '',
+//   warehouse_volume_cubic_meters: '',
+//   available_warehouse_volume_cubic_meters: '',
+//   storage_type: '',
+//   grade: '',
+//   storage_placement_type: '',
+//   inventory_confirmation_latest_time: ''
+// };
+const form ={
+    warehouse_name: '测试库房',
+    warehouse_location: '北京市朝阳区某仓库',
+    warehouse_area_square_meters: 1000, // 库房面积,单位:平方米
+    available_warehouse_area_square_meters: 800, // 可用仓储面积,单位:平方米
+    height_meters: 5, // 高度,单位:米
+    warehouse_volume_cubic_meters: 5000, // 库房容积,单位:立方米
+    available_warehouse_volume_cubic_meters: 4000, // 可用库房容积,单位:立方米
+    storage_type: '常温存储', // 保管类型
+    grade: 'A', // 等级
+    storage_placement_type: '地面堆放', // 存放类型
+    inventory_confirmation_latest_time: '2023-10-01T10:00:00' // 库存确认最新时间,格式:YYYY-MM-DDTHH:mm:ss
+  };
+
+// 表单数据
+const data = reactive({
+  // form: { ...initFormData },
+});
+
+// const { form, rules } = toRefs(data);
+
+const closeDialog = () => {
+  emits('close');
+};
+const submitForm = () => {
+}
+</script>
+
+<style lang="scss" scoped>
+.flex {
+  display: flex;
+  span {
+    white-space: nowrap;
+  }
+}
+</style>

+ 10 - 7
src/views/comprehensiveGuarantee/MaterialReserveManagement/WarehouseManagement.vue

@@ -40,11 +40,12 @@
       </div>
     </div>
     <addWarehouse v-if="addWarehouseState.show" @close="handleCancel" />
-    <outboundDetails v-if="outboundDetailsState.show" @close="handleCancel" />
+    <WarehouseDetails v-if="WarehouseDetailsState.show" @close="handleCancel" />
   </div>
 </template>
 <script setup lang="ts">
 import addWarehouse from "./addWarehouse.vue";
+import WarehouseDetails from "./WarehouseDetails.vue";
 import outboundDetails from "./outboundDetails.vue";
 import { ref,reactive, onMounted, onBeforeUnmount } from "vue";
 // 定义响应式变量
@@ -106,29 +107,31 @@ const tableData = [
 const addWarehouseState = reactive({
   show: false, // 初始化show为false
 });
+
 const outboundDetailsState = reactive({
   show: false, // 初始化show为false
 });
 
+const WarehouseDetailsState = reactive({
+  show: false, // 初始化show为false
+});
+
 const handleAdd = () => {
   addWarehouseState.show = true;
 };
 
-const upload = () => {
-  // 这里可能需要实现上传逻辑,暂时只是显示WriteForm作为示例
-  addGodownState.show = true;
-};
 
 const handleCancel = () => {
   addWarehouseState.show = false;
+  WarehouseDetailsState.show = false;
 };
 
 const handleWrite = () => {
-  outboundDetailsState.show=true;
+  WarehouseDetailsState.show=true;
 };
 
 const handleView = () => {
-  outboundDetailsState.show=true;
+  WarehouseDetailsState.show=true;
 };
 
 const handlePaginationChange = (page: number) => {

+ 1 - 1
src/views/comprehensiveGuarantee/MaterialReserveManagement/addTypesMaterials.vue

@@ -3,7 +3,7 @@
     <div class="common-dialog-content">
       <div class="common-dialog-title-box">
         <i class="common-dialog-title-icon" />
-        <div>新增出库单</div>
+        <div>新增物资种类</div>
       </div>
       <div class="common-dialog-box">
         <el-form ref="eventFormRef" :model="form" :rules="rules" label-width="120px">

+ 6 - 6
src/views/comprehensiveGuarantee/MaterialReserveManagement/outboundDetails.vue

@@ -59,7 +59,7 @@
           </el-form-item>
         </el-form>
         <div class="common-dialog-footer">
-          <el-button type="primary" @click="closeDialog">返回</el-button>
+          <el-button type="primary" @click="closeDialog()">返回</el-button>
         </div>
       </div>
     </div>
@@ -67,17 +67,17 @@
 </template>
 
 <script setup lang="ts">
-import { ref, watch } from 'vue';
+import { ref, watch} from 'vue';
 import {updatetask} from "@/api/inspectionWork/inspector";
 import {ElMessage} from "element-plus";
-
+import { defineEmits,defineProps } from 'vue';
 const emits = defineEmits(['close']);
 const closeDialog = () => {
   emits('close');
 };
-const props = defineProps<{
-  eventId: string | number;
-}>();
+const props = defineProps({
+  eventId: String
+});
 
 
 // 模拟的数据