优化
This commit is contained in:
@ -6,11 +6,11 @@ VITE_APP_ENV = 'development'
|
||||
|
||||
# 开发环境
|
||||
# 李陈杰 209
|
||||
VITE_APP_BASE_API = 'http://192.168.110.188:8899'
|
||||
# VITE_APP_BASE_API = 'http://192.168.110.209: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.188:8899'
|
||||
# 朱银
|
||||
# VITE_APP_BASE_API = 'http://192.168.110.180:8899'
|
||||
|
||||
|
@ -8,14 +8,12 @@
|
||||
import useSettingsStore from '@/store/modules/settings';
|
||||
import { handleThemeStyle } from '@/utils/theme';
|
||||
import useAppStore from '@/store/modules/app';
|
||||
import { getProjectTeam } from './utils/projectTeam';
|
||||
const appStore = useAppStore();
|
||||
|
||||
onMounted(() => {
|
||||
nextTick(() => {
|
||||
// 初始化主题样式
|
||||
handleThemeStyle(useSettingsStore().theme);
|
||||
getProjectTeam();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
@ -21,7 +21,7 @@ export const AddbiddingUser = (data) => {
|
||||
data
|
||||
});
|
||||
};
|
||||
// 新增招投标人员
|
||||
// 查询招投标人员
|
||||
export const biddingUserList = (projectId) => {
|
||||
return request({
|
||||
url: '/bidding/biddingUser/list',
|
||||
|
@ -96,8 +96,6 @@ export const addProjectFacilities = (data: any) => {
|
||||
* @param data
|
||||
*/
|
||||
export const addProjectPilePoint = (data: any) => {
|
||||
console.log('🚀 ~ addProjectPilePoint ~ data:', data);
|
||||
|
||||
return request({
|
||||
url: '/facility/photovoltaicPanelPoint/parts/geoJson',
|
||||
method: 'post',
|
||||
|
@ -134,6 +134,7 @@ export const useUserStore = defineStore('user', () => {
|
||||
roles.value = projectRole;
|
||||
const projectPermissions = permissionList.value.find((item) => item.projectId == selectedProject.value?.id)?.projectPermissions || [];
|
||||
permissions.value = projectPermissions;
|
||||
getProjectTeam();
|
||||
};
|
||||
|
||||
// 注销
|
||||
|
@ -2,7 +2,13 @@ import $cache from '@/plugins/cache';
|
||||
//获取班组列表
|
||||
import { listProjectTeam } from '@/api/project/projectTeam';
|
||||
import { ProjectTeamVO } from '@/api/project/projectTeam/types';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
export const getProjectTeam = async () => {
|
||||
const isPermission = useUserStore().permissions.some((item) => item == 'project:team:list');
|
||||
console.log(useUserStore().permissions);
|
||||
|
||||
if (!isPermission && useUserStore().permissions[0] != '*:*:*') return;
|
||||
|
||||
const { id } = $cache.local.getJSON('selectedProject');
|
||||
const res = await listProjectTeam({
|
||||
pageNum: 1,
|
||||
|
@ -14,7 +14,6 @@ import Header from './components/header.vue';
|
||||
import leftPage from './components/leftPage.vue';
|
||||
import centerPage from './components/centerPage.vue';
|
||||
import rightPage from './components/rightPage.vue';
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
@ -25,7 +25,7 @@
|
||||
placeholder="请选择招投标专员"
|
||||
class="w-full transition-all duration-300 border-gray-300 focus:border-blue-400 focus:ring-1 focus:ring-blue-400"
|
||||
>
|
||||
<el-option v-for="item in userList" :key="item.userId" :label="item.userName" :value="item.userId" />
|
||||
<el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
@ -96,10 +96,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="toggleExpandAll(true)">一键展开</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="toggleExpandAll(false)">一键收起</el-button>
|
||||
<el-button type="primary" @click="toggleExpandAll">{{ isExpandAll ? '一键收起' : '一键展开' }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
@ -413,11 +410,12 @@ const changeSheet = () => {
|
||||
getTreeList();
|
||||
};
|
||||
|
||||
const toggleExpandAll = (isExpand: boolean) => {
|
||||
const toggleExpandAll = () => {
|
||||
isExpandAll.value = !isExpandAll.value;
|
||||
console.log(isExpandAll.value);
|
||||
treeData.value.forEach((row) => {
|
||||
treeTableRef.value.toggleRowExpansion(row, isExpand);
|
||||
treeTableRef.value.toggleRowExpansion(row, isExpandAll.value);
|
||||
});
|
||||
isExpandAll.value = isExpand;
|
||||
};
|
||||
//打开获取表数据
|
||||
const getTreeList = async () => {
|
||||
|
@ -14,11 +14,9 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="toggleExpandAll(true)">一键展开</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="toggleExpandAll(false)">一键收起</el-button>
|
||||
<el-button type="primary" @click="toggleExpandAll">{{ isExpandAll ? '一键收起' : '一键展开' }}</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-upload
|
||||
ref="uploadRef"
|
||||
@ -274,11 +272,12 @@ const handleSave = (row?: any, type?: any) => {
|
||||
};
|
||||
const tableRef = ref<any>();
|
||||
|
||||
const toggleExpandAll = (isExpand: boolean) => {
|
||||
const toggleExpandAll = () => {
|
||||
isExpandAll.value = !isExpandAll.value;
|
||||
console.log(isExpandAll.value);
|
||||
tableData.value.forEach((row) => {
|
||||
tableRef.value.toggleRowExpansion(row, isExpand);
|
||||
tableRef.value.toggleRowExpansion(row, isExpandAll.value);
|
||||
});
|
||||
isExpandAll.value = isExpand;
|
||||
};
|
||||
//导入
|
||||
const importExcel = (options: any): any => {
|
||||
|
@ -1,440 +1,439 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<el-steps style="max-width: 100%" :active="active" finish-status="success" align-center>
|
||||
<el-step title="选择合同类型" />
|
||||
<el-step title="录入合同内容" />
|
||||
<el-step title="录入收款方式" />
|
||||
</el-steps>
|
||||
<div class="content">
|
||||
<template v-if="active == 0">
|
||||
<div>
|
||||
<el-button type="success" size="large" @click="checkContractType('income')">收入合同</el-button>
|
||||
<el-button type="primary" size="large" @click="checkContractType('expenses')">支出合同</el-button>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<template v-else-if="active == 1">
|
||||
<h1>{{ contract_type == "income" ? "收入合同" : "支出合同" }}</h1>
|
||||
<template v-if="contract_type == 'income'">
|
||||
<el-form ref="incomeContractFormRef" :model="form" :rules="incomeContractFormRules"
|
||||
label-width="80px">
|
||||
<!-- <el-form-item label="项目名称">
|
||||
<div class="container">
|
||||
<el-steps style="max-width: 100%" :active="active" finish-status="success" align-center>
|
||||
<el-step title="选择合同类型" />
|
||||
<el-step title="录入合同内容" />
|
||||
<el-step title="录入收款方式" />
|
||||
</el-steps>
|
||||
<div class="content">
|
||||
<template v-if="active == 0">
|
||||
<div>
|
||||
<el-button type="success" size="large" @click="checkContractType('income')">收入合同</el-button>
|
||||
<el-button type="primary" size="large" @click="checkContractType('expenses')">支出合同</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else-if="active == 1">
|
||||
<h1>{{ contract_type == 'income' ? '收入合同' : '支出合同' }}</h1>
|
||||
<template v-if="contract_type == 'income'">
|
||||
<el-form ref="incomeContractFormRef" :model="form" :rules="incomeContractFormRules" label-width="80px">
|
||||
<!-- <el-form-item label="项目名称">
|
||||
<el-input :model-value="project.name" disabled />
|
||||
</el-form-item> -->
|
||||
<el-form-item label="合同编号" prop="contractCode">
|
||||
<el-input v-model="form.contractCode" placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同类型" prop="contractType">
|
||||
<el-select v-model="form.contractType" placeholder="请选择合同类型">
|
||||
<el-option v-for="item in income_contract_type" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="业主单位" prop="contractOwner">
|
||||
<el-input disabled v-model="form.contractOwner" placeholder="请输入业主单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="承包内容" v-if="contract_type !== 'income'">
|
||||
<editor v-model="form.contractedContent" :min-height="192" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同内容" v-else">
|
||||
<editor v-model="form.contractedContent" :min-height="192" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同金额" prop="amount">
|
||||
<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 label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
<el-form-item label="附件">
|
||||
<FileUpload :multiple="true" :fileType="['pdf']" :onUploadSuccess="onUploadSuccess"
|
||||
:ref="fileRef" :defaultFileList="tempFileList" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
<template v-else-if="contract_type == 'expenses'">
|
||||
<el-form ref="expensesContractFormRef" :model="form" :rules="expensesContractFormRules"
|
||||
label-width="80px">
|
||||
<!-- <el-form-item label="项目名称">
|
||||
<el-form-item label="合同编号" prop="contractCode">
|
||||
<el-input v-model="form.contractCode" placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同类型" prop="contractType">
|
||||
<el-select v-model="form.contractType" placeholder="请选择合同类型">
|
||||
<el-option v-for="item in income_contract_type" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="业主单位" prop="contractOwner">
|
||||
<el-input disabled v-model="form.contractOwner" placeholder="请输入业主单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="承包内容" v-if="contract_type !== 'income'">
|
||||
<editor v-model="form.contractedContent" :min-height="192" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同内容" v-else>
|
||||
<editor v-model="form.contractedContent" :min-height="192" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同金额" prop="amount">
|
||||
<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 label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
<el-form-item label="附件">
|
||||
<FileUpload :multiple="true" :fileType="['pdf']" :onUploadSuccess="onUploadSuccess" :ref="fileRef" :defaultFileList="tempFileList" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
<template v-else-if="contract_type == 'expenses'">
|
||||
<el-form ref="expensesContractFormRef" :model="form" :rules="expensesContractFormRules" label-width="80px">
|
||||
<!-- <el-form-item label="项目名称">
|
||||
<el-input :model-value="projectName" placeholder="请输入项目ID" disabled />
|
||||
</el-form-item> -->
|
||||
<el-form-item label="合同编号" prop="contractCode">
|
||||
<el-input v-model="form.contractCode" placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同类型" prop="contractType">
|
||||
<el-select v-model="form.contractType" placeholder="请选择合同类型">
|
||||
<el-option v-for="item in expenses_contract_type" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="招标计划" prop="tenderId">
|
||||
<!-- <el-input v-model="form.tenderId" placeholder="请输入招标Id" /> -->
|
||||
<el-input v-model="form.name" placeholder="请选择招标计划" disabled />
|
||||
<el-button type="primary" @click="handleChoose">选择招标</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="供应商" prop="contractSupplier">
|
||||
<el-input v-model="form.contractSupplier" placeholder="请输入供应商" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="分包内容">
|
||||
<!-- <editor v-model="form.contractedContent" :min-height="192" disabled /> -->
|
||||
<el-input v-model="form.contractedContent" style="width: 300px"
|
||||
:autosize="{ minRows: 2, maxRows: 4 }" type="textarea" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同金额" prop="amount">
|
||||
<el-input
|
||||
oninput="value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
|
||||
v-model="form.amount" placeholder="请输入合同金额" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同编号" prop="contractCode">
|
||||
<el-input v-model="form.contractCode" placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同类型" prop="contractType">
|
||||
<el-select v-model="form.contractType" placeholder="请选择合同类型">
|
||||
<el-option v-for="item in expenses_contract_type" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="招标计划" prop="tenderId">
|
||||
<!-- <el-input v-model="form.tenderId" placeholder="请输入招标Id" /> -->
|
||||
<el-input v-model="form.name" placeholder="请选择招标计划" disabled />
|
||||
<el-button type="primary" @click="handleChoose">选择招标</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="供应商" prop="contractSupplier">
|
||||
<el-input v-model="form.contractSupplier" placeholder="请输入供应商" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="分包内容">
|
||||
<!-- <editor v-model="form.contractedContent" :min-height="192" disabled /> -->
|
||||
<el-input v-model="form.contractedContent" style="width: 300px" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同金额" prop="amount">
|
||||
<el-input
|
||||
oninput="value=value.replace(/[^0-9.]/g,'').replace(/\.{2,}/g,'.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
|
||||
v-model="form.amount"
|
||||
placeholder="请输入合同金额"
|
||||
disabled
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同附件">
|
||||
<FileUpload :multiple="true" :fileType="['pdf']" :onUploadSuccess="onUploadSuccess"
|
||||
:ref="fileRef" :defaultFileList="tempFileList" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
<div>
|
||||
<el-button @click="back(true)">上一步</el-button>
|
||||
<el-button type="primary" @click="next">下一步</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else-if="active == 2">
|
||||
<h1>{{ contract_type == "income" ? "收入合同" : "支出合同" }}</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>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同附件">
|
||||
<FileUpload :multiple="true" :fileType="['pdf']" :onUploadSuccess="onUploadSuccess" :ref="fileRef" :defaultFileList="tempFileList" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
<div>
|
||||
<el-button @click="back(true)">上一步</el-button>
|
||||
<el-button type="primary" @click="next">下一步</el-button>
|
||||
</div>
|
||||
<el-dialog v-model="dialogVisible" title="选择招标计划" width="45%">
|
||||
<el-table :data="planList">
|
||||
<el-table-column type="index" width="50" label="序号" />
|
||||
<el-table-column label="名称" align="center" prop="name" />
|
||||
<el-table-column label="合同额" align="center" prop="contractPrice" />
|
||||
<el-table-column label="分包内容" align="center" prop="content" />
|
||||
<el-table-column label="中标单位" align="center" prop="winningBidder" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" @click="handleChooseData(scope.row)">选择</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="dialogVisible = false">
|
||||
关闭
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<template v-else-if="active == 2">
|
||||
<h1>{{ contract_type == 'income' ? '收入合同' : '支出合同' }}</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>
|
||||
<el-dialog v-model="dialogVisible" title="选择招标计划" width="45%">
|
||||
<el-table :data="planList">
|
||||
<el-table-column type="index" width="50" label="序号" />
|
||||
<el-table-column label="名称" align="center" prop="name" />
|
||||
<el-table-column label="合同额" align="center" prop="contractPrice" />
|
||||
<el-table-column label="分包内容" align="center" prop="content" />
|
||||
<el-table-column label="中标单位" align="center" prop="winningBidder" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" @click="handleChooseData(scope.row)">选择</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="dialogVisible = false"> 关闭 </el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import FileUpload from '@/components/FileUpload';
|
||||
import { addExpensesContract, getTenderPlan } from '@/api/ctr/expensesContract';
|
||||
import { addIncomeContract, getInfoByProjectId } from '@/api/ctr/incomeContract';
|
||||
import { addExpensesContract, getTenderPlan } from '@/api/ctr/expensesContract';
|
||||
import { addIncomeContract, getInfoByProjectId } from '@/api/ctr/incomeContract';
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
|
||||
const active = ref(0);
|
||||
const contract_type = ref("")
|
||||
const form = ref({ payType: 1 })
|
||||
const fileList = ref([])
|
||||
const tempFileList = ref([])
|
||||
const contract_type = ref('');
|
||||
const form = ref({ payType: 1 });
|
||||
const fileList = ref([]);
|
||||
const tempFileList = ref([]);
|
||||
const { proxy } = getCurrentInstance();
|
||||
const userStore = useUserStore();
|
||||
const planList = ref([]);
|
||||
const dialogVisible = ref(false);
|
||||
|
||||
const { expenses_contract_type, income_contract_type } = toRefs(
|
||||
proxy?.useDict('income_contract_type', 'expenses_contract_type')
|
||||
);
|
||||
const { expenses_contract_type, income_contract_type } = toRefs(proxy?.useDict('income_contract_type', 'expenses_contract_type'));
|
||||
const fileRef = ref(null);
|
||||
const incomeContractFormRef = ref(null);
|
||||
const expensesContractFormRef = ref(null);
|
||||
const payMentRef = ref(null);
|
||||
const incomeContractFormRules = {
|
||||
contractCode: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
|
||||
contractType: [{ required: true, message: '请选择合同类型', trigger: 'change' }],
|
||||
contractOwner: [{ required: true, message: '请输入业主单位', trigger: 'blur' }],
|
||||
amount: [{ required: true, message: '请输入合同金额', trigger: 'blur' }],
|
||||
remark: [{ required: false, message: '请输入备注', trigger: 'blur' }],
|
||||
contractCode: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
|
||||
contractType: [{ required: true, message: '请选择合同类型', trigger: 'change' }],
|
||||
contractOwner: [{ required: true, message: '请输入业主单位', trigger: 'blur' }],
|
||||
amount: [{ required: true, message: '请输入合同金额', trigger: 'blur' }],
|
||||
remark: [{ required: false, message: '请输入备注', trigger: 'blur' }]
|
||||
};
|
||||
const expensesContractFormRules = {
|
||||
contractCode: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
|
||||
contractType: [{ required: true, message: '请选择合同类型', trigger: 'change' }],
|
||||
contractCode: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
|
||||
contractType: [{ required: true, message: '请选择合同类型', trigger: 'change' }],
|
||||
|
||||
contractSupplier: [{ required: true, message: '请输入供应商', trigger: 'blur' }],
|
||||
amount: [{ required: true, message: '请输入合同金额', trigger: 'blur' }],
|
||||
tenderId: [{ required: true, message: '请选择招标计划', trigger: 'blur' }],
|
||||
contractSupplier: [{ required: true, message: '请输入供应商', trigger: 'blur' }],
|
||||
amount: [{ 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 = {
|
||||
payType: [{ required: true, message: '请选择支付方式', trigger: 'change' }],
|
||||
advancePayRatio: [{ required: true, message: '请输入预付款比例', trigger: 'blur' }],
|
||||
balancePayRatio: [{ required: true, message: '请输入尾款比例', trigger: 'blur' }],
|
||||
assuranceDepositRatio: [{ required: true, message: '请输入质保金比例', trigger: 'blur' }],
|
||||
|
||||
payType: [{ required: true, message: '请选择支付方式', trigger: 'change' }],
|
||||
advancePayRatio: [{ required: true, message: '请输入预付款比例', trigger: 'blur' }],
|
||||
balancePayRatio: [{ required: true, message: '请输入尾款比例', trigger: 'blur' }],
|
||||
assuranceDepositRatio: [{ required: true, message: '请输入质保金比例', trigger: 'blur' }]
|
||||
};
|
||||
|
||||
const project = computed(() => {
|
||||
console.log(111);
|
||||
console.log(111);
|
||||
|
||||
return JSON.parse(localStorage.getItem("selectedProject"))
|
||||
return JSON.parse(localStorage.getItem('selectedProject'));
|
||||
});
|
||||
|
||||
const payRatioComputed = computed({
|
||||
get: () => {
|
||||
const { advancePayRatio = 0, balancePayRatio = 0, assuranceDepositRatio = 0 } = form.value;
|
||||
const total = 100 - (advancePayRatio + balancePayRatio + assuranceDepositRatio);
|
||||
// form.value.payRatio = total;
|
||||
return total;
|
||||
},
|
||||
// 只读
|
||||
set: () => { }
|
||||
get: () => {
|
||||
const { advancePayRatio = 0, balancePayRatio = 0, assuranceDepositRatio = 0 } = form.value;
|
||||
const total = 100 - (advancePayRatio + balancePayRatio + assuranceDepositRatio);
|
||||
// form.value.payRatio = total;
|
||||
return total;
|
||||
},
|
||||
// 只读
|
||||
set: () => {}
|
||||
});
|
||||
const checkContractType = (type) => {
|
||||
contract_type.value = type;
|
||||
form.value.contract_type = type;
|
||||
active.value = 1;
|
||||
form.value.step = active.value;
|
||||
contract_type.value = type;
|
||||
form.value.contract_type = type;
|
||||
active.value = 1;
|
||||
form.value.step = active.value;
|
||||
};
|
||||
const onUploadSuccess = (data) => {
|
||||
fileList.value = data
|
||||
}
|
||||
fileList.value = data;
|
||||
};
|
||||
const back = async (reset) => {
|
||||
console.log(active.value);
|
||||
console.log(active.value);
|
||||
|
||||
if (reset) {
|
||||
await ElMessageBox.confirm('返回上一步将清空目前填写的内容,确定返回?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
resetForm();
|
||||
active.value--;
|
||||
}).catch(() => {
|
||||
return;
|
||||
});
|
||||
} else {
|
||||
if (reset) {
|
||||
await ElMessageBox.confirm('返回上一步将清空目前填写的内容,确定返回?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
resetForm();
|
||||
active.value--;
|
||||
}
|
||||
console.log(active.value);
|
||||
|
||||
form.value.step = active.value;
|
||||
})
|
||||
.catch(() => {
|
||||
return;
|
||||
});
|
||||
} else {
|
||||
active.value--;
|
||||
}
|
||||
console.log(active.value);
|
||||
|
||||
form.value.step = active.value;
|
||||
};
|
||||
const next = async () => {
|
||||
if (contract_type.value === 'income') {
|
||||
await incomeContractFormRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
active.value++;
|
||||
} else {
|
||||
ElMessage.error('请填写完整的收入合同信息');
|
||||
}
|
||||
});
|
||||
} else if (contract_type.value === 'expenses') {
|
||||
await expensesContractFormRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
active.value++;
|
||||
} else {
|
||||
ElMessage.error('请填写完整的支出合同信息');
|
||||
}
|
||||
});
|
||||
}
|
||||
console.log(active.value);
|
||||
if (contract_type.value === 'income') {
|
||||
await incomeContractFormRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
active.value++;
|
||||
} else {
|
||||
ElMessage.error('请填写完整的收入合同信息');
|
||||
}
|
||||
});
|
||||
} else if (contract_type.value === 'expenses') {
|
||||
await expensesContractFormRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
active.value++;
|
||||
} else {
|
||||
ElMessage.error('请填写完整的支出合同信息');
|
||||
}
|
||||
});
|
||||
}
|
||||
console.log(active.value);
|
||||
|
||||
form.value.step = active.value;
|
||||
form.value.step = active.value;
|
||||
};
|
||||
const resetForm = () => {
|
||||
form.value = {
|
||||
payType: 1,
|
||||
contractCode: '',
|
||||
contractType: '',
|
||||
contractOwner: '',
|
||||
contractedContent: '',
|
||||
amount: '',
|
||||
remark: '',
|
||||
advancePayRatio: '',
|
||||
balancePayRatio: '',
|
||||
assuranceDepositRatio: '',
|
||||
payRatio: ''
|
||||
};
|
||||
fileList.value = [];
|
||||
tempFileList.value = [];
|
||||
contract_type.value = '';
|
||||
setTimeout(() => {
|
||||
localStorage.removeItem("tempContractForm");
|
||||
}, 0);
|
||||
form.value = {
|
||||
payType: 1,
|
||||
contractCode: '',
|
||||
contractType: '',
|
||||
contractOwner: '',
|
||||
contractedContent: '',
|
||||
amount: '',
|
||||
remark: '',
|
||||
advancePayRatio: '',
|
||||
balancePayRatio: '',
|
||||
assuranceDepositRatio: '',
|
||||
payRatio: ''
|
||||
};
|
||||
fileList.value = [];
|
||||
tempFileList.value = [];
|
||||
contract_type.value = '';
|
||||
setTimeout(() => {
|
||||
localStorage.removeItem('tempContractForm');
|
||||
}, 0);
|
||||
};
|
||||
|
||||
const submitForm = async () => {
|
||||
await payMentRef.value.validate(async (valid) => {
|
||||
if (valid) {
|
||||
|
||||
if (payRatioComputed.value < 0) {
|
||||
|
||||
ElMessage.error('四项付款比例之和必须等于100%');
|
||||
return;
|
||||
}
|
||||
form.value.payRatio = payRatioComputed.value;
|
||||
|
||||
// 提交付款信息逻辑
|
||||
console.log('提交付款信息', form.value, fileList.value);
|
||||
// 这里可以调用API提交数据
|
||||
form.value.projectId = project.value.id;
|
||||
form.value.fileList = fileList.value.map((data) => {
|
||||
return {
|
||||
...data,
|
||||
fileName: data.name,
|
||||
fileUrl: data.url,
|
||||
}
|
||||
})
|
||||
if (contract_type.value === 'income') {
|
||||
await addIncomeContract({ ...form.value });
|
||||
} else if (contract_type.value === 'expenses') {
|
||||
await addExpensesContract({ ...form.value });
|
||||
}
|
||||
resetForm();
|
||||
ElMessage.success('合同提交成功');
|
||||
// active.value = 0; // 重置步骤
|
||||
if (contract_type.value === 'income') {
|
||||
proxy.$router.push('/ctr/incomeContract');
|
||||
} else {
|
||||
proxy.$router.push('/ctr/expensesContract');
|
||||
}
|
||||
} else {
|
||||
ElMessage.error('请填写完整的付款信息');
|
||||
}
|
||||
});
|
||||
// if (contract_type.value === 'income') {
|
||||
// const incomeContractFormRef = ref(null);
|
||||
// await incomeContractFormRef.value.validate(async (valid) => {
|
||||
// if (valid) {
|
||||
// // 提交收入合同逻辑
|
||||
// console.log('提交收入合同', form.value, fileList.value);
|
||||
// // 这里可以调用API提交数据
|
||||
// resetForm();
|
||||
// ElMessage.success('收入合同提交成功');
|
||||
// } else {
|
||||
// ElMessage.error('请填写完整的收入合同信息');
|
||||
// }
|
||||
// });
|
||||
// } else if (contract_type.value === 'expenses') {
|
||||
// const expensesContractFormRef = ref(null);
|
||||
// await expensesContractFormRef.value.validate(async (valid) => {
|
||||
// if (valid) {
|
||||
// // 提交支出合同逻辑
|
||||
// console.log('提交支出合同', form.value, fileList.value);
|
||||
// // 这里可以调用API提交数据
|
||||
// resetForm();
|
||||
// ElMessage.success('支出合同提交成功');
|
||||
// } else {
|
||||
// ElMessage.error('请填写完整的支出合同信息');
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
}
|
||||
const handleChoose = async () => {
|
||||
if (!form.value.contractType) {
|
||||
ElMessage.error('请先选择合同类型');
|
||||
await payMentRef.value.validate(async (valid) => {
|
||||
if (valid) {
|
||||
if (payRatioComputed.value < 0) {
|
||||
ElMessage.error('四项付款比例之和必须等于100%');
|
||||
return;
|
||||
}
|
||||
const formData = {
|
||||
projectId: userStore.selectedProject.id,
|
||||
dictName: form.value.contractType,
|
||||
status: 1,
|
||||
}
|
||||
const { data } = await getTenderPlan(formData)
|
||||
if (data.length === 0) {
|
||||
ElMessage.warning('当前没有招标计划,请先创建招标计划');
|
||||
return;
|
||||
}
|
||||
planList.value = data
|
||||
dialogVisible.value = true;
|
||||
}
|
||||
form.value.payRatio = payRatioComputed.value;
|
||||
|
||||
}
|
||||
const handleChooseData = (row) => {
|
||||
form.value.tenderId = row.id;
|
||||
form.value.name = row.name;
|
||||
// form.value.contractPrice = row.contractPrice;
|
||||
form.value.content = row.content;
|
||||
form.value.contractSupplier = row.winningBidder;
|
||||
form.value.amount = row.contractPrice;
|
||||
dialogVisible.value = false;
|
||||
// 提交付款信息逻辑
|
||||
console.log('提交付款信息', form.value, fileList.value);
|
||||
// 这里可以调用API提交数据
|
||||
form.value.projectId = project.value.id;
|
||||
form.value.fileList = fileList.value.map((data) => {
|
||||
return {
|
||||
...data,
|
||||
fileName: data.name,
|
||||
fileUrl: data.url
|
||||
};
|
||||
});
|
||||
if (contract_type.value === 'income') {
|
||||
await addIncomeContract({ ...form.value });
|
||||
} else if (contract_type.value === 'expenses') {
|
||||
await addExpensesContract({ ...form.value });
|
||||
}
|
||||
resetForm();
|
||||
ElMessage.success('合同提交成功');
|
||||
// active.value = 0; // 重置步骤
|
||||
if (contract_type.value === 'income') {
|
||||
proxy.$router.push('/ctr/incomeContract');
|
||||
} else {
|
||||
proxy.$router.push('/ctr/expensesContract');
|
||||
}
|
||||
} else {
|
||||
ElMessage.error('请填写完整的付款信息');
|
||||
}
|
||||
});
|
||||
// if (contract_type.value === 'income') {
|
||||
// const incomeContractFormRef = ref(null);
|
||||
// await incomeContractFormRef.value.validate(async (valid) => {
|
||||
// if (valid) {
|
||||
// // 提交收入合同逻辑
|
||||
// console.log('提交收入合同', form.value, fileList.value);
|
||||
// // 这里可以调用API提交数据
|
||||
// resetForm();
|
||||
// ElMessage.success('收入合同提交成功');
|
||||
// } else {
|
||||
// ElMessage.error('请填写完整的收入合同信息');
|
||||
// }
|
||||
// });
|
||||
// } else if (contract_type.value === 'expenses') {
|
||||
// const expensesContractFormRef = ref(null);
|
||||
// await expensesContractFormRef.value.validate(async (valid) => {
|
||||
// if (valid) {
|
||||
// // 提交支出合同逻辑
|
||||
// console.log('提交支出合同', form.value, fileList.value);
|
||||
// // 这里可以调用API提交数据
|
||||
// resetForm();
|
||||
// ElMessage.success('支出合同提交成功');
|
||||
// } else {
|
||||
// ElMessage.error('请填写完整的支出合同信息');
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
};
|
||||
watch(form, (val) => {
|
||||
localStorage.setItem("tempContractForm", JSON.stringify({ ...val, fileList: fileList.value }));
|
||||
}, { deep: true });
|
||||
watch(fileList, (val) => {
|
||||
localStorage.setItem("tempContractForm", JSON.stringify({ ...form.value, fileList: val }));
|
||||
}, { deep: true });
|
||||
const handleChoose = async () => {
|
||||
if (!form.value.contractType) {
|
||||
ElMessage.error('请先选择合同类型');
|
||||
return;
|
||||
}
|
||||
const formData = {
|
||||
projectId: userStore.selectedProject.id,
|
||||
dictName: form.value.contractType,
|
||||
status: 1
|
||||
};
|
||||
const { data } = await getTenderPlan(formData);
|
||||
if (data.length === 0) {
|
||||
ElMessage.warning('当前没有招标计划,请先创建招标计划');
|
||||
return;
|
||||
}
|
||||
planList.value = data;
|
||||
dialogVisible.value = true;
|
||||
};
|
||||
const handleChooseData = (row) => {
|
||||
form.value.tenderId = row.id;
|
||||
form.value.name = row.name;
|
||||
// form.value.contractPrice = row.contractPrice;
|
||||
form.value.content = row.content;
|
||||
form.value.contractSupplier = row.winningBidder;
|
||||
form.value.amount = row.contractPrice;
|
||||
dialogVisible.value = false;
|
||||
};
|
||||
watch(
|
||||
form,
|
||||
(val) => {
|
||||
localStorage.setItem('tempContractForm', JSON.stringify({ ...val, fileList: fileList.value }));
|
||||
},
|
||||
{ deep: true }
|
||||
);
|
||||
watch(
|
||||
fileList,
|
||||
(val) => {
|
||||
localStorage.setItem('tempContractForm', JSON.stringify({ ...form.value, fileList: val }));
|
||||
},
|
||||
{ deep: true }
|
||||
);
|
||||
// 获取投标列表
|
||||
const getInfoByProjectIdList = async () => {
|
||||
const res = await getInfoByProjectId({ projectId: userStore.selectedProject.id, });
|
||||
console.log(res);
|
||||
form.value.contractOwner = res.data.planDuration;
|
||||
}
|
||||
const res = await getInfoByProjectId({ projectId: userStore.selectedProject.id });
|
||||
console.log(res);
|
||||
form.value.contractOwner = res.data.planDuration;
|
||||
};
|
||||
onMounted(() => {
|
||||
getInfoByProjectIdList();
|
||||
getInfoByProjectIdList();
|
||||
|
||||
const tempForm = localStorage.getItem("tempContractForm");
|
||||
if (tempForm) {
|
||||
ElMessageBox.confirm('检测到有未完成的合同录入,是否继续?', '提示', {
|
||||
confirmButtonText: '继续',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
const t = JSON.parse(tempForm);
|
||||
const { fileList: files, ...rest } = JSON.parse(tempForm);
|
||||
form.value = rest;
|
||||
fileList.value = files || [];
|
||||
tempFileList.value = files || [];
|
||||
contract_type.value = form.value.contract_type;
|
||||
active.value = form.value.step || 0;
|
||||
|
||||
}).catch(() => {
|
||||
localStorage.removeItem("tempContractForm");
|
||||
});
|
||||
|
||||
}
|
||||
const tempForm = localStorage.getItem('tempContractForm');
|
||||
if (tempForm) {
|
||||
ElMessageBox.confirm('检测到有未完成的合同录入,是否继续?', '提示', {
|
||||
confirmButtonText: '继续',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
const t = JSON.parse(tempForm);
|
||||
const { fileList: files, ...rest } = JSON.parse(tempForm);
|
||||
form.value = rest;
|
||||
fileList.value = files || [];
|
||||
tempFileList.value = files || [];
|
||||
contract_type.value = form.value.contract_type;
|
||||
active.value = form.value.step || 0;
|
||||
})
|
||||
.catch(() => {
|
||||
localStorage.removeItem('tempContractForm');
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.container {
|
||||
padding: 20px;
|
||||
padding: 20px;
|
||||
|
||||
.content {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 30px;
|
||||
flex-direction: column;
|
||||
}
|
||||
.content {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 30px;
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@ -5,7 +5,12 @@
|
||||
<div class="bg-gradient-to-r from-blue-500 to-blue-600 text-white p-6">
|
||||
<h2 class="text-2xl font-bold flex items-center"><i class="el-icon-user-circle mr-3"></i>人员配置</h2>
|
||||
<p class="text-blue-100 mt-2 opacity-90">请配置项目相关负责人员信息</p>
|
||||
<el-button @click="disabledForm = false" class="px-8 py-2.5 transition-all duration-300 font-medium" v-if="disabledForm">
|
||||
<el-button
|
||||
@click="disabledForm = false"
|
||||
v-hasPermi="['design:user:list']"
|
||||
class="px-8 py-2.5 transition-all duration-300 font-medium"
|
||||
v-if="disabledForm"
|
||||
>
|
||||
点击编辑
|
||||
</el-button>
|
||||
</div>
|
||||
@ -220,7 +225,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 提交按钮区域 -->
|
||||
<div class="flex justify-center space-x-6 mt-8 pt-6 border-t border-gray-100">
|
||||
<div class="flex justify-center space-x-6 mt-8 pt-6 border-t border-gray-100">
|
||||
<el-button
|
||||
type="primary"
|
||||
size="large"
|
||||
|
@ -436,6 +436,8 @@ const disabledForm = ref(true); // 初始禁用表单(编辑时开启)
|
||||
|
||||
/** 查询当前部门的所有用户(确保用户列表有效) */
|
||||
const getDeptAllUser = async (deptId: number | undefined) => {
|
||||
console.log(1111111111111);
|
||||
|
||||
if (!deptId) {
|
||||
ElMessage.warning('请先选择部门');
|
||||
return;
|
||||
|
@ -17,6 +17,7 @@
|
||||
<el-select
|
||||
:disabled="disabledAll"
|
||||
v-model="form.userId"
|
||||
filterable
|
||||
placeholder="请选择收资人"
|
||||
class="w-full transition-all duration-300 border-gray-300 focus:border-blue-400 focus:ring-1 focus:ring-blue-400"
|
||||
>
|
||||
@ -93,6 +94,7 @@
|
||||
<el-select
|
||||
:disabled="disabledAll"
|
||||
v-model="item.userId"
|
||||
filterable
|
||||
placeholder="请选择人员"
|
||||
class="w-full transition-all duration-300 border-gray-300 focus:border-blue-400 focus:ring-1 focus:ring-blue-400"
|
||||
>
|
||||
@ -112,7 +114,7 @@
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="submitForm"
|
||||
v-hasPermi="['design:collect:add']"
|
||||
v-hasPermi="['design:collect:batch']"
|
||||
v-if="!form.id || form.status == 'draft'"
|
||||
size="large"
|
||||
class="px-8 transition-all hover:bg-blue-600"
|
||||
@ -181,6 +183,7 @@ import { systemUserList } from '@/api/design/appointment';
|
||||
import { collectBatch, byProjectId, exportWord } from '@/api/design/received';
|
||||
import { getUser } from '@/api/system/user';
|
||||
import type { ComponentInternalInstance, ElFormInstance } from 'element-plus';
|
||||
import { getInfo } from '@/api/login';
|
||||
|
||||
// 全局实例与状态管理
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
@ -202,7 +205,7 @@ const disabledAll = ref(false); // 表单是否全部禁用
|
||||
const form = reactive({
|
||||
projectId: currentProject.value?.id,
|
||||
userId: '', // 收资人
|
||||
user_major: '', // 专业
|
||||
user_major: '1', // 专业
|
||||
phone: '', // 电话
|
||||
email: '', // 邮箱
|
||||
id: '', // 表单ID
|
||||
@ -273,6 +276,8 @@ const byProjectIdAll = async () => {
|
||||
disabledAll.value = false;
|
||||
|
||||
if (res.code == 200 && res.data) {
|
||||
console.log('🚀 ~ byProjectIdAll ~ res:', res);
|
||||
|
||||
const data = res.data;
|
||||
// 回显基本信息
|
||||
form.userId = data.userId || '';
|
||||
@ -415,7 +420,7 @@ const onView = () => {
|
||||
/** 获取当前用户详情(回显个人信息) */
|
||||
const getUserDetail = async () => {
|
||||
try {
|
||||
const res = await getUser(userId.value);
|
||||
const res = await getInfo();
|
||||
if (res.data?.user) {
|
||||
form.userId = res.data.user.userId;
|
||||
form.phone = res.data.user.phonenumber || '';
|
||||
|
@ -10,7 +10,7 @@
|
||||
@click="isDisabled = false"
|
||||
class="px-8 py-2.5 transition-all duration-300 font-medium"
|
||||
v-if="isDisabled"
|
||||
v-hasPermi="['ailiaoshebei:purchaseUser:byProject']"
|
||||
v-hasPermi="['cailiaoshebei:purchaseUser:addOrUpdate']"
|
||||
>
|
||||
点击编辑
|
||||
</el-button>
|
||||
@ -38,7 +38,7 @@
|
||||
@click="submitForm"
|
||||
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"
|
||||
v-hasPermi="['cailiaoshebei:purchaseUser:add']"
|
||||
v-hasPermi="['cailiaoshebei:purchaseUser:addOrUpdate']"
|
||||
>
|
||||
确认提交
|
||||
</el-button>
|
||||
@ -121,6 +121,7 @@ const designUser = async () => {
|
||||
return;
|
||||
}
|
||||
Object.assign(form, res.data);
|
||||
// form.userId = res.data.userId;
|
||||
isDisabled.value = true;
|
||||
}
|
||||
} catch (error) {
|
||||
|
@ -8,7 +8,7 @@
|
||||
<el-date-picker v-model="queryParams.planMonth" type="month" value-format="YYYY-MM" placeholder="请选择计划月份" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产值类型" prop="valueType">
|
||||
<el-select v-model="queryParams.valueType" placeholder="请选择产值类型">
|
||||
<el-select v-model="queryParams.valueType" placeholder="全部">
|
||||
<el-option v-for="item in out_value_type" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@ -40,9 +40,9 @@
|
||||
<el-table v-loading="loading" :data="monthPlanList">
|
||||
<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="planValue" />
|
||||
<el-table-column label="完成产值" align="center" prop="completeValue" />
|
||||
<el-table-column label="差额" align="center" prop="differenceValue" />
|
||||
<el-table-column label="计划产值(元)" align="center" prop="planValue" />
|
||||
<el-table-column label="完成产值(元)" align="center" prop="completeValue" />
|
||||
<el-table-column label="差额(元)" align="center" prop="differenceValue" />
|
||||
<el-table-column label="产值类型" align="center" prop="valueType">
|
||||
<template #default="scope">
|
||||
<dict-tag :options="out_value_type" :value="scope.row.valueType" />
|
||||
@ -72,17 +72,17 @@
|
||||
</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-form ref="monthPlanFormRef" :model="form" :rules="rules" label-width="120px">
|
||||
<el-form-item label="类型" prop="planValue">
|
||||
<el-select v-model="form.type" placeholder="请选择类型">
|
||||
<el-option label="对甲" value="1" />
|
||||
<el-option label="对乙" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划产值" prop="planValue">
|
||||
<el-form-item label="计划产值(元)" prop="planValue">
|
||||
<el-input v-model="form.planValue" placeholder="请输入计划产值" type="number" />
|
||||
</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" placeholder="请选择计划月份" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产值类型" prop="valueType">
|
||||
@ -113,6 +113,13 @@ import { useUserStoreHook } from '@/store/modules/user';
|
||||
const userStore = useUserStoreHook();
|
||||
// 从 store 中获取项目列表和当前选中的项目
|
||||
const currentProject = computed(() => userStore.selectedProject);
|
||||
const month = computed(() => {
|
||||
const now = new Date();
|
||||
const year = now.getFullYear();
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0'); // getMonth() 从0开始
|
||||
const currentMonth = `${year}-${month}`;
|
||||
return currentMonth;
|
||||
});
|
||||
const monthPlanList = ref<MonthPlanVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
@ -152,7 +159,8 @@ const data = reactive({
|
||||
planValue: undefined,
|
||||
completeValue: undefined,
|
||||
differenceValue: undefined,
|
||||
planMonth: undefined,
|
||||
planMonth: month.value,
|
||||
|
||||
valueType: undefined,
|
||||
planAuditStatus: undefined,
|
||||
completeAuditStatus: undefined,
|
||||
|
@ -32,10 +32,10 @@
|
||||
|
||||
<el-table v-loading="loading" :data="monthPlanAuditList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="设计产值" align="center" prop="designValue" />
|
||||
<el-table-column label="采购产值" align="center" prop="purchaseValue" />
|
||||
<el-table-column label="施工产值" align="center" prop="constructionValue" />
|
||||
<el-table-column label="总产值" align="center" prop="totalValue" />
|
||||
<el-table-column label="设计产值(元)" align="center" prop="designValue" />
|
||||
<el-table-column label="采购产值(元)" align="center" prop="purchaseValue" />
|
||||
<el-table-column label="施工产值(元)" align="center" prop="constructionValue" />
|
||||
<el-table-column label="总产值(元)" align="center" prop="totalValue" />
|
||||
<el-table-column label="计划月份" align="center" prop="planMonth" />
|
||||
</el-table>
|
||||
|
||||
@ -44,16 +44,16 @@
|
||||
<!-- 添加或修改审核通过月度产值计划对话框 -->
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="monthPlanAuditFormRef" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="设计产值" prop="designValue">
|
||||
<el-form-item label="设计产值(元)" prop="designValue">
|
||||
<el-input v-model="form.designValue" placeholder="请输入设计产值" />
|
||||
</el-form-item>
|
||||
<el-form-item label="采购产值" prop="purchaseValue">
|
||||
<el-form-item label="采购产值(元)" prop="purchaseValue">
|
||||
<el-input v-model="form.purchaseValue" placeholder="请输入采购产值" />
|
||||
</el-form-item>
|
||||
<el-form-item label="施工产值" prop="constructionValue">
|
||||
<el-form-item label="施工产值(元)" prop="constructionValue">
|
||||
<el-input v-model="form.constructionValue" placeholder="请输入施工产值" />
|
||||
</el-form-item>
|
||||
<el-form-item label="总产值" prop="totalValue">
|
||||
<el-form-item label="总产值(元)" prop="totalValue">
|
||||
<el-input v-model="form.totalValue" placeholder="请输入总产值" />
|
||||
</el-form-item>
|
||||
<el-form-item label="计划月份" prop="planMonth">
|
||||
@ -80,6 +80,13 @@ import { useUserStoreHook } from '@/store/modules/user';
|
||||
const userStore = useUserStoreHook();
|
||||
// 从 store 中获取项目列表和当前选中的项目
|
||||
const currentProject = computed(() => userStore.selectedProject);
|
||||
const month = computed(() => {
|
||||
const now = new Date();
|
||||
const year = now.getFullYear();
|
||||
const month = String(now.getMonth() + 1).padStart(2, '0'); // getMonth() 从0开始
|
||||
const currentMonth = `${year}-${month}`;
|
||||
return currentMonth;
|
||||
});
|
||||
const monthPlanAuditList = ref<MonthPlanAuditVO[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
const loading = ref(true);
|
||||
@ -116,7 +123,7 @@ const data = reactive<PageData<MonthPlanAuditForm, MonthPlanAuditQuery>>({
|
||||
purchaseValue: undefined,
|
||||
constructionValue: undefined,
|
||||
totalValue: undefined,
|
||||
planMonth: undefined,
|
||||
planMonth: month.value,
|
||||
params: {}
|
||||
},
|
||||
rules: {
|
||||
|
@ -46,7 +46,9 @@
|
||||
<el-table-column type="expand" width="50">
|
||||
<template #default="{ row }">
|
||||
<div class="w212.25 ml-12.5">
|
||||
<el-button class="mb" type="primary" size="small" @click="handleOpenSetChild(row.id)" icon="plus">添加子项目</el-button>
|
||||
<el-button class="mb" type="primary" size="small" v-hasPermi="['project:project:add']" @click="handleOpenSetChild(row.id)" icon="plus"
|
||||
>添加子项目</el-button
|
||||
>
|
||||
|
||||
<el-table :data="row.children" border stripe>
|
||||
<el-table-column label="序号" type="index" width="55" align="center" />
|
||||
@ -73,7 +75,7 @@
|
||||
uploadUrl="/project/projectFile/upload/dxf"
|
||||
:data="{ projectId: scope.row.id }"
|
||||
>
|
||||
<el-button link type="primary" icon="upload">上传DXF </el-button>
|
||||
<el-button link type="primary" icon="upload" v-hasPermi="['project:projectFile:add']">上传DXF </el-button>
|
||||
</file-upload>
|
||||
<el-button
|
||||
link
|
||||
@ -145,7 +147,9 @@
|
||||
<el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="400">
|
||||
<template #default="scope">
|
||||
<el-space>
|
||||
<el-button link type="primary" icon="FolderOpened" @click="handleShowUpload(scope.row)">导入安全协议书 </el-button>
|
||||
<el-button link type="primary" icon="FolderOpened" @click="handleShowUpload(scope.row)" v-hasPermi="['project:project:edit']"
|
||||
>导入安全协议书
|
||||
</el-button>
|
||||
|
||||
<el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['project:project:edit']">修改 </el-button>
|
||||
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['project:project:remove']">删除 </el-button>
|
||||
|
@ -17,10 +17,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="toggleExpandAll(true)">一键展开</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="toggleExpandAll(false)">一键收起</el-button>
|
||||
<el-button type="primary" @click="toggleExpandAll">{{ isExpandAll ? '一键收起' : '一键展开' }}</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
@ -163,11 +160,12 @@ const changeSheet = (val: any) => {
|
||||
getTableData();
|
||||
};
|
||||
//展开树
|
||||
const toggleExpandAll = (isExpand: boolean) => {
|
||||
const toggleExpandAll = () => {
|
||||
isExpandAll.value = !isExpandAll.value;
|
||||
console.log(isExpandAll.value);
|
||||
tableData.value.forEach((row) => {
|
||||
tableRef.value.toggleRowExpansion(row, isExpand);
|
||||
tableRef.value.toggleRowExpansion(row, isExpandAll.value);
|
||||
});
|
||||
isExpandAll.value = isExpand;
|
||||
};
|
||||
|
||||
//获取版本号
|
||||
|
@ -167,10 +167,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="toggleExpandAll(true)">一键展开</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="toggleExpandAll(false)">一键收起</el-button>
|
||||
<el-button type="primary" @click="toggleExpandAll">{{ isExpandAll ? '一键收起' : '一键展开' }}</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
@ -514,11 +511,12 @@ const changeSheet = () => {
|
||||
getTreeList();
|
||||
};
|
||||
|
||||
const toggleExpandAll = (isExpand: boolean) => {
|
||||
const toggleExpandAll = () => {
|
||||
isExpandAll.value = !isExpandAll.value;
|
||||
console.log(isExpandAll.value);
|
||||
treeData.value.forEach((row) => {
|
||||
treeTableRef.value.toggleRowExpansion(row, isExpand);
|
||||
treeTableRef.value.toggleRowExpansion(row, isExpandAll.value);
|
||||
});
|
||||
isExpandAll.value = isExpand;
|
||||
};
|
||||
//打开获取表数据
|
||||
const getTreeList = async () => {
|
||||
|
@ -277,7 +277,7 @@
|
||||
<el-form-item label="入库资料" prop="inputFile">
|
||||
<template #label> <span class="text-red">*</span> 入库资料 </template>
|
||||
<file-upload
|
||||
v-model="form.inputFile"
|
||||
v-model="form.fileId"
|
||||
:fileType="['doc', 'docx', 'pdf']"
|
||||
:autoUpload="false"
|
||||
ref="fileUploadRef"
|
||||
@ -289,22 +289,7 @@
|
||||
@handleChange="change"
|
||||
showFileList
|
||||
>
|
||||
<div>
|
||||
<el-button type="primary">上传文件</el-button><br />
|
||||
<transition-group
|
||||
class="upload-file-list el-upload-list el-upload-list--text"
|
||||
name="el-fade-in-linear"
|
||||
tag="ul"
|
||||
@click.stop
|
||||
v-if="fileUrl"
|
||||
>
|
||||
<li style="margin-top: 10px" class="el-upload-list__item ele-upload-list__item-content">
|
||||
<el-link :href="`${fileUrl}`" :underline="false" target="_blank">
|
||||
<el-button class="el-icon-document"> 查看文件 </el-button>
|
||||
</el-link>
|
||||
</li>
|
||||
</transition-group>
|
||||
</div>
|
||||
<div><el-button type="primary">上传文件</el-button><br /></div>
|
||||
</file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
Reference in New Issue
Block a user