From 23a2fff92f73b9759849a8016601a6817d7470b1 Mon Sep 17 00:00:00 2001
From: zhangwei <1504152376@qq.com>
Date: 星期一, 25 八月 2025 17:30:30 +0800
Subject: [PATCH] -

---
 src/views/system/dept/detail.vue          |   85 +++++++----
 src/views/system/dept/index.vue           |   17 +-
 src/components/ReUploadZ/index.vue        |    1 
 src/views/system/component/pdfPreview.vue |    9 +
 src/api/item/index.ts                     |   26 +++
 src/views/system/aboutItem/form.vue       |    2 
 /dev/null                                 |    0 
 vite.config.ts                            |    3 
 src/views/system/dept/uploadform.vue      |   67 ++++++++
 src/views/system/dept/utils/hook.tsx      |   63 +++++---
 src/views/system/dept/utils/types.ts      |    5 
 src/views/system/dept/utils/detail.tsx    |   88 ++++++++++++
 src/views/system/dept/form.vue            |   42 ++++-
 src/api/util.ts                           |    3 
 14 files changed, 321 insertions(+), 90 deletions(-)

diff --git a/src/api/item/index.ts b/src/api/item/index.ts
index b634c48..143fe1a 100644
--- a/src/api/item/index.ts
+++ b/src/api/item/index.ts
@@ -110,6 +110,21 @@
   });
 };
 
+// 鎷涙爣浠g悊鍒嗛〉鏌ヨ闈炴斂搴滆鍗曞鐞�
+export const findWechatOpenId = (data?: object) => {
+  return http.request<PageResult>("post", baseUrlApi(""), {
+    data
+  });
+};
+
+// 閲囪喘浠g悊浜哄鍔犻潪鏀垮簻璁㈠崟澶勭悊鑾峰彇鑱旂郴鏂瑰紡
+export const addgetcontact = () => {
+  return http.request<Result>(
+    "post",
+    baseUrlApi("/api/tenderOrder/addgetcontact")
+  );
+};
+
 // 閲囪喘浠g悊浜哄鍔犻潪鏀垮簻璁㈠崟澶勭悊
 export const caigourenAdd = (data?: object) => {
   return http.request<Result>("post", baseUrlApi("/api/tenderOrder/add"), {
@@ -117,6 +132,17 @@
   });
 };
 
+// 閲囪喘浠g悊浜哄鍔犻潪鏀垮簻璁㈠崟澶勭悊
+export const updateTittle = (data?: object) => {
+  return http.request<Result>(
+    "post",
+    baseUrlApi("/api/tenderOrder/updateTittle"),
+    {
+      data
+    }
+  );
+};
+
 // 閲囪喘浠g悊浜烘洿鏂伴潪鏀垮簻璁㈠崟澶勭悊
 export const caigourenUpdate = (data?: object) => {
   return http.request<Result>("post", baseUrlApi("/api/tenderOrder/update"), {
diff --git a/src/api/util.ts b/src/api/util.ts
index 1fc9504..c64c0cd 100644
--- a/src/api/util.ts
+++ b/src/api/util.ts
@@ -2,7 +2,8 @@
 export const baseUrlApi = (url: string) =>
   process.env.NODE_ENV === "development"
     ? `/api${url}`
-    : `192.168.18.52:5005${url}`;
+    : `192.168.18.15:5005${url}`;
+// : `192.168.18.52:5005${url}`;
 export const uploadUrlApi = (url: string) =>
   process.env.NODE_ENV === "development"
     ? `/oss${url}`
diff --git a/src/components/ReUploadZ/index.vue b/src/components/ReUploadZ/index.vue
index 5742721..9439832 100644
--- a/src/components/ReUploadZ/index.vue
+++ b/src/components/ReUploadZ/index.vue
@@ -64,6 +64,7 @@
         newFormInline.value.biangengwenjian = path;
       } else {
         newFormInline.value.zhaobiaowenjian = path;
+        newFormInline.value.ZhaobiaowenjianName = file.name;
       }
     });
   }
diff --git a/src/views/system/aboutItem/form.vue b/src/views/system/aboutItem/form.vue
index d189790..2ae6d95 100644
--- a/src/views/system/aboutItem/form.vue
+++ b/src/views/system/aboutItem/form.vue
@@ -21,7 +21,7 @@
     baomingfei: null, // 鎶ュ悕璐癸紙鍙�夛級
     toubiaobaozhengjin: null, // 鎶曟爣淇濊瘉閲戯紙鍙�夛級
     lianhetitoubiao: null, // 鑱斿悎浣撴姇鏍囷紙鍙�夛級
-    kaibiaofangshi: null, // 寮�鏍囨柟寮忥紙鍙�夛級
+    kaibiaofangshi: "绾歌川鏍�", // 寮�鏍囨柟寮忥紙鍙�夛級
     shifoufenbao: "false", // 鏄惁鍒嗗寘锛堝彲閫夛級
     shifoutuisongxuanchuan: "true", // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛級
     caigourenmingcheng: null, // 閲囪喘浜哄悕绉帮紙鍙�夛級
diff --git a/src/views/system/component/pdfPreview.vue b/src/views/system/component/pdfPreview.vue
index 48748a0..54cdfa1 100644
--- a/src/views/system/component/pdfPreview.vue
+++ b/src/views/system/component/pdfPreview.vue
@@ -15,8 +15,13 @@
 </template>
 
 <script setup lang="ts">
-import { ref } from "vue";
-import pdfSrc from "./鍥涘窛鎷涙爣鎶曟爣浜ゆ槗鏈嶅姟骞冲彴鐢ㄦ埛鎿嶄綔鎵嬪唽锛堜唬鐞嗘満鏋勶級.pdf";
+import { ref, defineProps } from "vue";
+defineProps({
+  pdfSrc: {
+    type: String,
+    default: ""
+  }
+});
 let isLoading = ref(true);
 const iframeLoaded = () => {
   console.log("jjjjjj");
diff --git "a/src/views/system/component/\345\233\233\345\267\235\346\213\233\346\240\207\346\212\225\346\240\207\344\272\244\346\230\223\346\234\215\345\212\241\345\271\263\345\217\260\347\224\250\346\210\267\346\223\215\344\275\234\346\211\213\345\206\214\357\274\210\344\273\243\347\220\206\346\234\272\346\236\204\357\274\211.pdf" "b/src/views/system/component/\345\233\233\345\267\235\346\213\233\346\240\207\346\212\225\346\240\207\344\272\244\346\230\223\346\234\215\345\212\241\345\271\263\345\217\260\347\224\250\346\210\267\346\223\215\344\275\234\346\211\213\345\206\214\357\274\210\344\273\243\347\220\206\346\234\272\346\236\204\357\274\211.pdf"
deleted file mode 100644
index 786d820..0000000
--- "a/src/views/system/component/\345\233\233\345\267\235\346\213\233\346\240\207\346\212\225\346\240\207\344\272\244\346\230\223\346\234\215\345\212\241\345\271\263\345\217\260\347\224\250\346\210\267\346\223\215\344\275\234\346\211\213\345\206\214\357\274\210\344\273\243\347\220\206\346\234\272\346\236\204\357\274\211.pdf"
+++ /dev/null
Binary files differ
diff --git a/src/views/system/dept/detail.vue b/src/views/system/dept/detail.vue
index ec82377..2cb6698 100644
--- a/src/views/system/dept/detail.vue
+++ b/src/views/system/dept/detail.vue
@@ -1,11 +1,13 @@
 <script setup lang="tsx">
-import { ref, reactive, onMounted, computed, PropType } from "vue";
+import { ref, reactive, onMounted, computed, PropType, h } from "vue";
 import { useRenderIcon } from "@/components/ReIcon/src/hooks";
 import { useDept } from "./utils/hook";
 import { useDetail } from "./utils/detail";
 import { getTenderOrderDetail } from "@/api/item/index";
 const isLoading = ref(false);
 import { addDialog } from "@/components/ReDialog";
+import pdfPreview from "@/views/system/component/pdfPreview.vue";
+import { deviceDetection } from "@pureadmin/utils";
 interface Emits {
   (e: "backListPage"): void;
 }
@@ -17,7 +19,7 @@
 import IconParkSolidBack from "~icons/icon-park-solid/back";
 
 const { openDialog } = useDept(ref({}));
-const { openUploadDialog, state } = useDetail();
+const { openUploadDialog, state, changeDialog } = useDetail();
 defineOptions({
   name: "itemdetail"
 });
@@ -30,27 +32,16 @@
 };
 const previewPdf = pdfUrl => {
   addDialog({
-    width: "80%",
-    title: "纭淇℃伅",
-    contentRenderer: () => (
-      <iframe
-        type="application/pdf"
-        src={pdfUrl}
-        width="800"
-        height="600"
-      ></iframe>
-    ), // jsx 璇硶 锛堟敞鎰忓湪.vue鏂囦欢鍚敤jsx璇硶锛岄渶瑕佸湪script寮�鍚痩ang="tsx"锛�
-    closeCallBack: ({ options, args }) => {
-      // options.props 鏄搷搴斿紡鐨�
-      // const { formInline } = options.props as FormProps;
-      // const text = `濮撳悕锛�${formInline.user} 鍩庡競锛�${formInline.region}`;
-      if (args?.command === "cancel") {
-        // 鎮ㄧ偣鍑讳簡鍙栨秷鎸夐挳
-        // active.value -= 1;
-      } else if (args?.command === "sure") {
-      } else {
-      }
-    }
+    title: `棰勮pdf`,
+    props: {},
+    width: "60%",
+    draggable: true,
+    fullscreen: deviceDetection(),
+    fullscreenIcon: true,
+    sureBtnLoading: true,
+    closeOnClickModal: false,
+    contentRenderer: () => h(pdfPreview, { pdfSrc: pdfUrl })
+    // jsx 璇硶 锛堟敞鎰忓湪.vue鏂囦欢鍚敤jsx璇硶锛岄渶瑕佸湪script寮�鍚痩ang="tsx"锛�
   });
 };
 </script>
@@ -80,7 +71,12 @@
         </div>
       </template>
       <div>
-        <el-descriptions class="margin-top" :column="3" border>
+        <el-descriptions
+          class="margin-top"
+          :column="3"
+          border
+          label-width="120"
+        >
           <el-descriptions-item label="椤圭洰缂栧彿">
             {{ state.nowInfo.projectCode }}
           </el-descriptions-item>
@@ -93,9 +89,9 @@
           <el-descriptions-item label="鑱斿悎浣撴姇鏍�">
             {{ state.nowInfo.lianhetitoubiao }}
           </el-descriptions-item>
-          <!-- <el-descriptions-item label="Remarks">
+          <el-descriptions-item label="寮�鏍囨柟寮�">
+            {{ state.nowInfo.kaibiaofangshi }}
           </el-descriptions-item>
-          <el-descriptions-item label="Address" /> -->
         </el-descriptions>
       </div>
     </el-card>
@@ -114,11 +110,18 @@
               <div>
                 <el-form label-width="auto" style="max-width: 1000px">
                   <el-form-item label="椤圭洰淇℃伅锛�">
-                    鎶曟爣鎶ュ悕寮�濮嬫椂闂达細
-                    {{ state.nowInfo.toubiaoStartDate ?? "鏆傛棤" }}
-                    鎶曟爣鎶ュ悕鎴鏃堕棿锛�
-                    {{ state.nowInfo.toubiaoEndDate }}
-                    寮�鏍囨椂闂达細{{ state.nowInfo.kaibiaoDate }}
+                    <span class="mr-4">
+                      鎶曟爣鎶ュ悕寮�濮嬫椂闂达細{{
+                        state.nowInfo.toubiaoStartDate ?? "鏆傛棤"
+                      }}
+                    </span>
+                    <span class="mr-4">
+                      鎶曟爣鎶ュ悕鎴鏃堕棿锛�
+                      {{ state.nowInfo.toubiaoEndDate ?? "鏆傛棤" }}
+                    </span>
+                    <span class="mr-4">
+                      寮�鏍囨椂闂达細{{ state.nowInfo.kaibiaoDate ?? "鏆傛棤" }}
+                    </span>
                   </el-form-item>
                   <el-form-item label="涓婁紶鍏憡锛�">
                     <el-button
@@ -126,7 +129,7 @@
                       type="primary"
                       plain
                       size="small"
-                      @click="openUploadDialog('涓婁紶')"
+                      @click="openUploadDialog('涓婁紶', state.nowInfo)"
                     >
                       涓婁紶鍏憡
                     </el-button>
@@ -152,7 +155,23 @@
                       >
                         鐐瑰嚮棰勮
                       </el-button>
-                      <el-button type="primary" plain size="small">
+                      <el-button
+                        v-if="state.nowInfo?.changeOrder"
+                        type="primary"
+                        plain
+                        size="small"
+                        @click="
+                          previewPdf(state.nowInfo.changeOrder.biangengwenjian)
+                        "
+                      >
+                        鐐瑰嚮棰勮鍙樻洿鍏憡
+                      </el-button>
+                      <el-button
+                        type="primary"
+                        plain
+                        size="small"
+                        @click="changeDialog('涓婁紶鍙樻洿', state.nowInfo)"
+                      >
                         淇敼鏍囬
                       </el-button>
                     </div>
diff --git a/src/views/system/dept/form.vue b/src/views/system/dept/form.vue
index 4c55292..15fe259 100644
--- a/src/views/system/dept/form.vue
+++ b/src/views/system/dept/form.vue
@@ -8,7 +8,7 @@
 import { Operation } from "@element-plus/icons-vue";
 import { getCaigoufangshiList } from "@/api/item/index";
 
-const { state } = useDept(ref({}));
+const { state, nowRole } = useDept(ref({}));
 const props = withDefaults(defineProps<FormProps>(), {
   formInline: () => ({
     id: "",
@@ -22,7 +22,7 @@
     baomingfei: null, // 鎶ュ悕璐癸紙鍙�夛級
     toubiaobaozhengjin: null, // 鎶曟爣淇濊瘉閲戯紙鍙�夛級
     lianhetitoubiao: null, // 鑱斿悎浣撴姇鏍囷紙鍙�夛級
-    kaibiaofangshi: null, // 寮�鏍囨柟寮忥紙鍙�夛級
+    kaibiaofangshi: "绾歌川鏍�", // 寮�鏍囨柟寮忥紙鍙�夛級
     shifoufenbao: "false", // 鏄惁鍒嗗寘锛堝彲閫夛級
     shifoutuisongxuanchuan: "true", // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛級
     caigourenmingcheng: null, // 閲囪喘浜哄悕绉帮紙鍙�夛級
@@ -96,10 +96,9 @@
         </el-form-item>
       </re-col>
       <re-col :value="6" :xs="24" :sm="24">
-        <el-form-item label="椤圭洰缂栧彿">
+        <el-form-item label="椤圭洰缂栧彿" prop="projectCode">
           <el-input
             v-model="newFormInline.projectCode"
-            
             clearable
             placeholder="璇疯緭鍏ラ」鐩紪鍙�"
           />
@@ -353,7 +352,10 @@
         </p>
       </re-col>
       <re-col :value="6" :xs="24" :sm="24">
-        <el-form-item label="浠g悊鏈烘瀯鍚嶇О" prop="dailijigoumingcheng">
+        <el-form-item
+          label="浠g悊鏈烘瀯鍚嶇О"
+          :prop="nowRole.code == 'DLJG' ? 'dailijigoumingcheng' : ''"
+        >
           <el-input
             v-model="newFormInline.dailijigoumingcheng"
             clearable
@@ -362,7 +364,10 @@
         </el-form-item>
       </re-col>
       <re-col :value="6" :xs="24" :sm="24">
-        <el-form-item label="鑱旂郴浜�" prop="dailiLianxiren">
+        <el-form-item
+          label="鑱旂郴浜�"
+          :prop="nowRole.code == 'DLJG' ? 'dailiLianxiren' : ''"
+        >
           <el-input
             v-model="newFormInline.dailiLianxiren"
             clearable
@@ -371,7 +376,10 @@
         </el-form-item>
       </re-col>
       <re-col :value="6" :xs="24" :sm="24">
-        <el-form-item label="鑱旂郴鐢佃瘽" prop="dailiLianxidianhua">
+        <el-form-item
+          label="鑱旂郴鐢佃瘽"
+          :prop="nowRole.code == 'DLJG' ? 'dailiLianxidianhua' : ''"
+        >
           <el-input
             v-model="newFormInline.dailiLianxidianhua"
             clearable
@@ -380,7 +388,10 @@
         </el-form-item>
       </re-col>
       <re-col :value="6" :xs="24" :sm="24">
-        <el-form-item label="鐢靛瓙閭" prop="dailiDianziyoujian">
+        <el-form-item
+          label="鐢靛瓙閭"
+          :prop="nowRole.code == 'DLJG' ? 'dailiDianziyoujian' : ''"
+        >
           <el-input
             v-model="newFormInline.dailiDianziyoujian"
             clearable
@@ -389,7 +400,10 @@
         </el-form-item>
       </re-col>
       <re-col :value="12" :xs="24" :sm="24">
-        <el-form-item label="閫氫俊鍦板潃" prop="dailiTongxindizhi">
+        <el-form-item
+          label="閫氫俊鍦板潃"
+          :prop="nowRole.code == 'DLJG' ? 'dailiTongxindizhi' : ''"
+        >
           <el-input
             v-model="newFormInline.dailiTongxindizhi"
             clearable
@@ -398,7 +412,10 @@
         </el-form-item>
       </re-col>
       <re-col :value="6" :xs="24" :sm="24">
-        <el-form-item label="椤圭洰缁忕悊" prop="dailiXiangmujingli">
+        <el-form-item
+          label="椤圭洰缁忕悊"
+          :prop="nowRole.code == 'DLJG' ? 'dailiXiangmujingli' : ''"
+        >
           <el-input
             v-model="newFormInline.dailiXiangmujingli"
             clearable
@@ -407,7 +424,10 @@
         </el-form-item>
       </re-col>
       <re-col :value="6" :xs="24" :sm="24">
-        <el-form-item label="鑱旂郴鐢佃瘽" prop="dailijingliLianxidianhua">
+        <el-form-item
+          label="鑱旂郴鐢佃瘽"
+          :prop="nowRole.code == 'DLJG' ? 'dailijingliLianxidianhua' : ''"
+        >
           <el-input
             v-model="newFormInline.dailijingliLianxidianhua"
             clearable
diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue
index e7225fb..a8368d5 100644
--- a/src/views/system/dept/index.vue
+++ b/src/views/system/dept/index.vue
@@ -3,13 +3,13 @@
 import { useDept } from "./utils/hook";
 import { PureTableBar } from "@/components/RePureTableBar";
 import { useRenderIcon } from "@/components/ReIcon/src/hooks";
+import { type CusExtendDto } from "@/utils/auth";
 
 import Delete from "~icons/ep/delete";
 import EditPen from "~icons/ep/edit-pen";
 import Refresh from "~icons/ep/refresh";
 import AddFill from "~icons/ri/add-circle-line";
 import IconamoonEnterDuotone from "~icons/iconamoon/enter-duotone";
-import { useUserStoreHook } from "@/store/modules/user";
 
 defineOptions({
   name: "SystemDept"
@@ -39,16 +39,15 @@
   pagination,
   checkboxAsRadio,
   onSelectionCancel,
-  onbatchDel
+  onbatchDel,
+  nowRole
 } = useDept(tableRef);
 
 function onFullscreen() {
   // 閲嶇疆琛ㄦ牸楂樺害
   tableRef.value.setAdaptive();
 }
-const nowRole = computed(() => {
-  return useUserStoreHook().nowRole;
-});
+
 const enterDetail = item => {
   isList.value = false;
   nowItem.value = item;
@@ -172,7 +171,7 @@
               </el-form-item>
             </el-col>
             <el-col
-              v-if="nowRole.code == 'CGR'"
+              v-if="nowRole.code == 'DLJG'"
               :xs="24"
               :sm="12"
               :md="8"
@@ -189,7 +188,7 @@
               </el-form-item>
             </el-col>
             <el-col
-              v-if="nowRole.code == 'DLJG'"
+              v-if="nowRole.code == 'CGR'"
               :xs="24"
               :sm="12"
               :md="8"
@@ -230,9 +229,9 @@
                 <el-button type="primary" :loading="loading" @click="onSearch">
                   鎼滅储
                 </el-button>
-                <el-button :icon="useRenderIcon(Refresh)" @click="resetForm">
+                <!-- <el-button :icon="useRenderIcon(Refresh)" @click="resetForm">
                   閲嶇疆
-                </el-button>
+                </el-button> -->
                 <el-button type="primary" @click="openDialog()">
                   鏂板
                 </el-button>
diff --git a/src/views/system/dept/uploadform.vue b/src/views/system/dept/uploadform.vue
index ad52997..f21bd75 100644
--- a/src/views/system/dept/uploadform.vue
+++ b/src/views/system/dept/uploadform.vue
@@ -24,11 +24,13 @@
     toubiaoEndDate: "", // 鎶曟爣鎶ュ悕缁撴潫鏃堕棿锛堝繀濉紝鏍煎紡锛歽yyy-MM-dd HH:mm:ss锛�
     kaibiaoDate: "", // 寮�鏍囨椂闂达紙蹇呭~锛屾牸寮忥細yyyy-MM-dd HH:mm:ss锛�
     zhaobiaowenjian: "", // 鎷涙爣鏂囦欢锛堝繀濉紝闀垮害1-512瀛楃锛�
+    zhaobiaowenjianName: "",
     biangengwenjian: "",
     fujian: "", // 闄勪欢锛堝彲閫夛紝鏈�澶ч暱搴�512瀛楃锛屽彲涓虹┖锛�
     kaibiaodidian: "" // 寮�鏍囧湴鐐癸紙蹇呭~锛岄暱搴�1-250瀛楃锛�
   }),
-  isChange: null
+  isChange: null,
+  changeDetail: null
 });
 interface FormInlineType {
   // 椤圭洰鏍囬
@@ -41,8 +43,12 @@
   kaibiaoDate: string | null | undefined;
   // 鎷涙爣鏂囦欢锛堝彲鑳芥槸鏂囦欢璺緞銆両D鎴栨枃浠跺璞★級
   zhaobiaowenjian: string | null | undefined;
+  // 鎷涙爣鏂囦欢鍚嶏紙鍙兘鏄枃浠惰矾寰勩�両D鎴栨枃浠跺璞★級
+  zhaobiaowenjianName?: string | null | undefined;
   // 鍙樻洿鏂囦欢
   biangengwenjian: string | null | undefined;
+  // 鍙樻洿鏂囦欢
+  biangengwenjianName?: string | null | undefined;
   // 闄勪欢锛堟枃鏈弿杩版垨璺緞锛�
   fujian: string | null | undefined;
   // 寮�鏍囧湴鐐�
@@ -153,6 +159,23 @@
   fetchCredentials(file);
   // upload.value!.submit();
 };
+const handleChangeFile = file => {
+  console.log(file);
+
+  if (file.status !== "ready") return;
+  // let suffName = file.name.substring(file.name.lastIndexOf(".") + 1);
+  // const extension = suffName === "pdf";
+  // // const isLt10M = file.size / 1024 / 1024 < 10;
+  // if (!extension) {
+  //   message(`浠呮敮鎸乸df鏍煎紡锛岃涓婁紶pdf`, {
+  //     type: "error"
+  //   });
+  //   validateForm.fileList = [];
+  //   return false;
+  // }
+  // fetchCredentials(file);
+  // upload.value!.submit();
+};
 // state.formDataNew = {
 //   policy: res.result.policy, //琛ㄥ崟鍩�
 //   "x-oss-signature-version": res.result.x_oss_signature_version, //鎸囧畾绛惧悕鐨勭増鏈拰绠楁硶
@@ -185,15 +208,18 @@
     formData.append("key", keyVal); // 鏂囦欢鍚�
     formData.append("file", file.raw); // file 蹇呴』涓烘渶鍚庝竴涓〃鍗曞煙
     uploadFileAli(formData, res.result.url).then(res => {
-      let path = `${upUrl}"/"${upPath}${upPath};`;
+      let path = `${upUrl}${keyVal}`;
       if (props.isChange) {
         newFormInline.value.biangengwenjian = path;
+        newFormInline.value.biangengwenjianName = file.name;
       } else {
         newFormInline.value.zhaobiaowenjian = path;
+        newFormInline.value.zhaobiaowenjianName = file.name;
       }
     });
   }
 };
+const defaultTime = new Date(2000, 1, 1, 9, 30, 0);
 const beforeAvatarUpload: UploadProps["beforeUpload"] = rawFile => {
   isLoading.value = true;
   if (rawFile.type !== "application/pdf") {
@@ -226,10 +252,21 @@
     ref="ruleFormRef"
     :model="newFormInline"
     :rules="gonggaoRules"
-    label-width="140px"
+    :label-width="props.changeDetail ? '50px' : '140px'"
   >
-    <el-row :gutter="30">
-      <div v-if="props.isChange">
+    <el-row v-if="props.changeDetail" :gutter="10">
+      <re-col :value="24" :xs="24" :sm="24">
+        <el-form-item label="鏍囬" prop="projectName">
+          <el-input
+            v-model="newFormInline.projectName"
+            clearable
+            placeholder="璇疯緭鍏ユ爣棰�"
+          />
+        </el-form-item>
+      </re-col>
+    </el-row>
+    <el-row v-else :gutter="30">
+      <div v-if="props.isChange" style="width: 100%">
         <re-col :value="24" :xs="24" :sm="24">
           <el-form-item label="鏍囬" prop="projectName">
             <el-input
@@ -270,6 +307,7 @@
             v-model="newFormInline.toubiaoStartDate"
             type="datetime"
             clearable
+            :default-time="defaultTime"
             placeholder="璇烽�夋嫨鎶曟爣鎶ュ悕寮�濮嬫椂闂�"
             value-format="YYYY-MM-DD HH:mm:ss"
           />
@@ -281,6 +319,7 @@
             v-model="newFormInline.toubiaoEndDate"
             type="datetime"
             clearable
+            :default-time="defaultTime"
             placeholder="璇烽�夋嫨鎶曟爣鎶ュ悕缁撴潫鏃堕棿"
             value-format="YYYY-MM-DD HH:mm:ss"
           />
@@ -292,6 +331,7 @@
             v-model="newFormInline.kaibiaoDate"
             type="datetime"
             clearable
+            :default-time="defaultTime"
             placeholder="璇烽�夋嫨寮�鏍囨椂闂�"
             value-format="YYYY-MM-DD HH:mm:ss"
           />
@@ -318,6 +358,23 @@
           </el-upload>
         </el-form-item>
       </re-col>
+      <re-col v-if="!props.isChange" :value="24" :xs="24" :sm="24">
+        <el-form-item label="闄勪欢" prop="">
+          <el-upload
+            ref="upload"
+            v-model:file-list="validateForm.fileList"
+            multiple
+            :on-exceed="handleExceed"
+            :auto-upload="false"
+            :on-success="handleAvatarSuccess"
+            :before-upload="beforeAvatarUpload"
+            :headers="state.headers"
+            @change="handleChangeFile"
+          >
+            <el-button type="primary">鐐瑰嚮涓婁紶</el-button>
+          </el-upload>
+        </el-form-item>
+      </re-col>
       <re-col :value="24" :xs="24" :sm="24">
         <el-form-item label="寮�鏍囧湴鐐�" prop="kaibiaodidian">
           <el-input
diff --git a/src/views/system/dept/utils/detail.tsx b/src/views/system/dept/utils/detail.tsx
index 8199063..68ef1a9 100644
--- a/src/views/system/dept/utils/detail.tsx
+++ b/src/views/system/dept/utils/detail.tsx
@@ -9,7 +9,8 @@
 import {
   fabuzhaobiao,
   changezhaobiao,
-  getTenderOrderDetail
+  getTenderOrderDetail,
+  updateTittle
 } from "@/api/item/index";
 
 const formRef = ref();
@@ -59,7 +60,85 @@
             res = await changezhaobiao(curData);
           }
           if (res.code == "200") {
-            getTenderOrderDetail({ id: row?.id });
+            getTenderOrderDetail({ id: row?.id }).then(res => {
+              state.nowInfo = res.result;
+            });
+            done(); // 鍏抽棴寮规
+          } else {
+            closeLoading();
+            message(res.message, {
+              type: "error"
+            });
+          }
+        }
+        FormRef.validate((valid, obj) => {
+          if (valid) {
+            // 琛ㄥ崟瑙勫垯鏍¢獙閫氳繃
+            if (title === "鏂板") {
+              // 瀹為檯寮�鍙戝厛璋冪敤鏂板鎺ュ彛锛屽啀杩涜涓嬮潰鎿嶄綔
+              chores();
+            } else {
+              // 瀹為檯寮�鍙戝厛璋冪敤淇敼鎺ュ彛锛屽啀杩涜涓嬮潰鎿嶄綔
+              chores();
+            }
+          } else {
+            closeLoading();
+            const fail = [];
+            for (const key in obj) {
+              fail.push(obj[key][0].message);
+            }
+            message(fail[0], {
+              type: "warning"
+            });
+            return false;
+          }
+        });
+      }
+    });
+  }
+  function changeDialog(title = "涓婁紶", row?: TenderInfo) {
+    addDialog({
+      title: `淇敼鏍囬`,
+      props: {
+        formInline: {
+          tenderId: title == "涓婁紶鍙樻洿" ? row?.id : "",
+          id: title == "涓婁紶" ? row?.id : "",
+          projectName: row?.projectName ?? "",
+          toubiaoStartDate: row?.toubiaoStartDate ?? "", //鎶曟爣鎶ュ悕寮�濮嬫椂闂�
+          toubiaoEndDate: row?.toubiaoEndDate ?? "", //鎶曟爣鎶ュ悕缁撴潫鏃堕棿
+          kaibiaoDate: row?.kaibiaoDate ?? "", //寮�鏍囨椂闂�
+          biangengwenjian: "", //鎷涙爣鏂囦欢
+          fujian: row?.fujian ?? "", //闄勪欢
+          kaibiaodidian: row?.kaibiaodidian ?? "" //寮�鏍囧湴鐐�
+        }
+      },
+      width: "30%",
+      draggable: true,
+      fullscreen: deviceDetection(),
+      fullscreenIcon: true,
+      sureBtnLoading: true,
+      closeOnClickModal: false,
+      contentRenderer: () =>
+        h(tenderForm, {
+          ref: formRef,
+          formInline: null,
+          changeDetail: true,
+          isChange: true
+        }),
+      beforeSure: (done, { options, closeLoading }) => {
+        const FormRef = formRef.value.getRef();
+        const curData = cloneDeep(options.props.formInline as TenderInfo);
+        async function chores() {
+          // message(`鎮�${title}浜嗛」鐩悕绉颁负${curData.projectName}鐨勮繖鏉℃暟鎹甡, {
+          //   type: "success"
+          // });
+          // curData.dingbiaoguize = curData.dingbiaoguize.join("");
+          curData.id = state.nowInfo.id;
+          const res = await updateTittle(curData);
+          if (res.code == "200") {
+            getTenderOrderDetail({ id: row?.id }).then(res => {
+              state.nowInfo = res.result;
+            });
             done(); // 鍏抽棴寮规
           } else {
             closeLoading();
@@ -129,12 +208,13 @@
     );
     // 鎷兼帴鏃堕棿鎴冲拰闅忔満鏁�
     return (
-      `${dirPath}/${timestamp}_${randomNumber}` + filename.match(/\.[^.]+$/)
+      `${dirPath}${timestamp}_${randomNumber}` + filename.match(/\.[^.]+$/)
     );
   }
   return {
     openUploadDialog,
     state,
-    generateTimestampWithRandom
+    generateTimestampWithRandom,
+    changeDialog
   };
 }
diff --git a/src/views/system/dept/utils/hook.tsx b/src/views/system/dept/utils/hook.tsx
index 51e812e..1aaa5a9 100644
--- a/src/views/system/dept/utils/hook.tsx
+++ b/src/views/system/dept/utils/hook.tsx
@@ -2,7 +2,7 @@
 import editForm from "../form.vue";
 import { handleTree } from "@/utils/tree";
 import { message } from "@/utils/message";
-import { zhaobiaoPageOrder } from "@/api/item/index";
+import { zhaobiaoPageOrder, findWechatOpenId } from "@/api/item/index";
 
 import {
   getCaigoufangshiList,
@@ -10,6 +10,7 @@
   getOrderStatusList,
   getRegionList,
   getDaimaleixingList,
+  addgetcontact,
   caigourenAdd,
   caigourenUpdate,
   caigourenDelete,
@@ -17,11 +18,12 @@
 } from "@/api/item/index";
 // import { usePublicHooks } from "../../hooks";
 import { addDialog } from "@/components/ReDialog";
-import { type Ref, reactive, ref, onMounted, h } from "vue";
+import { type Ref, reactive, ref, onMounted, h, computed } from "vue";
 import type { FormItemProps } from "./types";
 import { cloneDeep, deviceDetection, getKeyList } from "@pureadmin/utils";
 // import { useUserStoreHook } from "@/store/modules/user";
 import type { PaginationProps } from "@pureadmin/table";
+import { useUserStoreHook } from "@/store/modules/user";
 
 import pdfPreview from "../../component/pdfPreview.vue";
 // const nowRole = computed(() => {
@@ -30,6 +32,9 @@
 const selectedNum = ref(0);
 
 export function useDept(tableRef: Ref) {
+  const nowRole = computed(() => {
+    return useUserStoreHook().nowRole;
+  });
   const form = reactive({
     // 鏂板鏃ユ湡鑼冨洿锛屽彲涓� null锛岀被鍨嬩负鏁扮粍
     createDateRange: null,
@@ -101,7 +106,7 @@
   // const { tagStyle } = usePublicHooks();
   const getOrderStatus = row => {
     const res = state.orderStatusList.find(item => {
-      return row.orderStatus == item.status;
+      return row.orderStatus == item.value;
     });
     return res?.label;
   };
@@ -310,6 +315,7 @@
     }
   };
   async function onSearch() {
+    findWechatOpenId();
     const obj = cloneDeep(form);
     obj.tousu = obj.tousu.join("");
     obj.zhiyi = obj.zhiyi.join("");
@@ -344,7 +350,9 @@
     return newTreeList;
   }
 
-  function openDialog(title = "鏂板", row?: FormItemProps) {
+  async function openDialog(title = "鏂板", row?: FormItemProps) {
+    const { result } = title == "鏂板" ? await addgetcontact() : "";
+
     addDialog({
       title: `${title}椤圭洰`,
       props: {
@@ -360,28 +368,36 @@
           baomingfei: row?.baomingfei ?? null, // 鎶ュ悕璐癸紙鍙�夛級
           toubiaobaozhengjin: row?.toubiaobaozhengjin ?? null, // 鎶曟爣淇濊瘉閲戯紙鍙�夛級
           lianhetitoubiao: row?.lianhetitoubiao ?? null, // 鑱斿悎浣撴姇鏍囷紙鍙�夛級
-          kaibiaofangshi: row?.kaibiaofangshi ?? null, // 寮�鏍囨柟寮忥紙鍙�夛級
+          kaibiaofangshi: row?.kaibiaofangshi ?? "绾歌川鏍�", // 寮�鏍囨柟寮忥紙鍙�夛級
           shifoufenbao: row?.shifoufenbao ?? "false", // 鏄惁鍒嗗寘锛堝彲閫夛級
           shifoutuisongxuanchuan: row?.shifoutuisongxuanchuan ?? "true", // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛級
-          caigourenmingcheng: row?.caigourenmingcheng ?? null, // 閲囪喘浜哄悕绉帮紙鍙�夛級
+          caigourenmingcheng:
+            row?.caigourenmingcheng ?? result?.caigourenmingcheng, // 閲囪喘浜哄悕绉帮紙鍙�夛級
           xingzhengquyu: row?.xingzhengquyu.split(",") ?? [], // 琛屾斂鍖哄煙锛堝彲閫夛級
           xingzhengquyuName: row?.xingzhengquyuName ?? null, // 琛屾斂鍖哄煙鍚嶇О锛堝彲閫夛級
-          jigoudaima: row?.jigoudaima ?? null, // 鏈烘瀯浠g爜锛堝彲閫夛級
+          jigoudaima: row?.jigoudaima ?? result?.jigoudaima, // 鏈烘瀯浠g爜锛堝彲閫夛級
           daimaleixing: row?.daimaleixing ?? null, // 浠g爜绫诲瀷锛堝彲閫夛級
-          lianxiren: row?.lianxiren ?? null, // 鑱旂郴浜猴紙鍙�夛級
-          lianxidianhua: row?.lianxidianhua ?? null, // 鑱旂郴鐢佃瘽锛堝彲閫夛級
-          tongxindizhi: row?.tongxindizhi ?? null, // 閫氫俊鍦板潃锛堝彲閫夛級
-          dianziyoujian: row?.dianziyoujian ?? null, // 鐢靛瓙閭欢锛堝彲閫夛級
-          xiangmujingbanren: row?.xiangmujingbanren ?? null, // 椤圭洰缁忓姙浜猴紙鍙�夛級
+          lianxiren: row?.lianxiren ?? result?.lianxiren, // 鑱旂郴浜猴紙鍙�夛級
+          lianxidianhua: row?.lianxidianhua ?? result?.lianxidianhua, // 鑱旂郴鐢佃瘽锛堝彲閫夛級
+          tongxindizhi: row?.tongxindizhi ?? result?.tongxindizhi, // 閫氫俊鍦板潃锛堝彲閫夛級
+          dianziyoujian: row?.dianziyoujian ?? result?.dianziyoujian, // 鐢靛瓙閭欢锛堝彲閫夛級
+          xiangmujingbanren:
+            row?.xiangmujingbanren ?? result?.xiangmujingbanren, // 椤圭洰缁忓姙浜猴紙鍙�夛級
           zhiwu: row?.zhiwu ?? null, // 鑱屽姟锛堝彲閫夛級
           jingbanrendianhua: row?.jingbanrendianhua ?? null, // 缁忓姙浜虹數璇濓紙鍙�夛級
-          dailijigoumingcheng: row?.dailijigoumingcheng ?? null, // 浠g悊鏈烘瀯鍚嶇О锛堝彲閫夛級
-          dailiLianxiren: row?.dailiLianxiren ?? null, // 浠g悊鏈烘瀯鑱旂郴浜猴紙鍙�夛級
-          dailiLianxidianhua: row?.dailiLianxidianhua ?? null, // 浠g悊鏈烘瀯鑱旂郴鐢佃瘽锛堝彲閫夛級
-          dailiDianziyoujian: row?.dailiDianziyoujian ?? null, // 浠g悊鏈烘瀯鐢靛瓙閭欢锛堝彲閫夛級
-          dailiTongxindizhi: row?.dailiTongxindizhi ?? null, // 浠g悊鏈烘瀯閫氫俊鍦板潃锛堝彲閫夛級
-          dailiXiangmujingli: row?.dailiXiangmujingli ?? null, // 浠g悊鏈烘瀯椤圭洰缁忕悊锛堝彲閫�
-          dailijingliLianxidianhua: row?.dailijingliLianxidianhua ?? null // 浠g悊鏈烘瀯椤圭洰缁忕悊鑱旂郴鐢佃瘽锛堝彲閫夛級
+          dailijigoumingcheng:
+            row?.dailijigoumingcheng ?? result?.dailijigoumingcheng, // 浠g悊鏈烘瀯鍚嶇О锛堝彲閫夛級
+          dailiLianxiren: row?.dailiLianxiren ?? result?.dailiLianxiren, // 浠g悊鏈烘瀯鑱旂郴浜猴紙鍙�夛級
+          dailiLianxidianhua:
+            row?.dailiLianxidianhua ?? result?.dailiLianxidianhua, // 浠g悊鏈烘瀯鑱旂郴鐢佃瘽锛堝彲閫夛級
+          dailiDianziyoujian:
+            row?.dailiDianziyoujian ?? result?.dailiDianziyoujian, // 浠g悊鏈烘瀯鐢靛瓙閭欢锛堝彲閫夛級
+          dailiTongxindizhi:
+            row?.dailiTongxindizhi ?? result?.dailiTongxindizhi, // 浠g悊鏈烘瀯閫氫俊鍦板潃锛堝彲閫夛級
+          dailiXiangmujingli:
+            row?.dailiXiangmujingli ?? result?.dailiXiangmujingli, // 浠g悊鏈烘瀯椤圭洰缁忕悊锛堝彲閫�
+          dailijingliLianxidianhua:
+            row?.dailijingliLianxidianhua ?? result?.dailijingliLianxidianhua // 浠g悊鏈烘瀯椤圭洰缁忕悊鑱旂郴鐢佃瘽锛堝彲閫夛級
         }
       },
       width: "80%",
@@ -395,9 +411,6 @@
         const FormRef = formRef.value.getRef();
         const curData = cloneDeep(options.props.formInline as FormItemProps);
         async function chores() {
-          message(`鎮�${title}浜嗛」鐩悕绉颁负${curData.projectName}鐨勮繖鏉℃暟鎹甡, {
-            type: "success"
-          });
           // curData.dingbiaoguize = curData.dingbiaoguize.join("");
           curData.xingzhengquyu = curData.xingzhengquyu.join(",");
           let res;
@@ -409,6 +422,9 @@
           if (res.code == "200") {
             done(); // 鍏抽棴寮规
             onSearch(); // 鍒锋柊琛ㄦ牸鏁版嵁
+            message(`鎮�${title}浜嗛」鐩悕绉颁负${curData.projectName}鐨勮繖鏉℃暟鎹甡, {
+              type: "success"
+            });
           } else {
             closeLoading();
             message(res.message, {
@@ -487,6 +503,7 @@
     pagination,
     checkboxAsRadio,
     onSelectionCancel,
-    onbatchDel
+    onbatchDel,
+    nowRole
   };
 }
diff --git a/src/views/system/dept/utils/types.ts b/src/views/system/dept/utils/types.ts
index 2a03a0f..e0289a5 100644
--- a/src/views/system/dept/utils/types.ts
+++ b/src/views/system/dept/utils/types.ts
@@ -49,6 +49,10 @@
   // 鎷涙爣鏂囦欢锛岄暱搴�1-512瀛楃
   zhaobiaowenjian: string;
   biangengwenjian: string;
+  // 鎷涙爣鏂囦欢鍚嶏紙鍙兘鏄枃浠惰矾寰勩�両D鎴栨枃浠跺璞★級
+  zhaobiaowenjianName?: string | null | undefined;
+  // 鍙樻洿鏂囦欢
+  biangengwenjianName?: string | null | undefined;
   // 闄勪欢锛屽彲涓虹┖锛屾渶澶ч暱搴�512瀛楃
   fujian?: string;
   // 寮�鏍囧湴鐐癸紝闀垮害1-250瀛楃
@@ -61,6 +65,7 @@
 interface TenderProps {
   formInline: TenderInfo;
   isChange: boolean;
+  changeDetail?: boolean;
 }
 
 export type { FormItemProps, FormProps, TenderInfo, TenderProps };
diff --git a/vite.config.ts b/vite.config.ts
index 4befb5e..81216e4 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -27,7 +27,8 @@
       proxy: {
         "/api": {
           // 杩欓噷濉啓鍚庣鍦板潃http://114.132.78.38:8096 http://192.168.0.36:5005
-          target: "http://192.168.18.52:5005",
+          target: "http://192.168.18.15:5005",
+          // target: "http://192.168.18.52:5005",
           changeOrigin: true,
           rewrite: path => path.replace(/^\/api/, "")
         },

--
Gitblit v1.9.1