From c08e32e4cd02ecf7ed794a1b9493bbe6f5b8d04c Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Mon, 19 Jan 2026 17:40:55 +0800
Subject: [PATCH] feat:申请提交

---
 applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue           |   71 +++++-
 applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue      |   33 ++
 applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/supplyAddApi.js     |   10 
 applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue |  514 ++++++++++++++++++++++++++++++++++++++++++++++
 applications/task-work-order/env/.env.development                                              |    2 
 5 files changed, 612 insertions(+), 18 deletions(-)

diff --git a/applications/task-work-order/env/.env.development b/applications/task-work-order/env/.env.development
index 9155aea..deb6289 100644
--- a/applications/task-work-order/env/.env.development
+++ b/applications/task-work-order/env/.env.development
@@ -15,7 +15,7 @@
 
 #开发环境代理地址(推荐本地新建文件 .env.development.local 来进行覆盖)
 # VITE_APP_URL = https://wrj.shuixiongit.com/api
-VITE_APP_URL= http://192.168.1.204
+VITE_APP_URL= http://192.168.1.168
 
 #新大屏地址
 VITE_APP_DASHBOARD_URL = 'https://wrj.shuixiongit.com/command-center-dashboard/'
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
new file mode 100644
index 0000000..177fd42
--- /dev/null
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
@@ -0,0 +1,514 @@
+<template>
+	<el-dialog
+		class="gd-dialog"
+		v-model="visible"
+		:title="'查看申请'"
+		@closed="visible = false"
+		destroy-on-close
+	>
+	<div class="detail-container">
+		<!-- 左侧步骤条 -->
+		<div class="detail-left">
+			<el-steps :active="activeStep" direction="vertical" align-center>
+				<el-step v-for="(step, index) in steps" :key="index" :title="step.title">
+					<template #description>
+						<div class="step-person">{{ step.person }}</div>
+						<div class="step-time">{{ step.time }}</div>
+					</template>
+				</el-step>
+			</el-steps>
+		</div>
+		<!-- 右侧表单数据 -->
+		<div class="detail-right">
+		<div>
+			<div class="label">需求详情</div>
+			<div class="requirementsDetailsBox">
+				<div class="detail-table">
+					<div class="detail-row">
+						<div class="detail-cell">
+							<span class="cell-label">需求名称</span>
+							<span class="cell-value">{{ formData.demandName }}</span>
+						</div>
+						<div class="detail-cell">
+							<span class="cell-label">需求类型</span>
+							<span class="cell-value">{{ getDictLabel(formData.demandType, dictObj.requirementType) }}</span>
+						</div>
+					</div>
+					<div class="detail-row">
+						<div class="detail-cell">
+							<span class="cell-label">需求联系人</span>
+							<span class="cell-value">{{ formData.contactPerson }}</span>
+						</div>
+						<div class="detail-cell">
+							<span class="cell-label">需求联系人电话</span>
+							<span class="cell-value">{{ formData.contactPhone }}</span>
+						</div>
+					</div>
+					<div class="detail-row">
+						<div class="detail-cell">
+							<span class="cell-label">需求邮箱</span>
+							<span class="cell-value">{{ formData.contactEmail }}</span>
+						</div>
+						<div class="detail-cell">
+							<span class="cell-label">更新周期</span>
+							<span class="cell-value">{{ formData.updateCycle }}</span>
+						</div>
+					</div>
+					<div class="detail-row">
+						<div class="detail-cell">
+							<span class="cell-label">申请依据</span>
+							<span class="cell-value">{{ formData.applyBasis }}</span>
+						</div>
+						<div class="detail-cell">
+							<span class="cell-label">共享类型</span>
+							<span class="cell-value">{{ getDictLabel(formData.shareType, dictObj.sharedType) }}</span>
+						</div>
+					</div>
+					<div class="detail-row">
+						<div class="detail-cell">
+							<span class="cell-label">应用场景类型</span>
+							<span class="cell-value">{{ getDictLabel(formData.applicationScene, dictObj.appSceneType) }}</span>
+						</div>
+						<div class="detail-cell">
+							<span class="cell-label">责任部门</span>
+							<span class="cell-value">{{ formData.responsibleDeptName }}</span>
+						</div>
+					</div>
+					<div class="detail-row">
+						<div class="detail-cell">
+							<span class="cell-label">数据来源依据</span>
+							<span class="cell-value">{{ formData.dataSource }}</span>
+						</div>
+						<div class="detail-cell">
+							<span class="cell-label">需求信息项</span>
+							<span class="cell-value">{{ formData.demandInfo }}</span>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+			<div>
+				<div class="label">数据上传</div>
+				<div class="upload-container">
+				   <el-upload
+					ref="uploadRef"
+					:auto-upload="false"
+					:limit="1"
+					:on-change="handleFileChange"
+					:on-remove="handleFileRemove"
+					:before-upload="beforeFileUpload"
+					:file-list="fileList"
+					accept=".zip,.rar,.7z,.tar,.gz"
+					class="upload-demo"
+				  >
+					<template #trigger>
+					  <el-button type="primary">选择文件</el-button>
+					</template>
+					<template #tip>
+					  <div class="el-upload__tip">
+						请上传压缩文件 (.zip/.rar/.7z/.tar/.gz)
+					  </div>
+					</template>
+				  </el-upload>
+				  <el-button 
+					type="success" 
+					:disabled="!selectedFile" 
+					@click="handleUpload"
+					style="margin-top: 10px;"
+				  >
+					上传文件
+				  </el-button>
+				  
+				  <!-- 已上传文件列表 -->
+				  <div v-if="uploadedFiles.length > 0" class="uploaded-files">
+					<h4>已上传文件:</h4>
+					<div v-for="(file, index) in uploadedFiles" :key="index" class="file-item">
+					  <span>{{ file.originalName }}</span>
+					  <el-button type="text" @click="viewFile(file)" style="margin-left: 10px;">查看</el-button>
+					  <el-button type="text" @click="downloadFile(file)" style="margin-left: 5px;">下载</el-button>
+					</div>
+				  </div>
+				</div>
+			</div>
+
+		</div>
+
+	</div>
+		<template #footer>
+			<el-button
+				class="save-btn"
+				color="#4C34FF"
+				
+				
+				@click="rejectTheApplication"
+			>
+				拒绝申请
+			</el-button>
+			<el-button color="#F2F3F5"  @click="approvedByTheReview">审核通过</el-button>
+
+		</template>
+	</el-dialog>
+</template>
+
+<script setup>
+import { ref, inject } from 'vue'
+import { getDictLabel } from '@ztzf/utils'
+import { gdSupplyDemandDetailApi, putFileAttachApi,gdSupplyDemandAuditPassApi,gdSupplyDemandAuditRejectApi } from '@/views/orderView/orderDataManage/supplyAdd/supplyAddApi'
+import { ElMessage, ElMessageBox } from 'element-plus'
+
+const dictObj = inject('dictObj')
+const deptTree = inject('deptTree')
+
+const visible = defineModel() // 弹框显隐
+const formData = ref({}) // 表单数据
+const uploadRef = ref() // 上传组件引用
+const selectedFile = ref(null) // 选择的文件
+const fileList = ref([]) // 上传文件列表
+const uploadedFiles = ref([]) // 已上传文件列表
+const uploadLoading = ref(false) // 上传加载状态
+const responseId = ref([])
+// 步骤条数据
+const steps = ref([
+	{ title: '需求申请', person: '张三', time: '2025-03-31 12:23:30' },
+	{ title: '审核通过', person: '', time: '' },
+])
+// 当前激活步骤
+const activeStep = ref(0) 
+
+// 文件选择变化
+const handleFileChange = (file, fileList) => {
+  if (fileList.length > 0) {
+    selectedFile.value = file.raw
+  } else {
+    selectedFile.value = null
+  }
+}
+
+// 文件移除
+const handleFileRemove = () => {
+  selectedFile.value = null
+}
+
+// 上传前验证
+const beforeFileUpload = (file) => {
+  const allowedExtensions = ['.zip', '.rar', '.7z', '.tar', '.gz']
+  const fileExtension = '.' + file.name.split('.').pop().toLowerCase()
+  
+  if (!allowedExtensions.includes(fileExtension)) {
+    ElMessage.error('只能上传压缩文件格式:.zip/.rar/.7z/.tar/.gz')
+    return false
+  }
+  
+  // 文件大小限制,这里限制为100MB
+  const maxSize = 100 * 1024 * 1024 // 100MB
+  if (file.size > maxSize) {
+    ElMessage.error('文件大小不能超过100MB')
+    return false
+  }
+  
+  return true
+}
+
+// 处理文件上传
+const handleUpload = async () => {
+  if (!selectedFile.value) {
+    ElMessage.warning('请先选择文件')
+    return
+  }
+
+  // 再次验证文件类型
+  if (!beforeFileUpload(selectedFile.value)) {
+    return
+  }
+
+  try {
+    uploadLoading.value = true
+    
+    // 创建FormData对象
+    const formData = new FormData()
+    formData.append('file', selectedFile.value)
+    
+    // 调用上传接口
+    const response = await putFileAttachApi(formData)
+    
+    if (response.data && response.data.success) {
+      const fileData = response.data.data
+      
+      // 添加到已上传文件列表
+      uploadedFiles.value.push({
+        name: fileData.name,
+        originalName: fileData.originalName,
+        link: fileData.link,
+        attachId: fileData.attachId
+      })
+      
+      ElMessage.success('文件上传成功!')
+      
+      // 清空上传列表
+      uploadRef.value.clearFiles()
+      selectedFile.value = null
+      
+      // 这里可以将附件ID保存到表单数据中,供后续提交使用
+      // formData.value.attachmentId = fileData.attachId
+      
+    } else {
+      ElMessage.error(response.data?.msg || '文件上传失败')
+    }
+  } catch (error) {
+    console.error('文件上传失败:', error)
+    ElMessage.error('文件上传失败,请重试')
+  } finally {
+    uploadLoading.value = false
+  }
+}
+
+// 查看文件
+const viewFile = (file) => {
+  if (file.link) {
+    window.open(file.link, '_blank')
+  } else {
+    ElMessage.warning('文件链接无效')
+  }
+}
+
+// 下载文件
+const downloadFile = (file) => {
+  if (file.link) {
+    // 创建一个隐藏的a标签来触发下载
+    const a = document.createElement('a')
+    a.href = file.link
+    a.download = file.originalName || file.name
+    document.body.appendChild(a)
+    a.click()
+    document.body.removeChild(a)
+  } else {
+    ElMessage.warning('文件链接无效')
+  }
+}
+
+// 根据部门ID获取部门名称
+function getDeptNameById(deptId, deptList) {
+	// 处理类型转换,确保比较的是相同类型
+	const targetId = String(deptId)
+	
+	// 递归遍历部门树
+	function findDept(deptList) {
+		for (const dept of deptList) {
+			if (String(dept.id) === targetId) {
+				return dept.name
+			}
+			if (Array.isArray(dept.children) && dept.children.length > 0) {
+				const name = findDept(dept.children)
+				if (name) return name
+			}
+		}
+		return ''
+	}
+	
+	if (!targetId || !Array.isArray(deptList) || deptList.length === 0) {
+		return ''
+	}
+	
+	return findDept(deptList)
+}
+
+// 打开弹框
+async function open({ row }) {
+	if (row?.id) {
+		await loadDetail(row.id)
+		// 可以在这里加载已上传的文件列表
+		// loadUploadedFiles(row.id)
+	}
+	visible.value = true
+}
+
+// 加载详情
+async function loadDetail(id) {
+	const res = await gdSupplyDemandDetailApi({ id })
+	const data = res?.data?.data ?? {}
+	// 如果没有部门名称,根据部门ID从部门树中获取
+	if (data.responsibleDeptId && !data.responsibleDeptName) {
+		data.responsibleDeptName = getDeptNameById(data.responsibleDeptId, deptTree.value)
+	}
+	formData.value = data
+}
+
+// 如果需要加载已上传的文件列表
+const loadUploadedFiles = async (id) => {
+  try {
+    // 这里根据实际情况调用接口获取已上传的文件列表
+    // const response = await getFileListApi({ id })
+    // if (response.data?.success) {
+    //   uploadedFiles.value = response.data.data || []
+    // }
+  } catch (error) {
+    console.error('加载已上传文件失败:', error)
+  }
+}
+// 拒绝申请
+const rejectTheApplication = () => {
+	const id = ['2013182736046530562']
+	console.log('uploadedFiles.value.attachId',uploadedFiles.value.attachId)
+	gdSupplyDemandAuditRejectApi({ attachIds:id }).then(() => {
+		ElMessage.success('拒绝申请成功')
+		// visible.value = false
+	})
+}
+// 审核通过
+const approvedByTheReview = () => {
+	const id = ['2013182736046530562']
+	gdSupplyDemandAuditPassApi({ id }).then(() => {
+		ElMessage.success('审核通过成功')
+		visible.value = false
+	})
+}
+
+defineExpose({ open })
+</script>
+
+<style scoped lang="scss">
+.detail-container {
+	padding: 20px;
+	display: flex;
+	align-items: flex-start;
+	gap: 30px;
+}
+
+/* 左侧步骤条 */
+.detail-left {
+	width: 25%;
+	padding-right: 20px;
+	border-right: 1px solid #e8e8e8;
+}
+
+/* 右侧表单 */
+.detail-right {
+	width: 75%;
+	.requirementsDetailsBox {
+		background: #F2F3F5;
+		border-radius: 2px 2px 2px 2px;
+	}
+
+	/* 详情表格样式 */
+	.detail-table {
+		width: 100%;
+	}
+
+	.detail-row {
+		display: flex;
+		&:last-child {
+			margin-bottom: 0;
+		}
+	}
+
+	.detail-cell {
+		flex: 1;
+		display: flex;
+		justify-content: space-between;
+		padding: 5px 12px;
+		margin-right: 8px;
+		&:last-child {
+			margin-right: 0;
+		}
+	}
+
+	.cell-label {
+		font-weight: 500;
+		color: #333333;
+		margin-right: 8px;
+		text-align: right;
+		min-width: 100px;
+		flex-shrink: 0;
+	}
+
+	.cell-value {
+		color: #666666;
+		flex: 1;
+		text-align: left;
+	}
+}
+
+/* 步骤条样式 */
+:deep(.el-steps) {
+	align-items: flex-start;
+}
+
+:deep(.el-step) {
+	margin-bottom: 20px;
+}
+
+:deep(.el-step__title) {
+	font-size: 14px;
+	font-weight: 500;
+	margin-bottom: 8px;
+}
+
+/* 步骤描述 */
+.step-person {
+	font-size: 13px;
+	color: #333;
+	margin-bottom: 4px;
+}
+
+.step-time {
+	font-size: 12px;
+	color: #909399;
+}
+
+/* 表单样式 */
+.label {
+	font-weight: 500;
+	margin-bottom: 8px;
+	color: #333;
+}
+
+/* 上传容器样式 */
+.upload-container {
+	padding: 15px;
+	background: #F2F3F5;
+	border-radius: 2px 2px 2px 2px;
+}
+
+.uploaded-files {
+	margin-top: 15px;
+	
+	h4 {
+		margin-bottom: 10px;
+		font-size: 14px;
+		color: #333333;
+		font-weight: 500;
+	}
+	
+	.file-item {
+		display: flex;
+		align-items: center;
+		padding: 8px;
+		background: white;
+		border-radius: 4px;
+		margin-bottom: 5px;
+		
+		span {
+			flex: 1;
+			color: #333;
+		}
+	}
+}
+
+.val {
+	padding: 8px;
+	background-color: #f5f7fa;
+	border-radius: 4px;
+	min-height: 32px;
+	word-break: break-all;
+	margin-bottom: 16px;
+}
+
+/* 上传按钮样式 */
+:deep(.el-upload) {
+	display: inline-block;
+}
+
+:deep(.el-upload-list) {
+	margin-top: 10px;
+}
+</style>
\ No newline at end of file
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue
index 5fe9dac..f4bb82e 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/FormDiaLog.vue
@@ -257,7 +257,31 @@
 	dataSource: fieldRules(true),
 	demandInfo: fieldRules(true),
 }
-
+// 根据部门ID获取部门名称
+function getDeptNameById(deptId, deptList) {
+	// 处理类型转换,确保比较的是相同类型
+	const targetId = String(deptId)
+	
+	// 递归遍历部门树
+	function findDept(deptList) {
+		for (const dept of deptList) {
+			if (String(dept.id) === targetId) {
+				return dept.name
+			}
+			if (Array.isArray(dept.children) && dept.children.length > 0) {
+				const name = findDept(dept.children)
+				if (name) return name
+			}
+		}
+		return ''
+	}
+	
+	if (!targetId || !Array.isArray(deptList) || deptList.length === 0) {
+		return ''
+	}
+	
+	return findDept(deptList)
+}
 // 提交新增/编辑
 async function handleSubmit() {
 	const isValid = await formRef.value?.validate().catch(() => false)
@@ -294,7 +318,12 @@
 async function loadDetail() {
 	if (!formData.value.id) return
 	const res = await gdSupplyDemandDetailApi({ id: formData.value.id })
-	formData.value = res?.data?.data ?? {}
+	const data = res?.data?.data ?? {}
+	// 如果没有部门名称,根据部门ID从部门树中获取
+	if (data.responsibleDeptId && !data.responsibleDeptName) {
+		data.responsibleDeptName = getDeptNameById(data.responsibleDeptId, deptTree.value)
+	}
+	formData.value = data
 }
 
 // 打开弹框
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue
index 4c1fefe..43e7c61 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/index.vue
@@ -36,8 +36,8 @@
 		</el-form>
 
 		<div class="gd-table-toolbar">
-			<el-button :icon="Plus" color="#4C34FF" type="primary" @click="openForm('add')">新增</el-button>
-			<el-button :icon="Delete" color="#4C34FF" :disabled="!selectedIds.length" @click="handleDelete()">删除</el-button>
+			<el-button :icon="Plus" color="#4C34FF" type="primary" @click="openForm('add')">供需填报新增</el-button>
+<!--			<el-button :icon="Delete" color="#4C34FF" :disabled="!selectedIds.length" @click="handleDelete()">删除</el-button>-->
 		</div>
 
 		<div class="gd-table-container" v-loading="loading">
@@ -76,8 +76,8 @@
 					<el-table-column label="操作" class-name="operation-btns">
 						<template v-slot="{ row }">
 							<el-link @click="openForm('view', row)">查看</el-link>
-							<el-link @click="openForm('edit', row)">编辑</el-link>
-							<el-link @click="handleDelete(row)">删除</el-link>
+							<el-link @click="openForm('edit', row)" v-if="row.demandStatus !== '1'">编辑</el-link>
+							<el-link @click="handleDelete(row)" v-if="row.demandStatus !== '1'">删除</el-link>
 						</template>
 					</el-table-column>
 				</el-table>
@@ -96,16 +96,18 @@
 		</div>
 
 		<FormDiaLog ref="dialogRef" @success="getList" v-if="dialogVisible" v-model="dialogVisible" />
+		<ApplyViewDialog ref="applyDialogRef" v-if="applyDialogVisible" v-model="applyDialogVisible" />
 	</basic-container>
 </template>
 <script setup>
 import { Search, RefreshRight, Plus, Delete } from '@element-plus/icons-vue'
-import { onMounted, ref } from 'vue'
+import { onMounted, ref, nextTick } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { getDictionaryByCode } from '@/api/system/dictbiz'
 import { getDeptTree } from '@/api/system/dept'
 import { getDictLabel } from '@ztzf/utils'
 import FormDiaLog from './FormDiaLog.vue'
+import ApplyViewDialog from './ApplyViewDialog.vue'
 import {
 	gdSupplyDemandPageApi,
 	gdSupplyDemandRemoveApi,
@@ -126,10 +128,13 @@
 const queryParamsRef = ref(null) // 查询表单实例
 const dialogRef = ref(null) // 弹框实例
 const dialogVisible = ref(false)
+const applyDialogRef = ref(null) // 申请详情弹框实例
+const applyDialogVisible = ref(false)
 const dictObj = ref({
 	requirementType: [], // 需求类型
 	sharedType: [], // 共享类型
 	appSceneType: [], // 应用场景类型
+	demandStatus: [], // 需求状态
 })
 provide('dictObj', dictObj)
 const deptTree = ref([]) // 部门树
@@ -140,12 +145,32 @@
 provide('deptTree', deptTree)
 provide('treeProps', treeProps)
 
+// 根据部门ID获取部门名称
+function getDeptNameById(deptId, deptList) {
+	if (!deptId || !Array.isArray(deptList)) return ''
+	for (const dept of deptList) {
+		if (dept.id === deptId) {
+			return dept.name
+		}
+		if (Array.isArray(dept.children) && dept.children.length > 0) {
+			const name = getDeptNameById(deptId, dept.children)
+			if (name) return name
+		}
+	}
+	return ''
+}
+
 // 获取列表
 async function getList() {
 	loading.value = true
 	try {
 		const res = await gdSupplyDemandPageApi(searchParams.value)
-		list.value = res?.data?.data?.records ?? []
+		const records = res?.data?.data?.records ?? []
+		// 为每条记录添加部门名称
+		list.value = records.map(item => ({
+			...item,
+			responsibleDeptName: item.responsibleDeptName || getDeptNameById(item.responsibleDeptId, deptTree.value)
+		}))
 		total.value = res?.data?.data?.total ?? 0
 	} finally {
 		loading.value = false
@@ -167,10 +192,26 @@
 
 // 新增/编辑/查看 弹框
 function openForm(mode, row) {
-	dialogVisible.value = true
-	nextTick(() => {
-		dialogRef.value?.open({ mode, row })
-	})
+	if (mode === 'view' && row?.demandStatus === '1') {
+		// 如果是查看申请中的记录,使用申请详情弹框
+		openApplyViewDialog(row)
+	} else {
+		// 其他情况使用原有弹框
+		dialogVisible.value = true
+		nextTick(() => {
+			dialogRef.value?.open({ mode, row })
+		})
+	}
+}
+
+// 打开申请详情弹框
+function openApplyViewDialog(row) {
+	if (row?.id) {
+		applyDialogVisible.value = true
+		nextTick(() => {
+			applyDialogRef.value?.open({ row })
+		})
+	}
 }
 
 // 删除
@@ -196,22 +237,22 @@
 
 // 获取字典
 function getDictList() {
-	getDictionaryByCode('requirementType,sharedType,appSceneType,demandStatus').then(res => {
+	return getDictionaryByCode('requirementType,sharedType,appSceneType,demandStatus').then(res => {
 		dictObj.value = res.data.data
 	})
 }
 
 // 获取部门树
 function getDeptTreeFun() {
-	getDeptTree().then(res => {
+	return getDeptTree().then(res => {
 		deptTree.value = res.data.data
 	})
 }
 
-onMounted(() => {
+onMounted(async () => {
+	// 先获取字典和部门树数据,再获取列表数据
+	await Promise.all([getDictList(), getDeptTreeFun()])
 	getList()
-	getDictList()
-	getDeptTreeFun()
 })
 </script>
 <style scoped lang="scss"></style>
diff --git a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/supplyAddApi.js b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/supplyAddApi.js
index 7823047..6085530 100644
--- a/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/supplyAddApi.js
+++ b/applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/supplyAddApi.js
@@ -53,3 +53,13 @@
 		data,
 	})
 }
+
+// 文件上传
+export const putFileAttachApi = (file) => {
+	return request({
+		url: `/blade-resource/oss/endpoint/put-file-attach`,
+		method: 'post',
+		data: file,
+	
+	})
+}

--
Gitblit v1.9.3