Commit 83d7e208 authored by yanzhengyang's avatar yanzhengyang

新增费用管理日常报销详情页面,添加页面

parent de441101
...@@ -8,6 +8,7 @@ import request from '@/utils/request' ...@@ -8,6 +8,7 @@ import request from '@/utils/request'
// }) // })
// } // }
// 日常报销列表
export const listCostManage = (query) => { export const listCostManage = (query) => {
return request({ return request({
url: '/dailyReimbursement/dailyReimbursement/list', url: '/dailyReimbursement/dailyReimbursement/list',
...@@ -15,3 +16,20 @@ export const listCostManage = (query) => { ...@@ -15,3 +16,20 @@ export const listCostManage = (query) => {
params: query params: query
}) })
} }
// 日常报销详情
export const detailCostManage = (Id) => {
return request({
url: '/dailyReimbursement/dailyReimbursement/' + Id,
method: 'get',
})
}
// 新增日常报销
export const addDailyReimburse = (data) => {
return request({
url: '/dailyReimbursement/dailyReimbursement',
method: 'post',
data: data
})
}
...@@ -165,13 +165,27 @@ export const dynamicRoutes = [ ...@@ -165,13 +165,27 @@ export const dynamicRoutes = [
permissions: ['costManage:dailyReimburse:detail'], permissions: ['costManage:dailyReimburse:detail'],
children: [ children: [
{ {
path: 'detail', path: 'detail/:Id(\\d+)',
component: () => import('@/views/costManage/dailyReimburse/detail'), component: () => import('@/views/costManage/dailyReimburse/detail'),
name: 'Detail', name: 'Detail',
meta: { title: '日常报销详情', activeMenu: '/costManage/dailyReimburse' } meta: { title: '日常报销详情', activeMenu: '/costManage/dailyReimburse' }
} }
] ]
}, },
{
path: '/costManage/daily-Reimburse',
component: Layout,
hidden: true,
permissions: ['costManage:dailyReimburse:addDaily'],
children: [
{
path: 'addDaily',
component: () => import('@/views/costManage/dailyReimburse/addDaily'),
name: 'AddDaily',
meta: { title: '新增日常报销', activeMenu: '/costManage/dailyReimburse' }
}
]
},
] ]
const router = createRouter({ const router = createRouter({
......
<template>
<div class="app-container">
<div class="formSearch">
<el-button type="primary" style="margin-bottom: 20px" @click="back">返回</el-button>
<el-form
ref="formRef"
:model="ruleForm"
:rules="rules"
label-width="120px"
class="demo-ruleForm"
:size="formSize"
status-icon
>
<el-form-item label="项目编号" prop="projectNumber">
<el-input v-model="ruleForm.projectNumber" placeholder="请输入项目编号" clearable/>
</el-form-item>
<el-form-item label="项目名称" prop="projectName">
<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-form-item>
<el-form-item label="项目负责人" prop="userName">
<el-select-v2
clearable
v-model="ruleForm.userName"
placeholder="请选择项目负责人"
:options="options"
/>
</el-form-item>
<el-form-item label="报销月份" prop="reimbursement" >
<el-date-picker
v-model="ruleForm.reimbursement"
type="month"
clearable
placeholder="选择月份"
style="width: 100%"
/>
</el-form-item>
<el-form-item v-for="(item,index) in ruleForm.childList" :key="index">
<el-form-item
label="费用发生日期"
prop="timeOfExpense"
:rules="[{
validator: customValidator1,
required: true,
trigger: 'blur',
index:index
}]">
<el-date-picker
value-format="YYYY-MM-DD"
v-model="item.timeOfExpense"
clearable
type="date"
placeholder="选择日期"
style="width: 100%"
/>
</el-form-item>
<el-form-item
label="报销类型"
prop="reimbursementType"
:rules="[{
validator: customValidator2,
required: true,
trigger: 'blur',
index:index
}]">
<el-select v-model="item.reimbursementType" placeholder="请输入项目名称" class="form-data-select" clearable>
<el-option label="餐饮费" value="shanghai" />
<el-option label="通行费" value="beijing" />
</el-select>
</el-form-item>
<el-form-item
label="金额"
prop="money"
:rules="[{
validator: customValidator3,
required: true,
trigger: 'blur',
index:index
}]">
<el-input v-model="item.money" placeholder="请输入金额" clearable/>
</el-form-item>
<el-form-item
label="备注"
prop="remark"
v-show="item.money >= 25"
:rules="[{
validator: customValidator4,
required: true,
trigger: 'blur',
index:index
}]">
<el-input v-model="item.remark" placeholder="请说明原因" clearable/>
</el-form-item>
<el-button @click="deleteRow" class="margin-button" v-show="ruleForm.childList.length > 1">-</el-button>
</el-form-item>
<el-form-item>
<el-button @click="addRow" class="margin-button">+</el-button>
</el-form-item>
<el-form-item label="提交时间" prop="updateTime" required>
<el-date-picker
v-model="ruleForm.updateTime"
type="date"
placeholder="请选择日期"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="报销申请人" prop="createBy" >
<el-input v-model="ruleForm.createBy" placeholder="申请人" clearable/>
</el-form-item>
<el-form-item label="备注" prop="desc">
<el-input v-model="ruleForm.reason" clearable/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm()" class="el-button--primary">
提交
</el-button>
<el-button @click="resetForm()" class="el-button--defalut">取消</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script setup name="AddDaily">
import { reactive, ref } from 'vue'
import { addDailyReimburse } from "../../../api/costManage/cost.js";
import {useRoute, useRouter} from 'vue-router';
const route = useRoute();
const router = useRouter();
const formRef = ref(null);
const formSize = ref('default')
const ruleForm = ref({
projectName: null,
projectNumber: null,
reimbursement: null,
projectType: null,
userName: null,
createBy: null,
updateTime: null,
timeOfExpense:null,
childList:[{
money: null,
reimbursementType:null,
remark:null,
timeOfExpense:null,
}],
})
const rules = ref({
projectName: {
required: true,
message: '请输入项目名称',
trigger: 'change'
},
projectNumber: {
required: true,
message: '请输入项目编号',
trigger: 'blur',
},
reimbursement: {
type: 'date',
required: true,
message: '选择月份666',
trigger: 'blur',
},
projectType: '',
userName: {
required: true,
message: '请选择项目经理',
trigger: 'change',
},
createBy: {
required: true,
message: '申请人',
trigger: 'blur',
},
updateTime: {
type: 'date',
required: true,
message: '请选择提交时间',
trigger: 'blur',
}
})
const submitForm = async () => {
if (!formRef) return
await formRef.value.validate((valid, fields) => {
if (valid) {
console.log('submit!')
} else {
console.log('error submit!', fields)
}
})
}
// 自定义规则验证-费用发生时间
const customValidator1 = (rule, value, callback)=>{
if (!ruleForm.value.childList[rule.index].timeOfExpense || ruleForm.value.childList[0].timeOfExpense.trim() === '') {
callback(new Error('请输入费用发生日期')); // 如果为空,返回错误
} else {
callback(); // 验证通过
}
}
// 自定义规则验证-报销类型
const customValidator2 = (rule, value, callback)=>{
if (!ruleForm.value.childList[rule.index].reimbursementType || ruleForm.value.childList[0].reimbursementType.trim() === '') {
callback(new Error('请选择报销类型')); // 如果为空,返回错误
} else {
callback(); // 验证通过
}
}
// 自定义规则验证-金额
const customValidator3 = (rule, value, callback)=>{
if (!ruleForm.value.childList[rule.index].money || ruleForm.value.childList[0].money.trim() === '') {
callback(new Error('请输入报销金额')); // 如果为空,返回错误
} else {
callback(); // 验证通过
}
}
// 自定义规则验证-备注
const customValidator4 = (rule, value, callback)=>{
if (!ruleForm.value.childList[rule.index].remark || ruleForm.value.childList[0].remark.trim() === '') {
callback(new Error('请输入备注')); // 如果为空,返回错误
} else {
callback(); // 验证通过
}
}
const resetForm = () => {
router.push('/costManage/dailyReimburse')
}
const options = Array.from({ length: 10000 }).map((_, idx) => ({
value: `${idx + 1}`,
label: `${idx + 1}`,
}))
function back(){
router.push('/costManage/dailyReimburse')
}
function addRow() {
const newList = {
money: null,
reimbursementType: null,
remark: null,
timeOfExpense: null,
};
ruleForm.value.childList.push(newList);
}
function deleteRow() {
if (ruleForm.value.childList.length !== 1) {
ruleForm.value.childList.splice(ruleForm.value.childList.length - 1, 1);
}
}
// getDetail()
</script>
<style scoped>
.margin-button {
margin-left: 8px;
}
.form-data-select{
width: 140px;
}
</style>
<template> <template>
<div class="app-container"> <div class="app-container">
<el-button type="primary" style="margin-bottom: 20px">返回</el-button> <div class="formSearch">
<el-button type="primary" style="margin-bottom: 20px" @click="back">返回</el-button>
<el-form <el-form
ref="ruleFormRef" ref="ruleFormRef"
:model="ruleForm" :model="ruleForm"
:rules="rules" :disabled="true"
label-width="120px" label-width="120px"
class="demo-ruleForm" class="demo-ruleForm"
:size="formSize" :size="formSize"
status-icon status-icon
> >
<el-form-item label="项目编号" prop="name"> <el-form-item label="项目编号" prop="projectNumber">
<el-input v-model="ruleForm.name" /> <el-input v-model="ruleForm.projectNumber" />
</el-form-item> </el-form-item>
<el-form-item label="项目名称" prop="region"> <el-form-item label="项目名称" prop="projectName">
<el-select v-model="ruleForm.region" placeholder="请输入项目名称"> <el-select v-model="ruleForm.projectName" placeholder="请输入项目名称">
<el-option label="Zone one" value="shanghai" /> <el-option label="Zone one" value="shanghai" />
<el-option label="Zone two" value="beijing" /> <el-option label="Zone two" value="beijing" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="项目负责人" prop="count"> <el-form-item label="项目负责人" prop="userName">
<el-select-v2 <el-select-v2
v-model="ruleForm.count" v-model="ruleForm.userName"
placeholder="请选择项目负责人" placeholder="请选择项目负责人"
:options="options" :options="options"
/> />
</el-form-item> </el-form-item>
<el-form-item label="报销时间" required> <el-form-item label="报销月份" >
<el-col :span="11"> <el-form-item prop="reimbursement">
<el-form-item prop="date1">
<el-date-picker <el-date-picker
v-model="ruleForm.date1" v-model="ruleForm.reimbursement"
type="month"
placeholder="选择月份"
style="width: 100%"
/>
</el-form-item>
</el-form-item>
<el-form-item label="费用发生日期" v-for="item in ruleForm.childList">
<el-form-item prop="item.timeOfExpense">
<el-date-picker
v-model="item.timeOfExpense"
type="date" type="date"
label="Pick a date" placeholder="选择日期"
placeholder="Pick a date"
style="width: 100%" style="width: 100%"
/> />
</el-form-item> </el-form-item>
</el-col> <el-form-item label="报销类型" prop="item.reimbursementType" >
<!-- <el-col class="text-center" :span="2">--> <el-select v-model="item.reimbursementType" placeholder="请输入项目名称" class="form-data-select">
<!-- <span class="text-gray-500">-</span>--> <el-option label="餐饮费" value="shanghai" />
<!-- </el-col>--> <el-option label="通行费" value="beijing" />
<!-- <el-col :span="11">--> </el-select>
<!-- <el-form-item prop="date2">-->
<!-- <el-time-picker-->
<!-- v-model="ruleForm.date2"-->
<!-- label="Pick a time"-->
<!-- placeholder="Pick a time"-->
<!-- style="width: 100%"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-col>-->
</el-form-item> </el-form-item>
<!-- <el-form-item label="Instant delivery" prop="delivery">--> <el-form-item label="报销金额" prop="item.money">
<!-- <el-switch v-model="ruleForm.delivery" />--> <el-input v-model="item.money" />
<!-- </el-form-item>-->
<!-- <el-form-item label="Activity type" prop="type">-->
<!-- <el-checkbox-group v-model="ruleForm.type">-->
<!-- <el-checkbox label="Online activities" name="type" />-->
<!-- <el-checkbox label="Promotion activities" name="type" />-->
<!-- <el-checkbox label="Offline activities" name="type" />-->
<!-- <el-checkbox label="Simple brand exposure" name="type" />-->
<!-- </el-checkbox-group>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="Resources" prop="resource">-->
<!-- <el-radio-group v-model="ruleForm.resource">-->
<!-- <el-radio label="Sponsorship" />-->
<!-- <el-radio label="Venue" />-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<el-form-item label="报销金额" prop="reimburse">
<el-input v-model="ruleForm.reimburse" />
</el-form-item> </el-form-item>
<el-form-item label="报销申请人" prop="application"> <el-form-item label="备注" prop="item.remark" v-show="item.money >= 25">
<el-input v-model="ruleForm.application" /> <el-input v-model="item.remark" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="desc"> <el-button @click="deleteRow" class="margin-button" v-show="ruleForm.childList.length > 1">-</el-button>
<el-input v-model="ruleForm.desc" type="textarea" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="submitForm(ruleFormRef)"> <el-button @click="addRow" class="margin-button">+</el-button>
Create </el-form-item>
</el-button> <el-form-item label="提交时间">
<el-button @click="resetForm(ruleFormRef)">Reset</el-button> <el-date-picker
v-model="ruleForm.updateTime"
type="date"
placeholder="请选择日期"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="报销申请人" prop="createBy">
<el-input v-model="ruleForm.createBy" />
</el-form-item>
<el-form-item label="备注" prop="desc">
<el-input v-model="ruleForm.reason" />
</el-form-item> </el-form-item>
<!-- <el-form-item>-->
<!-- <el-button type="primary" @click="submitForm(ruleFormRef)">-->
<!-- Create-->
<!-- </el-button>-->
<!-- <el-button @click="resetForm(ruleFormRef)">Reset</el-button>-->
<!-- </el-form-item>-->
</el-form> </el-form>
</div> </div>
</div>
</template> </template>
<script lang="ts" setup> <script setup name="Detail">
import { reactive, ref } from 'vue' import { reactive, ref } from 'vue'
import type { FormInstance, FormRules } from 'element-plus' import { detailCostManage } from "../../../api/costManage/cost.js";
import {useRoute, useRouter} from 'vue-router';
interface RuleForm { const route = useRoute();
name: string const router = useRouter();
region: string
count: string
date1: string
date2: string
delivery: boolean
type: string[]
resource: string
application: string
reimburse: string
desc: string
}
const formSize = ref('default') const formSize = ref('default')
const ruleFormRef = ref<FormInstance>() const ruleFormRef = ref()
const ruleForm = reactive<RuleForm>({ const ruleForm = ref({
name: 'Hello', id:null,
region: '', projectName: null,
count: '', projectNumber: null,
date1: '', reimbursement: null,
date2: '', projectType: null,
delivery: false, userName: null,
type: [], createBy: null,
resource: '', updateTime: null,
application:'蔡徐坤', childList:[{
reimburse:'666', money: null,
desc: '', reimbursementType:null,
remark:null,
timeOfExpense:null,
}],
}) })
const rules = reactive<FormRules<RuleForm>>({ // const rules = reactive({
name: [ // name: [
{ required: true, message: 'Please input Activity name', trigger: 'blur' }, // { required: true, message: 'Please input Activity name', trigger: 'blur' },
{ min: 3, max: 5, message: 'Length should be 3 to 5', trigger: 'blur' }, // { min: 3, max: 5, message: 'Length should be 3 to 5', trigger: 'blur' },
], // ],
region: [ // region: [
{ // {
required: true, // required: true,
message: 'Please select Activity zone', // message: 'Please select Activity zone',
trigger: 'change', // trigger: 'change',
}, // },
], // ],
count: [ // count: [
{ // {
required: true, // required: true,
message: 'Please select Activity count', // message: 'Please select Activity count',
trigger: 'change', // trigger: 'change',
}, // },
], // ],
date1: [ // date1: [
{ // {
type: 'date', // type: 'date',
required: true, // required: true,
message: 'Please pick a date', // message: 'Please pick a month',
trigger: 'change', // trigger: 'change',
}, // },
], // ],
date2: [ // date2: [
{ // {
type: 'date', // type: 'date',
required: true, // required: true,
message: 'Please pick a time', // message: 'Please pick a date',
trigger: 'change', // trigger: 'change',
}, // },
], // ],
type: [ // type: [
{ // {
type: 'array', // type: 'array',
required: true, // required: true,
message: 'Please select at least one activity type', // message: 'Please select at least one activity type',
trigger: 'change', // trigger: 'change',
}, // },
], // ],
resource: [ // resource: [
{ // {
required: true, // required: true,
message: 'Please select activity resource', // message: 'Please select activity resource',
trigger: 'change', // trigger: 'change',
}, // },
], // ],
desc: [ // desc: [
{ required: true, message: 'Please input activity form', trigger: 'blur' }, // {
], // required: false,
}) // message: 'Please input activity form',
// trigger: 'blur'
// },
// ],
// })
const submitForm = async (formEl: FormInstance | undefined) => { // const submitForm = async (formEl) => {
if (!formEl) return // if (!formEl) return
await formEl.validate((valid, fields) => { // await formEl.validate((valid, fields) => {
if (valid) { // if (valid) {
console.log('submit!') // console.log('submit!')
} else { // } else {
console.log('error submit!', fields) // console.log('error submit!', fields)
} // }
}) // })
} // }
const resetForm = (formEl: FormInstance | undefined) => { // const resetForm = (formEl) => {
if (!formEl) return // if (!formEl) return
formEl.resetFields() // formEl.resetFields()
} // }
const options = Array.from({ length: 10000 }).map((_, idx) => ({ const options = Array.from({ length: 10000 }).map((_, idx) => ({
value: `${idx + 1}`, value: `${idx + 1}`,
label: `${idx + 1}`, label: `${idx + 1}`,
})) }))
const Id = parseInt(route.params.Id)
// console.log("路由",Id)
// const detailForm = ref([])
async function getDetail() {
const res = await detailCostManage(Id)
// console.log('res',res)
ruleForm.value = res.data
// console.log("坤坤",Id.value)
// console.log("test",ruleForm.value.childList)
}
function back(){
router.push('/costManage/dailyReimburse')
}
function addRow() {
const newList = {
money: 0,
reimbursementType:'',
remark:'',
timeOfExpense:'',
};
ruleForm.value.childList.push(newList);
}
function deleteRow() {
if (ruleForm.value.childList.length !== 1) {
ruleForm.value.childList.splice(ruleForm.value.childList.length - 1, 1);
}
}
getDetail()
</script> </script>
<style scoped>
.margin-button {
margin-left: 8px;
}
.form-data-select{
width: 140px;
}
</style>
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" label-width="68px"> <el-affix>
<div class="formSearch">
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true" class="search-right">
<el-form-item label="项目名称" prop="roleName"> <el-form-item label="项目名称" prop="roleName">
<el-input <el-input
v-model="queryParams.userName" v-model="queryParams.userName"
placeholder="请输入项目名称" placeholder="请输入"
clearable clearable
style="width: 220px"
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="项目编号" prop="roleKey"> <el-form-item label="报销类型" prop="roleKey">
<el-input <el-input
v-model="queryParams.projectName" v-model="queryParams.projectName"
placeholder="请输入项目编号" placeholder="请输入项目编号"
clearable clearable
style="width: 220px"
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="负责人" prop="status"> <el-form-item label="审批状态" prop="status">
<el-select <el-select
v-model="queryParams.status" v-model="queryParams.status"
placeholder="请选择" placeholder="请选择"
...@@ -34,21 +34,66 @@ ...@@ -34,21 +34,66 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="创建时间" style="width: 260px"> <!-- <el-form-item label="创建时间" style="width: 260px">-->
<el-date-picker <!-- <el-date-picker-->
v-model="dateRange" <!-- v-model="dateRange"-->
value-format="YYYY-MM-DD" <!-- value-format="YYYY-MM-DD"-->
type="daterange" <!-- type="daterange"-->
range-separator="-" <!-- range-separator="-"-->
start-placeholder="开始日期" <!-- start-placeholder="开始日期"-->
end-placeholder="结束日期" <!-- end-placeholder="结束日期"-->
></el-date-picker> <!-- ></el-date-picker>-->
</el-form-item> <!-- </el-form-item>-->
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button
<el-button icon="Refresh" @click="resetQuery">重置</el-button> type="primary"
@click="handleQuery"
class="el-button--primary"
>
<img src="@/assets/icons/common/search.png" class="img-icon"/>查询
</el-button>
<el-button
type="default"
@click="resetQuery"
class="el-button--defalut"
>
<img src="@/assets/icons/common/reset.png" class="img-icon"/>重置
</el-button>
<el-button
icon="ArrowDown"
@click="changeMore"
class="el-button--defalut"
v-show="buttonIcon"
>展开</el-button>
<el-button
icon="ArrowUp"
@click="changeMore"
class="el-button--defalut"
v-show="!buttonIcon"
>收起</el-button>
</el-form-item>
</el-form>
<el-form :model="queryParams" ref="queryRef" v-show="showSearch" :inline="true">
<el-form-item label="提交时间" prop="roleName" v-show="buttonMore">
<el-input
v-model="queryParams.userName"
placeholder="请输入"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="项目负责人" prop="roleKey" v-show="buttonMore">
<el-input
v-model="queryParams.projectName"
placeholder="请输入"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div>
</el-affix>
<div class="contentTable">
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
...@@ -56,116 +101,164 @@ ...@@ -56,116 +101,164 @@
plain plain
icon="Plus" icon="Plus"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:role:add']" class="el-button--primary-pain"
>新增</el-button> >添加</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="Edit"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:role:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:role:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="Download"
@click="handleExport"
v-hasPermi="['system:role:export']"
>导出</el-button>
</el-col> </el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="Edit"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- v-hasPermi="['system:role:edit']"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="danger"-->
<!-- plain-->
<!-- icon="Delete"-->
<!-- :disabled="multiple"-->
<!-- @click="handleDelete"-->
<!-- v-hasPermi="['system:role:remove']"-->
<!-- >删除</el-button>-->
<!-- </el-col>-->
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- icon="Download"-->
<!-- @click="handleExport"-->
<!-- v-hasPermi="['system:role:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<!-- 筛选按钮 --> <!-- 筛选按钮 -->
<el-dropdown @command="handleCommand" :hide-on-click="false"> <!-- <el-dropdown @command="handleCommand" :hide-on-click="false">-->
<el-button type="primary">筛选列</el-button> <!-- <el-button type="primary">筛选列</el-button>-->
<template #dropdown> <!-- <template #dropdown>-->
<el-dropdown-menu> <!-- <el-dropdown-menu>-->
<!-- 全选复选框 --> <!-- &lt;!&ndash; 全选复选框 &ndash;&gt;-->
<el-dropdown-item command="select-all"> <!-- <el-dropdown-item command="select-all">-->
<el-checkbox v-model="isAllSelected" @change="selectAll">全选</el-checkbox> <!-- <el-checkbox v-model="isAllSelected" @change="selectAll">全选</el-checkbox>-->
</el-dropdown-item> <!-- </el-dropdown-item>-->
<!-- 动态列选择复选框 --> <!-- &lt;!&ndash; 动态列选择复选框 &ndash;&gt;-->
<el-dropdown-item v-for="column in columns" :key="column.prop" :command="column.prop"> <!-- <el-dropdown-item v-for="column in columns" :key="column.prop" :command="column.prop">-->
<el-checkbox v-model="column.visible" @change="handleCheckboxChange">{{ column.label }}</el-checkbox> <!-- <el-checkbox v-model="column.visible" @change="handleCheckboxChange">{{ column.label }}</el-checkbox>-->
</el-dropdown-item> <!-- </el-dropdown-item>-->
</el-dropdown-menu> <!-- </el-dropdown-menu>-->
</template> <!-- </template>-->
</el-dropdown> <!-- </el-dropdown>-->
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <!-- <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>-->
</el-row> </el-row>
<!-- 表格数据 --> <!-- 表格数据 -->
<el-table v-loading="loading" :data="costManageList" @selection-change="handleSelectionChange"> <el-card class="box-card" v-for="item in costManageList">
<template #header>
<div class="card-header">
<span>项目名称:{{item.projectName}}({{}} - {{}})</span>
<span>项目负责人:{{item.projectUserName}}</span>
<span>事业部负责人:{{item.departmentUserName}}</span>
</div>
</template>
<span>费用明细</span>
<div class="card-context">
<el-table v-loading="loading" :data="item.tableItemList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column v-for="(column,index) in visibleColumns" :key="index" :prop="column.prop" :label="column.label" align="center" /> <el-table-column label="提交时间" align="center" prop="registrationTime">
<!-- <el-table-column label="状态" align="center" width="100">-->
<!-- <template #default="scope">-->
<!-- <el-switch-->
<!-- v-model="scope.row.status"-->
<!-- active-value="0"-->
<!-- inactive-value="1"-->
<!-- @change="handleStatusChange(scope.row)"-->
<!-- ></el-switch>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="开始时间" align="center" prop="createTime">-->
<!-- <template #default="scope">-->
<!-- <span>{{ parseTime(scope.row.createTime) }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope"> <template #default="scope">
<el-tooltip content="修改" placement="top" v-if="scope.row.roleId !== 1"> <span>{{ parseTime(scope.row.registrationTime) }}</span>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:role:edit']"></el-button> </template>
</el-table-column>
<el-table-column label="餐饮费" prop="totalFoodCost" align="center" :show-overflow-tooltip="true" width="150" />
<el-table-column label="交通费" prop="totalTaxiCost" align="center" :show-overflow-tooltip="true" width="150" />
<el-table-column label="总额" prop="totalMoney" align="center" width="100" >
<template #default="scope">
{{scope.row.totalMoney || 0}}
</template>
</el-table-column>
<el-table-column label="审批状态" prop="status" align="center" width="100">
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="打印报销单" placement="top" v-if="scope.row.roleId !== 1">
<el-button
link
type="primary"
@click="handleDelete(scope.row)"
>
<img src="@/assets/icons/common/print.png" class="img-icon"/>
</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="删除" placement="top" v-if="scope.row.roleId !== 1"> <el-tooltip content="上传发票" placement="top" v-if="scope.row.roleId !== 1">
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:role:remove']"></el-button> <el-button
link
type="primary"
@click="handleDataScope(scope.row)"
>
<img src="@/assets/icons/common/send.png" class="img-icon"/>
</el-button>
</el-tooltip>
<el-tooltip content="修改" placement="top" v-if="scope.row.roleId !== 1">
<el-button
link
type="primary"
@click="handleAuthUser(scope.row)"
>
<img src="@/assets/icons/common/edit.png" class="img-icon"/>
</el-button>
</el-tooltip> </el-tooltip>
<el-tooltip content="详情" placement="top" v-if="scope.row.roleId !== 1"> <el-tooltip content="详情" placement="top" v-if="scope.row.roleId !== 1">
<el-button link type="primary" icon="View" @click="handleDetail(scope.row)" v-hasPermi="['system:role:edit']"></el-button> <el-button
link
type="primary"
@click="handleDetail(scope.row)"
>
<img src="@/assets/icons/common/check.png" class="img-icon"/>
</el-button>
</el-tooltip> </el-tooltip>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
v-show="total > 0" v-show="item.tableItemList > 0"
:total="total" :total="total"
v-model:page="queryParams.pageNum" v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</div>
<!-- 添加或修改角色配置对话框 --> <template #footer>
<div class="card-footer">
<div class="footer-step">
<!-- 分配角色数据权限对话框 --> <el-steps :active="1" finish-status="success" simple>
<el-step title="Step 1" />
<el-step title="Step 2" />
<el-step title="Step 3" />
</el-steps>
</div>
<div>
<span>已通过金额:{{item.passNumber}}</span>
<span>未通过金额:{{item.notPassNumber}}</span>
<span>累计金额:{{item.totalMoney}}</span>
</div>
</div>
</template>
</el-card>
</div>
</div> </div>
</template> </template>
<script setup name="DailyReimbursement"> <script setup name="DailyReimbursement">
import { addRole, changeRoleStatus, dataScope, delRole, getRole, listRole, updateRole, deptTreeSelect } from "@/api/system/role"; import { addRole, changeRoleStatus, dataScope, delRole, getRole, listRole, updateRole, deptTreeSelect } from "@/api/system/role";
import { roleMenuTreeselect, treeselect as menuTreeselect } from "@/api/system/menu"; import { roleMenuTreeselect, treeselect as menuTreeselect } from "@/api/system/menu";
import {listCostManage} from '@/api/costManage/cost.js' import { listCostManage } from "../../../api/costManage/cost.js";
import {useRouter} from "vue-router";
const router = useRouter(); const router = useRouter();
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { sys_normal_disable } = proxy.useDict("sys_normal_disable"); const { sys_normal_disable } = proxy.useDict("sys_normal_disable");
// const roleList = ref([]);
const open = ref(false); const open = ref(false);
const loading = ref(true); const loading = ref(true);
const showSearch = ref(true); const showSearch = ref(true);
...@@ -175,17 +268,17 @@ const multiple = ref(true); ...@@ -175,17 +268,17 @@ const multiple = ref(true);
const total = ref(0); const total = ref(0);
const title = ref(""); const title = ref("");
// 表格列表 // 表格列表
const columns = ref([ // const columns = ref([
{prop: 'id', label: '项目编号', visible: true}, // {prop: 'id', label: '项目编号', visible: true},
{prop: 'userName', label: '项目名称', visible: true}, // {prop: 'userName', label: '项目名称', visible: true},
{prop: 'projectName', label: '项目负责人', visible: true}, // {prop: 'projectName', label: '项目负责人', visible: true},
{prop: 'projectNumber', label: '项目负责人', visible: true}, // {prop: 'projectNumber', label: '项目负责人', visible: true},
{prop: 'sum', label: '总金额', visible: true}, // {prop: 'sum', label: '总金额', visible: true},
// {prop: 'zip', label: '项目状态', visible: true}, // // {prop: 'zip', label: '项目状态', visible: true},
// {prop: 'gender', label: '项目描述', visible: true}, // // {prop: 'gender', label: '项目描述', visible: true},
// {prop: 'age', label: '项目金额', visible: true}, // // {prop: 'age', label: '项目金额', visible: true},
// {prop: 'iphone', label: '电话', width: '180', visible: true} // // {prop: 'iphone', label: '电话', width: '180', visible: true}
]) // ])
const costManageList = ref([]); const costManageList = ref([]);
const dateRange = ref([]); const dateRange = ref([]);
const menuOptions = ref([]); const menuOptions = ref([]);
...@@ -195,36 +288,49 @@ const deptExpand = ref(true); ...@@ -195,36 +288,49 @@ const deptExpand = ref(true);
const deptNodeAll = ref(false); const deptNodeAll = ref(false);
const menuRef = ref(null); const menuRef = ref(null);
// 更多搜索框
const buttonMore = ref(false);
const buttonIcon = ref(true);
const data = reactive({ const queryParams = ref({
form: {},
queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 2,
id:undefined, id:undefined,
userName: undefined, userName: undefined,
projectName: undefined, projectName: undefined,
projectNumber: undefined, projectNumber: undefined,
sum: undefined, sum: undefined,
},
rules: {
roleName: [{ required: true, message: "角色名称不能为空", trigger: "blur" }],
roleKey: [{ required: true, message: "权限字符不能为空", trigger: "blur" }],
roleSort: [{ required: true, message: "角色顺序不能为空", trigger: "blur" }]
},
}); });
const { queryParams, form, rules } = toRefs(data);
/** 查询角色列表 */ /** 查询角色列表 */
async function getList() { async function getList() {
// console.log("坤坤",costManageList.value)
loading.value = true; loading.value = true;
const { rows, total: rowsTotal } = await listCostManage(queryParams.value) const { data, total: rowsTotal } = await listCostManage(queryParams.value)
costManageList.value = rows costManageList.value = data
// console.log("123",data)
for(let key in data){
// console.log(data)
data[key].tableItemList.sort((a, b) => {
if(a.status === 1 && b.status !== 1){
return -1;
}
if(b.status === 1 && a.status !== 1){
return 1;
}
return new Date(b.registrationTime) - new Date(a.registrationTime)
})
}
total.value = rowsTotal total.value = rowsTotal
loading.value = false loading.value = false
} }
// 更多搜索框按钮
function changeMore(){
buttonMore.value = !buttonMore.value;
buttonIcon.value = !buttonIcon.value;
}
/** 搜索按钮操作 */ /** 搜索按钮操作 */
function handleQuery() { function handleQuery() {
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
...@@ -264,16 +370,6 @@ function handleSelectionChange(selection) { ...@@ -264,16 +370,6 @@ function handleSelectionChange(selection) {
} }
/** 角色状态修改 */ /** 角色状态修改 */
// function handleStatusChange(row) {
// let text = row.status === "0" ? "启用" : "停用";
// proxy.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?').then(function () {
// return changeRoleStatus(row.roleId, row.status);
// }).then(() => {
// proxy.$modal.msgSuccess(text + "成功");
// }).catch(function () {
// row.status = row.status === "0" ? "1" : "0";
// });
// }
/** 查询菜单树结构 */ /** 查询菜单树结构 */
function getMenuTreeselect() { function getMenuTreeselect() {
...@@ -308,10 +404,7 @@ function reset() { ...@@ -308,10 +404,7 @@ function reset() {
/** 添加角色 */ /** 添加角色 */
function handleAdd() { function handleAdd() {
reset(); router.push('/costManage/daily-Reimburse/addDaily')
getMenuTreeselect();
open.value = true;
title.value = "添加角色";
} }
/** 修改角色 */ /** 修改角色 */
...@@ -347,44 +440,73 @@ function getRoleMenuTreeselect(roleId) { ...@@ -347,44 +440,73 @@ function getRoleMenuTreeselect(roleId) {
/** 分配数据权限操作 */ /** 分配数据权限操作 */
function handleDetail(row) { function handleDetail(row) {
console.log(666) // console.log(666)
router.push({ router.push('/costManage/daily-Reimburse/detail/' + row.id)
path: '/costManage/daily-Reimburse/detail', // console.log("111",row.id)
// query: {
// businessId: row.businessId,
// view: true
// }
})
} }
/** 自定义表格列 */ // /** 自定义表格列 */
// 是否全选 // // 是否全选
const isAllSelected = ref(true); // const isAllSelected = ref(true);
//
// 选择全选/全不选 // // 选择全选/全不选
const selectAll = () => { // const selectAll = () => {
const allSelected = isAllSelected.value; // const allSelected = isAllSelected.value;
columns.value.forEach((column) => { // columns.value.forEach((column) => {
column.visible = allSelected; // column.visible = allSelected;
}); // });
}; // };
//
// // 处理列的复选框变更
// const handleCheckboxChange = () => {
// // 检查是否所有列都被选中,如果是全选,设置 isAllSelected 为 true
// isAllSelected.value = columns.value.every((col) => col.visible);
// };
//
// // 处理命令
// const handleCommand = (command) => {
// if (command === 'select-all') {
// selectAll();
// }
// };
//
// // 使用计算属性来过滤显示的列
// const visibleColumns = computed(() => {
// return columns.value.filter(column => column.visible);
// });
getList();
</script>
// 处理列的复选框变更 <style scoped>
const handleCheckboxChange = () => { .search-right{
// 检查是否所有列都被选中,如果是全选,设置 isAllSelected 为 true margin-top: 10px;
isAllSelected.value = columns.value.every((col) => col.visible); }
}; .card-header {
display: flex;
justify-content: space-around;
align-items: center;
margin-bottom: 7px;
}
// 处理命令 .box-card {
const handleCommand = (command) => { width: 1570px;
if (command === 'select-all') { margin-bottom: 14px;
selectAll(); }
} .card-context{
}; margin-top: 16px;
}
// 使用计算属性来过滤显示的列 .card-footer{
const visibleColumns = computed(() => { display: flex;
return columns.value.filter(column => column.visible); justify-content: space-around;
}); align-items: center;
getList(); }
</script> .footer-step{
width: 800px;
}
.img-icon{
margin-right: 8px;
width: 24px;
height: 24px;
}
</style>
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