付费申请明细

szh-new
lijingjia 2 months ago
parent 041bef0e4d
commit 7ce5766f0f

@ -9,7 +9,7 @@
:loading="loading"
:row-selection="{ selectedRowKeys: state.infoRowKeys, onChange: infoChange }"
rowKey="id"
:scroll="{ x: '100%', y: 300 }"
:scroll="{ x: '100%', y: tHeight }"
:columns="nowFeeColumns"
:data-source="feeData"
:pagination="false"
@ -36,7 +36,7 @@
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, watch } from 'vue'
import { ref, reactive, defineExpose, watch, defineProps } from 'vue'
//
import { feeColumns, feeApplyColumns } from './feeColumns'
import { feeStatusList } from '../columns'
@ -44,6 +44,12 @@
import { GetList, GetFees } from '../api'
// id
import { GetFeeTemplateDetailList } from '/@/views/fee/template/api'
const props = defineProps({
tHeight: {
type: Number,
default: 300
}
})
//
const state = reactive({
infoRowKeys: []

@ -191,7 +191,7 @@
})
const checkIndex = ref(false)
const checkSelect = ref(false)
const checkSelect = ref(true)
const { prefixCls } = useDesign('basic-column-setting')

@ -9,6 +9,7 @@ import { useOptionsStore } from '/@/store/modules/options'
const optionsStore = useOptionsStore()
import { useRoute } from 'vue-router'
const route = useRoute()
import { GetClientListByCode, getOrgList } from '/@/api/common'
// 引入字典数据
import { getDictOption } from '/@/utils/dictUtil'
import { placeholderSign } from 'element-plus/es/components/table-v2/src/private'
@ -396,42 +397,86 @@ export const formSchema: FormSchema[] = [
]
export const searchFormSchema: FormSchema[] = [
{
label: '结算对象',
label: '费用对象',
field: 'customerId',
component: 'ApiSelect',
dynamicDisabled: false,
colProps: { span: 4 },
componentProps: () => {
return {
option: optionsStore.getOptionsByCode('GetClientListByCode'),
labelField: 'shortName',
api: GetClientListByCode,
labelField: 'pinYinCode',
showName: 'shortName',
valueField: 'id',
resultField: 'data',
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
}
immediate: false
}
}
},
{
label: '主提单号',
field: 'mblno',
label: '编号查询',
field: 'mblno:hblno:debitNo:hblno:bookingNO:customerNo',
component: 'Input',
dynamicDisabled: false,
colProps: { span: 4 }
},
{
label: '分提单号',
field: 'hblno',
label: '编号查询',
field: 'mblno:hblno:debitNo',
component: 'Input',
dynamicDisabled: false,
colProps: { span: 4 }
},
{
label: '对账编号',
field: 'debitNo',
component: 'Input',
dynamicDisabled: false,
colProps: { span: 4 }
field: 'accountDate',
label: '会计期间',
component: 'DatePicker',
colProps: { span: 4 },
componentProps: {
allowClear: true,
valueFormat: 'YYYY-MM'
}
},
{
field: 'isInvoice',
label: '是否开票',
defaultValue: false,
component: 'Select',
colProps: { span: 4 },
componentProps: {
options: [
{ label: '是', value: true },
{ label: '否', value: false }
]
}
},
{
field: 'isAdvancedPay',
label: '是否垫付',
defaultValue: false,
component: 'Select',
colProps: { span: 4 },
componentProps: {
options: [
{ label: '是', value: true },
{ label: '否', value: false }
]
}
},
{
label: '所属分部',
field: 'saleOrgId',
component: 'ApiSelect',
required: false,
colProps: { span: 4 },
componentProps: () => {
return {
api: getOrgList,
labelField: 'label',
valueField: 'id',
resultField: 'data',
immediate: false
}
}
}
]

@ -7,24 +7,32 @@
<div class="ds-pay-apply-detail-fee-info">
<BasicTable @register="registerTable">
<template #tableTitle>
<h4>申请明细</h4>
<div>
<a-button type="link" @click="add"> </a-button>
<a-popconfirm
:visible="deleteFlag"
title="确定要删除勾选的数据?"
ok-text="确定"
cancel-text="取消"
@confirm="del"
@cancel="cancelDel"
@click="checkDel"
>
<a-button danger type="link" >
<span class="iconfont icon-shanchu1" :style="{ fontSize: '12px' }"></span>
删除
<div class="flex">
<h4>申请明细</h4>
<div>
<a-button class="ml15" type="link" @click="add">
<span class="iconfont icon-zengjiatianjiajiajian" :style="{ fontSize: '12px' }"></span>
添加
</a-button>
<a-popconfirm
:visible="deleteFlag"
title="确定要删除勾选的数据?"
ok-text="确定"
cancel-text="取消"
@confirm="del"
@cancel="cancelDel"
@click="checkDel"
>
<a-button type="link" >
<span class="iconfont icon-shanchu1" :style="{ fontSize: '12px' }"></span>
删除
</a-button>
</a-popconfirm>
<a-button style="margin-left: 100px;" type="link" @click="exportExcel">
<span class="iconfont icon-fujian" :style="{ fontSize: '12px' }"></span>
导出
</a-button>
</a-popconfirm>
<a-button type="link" @click="exportExcel"> </a-button>
</div>
</div>
</template>
</BasicTable>
@ -142,10 +150,13 @@
<style lang="less">
.ds-pay-apply-detail-fee-info {
.vben-basic-table-header__toolbar {
h4 {
margin-bottom: 0;
}
h4 {
margin-bottom: 0;
}
.flex {
align-items: center;
}
.items-center {
justify-content: space-between;
}
.vben-basic-table .ant-table-wrapper {

@ -9,30 +9,68 @@
<BasicTable
class="ds-table-detail"
:canRowSelect="true"
:scroll="{ x: '100%', y: 500 }"
style="height: 500px;"
:scroll="{ x: '100%', y: 400 }"
:row-selection="{ selectedRowKeys: state.historyRowKeys, onChange: historyChange }"
rowKey="id"
@register="registerTable"
@row-click="onRowClick"
>
<template #toolbar>
<a-button type="link" @click="addInfos"></a-button>
<div class="flex">
<h4>结算明细</h4>
<a-button class="ml15" type="link" @click="addInfos">
<span class="iconfont icon-zengjiatianjiajiajian" :style="{ fontSize: '12px' }"></span>
增加结算明细
</a-button>
</div>
</template>
<template #right>
<Divider
type="vertical"
/>
<div class="info">
<div>
<a-button @click="save" type="link">增加申请费用明细</a-button>
<div style="height: 48px;">
<a-button type="link" @click="save" style="margin: 8px -10px;">
<span class="iconfont icon-zengjiatianjiajiajian" :style="{ fontSize: '12px' }"></span>
增加申请费用明细
</a-button>
</div>
<feeTable
style="width: 350px;"
:tHeight="364"
ref="feeTabel"
></feeTable>
</div>
</template>
<template #footer>
<div class="main-statistic">
<span>选中合计</span>
<span>
<span class="title">未收RMB:</span>
<span class="count">{{ rrmb }}</span>
</span>
<span>
<span class="title">未付RMB:</span>
<span class="count">{{ prmb }}</span>
</span>
<span>
<span class="title">未收USD:</span>
<span class="count">{{ rusd }}</span>
</span>
<span>
<span class="title">未付USD:</span>
<span class="count">{{ pusd }}</span>
</span>
<span>
<span class="title">未收其他:</span>
<span class="count">{{ rother }}</span>
</span>
<span>
<span class="title">未付其他:</span>
<span class="count">{{ pother }}</span>
</span>
</div>
</template>
</BasicTable>
<!-- <div class="info">
<div>
@ -73,6 +111,18 @@
type: Function
}
})
// rmb
const rrmb = ref(0)
// rmb
const prmb = ref(0)
// usd
const rusd = ref(0)
// usd
const pusd = ref(0)
//
const rother = ref(0)
//
const pother = ref(0)
const loading = ref(false)
const [registerTable, { reload, getForm, getPaginationRef, getSelectRows, setSelectedRows, getDataSource }] = useTable({
api: async (p) => {
@ -89,7 +139,9 @@
columns: businessColumns,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema
schemas: searchFormSchema,
// ()
useAdvancedSearch: true
},
isTreeTable: false,
pagination: true,
@ -97,7 +149,7 @@
useSearchForm: true,
showTableSetting: false,
bordered: true,
showIndexColumn: true,
showIndexColumn: false,
canResize: false,
immediate: false
})
@ -305,6 +357,21 @@
let btype = rows[0].businessType
feeTabel.value.init(v, 'apply', btype)
}
rrmb.value = 0
prmb.value = 0
rusd.value = 0
pusd.value = 0
rother.value = 0
pother.value = 0
//
rows.forEach(item => {
rrmb.value = rrmb.value + item.unreceivedRMB || 0
prmb.value = prmb.value + item.unpaidRMB || 0
rusd.value = rusd.value + item.unreceivedUSD || 0
pusd.value = pusd.value + item.unpaidUSD || 0
rother.value = rother.value + item.unreceivedOther || 0
pother.value = pother.value + item.unpaidOther || 0
})
})
onMounted(async () => {
@ -326,6 +393,36 @@
<style lang="less">
.ds-bus-table {
.main-statistic {
background: #ffffff;
font-size: 12px;
height: 34px;
display: flex;
align-items: center;
.title {
font-size: 14px;
font-weight: 600;
margin-left: 20px;
}
.count {
font-size: 14px;
font-weight: 600;
color: #257AFA;
}
}
.ant-table-container {
height: 400px;
}
.ant-table-body {
height: 364px!important;
}
.flex {
height: 48px;
align-items: center;
h4 {
margin-bottom: 0;
}
}
.ant-divider-vertical {
margin: 12px 20px;
height: auto;

@ -299,6 +299,16 @@
})
}
}
// :
if (status && status != 'WAIT_ORDER_AUDIT' && status != 'ORDER_AUDIT_REJECTED') {
if (content && content.length) {
content.forEach(item => {
if (item.field == 'carrier' || item.field == 'loadPortCode' || item.field == 'dischargePortCode' || item.field == 'deliveryPlaceCode' || item.field == 'contractClientName' || item.field == 'contractNo') {
item['dynamicDisabled'] = true
}
})
}
}
//
OtherInfo.value.updateSchema(content)
RefbasicInfo.value.updateSchema(content)
@ -417,7 +427,7 @@
if (!goodsForm.ctnPriceInfo[i].quotePrice && goodsForm.ctnPriceInfo[i].quotePrice !== 0) {
return createMessage.warning('请填写报价!')
}
if (route.query.status == 'WAIT_ORDER_AUDIT' && !goodsForm.ctnPriceInfo[i].floorPrice) {
if (route.query.status == 'WAIT_ORDER_AUDIT' && !goodsForm.ctnPriceInfo[i].floorPrice && goodsForm.ctnPriceInfo[i].floorPrice !== 0) {
return createMessage.warning('请填写底价!')
}
}
@ -861,7 +871,6 @@
businessType: 1,
taskTypeName: 'WAIT_ORDER_AUDIT'
}).then(res => {
console.log(res)
tabStore.closeTabByKey(fullPath, router)
})
} else {

@ -110,19 +110,7 @@
async function handleSave(exit) {
try {
const values = await validate()
// const postData = {}
// postData['clientId'] = values.customerId
// postData['tel'] = values.tel
// postData['email'] = values.email
// postData['note'] = values.note
// postData['name'] = values.name
// if (values.customerContactId) {
// //
// postData['id'] = values.customerContactId
// }
// ApiEdit(postData).then(res => {
// console.log(res)
// })
if (!values.mobile && !values.tel) return createMessage.warning('请填写电话或者手机!')
values['businessId'] = id.value
loading.value = true
setModalProps({ confirmLoading: true, loading: true })

@ -688,8 +688,8 @@ export const mailingInfoFormSchemaR: FormSchema[] = [
colProps: { className: 'edt-picker ant-col ant-col-5' },
componentProps: {
allowClear: true,
valueFormat: 'YYYY-MM-DD',
},
valueFormat: 'YYYY-MM-DD'
}
},
{
field: 'closingDate',
@ -2798,7 +2798,6 @@ export const otherInfoFormSchema: FormSchema[] = [
// 客户类别下拉框数据
const customTypeDict = ref([])
const companyDict = ref([])
const personList = ref([])
getDictOption('djy_cust_prop').then((data) => {
customTypeDict.value = data
@ -2825,14 +2824,6 @@ export const personFormSchema: FormSchema[] = [
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
onChange: (v: string, obj) => {
GetClientListByCode({ code: v }).then((res) => {
const { data } = res
data.forEach((item) => {
item['label'] = item.shortName
item['value'] = item.id
})
companyDict.value = data
})
if (obj) {
formModel.customerTypeName = obj.label
} else {
@ -2849,44 +2840,44 @@ export const personFormSchema: FormSchema[] = [
},
},
{
field: 'customerId',
field: 'customerName',
label: '客户名称',
defaultValue: null,
component: 'Select',
component: 'ApiSelect',
colProps: { span: 12 },
componentProps: ({ formModel }) => {
return {
options: companyDict.value,
allowClear: true,
showSearch: true,
filterOption: (input: string, option: any) => {
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
},
api: GetClientListByCode,
params: { code: formModel.customerType },
labelField: 'pinYinCode',
showName: 'shortName',
valueField: 'shortName',
immediate: false,
onChange: (v, obj) => {
if (obj) {
formModel.name = null
formModel.customerName = obj.label
formModel.customerId = obj.id
formModel.customerContactId = null
formModel.email = ''
formModel.tel = ''
}
// 设置关系人下拉
GetOrderContactListByClientId({ id: v }).then((res) => {
personList.value = res.data.map((item) => {
return {
label: item.name,
value: item.id,
email: item.email,
mobile: item.mobile,
}
// 设置关系人下拉
GetOrderContactListByClientId({ id: obj.id }).then((res) => {
personList.value = res.data.map((item) => {
return {
label: item.name,
value: item.id,
email: item.email,
mobile: item.mobile,
}
})
})
})
},
}
}
}
},
}
},
{
field: 'customerName',
field: 'customerId',
label: '',
component: 'Input',
show: false,
@ -2923,6 +2914,12 @@ export const personFormSchema: FormSchema[] = [
}
},
},
{
label: '职位',
field: 'duty',
component: 'Input',
colProps: { span: 12 }
},
{
field: 'customerContactId',
label: '',
@ -2948,7 +2945,6 @@ export const personFormSchema: FormSchema[] = [
label: '手机',
field: 'mobile',
component: 'Input',
required: true,
rules: [
{
pattern: /^1\d{10}$/,

@ -74,7 +74,7 @@
<a-input-number v-model:value="item.floorPrice" size="small" :min="0" :max="999999999" placeholder="底价" />
</div>
<span v-show="model.ctnPriceInfo.length > 1" @click="deleteCtnPrice(model.ctnPriceInfo, index, item)" class="iconfont icon-del"></span>
<span v-show="model.ctnPriceInfo.length != 3" @click="model.ctnPriceInfo.push({ guidePrice: 0, floorPrice: 0 })" class="iconfont icon-zengjiatianjiajiajian"></span>
<span v-show="model.ctnPriceInfo.length != 3" @click="model.ctnPriceInfo.push()" class="iconfont icon-zengjiatianjiajiajian"></span>
</div>
</div>
</a-form-item-rest>

@ -1566,6 +1566,7 @@
<style lang="less" scoped>
.operation-area {
display: flex;
height: 48px;
align-items: center;
span {
display: inline-block;

@ -849,6 +849,7 @@
const [registerTable, { reload, setProps, getForm, getSelectRows, setColumns }] = useTable({
api: async (p) => {
const res: API.DataResult = await GetPageAsync(p)
console.log(res)
return new Promise((resolve) => {
res.data.forEach((item) => {
if (item.recvUserList) {

Loading…
Cancel
Save