费用审核
parent
c550d114b1
commit
52a95d7ed5
@ -0,0 +1,40 @@
|
||||
<!--
|
||||
* @Description: 审核审批 -> 费用操作栏
|
||||
* @Author: lijj
|
||||
* @Date: 2024-06-13 17:08:08
|
||||
-->
|
||||
<template>
|
||||
<div class="ds-approve-mian-action-bar">
|
||||
<a-button type="link">
|
||||
<span class="iconfont icon-chenggong"></span>
|
||||
审核通过
|
||||
</a-button>
|
||||
<a-button type="link">
|
||||
<span class="iconfont icon-xiajiantou"></span>
|
||||
配对审核
|
||||
</a-button>
|
||||
<a-button type="link">驳回提交</a-button>
|
||||
<a-button type="link">禁开发票</a-button>
|
||||
<a-button type="link">解禁发票</a-button>
|
||||
<a-button type="link">批准申请</a-button>
|
||||
<a-button type="link">驳回申请</a-button>
|
||||
<a-button type="link">历史申请</a-button>
|
||||
<a-button type="link">查看信息</a-button>
|
||||
<a-button type="link">显示工作量</a-button>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref, reactive, defineProps, watch, defineEmits } from 'vue'
|
||||
import { AuditByBiz } from '../api'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
const { createMessage } = useMessage()
|
||||
onMounted(() => {
|
||||
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.ds-approve-mian-action-bar {
|
||||
|
||||
}
|
||||
</style>
|
@ -0,0 +1,227 @@
|
||||
<!--
|
||||
* @Description: 审核审批 -> 费用表格组件
|
||||
* @Author: lijj
|
||||
* @Date: 2024-06-13 17:08:08
|
||||
-->
|
||||
<template>
|
||||
<div class="ds-approve-fee-table">
|
||||
<BasicTable
|
||||
@register="registerTable"
|
||||
:scroll="{ x: '100%', y: '162px'}"
|
||||
@selection-change="selectHandle"
|
||||
>
|
||||
<template #toolbar>
|
||||
<FeeActionBar
|
||||
></FeeActionBar>
|
||||
</template>
|
||||
<template v-slot:bodyCell="{ column, record }">
|
||||
<template v-if="column.dataIndex == 'feeStatusText'">
|
||||
<span v-if="record.feeStatus != 1" class="ds-green-status">● {{ record.feeStatusText }}</span>
|
||||
<span v-else class="ds-orange-status">● {{ record.feeStatusText }}</span>
|
||||
</template>
|
||||
</template>
|
||||
</BasicTable>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref, reactive, defineProps, watch, defineExpose } from 'vue'
|
||||
import { BasicTable, useTable } from '/@/components/Table'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
import { GetList } from '/@/components/CostEntry/api'
|
||||
import FeeActionBar from './feeActionBar.vue'
|
||||
import emitter from '/@/utils/Bus'
|
||||
const { notification } = useMessage()
|
||||
const props = defineProps({
|
||||
// 业务id
|
||||
id: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
},
|
||||
// 表格类型
|
||||
tbType: {
|
||||
type: String,
|
||||
default: null
|
||||
}
|
||||
})
|
||||
const [registerTable, { reload, setTableData, getDataSource, getSelectRows }] = useTable({
|
||||
title: props.tbType == 'receive' ? '应收费用' : '应付费用',
|
||||
striped: false,
|
||||
api: async (p) => {
|
||||
const res = await GetList(p)
|
||||
return new Promise((resolve) => {
|
||||
res.data.forEach(item => {
|
||||
// item.stlDate = formatTableData(item.stlDate)
|
||||
// item.etd = formatTableData(item.etd)
|
||||
// item.closingDate = formatTableData(item.closingDate)
|
||||
// item.eta = formatTableData(item.eta)
|
||||
// item.issueDate = formatTableData(item.issueDate)
|
||||
// item.customDate = formatTableData(item.customDate)
|
||||
// item.inspectionDate = formatTableData(item.inspectionDate)
|
||||
})
|
||||
resolve({ data: [...res.data], total: res.count })
|
||||
})
|
||||
},
|
||||
beforeFetch: () => {
|
||||
const postParam = {
|
||||
pageCondition: {
|
||||
pageIndex: 1,
|
||||
pageSize: 1000,
|
||||
sortConditions: []
|
||||
},
|
||||
queryCondition: JSON.stringify([
|
||||
{ FieldName: 'BusinessId', FieldValue: props.id[props.id.length - 1]?.id, ConditionalType: 1 },
|
||||
{ FieldName: 'FeeType', FieldValue: props.tbType == 'receive' ? 1 : 2, ConditionalType: 1 },
|
||||
{ FieldName: 'FeeStatus', FieldValue: 2, ConditionalType: 1 }
|
||||
])
|
||||
}
|
||||
return postParam
|
||||
},
|
||||
afterFetch: () => {
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
dataIndex: 'feeStatusText',
|
||||
title: '费用状态',
|
||||
align: 'left',
|
||||
width: 90
|
||||
},
|
||||
{
|
||||
dataIndex: 'feeName',
|
||||
title: props.tbType == 'receive' ? '应收费用名称' : '应付费用名称',
|
||||
align: 'left',
|
||||
width: 130
|
||||
},
|
||||
{
|
||||
dataIndex: 'feeEnName',
|
||||
title: '费用英文名称',
|
||||
align: 'left',
|
||||
width: 130
|
||||
},
|
||||
{
|
||||
dataIndex: 'customerTypeText',
|
||||
align: 'left',
|
||||
title: '客户类别',
|
||||
width: 130
|
||||
},
|
||||
{
|
||||
dataIndex: 'customerName',
|
||||
align: 'left',
|
||||
title: '结算对象',
|
||||
width: 130
|
||||
},
|
||||
{
|
||||
dataIndex: 'unitText',
|
||||
align: 'left',
|
||||
title: '单位标准',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
dataIndex: 'taxRate',
|
||||
align: 'left',
|
||||
title: '税率',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
dataIndex: 'unitPrice',
|
||||
align: 'left',
|
||||
title: '单价',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
dataIndex: 'quantity',
|
||||
align: 'left',
|
||||
title: '数量',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
dataIndex: 'noTaxPrice',
|
||||
align: 'left',
|
||||
title: '不含税单价',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
dataIndex: 'noTaxAmount',
|
||||
align: 'left',
|
||||
title: '不含税金额',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
dataIndex: 'amount',
|
||||
align: 'left',
|
||||
title: '金额',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
dataIndex: 'currency',
|
||||
align: 'left',
|
||||
title: '币别',
|
||||
width: 120
|
||||
}
|
||||
],
|
||||
isTreeTable: false,
|
||||
pagination: false,
|
||||
useSearchForm: false,
|
||||
showTableSetting: false,
|
||||
bordered: false,
|
||||
showIndexColumn: true,
|
||||
canResize: false,
|
||||
rowSelection: { type: 'checkbox' },
|
||||
immediate: false
|
||||
})
|
||||
emitter.on('showTodo', (v) => {
|
||||
if (v) {
|
||||
const source = getDataSource()
|
||||
const res = source.filter(item => {
|
||||
return item.feeStatus == 1
|
||||
})
|
||||
setTableData(res)
|
||||
} else {
|
||||
|
||||
}
|
||||
})
|
||||
// 海运出口已选项
|
||||
const state = reactive({
|
||||
historyRowKeys: []
|
||||
})
|
||||
const selectHandle = () => {
|
||||
|
||||
}
|
||||
watch(
|
||||
() => props.id,
|
||||
(v) => {
|
||||
if (v && v.length) {
|
||||
reload()
|
||||
} else {
|
||||
setTableData([])
|
||||
}
|
||||
}
|
||||
)
|
||||
onMounted(() => {
|
||||
if (props.id && props.id.length) {
|
||||
//初始化
|
||||
reload()
|
||||
}
|
||||
})
|
||||
defineExpose({
|
||||
reload
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.ds-approve-fee-table {
|
||||
.ant-table-body {
|
||||
height: 162px!important;
|
||||
}
|
||||
.ant-table-title {
|
||||
min-height: 22px!important;
|
||||
.items-center {
|
||||
height: 22px;
|
||||
}
|
||||
.vben-basic-title {
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
@ -0,0 +1,118 @@
|
||||
<!--
|
||||
* @Description: 审核审批 -> 主业务操作栏
|
||||
* @Author: lijj
|
||||
* @Date: 2024-06-13 17:08:08
|
||||
-->
|
||||
<template>
|
||||
<div class="ds-approve-mian-action-bar">
|
||||
<a-button type="link" @click="toggleSearch">{{ searchFlag? '隐藏查询' : '显示查询' }}</a-button>
|
||||
<a-dropdown>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item @click="approve(1)">所选业务审核</a-menu-item>
|
||||
<a-menu-item @click="approve(2)">全部业务审核</a-menu-item>
|
||||
<!-- <a-menu-item @click="approve(3)">所选业务审核(仅检索出费用)</a-menu-item>
|
||||
<a-menu-item @click="approve(4)">全部业务审核(仅检索出费用)</a-menu-item> -->
|
||||
</a-menu>
|
||||
</template>
|
||||
<a-button type="link">
|
||||
批量审核
|
||||
<span class="iconfont icon-xia" :style="{ fontSize: '12px' }"></span>
|
||||
</a-button>
|
||||
</a-dropdown>
|
||||
<a-dropdown>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item @click="lock(1)">所选业务锁定</a-menu-item>
|
||||
<a-menu-item @click="lock(2)">全部业务解锁</a-menu-item>
|
||||
<!-- <a-menu-item @click="approve(3)">所选业务审核(仅检索出费用)</a-menu-item>
|
||||
<a-menu-item @click="approve(4)">全部业务审核(仅检索出费用)</a-menu-item> -->
|
||||
</a-menu>
|
||||
</template>
|
||||
<a-button type="link">
|
||||
费用锁定
|
||||
<span class="iconfont icon-xia" :style="{ fontSize: '12px' }"></span>
|
||||
</a-button>
|
||||
</a-dropdown>
|
||||
<a-checkbox v-model:checked="check">仅需审核业务</a-checkbox>
|
||||
<a-checkbox v-model:checked="feeInfo">费用明细仅显示待审核</a-checkbox>
|
||||
<a-button type="link">隐藏查询</a-button>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref, reactive, defineProps, watch, defineEmits } from 'vue'
|
||||
import { AuditByBiz } from '../api'
|
||||
import emitter from '/@/utils/Bus'
|
||||
import { useMessage } from '/@/hooks/web/useMessage'
|
||||
const { createMessage } = useMessage()
|
||||
const emit = defineEmits(['apporveHandle', 'update:searchFlag'])
|
||||
const feeInfo = ref(false)
|
||||
const check = ref(false)
|
||||
const props = defineProps({
|
||||
// 所选业务id集合
|
||||
ids: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
},
|
||||
data: {
|
||||
type: Array,
|
||||
default: () => {
|
||||
return []
|
||||
}
|
||||
},
|
||||
searchFlag: {
|
||||
type: Boolean
|
||||
}
|
||||
})
|
||||
// 批量审核
|
||||
const approve = (v, parent) => {
|
||||
const postData = {
|
||||
result: 1,
|
||||
remark: "同意",
|
||||
items: []
|
||||
}
|
||||
if (v == 1) {
|
||||
// 所选业务审核
|
||||
if (props.ids.length == 0) return createMessage.warning('请选择要审核的业务!')
|
||||
postData.items = props.ids
|
||||
} else if (v == 2) {
|
||||
// 所有业务审核
|
||||
postData.items = props.data.map(item => {
|
||||
return { id: item?.id, businessType: item?.businessType }
|
||||
})
|
||||
}
|
||||
emit('apporveHandle')
|
||||
AuditByBiz(postData).then(res => {
|
||||
if (res.succeeded) {
|
||||
createMessage.success(res.message)
|
||||
}
|
||||
emit('apporveHandle')
|
||||
}).catch(() => {
|
||||
emit('apporveHandle')
|
||||
})
|
||||
}
|
||||
// 业务锁定、解锁
|
||||
const lock = () => {
|
||||
createMessage.warning('开发中!')
|
||||
}
|
||||
const toggleSearch = () => {
|
||||
emit('update:searchFlag', !props.searchFlag)
|
||||
}
|
||||
watch(
|
||||
() => feeInfo.value,
|
||||
(v) => {
|
||||
emitter.emit('showTodo', v)
|
||||
}
|
||||
)
|
||||
onMounted(() => {
|
||||
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.ds-approve-mian-action-bar {
|
||||
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue