测试优化

This commit is contained in:
2025-08-26 21:00:46 +08:00
parent 589d21d622
commit 18957eb7a7
41 changed files with 1486 additions and 1162 deletions

View File

@ -6,13 +6,13 @@ VITE_APP_ENV = 'development'
# 开发环境 # 开发环境
# 李陈杰 209 # 李陈杰 209
VITE_APP_BASE_API = 'http://192.168.110.149:8899' VITE_APP_BASE_API = 'http://192.168.110.180:8899'
# 曾涛 # 曾涛
# VITE_APP_BASE_API = 'http://192.168.110.180:8899' # VITE_APP_BASE_API = 'http://192.168.110.180:8899'
# 罗成 # 罗成
# VITE_APP_BASE_API = 'http://192.168.110.213:8899' # VITE_APP_BASE_API = 'http://192.168.110.213:8899'
# 朱银 # 朱银
VITE_APP_BASE_API = 'http://192.168.110.149:8899' # VITE_APP_BASE_API = 'http://192.168.110.149:8899'
#曾涛 #曾涛
# VITE_APP_BASE_API = 'http://192.168.110.171:8899' # VITE_APP_BASE_API = 'http://192.168.110.171:8899'

View File

@ -61,3 +61,16 @@ export const delMaterialReceive = (id: string | number | Array<string | number>)
method: 'delete' method: 'delete'
}); });
}; };
/**
* 获取合同列表数据
* @param id
*/
export const getContractNameList = (id: string | number | Array<string | number>) => {
return request({
url: '/materials/materialReceive/ctrList',
params: {
projectId: id
},
method: 'get'
});
};

View File

@ -0,0 +1,63 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { NoticeVO, NoticeForm, NoticeQuery } from '@/api/message/notice/types';
/**
* 查询消息列表
* @param query
* @returns {*}
*/
export const listNotice = (query?: NoticeQuery): AxiosPromise<NoticeVO[]> => {
return request({
url: '/message/notice/list',
method: 'get',
params: query
});
};
/**
* 查询消息详细
* @param id
*/
export const getNotice = (id: string | number): AxiosPromise<NoticeVO> => {
return request({
url: '/message/notice/' + id,
method: 'get'
});
};
/**
* 新增消息
* @param data
*/
export const addNotice = (data: NoticeForm) => {
return request({
url: '/message/notice',
method: 'post',
data: data
});
};
/**
* 修改消息
* @param data
*/
export const updateNotice = (data: NoticeForm) => {
return request({
url: '/message/notice',
method: 'put',
data: data
});
};
/**
* 删除消息
* @param id
*/
export const delNotice = (id: string | number | Array<string | number>) => {
return request({
url: '/message/notice/' + id,
method: 'delete'
});
};

View File

@ -0,0 +1,156 @@
export interface NoticeVO {
/**
* 主键ID
*/
id: string | number;
/**
* 项目ID
*/
projectId: string | number;
/**
* 接收通知的用户ID
*/
recipientId: string | number;
/**
* 发送通知的用户ID系统通知 0
*/
senderId: string | number;
/**
* 配置id
*/
configId: string | number;
/**
* 详情id
*/
detailId: string | number;
/**
* 通知内容
*/
content: string;
/**
* 查看状态(0未读 1已读)
*/
viewStatus: string;
/**
* 查看时间
*/
viewTime: string;
/**
* 备注
*/
remark: string;
}
export interface NoticeForm extends BaseEntity {
/**
* 主键ID
*/
id?: string | number;
/**
* 项目ID
*/
projectId?: string | number;
/**
* 接收通知的用户ID
*/
recipientId?: string | number;
/**
* 发送通知的用户ID系统通知 0
*/
senderId?: string | number;
/**
* 配置id
*/
configId?: string | number;
/**
* 详情id
*/
detailId?: string | number;
/**
* 通知内容
*/
content?: string;
/**
* 查看状态(0未读 1已读)
*/
viewStatus?: string;
/**
* 查看时间
*/
viewTime?: string;
/**
* 备注
*/
remark?: string;
}
export interface NoticeQuery extends PageQuery {
/**
* 项目ID
*/
projectId?: string | number;
/**
* 接收通知的用户ID
*/
recipientId?: string | number;
/**
* 发送通知的用户ID系统通知 0
*/
senderId?: string | number;
/**
* 配置id
*/
configId?: string | number;
/**
* 详情id
*/
detailId?: string | number;
/**
* 通知内容
*/
content?: string;
/**
* 查看状态(0未读 1已读)
*/
viewStatus?: string;
/**
* 查看时间
*/
viewTime?: string;
/**
* 日期范围参数
*/
params?: any;
}

View File

@ -69,3 +69,13 @@ export const delLandTransferLedger = (id: string | number | Array<string | numbe
method: 'delete' method: 'delete'
}); });
}; };
/**
* 获取详情
* @param id
*/
export const landTransferLedgerCount = (id: string | number | Array<string | number>) => {
return request({
url: '/land/landTransferLedger/count/' + id,
method: 'get'
});
};

View File

@ -10,12 +10,11 @@
@click="isDisabled = false" @click="isDisabled = false"
class="px-8 py-2.5 transition-all duration-300 font-medium" class="px-8 py-2.5 transition-all duration-300 font-medium"
v-if="isDisabled" v-if="isDisabled"
v-hasPermi="['cailiaoshebei:purchaseUser:addOrUpdate']" v-hasPermi="['bidding:biddingUser:add']"
> >
点击编辑 点击编辑
</el-button> </el-button>
</div> </div>
<!-- 表单内容区域 --> <!-- 表单内容区域 -->
<el-form ref="leaveFormRef" :model="form" :rules="rules" label-width="120px" class="p-6 pt30 space-y-6 h75" :disabled="isDisabled"> <el-form ref="leaveFormRef" :model="form" :rules="rules" label-width="120px" class="p-6 pt30 space-y-6 h75" :disabled="isDisabled">
<!-- 设计负责人 --> <!-- 设计负责人 -->
@ -30,7 +29,6 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
<!-- 提交按钮区域 --> <!-- 提交按钮区域 -->
<div class="flex justify-center space-x-6 mt-8 pt-6 border-t border-gray-100" v-if="!isDisabled"> <div class="flex justify-center space-x-6 mt-8 pt-6 border-t border-gray-100" v-if="!isDisabled">
<el-button <el-button
@ -38,7 +36,7 @@
@click="submitForm" @click="submitForm"
icon="Check" icon="Check"
class="px-8 py-2.5 transition-all duration-300 transform hover:scale-105 bg-blue-500 hover:bg-blue-600 text-white font-medium" class="px-8 py-2.5 transition-all duration-300 transform hover:scale-105 bg-blue-500 hover:bg-blue-600 text-white font-medium"
v-hasPermi="['cailiaoshebei:purchaseUser:addOrUpdate']" v-hasPermi="['bidding:biddingUser:add']"
> >
确认提交 确认提交
</el-button> </el-button>
@ -53,22 +51,14 @@
<script setup name="PersonnelForm" lang="ts"> <script setup name="PersonnelForm" lang="ts">
import { ref, reactive, computed, onMounted, toRefs } from 'vue'; import { ref, reactive, computed, onMounted, toRefs } from 'vue';
import { getCurrentInstance } from 'vue';
import type { ComponentInternalInstance } from 'vue';
import { useUserStoreHook } from '@/store/modules/user'; import { useUserStoreHook } from '@/store/modules/user';
import { ElMessage, ElLoading } from 'element-plus'; import { ElMessage, ElLoading } from 'element-plus';
import { biddingGetUser, AddbiddingUser, biddingUserList } from '@/api/bidding/appointment'; import { biddingGetUser, AddbiddingUser, biddingUserList } from '@/api/bidding/appointment';
import { getProject } from '@/api/project/project';
// 获取当前实例
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
// 获取用户 store // 获取用户 store
const userStore = useUserStoreHook(); const userStore = useUserStoreHook();
// 从 store 中获取当前选中的项目 // 从 store 中获取当前选中的项目
const currentProject = computed(() => userStore.selectedProject); const currentProject = computed(() => userStore.selectedProject);
// 专业字典数据
const { des_user_major } = toRefs<any>(proxy?.useDict('des_user_major'));
const isDisabled = ref(false); const isDisabled = ref(false);
const projectInfo = ref({}); //项目信息
// 表单数据 // 表单数据
const form = reactive({ const form = reactive({
id: null, id: null,

View File

@ -1,8 +1,7 @@
<template> <template>
<div class="p-4 bg-gray-50 min-h-screen"> <div class="p-4 bg-gray-50 min-h-screen">
<!-- 卡片容器控制最大宽度+居中+圆角阴影 --> <!-- 卡片容器控制最大宽度+居中+圆角阴影 -->
<el-card shadow="hover" class="max-w-6xl mx-auto rounded-xl overflow-hidden border-0" <el-card shadow="hover" class="max-w-6xl mx-auto rounded-xl overflow-hidden border-0" style="background-color: #ffffff">
style="background-color: #ffffff">
<!-- 卡片头部项目信息展示区 --> <!-- 卡片头部项目信息展示区 -->
<template #header> <template #header>
<div class="bg-blue-50 px-6 rounded-t-xl" style="padding: 10px 20px"> <div class="bg-blue-50 px-6 rounded-t-xl" style="padding: 10px 20px">
@ -64,8 +63,15 @@
</div> --> </div> -->
</template> </template>
<!-- 中标信息表单区域 --> <!-- 中标信息表单区域 -->
<el-form :disabled="isDisabled" ref="listOfWinningBidsFormRef" :model="form" :rules="rules" label-width="150px" <el-form
class="p-6 pt-4" style="background-color: #ffffff"> :disabled="isDisabled"
ref="listOfWinningBidsFormRef"
:model="form"
:rules="rules"
label-width="150px"
class="p-6 pt-4"
style="background-color: #ffffff"
>
<el-row :gutter="32"> <el-row :gutter="32">
<!-- 招标代理机构 --> <!-- 招标代理机构 -->
<el-col :span="12"> <el-col :span="12">
@ -82,15 +88,25 @@
<!-- 投标截止时间 --> <!-- 投标截止时间 -->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="投标截止时间" prop="biddingDeadline" class="rounded-lg border border-gray-100 p-1 mb-5"> <el-form-item label="投标截止时间" prop="biddingDeadline" class="rounded-lg border border-gray-100 p-1 mb-5">
<el-date-picker v-model="form.biddingDeadline" format="YYYY-MM-DD HH:mm:ss" <el-date-picker
value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择投标截止时间" /> v-model="form.biddingDeadline"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
type="datetime"
placeholder="请选择投标截止时间"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- 开标时间 --> <!-- 开标时间 -->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="开标时间" prop="bidopeningTime" class="rounded-lg border border-gray-100 p-1 mb-5"> <el-form-item label="开标时间" prop="bidopeningTime" class="rounded-lg border border-gray-100 p-1 mb-5">
<el-date-picker v-model="form.bidopeningTime" format="YYYY-MM-DD HH:mm:ss" <el-date-picker
value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="请选择开标时间" /> v-model="form.bidopeningTime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
type="datetime"
placeholder="请选择开标时间"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -108,17 +124,26 @@
</el-col> </el-col>
<!-- 答疑截止时间 --> <!-- 答疑截止时间 -->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="答疑截止时间" prop="answeringDeadlineTime" <el-form-item label="答疑截止时间" prop="answeringDeadlineTime" class="rounded-lg border border-gray-100 p-1 mb-5">
class="rounded-lg border border-gray-100 p-1 mb-5"> <el-date-picker
<el-date-picker v-model="form.answeringDeadlineTime" type="datetime" format="YYYY-MM-DD HH:mm:ss" v-model="form.answeringDeadlineTime"
value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择答疑截止时间" /> type="datetime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择答疑截止时间"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- 澄清截止时间 --> <!-- 澄清截止时间 -->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="澄清截止时间" prop="clarifyDeadlineTime" class="rounded-lg border border-gray-100 p-1 mb-5"> <el-form-item label="澄清截止时间" prop="clarifyDeadlineTime" class="rounded-lg border border-gray-100 p-1 mb-5">
<el-date-picker format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss " <el-date-picker
v-model="form.clarifyDeadlineTime" type="datetime" placeholder="请选择澄清截止时间" /> format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss "
v-model="form.clarifyDeadlineTime"
type="datetime"
placeholder="请选择澄清截止时间"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- 项目概况 --> <!-- 项目概况 -->
@ -131,22 +156,31 @@
<!-- 操作按钮区域 --> <!-- 操作按钮区域 -->
<el-row v-if="!form.id" class="mt-4"> <el-row v-if="!form.id" class="mt-4">
<el-col :span="24" class="text-center"> <el-col :span="24" class="text-center">
<el-button :loading="buttonLoading" type="primary" @click="submitForm" <el-button
v-hasPermi="['bidding:listOfWinningBids:add', 'bidding:listOfWinningBids:edit']" class="rounded-full px-8" :loading="buttonLoading"
size="large"> type="primary"
@click="submitForm"
v-hasPermi="['bidding:listOfWinningBids:add', 'bidding:listOfWinningBids:edit']"
class="rounded-full px-8"
size="large"
>
确认提交 确认提交
</el-button> </el-button>
<el-button type="default" @click="resetForm" class="ml-6 rounded-full px-8" size="large"> 重置 </el-button> <el-button type="default" @click="resetForm" class="ml-6 rounded-full px-8" size="large"> 重置 </el-button>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<div style="margin-top: 20px;" v-if="form.id"> <div style="margin-top: 20px" v-if="form.id">
<span style=" color: rgb(38 153 255); <span style="color: rgb(38 153 255); display: inline-block; margin-left: 40px; font-weight: 700">是否中标配置</span>
display: inline-block; <el-form
margin-left: 40px; ref="listOfWinningBidsFormRef"
font-weight: 700;">是否中标配置</span> :disabled="iswhetherBid"
<el-form ref="listOfWinningBidsFormRef" :disabled="iswhetherBid" :model="form" :rules="rules" :model="form"
label-width="150px" class="p-6 pt-4" style="background-color: #ffffff"> :rules="rules"
label-width="150px"
class="p-6 pt-4"
style="background-color: #ffffff"
>
<el-row> <el-row>
<!-- 是否中标必填 --> <!-- 是否中标必填 -->
<el-col :span="12"> <el-col :span="12">
@ -174,9 +208,14 @@
<!-- 操作按钮区域 --> <!-- 操作按钮区域 -->
<el-row class="mt-4" v-if="!iswhetherBid && form.whetherBid == '0'"> <el-row class="mt-4" v-if="!iswhetherBid && form.whetherBid == '0'">
<el-col :span="24" class="text-center"> <el-col :span="24" class="text-center">
<el-button :loading="buttonLoading1" type="primary" @click="submitForm" <el-button
:loading="buttonLoading1"
type="primary"
@click="submitForm"
v-hasPermi="['bidding:listOfWinningBids:add', 'bidding:listOfWinningBids:edit']" v-hasPermi="['bidding:listOfWinningBids:add', 'bidding:listOfWinningBids:edit']"
class="rounded-full px-8" size="large"> class="rounded-full px-8"
size="large"
>
中标 中标
</el-button> </el-button>
</el-col> </el-col>
@ -205,10 +244,6 @@ const fileList = ref([]);
const userStore = useUserStoreHook(); const userStore = useUserStoreHook();
const iswhetherBid = ref(false); // 是否中标 const iswhetherBid = ref(false); // 是否中标
const currentProject = computed(() => userStore.selectedProject); const currentProject = computed(() => userStore.selectedProject);
// const realUploadUrl = computed(() => {
// const search = new URLSearchParams().toString();
// return search ? `${baseUrl}${props.uploadUrl}?${search}` : `${baseUrl}${props.uploadUrl}`;
// });
// 项目信息(仅展示,非表单编辑) // 项目信息(仅展示,非表单编辑)
const projectInfo = reactive({ const projectInfo = reactive({
principal: undefined, principal: undefined,
@ -323,14 +358,7 @@ const getDictLabel = (dictList: any[], value: any) => {
const dictItem = dictList.find((item) => item.value === value); const dictItem = dictList.find((item) => item.value === value);
return dictItem ? dictItem.label : ''; return dictItem ? dictItem.label : '';
}; };
const upload = ref<UploadInstance>();
const handleExceed: UploadProps['onExceed'] = (files) => {
upload.value!.clearFiles();
const file = files[0] as UploadRawFile;
file.uid = genFileId();
upload.value!.handleStart(file);
};
/** /**
* 初始化中标数据根据项目ID查询已有记录 * 初始化中标数据根据项目ID查询已有记录
*/ */

View File

@ -36,22 +36,10 @@
<el-button type="primary" @click="handleExport()" v-hasPermi="['tender:billofquantitiesLimitList:export']">导出excel</el-button> <el-button type="primary" @click="handleExport()" v-hasPermi="['tender:billofquantitiesLimitList:export']">导出excel</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button type="primary" v-if="reviewStatus == 'draft'" @click="clickApprovalSheet()">审核</el-button>
type="primary"
v-if="reviewStatus == 'draft'"
@click="clickApprovalSheet()"
v-hasPermi="['tender:tenderPlanLimitList:getVersionDetail']"
>审核</el-button
>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button type="primary" v-if="reviewStatus != 'draft'" @click="clickApprovalSheet()">查看流程</el-button>
type="primary"
v-if="reviewStatus != 'draft'"
@click="clickApprovalSheet()"
v-hasPermi="['tender:tenderPlanLimitList:getVersionDetail']"
>查看流程</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>

View File

@ -1,66 +1,28 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <el-card shadow="never">
:leave-active-class="proxy?.animate.searchAnimate.leave"> <template #header>
<div v-show="showSearch" class="mb-[10px]"> <el-row :gutter="10" class="mb8">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<!-- <el-form-item label="项目ID" prop="projectId">
<el-input v-model="queryParams.projectId" placeholder="请输入项目ID" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<el-form-item label="合同编号" prop="contractCode"> <el-form-item label="合同编号" prop="contractCode">
<el-input v-model="queryParams.contractCode" placeholder="请输入合同编号" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.contractCode" placeholder="请输入合同编号" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="供应商" prop="contractSupplier"> <el-form-item label="供应商" prop="contractSupplier">
<el-input v-model="queryParams.contractSupplier" placeholder="请输入供应商" clearable <el-input v-model="queryParams.contractSupplier" placeholder="请输入供应商" clearable @keyup.enter="handleQuery" />
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<!-- <el-form-item label="合同金额" prop="amount">
<el-input v-model="queryParams.amount" placeholder="请输入合同金额" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<!-- <el-form-item label="招标Id" prop="tenderId">
<el-input v-model="queryParams.tenderId" placeholder="请输入招标Id" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['ctr:expensesContract:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
v-hasPermi="['ctr:expensesContract:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
v-hasPermi="['ctr:expensesContract:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['ctr:expensesContract:export']">导出</el-button>
</el-col>-->
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" :data="expensesContractList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="expensesContractList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="主键ID" align="center" prop="id" v-if="true" /> -->
<el-table-column type="index" width="50" label="序号" /> <el-table-column type="index" width="50" label="序号" />
<!-- <el-table-column label="项目ID" align="center" prop="projectId" /> -->
<el-table-column label="合同编号" align="center" prop="contractCode" /> <el-table-column label="合同编号" align="center" prop="contractCode" />
<!-- <el-table-column label="合同类型" align="center" prop="contractType" /> -->
<el-table-column label="合同类型" align="center" prop="contractType"> <el-table-column label="合同类型" align="center" prop="contractType">
<template #default="scope"> <template #default="scope">
<dict-tag :options="expenses_contract_type" :value="scope.row.contractType" /> <dict-tag :options="expenses_contract_type" :value="scope.row.contractType" />
@ -73,37 +35,23 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="供应商" align="center" prop="contractSupplier" /> <el-table-column label="供应商" align="center" prop="contractSupplier" />
<!-- <el-table-column label="分包内容" align="center" prop="contractedContent" /> -->
<el-table-column label="合同金额" align="center" prop="amount" /> <el-table-column label="合同金额" align="center" prop="amount" />
<el-table-column label="预付款比例(%)" align="center" prop="advancePayRatio" /> <el-table-column label="预付款比例(%)" align="center" prop="advancePayRatio" />
<el-table-column label="尾款比例(%)" align="center" prop="balancePayRatio" /> <el-table-column label="尾款比例(%)" align="center" prop="balancePayRatio" />
<el-table-column label="质保金比例(%)" align="center" prop="assuranceDepositRatio" /> <el-table-column label="质保金比例(%)" align="center" prop="assuranceDepositRatio" />
<el-table-column label="付款比例(%)" align="center" prop="payRatio" /> <el-table-column label="付款比例(%)" align="center" prop="payRatio" />
<!-- <el-table-column label="招标Id" align="center" prop="tenderId" /> -->
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<!-- <el-tooltip content="修改" placement="top"> <el-button link type="success" icon="View" @click="handleShowDetail(scope.row)">查看分包内容</el-button>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" <el-button link type="primary" v-hasPermi="['ctr:expensesContract:query']" icon="View" @click="handleShowFileList(scope.row)"
v-hasPermi="['ctr:expensesContract:edit']"></el-button> >查看附件列表</el-button
</el-tooltip> >
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"
v-hasPermi="['ctr:expensesContract:remove']"></el-button>
</el-tooltip> -->
<div>
<el-button link type="success" icon="View" @click="handleShowDetail(scope.row)">查看分包内容</el-button>
</div>
<div>
<el-button link type="primary" icon="View" @click="handleShowFileList(scope.row)">查看附件列表</el-button>
</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改支出合同对话框 --> <!-- 添加或修改支出合同对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
@ -143,9 +91,7 @@
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="detailVisible = false"> <el-button type="primary" @click="detailVisible = false"> 关闭 </el-button>
关闭
</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -153,15 +99,20 @@
</template> </template>
<script setup name="ExpensesContract" lang="ts"> <script setup name="ExpensesContract" lang="ts">
import { listExpensesContract, getExpensesContract, delExpensesContract, addExpensesContract, updateExpensesContract, getFileList } from '@/api/ctr/expensesContract'; import {
listExpensesContract,
getExpensesContract,
delExpensesContract,
addExpensesContract,
updateExpensesContract,
getFileList
} from '@/api/ctr/expensesContract';
import { ExpensesContractVO, ExpensesContractQuery, ExpensesContractForm } from '@/api/ctr/expensesContract/types'; import { ExpensesContractVO, ExpensesContractQuery, ExpensesContractForm } from '@/api/ctr/expensesContract/types';
import FileList from '@/components/FileList/index.vue'; import FileList from '@/components/FileList/index.vue';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { expenses_contract_type, income_contract_type } = toRefs( const { expenses_contract_type, income_contract_type } = toRefs(proxy?.useDict('income_contract_type', 'expenses_contract_type'));
proxy?.useDict('income_contract_type', 'expenses_contract_type')
);
const expensesContractList = ref<ExpensesContractVO[]>([]); const expensesContractList = ref<ExpensesContractVO[]>([]);
const buttonLoading = ref(false); const buttonLoading = ref(false);
const loading = ref(true); const loading = ref(true);
@ -193,8 +144,8 @@ const initFormData: ExpensesContractForm = {
contractedContent: undefined, contractedContent: undefined,
amount: undefined, amount: undefined,
tenderId: undefined, tenderId: undefined,
remark: undefined, remark: undefined
} };
const data = reactive<PageData<ExpensesContractForm, ExpensesContractQuery>>({ const data = reactive<PageData<ExpensesContractForm, ExpensesContractQuery>>({
form: { ...initFormData }, form: { ...initFormData },
queryParams: { queryParams: {
@ -207,16 +158,11 @@ const data = reactive<PageData<ExpensesContractForm, ExpensesContractQuery>>({
contractedContent: undefined, contractedContent: undefined,
amount: undefined, amount: undefined,
tenderId: undefined, tenderId: undefined,
params: { params: {}
}
}, },
rules: { rules: {
id: [ id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
{ required: true, message: "主键ID不能为空", trigger: "blur" } projectId: [{ required: true, message: '项目ID不能为空', trigger: 'blur' }]
],
projectId: [
{ required: true, message: "项目ID不能为空", trigger: "blur" }
],
} }
}); });
@ -229,55 +175,55 @@ const getList = async () => {
expensesContractList.value = res.rows; expensesContractList.value = res.rows;
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
} };
/** 取消按钮 */ /** 取消按钮 */
const cancel = () => { const cancel = () => {
reset(); reset();
dialog.visible = false; dialog.visible = false;
} };
/** 表单重置 */ /** 表单重置 */
const reset = () => { const reset = () => {
form.value = { ...initFormData }; form.value = { ...initFormData };
expensesContractFormRef.value?.resetFields(); expensesContractFormRef.value?.resetFields();
} };
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
getList(); getList();
} };
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
handleQuery(); handleQuery();
} };
/** 多选框选中数据 */ /** 多选框选中数据 */
const handleSelectionChange = (selection: ExpensesContractVO[]) => { const handleSelectionChange = (selection: ExpensesContractVO[]) => {
ids.value = selection.map(item => item.id); ids.value = selection.map((item) => item.id);
single.value = selection.length != 1; single.value = selection.length != 1;
multiple.value = !selection.length; multiple.value = !selection.length;
} };
/** 新增按钮操作 */ /** 新增按钮操作 */
const handleAdd = () => { const handleAdd = () => {
reset(); reset();
dialog.visible = true; dialog.visible = true;
dialog.title = "添加支出合同"; dialog.title = '添加支出合同';
} };
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: ExpensesContractVO) => { const handleUpdate = async (row?: ExpensesContractVO) => {
reset(); reset();
const _id = row?.id || ids.value[0] const _id = row?.id || ids.value[0];
const res = await getExpensesContract(_id); const res = await getExpensesContract(_id);
Object.assign(form.value, res.data); Object.assign(form.value, res.data);
dialog.visible = true; dialog.visible = true;
dialog.title = "修改支出合同"; dialog.title = '修改支出合同';
} };
/** 提交按钮 */ /** 提交按钮 */
const submitForm = () => { const submitForm = () => {
@ -285,46 +231,51 @@ const submitForm = () => {
if (valid) { if (valid) {
buttonLoading.value = true; buttonLoading.value = true;
if (form.value.id) { if (form.value.id) {
await updateExpensesContract(form.value).finally(() => buttonLoading.value = false); await updateExpensesContract(form.value).finally(() => (buttonLoading.value = false));
} else { } else {
await addExpensesContract(form.value).finally(() => buttonLoading.value = false); await addExpensesContract(form.value).finally(() => (buttonLoading.value = false));
} }
proxy?.$modal.msgSuccess("操作成功"); proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false; dialog.visible = false;
await getList(); await getList();
} }
}); });
} };
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: ExpensesContractVO) => { const handleDelete = async (row?: ExpensesContractVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除支出合同编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); await proxy?.$modal.confirm('是否确认删除支出合同编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
await delExpensesContract(_ids); await delExpensesContract(_ids);
proxy?.$modal.msgSuccess("删除成功"); proxy?.$modal.msgSuccess('删除成功');
await getList(); await getList();
} };
/** 导出按钮操作 */ /** 导出按钮操作 */
const handleExport = () => { const handleExport = () => {
proxy?.download('ctr/expensesContract/export', { proxy?.download(
...queryParams.value 'ctr/expensesContract/export',
}, `expensesContract_${new Date().getTime()}.xlsx`) {
} ...queryParams.value
},
`expensesContract_${new Date().getTime()}.xlsx`
);
};
// 查看附件列表操作 // 查看附件列表操作
const handleShowFileList = async (row: ExpensesContractVO) => { const handleShowFileList = async (row: ExpensesContractVO) => {
await getFileList({ contractId: row.id }).then(res => { await getFileList({ contractId: row.id })
fileList.value = res.rows .then((res) => {
fileListVisible.value = true; fileList.value = res.rows;
}).catch(() => { fileListVisible.value = true;
proxy?.$modal.error("获取文件列表失败"); })
}); .catch(() => {
proxy?.$modal.error('获取文件列表失败');
} });
};
const handleShowDetail = (data) => { const handleShowDetail = (data) => {
detailContent.value = data.contractedContent detailContent.value = data.contractedContent;
detailVisible.value = true; detailVisible.value = true;
} };
onMounted(() => { onMounted(() => {
getList(); getList();
}); });

View File

@ -1,60 +1,26 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <el-card shadow="never">
:leave-active-class="proxy?.animate.searchAnimate.leave"> <template #header>
<div v-show="showSearch" class="mb-[10px]"> <el-row :gutter="10" class="mb8">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<!-- <el-form-item label="项目ID" prop="projectId">
<el-input v-model="queryParams.projectId" placeholder="请输入项目ID" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<el-form-item label="合同编号" prop="contractCode"> <el-form-item label="合同编号" prop="contractCode">
<el-input v-model="queryParams.contractCode" placeholder="请输入合同编号" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.contractCode" placeholder="请输入合同编号" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="业主单位" prop="contractOwner"> <el-form-item label="业主单位" prop="contractOwner">
<el-input v-model="queryParams.contractOwner" placeholder="请输入业主单位" clearable <el-input v-model="queryParams.contractOwner" placeholder="请输入业主单位" clearable @keyup.enter="handleQuery" />
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<!-- <el-form-item label="合同金额" prop="amount">
<el-input v-model="queryParams.amount" placeholder="请输入合同金额" clearable @keyup.enter="handleQuery" />
</el-form-item> -->
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['ctr:incomeContract:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()"
v-hasPermi="['ctr:incomeContract:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
v-hasPermi="['ctr:incomeContract:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport"
v-hasPermi="['ctr:incomeContract:export']">导出</el-button>
</el-col>-->
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" :data="incomeContractList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="incomeContractList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="主键ID" align="center" prop="id" v-if="true" /> -->
<el-table-column type="index" width="50" label="序号" /> <el-table-column type="index" width="50" label="序号" />
<!-- <el-table-column label="项目ID" align="center" prop="projectId" /> -->
<el-table-column label="合同编号" align="center" prop="contractCode" /> <el-table-column label="合同编号" align="center" prop="contractCode" />
<el-table-column label="合同类型" align="center" prop="contractType"> <el-table-column label="合同类型" align="center" prop="contractType">
<template #default="scope"> <template #default="scope">
@ -68,7 +34,6 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="业主单位" align="center" prop="contractOwner" /> <el-table-column label="业主单位" align="center" prop="contractOwner" />
<!-- <el-table-column label="承包内容" align="center" prop="contractedContent" /> -->
<el-table-column label="合同金额" align="center" prop="amount" /> <el-table-column label="合同金额" align="center" prop="amount" />
<el-table-column label="预付款比例(%)" align="center" prop="advancePayRatio" /> <el-table-column label="预付款比例(%)" align="center" prop="advancePayRatio" />
<el-table-column label="尾款比例(%)" align="center" prop="balancePayRatio" /> <el-table-column label="尾款比例(%)" align="center" prop="balancePayRatio" />
@ -77,34 +42,24 @@
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
<template #default="scope"> <template #default="scope">
<!-- <el-tooltip content="修改" placement="top"> <el-button
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" link
v-hasPermi="['ctr:incomeContract:edit']"></el-button> type="primary"
</el-tooltip> v-hasPermi="['ctr:incomeContract:edit']"
<el-tooltip content="删除" placement="top"> icon="edit"
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" @click="handleEdit(scope.row)"
v-hasPermi="['ctr:incomeContract:remove']"></el-button> v-if="scope.row.isUpdate"
</el-tooltip> --> >修改合同</el-button
<!-- <el-tooltip content="查看承包内容" placement="top"> >
<el-button link type="primary" icon="View" @click="handleDetail(scope.row)">详情</el-button> <el-button link type="success" icon="View" @click="handleShowDetail(scope.row)">查看合同内容</el-button>
</el-tooltip> --> <el-button link type="primary" v-hasPermi="['ctr:incomeContract:query']" icon="View" @click="handleShowFileList(scope.row)"
<div> >查看附件列表</el-button
<el-button link type="primary" icon="edit" @click="handleEdit(scope.row)" >
v-if="scope.row.isUpdate">修改合同</el-button>
</div>
<div>
<el-button link type="success" icon="View" @click="handleShowDetail(scope.row)">查看合同内容</el-button>
</div>
<div>
<el-button link type="primary" icon="View" @click="handleShowFileList(scope.row)">查看附件列表</el-button>
</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改收入合同对话框 --> <!-- 添加或修改收入合同对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
@ -141,9 +96,7 @@
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="detailVisible = false"> <el-button type="primary" @click="detailVisible = false"> 关闭 </el-button>
关闭
</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -151,20 +104,26 @@
</template> </template>
<script setup name="IncomeContract" lang="ts"> <script setup name="IncomeContract" lang="ts">
import { listIncomeContract, getIncomeContract, delIncomeContract, addIncomeContract, updateIncomeContract, getFileList, getInfoByProjectId } from '@/api/ctr/incomeContract'; import {
listIncomeContract,
getIncomeContract,
delIncomeContract,
addIncomeContract,
updateIncomeContract,
getFileList,
getInfoByProjectId
} from '@/api/ctr/incomeContract';
import { IncomeContractVO, IncomeContractQuery, IncomeContractForm } from '@/api/ctr/incomeContract/types'; import { IncomeContractVO, IncomeContractQuery, IncomeContractForm } from '@/api/ctr/incomeContract/types';
import FileList from '@/components/FileList/index.vue'; import FileList from '@/components/FileList/index.vue';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router';
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const userStore = useUserStore(); const userStore = useUserStore();
const currentProject = computed(() => userStore.selectedProject); const currentProject = computed(() => userStore.selectedProject);
const router = useRouter(); const router = useRouter();
const { expenses_contract_type, income_contract_type } = toRefs( const { expenses_contract_type, income_contract_type } = toRefs(proxy?.useDict('income_contract_type', 'expenses_contract_type'));
proxy?.useDict('income_contract_type', 'expenses_contract_type')
);
const incomeContractList = ref<IncomeContractVO[]>([]); const incomeContractList = ref<IncomeContractVO[]>([]);
const buttonLoading = ref(false); const buttonLoading = ref(false);
const loading = ref(true); const loading = ref(true);
@ -191,8 +150,8 @@ const initFormData: IncomeContractForm = {
contractOwner: undefined, contractOwner: undefined,
contractedContent: undefined, contractedContent: undefined,
amount: undefined, amount: undefined,
remark: undefined, remark: undefined
} };
const data = reactive<PageData<IncomeContractForm, IncomeContractQuery>>({ const data = reactive<PageData<IncomeContractForm, IncomeContractQuery>>({
form: { ...initFormData }, form: { ...initFormData },
queryParams: { queryParams: {
@ -204,16 +163,11 @@ const data = reactive<PageData<IncomeContractForm, IncomeContractQuery>>({
contractOwner: undefined, contractOwner: undefined,
contractedContent: undefined, contractedContent: undefined,
amount: undefined, amount: undefined,
params: { params: {}
}
}, },
rules: { rules: {
id: [ id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
{ required: true, message: "主键ID不能为空", trigger: "blur" } projectId: [{ required: true, message: '项目ID不能为空', trigger: 'blur' }]
],
projectId: [
{ required: true, message: "项目ID不能为空", trigger: "blur" }
],
} }
}); });
@ -226,55 +180,55 @@ const getList = async () => {
incomeContractList.value = res.rows; incomeContractList.value = res.rows;
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
} };
/** 取消按钮 */ /** 取消按钮 */
const cancel = () => { const cancel = () => {
reset(); reset();
dialog.visible = false; dialog.visible = false;
} };
/** 表单重置 */ /** 表单重置 */
const reset = () => { const reset = () => {
form.value = { ...initFormData }; form.value = { ...initFormData };
incomeContractFormRef.value?.resetFields(); incomeContractFormRef.value?.resetFields();
} };
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
getList(); getList();
} };
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
handleQuery(); handleQuery();
} };
/** 多选框选中数据 */ /** 多选框选中数据 */
const handleSelectionChange = (selection: IncomeContractVO[]) => { const handleSelectionChange = (selection: IncomeContractVO[]) => {
ids.value = selection.map(item => item.id); ids.value = selection.map((item) => item.id);
single.value = selection.length != 1; single.value = selection.length != 1;
multiple.value = !selection.length; multiple.value = !selection.length;
} };
/** 新增按钮操作 */ /** 新增按钮操作 */
const handleAdd = () => { const handleAdd = () => {
reset(); reset();
dialog.visible = true; dialog.visible = true;
dialog.title = "添加收入合同"; dialog.title = '添加收入合同';
} };
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: IncomeContractVO) => { const handleUpdate = async (row?: IncomeContractVO) => {
reset(); reset();
const _id = row?.id || ids.value[0] const _id = row?.id || ids.value[0];
const res = await getIncomeContract(_id); const res = await getIncomeContract(_id);
Object.assign(form.value, res.data); Object.assign(form.value, res.data);
dialog.visible = true; dialog.visible = true;
dialog.title = "修改收入合同"; dialog.title = '修改收入合同';
} };
/** 提交按钮 */ /** 提交按钮 */
const submitForm = () => { const submitForm = () => {
@ -282,58 +236,63 @@ const submitForm = () => {
if (valid) { if (valid) {
buttonLoading.value = true; buttonLoading.value = true;
if (form.value.id) { if (form.value.id) {
await updateIncomeContract(form.value).finally(() => buttonLoading.value = false); await updateIncomeContract(form.value).finally(() => (buttonLoading.value = false));
} else { } else {
await addIncomeContract(form.value).finally(() => buttonLoading.value = false); await addIncomeContract(form.value).finally(() => (buttonLoading.value = false));
} }
proxy?.$modal.msgSuccess("操作成功"); proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false; dialog.visible = false;
await getList(); await getList();
} }
}); });
} };
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (row?: IncomeContractVO) => { const handleDelete = async (row?: IncomeContractVO) => {
const _ids = row?.id || ids.value; const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除收入合同编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); await proxy?.$modal.confirm('是否确认删除收入合同编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
await delIncomeContract(_ids); await delIncomeContract(_ids);
proxy?.$modal.msgSuccess("删除成功"); proxy?.$modal.msgSuccess('删除成功');
await getList(); await getList();
} };
/** 导出按钮操作 */ /** 导出按钮操作 */
const handleExport = () => { const handleExport = () => {
proxy?.download('ctr/incomeContract/export', { proxy?.download(
...queryParams.value 'ctr/incomeContract/export',
}, `incomeContract_${new Date().getTime()}.xlsx`) {
} ...queryParams.value
},
`incomeContract_${new Date().getTime()}.xlsx`
);
};
// 查看附件列表操作 // 查看附件列表操作
const handleShowFileList = async (row: IncomeContractVO) => { const handleShowFileList = async (row: IncomeContractVO) => {
console.log(row.id); console.log(row.id);
await getFileList({ contractId: row.id }).then(res => { await getFileList({ contractId: row.id })
fileList.value = res.rows .then((res) => {
fileListVisible.value = true; fileList.value = res.rows;
}).catch(() => { fileListVisible.value = true;
proxy?.$modal.error("获取文件列表失败"); })
}); .catch(() => {
proxy?.$modal.error('获取文件列表失败');
} });
};
const handleEdit = (row: IncomeContractVO) => { const handleEdit = (row: IncomeContractVO) => {
// console.log(router); // console.log(router);
router.push({ router.push({
path: "/ctr/update", path: '/ctr/update',
query: { query: {
id: row.id, id: row.id
} }
}) });
} };
const handleShowDetail = (data) => { const handleShowDetail = (data) => {
detailContent.value = data.contractedContent detailContent.value = data.contractedContent;
detailVisible.value = true; detailVisible.value = true;
} };
onMounted(() => { onMounted(() => {
getList(); getList();
}); });

View File

@ -155,8 +155,8 @@
</template> </template>
<script setup> <script setup>
import FileUpload from '@/components/FileUpload'; import FileUpload from '@/components/FileUpload';
import { listExpensesContract, getExpensesContract, delExpensesContract, addExpensesContract, updateExpensesContract, getTenderPlan } from '@/api/ctr/expensesContract'; import { addExpensesContract, getTenderPlan } from '@/api/ctr/expensesContract';
import { listIncomeContract, getIncomeContract, delIncomeContract, addIncomeContract, updateIncomeContract, getInfoByProjectId } from '@/api/ctr/incomeContract'; import { addIncomeContract, getInfoByProjectId } from '@/api/ctr/incomeContract';
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
const active = ref(0); const active = ref(0);

View File

@ -1,328 +1,226 @@
<template> <template>
<div class="container"> <div class="container">
<el-steps style="max-width: 100%" :active="active" finish-status="success" align-center> <el-steps style="max-width: 100%" :active="active" finish-status="success" align-center>
<el-step title="选择合同类型" /> <el-step title="选择合同类型" />
<el-step title="修改合同内容" /> <el-step title="修改合同内容" />
<el-step title="修改收款方式" /> <el-step title="修改收款方式" />
</el-steps> </el-steps>
<div class="content"> <div class="content">
<template v-if="active == 1"> <template v-if="active == 1">
<h1>修改收入合同</h1> <h1>修改收入合同</h1>
<el-form ref="incomeContractFormRef" :model="form" :rules="incomeContractFormRules" label-width="80px"> <el-form ref="incomeContractFormRef" :model="form" :rules="incomeContractFormRules" label-width="80px">
<!-- <el-form-item label="项目名称"> <el-form-item label="合同编号" prop="contractCode">
<el-input :model-value="project.name" disabled /> <el-input v-model="form.contractCode" placeholder="请输入合同编号" />
</el-form-item> --> </el-form-item>
<el-form-item label="合同编号" prop="contractCode"> <el-form-item label="合同类型" prop="contractType">
<el-input v-model="form.contractCode" placeholder="请输入合同编号" /> <el-select v-model="form.contractType" placeholder="请选择合同类型">
</el-form-item> <el-option v-for="item in income_contract_type" :key="item.value" :label="item.label" :value="item.value" />
<el-form-item label="合同类型" prop="contractType"> </el-select>
<el-select v-model="form.contractType" placeholder="请选择合同类型"> </el-form-item>
<el-option v-for="item in income_contract_type" :key="item.value" :label="item.label" <el-form-item label="业主单位" prop="contractOwner">
:value="item.value" /> <el-input v-model="form.contractOwner" placeholder="请输入业主单位" disabled />
</el-select> </el-form-item>
</el-form-item> <el-form-item label="承包内容" v-if="contract_type !== 'income'">
<el-form-item label="业主单位" prop="contractOwner"> <editor v-model="form.contractedContent" :min-height="192" />
<el-input v-model="form.contractOwner" placeholder="请输入业主单位" disabled /> </el-form-item>
</el-form-item> <el-form-item label="合同内容" v-else>
<el-form-item label="承包内容" v-if="contract_type !== 'income'"> <editor v-model="form.contractedContent" :min-height="192" />
<editor v-model="form.contractedContent" :min-height="192" /> </el-form-item>
</el-form-item> <el-form-item label="合同金额" prop="amount">
<el-form-item label="合同内容" v-else> <el-input
<editor v-model="form.contractedContent" :min-height="192" /> v-model="form.amount"
</el-form-item> placeholder="请输入合同金额"
<el-form-item label="合同金额" prop="amount"> oninput="value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
<el-input v-model="form.amount" placeholder="请输入合同金额" />
oninput="value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')" /> </el-form-item>
</el-form-item> <el-form-item label="备注" prop="remark">
<el-form-item label="备注" prop="remark"> <el-input v-model="form.remark" placeholder="请输入备注" />
<el-input v-model="form.remark" placeholder="请输入备注" /> </el-form-item>
</el-form-item> <el-form-item label="附件">
<el-form-item label="附件"> <FileUpload :multiple="true" :fileType="['pdf']" :onUploadSuccess="onUploadSuccess" :ref="fileRef" :defaultFileList="tempFileList" />
<FileUpload :multiple="true" :fileType="['pdf']" :onUploadSuccess="onUploadSuccess" </el-form-item>
:ref="fileRef" :defaultFileList="tempFileList" /> </el-form>
</el-form-item> <div>
</el-form> <el-button type="primary" @click="next">下一步</el-button>
<div>
<el-button type="primary" @click="next">下一步</el-button>
</div>
</template>
<template v-else-if="active == 2">
<h1>修改收入合同</h1>
<el-form :model="form" :rules="payMentRules" label-width="150" ref="payMentRef">
<el-form-item label="支付方式" placeholder="请选择支付方式" prop="payType">
<el-select v-model="form.payType">
<el-option :value="1" label="月结算">月结算</el-option>
<el-option :value="2" label="形象节点">形象节点</el-option>
</el-select>
</el-form-item>
<el-form-item label="预付款比例(%" prop="advancePayRatio">
<el-input-number v-model="form.advancePayRatio" :max="100" :min="0" />
</el-form-item>
<el-form-item label="尾款比例(%" prop="balancePayRatio">
<el-input-number v-model="form.balancePayRatio" :max="100" :min="0" />
</el-form-item>
<el-form-item label="质保金比例(%" prop="assuranceDepositRatio">
<el-input-number v-model="form.assuranceDepositRatio" :max="100" :min="0" />
</el-form-item>
<el-form-item label="付款比例(%" prop="payRatio">
<el-input-number v-model="payRatioComputed" disabled />
</el-form-item>
<el-form-item>
<div>
<el-button @click="back(false)">上一步</el-button>
<el-button type="success" @click="submitForm">提交</el-button>
</div>
</el-form-item>
</el-form>
</template>
</div> </div>
</template>
<template v-else-if="active == 2">
<h1>修改收入合同</h1>
<el-form :model="form" :rules="payMentRules" label-width="150" ref="payMentRef">
<el-form-item label="支付方式" placeholder="请选择支付方式" prop="payType">
<el-select v-model="form.payType">
<el-option :value="1" label="月结算">月结算</el-option>
<el-option :value="2" label="形象节点">形象节点</el-option>
</el-select>
</el-form-item>
<el-form-item label="预付款比例(%" prop="advancePayRatio">
<el-input-number v-model="form.advancePayRatio" :max="100" :min="0" />
</el-form-item>
<el-form-item label="尾款比例(%" prop="balancePayRatio">
<el-input-number v-model="form.balancePayRatio" :max="100" :min="0" />
</el-form-item>
<el-form-item label="质保金比例(%" prop="assuranceDepositRatio">
<el-input-number v-model="form.assuranceDepositRatio" :max="100" :min="0" />
</el-form-item>
<el-form-item label="付款比例(%" prop="payRatio">
<el-input-number v-model="payRatioComputed" disabled />
</el-form-item>
<el-form-item>
<div>
<el-button @click="back(false)">上一步</el-button>
<el-button type="success" @click="submitForm">提交</el-button>
</div>
</el-form-item>
</el-form>
</template>
</div> </div>
</div>
</template> </template>
<script setup> <script setup>
import FileUpload from '@/components/FileUpload'; import FileUpload from '@/components/FileUpload';
import { listExpensesContract, getExpensesContract, delExpensesContract, addExpensesContract, updateExpensesContract, getTenderPlan } from '@/api/ctr/expensesContract'; import { getTenderPlan } from '@/api/ctr/expensesContract';
import { listIncomeContract, getIncomeContract, delIncomeContract, addIncomeContract, updateIncomeContract } from '@/api/ctr/incomeContract'; import { updateIncomeContract } from '@/api/ctr/incomeContract';
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
const active = ref(1); const active = ref(1);
const contract_type = ref("income") const contract_type = ref('income');
const form = ref({ payType: 1 }) const form = ref({ payType: 1 });
const fileList = ref([]) const fileList = ref([]);
const tempFileList = ref([]) const tempFileList = ref([]);
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const userStore = useUserStore(); const userStore = useUserStore();
const planList = ref([]); const planList = ref([]);
const dialogVisible = ref(false); const dialogVisible = ref(false);
const route = useRoute(); const { income_contract_type } = toRefs(proxy?.useDict('income_contract_type', 'expenses_contract_type'));
const router = useRouter();
const { expenses_contract_type, income_contract_type } = toRefs(
proxy?.useDict('income_contract_type', 'expenses_contract_type')
);
const fileRef = ref(null); const fileRef = ref(null);
const incomeContractFormRef = ref(null); const incomeContractFormRef = ref(null);
const expensesContractFormRef = ref(null); const expensesContractFormRef = ref(null);
const payMentRef = ref(null); const payMentRef = ref(null);
const incomeContractFormRules = { const incomeContractFormRules = {
contractCode: [{ required: true, message: '请输入合同编号', trigger: 'blur' }], contractCode: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
contractType: [{ required: true, message: '请选择合同类型', trigger: 'change' }], contractType: [{ required: true, message: '请选择合同类型', trigger: 'change' }],
contractOwner: [{ required: true, message: '请输入业主单位', trigger: 'blur' }], contractOwner: [{ required: true, message: '请输入业主单位', trigger: 'blur' }],
amount: [{ required: true, message: '请输入合同金额', trigger: 'blur' }], amount: [{ required: true, message: '请输入合同金额', trigger: 'blur' }],
remark: [{ required: false, message: '请输入备注', trigger: 'blur' }], remark: [{ required: false, message: '请输入备注', trigger: 'blur' }]
}; };
const expensesContractFormRules = { const expensesContractFormRules = {
contractCode: [{ required: true, message: '请输入合同编号', trigger: 'blur' }], contractCode: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
contractType: [{ required: true, message: '请选择合同类型', trigger: 'change' }], contractType: [{ required: true, message: '请选择合同类型', trigger: 'change' }],
contractSupplier: [{ required: true, message: '请输入供应商', trigger: 'blur' }], contractSupplier: [{ required: true, message: '请输入供应商', trigger: 'blur' }],
amount: [{ required: true, message: '请输入合同金额', trigger: 'blur' }], amount: [{ required: true, message: '请输入合同金额', trigger: 'blur' }],
tenderId: [{ required: true, message: '请选择招标计划', trigger: 'blur' }], tenderId: [{ required: true, message: '请选择招标计划', trigger: 'blur' }],
remark: [{ required: false, message: '请输入备注', trigger: 'blur' }], remark: [{ required: false, message: '请输入备注', trigger: 'blur' }]
}; };
const payMentRules = { const payMentRules = {
payType: [{ required: true, message: '请选择支付方式', trigger: 'change' }], payType: [{ required: true, message: '请选择支付方式', trigger: 'change' }],
advancePayRatio: [{ required: true, message: '请输入预付款比例', trigger: 'blur' }], advancePayRatio: [{ required: true, message: '请输入预付款比例', trigger: 'blur' }],
balancePayRatio: [{ required: true, message: '请输入尾款比例', trigger: 'blur' }], balancePayRatio: [{ required: true, message: '请输入尾款比例', trigger: 'blur' }],
assuranceDepositRatio: [{ required: true, message: '请输入质保金比例', trigger: 'blur' }], assuranceDepositRatio: [{ required: true, message: '请输入质保金比例', trigger: 'blur' }]
}; };
const project = computed(() => { const project = computed(() => {
return JSON.parse(localStorage.getItem("selectedProject")) return JSON.parse(localStorage.getItem('selectedProject'));
}); });
const payRatioComputed = computed({ const payRatioComputed = computed({
get: () => { get: () => {
const { advancePayRatio = 0, balancePayRatio = 0, assuranceDepositRatio = 0 } = form.value; const { advancePayRatio = 0, balancePayRatio = 0, assuranceDepositRatio = 0 } = form.value;
const total = 100 - (advancePayRatio + balancePayRatio + assuranceDepositRatio); const total = 100 - (advancePayRatio + balancePayRatio + assuranceDepositRatio);
// form.value.payRatio = total; // form.value.payRatio = total;
return total; return total;
}, },
// 只读 // 只读
set: () => { } set: () => {}
}); });
const onUploadSuccess = (data) => { const onUploadSuccess = (data) => {
fileList.value = data fileList.value = data;
} };
const next = async () => { const next = async () => {
if (contract_type.value === 'income') { if (contract_type.value === 'income') {
await incomeContractFormRef.value.validate((valid) => { await incomeContractFormRef.value.validate((valid) => {
if (valid) { if (valid) {
active.value++; active.value++;
} else { } else {
ElMessage.error('请填写完整的收入合同信息'); ElMessage.error('请填写完整的收入合同信息');
} }
}); });
} else if (contract_type.value === 'expenses') { } else if (contract_type.value === 'expenses') {
await expensesContractFormRef.value.validate((valid) => { await expensesContractFormRef.value.validate((valid) => {
if (valid) { if (valid) {
active.value++; active.value++;
} else { } else {
ElMessage.error('请填写完整的支出合同信息'); ElMessage.error('请填写完整的支出合同信息');
} }
}); });
} }
console.log(active.value); console.log(active.value);
form.value.step = active.value; form.value.step = active.value;
}; };
const submitForm = async () => { const submitForm = async () => {
await payMentRef.value.validate(async (valid) => { await payMentRef.value.validate(async (valid) => {
if (valid) { if (valid) {
if (payRatioComputed.value < 0) {
ElMessage.error('四项付款比例之和必须等于100%');
return;
}
form.value.payRatio = payRatioComputed.value;
if (payRatioComputed.value < 0) { // 提交付款信息逻辑
console.log('提交付款信息', form.value, fileList.value);
ElMessage.error('四项付款比例之和必须等于100%'); // 这里可以调用API提交数据
return; form.value.projectId = project.value.id;
} form.value.fileList = fileList.value.map((data) => {
form.value.payRatio = payRatioComputed.value; return {
...data,
// 提交付款信息逻辑 fileName: data.name,
console.log('提交付款信息', form.value, fileList.value); fileUrl: data.url
// 这里可以调用API提交数据 };
form.value.projectId = project.value.id; });
form.value.fileList = fileList.value.map((data) => { if (contract_type.value === 'income') {
return { await updateIncomeContract({ ...form.value });
...data, }
fileName: data.name, ElMessage.success('合同修改成功');
fileUrl: data.url, } else {
} ElMessage.error('请填写完整的付款信息');
}) }
if (contract_type.value === 'income') { });
await updateIncomeContract({ ...form.value }); };
}
ElMessage.success('合同修改成功');
} else {
ElMessage.error('请填写完整的付款信息');
}
});
}
const handleChoose = async () => { const handleChoose = async () => {
if (!form.value.contractType) { if (!form.value.contractType) {
ElMessage.error('请先选择合同类型'); ElMessage.error('请先选择合同类型');
return; return;
} }
const formData = { const formData = {
projectId: userStore.selectedProject.id, projectId: userStore.selectedProject.id,
dictName: form.value.contractType, dictName: form.value.contractType,
status: 1, status: 1
} };
const { data } = await getTenderPlan(formData) const { data } = await getTenderPlan(formData);
if (data.length === 0) { if (data.length === 0) {
ElMessage.warning('当前没有招标计划,请先创建招标计划'); ElMessage.warning('当前没有招标计划,请先创建招标计划');
return; return;
} }
planList.value = data planList.value = data;
dialogVisible.value = true; dialogVisible.value = true;
};
} onMounted(async () => {});
onMounted(async () => {
// const id = route.query.id;
// if (id) {
// const { data } = await getIncomeContract(id);
// form.value.id = data.id;
// form.value.contractOwner = data.contractOwner
// } else {
// router.push('/ctr/incomeContract');
// }
proxy?.download(
'/progress/progressCategory/export',
{
"ids": [
"1951552037761114114",
"1951552037811445761",
"1951552037811445762",
"1951552037811445763",
"1951552037811445764",
"1951552037811445765",
"1951552037811445766",
"1951552037811445767",
"1951552037865971713",
"1951552037865971714",
"1951552037865971715",
"1951552037865971716",
"1951552037865971717",
"1951552037865971718",
"1951552037865971719",
"1951552037865971720",
"1951552037865971721",
"1951552037865971722",
"1951552037865971723",
"1951552037865971724",
"1951552037865971725",
"1951552037924691969",
"1951552037924691970",
"1951552037924691971",
"1951552037924691972",
"1951552037924691973",
"1951552037924691974",
"1951552037924691975",
"1951552037924691976",
"1951552037924691977",
"1951552037962440706",
"1951552037962440707",
"1951552037962440708",
"1951552037962440709",
"1951552037962440710",
"1951552037962440711",
"1951552037962440712",
"1951552038004383745",
"1951552038004383746",
"1951552038004383747",
"1951552038004383748",
"1951552038004383749",
"1951552038004383750",
"1951552038004383751",
"1951552038004383752",
"1951552038004383753",
"1951552038004383754",
"1951552038058909698",
"1951552038058909699",
"1951552038058909700",
"1951552038058909701",
"1951552038058909702",
"1951552038058909703",
"1951552038058909704",
"1951552038096658434",
"1951552038096658435",
"1951552038096658436",
"1951552038096658437",
"1951552038096658438",
"1951552038096658439",
"1951552038096658440",
"1951552038096658441",
"1951552038096658442",
"1951552038096658443",
"1951552038096658444",
"1951552038146990081",
"1951552038146990082",
"1951552038146990083",
"1951552038146990084",
"1951552038146990085",
"1951552038188933122",
"1951552038188933123",
"1951552038188933124"
]
},
`1.xlsx`
);
})
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.container { .container {
padding: 20px; padding: 20px;
.content { .content {
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 30px; padding: 30px;
flex-direction: column; flex-direction: column;
} }
} }
</style> </style>

View File

@ -19,7 +19,7 @@
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button> <el-button type="primary" plain icon="Plus" v-hasPermi="['design:extract:add']" @click="handleAdd">新增</el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>

View File

@ -6,7 +6,7 @@
<el-col :span="1.5"> <el-col :span="1.5">
<div class="box_btn"> <div class="box_btn">
<file-upload :limit="1" :uploadUrl="uploadUrl" :params="uploadParams" :on-upload-success="uploadFile" :fileType="[]"> <file-upload :limit="1" :uploadUrl="uploadUrl" :params="uploadParams" :on-upload-success="uploadFile" :fileType="[]">
<el-button type="primary" style="float: left"> <el-button type="primary" style="float: left" v-hasPermi="['design:collectFile:add']">
<el-icon size="small"><Upload /></el-icon>上传文件 <el-icon size="small"><Upload /></el-icon>上传文件
</el-button> </el-button>
</file-upload> </file-upload>

View File

@ -14,7 +14,7 @@
<el-input v-model="queryParams.volumeNo" placeholder="请输入卷册号" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.volumeNo" placeholder="请输入卷册号" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery" v-hasPermi="['design:designChange:list']">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -93,7 +93,7 @@
type="warning" type="warning"
link link
icon="View" icon="View"
v-hasPermi="['design:designChange:query']" v-hasPermi="['design:drawingreviewReceipts:list']"
v-if="scope.row.status != 'draft'" v-if="scope.row.status != 'draft'"
@click="handleViewHistory(scope.row)" @click="handleViewHistory(scope.row)"
>查看单据</el-button >查看单据</el-button

View File

@ -3,19 +3,30 @@
<div class="max-w-4xl mx-auto"> <div class="max-w-4xl mx-auto">
<!-- 顶部按钮区域 --> <!-- 顶部按钮区域 -->
<el-card class="mb-4 rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md"> <el-card class="mb-4 rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md">
<approvalButton @submitForm="submitForm" @approvalVerifyOpen="approvalVerifyOpen" <approvalButton
@handleApprovalRecord="handleApprovalRecord" :buttonLoading="buttonLoading" :id="form.id" @submitForm="submitForm"
:status="form.status" :pageType="routeParams.type" /> @approvalVerifyOpen="approvalVerifyOpen"
@handleApprovalRecord="handleApprovalRecord"
:buttonLoading="buttonLoading"
:id="form.id"
:status="form.status"
:pageType="routeParams.type"
/>
</el-card> </el-card>
<!-- 表单区域 --> <!-- 表单区域 -->
<el-card <el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden">
class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden">
<div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100"> <div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100">
<h3 class="text-lg font-semibold text-gray-800">变更图纸信息</h3> <h3 class="text-lg font-semibold text-gray-800">变更图纸信息</h3>
</div> </div>
<div class="p-6"> <div class="p-6">
<el-form ref="leaveFormRef" :disabled="routeParams.type === 'view' || form.status == 'waiting'" :model="form" <el-form
:rules="rules" label-width="100px" class="space-y-4"> ref="leaveFormRef"
:disabled="routeParams.type === 'view' || form.status == 'waiting'"
:model="form"
:rules="rules"
label-width="100px"
class="space-y-4"
>
<div class="grid grid-cols-1 gap-4"> <div class="grid grid-cols-1 gap-4">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
@ -25,14 +36,32 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="工程名称" prop="projectName"> <el-form-item label="工程名称" prop="projectName">
<el-input v-model="form.projectName" placeholder="请输入工程名称" /> </el-form-item></el-col> <el-input v-model="form.projectName" placeholder="请输入工程名称" /> </el-form-item
></el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="原卷册号" prop="volumeNo"> <el-form-item label="原卷册号" prop="volumeNo">
<el-select id="projectSelect" v-model="form.volumeNo" placeholder="请选择原卷册号" clearable filterable <el-select
@change="handleSelect" style="width: 150px; margin-right: 20px"> id="projectSelect"
<el-option v-for="project in volumeCatalogList" :key="project.volumeNumber" v-model="form.volumeNo"
:label="project.volumeNumber" :value="project.volumeNumber" /> placeholder="请选择原卷册号"
</el-select> </el-form-item></el-col> clearable
filterable
@change="handleSelect"
style="width: 150px; margin-right: 20px"
>
<el-option
v-for="project in volumeCatalogList"
:key="project.volumeNumber"
:label="project.volumeNumber"
:value="project.volumeNumber"
/>
</el-select>
<el-tooltip class="box-item" effect="dark" content="只有通过审核的蓝图才能选择" placement="top-start">
<el-icon size="22" class="no-inherit">
<QuestionFilled />
</el-icon>
</el-tooltip> </el-form-item
></el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="提出单位" prop="submitUnit"> <el-form-item label="提出单位" prop="submitUnit">
<el-input v-model="form.submitUnit" placeholder="请输入提出单位" /> <el-input v-model="form.submitUnit" placeholder="请输入提出单位" />
@ -45,16 +74,16 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="提出日期" prop="submitDate"> <el-form-item label="提出日期" prop="submitDate">
<el-date-picker clearable v-model="form.submitDate" type="date" value-format="YYYY-MM-DD HH:mm:ss" <el-date-picker clearable v-model="form.submitDate" type="date" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择提出日期">
placeholder="请选择提出日期"> </el-date-picker> </el-form-item
</el-date-picker> </el-form-item></el-col> ></el-col>
<!-- <el-col :span="12"> <!-- <el-col :span="12">
<el-form-item label="卷册名称" prop="volumeName"> <el-input v-model="form.volumeName" placeholder="请输入卷册名称" /> </el-form-item <el-form-item label="卷册名称" prop="volumeName"> <el-input v-model="form.volumeName" placeholder="请输入卷册名称" /> </el-form-item
></el-col> --> ></el-col> -->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="子项名称" prop="subName"> <el-form-item label="子项名称" prop="subName">
<el-input disabled v-model="form.extendDetail.subName" placeholder="请输入子项名称" /> <el-input disabled v-model="form.extendDetail.subName" placeholder="请输入子项名称" /> </el-form-item
</el-form-item></el-col> ></el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="原设计处置" prop="designDisposal"> <el-form-item label="原设计处置" prop="designDisposal">
<el-radio-group v-model="form.extendDetail.designDisposal" @change="handleRadio"> <el-radio-group v-model="form.extendDetail.designDisposal" @change="handleRadio">
@ -62,7 +91,8 @@
<el-radio value="2" :disabled="!designId" size="large">原图保留部分修改</el-radio> <el-radio value="2" :disabled="!designId" size="large">原图保留部分修改</el-radio>
<el-radio value="3" size="large">原图保留补充设计</el-radio> <el-radio value="3" size="large">原图保留补充设计</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item></el-col> </el-form-item></el-col
>
<el-col :span="24" v-if="form.extendDetail.designDisposal == 2"> <el-col :span="24" v-if="form.extendDetail.designDisposal == 2">
<el-form-item label="保留文件" prop="saveFile"> <el-form-item label="保留文件" prop="saveFile">
<el-checkbox-group v-model="form.saveFile"> <el-checkbox-group v-model="form.saveFile">
@ -70,17 +100,20 @@
{{ dict.fileName }} {{ dict.fileName }}
</el-checkbox> </el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</el-form-item></el-col> </el-form-item></el-col
>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="设计阶段" prop="designPhase"> <el-form-item label="设计阶段" prop="designPhase">
<el-input v-model="form.extendDetail.designPhase" placeholder="请输入设计阶段" /> </el-form-item></el-col> <el-input v-model="form.extendDetail.designPhase" placeholder="请输入设计阶段" /> </el-form-item
></el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="变更类别" prop="changeCategory"> <el-form-item label="变更类别" prop="changeCategory">
<el-radio-group v-model="form.extendDetail.changeCategory"> <el-radio-group v-model="form.extendDetail.changeCategory">
<el-radio value="1" size="large">重大设计变更</el-radio> <el-radio value="1" size="large">重大设计变更</el-radio>
<el-radio value="2" size="large">一般设计变更</el-radio> <el-radio value="2" size="large">一般设计变更</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item></el-col> </el-form-item></el-col
>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="实施程序" prop="ImpProcedure"> <el-form-item label="实施程序" prop="ImpProcedure">
<el-radio-group v-model="form.extendDetail.ImpProcedure"> <el-radio-group v-model="form.extendDetail.ImpProcedure">
@ -88,14 +121,15 @@
<el-radio value="2" size="large">建设单位送原施工图审查机构审查建设主管部分备案后交付实施</el-radio> <el-radio value="2" size="large">建设单位送原施工图审查机构审查建设主管部分备案后交付实施</el-radio>
<el-radio value="3" size="large">建设单位确认后交付实施</el-radio> <el-radio value="3" size="large">建设单位确认后交付实施</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item></el-col> </el-form-item></el-col
>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="更改相关专业" prop="involvingProfessions"> <el-form-item label="更改相关专业" prop="involvingProfessions">
<el-input v-model="form.extendDetail.involvingProfessions" placeholder="请输入更改相关专业" /> <el-input v-model="form.extendDetail.involvingProfessions" placeholder="请输入更改相关专业" /> </el-form-item
</el-form-item></el-col> ></el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附图" prop="attachmentPic"> <image-upload v-model="form.attachmentPic" <el-form-item label="附图" prop="attachmentPic"> <image-upload v-model="form.attachmentPic" :fileSize="100" /> </el-form-item
:fileSize="100" /> </el-form-item></el-col> ></el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="变更原因" prop="changeReason"> <el-form-item label="变更原因" prop="changeReason">
<el-checkbox-group v-model="form.changeReason"> <el-checkbox-group v-model="form.changeReason">
@ -103,23 +137,27 @@
{{ dict.label }} {{ dict.label }}
</el-checkbox> </el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</el-form-item></el-col> </el-form-item></el-col
>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="变更内容" prop="changeContent"> <el-form-item label="变更内容" prop="changeContent">
<el-input v-model="form.changeContent" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.changeContent" type="textarea" placeholder="请输入内容" /> </el-form-item
</el-form-item></el-col> ></el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="费用" prop="costEstimation"> <el-form-item label="费用" prop="costEstimation">
<el-input v-model="form.costEstimation" type="number" placeholder="请输入费用" /> <el-input v-model="form.costEstimation" type="number" placeholder="请输入费用" /> </el-form-item
</el-form-item></el-col> ></el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="变更费用估算表" label-width="110px" prop="costEstimationFile"> <el-form-item label="变更费用估算表" label-width="110px" prop="costEstimationFile">
<file-upload v-model="form.costEstimationFile" :fileSize="100" /> </el-form-item></el-col> <file-upload v-model="form.costEstimationFile" :fileSize="100" /> </el-form-item
></el-col>
<!-- <el-col :span="24"> <!-- <el-col :span="24">
<el-form-item label="变更文件" prop="fileId"> <file-upload v-model="form.fileId" :fileSize="100" /> </el-form-item <el-form-item label="变更文件" prop="fileId"> <file-upload v-model="form.fileId" :fileSize="100" /> </el-form-item
></el-col> --> ></el-col> -->
<el-col :span="24"><el-form-item label="备注" prop="remark"> <el-col :span="24"
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> </el-form-item></el-col> ><el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> </el-form-item
></el-col>
</el-row> </el-row>
</div> </div>
</el-form> </el-form>
@ -129,8 +167,14 @@
<submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" /> <submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" />
<approvalRecord ref="approvalRecordRef"></approvalRecord> <approvalRecord ref="approvalRecordRef"></approvalRecord>
<!-- 流程选择对话框 --> <!-- 流程选择对话框 -->
<el-dialog draggable v-model="dialogVisible.visible" :title="dialogVisible.title" :before-close="handleClose" <el-dialog
width="500" class="rounded-lg shadow-lg"> draggable
v-model="dialogVisible.visible"
:title="dialogVisible.title"
:before-close="handleClose"
width="500"
class="rounded-lg shadow-lg"
>
<div class="p-4"> <div class="p-4">
<p class="text-gray-600 mb-4">请选择要启动的流程</p> <p class="text-gray-600 mb-4">请选择要启动的流程</p>
<el-select v-model="flowCode" placeholder="请选择流程" style="width: 100%"> <el-select v-model="flowCode" placeholder="请选择流程" style="width: 100%">
@ -139,10 +183,12 @@
</div> </div>
<template #footer> <template #footer>
<div class="dialog-footer p-4 border-t border-gray-100 flex justify-end space-x-3"> <div class="dialog-footer p-4 border-t border-gray-100 flex justify-end space-x-3">
<el-button @click="handleClose" <el-button @click="handleClose" class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 transition-colors"
class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 transition-colors">取消</el-button> >取消</el-button
<el-button type="primary" @click="submitFlow()" >
class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors">确认</el-button> <el-button type="primary" @click="submitFlow()" class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors"
>确认</el-button
>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>

View File

@ -24,8 +24,8 @@
<el-input v-model="queryParams.documentName" placeholder="请输入资料名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.documentName" placeholder="请输入资料名称" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery" v-hasPermi="['design:volumeCatalog:query']">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery" v-hasPermi="['design:volumeCatalog:query']">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
@ -47,6 +47,7 @@
target="_blank" target="_blank"
type="primary" type="primary"
:underline="false" :underline="false"
v-hasPermi="['design:volumeFileViewer:add']"
@click="handleBookFile(scope.row)" @click="handleBookFile(scope.row)"
> >
{{ scope.row.fileName }} {{ scope.row.fileName }}
@ -55,8 +56,10 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" prop="remark" width="300"> <el-table-column label="操作" align="center" prop="remark" width="300">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="view" @click="handleViewHis(scope.row)">查阅记录</el-button> <el-button link type="primary" icon="view" v-hasPermi="['design:drawing:list']" @click="handleViewHis(scope.row)">查阅记录</el-button>
<el-button type="warning" link icon="Download" @click="handleDownload(scope.row)"> 下载 </el-button> <el-button type="warning" link icon="Download" v-hasPermi="['design:volumeFileViewer:add']" @click="handleDownload(scope.row)">
下载
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -8,7 +8,7 @@
<el-input v-model="queryParams.fileName" placeholder="请输入文件名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.fileName" placeholder="请输入文件名称" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" v-hasPermi="['design:scheme:add']" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" v-hasPermi="['design:scheme:list']" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -42,15 +42,7 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button <el-button link type="primary" v-if="scope.row.status !== 'draft'" icon="Edit" @click="handleView(scope.row)">查看流程</el-button>
link
type="primary"
v-if="scope.row.status !== 'draft'"
icon="Edit"
@click="handleView(scope.row)"
v-hasPermi="['design:PrelimScheme:query']"
>查看流程</el-button
>
<el-button <el-button
link link
type="primary" type="primary"

View File

@ -8,7 +8,7 @@
<el-input v-model="queryParams.subContent" placeholder="请输入分包内容" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.subContent" placeholder="请输入分包内容" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery" v-hasPermi="['design:subcontract:add']">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery" v-hasPermi="['design:subcontract:list']">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>

View File

@ -99,7 +99,7 @@ const dialogVisible = reactive<DialogOption>({
const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>(); const submitVerifyRef = ref<InstanceType<typeof SubmitVerify>>();
//审批记录组件 //审批记录组件
const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>(); const approvalRecordRef = ref<InstanceType<typeof ApprovalRecord>>();
//按钮组件 //按钮组件 approvalReadonly =ref(false);
const flowCodeOptions = [ const flowCodeOptions = [
{ {
value: currentProject.value?.id + '_bpDesignFile', value: currentProject.value?.id + '_bpDesignFile',

View File

@ -39,7 +39,7 @@
:file-size="50" :file-size="50"
:onUploadSuccess="handleUploadSuccess" :onUploadSuccess="handleUploadSuccess"
> >
<el-button type="warning" plain icon="Upload">导入</el-button> <el-button v-hasPermi="['design:volumeCatalog:importData']" type="warning" plain icon="Upload">导入</el-button>
</file-upload> </file-upload>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
@ -63,7 +63,9 @@
<el-table-column label="计划出图时间" align="center" prop="plannedCompletion" width="200" /> <el-table-column label="计划出图时间" align="center" prop="plannedCompletion" width="200" />
<el-table-column label="图纸文件" align="center" prop="remark" width="150"> <el-table-column label="图纸文件" align="center" prop="remark" width="150">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="View" @click="handleView(scope.row)" v-hasPermi="['design:volumeFile:query']">查看文件</el-button> <el-button link type="primary" icon="View" @click="handleView(scope.row)" v-hasPermi="['design:volumeCatalog:listFile']"
>查看文件</el-button
>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="外部意见" align="center"> <el-table-column label="外部意见" align="center">
@ -85,7 +87,9 @@
v-hasPermi="['design:volumeFile:add']" v-hasPermi="['design:volumeFile:add']"
>上传图纸</el-button >上传图纸</el-button
> >
<el-button link type="primary" icon="Upload" @click="handleOpinion(scope.row)">外部意见</el-button> <el-button link type="primary" v-hasPermi="['design:volumeFile:edit']" icon="Upload" @click="handleOpinion(scope.row)"
>外部意见</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -38,16 +38,11 @@
@click="submitForm" @click="submitForm"
icon="Check" icon="Check"
class="px-8 py-2.5 transition-all duration-300 transform hover:scale-105 bg-blue-500 hover:bg-blue-600 text-white font-medium" class="px-8 py-2.5 transition-all duration-300 transform hover:scale-105 bg-blue-500 hover:bg-blue-600 text-white font-medium"
v-hasPermi="['ailiaoshebei:purchaseUser:byProject']" v-hasPermi="['cailiaoshebei:purchaseUser:add']"
> >
确认提交 确认提交
</el-button> </el-button>
<el-button <el-button @click="resetForm" icon="Refresh" class="px-8 py-2.5 transition-all duration-300 border-gray-300 hover:bg-gray-100 font-medium">
@click="resetForm"
v-hasPermi="['ailiaoshebei:purchaseUser:byProject']"
icon="Refresh"
class="px-8 py-2.5 transition-all duration-300 border-gray-300 hover:bg-gray-100 font-medium"
>
重置 重置
</el-button> </el-button>
</div> </div>

View File

@ -26,8 +26,8 @@
<el-input v-model="queryParams.storageUnit" placeholder="请输入保管单位" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.storageUnit" placeholder="请输入保管单位" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" v-hasPermi="['materials:materialIssue:list']" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" v-hasPermi="['materials:materialIssue:list']" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -39,16 +39,11 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['materials:materialIssue:add']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['materials:materialIssue:add']">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['materials:materialIssue:remove']"
>删除</el-button
>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" :data="materialIssueList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="materialIssueList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="index" width="60" label="序号" align="center" />
<el-table-column label="表单编号" align="center" prop="formCode" /> <el-table-column label="表单编号" align="center" prop="formCode" />
<el-table-column label="工程名称" align="center" prop="projectName" /> <el-table-column label="工程名称" align="center" prop="projectName" />
<el-table-column label="设备材料名称" align="center" prop="materialName" /> <el-table-column label="设备材料名称" align="center" prop="materialName" />
@ -58,23 +53,13 @@
<el-table-column label="保管单位" align="center" prop="storageUnit" /> <el-table-column label="保管单位" align="center" prop="storageUnit" />
<el-table-column label="缺陷情况" align="center" prop="defectDescription" /> <el-table-column label="缺陷情况" align="center" prop="defectDescription" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" min-width="150" fixed="right">
<template #default="scope"> <template #default="scope">
<el-tooltip content="查看" placement="top"> <el-button link type="primary" icon="View" @click="handleView(scope.row)" v-hasPermi="['materials:materialIssue:query']">查看</el-button>
<el-button link type="primary" icon="View" @click="handleView(scope.row)" v-hasPermi="['materials:materialIssue:query']"></el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['materials:materialIssue:edit']">修改</el-button>
</el-tooltip> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['materials:materialIssue:remove']"
<el-tooltip content="修改" placement="top"> >删除</el-button
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['materials:materialIssue:edit']"></el-button> >
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['materials:materialIssue:remove']"
></el-button>
</el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -144,7 +129,7 @@
:prop="`itemList.${index}.name`" :prop="`itemList.${index}.name`"
:rules="[{ required: true, message: '名称不能为空', trigger: 'blur' }]" :rules="[{ required: true, message: '名称不能为空', trigger: 'blur' }]"
> >
<el-select v-model="item.name" placeholder="请输入名称" @change="(value) => getNameChange(value, index, item)"> <el-select v-model="item.name" placeholder="请选择名称" @change="(value) => getNameChange(value, index, item)">
<el-option v-for="item in optionsName" :key="item.id" :label="item.materialsName" :value="item.id" /> <el-option v-for="item in optionsName" :key="item.id" :label="item.materialsName" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>

View File

@ -13,8 +13,8 @@
<el-form-item label="材料名称" prop="materialName"> <el-form-item label="材料名称" prop="materialName">
<el-input v-model="queryParams.materialName" placeholder="请输入设备材料名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.materialName" placeholder="请输入设备材料名称" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="合同名称" prop="contractName"> <el-form-item label="合同编号" prop="contractName">
<el-input v-model="queryParams.contractName" placeholder="请输入合同名称" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.contractName" placeholder="请输入合同编号" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item label="订货单位" prop="orderingUnit"> <el-form-item label="订货单位" prop="orderingUnit">
<el-input v-model="queryParams.orderingUnit" placeholder="请输入订货单位" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.orderingUnit" placeholder="请输入订货单位" clearable @keyup.enter="handleQuery" />
@ -23,8 +23,8 @@
<el-input v-model="queryParams.supplierUnit" placeholder="请输入供货单位" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.supplierUnit" placeholder="请输入供货单位" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" v-hasPermi="['materials:materialReceive:list']" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" v-hasPermi="['materials:materialReceive:list']" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -37,23 +37,12 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['materials:materialReceive:add']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['materials:materialReceive:add']">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['materials:materialReceive:remove']"
>删除</el-button
>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" :data="materialReceiveList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="materialReceiveList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="index" width="60" label="序号" align="center" />
<el-table-column label="表单编号" align="center" prop="formCode" /> <el-table-column label="表单编号" align="center" prop="formCode" />
<el-table-column label="工程名称" align="center" prop="projectName" /> <el-table-column label="工程名称" align="center" prop="projectName" />
<el-table-column label="设备材料名称" align="center" prop="materialName" /> <el-table-column label="设备材料名称" align="center" prop="materialName" />
@ -66,19 +55,17 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" min-width="120" fixed="right">
<template #default="scope"> <template #default="scope">
<el-tooltip content="查看" placement="top"> <el-tooltip content="查看" placement="top">
<el-button link type="primary" icon="View" @click="handleView(scope.row)" v-hasPermi="['materials:materialReceive:query']"></el-button> <el-button link type="primary" icon="View" @click="handleView(scope.row)" v-hasPermi="['materials:materialReceive:query']"
>查看</el-button
>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['materials:materialReceive:remove']"
link >删除</el-button
type="primary" >
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['materials:materialReceive:remove']"
></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
@ -126,8 +113,16 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="合同名称" prop="contractName"> <el-form-item label="合同编号" prop="contractName">
<el-input v-model="form.contractName" placeholder="请输入合同名称" /> <el-select v-model="form.contractName" filterable placeholder="请选择合同" style="width: 100%">
<el-option
v-for="item in contractNameList"
:key="item.contractCode"
:label="item.contractCode"
:value="item.contractCode"
></el-option>
</el-select>
<!-- <el-input v-model="form.contractName" placeholder="请输入合同名称" /> -->
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
@ -255,7 +250,8 @@ import {
getMaterialReceive, getMaterialReceive,
delMaterialReceive, delMaterialReceive,
addMaterialReceive, addMaterialReceive,
updateMaterialReceive updateMaterialReceive,
getContractNameList
} from '@/api/materials/materialReceive'; } from '@/api/materials/materialReceive';
import { MaterialReceiveVO, MaterialReceiveQuery, MaterialReceiveForm } from '@/api/materials/materialReceive/types'; import { MaterialReceiveVO, MaterialReceiveQuery, MaterialReceiveForm } from '@/api/materials/materialReceive/types';
import { useUserStoreHook } from '@/store/modules/user'; import { useUserStoreHook } from '@/store/modules/user';
@ -288,7 +284,7 @@ const queryFormRef = ref<ElFormInstance>();
const materialReceiveFormRef = ref<ElFormInstance>(); const materialReceiveFormRef = ref<ElFormInstance>();
const purchaseDocList = ref([]); // 物资采购单列表 const purchaseDocList = ref([]); // 物资采购单列表
const purchaseMap = new Map(); // 采购单映射id -> 采购单对象) const purchaseMap = new Map(); // 采购单映射id -> 采购单对象)
const contractNameList = ref([]); //合同列表
// 对话框配置 // 对话框配置
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
@ -378,7 +374,11 @@ const getList = async () => {
loading.value = false; loading.value = false;
} }
}; };
// 获取合同列表数据
const getContractList = async () => {
let res = await getContractNameList(currentProject.value?.id);
contractNameList.value = res.rows;
};
/** 取消按钮 */ /** 取消按钮 */
const cancel = () => { const cancel = () => {
reset(); reset();
@ -463,13 +463,14 @@ const submitForm = () => {
if (form.value.id) { if (form.value.id) {
await updateMaterialReceive({ ...form.value }); await updateMaterialReceive({ ...form.value });
} else { } else {
form.value.itemList.forEach((item) => {
delete item.id;
});
await addMaterialReceive({ ...form.value }); await addMaterialReceive({ ...form.value });
} }
proxy?.$modal.msgSuccess('操作成功'); proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false; dialog.visible = false;
await getList(); await getList();
} catch (err) {
proxy?.$modal.msgError('操作失败');
} finally { } finally {
buttonLoading.value = false; buttonLoading.value = false;
} }
@ -664,6 +665,7 @@ watch(
/** 页面挂载时初始化 */ /** 页面挂载时初始化 */
onMounted(() => { onMounted(() => {
getContractList();
getList(); getList();
getlistPurchase(); getlistPurchase();
// 监听初始验收条目 // 监听初始验收条目
@ -678,6 +680,7 @@ const listeningProject = watch(
(nid) => { (nid) => {
queryParams.value.projectId = nid; queryParams.value.projectId = nid;
form.value.projectId = nid; form.value.projectId = nid;
getContractList();
getList(); getList();
getlistPurchase(); getlistPurchase();
} }

View File

@ -1,20 +1,16 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="材料名称" prop="materialsName"> <el-form-item label="材料名称" prop="materialsName">
<el-input v-model="queryParams.materialsName" placeholder="请输入材料名称" clearable <el-input v-model="queryParams.materialsName" placeholder="请输入材料名称" clearable @keyup.enter="handleQuery" />
@keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" v-hasPermi="['materials:materialsInventory:list']" icon="Search" <el-button type="primary" v-hasPermi="['materials:materialsInventory:list']" icon="Search" @click="handleQuery">搜索</el-button>
@click="handleQuery">搜索</el-button>
<el-button icon="Refresh" v-hasPermi="['materials:materialsInventory:list']" <el-button icon="Refresh" v-hasPermi="['materials:materialsInventory:list']" @click="resetQuery">重置</el-button>
@click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -25,8 +21,7 @@
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['materials:materialsInventory:export']">
v-hasPermi="['materials:materialsInventory:export']">
导出 导出
</el-button> </el-button>
</el-col> </el-col>
@ -45,8 +40,13 @@
<el-table-column label="使用部位" align="center" prop="usePart" /> <el-table-column label="使用部位" align="center" prop="usePart" />
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
</el-table> </el-table>
<pagination v-show="totalChild > 0" :total="totalChild" v-model:page="queryParamsChild.pageNum" <pagination
v-model:limit="queryParamsChild.pageSize" @pagination="getListChild" /> v-show="totalChild > 0"
:total="totalChild"
v-model:page="queryParamsChild.pageNum"
v-model:limit="queryParamsChild.pageSize"
@pagination="getListChild"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -115,8 +115,7 @@
</template> </template>
</el-table-column> --> </el-table-column> -->
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改材料出/入库对话框 --> <!-- 添加或修改材料出/入库对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
@ -130,8 +129,7 @@
<el-input v-model="form.number" placeholder="请输入出/入库的数量" /> <el-input v-model="form.number" placeholder="请输入出/入库的数量" />
</el-form-item> </el-form-item>
<el-form-item label="出/入库操作时间" prop="outPutTime"> <el-form-item label="出/入库操作时间" prop="outPutTime">
<el-date-picker clearable v-model="form.outPutTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" <el-date-picker clearable v-model="form.outPutTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择出/入库操作时间">
placeholder="请选择出/入库操作时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="剩余库存数量" prop="residue"> <el-form-item label="剩余库存数量" prop="residue">
@ -176,9 +174,7 @@ import {
} from '@/api/materials/materialsInventory'; } from '@/api/materials/materialsInventory';
import { MaterialsInventoryForm, MaterialsInventoryQuery, MaterialsInventoryVO } from '@/api/materials/materialsInventory/types'; import { MaterialsInventoryForm, MaterialsInventoryQuery, MaterialsInventoryVO } from '@/api/materials/materialsInventory/types';
import { useUserStoreHook } from '@/store/modules/user'; import { useUserStoreHook } from '@/store/modules/user';
import { import { listMaterialsUseRecord } from '@/api/materials/materialsUseRecord';
listMaterialsUseRecord,
} from '@/api/materials/materialsUseRecord';
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { out_put_type } = toRefs<any>(proxy?.useDict('out_put_type')); const { out_put_type } = toRefs<any>(proxy?.useDict('out_put_type'));

View File

@ -1,7 +1,6 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> </transition>
:leave-active-class="proxy?.animate.searchAnimate.leave"> </transition>
<el-card shadow="never"> <el-card shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
@ -19,8 +18,7 @@
</template> </template>
<!-- 外层表格添加ref用于控制展开状态 --> <!-- 外层表格添加ref用于控制展开状态 -->
<el-table ref="outerTableRef" v-loading="loading" :data="materialsUseInventoryList" <el-table ref="outerTableRef" v-loading="loading" :data="materialsUseInventoryList" @expand-change="handleExpandChange" border>
@expand-change="handleExpandChange" border>
<el-table-column type="expand"> <el-table-column type="expand">
<template #default="props"> <template #default="props">
<div style="margin-left: 60px"> <div style="margin-left: 60px">
@ -32,13 +30,25 @@
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="delete" v-if="scope.row.ishow" @click="handleDelete(scope.row)" <el-button
v-hasPermi="['materials:materialsUseRecord:remove']">删除</el-button> link
type="primary"
icon="delete"
v-if="scope.row.ishow"
@click="handleDelete(scope.row)"
v-hasPermi="['materials:materialsUseRecord:remove']"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="totalChild > 0" :total="totalChild" v-model:page="queryParamsChild.pageNum" <pagination
v-model:limit="queryParamsChild.pageSize" @pagination="getListChild" /> v-show="totalChild > 0"
:total="totalChild"
v-model:page="queryParamsChild.pageNum"
v-model:limit="queryParamsChild.pageSize"
@pagination="getListChild"
/>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
@ -53,13 +63,13 @@
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" <el-button link type="primary" icon="Plus" @click="handleAdd(scope.row)" v-hasPermi="['materials:materialsUseRecord:add']"
v-hasPermi="['materials:materialsUseRecord:add']">添加登记</el-button> >添加登记</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改材料使用登记对话框 --> <!-- 添加或修改材料使用登记对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>

View File

@ -6,10 +6,10 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item v-if="state.masterData.status == 'draft'"> <el-form-item v-if="state.masterData.status == 'draft'">
<el-button type="primary" v-hasPermi="['design:totalsupplyplan:queryList']" icon="edit" @click="clickApprovalSheet1()">审批</el-button> <el-button type="primary" icon="edit" @click="clickApprovalSheet1()">审批</el-button>
</el-form-item> </el-form-item>
<el-form-item v-if="state.masterData.status == 'waiting' || state.masterData.status == 'finish'"> <el-form-item v-if="state.masterData.status == 'waiting' || state.masterData.status == 'finish'">
<el-button icon="view" v-hasPermi="['design:totalsupplyplan:queryList']" @click="lookApprovalFlow()" type="warning">查看流程</el-button> <el-button icon="view" @click="lookApprovalFlow()" type="warning">查看流程</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<right-toolbar @queryTable="getMasterDataList"></right-toolbar> <right-toolbar @queryTable="getMasterDataList"></right-toolbar>

View File

@ -110,13 +110,7 @@
>修改</el-button >修改</el-button
> >
<el-button <el-button link type="primary" v-if="scope.row.status == 'finish' && scope.row.feedbackUrl" icon="Share" @click="handleShare(scope.row)"
link
type="primary"
v-if="scope.row.status == 'finish' && scope.row.feedbackUrl"
icon="Share"
@click="handleShare(scope.row)"
v-hasPermi="['cailiaoshebei:purchaseDoc:list']"
>物流单分享</el-button >物流单分享</el-button
> >
<el-button link type="primary" icon="View" @click="handleDetail(scope.row)" v-hasPermi="['cailiaoshebei:purchaseDoc:remove']" <el-button link type="primary" icon="View" @click="handleDetail(scope.row)" v-hasPermi="['cailiaoshebei:purchaseDoc:remove']"
@ -232,7 +226,9 @@
<el-table-column label="物资名称" align="center" prop="name" /> <el-table-column label="物资名称" align="center" prop="name" />
<el-table-column label="规格型号" align="center" prop="specification"> <el-table-column label="规格型号" align="center" prop="specification">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Finished" @click="getDetailList(scope.row.ltn)"> 查看物流信息</el-button></template <el-button link type="primary" icon="Finished" v-hasPermi="['cailiaoshebei:ltn:logistics']" @click="getDetailList(scope.row.ltn)">
查看物流信息</el-button
></template
> >
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -23,7 +23,7 @@
style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)" style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)"
:row-class-name="tableRowClassName" :row-class-name="tableRowClassName"
> >
<el-table-column prop="id" label="ID" width="180" align="center"></el-table-column> <el-table-column type="index" label="序号" width="60" align="center"></el-table-column>
<el-table-column prop="name" label="材料名称" min-width="150"></el-table-column> <el-table-column prop="name" label="材料名称" min-width="150"></el-table-column>
<el-table-column prop="specification" label="规格" min-width="120"></el-table-column> <el-table-column prop="specification" label="规格" min-width="120"></el-table-column>
<el-table-column prop="supplier" label="供应商" min-width="150"></el-table-column> <el-table-column prop="supplier" label="供应商" min-width="150"></el-table-column>
@ -45,31 +45,29 @@
{{ formatDate(scope.row.createTime) }} {{ formatDate(scope.row.createTime) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="180" align="center" fixed="right"> <el-table-column label="操作" width="240" align="center" fixed="right">
<template #default="scope"> <template #default="scope">
<!-- <el-button size="small" icon="Plus" @click="handleAddSon(scope.row)" <el-button size="small" v-hasPermi="['cailiaoshebei:physicalsupply:edit']" icon="Edit" type="primary" link @click="handleEdit(scope.row)"
class="text-blue-600 hover:text-blue-800 transition-colors"></el-button> --> >修改</el-button
<el-button >
size="small"
v-hasPermi="['cailiaoshebei:physicalsupply:edit']"
icon="Edit"
@click="handleEdit(scope.row)"
class="text-blue-600 hover:text-blue-800 transition-colors"
></el-button>
<el-button <el-button
size="small" size="small"
type="primary"
v-hasPermi="['cailiaoshebei:physicalsupplySon:list']" v-hasPermi="['cailiaoshebei:physicalsupplySon:list']"
icon="View" icon="View"
link
@click="jumpRouter(scope.row)" @click="jumpRouter(scope.row)"
class="text-blue-600 hover:text-blue-800 transition-colors" >查看</el-button
></el-button> >
<el-button <el-button
size="small" size="small"
type="primary"
link
v-hasPermi="['cailiaoshebei:physicalsupply:remove']" v-hasPermi="['cailiaoshebei:physicalsupply:remove']"
icon="Delete" icon="Delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
class="text-red-600 hover:text-red-800 transition-colors" >删除</el-button
></el-button> >
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -1,22 +1,36 @@
<template> <template>
<div style="padding: 20px"> <div style="padding: 20px">
<el-card class="mb-5"> <el-card class="mb-5">
<el-button type="primary" v-hasPermi="['cailiaoshebei:physicalsupply:add']" icon="Plus" @click="handleAdd" <el-button
class="transition-all duration-200 hover:shadow-md"> type="primary"
v-hasPermi="['cailiaoshebei:physicalsupply:add']"
icon="Plus"
@click="handleAdd"
class="transition-all duration-200 hover:shadow-md"
>
新增 新增
</el-button> </el-button>
<el-button v-hasPermi="['cailiaoshebei:physicalsupply:list']" icon="Refresh" @click="refreshData" <el-button
class="transition-all duration-200 hover:shadow-md"> v-hasPermi="['cailiaoshebei:physicalsupply:list']"
icon="Refresh"
@click="refreshData"
class="transition-all duration-200 hover:shadow-md"
>
刷新 刷新
</el-button> </el-button>
</el-card> </el-card>
<!-- 数据表格 --> <!-- 数据表格 -->
<div class="bg-white rounded-lg shadow-sm overflow-hidden transition-all duration-300 hover:shadow-md"> <div class="bg-white rounded-lg shadow-sm overflow-hidden transition-all duration-300 hover:shadow-md">
<el-table v-loading="loading" :data="tableData" border stripe <el-table
v-loading="loading"
:data="tableData"
border
stripe
style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)" style="width: 100%; margin-bottom: 20px; height: calc(100vh - 305px)"
:header-cell-style="{ 'background-color': '#f5f7fa', 'font-weight': 'bold' }" :header-cell-style="{ 'background-color': '#f5f7fa', 'font-weight': 'bold' }"
:row-class-name="tableRowClassName"> :row-class-name="tableRowClassName"
>
<!-- <el-table-column prop="id" label="ID" width="180" align="center"></el-table-column> --> <!-- <el-table-column prop="id" label="ID" width="180" align="center"></el-table-column> -->
<el-table-column type="index" label="序号" align="center" width="60"></el-table-column> <el-table-column type="index" label="序号" align="center" width="60"></el-table-column>
@ -41,27 +55,53 @@
{{ formatDate(scope.row.createTime) }} {{ formatDate(scope.row.createTime) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="240" align="center" fixed="right"> <el-table-column label="操作" width="300" align="center" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button v-hasPermi="['cailiaoshebei:physicalsupplySon:add']" size="small" icon="Plus" <el-button
@click="handleAddSon(scope.row)" class="text-blue-600 hover:text-blue-800 transition-colors"></el-button> v-hasPermi="['cailiaoshebei:physicalsupplySon:add']"
<el-button v-hasPermi="['cailiaoshebei:physicalsupply:edit']" size="small" icon="Edit" size="small"
@click="handleEdit(scope.row)" class="text-blue-600 hover:text-blue-800 transition-colors"></el-button> icon="Plus"
<el-button v-hasPermi="['cailiaoshebei:physicalsupplySon:list']" size="small" icon="View" type="primary"
@click="jumpRouter(scope.row)" class="text-blue-600 hover:text-blue-800 transition-colors"></el-button> link
<el-button v-hasPermi="['cailiaoshebei:physicalsupply:remove']" size="small" icon="Delete" @click="handleAddSon(scope.row)"
@click="handleDelete(scope.row)" class="text-red-600 hover:text-red-800 transition-colors"></el-button> >添加</el-button
>
<el-button type="primary" v-hasPermi="['cailiaoshebei:physicalsupply:edit']" size="small" icon="Edit" link @click="handleEdit(scope.row)"
>修改</el-button
>
<el-button
type="primary"
v-hasPermi="['cailiaoshebei:physicalsupplySon:list']"
size="small"
icon="View"
link
@click="jumpRouter(scope.row)"
>查看</el-button
>
<el-button
v-hasPermi="['cailiaoshebei:physicalsupply:remove']"
size="small"
icon="Delete"
link
type="primary"
@click="handleDelete(scope.row)"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="fetchData" />
v-model:limit="queryParams.pageSize" @pagination="fetchData" />
</div> </div>
<!-- 新增/编辑对话框 --> <!-- 新增/编辑对话框 -->
<el-dialog v-model="dialogVisible" :title="dialogType === 'add' ? '新增记录' : '编辑记录'" :width="dialogWidth" <el-dialog
:fullscreen="isFullscreen" :before-close="handleDialogClose"> v-model="dialogVisible"
:title="dialogType === 'add' ? '新增记录' : '编辑记录'"
:width="dialogWidth"
:fullscreen="isFullscreen"
:before-close="handleDialogClose"
>
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" class="space-y-4"> <el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" class="space-y-4">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
@ -105,8 +145,12 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="合同签订时间" prop="contractSigning"> <el-form-item label="合同签订时间" prop="contractSigning">
<el-date-picker v-model="formData.contractSigning" type="datetime" placeholder="选择合同签订时间" <el-date-picker
value-format="YYYY-MM-DD HH:mm:ss"></el-date-picker> v-model="formData.contractSigning"
type="datetime"
placeholder="选择合同签订时间"
value-format="YYYY-MM-DD HH:mm:ss"
></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -119,8 +163,7 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="供货要求" prop="supplyRequirements"> <el-form-item label="供货要求" prop="supplyRequirements">
<el-input v-model="formData.supplyRequirements" placeholder="请输入供货要求" type="textarea" <el-input v-model="formData.supplyRequirements" placeholder="请输入供货要求" type="textarea" :rows="3"></el-input>
:rows="3"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>

View File

@ -0,0 +1,256 @@
<template>
<div class="p-2">
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="查看时间" prop="viewTime">
<el-date-picker clearable v-model="queryParams.viewTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择查看时间" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="noticeList">
<el-table-column type="index" label="序号" width="80" align="center" />
<!-- <el-table-column label="接收通知的用户" align="center" prop="recipientId" />
<el-table-column label="发送通知的用户" align="center" prop="senderId" /> -->
<el-table-column label="通知内容" align="center" prop="msg" />
<el-table-column label="查看状态" align="center" prop="viewStatus">
<template #default="scope">
<el-tag :type="scope.row.viewStatus === 0 ? 'danger' : 'success'">{{ scope.row.viewStatus === 0 ? '未读' : '已读' }}</el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="查看时间" align="center" prop="viewTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.viewTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" /> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <el-button link type="primary" @click="handleRoute(scope.row)">查看</el-button></template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改消息对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="noticeFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目ID" prop="projectId">
<el-input v-model="form.projectId" placeholder="请输入项目ID" />
</el-form-item>
<el-form-item label="接收通知的用户ID" prop="recipientId">
<el-input v-model="form.recipientId" placeholder="请输入接收通知的用户ID" />
</el-form-item>
<el-form-item label="发送通知的用户ID" prop="senderId">
<el-input v-model="form.senderId" placeholder="请输入发送通知的用户ID" />
</el-form-item>
<el-form-item label="配置id" prop="configId">
<el-input v-model="form.configId" placeholder="请输入配置id" />
</el-form-item>
<el-form-item label="详情id" prop="detailId">
<el-input v-model="form.detailId" placeholder="请输入详情id" />
</el-form-item>
<el-form-item label="通知内容">
<editor v-model="form.content" :min-height="192" />
</el-form-item>
<el-form-item label="查看时间" prop="viewTime">
<el-date-picker clearable v-model="form.viewTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择查看时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="Notice" lang="ts">
import { listNotice, getNotice, delNotice, addNotice, updateNotice } from '@/api/message/notice';
import { NoticeVO, NoticeQuery, NoticeForm } from '@/api/message/notice/types';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
import { useUserStoreHook } from '@/store/modules/user';
const noticeList = ref([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
// 获取用户 store
const userStore = useUserStoreHook();
// 从 store 中获取项目列表和当前选中的项目
const currentProject = computed(() => userStore.selectedProject);
const queryFormRef = ref<ElFormInstance>();
const noticeFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
const initFormData: NoticeForm = {
id: undefined,
projectId: currentProject.value?.id,
recipientId: undefined,
senderId: undefined,
configId: undefined,
detailId: undefined,
content: undefined,
viewStatus: undefined,
viewTime: undefined,
remark: undefined
};
const data = reactive({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
projectId: currentProject.value?.id,
userId: userStore.userId,
recipientId: undefined,
senderId: undefined,
configId: undefined,
detailId: undefined,
content: undefined,
viewStatus: undefined,
viewTime: undefined,
params: {}
},
rules: {
id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }],
projectId: [{ required: true, message: '项目ID不能为空', trigger: 'blur' }],
recipientId: [{ required: true, message: '接收通知的用户ID不能为空', trigger: 'blur' }],
senderId: [{ required: true, message: '发送通知的用户ID不能为空', trigger: 'blur' }],
configId: [{ required: true, message: '配置id不能为空', trigger: 'blur' }],
detailId: [{ required: true, message: '详情id不能为空', trigger: 'blur' }],
content: [{ required: true, message: '通知内容不能为空', trigger: 'blur' }],
viewStatus: [{ required: true, message: '查看状态(0未读 1已读)不能为空', trigger: 'change' }]
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询消息列表 */
const getList = async () => {
loading.value = true;
const res = await listNotice(queryParams.value);
noticeList.value = res.rows;
if (noticeList.value.length > 0) {
noticeList.value.forEach((item) => {
let obj = JSON.parse(item.content);
item.route = obj.type;
item.msg = obj.content;
});
}
total.value = res.total;
loading.value = false;
};
// 跳转到指定路由
const handleRoute = (row) => {
proxy.$router.push({ path: row.route });
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
noticeFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: NoticeVO[]) => {
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = '添加消息';
};
/** 修改按钮操作 */
const handleUpdate = async (row?: NoticeVO) => {
reset();
const _id = row?.id || ids.value[0];
const res = await getNotice(_id);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = '修改消息';
};
/** 提交按钮 */
const submitForm = () => {
noticeFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateNotice(form.value).finally(() => (buttonLoading.value = false));
} else {
await addNotice(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: NoticeVO) => {
const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除消息编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
await delNotice(_ids);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'message/notice/export',
{
...queryParams.value
},
`notice_${new Date().getTime()}.xlsx`
);
};
onMounted(() => {
getList();
});
</script>

View File

@ -1,120 +1,124 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
:leave-active-class="proxy?.animate.searchAnimate.leave"> <div v-show="showSearch" class="mb-[10px]">
<div v-show="showSearch" class="mb-[10px]"> <el-card shadow="hover">
<el-card shadow="hover"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form-item label="上报日期" prop="reportDate">
<el-form-item label="上报日期" prop="reportDate"> <el-date-picker clearable v-model="queryParams.reportDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择上报日期" />
<el-date-picker clearable v-model="queryParams.reportDate" type="date" value-format="YYYY-MM-DD" </el-form-item>
placeholder="请选择上报日期" /> <el-form-item>
</el-form-item> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-form-item> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> </el-form-item>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> </el-form>
</el-form-item> </el-card>
</el-form> </div>
</el-card> </transition>
</div>
</transition>
<el-card shadow="never"> <el-card shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['out:constructionValue:add']">新增</el-button>
v-hasPermi="['out:constructionValue:add']">新增</el-button> </el-col>
</el-col> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
<el-col :span="1.5"> </el-row>
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" </template>
v-hasPermi="['out:constructionValue:remove']">删除</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" :data="constructionValueList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="constructionValueList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="index" width="55" label="序号" align="center" />
<!-- <el-table-column label="主键ID" align="center" prop="id" v-if="true" /> --> <el-table-column label="上报日期" align="center" prop="reportDate" width="180">
<el-table-column label="上报日期" align="center" prop="reportDate" width="180"> <template #default="scope">
<template #default="scope"> <span>{{ parseTime(scope.row.reportDate, '{y}-{m}-{d}') }}</span>
<span>{{ parseTime(scope.row.reportDate, '{y}-{m}-{d}') }}</span> </template>
</template> </el-table-column>
</el-table-column> <el-table-column label="项目子项" align="center" prop="subProjectName" />
<el-table-column label="项目子项" align="center" prop="subProjectName" /> <el-table-column label="分部工程" align="center" prop="categoryName" />
<el-table-column label="分工程" align="center" prop="categoryName" /> <el-table-column label="分工程" align="center" prop="progressCategoryName" />
<el-table-column label="分项工程" align="center" prop="progressCategoryName" /> <el-table-column label="人工填报数量" align="center" prop="artificialNum" />
<el-table-column label="人工填报数量" align="center" prop="artificialNum" /> <el-table-column label="无人机识别数量" align="center" prop="uavNum" />
<el-table-column label="无人机识别数量" align="center" prop="uavNum" /> <el-table-column label="确认数量" align="center" prop="confirmNum" />
<el-table-column label="确认数量" align="center" prop="confirmNum" /> <el-table-column label="对乙产值" align="center" prop="outValue" />
<el-table-column label="对产值" align="center" prop="outValue" /> <el-table-column label="对产值" align="center" prop="ownerValue" />
<el-table-column label="对甲产值" align="center" prop="ownerValue" /> <el-table-column label="流程状态" align="center" prop="status">
<el-table-column label="流程状态" align="center" prop="status"> <template #default="scope">
<template #default="scope"> <dict-tag :options="wf_business_status" :value="scope.row.auditStatus" />
<dict-tag :options="wf_business_status" :value="scope.row.auditStatus" /> </template>
</template> </el-table-column>
</el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="210">
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="210"> <template #default="scope">
<template #default="scope"> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['out:constructionValue:edit']">修改</el-button>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" <el-button link type="primary" icon="Finished" @click="handleAudit(scope.row)">审核</el-button>
v-hasPermi="['out:constructionValue:edit']">修改</el-button> </template>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" </el-table-column>
v-hasPermi="['out:constructionValue:remove']">删除</el-button> </el-table>
<el-button link type="primary" icon="Finished" @click="handleAudit(scope.row)" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-hasPermi="['out:constructionValue:remove']">审核</el-button> </el-card>
</template> <!-- 添加或修改施工产值对话框 -->
</el-table-column> <el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
</el-table> <el-form ref="constructionValueFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="方阵" prop="matrixId" v-if="!form.id">
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <el-cascader
v-model:limit="queryParams.pageSize" @pagination="getList" /> :options="matrixOptions"
</el-card> placeholder="请选择"
<!-- 添加或修改施工产值对话框 --> :props="{ value: 'matrixId', label: 'name', emitPath: false }"
<el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> v-model="form.matrixId"
<el-form ref="constructionValueFormRef" :model="form" :rules="rules" label-width="120px"> @clear="resetCascader(1)"
<el-form-item label="方阵" prop="matrixId" v-if="!form.id"> @change="handleChange"
<el-cascader :options="matrixOptions" placeholder="请选择" clearable
:props="{ value: 'matrixId', label: 'name', emitPath: false }" v-model="form.matrixId" />
@clear="resetCascader(1)" @change="handleChange" clearable /> </el-form-item>
</el-form-item> <el-form-item label="分项工程" prop="progressCategoryId" v-if="!form.id">
<el-form-item label="分项工程" prop="progressCategoryId" v-if="!form.id"> <el-cascader
<el-cascader :options="progressCategoryList" v-model="form.progressCategoryId" @clear="resetCascader()" :options="progressCategoryList"
:disabled="!form.matrixId" @change="selectTime" v-model="form.progressCategoryId"
:props="{ expandTrigger: 'hover', value: 'id', label: 'name', emitPath: false }" placeholder="请选择分项工程" @clear="resetCascader()"
clearable> :disabled="!form.matrixId"
</el-cascader> @change="selectTime"
</el-form-item> :props="{ expandTrigger: 'hover', value: 'id', label: 'name', emitPath: false }"
<el-form-item label="计划日期" prop="reportDateId" v-if="!form.id"> placeholder="请选择分项工程"
<el-cascader :options="progressTimeList" v-model="form.reportDateId" :disabled="!form.progressCategoryId" clearable
:props="{ expandTrigger: 'hover', value: 'id', label: 'date', emitPath: false }" placeholder="请选择计划日期" >
@change="submitTime" clearable> </el-cascader>
</el-cascader> </el-form-item>
</el-form-item> <el-form-item label="计划日期" prop="reportDateId" v-if="!form.id">
<el-form-item label="人工填报数量" prop="artificialNum"> <el-cascader
<el-input v-model="form.artificialNum" placeholder="请输入人工填报数量" disabled /> :options="progressTimeList"
</el-form-item> v-model="form.reportDateId"
<el-form-item label="无人机识别数量" prop="uavNum"> :disabled="!form.progressCategoryId"
<el-input v-model="form.uavNum" placeholder="请输入无人机识别数量" disabled /> :props="{ expandTrigger: 'hover', value: 'id', label: 'date', emitPath: false }"
</el-form-item> placeholder="请选择计划日期"
<el-form-item label="上报日期" prop="planDate"> @change="submitTime"
<el-date-picker v-model="form.planDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择上报日期" /> clearable
</el-form-item> >
<el-form-item label="确认数量" prop="confirmNum"> </el-cascader>
<el-input v-model="form.confirmNum" placeholder="请输入确认数量" /> </el-form-item>
</el-form-item> <el-form-item label="人工填报数量" prop="artificialNum">
<!-- <el-form-item label="产值" prop="outValue"> <el-input v-model="form.artificialNum" placeholder="请输入人工填报数量" disabled />
</el-form-item>
<el-form-item label="无人机识别数量" prop="uavNum">
<el-input v-model="form.uavNum" placeholder="请输入无人机识别数量" disabled />
</el-form-item>
<el-form-item label="上报日期" prop="planDate">
<el-date-picker v-model="form.planDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择上报日期" />
</el-form-item>
<el-form-item label="确认数量" prop="confirmNum">
<el-input v-model="form.confirmNum" placeholder="请输入确认数量" />
</el-form-item>
<!-- <el-form-item label="产值" prop="outValue">
<el-input v-model="form.outValue" disabled /> <el-input v-model="form.outValue" disabled />
</el-form-item> --> </el-form-item> -->
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button> <el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script setup name="ConstructionValue" lang="ts"> <script setup name="ConstructionValue" lang="ts">
import { import {

View File

@ -1,13 +1,11 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <el-card shadow="never">
:leave-active-class="proxy?.animate.searchAnimate.leave"> <template #header>
<div v-show="showSearch" class="mb-[10px]"> <el-row :gutter="10" class="mb8">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="计划月份" prop="planMonth"> <el-form-item label="计划月份" prop="planMonth">
<el-date-picker v-model="queryParams.planMonth" type="month" value-format="YYYY-MM" <el-date-picker v-model="queryParams.planMonth" type="month" value-format="YYYY-MM" placeholder="请选择计划月份" />
placeholder="请选择计划月份" />
</el-form-item> </el-form-item>
<el-form-item label="类型" prop="type"> <el-form-item label="类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择类型"> <el-select v-model="queryParams.type" placeholder="请选择类型">
@ -20,18 +18,11 @@
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" :data="monthPlanList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="monthPlanList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column label="计划月份" align="center" prop="planMonth" /> <el-table-column label="计划月份" align="center" prop="planMonth" />
<el-table-column label="计划产值" align="center" prop="planValue" /> <el-table-column label="计划产值" align="center" prop="planValue" />
<el-table-column label="完成产值" align="center" prop="completeValue" /> <el-table-column label="完成产值" align="center" prop="completeValue" />
@ -54,16 +45,15 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="210"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="210">
<template #default="scope"> <template #default="scope">
<el-button type="primary" link icon="Edit" @click="handleAdd(scope.row)" <el-button type="primary" link icon="Edit" @click="handleAdd(scope.row)" v-hasPermi="['out:monthPlan:add']">编辑</el-button>
v-hasPermi="['out:monthPlan:add']">编辑</el-button>
<el-button link type="primary" icon="Finished" @click="handleAudit(scope.row)" <el-button link type="primary" icon="Finished" @click="handleAudit(scope.row)" v-hasPermi="['out:constructionValue:remove']"
v-hasPermi="['out:constructionValue:remove']">审核</el-button> >审核</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改月度产值计划对话框 --> <!-- 添加或修改月度产值计划对话框 -->
<el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
@ -74,8 +64,14 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="计划月份" prop="planMonth"> <el-form-item label="计划月份" prop="planMonth">
<el-date-picker v-model="form.planMonth" type="month" value-format="YYYY-MM" disabled placeholder="请选择计划月份" <el-date-picker
@change="handlePlanMonthChange" /> v-model="form.planMonth"
type="month"
value-format="YYYY-MM"
disabled
placeholder="请选择计划月份"
@change="handlePlanMonthChange"
/>
</el-form-item> </el-form-item>
<el-form-item label="计划产值" prop="planValue"> <el-form-item label="计划产值" prop="planValue">
<el-input v-model="form.planValue" placeholder="请输入计划产值" disabled /> <el-input v-model="form.planValue" placeholder="请输入计划产值" disabled />

View File

@ -1,13 +1,11 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="计划月份" prop="planMonth"> <el-form-item label="计划月份" prop="planMonth">
<el-date-picker v-model="queryParams.planMonth" type="month" value-format="YYYY-MM" <el-date-picker v-model="queryParams.planMonth" type="month" value-format="YYYY-MM" placeholder="请选择计划月份" />
placeholder="请选择计划月份" />
</el-form-item> </el-form-item>
<el-form-item label="产值类型" prop="valueType"> <el-form-item label="产值类型" prop="valueType">
<el-select v-model="queryParams.valueType" placeholder="请选择产值类型"> <el-select v-model="queryParams.valueType" placeholder="请选择产值类型">
@ -33,19 +31,14 @@
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['out:monthPlan:add']">新增</el-button>
v-hasPermi="['out:monthPlan:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()"
v-hasPermi="['out:monthPlan:remove']">删除</el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" :data="monthPlanList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="monthPlanList">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="index" label="序号" width="55" align="center" />
<el-table-column label="计划月份" align="center" prop="planMonth" /> <el-table-column label="计划月份" align="center" prop="planMonth" />
<el-table-column label="计划产值" align="center" prop="planValue" /> <el-table-column label="计划产值" align="center" prop="planValue" />
<el-table-column label="完成产值" align="center" prop="completeValue" /> <el-table-column label="完成产值" align="center" prop="completeValue" />
@ -67,18 +60,15 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"><el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" <template #default="scope"
v-hasPermi="['out:monthPlan:edit']">修改</el-button> ><el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['out:monthPlan:edit']">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" <!-- <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['out:monthPlan:remove']">删除</el-button> -->
v-hasPermi="['out:monthPlan:remove']">删除</el-button> <el-button link type="primary" icon="Finished" @click="handleAudit(scope.row)" v-hasPermi="['out:monthPlan:remove']">审核</el-button>
<el-button link type="primary" icon="Finished" @click="handleAudit(scope.row)"
v-hasPermi="['out:monthPlan:remove']">审核</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加或修改月度产值计划对话框 --> <!-- 添加或修改月度产值计划对话框 -->
<el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>

View File

@ -2,10 +2,10 @@
<div class="p-2"> <div class="p-2">
<el-tabs type="border-card" @tab-change="handleTabChange" v-model="activeTab"> <el-tabs type="border-card" @tab-change="handleTabChange" v-model="activeTab">
<el-tab-pane v-for="(item, index) in tabList" :key="index" :label="item.label" :name="item.value"> <el-tab-pane v-for="(item, index) in tabList" :key="index" :label="item.label" :name="item.value">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> <el-card shadow="never">
<div v-show="showSearch" class="mb-[10px]"> <template #header>
<el-card shadow="hover"> <el-row :gutter="10" class="mb8"
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> ><el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="计划月份" prop="month"> <el-form-item label="计划月份" prop="month">
<el-date-picker v-model="queryParams.month" type="month" value-format="YYYY-MM" placeholder="请选择计划月份" /> <el-date-picker v-model="queryParams.month" type="month" value-format="YYYY-MM" placeholder="请选择计划月份" />
</el-form-item> </el-form-item>
@ -20,12 +20,6 @@
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>

View File

@ -1,43 +1,41 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<el-card shadow="never"> <el-card shadow="never">
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table height="70vh" v-loading="loading" :data="monthPlanList" @selection-change="handleSelectionChange"> <el-table height="70vh" v-loading="loading" :data="monthPlanList" @selection-change="handleSelectionChange">
<el-table-column type="index" width="80" label="序号" align="center" /> <el-table-column type="index" width="80" label="序号" align="center" />
<el-table-column label="名称" align="center" prop="name" /> <el-table-column label="名称" align="center" prop="name" />
<el-table-column label="规格" align="center" prop="specification" /> <el-table-column label="规格" align="center" prop="specification" />
<el-table-column label="单位" align="center" prop="unit" /> <el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="接收数量" align="center" prop="acceptedQuantity" /> <el-table-column label="接收数量" align="center" prop="acceptedQuantity" />
<el-table-column label="价格" align="center" prop="unitPrice"> <el-table-column label="价格" align="center" prop="unitPrice"> </el-table-column>
</el-table-column> <el-table-column label="备注" align="center" prop="remark"> </el-table-column>
<el-table-column label="备注" align="center" prop="remark"> <el-table-column label="操作" align="center" prop="remark" v-if="queryParams.type == '1'">
</el-table-column> <template #default="scope">
<el-table-column label="操作" align="center" prop="remark" v-if="queryParams.type == '1'"> <el-button type="primary" v-hasPermi="['out:monthPlan:purchaseValueAup']" @click="handleUpdate(scope.row)">编辑</el-button>
<template #default="scope"> </template>
<el-button type="primary" @click="handleUpdate(scope.row)">编辑</el-button> </el-table-column>
</template> </el-table>
</el-table-column> </el-card>
</el-table> <!-- 添加或修改月度产值计划对话框 -->
</el-card> <el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<!-- 添加或修改月度产值计划对话框 --> <el-form ref="monthPlanFormRef" :model="form" :rules="rules" label-width="80px">
<el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> <el-form-item label="金额" prop="unitPrice">
<el-form ref="monthPlanFormRef" :model="form" :rules="rules" label-width="80px"> <el-input v-model="form.unitPrice" placeholder="请输入金额" type="number" />
<el-form-item label="金额" prop="unitPrice"> </el-form-item>
<el-input v-model="form.unitPrice" placeholder="请输入金额" type="number" /> </el-form>
</el-form-item> <template #footer>
</el-form> <div class="dialog-footer">
<template #footer> <el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<div class="dialog-footer"> <el-button @click="cancel"> </el-button>
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button> </div>
<el-button @click="cancel"> </el-button> </template>
</div> </el-dialog>
</template> </div>
</el-dialog>
</div>
</template> </template>
<script setup name="MonthPlan" lang="ts"> <script setup name="MonthPlan" lang="ts">
@ -59,123 +57,122 @@ const single = ref(true);
const multiple = ref(true); const multiple = ref(true);
const total = ref(0); const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const monthPlanFormRef = ref<ElFormInstance>(); const monthPlanFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({ const dialog = reactive<DialogOption>({
visible: false, visible: false,
title: '' title: ''
}); });
const initFormData = { const initFormData = {
id: undefined, id: undefined,
projectId: currentProject.value?.id,
planValue: undefined,
completeValue: undefined,
differenceValue: undefined,
planMonth: undefined,
isDesign: true,
type: '1',
valueType: undefined,
planAuditStatus: undefined,
completeAuditStatus: undefined,
unitPrice: undefined
};
const data = reactive({
form: { ...initFormData },
queryParams: {
projectId: currentProject.value?.id, projectId: currentProject.value?.id,
planValue: undefined, planValue: undefined,
completeValue: undefined, completeValue: undefined,
differenceValue: undefined, differenceValue: undefined,
planMonth: undefined, planMonth: undefined,
isDesign: true,
type: '1',
valueType: undefined, valueType: undefined,
planAuditStatus: undefined, planAuditStatus: undefined,
completeAuditStatus: undefined, completeAuditStatus: undefined,
unitPrice: undefined, type: '1',
}; params: {}
const data = reactive({ },
form: { ...initFormData }, rules: {
queryParams: { unitPrice: [{ required: true, message: '金额不能为空', trigger: 'change' }]
projectId: currentProject.value?.id, }
planValue: undefined,
completeValue: undefined,
differenceValue: undefined,
planMonth: undefined,
valueType: undefined,
planAuditStatus: undefined,
completeAuditStatus: undefined,
type: '1',
params: {}
},
rules: {
unitPrice: [{ required: true, message: '金额不能为空', trigger: 'change' }]
}
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
/** 查询月度产值计划列表 */ /** 查询月度产值计划列表 */
const getList = async (type?) => { const getList = async (type?) => {
if (type) { if (type) {
queryParams.value.type = type; queryParams.value.type = type;
} }
loading.value = true; loading.value = true;
const res = await purchaseValueA({ projectId: currentProject.value?.id, type: queryParams.value.type }); const res = await purchaseValueA({ projectId: currentProject.value?.id, type: queryParams.value.type });
monthPlanList.value = res.data; monthPlanList.value = res.data;
console.log(monthPlanList.value); console.log(monthPlanList.value);
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
}; };
/** 取消按钮 */ /** 取消按钮 */
const cancel = () => { const cancel = () => {
reset(); reset();
dialog.visible = false; dialog.visible = false;
}; };
/** 表单重置 */ /** 表单重置 */
const reset = () => { const reset = () => {
form.value = { ...initFormData }; form.value = { ...initFormData };
monthPlanFormRef.value?.resetFields(); monthPlanFormRef.value?.resetFields();
}; };
/** 多选框选中数据 */ /** 多选框选中数据 */
const handleSelectionChange = (selection: MonthPlanVO[]) => { const handleSelectionChange = (selection: MonthPlanVO[]) => {
ids.value = selection.map((item) => item.id); ids.value = selection.map((item) => item.id);
single.value = selection.length != 1; single.value = selection.length != 1;
multiple.value = !selection.length; multiple.value = !selection.length;
}; };
/** 修改按钮操作 */ /** 修改按钮操作 */
const handleUpdate = async (row?: MonthPlanVO) => { const handleUpdate = async (row?: MonthPlanVO) => {
reset(); reset();
Object.assign(form.value, row); Object.assign(form.value, row);
dialog.visible = true; dialog.visible = true;
dialog.title = '修改采购完工产值'; dialog.title = '修改采购完工产值';
}; };
/** 提交按钮 */ /** 提交按钮 */
const submitForm = () => { const submitForm = () => {
form.value.projectId = currentProject.value?.id; form.value.projectId = currentProject.value?.id;
monthPlanFormRef.value?.validate(async (valid: boolean) => { monthPlanFormRef.value?.validate(async (valid: boolean) => {
if (valid) { if (valid) {
buttonLoading.value = true; buttonLoading.value = true;
form.value.isDesign = true; form.value.isDesign = true;
if (form.value.id) { if (form.value.id) {
await purchaseValueAup(form.value).finally(() => (buttonLoading.value = false)); await purchaseValueAup(form.value).finally(() => (buttonLoading.value = false));
} }
proxy?.$modal.msgSuccess('操作成功'); proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false; dialog.visible = false;
await getList(); await getList();
} }
}); });
}; };
onMounted(() => { onMounted(() => {
getList(); getList();
}); });
//监听项目id刷新数据 //监听项目id刷新数据
const listeningProject = watch( const listeningProject = watch(
() => currentProject.value?.id, () => currentProject.value?.id,
(nid, oid) => { (nid, oid) => {
queryParams.value.projectId = nid; queryParams.value.projectId = nid;
form.value.projectId = nid; form.value.projectId = nid;
getList(); getList();
} }
); );
onUnmounted(() => { onUnmounted(() => {
listeningProject(); listeningProject();
}); });
defineExpose({ defineExpose({
getList getList
}); });
</script> </script>

View File

@ -23,7 +23,6 @@ const handleClick = (val) => {
purchPageRef1.value.getList(val.props.name); //子组件方法 purchPageRef1.value.getList(val.props.name); //子组件方法
} else { } else {
purchPageRef2.value.getList(val.props.name); //子组件方法 purchPageRef2.value.getList(val.props.name); //子组件方法
} }
}; };
onMounted(() => { onMounted(() => {

View File

@ -27,17 +27,12 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['out:settlementValueOwner:add']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['out:settlementValueOwner:add']">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['out:settlementValueOwner:remove']"
>删除</el-button
>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" :data="settlementValueOwnerList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="settlementValueOwnerList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column label="填报人" align="center" prop="createByName" /> <el-table-column label="填报人" align="center" prop="createByName" />
<el-table-column label="结算产值" align="center" prop="settlementValue" /> <el-table-column label="结算产值" align="center" prop="settlementValue" />
<el-table-column label="产值类型" align="center" prop="valueType"> <el-table-column label="产值类型" align="center" prop="valueType">
@ -58,18 +53,12 @@
<el-table-column label="说明" align="center" prop="remark" /> <el-table-column label="说明" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改" placement="top"> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['out:settlementValueOwner:edit']"
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['out:settlementValueOwner:edit']"></el-button> >修改</el-button
</el-tooltip> >
<el-tooltip content="删除" placement="top"> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['out:settlementValueOwner:remove']"
<el-button >删除</el-button
link >
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['out:settlementValueOwner:remove']"
></el-button>
</el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -28,23 +28,12 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['out:settlementValueSubcontract:add']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['out:settlementValueSubcontract:add']">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['out:settlementValueSubcontract:remove']"
>删除</el-button
>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" :data="settlementValueSubcontractList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="settlementValueSubcontractList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column label="分包单位" align="center" prop="contractorName" /> <el-table-column label="分包单位" align="center" prop="contractorName" />
<el-table-column label="单据编码" align="center" prop="documentCode" /> <el-table-column label="单据编码" align="center" prop="documentCode" />
<el-table-column label="结算说明" align="center" prop="settlementDescribe" /> <el-table-column label="结算说明" align="center" prop="settlementDescribe" />
@ -65,24 +54,12 @@
<el-table-column label="合同名称" align="center" prop="contractName" /> <el-table-column label="合同名称" align="center" prop="contractName" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改" placement="top"> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['out:settlementValueSubcontract:edit']"
<el-button >修改</el-button
link >
type="primary" <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['out:settlementValueSubcontract:remove']"
icon="Edit" >删除</el-button
@click="handleUpdate(scope.row)" >
v-hasPermi="['out:settlementValueSubcontract:edit']"
></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['out:settlementValueSubcontract:remove']"
></el-button>
</el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -1,8 +1,7 @@
<template> <template>
<div class="p-2"> <div class="p-2">
<!-- 搜索区域 --> <!-- 搜索区域 -->
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
:leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]"> <div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover"> <el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true"> <el-form ref="queryFormRef" :model="queryParams" :inline="true">
@ -22,12 +21,10 @@
<template #header> <template #header>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['patch:master:add']">新增</el-button>
v-hasPermi="['patch:patch:add']">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['patch:master:export']">导出</el-button>
v-hasPermi="['patch:patch:export']">导出</el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -59,10 +56,10 @@
<el-table-column label="任务状态" align="center" prop="taskStatus"> <el-table-column label="任务状态" align="center" prop="taskStatus">
<template #default="scope"> <template #default="scope">
<span <span
:class="[Number(scope.row.taskStatus) === 0 ? 'text-warning' : Number(scope.row.taskStatus) === 1 ? 'text-success' : 'text-danger']"> :class="[Number(scope.row.taskStatus) === 0 ? 'text-warning' : Number(scope.row.taskStatus) === 1 ? 'text-success' : 'text-danger']"
>
{{ {{
Number(scope.row.taskStatus) === 0 ? '未完成' : Number(scope.row.taskStatus) === 1 ? '已完成' : Number(scope.row.taskStatus) === 0 ? '未完成' : Number(scope.row.taskStatus) === 1 ? '已完成' : `未知状态(${scope.row.taskStatus})`
`未知状态(${scope.row.taskStatus})`
}} }}
</span> </span>
</template> </template>
@ -70,22 +67,19 @@
<el-table-column label="备注" align="center" prop="remark" /> <el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<!-- <el-tooltip content="修改" placement="top">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['patch:patch:edit']"></el-button>
</el-tooltip> -->
<el-tooltip content="删除" placement="top"> <el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['patch:master:remove']"></el-button>
v-hasPermi="['patch:patch:remove']"></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 进度详情弹窗 --> <!-- 进度详情弹窗 -->
<el-dialog :title="`进度详情(当前总进度:${currentTotalProgress}%`" v-model="progressDialogVisible" width="1000px" <el-dialog :title="`进度详情(当前总进度:${currentTotalProgress}%`" v-model="progressDialogVisible" width="1000px" destroy-on-close>
destroy-on-close>
<div class="mb-4"> <div class="mb-4">
<!-- v-hasPermi="['patch:progress:add']" --> <!-- v-hasPermi="['patch:master:add']" -->
<el-button type="primary" plain icon="Plus" size="small" @click="handleProgressAdd()"> 新增进度 </el-button> <el-button type="primary" plain icon="Plus" size="small" v-hasPermi="['patch:master:progress']" @click="handleProgressAdd()">
新增进度
</el-button>
</div> </div>
<el-table v-loading="progressLoading" :data="progressList" border empty-text="暂无进度数据" style="width: 100%"> <el-table v-loading="progressLoading" :data="progressList" border empty-text="暂无进度数据" style="width: 100%">
<el-table-column prop="slaveName" label="执行人姓名" align="center" width="150" /> <el-table-column prop="slaveName" label="执行人姓名" align="center" width="150" />
@ -99,28 +93,30 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="140"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="140">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改进度" placement="top"> <el-tooltip content="修改进度" placement="top">
<el-button link type="primary" icon="Edit" size="small" @click="handleProgressUpdate(scope.row)" <el-button link type="primary" icon="Edit" size="small" @click="handleProgressUpdate(scope.row)"></el-button>
v-hasPermi="['patch:progress:edit']"></el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除进度" placement="top"> <el-tooltip content="删除进度" placement="top">
<el-button link type="primary" icon="Delete" size="small" @click="handleProgressDelete(scope.row)" <el-button
v-hasPermi="['patch:progress:remove']"></el-button> link
type="primary"
icon="Delete"
size="small"
@click="handleProgressDelete(scope.row)"
v-hasPermi="['patch:master:removeProgress']"
></el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-dialog> </el-dialog>
<!-- 新增/修改进度弹窗 --> <!-- 新增/修改进度弹窗 -->
<el-dialog :title="progressDialog.title" v-model="progressDialog.visible" width="500px" append-to-body <el-dialog :title="progressDialog.title" v-model="progressDialog.visible" width="500px" append-to-body destroy-on-close>
destroy-on-close>
<el-form ref="progressFormRef" :model="progressForm" :rules="progressRules" label-width="120px"> <el-form ref="progressFormRef" :model="progressForm" :rules="progressRules" label-width="120px">
<el-input v-model="progressForm.ordersId" placeholder="关联的任务ID" readonly <el-input v-model="progressForm.ordersId" placeholder="关联的任务ID" readonly style="color: #666; background: #f5f7fa" type="hidden" />
style="color: #666; background: #f5f7fa" type="hidden" />
<el-input v-model="progressForm.projectId" type="hidden" /> <el-input v-model="progressForm.projectId" type="hidden" />
<el-input v-model="progressForm.slaveId" placeholder="请输入执行人ID" v-if="false" /> <el-input v-model="progressForm.slaveId" placeholder="请输入执行人ID" v-if="false" />
<el-form-item label="进度" prop="progress"> <el-form-item label="进度" prop="progress">
<el-input v-model="progressForm.progress" placeholder="请输入进度0-100之间的数字" type="number" <el-input v-model="progressForm.progress" placeholder="请输入进度0-100之间的数字" type="number" @input="handleProgressInput" />
@input="handleProgressInput" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="progressForm.remark" type="textarea" placeholder="请输入备注" rows="3" /> <el-input v-model="progressForm.remark" type="textarea" placeholder="请输入备注" rows="3" />
@ -135,15 +131,13 @@
</el-dialog> </el-dialog>
<!-- 分页组件 --> <!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 新增/修改任务弹窗 --> <!-- 新增/修改任务弹窗 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body destroy-on-close> <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body destroy-on-close>
<el-form ref="masterFormRef" :model="form" :rules="rules" label-width="100px"> <el-form ref="masterFormRef" :model="form" :rules="rules" label-width="100px">
<el-input v-model="form.projectId" placeholder="请输入项目ID" :readonly="!!currentProjectId" <el-input v-model="form.projectId" placeholder="请输入项目ID" :readonly="!!currentProjectId" :disabled="!!currentProjectId" v-if="false" />
:disabled="!!currentProjectId" v-if="false" />
<template #help> <template #help>
<span v-if="currentProjectId" class="text-success">已自动关联当前选中项目</span> <span v-if="currentProjectId" class="text-success">已自动关联当前选中项目</span>
</template> </template>
@ -152,17 +146,14 @@
</el-form-item> </el-form-item>
<el-form-item label="执行人姓名" prop="userId"> <el-form-item label="执行人姓名" prop="userId">
<el-select v-model="form.userId" placeholder="请选择执行人姓名" clearable style="width: 100%"> <el-select v-model="form.userId" placeholder="请选择执行人姓名" clearable style="width: 100%">
<el-option v-for="item in slaveOptions" :key="item.id" :label="item.nickName" <el-option v-for="item in slaveOptions" :key="item.id" :label="item.nickName" :value="item.userId"></el-option>
:value="item.userId"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="计划完成时间" prop="pcd"> <el-form-item label="计划完成时间" prop="pcd">
<el-date-picker clearable v-model="form.pcd" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" <el-date-picker clearable v-model="form.pcd" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择计划完成时间" />
placeholder="请选择计划完成时间" />
</el-form-item> </el-form-item>
<el-form-item label="实际完成时间" prop="act"> <el-form-item label="实际完成时间" prop="act">
<el-date-picker clearable v-model="form.act" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" <el-date-picker clearable v-model="form.act" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择实际完成时间" />
placeholder="请选择实际完成时间" />
</el-form-item> </el-form-item>
<el-form-item label="任务描述" prop="describe"> <el-form-item label="任务描述" prop="describe">
<el-input v-model="form.describe" type="textarea" placeholder="请输入任务描述" /> <el-input v-model="form.describe" type="textarea" placeholder="请输入任务描述" />
@ -244,7 +235,7 @@ interface ProgressDetail {
updateTime?: string; updateTime?: string;
projectId?: string | number; projectId?: string | number;
} }
interface ProgressForm extends Omit<ProgressDetail, 'updateTime'> { } interface ProgressForm extends Omit<ProgressDetail, 'updateTime'> {}
// 4. 获取组件实例 // 4. 获取组件实例
const { proxy } = getCurrentInstance() as ComponentInternalInstance; const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@ -663,7 +654,7 @@ onUnmounted(() => {
width: 120px !important; width: 120px !important;
} }
.el-table-column .el-button--text+.el-button--text { .el-table-column .el-button--text + .el-button--text {
margin-left: 10px; margin-left: 10px;
} }
</style> </style>

View File

@ -17,15 +17,6 @@
<el-form-item label="责任人" prop="responsiblePerson"> <el-form-item label="责任人" prop="responsiblePerson">
<el-input v-model="queryParams.responsiblePerson" placeholder="请输入责任人" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.responsiblePerson" placeholder="请输入责任人" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>
<!-- <el-form-item label="预计完成时间" prop="expectedFinishDate">
<el-date-picker
clearable
v-model="queryParams.expectedFinishDate"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择预计完成时间"
/>
</el-form-item> -->
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
@ -41,15 +32,19 @@
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['land:landTransferLedger:add']">新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['land:landTransferLedger:add']">新增</el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['land:landTransferLedger:remove']" <el-tag size="large" type="primary">设计面积{{ detailInfo.designArea }}</el-tag>
>删除</el-button </el-col>
> <el-col :span="1.5">
<el-tag size="large" type="success">已流转面积{{ detailInfo.transferAea }}</el-tag>
</el-col>
<el-col :span="1.5">
<el-tag size="large" type="warning">租金{{ detailInfo.landRent / 1000 }}万元</el-tag>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" :data="landTransferLedgerList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="landTransferLedgerList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column label="土地类型" align="center" prop="landTypeName" /> <el-table-column label="土地类型" align="center" prop="landTypeName" />
<el-table-column label="地块" align="center" prop="landName" /> <el-table-column label="地块" align="center" prop="landName" />
<el-table-column label="进场道路" align="center" prop="roadName" /> <el-table-column label="进场道路" align="center" prop="roadName" />
@ -65,7 +60,6 @@
<el-table-column label="状态说明" align="center" prop="statusDescription" /> <el-table-column label="状态说明" align="center" prop="statusDescription" />
<el-table-column label="问题总结" align="center" prop="issueSummary" /> <el-table-column label="问题总结" align="center" prop="issueSummary" />
<el-table-column label="下一步策略" align="center" prop="nextStrategy" width="180" /> <el-table-column label="下一步策略" align="center" prop="nextStrategy" width="180" />
<!-- 固定列 -->
<el-table-column label="操作" align="center" fixed="right" width="200"> <el-table-column label="操作" align="center" fixed="right" width="200">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改" placement="top"> <el-tooltip content="修改" placement="top">
@ -189,7 +183,8 @@ import {
getLandTransferLedger, getLandTransferLedger,
delLandTransferLedger, delLandTransferLedger,
addLandTransferLedger, addLandTransferLedger,
updateLandTransferLedger updateLandTransferLedger,
landTransferLedgerCount
} from '@/api/system/landTransfer/landTransferLedger'; } from '@/api/system/landTransfer/landTransferLedger';
import { listEnterRoad } from '@/api/system/landTransfer/enterRoad'; import { listEnterRoad } from '@/api/system/landTransfer/enterRoad';
import { LandTransferLedgerVO, LandTransferLedgerQuery, LandTransferLedgerForm } from '@/api/system/landTransfer/landTransferLedger/types'; import { LandTransferLedgerVO, LandTransferLedgerQuery, LandTransferLedgerForm } from '@/api/system/landTransfer/landTransferLedger/types';
@ -272,7 +267,11 @@ const data = reactive<PageData<LandTransferLedgerForm, LandTransferLedgerQuery>>
landType: [{ required: true, message: '土地类型不能为空', trigger: 'change' }] landType: [{ required: true, message: '土地类型不能为空', trigger: 'change' }]
} }
}); });
const detailInfo = ref({
transferAea: 0,
transferRatio: 0,
landRent: 0
});
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
/** 查询项目土地流转台账列表 */ /** 查询项目土地流转台账列表 */
@ -283,7 +282,10 @@ const getList = async () => {
total.value = res.total; total.value = res.total;
loading.value = false; loading.value = false;
}; };
const getLandBlockList = async () => {
let res = await landTransferLedgerCount(currentProject.value?.id);
detailInfo.value = res.data;
};
/** 取消按钮 */ /** 取消按钮 */
const cancel = () => { const cancel = () => {
dialog.visible = false; dialog.visible = false;
@ -385,6 +387,7 @@ const listeningProject = watch(
() => currentProject.value?.id, () => currentProject.value?.id,
(nid, oid) => { (nid, oid) => {
queryParams.value.projectId = nid; queryParams.value.projectId = nid;
getLandBlockList();
getListLand(); getListLand();
getList(); getList();
} }
@ -394,6 +397,7 @@ onUnmounted(() => {
listeningProject(); listeningProject();
}); });
onMounted(() => { onMounted(() => {
getLandBlockList();
getList(); getList();
getListLand(); getListLand();
}); });