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