This commit is contained in:
zmj 2024-03-28 17:11:17 +08:00
parent 3f644be809
commit 089eecf29a
8 changed files with 278 additions and 126 deletions

View File

@ -24,3 +24,14 @@ export function apiFinancialTravelReimbursementDelete(params: any) {
export function apiFinancialTravelReimbursementDetail(params: any) {
return request.get({ url: '/financial.financial_travel_reimbursement/detail', params })
}
// 财务管理--差旅费报销单列表
export function apiFinancialTravelReimbursementDetailLists(params: any) {
return request.get({ url: '/financial.financial_travel_reimbursement_detail/lists', params })
}
// 删除财务管理--差旅费报销单
export function apiFinancialTravelReimbursementDetailDelete(params: any) {
return request.post({ url: '/financial.financial_travel_reimbursement_detail/delete', params })
}

View File

@ -21,16 +21,6 @@
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<!-- <el-button v-perms="['financial.financial_refund/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button> -->
<el-button v-perms="['financial.financial_refund/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table border :data="pager.lists">
<el-table-column label="合同名称" prop="contract_name" :render-header="pager.calcWidth" />
@ -57,18 +47,6 @@
<el-table-column label="开票未回款金额" prop="invoice_not_refund_amount" show-overflow-tooltip />
<el-table-column label="回款未开票金额" prop="refund_not_invoice_amount" show-overflow-tooltip />
<el-table-column label="合同结算日期" prop="settlement_date" show-overflow-tooltip width="120" />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<!-- <el-button v-perms="['financial.financial_refund/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button> -->
<el-button v-perms="['financial.financial_refund/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">

View File

@ -179,12 +179,6 @@ const tableConfig = reactive(
}
)
const customEvent = (e) => {
formData.contract_id = e.id
formData.contract_name = e.contract_name
formData.contract_type_text = e.contract_type_text
showDialog.value = false
}
const customEvent1 = (e) => {
formData.fee_application_id = e.id
formData.fee_application_theme = e.theme
@ -192,6 +186,12 @@ const customEvent1 = (e) => {
}
const customEvent = (e) => {
formData.contract_id = e.id
formData.contract_name = e.contract_name
formData.contract_type_text = e.contract_type_text
showDialog.value = false
}
//
const formRules = reactive<any>({
contract_id: [{

View File

@ -1,36 +1,36 @@
import { apiFinancialExpenseReimbursementDetailLists } from '@/api/financial_expense_reimbursement'
import { apiFinancialTravelReimbursementDetailLists } from '@/api/financial_travel_reimbursement'
const detailConfig = {
title: "财务管理--报销单",
title: "财务管理--差旅费报销单",
config: [
{
label: "合同名称",
value: "contract_name"
},
{
label: "合同类型",
value: "contract_type_text"
},
{
label: "费用申请单",
value: "fee_application_theme"
},
{
label: "单据主题",
value: "theme"
},
{
label: "单据编号",
value: "code"
},
{
label: "单据张数",
label: "审批部门",
value: "approve_dept_name"
},
{
label: "费用类别",
value: "cost_type_text"
},
{
label: "支付方式",
value: "pay_type_text"
},
{
label: "可抵扣税额",
value: "tax_deductible_amount"
},
{
label: "附单据张数",
value: "bill_num"
},
{
label: "单据编号",
value: "code"
label: "关联费用申请",
value: "fee_application_theme"
},
{
label: "支付方式",
@ -41,21 +41,6 @@ const detailConfig = {
value: "content",
column: 1
},
{
label: "单据编号",
value: "code"
},
{
label: "报销总金额",
value: "total_amount"
},
{
label: "附件",
value: "annex",
column: 1
},
{
label: "申请人",
value: "create_user"
@ -77,16 +62,44 @@ const detailConfig = {
},
{
label: "发生日期",
label: "起止日期",
value: 'date'
},
{
label: "科目名称",
value: 'subject_name_text',
label: "起止地点",
value: 'address',
},
{
label: "金额",
value: 'amount',
label: "交通费",
value: 'traffic_amount',
},
{
label: "住宿费",
value: 'stay_amount',
},
{
label: "住宿天数",
value: 'stay_days',
},
{
label: "住宿单价",
value: 'stay_price',
},
{
label: "补助天数",
value: 'subsidy_days',
},
{
label: "补助金额",
value: 'subsidy_amount',
},
{
label: "补贴减扣",
value: 'subsidy_deduction',
},
{
label: "补助标准",
value: 'subsidy_price',
},
{
label: "摘要",
@ -95,8 +108,8 @@ const detailConfig = {
],
query: 'expense_reimbursement_id',
fetchFun: apiFinancialExpenseReimbursementDetailLists,
query: 'travel_reimbursement_id',
fetchFun: apiFinancialTravelReimbursementDetailLists,
}
}

View File

@ -1,50 +1,86 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="单据编号" prop="code">
<el-input v-model="formData.code" clearable placeholder="请输入单据编号" />
<el-form-item label="单据编号">
<el-input v-model="formData.code" clearable placeholder="系统自动生成" disabled />
</el-form-item>
<el-form-item label="审批部门" prop="approve_dept">
<el-input v-model="formData.approve_dept" clearable placeholder="请输入审批部门" />
</el-form-item>
<el-form-item label="费用类别" prop="cost_type">
<el-input v-model="formData.cost_type" clearable placeholder="请输入费用类别" />
</el-form-item>
<el-form-item label="支付方式" prop="pay_type">
<el-input v-model="formData.pay_type" clearable placeholder="请输入支付方式" />
</el-form-item>
<el-form-item label="可抵扣税额" prop="tax_deductible_amount">
<el-input v-model="formData.tax_deductible_amount" clearable placeholder="请输入可抵扣税额" />
</el-form-item>
<el-form-item label="附单据张数" prop="bill_num">
<el-input v-model="formData.bill_num" clearable placeholder="请输入附单据张数" />
</el-form-item>
<el-form-item label="关联费用申请" prop="fee_application_id">
<el-input v-model="formData.fee_application_id" clearable placeholder="请输入关联费用申请" />
</el-form-item>
<el-form-item label="事由" prop="content">
<el-input v-model="formData.content" clearable placeholder="请输入事由" />
</el-form-item>
<!-- <el-form-item label="申请人" prop="create_user">
<el-input v-model="formData.create_user" clearable placeholder="请输入申请人" />
</el-form-item>
<el-form-item label="申请日期" prop="create_time">
<el-input v-model="formData.create_time" clearable placeholder="请输入申请日期" />
</el-form-item> -->
<!-- <createUserLable :></createUserLable> -->
</el-col>
<el-col :span="8">
<el-form-item label="审批部门" prop="approve_dept">
<el-select v-model="formData.approve_dept" placeholder="请选择部门" class="flex-1">
<el-option :label="item.name" :value="item.id" v-for="item in deptList">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="费用类别" prop="cost_type">
<el-select v-model="formData.cost_type" placeholder="请选择费用类别" class="flex-1">
<el-option :label="item.name" :value="parseInt(item.value)"
v-for="item in dictData.cost_type">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="支付方式" prop="pay_type">
<el-select v-model="formData.pay_type" placeholder="请选择支付方式" class="flex-1">
<el-option :label="item.name" :value="parseInt(item.value)"
v-for="item in dictData.financial_pay_type">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="可抵扣税额" prop="tax_deductible_amount">
<el-input v-model="formData.tax_deductible_amount" clearable placeholder="请输入可抵扣税额"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附单据张数" prop="bill_num">
<el-input v-model="formData.bill_num" clearable placeholder="请输入附单据张数" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="关联费用申请" prop="fee_application_theme">
<el-input v-model="formData.fee_application_theme" clearable placeholder="点击选择费用申请单"
@click="showDialog1 = true" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="事由">
<el-input v-model="formData.content" clearable placeholder="请输入事由" type="textarea" />
</el-form-item>
</el-col>
<create-user-lable flag name="申请" :form-data="formData"></create-user-lable>
</el-row>
<FormTable :form-data="formData.detail" :config="tableConfig">
<el-table-column label="部门">
<template #default="{ row }">
<el-select v-model="row.dept_id" placeholder="请选择部门">
<el-option :label="item.name" :value="item.id" v-for="item in deptList">
</el-option>
</el-select>
</template>
</el-table-column>
<!-- <template #accumulate>
<el-col :span="8">
<el-form-item label="报销总金额:">
{{ total_amount }}
</el-form-item>
</el-col>
</template> -->
</FormTable>
</el-form>
<el-dialog v-model="showDialog1" title="选择费用申请单" width="70%">
<dialogTable :config="financial_fee_application" @customEvent="customEvent1">
</dialogTable>
</el-dialog>
</popup>
</div>
</template>
@ -52,9 +88,13 @@
<script lang="ts" setup name="financialTravelReimbursementEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiFinancialTravelReimbursementAdd, apiFinancialTravelReimbursementEdit, apiFinancialTravelReimbursementDetail } from '@/api/financial_travel_reimbursement'
import { apiFinancialTravelReimbursementAdd, apiFinancialTravelReimbursementEdit, apiFinancialTravelReimbursementDetail, apiFinancialTravelReimbursementDetailLists, apiFinancialTravelReimbursementDetailDelete } from '@/api/financial_travel_reimbursement'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { deptLists } from "@/api/org/department"
import { financial_fee_application } from "@/components/dialogTable/dialogTableConfig";
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -65,6 +105,7 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog1 = ref(false)
//
@ -82,11 +123,90 @@ const formData = reactive({
tax_deductible_amount: '',
bill_num: '',
fee_application_id: '',
fee_application_theme: "",
content: '',
create_user: '',
create_time: '',
"detail": [
{
"dept_id": '',
"date": "",
"address": "",
"traffic_amount": 0,
"stay_amount": 0,
"stay_days": 0,
"stay_price": 0,
"subsidy_days": 0,
"subsidy_price": 0,
"subsidy_amount": 0,
"subsidy_deduction": 0,
"abstract": ""
}
]
})
const tableConfig = reactive(
{
title: "报销明细",
tableConfig: [
{
label: "起止日期",
value: 'date',
date: true
},
{
label: "起止地点",
value: 'address',
},
{
label: "交通费",
value: 'traffic_amount',
},
{
label: "住宿费",
value: 'stay_amount',
},
{
label: "住宿天数",
value: 'stay_days',
},
{
label: "住宿单价",
value: 'stay_price',
},
{
label: "补助天数",
value: 'subsidy_days',
},
{
label: "补助金额",
value: 'subsidy_amount',
},
{
label: "补贴减扣",
value: 'subsidy_deduction',
},
{
label: "补助标准",
value: 'subsidy_price',
},
{
label: "摘要",
value: 'abstract',
},
],
deleteApi: apiFinancialTravelReimbursementDetailDelete,
}
)
const customEvent1 = (e) => {
formData.fee_application_id = e.id
formData.fee_application_theme = e.theme
showDialog1.value = false
}
//
const formRules = reactive<any>({
@ -151,7 +271,8 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
let res = await apiFinancialTravelReimbursementDetailLists({ travel_reimbursement_id: data.id })
formData.detail = res.lists
}
@ -186,7 +307,13 @@ const handleClose = () => {
}
const deptList = ref([])
const getDeptList = async () => {
let res = await deptLists()
deptList.value = res.lists
}
getDeptList()
defineExpose({
open,
setFormData,

View File

@ -5,14 +5,17 @@
<el-form-item label="单据编号" prop="code">
<el-input class="w-[280px]" v-model="queryParams.code" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="审批部门" prop="approve_dept">
<el-input class="w-[280px]" v-model="queryParams.approve_dept" clearable placeholder="请输入审批部门" />
</el-form-item>
<el-form-item label="费用类别" prop="cost_type">
<el-input class="w-[280px]" v-model="queryParams.cost_type" clearable placeholder="请输入费用类别" />
<el-select v-model="queryParams.cost_type" placeholder="请选择费用类别" class="flex-1">
<el-option :label="item.name" :value="item.value" v-for="item in dictData.cost_type">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="支付方式" prop="pay_type">
<el-input class="w-[280px]" v-model="queryParams.pay_type" clearable placeholder="请输入支付方式" />
<el-select v-model="queryParams.pay_type" placeholder="请选择支付方式" class="flex-1">
<el-option :label="item.name" :value="item.value" v-for="item in dictData.financial_pay_type">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="申请人" prop="create_user">
<el-input class="w-[280px]" v-model="queryParams.create_user" clearable placeholder="请输入申请人" />
@ -38,16 +41,16 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange" border>
<el-table-column type="selection" width="55" />
<el-table-column label="单据编号" prop="code" show-overflow-tooltip />
<el-table-column label="审批部门" prop="approve_dept" show-overflow-tooltip />
<el-table-column label="费用类别" prop="cost_type" show-overflow-tooltip />
<el-table-column label="支付方式" prop="pay_type" show-overflow-tooltip />
<el-table-column label="审批部门" prop="approve_dept_name" show-overflow-tooltip />
<el-table-column label="费用类别" prop="cost_type_text" show-overflow-tooltip />
<el-table-column label="支付方式" prop="pay_type_text" show-overflow-tooltip />
<el-table-column label="可抵扣税额" prop="tax_deductible_amount" show-overflow-tooltip />
<el-table-column label="附单据张数" prop="bill_num" show-overflow-tooltip />
<el-table-column label="关联费用申请" prop="fee_application_id" show-overflow-tooltip />
<!-- <el-table-column label="关联费用申请" prop="fee_application_id" show-overflow-tooltip /> -->
<el-table-column label="事由" prop="content" show-overflow-tooltip />
<el-table-column label="申请人" prop="create_user" show-overflow-tooltip />
<el-table-column label="申请日期" prop="create_time" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['financial.financial_travel_reimbursement/edit']" type="primary" link
@click="handleEdit(row)">
@ -57,6 +60,10 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['financial.financial_travel_reimbursement/detail']" link
@click="handleDetail(row.id)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
@ -66,20 +73,25 @@
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detailPage v-if="showDetail" ref="detailRef" @close="showDetail = false" :detailConfig="detailConfig" />
</div>
</template>
<script lang="ts" setup name="financialTravelReimbursementLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiFinancialTravelReimbursementLists, apiFinancialTravelReimbursementDelete } from '@/api/financial_travel_reimbursement'
import { apiFinancialTravelReimbursementLists, apiFinancialTravelReimbursementDelete, apiFinancialTravelReimbursementDetail } from '@/api/financial_travel_reimbursement'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import detailConfig from './detail'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailRef = ref('')
//
const showEdit = ref(false)
const showDetail = ref(false)
//
@ -100,7 +112,7 @@ const handleSelectionChange = (val: any[]) => {
}
//
const { dictData } = useDictData('')
const { dictData } = useDictData('cost_type,financial_pay_type')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
@ -117,10 +129,11 @@ const handleAdd = async () => {
//
const handleEdit = async (data: any) => {
let res = await apiFinancialTravelReimbursementDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
editRef.value?.setFormData(res)
}
//
@ -130,6 +143,16 @@ const handleDelete = async (id: number | any[]) => {
getLists()
}
//
const handleDetail = async (id: any) => {
let res = await apiFinancialTravelReimbursementDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -27,7 +27,7 @@
</el-button>
<div class="mt-4">
<el-table border border :data="pager.lists" @selection-change="handleSelectionChange">
<el-table border :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="项目类型" prop="project_type_name" show-overflow-tooltip />

View File

@ -31,7 +31,7 @@
</el-button>
<div class="mt-4">
<el-table border border :data="pager.lists" @selection-change="handleSelectionChange">
<el-table border :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="投标编号" prop="bidding_decision_code" :render-header="pager.calcWidth" />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />