diff --git a/.env.development b/.env.development index 21892b7..fe20df3 100644 --- a/.env.development +++ b/.env.development @@ -5,7 +5,7 @@ VITE_APP_TITLE = 新能源项目管理平台 VITE_APP_ENV = 'development' # 开发环境 -VITE_APP_BASE_API = 'http://192.168.110.180:8898' +VITE_APP_BASE_API = 'http://192.168.110.159:8898' # 无人机接口地址 diff --git a/src/api/materials/overallPlanMaterialSupply/index.ts b/src/api/materials/overallPlanMaterialSupply/index.ts new file mode 100644 index 0000000..bf856e1 --- /dev/null +++ b/src/api/materials/overallPlanMaterialSupply/index.ts @@ -0,0 +1,34 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +// 获取主数据列表 +export const obtainMasterDataList = (params: any): AxiosPromise => { + return request({ + url: '/design/totalsupplyplan/queryList', + method: 'get', + params + }); +}; + +// 总供应计划列表 +export const totalsupplyplan = (params: any): AxiosPromise => { + return request({ + url: '/design/totalsupplyplan/list', + method: 'get', + params + }); +}; +// 总供应计划详细信息 +export const totalSupplyplanDetails = (id: any): AxiosPromise => { + return request({ + url: '/design/totalsupplyplan/' + id, + method: 'get', + }); +}; +// 修改物资-总供应计划 +export const materialChangeSupplyplan = (data: any): AxiosPromise => { + return request({ + url: '/design/totalsupplyplan', + method: 'put', + data + }); +}; \ No newline at end of file diff --git a/src/api/materials/usageMaterials/index.ts b/src/api/materials/usageMaterials/index.ts new file mode 100644 index 0000000..f2a860e --- /dev/null +++ b/src/api/materials/usageMaterials/index.ts @@ -0,0 +1,41 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +// 查询物资-使用情况列表 +export const useMaterialsQueryList = (params: any): AxiosPromise => { + return request({ + url: '/cailiaoshebei/physicalsupply/list', + method: 'get', + params + }); +}; + +// 新增物资 +export const newMaterialsAdd = (data: any): AxiosPromise => { + return request({ + url: '/cailiaoshebei/physicalsupply', + method: 'post', + data + }); +}; +// 修改物资 +export const materialsEdit = (data: any): AxiosPromise => { + return request({ + url: '/cailiaoshebei/physicalsupply', + method: 'put', + data + }); +}; +// 删除物资 +export const materialsDel = (id: any): AxiosPromise => { + return request({ + url: '/cailiaoshebei/physicalsupply/' + id, + method: 'delete', + }); +}; +// 获取物资详情 +export const queryMaterialsInfo = (id: any): AxiosPromise => { + return request({ + url: '/cailiaoshebei/physicalsupply/' + id, + method: 'get', + }); +}; \ No newline at end of file diff --git a/src/views/materials/materialsEquipment/partyA.rar b/src/views/materials/materialsEquipment/partyA.rar new file mode 100644 index 0000000..85d8276 Binary files /dev/null and b/src/views/materials/materialsEquipment/partyA.rar differ diff --git a/src/views/materials/overallPlanMaterialSupply/index.vue b/src/views/materials/overallPlanMaterialSupply/index.vue index 67bddd4..af49aa1 100644 --- a/src/views/materials/overallPlanMaterialSupply/index.vue +++ b/src/views/materials/overallPlanMaterialSupply/index.vue @@ -1,16 +1,314 @@ - +// 表单数据 +const formData = reactive({ + batchNumber: '', + brand: '', + compileDate: '', + dateService: '', + deliveryPoints: '', + id: undefined, + name: '', + num: '', + partUsed: '', + planNumber: '', + projectId: undefined, + qualityStandard: '', + quantity: 0, + remark: '', + specification: '', + status: '', + texture: '', + unit: '' +}); +// 表单验证规则 +const formRules = reactive({ + name: [ + { required: true, message: '请输入名称', trigger: 'blur' }, + { max: 100, message: '名称长度不能超过100个字符', trigger: 'blur' } + ], + num: [ + { required: true, message: '请输入编号', trigger: 'blur' }, + { max: 50, message: '编号长度不能超过50个字符', trigger: 'blur' } + ], + quantity: [ + { required: true, message: '请输入数量', trigger: 'blur' }, + { type: 'number', min: 0, message: '数量不能为负数', trigger: 'blur' } + ], + compileDate: [ + { required: true, message: '请选择编制日期', trigger: 'change' } + ] +}); +// 获取主表数据 +async function getMasterDataList() { + try { + // 获取主数据列表 + state.loading.list = true; + const masterDataRes = await obtainMasterDataList({ + projectId: currentProject.value?.id + }); - + const { data: masterData } = masterDataRes; + console.log('masterData', masterData); + + if (!masterData[0].id) { + console.warn('未获取到有效的主数据ID'); + state.tableData = []; + return; + } + state.masterData = masterData[0]; + + // 获取供应计划 + const supplyPlanRes = await totalsupplyplan({ id: masterData[0].id }); + + // 处理结果 + if (supplyPlanRes.list == null) { + state.tableData = supplyPlanRes.rows || []; + console.log('state.tableData', state.tableData); + } else { + // 根据实际业务逻辑处理有list的情况 + state.tableData = []; + } + + } catch (error) { + console.error('获取主数据列表失败:', error); + // 错误情况下给默认值,避免页面出错 + state.tableData = []; + } finally { + state.loading.list = false; + } +} +// 获取详情 +// 修改获取详情的方法 +async function totalSupplyplanDetail(id) { + try { + const result = await totalSupplyplanDetails(id); + if (result?.code === 200) { + const detailData = result.data || {}; + // 1. 清空原有表单数据 + Object.keys(formData).forEach(key => { + formData[key] = undefined; + }); + // 2. 处理日期格式(假设接口返回的是Date对象或ISO字符串) + const formatDate = (date) => { + if (!date) return ''; + // 若为字符串,先转为Date对象 + const d = typeof date === 'string' ? new Date(date) : date; + return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`; + }; + // 3. 合并数据到formData(响应式赋值) + Object.assign(formData, { + ...detailData, + // 单独处理日期字段,转为表单可识别的字符串格式 + compileDate: formatDate(detailData.compileDate), + dateService: formatDate(detailData.dateService) + }); + console.log('表单数据已更新:', formData); + } else { + ElMessage.error(`获取详情失败: ${result?.msg || '未知错误'}`); + } + } catch (err) { + ElMessage.error(`接口请求失败: ${err.message}`); + console.error('详情接口错误:', err); + } finally { + state.loading.list = false; + } +} +// 修改 +function editApprovalSheet(row) { + console.log(row); + totalSupplyplanDetail(row.id) + visible.value = true; +} +// 提交表单 +const handleSubmit = async () => { + try { + // 表单验证 + await formRef.value.validate(); + // 触发提交事件 + console.log('submitData:', formData); + editMaterialSupply(formData); + handleClose(); + } catch (error) { + // 验证失败不提交 + console.error('表单验证失败:', error); + return; + } +}; +// 修改物资 +function editMaterialSupply(formData) { + materialChangeSupplyplan(formData).then(res => { + if (res.code === 200) { + ElMessage.success('修改成功'); + } else { + ElMessage.error('修改失败'); + } + }); +} + +// 关闭弹窗 +const handleClose = () => { + visible.value = false; + // 清空表单数据 + Object.keys(formData).forEach(key => { + formData[key] = undefined; + }); + // 重置表单验证状态 + formRef.value?.resetFields(); +}; + +// 审批 +function clickApprovalSheet1() { + proxy.$tab.closePage(proxy.$route); + proxy.$router.push({ + path: `/materials/overallPlanMaterialSupply/indexEdit`, + query: { + id: state.masterData.id, + type: 'update' + } + }); +} +// 审核流程 +function lookApprovalFlow() { + proxy.$router.push({ + path: `/materials/overallPlanMaterialSupply/indexEdit`, + query: { + id: state.masterData.id, + type: 'view' + } + }); +} +onMounted(() => { + getMasterDataList(); +}) + + diff --git a/src/views/materials/overallPlanMaterialSupply/indexEdit.vue b/src/views/materials/overallPlanMaterialSupply/indexEdit.vue new file mode 100644 index 0000000..f1836ce --- /dev/null +++ b/src/views/materials/overallPlanMaterialSupply/indexEdit.vue @@ -0,0 +1,390 @@ + + + + diff --git a/src/views/materials/usageMaterials/material/index.vue b/src/views/materials/usageMaterials/material/index.vue new file mode 100644 index 0000000..8d3ed0a --- /dev/null +++ b/src/views/materials/usageMaterials/material/index.vue @@ -0,0 +1,626 @@ + + + + + diff --git a/src/views/materials/usageMaterials/purchase/index.vue b/src/views/materials/usageMaterials/purchase/index.vue new file mode 100644 index 0000000..0d331c4 --- /dev/null +++ b/src/views/materials/usageMaterials/purchase/index.vue @@ -0,0 +1,176 @@ + + + +