Commit c06c6cb1 authored by ZhangRunSong's avatar ZhangRunSong
parents e08e9fb6 f46ab241
import request from "../../utils/request.js";
// 1.项目费用申请审批
//获取所有项目名称(查询下拉框)
export function getProjectName() {
return request({
url: '/projectCostRequest/projectAllList',
method: 'get'
})
}
//根据id获取审批流程
export function getApproveNodeList(id) {
return request({
url: '/approvalConfiguration/getNodeList/'+id,
method: 'get'
})
}
//获取当前用户角色信息
export function getRoleId() {
return request({
url: '/expenseApproval/getAllRoleList',
method: 'get'
})
}
......@@ -115,6 +115,7 @@
placeholder="选择日期"
style="width: 100%"
:disabled-date="pickerOptions.disabledDate"
/>
</el-form-item>
<el-form-item
......
......@@ -16,17 +16,17 @@
>
<el-row :gutter="150">
<el-col :span="10">
<el-form-item label="项目名称" prop="projectName">
<el-form-item label="项目名称">
<!-- <el-select v-model="ruleForm.projectName" placeholder="请输入项目名称" clearable>-->
<!-- <el-option label="Zone one" value="shanghai" />-->
<!-- <el-option label="Zone two" value="beijing" />-->
<!-- </el-select>-->
<el-input v-model="ruleForm.projectName" placeholder="请输入项目名称" />
<el-input disabled v-model="ruleForm.projectName" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目编号" prop="projectNumber">
<el-form-item label="项目编号" >
<el-input v-model="ruleForm.projectNumber" placeholder="请输入项目编号" disabled/>
</el-form-item>
<el-form-item label="项目经理" prop="userName">
<el-form-item label="项目经理">
<el-input v-model="ruleForm.userName" placeholder="请选择项目负责人" disabled/>
</el-form-item>
<el-form-item label="项目类型" prop="reimbursementType">
......@@ -35,7 +35,7 @@
<el-form-item label="事业部负责人" prop="departName">
<el-input v-model="ruleForm.departName" placeholder="请输入项目编号" disabled/>
</el-form-item>
<el-form-item label="报销月份" prop="reimbursement" >
<el-form-item label="报销月份" >
<el-date-picker
disabled
format="YYYY-MM"
......
......@@ -313,7 +313,7 @@ function getList() {
//获取所有项目
const getProjectList = () => {
projectList().then(res => {
// console.log("我是666",res.data)
// Object.assign(projectOption, res.data);
projectOption.value = res.data.map(item => {
return {
......@@ -321,7 +321,6 @@ const getProjectList = () => {
label: item.projectName
}
})
// console.log("我是项目数据",projectOption.value)
})
listUser().then(response => {
headOptions.value = response.rows.map(item => {
......@@ -346,16 +345,13 @@ const getAllshenpiList = ()=>{
return item.roleName
})
allList.value = res.data.nodeList
console.log("所有节点",allList.value)
})
}
const getPassNumber = (item)=>{
console.log("item",item)
let allNumber = 0
for(let item2 of item){
console.log(item2)
if(item2.status === 3){
allNumber += item2.totalMoney
}
......@@ -364,11 +360,9 @@ const getPassNumber = (item)=>{
}
const getNotPassNumber = (item)=>{
console.log("item",item)
let allNumber = 0
for(let item2 of item){
console.log(item2)
if(item2.status === 1){
allNumber += item2.totalMoney
}
......@@ -377,11 +371,9 @@ const getNotPassNumber = (item)=>{
}
const getAllPassNumber = (item)=>{
console.log("item",item)
let allNumber = 0
for(let item2 of item){
console.log(item2)
allNumber += item2.totalMoney
}
return allNumber
......@@ -390,7 +382,6 @@ const getAllPassNumber = (item)=>{
//获取列表第一个顶部信息
const getTopApproveInfo = ()=>{
let item2 = costManageList.value[0]
console.log("first",item2)
changProjectNumber.value = item2.projectNumber
let i = allList.value.findIndex((item)=>item.nodeId === item2.currentAuditRoleId)
stepActive.value = i+1
......@@ -403,8 +394,6 @@ const toggleSearch = () => {
/** 搜索按钮操作 */
function handleQuery() {
console.log("我是被选择的项目",queryParams.value.projectName)
// console.log("我的是时间哪去了",queryParams.value.reimbursement)
if(queryParams.value.reimbursementType === '1'){
isFoodType.value = false;
isTaxiType.value = true;
......@@ -428,7 +417,6 @@ function resetQuery() {
/** 删除按钮操作 */
function handleDelete(row) {
const Ids = row.id;
console.log("删除",Ids);
proxy.$modal.confirm('是否确认删除提交日期为"' + row.registrationTime + '"的数据项?').then(function () {
return deleteDailyReimburse(Ids);
}).then(() => {
......@@ -484,7 +472,6 @@ const handleHover = (row) => {
}
timer = setTimeout(() => {
changProjectNumber.value = row.projectNumber
console.log("摇起来",row)
let i = allList.value.findIndex((item)=>item.nodeId === row.currentAuditRoleId)
stepActive.value = i+1
}, 300);
......
......@@ -37,11 +37,27 @@
</div >
<div class="contentTable">
<!-- 按钮-->
<div style="margin-bottom: 30px">
<!-- 标题、按钮-->
<div class="shadow_box_bottom_add">
<div class="topDiv">
<span class="bold-text1" style="">项目费用报销审批</span>
</div>
<div>
<el-button class="el-button-defalut" type="default" @click="">一键驳回</el-button>
<el-button class="el-button-primary" style="margin-left: 20px" type="primary" @click="">一键通过</el-button>
</div>
</div>
<!-- 步骤条-->
<div class="shadow_box_bottom_step">
<text class="text1">审批流程</text>
<div class="text2">
<text>项目编号</text>
<text>{{changProjectNumber}}</text>
</div>
<div >
<FlowChart :dataList="list" :itemWidth="'130px'" :activeIndex="2"/>
</div>
</div>
<!-- 列表 -->
<el-table :data="ReimbursementRequestList" border>
<el-table-column type="selection" align="center"></el-table-column>
......@@ -83,6 +99,7 @@
<script setup>
import {reactive, ref} from "vue";
import FlowChart from '@/components/FlowChart/index.vue'
const ReimbursementRequestList = ref([
{
shenqingren:'张三',
......@@ -95,7 +112,8 @@ const ReimbursementRequestList = ref([
approvalStatus:'进行中'
}
]);
const list = ref(['个人','项目经理','事业部负责人','财务','总经理']) // 流程图内容,只有值
const allList = ref([]) // 流程图内容,值和角色id
const total = ref(0);
const queryParams = reactive({
pageNum:1,
......@@ -110,5 +128,55 @@ const queryParams = reactive({
<style scoped lang="scss">
//步骤条
.shadow_box_bottom_step {
display: flex;
margin-top: 10px;
margin-bottom: 20px;
padding: 20px 0px;
width: 100%;
justify-content: space-evenly;
align-items: center;
background-color: #F9F9FA;
.text1 {
font-size: 18px;
font-weight: 550;
}
.text2 {
display: flex;
flex-direction: column;
font-size: 18px;
align-items: center;
}
.step {
width: 80%;
}
}
//导航 、 按钮
.shadow_box_bottom_add {
display: flex;
width: 100%;
justify-content: space-between;
align-items: center;
padding:10px 0;
margin-bottom: 20px;
.topDiv{
display: flex;
align-items: center;
justify-content: space-between;
}
.bold-text1 {
border-bottom: 4px solid #0062FF;
padding-bottom: 22px;
height: 15px;
font-family: PingFangSC-Medium;
font-weight: 900;
font-size: 18px;
color: #0D162A;
letter-spacing: 0;
line-height: 15px;
}
}
</style>
......@@ -20,6 +20,7 @@
:value="dict.value"/>
</el-select>
</el-form-item>
<!-- 审批页的审批状态:待审批,已通过,未通过-->
<el-form-item label="审批状态">
<el-select style="width: 220px" v-model="queryParams.approveStatus" placeholder="请选择审批状态" clearable>
<el-option
......@@ -37,23 +38,53 @@
</div >
<div class="contentTable">
<!-- 按钮-->
<div style="margin-bottom: 30px">
<!-- 标题、按钮-->
<div class="shadow_box_bottom_add">
<div class="topDiv">
<span class="bold-text1" style="">项目费用申请审批</span>
</div>
<div>
<el-button class="el-button-defalut" type="default" @click="">一键驳回</el-button>
<el-button class="el-button-primary" style="margin-left: 20px" type="primary" @click="">一键通过</el-button>
</div>
</div>
<!-- 步骤条-->
<div class="shadow_box_bottom_step">
<text class="text1">审批流程</text>
<div class="text2">
<text>项目编号</text>
<text>{{changProjectNumber}}</text>
</div>
<div >
<FlowChart :dataList="list" :itemWidth="'130px'" :activeIndex="stepActive"/>
</div>
</div>
<!-- 列表 -->
<el-table :data="projectCostRequestList" border>
<el-table @cell-mouse-enter="handleHover" @cell-mouse-leave="handleLeave" :data="projectCostRequestList" border>
<el-table-column type="selection" align="center"></el-table-column>
<el-table-column prop="shenqingren" label="申请人" align="center"></el-table-column>
<el-table-column prop="createBy" label="申请人" align="center"></el-table-column>
<el-table-column prop="createTime" label="申请时间" align="center" min-width="100px"> </el-table-column>
<el-table-column prop="projectName" label="项目名称" align="center"></el-table-column>
<el-table-column prop="projectType" label="项目类型" align="center"></el-table-column>
<!-- <el-table-column prop="userName" label="事业部负责人" align="center"></el-table-column>-->
<el-table-column prop="expenseType" label="费用类型" align="center" ></el-table-column>
<el-table-column prop="userName" label="事业部负责人" align="center"></el-table-column>
<el-table-column prop="costType" label="费用类型" align="center" >
<template #default="scope">
<dict-tag :options="project_cost_type" :value="scope.row.costType"/>
</template>
</el-table-column>
<el-table-column prop="timeOfExpense" label="费用发生时间" align="center"></el-table-column>
<el-table-column prop="sumMoney" label="预计金额(元)" align="center"></el-table-column>
<el-table-column prop="approvalStatus" label="审批状态" align="center"></el-table-column>
<el-table-column prop="approvalStatus" label="整体审批状态" align="center">
<template #default="scope">
<dict-tag :options="project_cost_request_status" :value="scope.row.approveStatus"/>
</template>
</el-table-column>
<el-table-column prop="approvalStatus" label="当前审批状态" align="center">
<template #default="scope">
<!-- {{getCurrentApprovalStatus(scope.row)}}-->
<el-tag size="large" :type="getCurrentApprovalStatus(scope.row) === 0?'primary':getCurrentApprovalStatus(scope.row) > 0?'success':'info'">{{getCurrentApprovalStatus(scope.row) === 0?'待审批':getCurrentApprovalStatus(scope.row) > 0?'已通过':'待前审'}}</el-tag>
</template>
</el-table-column>
<el-table-column prop="detail" label="详情" align="center" width="100px">
<el-tooltip content="详情" placement="top">
<el-button link type="text" @click="handleView(scope.row)">
......@@ -85,35 +116,196 @@
</template>
<script setup>
import {reactive, ref} from "vue";
const projectCostRequestList = ref([
{
shenqingren:'张三',
createTime:'2025-03-18 10:10:34',
projectName:'餐饮项目',
projectType:'RL-人力',
userName:'ry',
expenseType:'办公费-宽带费',
timeOfExpense:'2025-02-01',
sumMoney:'200',
approvalStatus:'进行中'
}
]);
import {reactive, ref,onMounted} from "vue";
const router = useRouter()
import { useRouter } from 'vue-router'
const { proxy } = getCurrentInstance();
import FlowChart from '@/components/FlowChart/index.vue'
const { project_status, project_cost_type,project_cost_request_status,project_type} = proxy.useDict('project_status', 'project_cost_type','project_cost_request_status','project_type');
import {getProjectName, getApproveNodeList, getRoleId} from "../../../../api/examineAndApprove/examineAndApprove.js";
import {getCostRequestList} from "../../../../api/projectCostRequest/projectCostRequest.js";
const list = ref([]) // 流程图内容,只有值
const allList = ref([]) // 流程图内容,完整的列表
//当前登录用户角色组
const currentUserRoleInfoList = ref([])
const changProjectNumber = ref('')
const stepActive = ref(1)
const total = ref(0);
const queryParams = reactive({
pageNum:1,
pageSize:10,
projectName:null,
projectNumber:null,
userName:null,
projectType:null,
approveStatus:null
})
// 表单 获取所有项目名称
const projectNameList = ref([]);
const getAllProjectName=()=> {
getProjectName(queryParams).then(response => {
projectNameList.value = response.data;
});
}
getAllProjectName()
// 重置表单
const reset = () => {
queryParams.projectName = null
queryParams.projectType = null
queryParams.approveStatus = null
getList()
}
//获取当前用户角色信息
const getRoleInfo = ()=>{
getRoleId().then(res=>{
console.log("角色信息",res)
currentUserRoleInfoList.value = res.data
})
}
const getCurrentApprovalStatus = (row)=>{
let res = approvalStatusChange(row)
// if(res === 0) return "待审批"
// else if(res > 0) return "已通过"
// else if(res < 0) return "待前审"
return res
}
//获取当前审批状态 返回值0表示当前用户可以审核,大于0已经审核过了,小于0表示表示还没到当前用户
const approvalStatusChange = (row)=>{
let currentNodeId = row.currentAuditRoleId
console.log("当前审批状态",currentNodeId)
// 先根据每个节点的激活nodeid查找对应的角色id---也就是可以申请的角色
let activeRoleId = allList.value.find(item =>item.nodeId === currentNodeId).roleId
let lastCurrentRoleId = currentUserRoleInfoList.value[currentUserRoleInfoList.value.length - 1].roleId
//激活id的下标减去当前登录用户最后一个角色id的在整体审批列表差
//0表示当前用户可以审核,大于0已经审核过了,小于0表示表示还没到当前用户
return allList.value.findIndex(item =>item.roleId === activeRoleId) - allList.value.findIndex(item =>item.roleId === lastCurrentRoleId)
}
//获取列表第一个顶部信息
const getTopApproveInfo = ()=>{
let item2 = projectCostRequestList.value[0]
changProjectNumber.value = item2.projectNumber
let i = allList.value.findIndex((item)=>item.nodeId === item2.currentAuditRoleId)
if(i === -1) stepActive.value = 1
else stepActive.value = i+1
}
//表格的鼠标进入事件
let timer = null;
const handleHover = (row, column, cell, event) => {
//防抖
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
changProjectNumber.value = row.projectNumber
let i = allList.value.findIndex((item)=>item.nodeId === row.currentAuditRoleId)
if(i === -1) stepActive.value = 1
else stepActive.value = i+1
}, 300);
}
const handleLeave = () => {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
getTopApproveInfo()
}, 300);
}
//获取所有流程列表,根据审批id
const getNodeList = ()=>{
getApproveNodeList(14).then(res=>{
console.log("lkoi",res)
allList.value = res.data.nodeList
list.value = res.data.nodeList.map(item=>{
return item.roleName
})
})
}
// 列表
const projectCostRequestList = ref([]);
const getList=()=> {
getCostRequestList(queryParams).then(response => {
total.value = response.total
console.log("列表",response)
projectCostRequestList.value = response.rows;
getTopApproveInfo()
});
}
onMounted(()=>{
//获取列表
getList()
//获取所有审批列表
getNodeList()
//获取当前用户角色信息
getRoleInfo()
})
</script>
<style scoped lang="scss">
//步骤条
.shadow_box_bottom_step {
display: flex;
margin-top: 10px;
margin-bottom: 20px;
padding: 20px 0px;
width: 100%;
justify-content: space-evenly;
align-items: center;
background-color: #F9F9FA;
.text1 {
font-size: 18px;
font-weight: 550;
}
.text2 {
display: flex;
flex-direction: column;
font-size: 18px;
align-items: center;
}
.step {
width: 80%;
}
}
//导航 、 按钮
.shadow_box_bottom_add {
display: flex;
width: 100%;
justify-content: space-between;
align-items: center;
padding:10px 0;
margin-bottom: 20px;
.topDiv{
display: flex;
align-items: center;
justify-content: space-between;
}
.bold-text1 {
border-bottom: 4px solid #0062FF;
padding-bottom: 22px;
height: 15px;
font-family: PingFangSC-Medium;
font-weight: 900;
font-size: 18px;
color: #0D162A;
letter-spacing: 0;
line-height: 15px;
}
}
</style>
......@@ -93,10 +93,28 @@
</div>
<div class="contentTable">
<!-- 按钮-->
<div style="margin-bottom: 30px">
<el-button class="el-button-defalut" type="default" @click="">一键驳回</el-button>
<el-button class="el-button-primary" style="margin-left: 20px" type="primary" @click="">一键通过</el-button>
<!-- 标题、按钮-->
<div class="shadow_box_bottom_add">
<div class="topDiv">
<span class="bold-text1" style="">出差申请审批</span>
</div>
<!-- 按钮-->
<div>
<el-button class="el-button-defalut" type="default" @click="">一键驳回</el-button>
<el-button class="el-button-primary" style="margin-left: 20px" type="primary" @click="">一键通过</el-button>
</div>
</div>
<!-- 步骤条-->
<div class="shadow_box_bottom_step">
<text class="text1">审批流程</text>
<div class="text2">
<text>项目编号</text>
<text>{{}}</text>
</div>
<div >
<FlowChart :dataList="list" :itemWidth="'130px'" :activeIndex="2"/>
</div>
</div>
<!-- 表格数据 -->
<el-table :data="projectList" border style="width: 100%">
......@@ -113,7 +131,7 @@
<el-table-column label="审批状态" align="center" prop="projectStatus" ></el-table-column>
<el-table-column prop="detail" label="详情" align="center" width="100px">
<el-tooltip content="详情" placement="top">
<el-button link type="text" @click="handleView(scope.row)">
<el-button link type="text" @click="handleView()">
<img src="@/assets/icons/common/check.png" height="32" width="32"/>
</el-button>
</el-tooltip>
......@@ -126,29 +144,29 @@
</template>
</el-table-column>
</el-table>
<div style="padding-right: 35%;">
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</div>
<!-- <div style="padding-right: 35%;">-->
<!-- <pagination-->
<!-- v-show="total > 0"-->
<!-- :total="total"-->
<!-- v-model:page="queryParams.pageNum"-->
<!-- v-model:limit="queryParams.pageSize"-->
<!-- @pagination="getList"-->
<!-- />-->
<!-- </div>-->
</div>
<!-- 驳回弹出框-->
<el-dialog top="200px" style="width: 745px;height: 300px" v-model="dialogFormVisible" title="驳回" >
<el-dialog style="width: 745px;height: 300px" v-model="dialogFormVisible" title="驳回" >
<template #header>
<div style="margin-bottom:30px;color: #0D162AFF;font-family: PingFangSC-Regular;font-weight: 600;font-size: 16px;">驳回<el-divider /></div>
<div class="text_weight">驳回<el-divider /></div>
</template>
<div style="padding:5px" >
<div style="font-family: PingFangSC-Regular;font-weight: 550;font-size: 16px;color: #0D162A">驳回原因</div>
<div style="width: 680px;margin-top:10px"> <el-input :rows="3" type="textarea" v-model="form.name" placeholder="请输入驳回原因" /></div>
<div style="padding: 5px;display: flex;flex-direction:column;">
<div class="text">驳回原因</div>
<div style="width: 95%;margin-top:10px"> <el-input :rows="3" type="textarea" v-model="form.name" placeholder="请输入驳回原因" /></div>
</div>
<template #footer>
<div style="position: absolute;left: 60%;display: flex">
<div style="position: absolute;left: 35%;display: flex">
<el-button @click="dialogFormVisible = false" class="btn-B">取消</el-button>
<el-button @click="dialogFormVisible" class="btn-A" type="primary">确定</el-button>
</div>
......@@ -161,13 +179,15 @@
<script setup lang="ts">
import {ArrowDown} from "@element-plus/icons-vue";
import FlowChart from '@/components/FlowChart/index.vue'
import {ElMessageBox} from "element-plus";
import {useRouter} from "vue-router";
import {ref,getCurrentInstance,reactive,toRefs} from "vue"
const router = useRouter();
const { proxy } = getCurrentInstance();
const { project_status, project_type } = proxy.useDict('project_status', 'project_type');
const list = ref(['个人','项目经理','事业部负责人','财务','总经理']) // 流程图内容,只有值
const allList = ref([]) // 流程图内容,值和角色id
const dialogFormVisible = ref(false)
const projectList = ref([
......@@ -213,6 +233,7 @@ const toggleSearch = () => {
isExpanded.value = !isExpanded.value;
}
/** 搜索按钮操作 */
function handleQuery() {
......@@ -222,16 +243,74 @@ function handleQuery() {
function resetQuery() {
}
/** 查看详情按钮操作 */
function handleView(){
}
</script>
<style scoped lang="scss">
.el-dialog:not(.is-fullscreen){
margin-top: 10vh !important;
//步骤条
.shadow_box_bottom_step {
display: flex;
margin-top: 10px;
margin-bottom: 20px;
padding: 20px 0px;
width: 100%;
justify-content: space-evenly;
align-items: center;
background-color: #F9F9FA;
.text1 {
font-size: 18px;
font-weight: 550;
}
.text2 {
display: flex;
flex-direction: column;
font-size: 18px;
align-items: center;
}
.step {
width: 80%;
}
}
//导航 、 按钮
.shadow_box_bottom_add {
display: flex;
width: 100%;
justify-content: space-between;
align-items: center;
padding:10px 0;
.topDiv{
display: flex;
align-items: center;
justify-content: space-between;
}
.bold-text1 {
border-bottom: 4px solid #0062FF;
padding-bottom: 22px;
height: 15px;
font-family: "PingFangSC-Medium", sans-serif;
font-weight: 900;
font-size: 18px;
color: #0D162A;
letter-spacing: 0;
line-height: 15px;
}
}
.text_weight{
font-family: "PingFangSC-Medium", sans-serif;
font-weight: 600;
font-size: 16px;
}
.bohui{
font-family: "PingFangSC-Medium", sans-serif;
font-weight: 500;
font-size: 16px;
color: #0D162A;
}
</style>
......@@ -86,11 +86,27 @@
</div>
<div class="contentTable">
<!-- 按钮-->
<div style="margin-bottom: 30px;">
<!-- 标题、按钮-->
<div class="shadow_box_bottom_add">
<div class="topDiv">
<span class="bold-text1" style="">差旅报销审批</span>
</div>
<div>
<el-button class="el-button-defalut" type="default" @click="">一键驳回</el-button>
<el-button class="el-button-primary" style="margin-left: 20px" type="primary" @click="">一键通过</el-button>
</div>
</div>
<!-- 步骤条-->
<div class="shadow_box_bottom_step">
<text class="text1">审批流程</text>
<div class="text2">
<text>项目编号</text>
<text>{{changProjectNumber}}</text>
</div>
<div >
<FlowChart :dataList="list" :itemWidth="'130px'" :activeIndex="2"/>
</div>
</div>
<!-- 表格数据 -->
<el-table v-loading="loading" :data="projectList" border style="width: 100%">
<el-table-column type="selection" width="40" align="right"/>
......@@ -160,8 +176,9 @@
<script setup>
import {reactive, ref} from "vue";
import {ArrowDown} from "@element-plus/icons-vue";
import FlowChart from '@/components/FlowChart/index.vue'
const list = ref(['个人','项目经理','事业部负责人','财务','总经理']) // 流程图内容,只有值
const allList = ref([]) // 流程图内容,值和角色id
const dialogFormVisible = ref(false)
const projectList = ref([
{
......@@ -218,5 +235,54 @@ function resetQuery() {
<style scoped lang="scss">
//步骤条
.shadow_box_bottom_step {
display: flex;
margin-top: 10px;
margin-bottom: 20px;
padding: 20px 0px;
width: 100%;
justify-content: space-evenly;
align-items: center;
background-color: #F9F9FA;
.text1 {
font-size: 18px;
font-weight: 550;
}
.text2 {
display: flex;
flex-direction: column;
font-size: 18px;
align-items: center;
}
.step {
width: 80%;
}
}
//导航 、 按钮
.shadow_box_bottom_add {
display: flex;
width: 100%;
justify-content: space-between;
align-items: center;
padding:10px 0;
margin-bottom: 10px;
.topDiv{
display: flex;
align-items: center;
justify-content: space-between;
}
.bold-text1 {
border-bottom: 4px solid #0062FF;
padding-bottom: 22px;
height: 15px;
font-family: PingFangSC-Medium;
font-weight: 900;
font-size: 18px;
color: #0D162A;
letter-spacing: 0;
line-height: 15px;
}
}
</style>
......@@ -53,7 +53,7 @@ import ProjectCostReimbursementApprove from "./components/projectCostReimburseme
const activeName = ref('first');
const handleClick = (tab) =>{
console.log('点击的标签:', toRaw(tab));
// console.log('点击的标签:', toRaw(tab));
// 更新当前激活的标签名
activeName.value = tab.name;
}
......@@ -74,12 +74,14 @@ const handleClick = (tab) =>{
.tabs_span_color{
font-size: 16px;
color: #5B5B5B;
font-family: "Microsoft YaHei", sans-serif;
font-weight: 500;
font-family: "PingFangSC-Medium", sans-serif;
}
.tabs_span_colorChange{
font-size: 16px;
color: #0062FF;
font-family: "Microsoft YaHei", sans-serif;
font-weight: 500;
font-family: "PingFangSC-Medium", sans-serif;
}
</style>
......@@ -2,8 +2,8 @@
<div class="app-container" >
<!-- 搜索表单-->
<div class="formSearch" >
<el-form ref="formRef" :inline="true" :model="formInline" >
<el-form-item style="margin-right: 60px" label="项目名称">
<el-form ref="formRef" :inline="true" :model="formInline" label-width="120px">
<el-form-item label="项目名称">
<el-select style="width: 220px" v-model="queryParams.projectName" placeholder="请选择项目名称" clearable>
<el-option
v-for="item in projectNameList"
......@@ -12,7 +12,7 @@
:value="item"/>
</el-select>
</el-form-item>
<el-form-item style="margin-right: 60px" label="项目类型">
<el-form-item label="项目类型">
<el-select style="width: 220px" v-model="queryParams.projectType" placeholder="请选择项目类型" clearable>
<el-option
v-for="dict in project_type"
......@@ -31,7 +31,7 @@
</el-select>
</el-form-item>
<el-form-item>
<div style="margin-left: 250px">
<div style="padding-left: 5.4%">
<el-button type="default" class="el-button-defalut" icon="Refresh" @click="reset">重置</el-button>
<el-button type="primary" class="el-button-primary" icon="Search" @click="onSearch">搜索</el-button>
</div>
......@@ -102,7 +102,7 @@
<span>{{row.userName}}</span>
</template>
</el-table-column>
<el-table-column prop="expenseType" label="费用类型" align="center" width="200px">
<el-table-column prop="costType" label="费用类型" align="center" width="200px">
<template #default="scope">
<dict-tag :options="project_cost_type" :value="scope.row.costType"/>
</template>
......@@ -185,8 +185,7 @@ const queryParams = reactive({
pageNum:1,
pageSize:10,
projectName:null,
projectNumber:null,
userName:null,
projectType:null,
approveStatus:null
})
let ids = ref([])
......@@ -271,9 +270,8 @@ getAllProjectName()
// 重置表单
const reset = () => {
queryParams.projectName = null
queryParams.projectNumber = null
queryParams.userName = null
queryParams.approvalStatus = null
queryParams.projectType = null
queryParams.approveStatus = null
getList()
}
// 提交搜索表单
......
......@@ -345,7 +345,7 @@ function handleUpdate(row) {
}
/** 查看详情操作 */
function handleView(row) {
proxy.$router.push({ path: '/materials/apply/applyview',query: { id: row.id} });
proxy.$router.push({ path: '/materials/apply/applyview',query: { id: row.id, type: "0"} });
}
/** 删除按钮操作 */
......
This diff is collapsed.
......@@ -116,13 +116,21 @@ const form = ref({
// 返回项目管理页面
const reset = () => {
// 返回项目
if (returnType === "1"){
// 返回项目
proxy.$router.push({ path: '/material/materialBorrowApproval' })
}else if (returnType === "0") {
// 返回项目
proxy.$router.push({ path: '/material/materialApply' })
}
}
// 条页面来源
let returnType=null;
/** 根据ID查到的详细信息 */
const getInfo = () =>{
returnType = proxy.$route.query.type;
getApply(proxy.$route.query.id).then(response=>{
form.value = response.data;
})
}
......
......@@ -2,7 +2,7 @@
<div class="app-container">
<div class="content">
<div style="padding-left: 10px">
<span class="bold-text" style="border-bottom: 3px solid #0062FF;">项目立项</span>
<span class="bold-text">项目立项</span>
</div>
<div style="padding-top: 40px">
<el-form ref="formRef" :model="form" :rules="rules" label-width="auto">
......@@ -123,7 +123,7 @@
:auto-upload="false"
:on-success="handleSuccess"
>
<el-button size="large" type="text">
<el-button size="large" type="primary" link>
<img src="../../assets/icons/common/upl.png" height="16" width="16" alt="上传"
style="margin-right: 10px"/>
点击上传附件
......@@ -344,8 +344,9 @@ const reset = () => {
proxy.$router.push({path: '/project'})
resetForm()
}
// 更新回款输入框数量
const updateRepaymentInputs = () => {
// 根据用户输入的回款笔数更新百分比输入框的数量
// 根据用户输入的回款笔数-新增输入框的数量
if (form.repaymentCount > 0) {
form.repaymentDetails = Array.from({length: form.repaymentCount}, () => ({
repaymentPercentage: null, // 回款百分比
......@@ -355,7 +356,7 @@ const updateRepaymentInputs = () => {
form.repaymentDetails = [];
}
}
// 检查回款百分比
// 校验回款百分比
const checkPercentage = (value, index) => {
let newValue = parseFloat(value); // 确保值是浮点数
if (isNaN(newValue)) {
......@@ -369,8 +370,8 @@ const checkPercentage = (value, index) => {
}
};
// 删除附件相关事件
const handleRemove = (file, fileList) => {
console.log(file, fileList)
const handleRemove = (file) => {
return this.$confirm(`确定移除 ${file.name}?`);
}
// 预览附件相关事件
......@@ -381,13 +382,14 @@ const handlePreview = (file) => {
const handleExceed = (files, fileList) => {
this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
}
// 上传附件删除相关事件
const beforeRemove = (file, fileList) => {
return this.$confirm(`确定移除 ${file.name}?`);
}
// 上传附件成功相关事件
const handleSuccess = (response, file, fileList) => {
form.projectAnnexList = fileList.map(item => {
return {
fileName: item.fileName,
fileUrl: item.fileUrl
}
})
console.log(response, file, fileList)
}
......@@ -396,13 +398,10 @@ getUserList()
<style scoped lang="scss">
.bold-text {
width: 72px;
height: 15px;
font-family: PingFangSC-Medium;
font-weight: 900;
font-size: 18px;
font-size: 19px;
color: #0D162A;
letter-spacing: 0;
line-height: 15px;
border-bottom: 4px solid #0062FF;
}
</style>
......@@ -59,7 +59,8 @@
<el-button
size="large"
icon="ArrowDown"
type="text"
type="primary"
link
v-show="!isExpanded"
@click="toggleSearch"
>
......@@ -67,7 +68,8 @@
</el-button>
<el-button
size="large"
type="text"
type="primary"
link
icon="ArrowUp"
v-show="isExpanded"
@click="toggleSearch"
......@@ -114,8 +116,8 @@
</div>
<div class="contentTable">
<div style="padding-left: 8px ;padding-bottom: 25px">
<span class="bold-text" style="border-bottom: 3px solid #0062FF;">项目草稿箱</span>
<span style="padding-left: 85%">
<span class="bold-text">项目草稿箱</span>
<span style="padding-left: 86%">
<el-button
icon="ArrowLeft"
class="el-button-primary-pain"
......@@ -155,7 +157,7 @@
<template #default="scope">
<el-popover placement="right" :width="400" trigger="click">
<template #reference>
<el-button type="text">查看详情</el-button>
<el-button type="primary" link>查看详情</el-button>
</template>
<el-table :data="scope.row.repaymentDetails" border style="width: 100%">
<el-table-column label="回款百分比" align="center" prop="repaymentPercentage">
......@@ -185,12 +187,12 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="150">
<template #default="scope">
<el-tooltip content="编辑" placement="top">
<el-button link type="text" @click="handleUpdate(scope.row)" v-hasPermi="['system:project:edit']">
<el-button link @click="handleUpdate(scope.row)" v-hasPermi="['system:project:edit']">
<img src="../../assets/icons/common/edit.png" height="32" width="32"/>
</el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="text" @click="handleDelete(scope.row)" v-hasPermi="['system:project:logicRemove']">
<el-button link @click="handleDelete(scope.row)" v-hasPermi="['system:project:logicRemove']">
<img src="../../assets/icons/common/delete.png" height="32" width="32"/>
</el-button>
</el-tooltip>
......@@ -314,14 +316,11 @@ getList();
<style scoped lang="scss">
.bold-text {
width: 72px;
height: 15px;
font-family: PingFangSC-Medium;
font-weight: 900;
font-size: 18px;
font-size: 19px;
color: #0D162A;
letter-spacing: 0;
line-height: 15px;
border-bottom: 4px solid #0062FF;
}
.pagination-containerA {
......
......@@ -2,7 +2,7 @@
<div class="app-container">
<div class="content">
<div style="padding-left: 10px">
<span class="bold-text" style="border-bottom: 3px solid #0062FF;">项目编辑</span>
<span class="bold-text">项目编辑</span>
</div>
<div style="padding-top: 40px">
<el-form ref="formRef" :model="form" :rules="rules" label-width="auto">
......@@ -110,7 +110,7 @@
</el-select>
</el-form-item>
<el-form-item label="项目成员" prop="projectMemberIds">
<div v-for="(member, index) in form.projectMemberIds" :key="index" class="member-select">
<div v-for="(index) in form.projectMemberIds" :key="index" class="member-select">
<el-select
v-model="form.projectMemberIds[index]"
:placeholder="'成员' + (index + 1)"
......@@ -151,7 +151,7 @@
:on-exceed="handleExceed"
:auto-upload="false"
:on-success="handleSuccess">
<el-button size="large" type="text">
<el-button size="large" type="primary" link>
<img src="../../assets/icons/common/upl.png" height="16" width="16" style="margin-right: 10px"/>
点击上传附件
</el-button>
......@@ -203,7 +203,7 @@
</el-form>
</el-col>
<el-col :span="10">
<el-button type="text" @click="addMember" style="margin-top: 492px;margin-left: 0">+ 添加成员</el-button>
<el-button type="primary" link @click="addMember" style="margin-top: 492px;margin-left: 0">+ 添加成员</el-button>
</el-col>
</el-row>
<el-form-item style="padding-left: 82%">
......@@ -258,7 +258,20 @@ const rules = ref({
{required: true, message: '预计开始时间不能为空', trigger: 'blur'}
],
endDate: [
{required: true, message: '预计结束时间不能为空', trigger: 'blur'}
{required: true, message: '预计结束时间不能为空', trigger: 'blur'},
// 预计结束时间必须大于预计开始时间
{
validator: (rule, value, callback) => {
if (value === '') {
callback(new Error('请选择预计结束时间'));
} else if (value <= form.startDate) {
callback(new Error('预计结束时间必须大于预计开始时间'));
} else {
callback();
}
},
trigger: 'blur'
}
],
departmentLeadId: [
{required: true, message: '事业部负责人不能为空', trigger: 'blur'}
......@@ -388,6 +401,12 @@ const handleRemove = (file, fileList) => {
// 上传成功
const handleSuccess = (response, file, fileList) => {
form.value.projectAnnexList = fileList.map(item => {
return {
fileName: item.fileName,
fileUrl: item.fileUrl
}
})
console.log(response, file, fileList)
}
// 上传后预览
......@@ -412,14 +431,11 @@ getUserList()
<style scoped lang="scss">
.bold-text {
width: 72px;
height: 15px;
font-family: PingFangSC-Medium;
font-weight: 900;
font-size: 18px;
font-size: 19px;
color: #0D162A;
letter-spacing: 0;
line-height: 15px;
border-bottom: 4px solid #0062FF;
}
.member-select {
......
......@@ -3,6 +3,8 @@
<div class="formSearch">
<el-form :model="queryParams" ref="queryRef" :inline="true" label-width="120px">
<!-- 默认显示的查询条件 -->
<el-row :gutter="25">
<el-col :span="6">
<el-form-item label="项目名称" prop="projectName">
<el-select
v-model="queryParams.id"
......@@ -19,6 +21,8 @@
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目经理" prop="projectManagerId">
<el-select
v-model="queryParams.projectManagerId"
......@@ -35,6 +39,8 @@
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目状态" prop="projectStatus">
<el-select
v-model="queryParams.projectStatus"
......@@ -50,8 +56,10 @@
/>
</el-select>
</el-form-item>
</el-col>
<!-- 操作按钮 -->
<el-form-item style="padding-left: 5.4%">
<el-col :span="6">
<el-form-item style="margin-left: 30px">
<el-button @click="resetQuery" class="el-button-defalut">
<template #icon>
<img src="../../assets/icons/common/reset.png" height="25" width="24"/>
......@@ -67,7 +75,8 @@
<el-button
size="large"
icon="ArrowDown"
type="text"
link
type="primary"
v-show="!isExpanded"
@click="toggleSearch"
>
......@@ -75,7 +84,8 @@
</el-button>
<el-button
size="large"
type="text"
type="primary"
link
icon="ArrowUp"
v-show="isExpanded"
@click="toggleSearch"
......@@ -83,17 +93,15 @@
收起
</el-button>
</el-form-item>
</el-col>
</el-row>
<!-- 可折叠的查询条件 -->
<transition>
<div v-if="isExpanded">
<el-row :gutter="25">
<el-col :span="6">
<el-form-item label="事业部负责人" prop="departmentLeaderId">
<!-- <el-input
v-model="queryParams.departmentLeaderId"
placeholder="请输入事业部负责人"
clearable
@keyup.enter="handleQuery"
style="width: 220px"
/>-->
<el-select
v-model="queryParams.departmentLeaderId"
filterable
......@@ -109,6 +117,8 @@
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目类型" prop="projectType">
<el-select
v-model="queryParams.projectType"
......@@ -124,13 +134,15 @@
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</div>
</transition>
</el-form>
</div>
<div class="contentTable">
<div class="title">
<div style="display: flex; align-items: center; justify-content: space-between;">
<div class="contentBt">
<span class="bold-text">项目列表</span>
<div style="display: flex; gap: 10px; align-items: center;">
<el-button
......@@ -210,7 +222,7 @@
<template #default="scope">
<el-popover placement="right" :width="400" trigger="click">
<template #reference>
<el-button type="text">查看详情</el-button>
<el-button link type="primary">查看详情</el-button>
</template>
<el-table :data="scope.row.repaymentDetails" border style="width: 100%">
<!-- 项目回款笔数 -->
......@@ -248,17 +260,17 @@
min-width="200">
<template #default="scope">
<el-tooltip content="编辑" placement="top">
<el-button link type="text" @click="handleUpdate(scope.row)" v-hasPermi="['system:project:edit']">
<el-button link @click="handleUpdate(scope.row)" v-hasPermi="['system:project:edit']">
<img src="../../assets/icons/common/edit.png" height="32" width="32"/>
</el-button>
</el-tooltip>
<el-tooltip content="详情" placement="top">
<el-button link type="text" @click="handleView(scope.row)" v-hasPermi="['system:project:view']">
<el-button link @click="handleView(scope.row)" v-hasPermi="['system:project:view']">
<img src="../../assets/icons/common/check.png" height="32" width="32"/>
</el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button link type="text" @click="handleDelete(scope.row)" v-hasPermi="['system:project:logicRemove']">
<el-button link @click="handleDelete(scope.row)" v-hasPermi="['system:project:logicRemove']">
<img src="../../assets/icons/common/delete.png" height="32" width="32"/>
</el-button>
</el-tooltip>
......@@ -443,7 +455,7 @@ getUserList()
.bold-text {
font-family: PingFangSC-Medium;
font-weight: 900;
font-size: 20px;
font-size: 19px;
color: #0D162A;
border-bottom: 4px solid #0062FF;
}
......@@ -454,6 +466,12 @@ getUserList()
position: relative;
}
.contentBt {
display: flex;
align-items: center;
justify-content: space-between;
}
// 表格的标头
:deep(.el-table th.el-table__cell) {
line-height: 35px;
......@@ -470,12 +488,12 @@ getUserList()
}
.el-alert {
margin: 23px 0 23px;
//margin: 23px 0 23px;
margin-bottom: 23px;
}
.custom-blue-bg {
background-color: #E6F7FF !important;
/* 可能还需要调整文字颜色以便于阅读 */
color: #1890FF !important;
}
......
......@@ -2,7 +2,7 @@
<div class="app-container">
<div class="content" style="position: relative">
<div style="padding-left: 15px ;padding-top: 15px">
<span class="bold-text" style="border-bottom: 3px solid blue;">项目详情</span>
<span class="bold-text">项目详情</span>
</div>
<div style="padding-top: 28px ;padding-left: 10px; ">
<el-form :model="form" label-width="auto">
......@@ -126,7 +126,7 @@
</el-col>
<el-col :span="2">
<span v-for="(file, index) in form.projectAnnexList" :key="index" class="file-item">
<el-link :href="file.fileUrl" target="_blank">{{ file.fileName }}</el-link>
<el-link :href="file.fileUrl" type="primary" target="_blank">{{ file.fileName }}</el-link>
</span>
</el-col>
</el-row>
......@@ -208,7 +208,6 @@ const form = ref({
repaymentDetails: [],
draft: '',
})
const headOptions = ref([])
const managerOptions = ref([])
const getUserList = () => {
......@@ -259,14 +258,11 @@ getUserList()
<style scoped lang="scss">
.bold-text {
width: 72px;
height: 15px;
font-family: PingFangSC-Medium;
font-weight: 900;
font-size: 18px;
font-size: 19px;
color: #0D162A;
letter-spacing: 0;
line-height: 15px;
border-bottom: 4px solid #0062FF;
}
.label-title {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment