From dade6a8b4772abc113383246d05ab59162630e7c Mon Sep 17 00:00:00 2001
From: zhangwei <1504152376@qq.com>
Date: 星期三, 27 八月 2025 17:21:21 +0800
Subject: [PATCH] '上传变更公告获取详情与删除'

---
 src/views/system/dept/detail.vue       |    1 
 src/views/system/dept/uploadform.vue   |   18 +++
 src/views/system/dept/utils/types.ts   |    1 
 src/components/ReDialog/index.vue      |   49 +++++++++++
 src/views/system/dept/utils/detail.tsx |   50 ++++++++++-
 src/api/item/index.ts                  |   59 ++++++++++++++
 src/api/types.ts                       |    9 ++
 pnpm-lock.yaml                         |   13 +++
 8 files changed, 185 insertions(+), 15 deletions(-)

diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b349195..267aa74 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -123,6 +123,9 @@
       '@types/sortablejs':
         specifier: ^1.15.8
         version: 1.15.8
+      '@vitejs/plugin-basic-ssl':
+        specifier: ^2.1.0
+        version: 2.1.0(vite@6.3.3(@types/node@20.17.30)(jiti@2.4.2)(lightningcss@1.29.2)(sass@1.87.0)(yaml@2.7.1))
       '@vitejs/plugin-vue':
         specifier: ^5.2.3
         version: 5.2.3(vite@6.3.3(@types/node@20.17.30)(jiti@2.4.2)(lightningcss@1.29.2)(sass@1.87.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3))
@@ -1325,6 +1328,12 @@
   '@typescript-eslint/visitor-keys@8.31.0':
     resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==}
     engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@vitejs/plugin-basic-ssl@2.1.0':
+    resolution: {integrity: sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==}
+    engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+    peerDependencies:
+      vite: ^6.0.0 || ^7.0.0
 
   '@vitejs/plugin-vue-jsx@4.1.2':
     resolution: {integrity: sha512-4Rk0GdE0QCdsIkuMmWeg11gmM4x8UmTnZR/LWPm7QJ7+BsK4tq08udrN0isrrWqz5heFy9HLV/7bOLgFS8hUjA==}
@@ -4755,6 +4764,10 @@
       '@typescript-eslint/types': 8.31.0
       eslint-visitor-keys: 4.2.0
 
+  '@vitejs/plugin-basic-ssl@2.1.0(vite@6.3.3(@types/node@20.17.30)(jiti@2.4.2)(lightningcss@1.29.2)(sass@1.87.0)(yaml@2.7.1))':
+    dependencies:
+      vite: 6.3.3(@types/node@20.17.30)(jiti@2.4.2)(lightningcss@1.29.2)(sass@1.87.0)(yaml@2.7.1)
+
   '@vitejs/plugin-vue-jsx@4.1.2(vite@6.3.3(@types/node@20.17.30)(jiti@2.4.2)(lightningcss@1.29.2)(sass@1.87.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3))':
     dependencies:
       '@babel/core': 7.26.10
diff --git a/src/api/item/index.ts b/src/api/item/index.ts
index b4c9771..1f438e0 100644
--- a/src/api/item/index.ts
+++ b/src/api/item/index.ts
@@ -6,7 +6,7 @@
 
 import { http } from "@/utils/http";
 import { baseUrlApi } from "../util";
-import type { Result, PageResult } from "../types";
+import type { Result, PageResult, ChangeDetail } from "../types";
 
 // 鑾峰彇琛屾斂鍖哄煙鍒楄〃
 export const getRegionList = () => {
@@ -203,7 +203,7 @@
   );
 };
 
-// 閲囪喘浠g悊浜哄彂甯冩嫑鏍�
+// 閲囪喘浠g悊浜哄彂甯冨彉鏇村叕鍛�
 export const changezhaobiao = (data?: object) => {
   return http.request<Result>(
     "post",
@@ -213,3 +213,58 @@
     }
   );
 };
+
+// 鑾峰彇鍙樻洿鍏憡璇︽儏
+export const changeDetail = params => {
+  return http.request<ChangeDetail>(
+    "get",
+    baseUrlApi("/api/tenderOrder/changeDetail"),
+    {
+      params
+    }
+  );
+};
+
+// 閲囪喘浠g悊浜哄垹闄ゅ彉鏇村叕鍛�
+export const cHangeDelete = (data?: object) => {
+  return http.request<Result>(
+    "post",
+    baseUrlApi("/api/tenderOrder/cHangeDelete"),
+    {
+      data
+    }
+  );
+};
+
+// 閲囪喘浠g悊浜虹‘璁や緵搴斿晢宸叉敮浠樻姤鍚嶈垂
+export const querenBaomingfei = (data?: object) => {
+  return http.request<Result>(
+    "post",
+    baseUrlApi("/api/tenderOrder/querenBaomingfei"),
+    {
+      data
+    }
+  );
+};
+
+// 浠g悊鍟嗗彂甯冧腑鏍囨枃浠�
+export const addZhongbiao = (data?: object) => {
+  return http.request<Result>(
+    "post",
+    baseUrlApi("/api/tenderOrder/addZhongbiao"),
+    {
+      data
+    }
+  );
+};
+
+// 閲囪喘浠g悊浜虹‘璁や緵搴斿晢宸叉敮浠樹唬鐞嗚垂
+export const querenDailifei = (data?: object) => {
+  return http.request<Result>(
+    "post",
+    baseUrlApi("/api/tenderOrder/querenDailifei"),
+    {
+      data
+    }
+  );
+};
diff --git a/src/api/types.ts b/src/api/types.ts
index ceb666f..77504ed 100644
--- a/src/api/types.ts
+++ b/src/api/types.ts
@@ -1,3 +1,5 @@
+import type { TenderInfo } from "@/views/system/dept/utils/types";
+
 export type Result = {
   success: boolean;
   result: Array<any>;
@@ -117,3 +119,10 @@
   code: string | number;
   result: RoleItem[];
 };
+
+export type ChangeDetail = {
+  message: string;
+  success: boolean;
+  code: string | number;
+  result: TenderInfo;
+};
diff --git a/src/components/ReDialog/index.vue b/src/components/ReDialog/index.vue
index fb3abaf..ec9143d 100644
--- a/src/components/ReDialog/index.vue
+++ b/src/components/ReDialog/index.vue
@@ -17,11 +17,56 @@
 
 const sureBtnMap = ref({});
 const fullscreen = ref(false);
-
+const isPush = (footerButtons, options) => {
+  let arr = [
+    {
+      label: "鍙栨秷",
+      text: true,
+      bg: true,
+      btnClick: ({ dialog: { options, index } }) => {
+        const done = () => closeDialog(options, index, { command: "cancel" });
+        if (options?.beforeCancel && isFunction(options?.beforeCancel)) {
+          options.beforeCancel(done, { options, index });
+        } else {
+          done();
+        }
+      }
+    },
+    {
+      label: "纭畾",
+      type: "primary",
+      text: true,
+      bg: true,
+      popconfirm: options?.popconfirm,
+      btnClick: ({ dialog: { options, index } }) => {
+        if (options?.sureBtnLoading) {
+          sureBtnMap.value[index] = Object.assign({}, sureBtnMap.value[index], {
+            loading: true
+          });
+        }
+        const closeLoading = () => {
+          if (options?.sureBtnLoading) {
+            sureBtnMap.value[index].loading = false;
+          }
+        };
+        const done = () => {
+          closeLoading();
+          closeDialog(options, index, { command: "sure" });
+        };
+        if (options?.beforeSure && isFunction(options?.beforeSure)) {
+          options.beforeSure(done, { options, index, closeLoading });
+        } else {
+          done();
+        }
+      }
+    }
+  ];
+  return [...footerButtons, ...arr];
+};
 const footerButtons = computed(() => {
   return (options: DialogOptions) => {
     return options?.footerButtons?.length > 0
-      ? options.footerButtons
+      ? isPush(options.footerButtons, options)
       : ([
           {
             label: "鍙栨秷",
diff --git a/src/views/system/dept/detail.vue b/src/views/system/dept/detail.vue
index 1e3f834..ddb1e97 100644
--- a/src/views/system/dept/detail.vue
+++ b/src/views/system/dept/detail.vue
@@ -193,7 +193,6 @@
                     </el-button>
                     <el-button
                       v-if="state.nowInfo.zhaobiaowenjian"
-                      :disabled="!!state.nowInfo.changeOrder"
                       type="primary"
                       plain
                       size="small"
diff --git a/src/views/system/dept/uploadform.vue b/src/views/system/dept/uploadform.vue
index 18d67cf..a41733e 100644
--- a/src/views/system/dept/uploadform.vue
+++ b/src/views/system/dept/uploadform.vue
@@ -19,6 +19,8 @@
 const props = withDefaults(defineProps<TenderProps>(), {
   formInline: () => ({
     id: "", // 涓婚敭Id锛堝繀濉級
+    tenderId: "",
+    higherDeptOptions: [],
     projectName: "",
     toubiaoStartDate: "", // 鎶曟爣鎶ュ悕寮�濮嬫椂闂达紙蹇呭~锛屾牸寮忥細yyyy-MM-dd HH:mm:ss锛�
     toubiaoEndDate: "", // 鎶曟爣鎶ュ悕缁撴潫鏃堕棿锛堝繀濉紝鏍煎紡锛歽yyy-MM-dd HH:mm:ss锛�
@@ -26,6 +28,7 @@
     zhaobiaowenjian: "", // 鎷涙爣鏂囦欢锛堝繀濉紝闀垮害1-512瀛楃锛�
     zhaobiaowenjianName: "",
     biangengwenjian: "",
+    biangengwenjianName: "",
     fujian: "", // 闄勪欢锛堝彲閫夛紝鏈�澶ч暱搴�512瀛楃锛屽彲涓虹┖锛�
     fujianName: "", // 闄勪欢锛堝彲閫夛紝鏈�澶ч暱搴�512瀛楃锛屽彲涓虹┖锛�
     kaibiaodidian: "" // 寮�鏍囧湴鐐癸紙蹇呭~锛岄暱搴�1-250瀛楃锛�
@@ -265,7 +268,16 @@
   upload.value!.handleStart(file);
 };
 defineExpose({ getRef });
-onMounted(async () => {});
+onMounted(async () => {
+  if (props.formInline.biangengwenjianName) {
+    validateForm.fileList = [
+      {
+        name: props.formInline.biangengwenjianName,
+        url: props.formInline.biangengwenjian
+      }
+    ];
+  }
+});
 </script>
 
 <template>
@@ -288,7 +300,7 @@
     </el-row>
     <el-row v-else :gutter="30">
       <div v-if="props.isChange" style="width: 100%">
-        <!-- <re-col :value="24" :xs="24" :sm="24">
+        <re-col :value="24" :xs="24" :sm="24">
           <el-form-item label="鏍囬" prop="projectName">
             <el-input
               v-model="newFormInline.projectName"
@@ -296,7 +308,7 @@
               placeholder="璇疯緭鍏ユ爣棰�"
             />
           </el-form-item>
-        </re-col> -->
+        </re-col>
         <re-col :value="24" :xs="24" :sm="24">
           <el-form-item label="鍙樻洿鏂囦欢" prop="biangengwenjian">
             <el-upload
diff --git a/src/views/system/dept/utils/detail.tsx b/src/views/system/dept/utils/detail.tsx
index 6eded09..37982e6 100644
--- a/src/views/system/dept/utils/detail.tsx
+++ b/src/views/system/dept/utils/detail.tsx
@@ -1,6 +1,6 @@
 import tenderForm from "../uploadform.vue";
 import { ref, h, reactive } from "vue";
-import { addDialog } from "@/components/ReDialog";
+import { addDialog, closeDialog } from "@/components/ReDialog";
 import type { TenderInfo } from "./types";
 import { message } from "@/utils/message";
 import { cloneDeep, deviceDetection } from "@pureadmin/utils";
@@ -10,27 +10,35 @@
   fabuzhaobiao,
   changezhaobiao,
   getTenderOrderDetail,
-  updateTittle
+  updateTittle,
+  changeDetail,
+  cHangeDelete
 } from "@/api/item/index";
 
 const formRef = ref();
 
 export function useDetail() {
-  function openUploadDialog(title = "涓婁紶", row?: TenderInfo) {
+  async function openUploadDialog(title = "涓婁紶", row?: TenderInfo) {
+    const detail = await changeDetail({ id: row.id });
+    if (detail.result) {
+      row = detail.result;
+    }
     addDialog({
       title: `${title}鍏憡`,
       props: {
         formInline: {
           tenderId: title == "涓婁紶鍙樻洿" ? row?.id : "",
-          id: title == "涓婁紶" ? row?.id : "",
+          id: row?.id ?? "",
           projectName: row?.projectName ?? "",
           toubiaoStartDate: row?.toubiaoStartDate ?? "", //鎶曟爣鎶ュ悕寮�濮嬫椂闂�
           toubiaoEndDate: row?.toubiaoEndDate ?? "", //鎶曟爣鎶ュ悕缁撴潫鏃堕棿
           kaibiaoDate: row?.kaibiaoDate ?? "", //寮�鏍囨椂闂�
-          biangengwenjian: "", //鎷涙爣鏂囦欢
           fujian: row?.fujian ?? "", //闄勪欢
           fujianName: row?.fujianName ?? "", //闄勪欢
-          kaibiaodidian: row?.kaibiaodidian ?? "" //寮�鏍囧湴鐐�
+          kaibiaodidian: row?.kaibiaodidian ?? "", //寮�鏍囧湴鐐�
+          biangengwenjian: row?.biangengwenjian ?? "",
+          // 鍙樻洿鏂囦欢
+          biangengwenjianName: row?.biangengwenjianName ?? ""
         }
       },
       width: "30%",
@@ -45,6 +53,33 @@
           formInline: null,
           isChange: title == "涓婁紶" ? false : true
         }),
+      footerButtons: detail.result
+        ? [
+            {
+              label: "鍒犻櫎",
+              type: "danger",
+              text: true,
+              bg: true,
+              popconfirm: { title: "鏄惁纭鍒犻櫎褰撳墠鍙樻洿鍏憡" },
+              btnClick: ({ dialog: { options, index }, button }) => {
+                console.log(options, index, button);
+                cHangeDelete({ id: row?.id }).then(res => {
+                  if (res.code == "200") {
+                    getTenderOrderDetail({ id: row?.tenderId }).then(res => {
+                      state.nowInfo = res.result;
+                    });
+                    closeDialog(options, index); // 鍏抽棴寮规
+                  } else {
+                    // closeLoading();
+                    message(res.message, {
+                      type: "error"
+                    });
+                  }
+                });
+              }
+            }
+          ]
+        : [],
       beforeSure: (done, { options, closeLoading }) => {
         const FormRef = formRef.value.getRef();
         const curData = cloneDeep(options.props.formInline as TenderInfo);
@@ -210,7 +245,8 @@
     );
     // 鎷兼帴鏃堕棿鎴冲拰闅忔満鏁�
     return (
-      `${dirPath}${timestamp}_${randomNumber}` + filename.match(/\.[^.]+$/)
+      `${dirPath}${filename}${timestamp}_${randomNumber}` +
+      filename.match(/\.[^.]+$/)
     );
   }
   return {
diff --git a/src/views/system/dept/utils/types.ts b/src/views/system/dept/utils/types.ts
index 4654639..7371224 100644
--- a/src/views/system/dept/utils/types.ts
+++ b/src/views/system/dept/utils/types.ts
@@ -39,6 +39,7 @@
 interface TenderInfo {
   // 涓婚敭Id
   id: string;
+  tenderId: string;
   // 鎶曟爣鎶ュ悕寮�濮嬫椂闂达紝鏍煎紡涓簓yyy-MM-dd HH:mm:ss
   projectName: string;
   toubiaoStartDate: string;

--
Gitblit v1.9.1