lijingjia 4 months ago
commit f90e9e93ed

@ -161,6 +161,34 @@ export const formSchema: FormSchema[] = [
defaultValue: '',
colProps: { span: 12 },
},
{
field: 'registPartyCode',
label: '备案代码',
component: 'Input',
defaultValue: '',
colProps: { span: 12 },
},
{
field: 'registPartyName',
label: '备案全称',
component: 'Input',
defaultValue: '',
colProps: { span: 12 },
},
{
field: 'registContractName',
label: '联系人',
component: 'Input',
defaultValue: '',
colProps: { span: 12 },
},
{
field: 'registContractEmail',
label: '联系邮箱',
component: 'Input',
defaultValue: '',
colProps: { span: 12 },
},
{
field: 'note',
label: '备注',

@ -0,0 +1,116 @@
/*
* @Description: ->
* @Author: lijj
* @Date: 2024-04-25 15:48:33
*/
import { request } from '/@/utils/request'
import { DataResult, PageRequest } from '/@/api/model/baseModel'
enum Api {
list = '/feeApi/FeeRecord/GetList',
edit = '/feeApi/FeeRecord/Submit',
delete = '/feeApi/FeeRecord/Delete',
statistic = '/feeApi/FeeRecord/FeeStatistics',
ReadAsTemplate = '/feeApi/FeeRecord/ReadAsTemplate',
submit = '/feeApi/FeeRecord/ApplyAudit',
Withdraw = '/feeApi/FeeRecord/Withdraw',
ApplyModification = '/feeApi/FeeRecord/ApplyModification',
ApplyDeletion = '/feeApi/FeeRecord/ApplyDeletion',
GetPrintInfo = '/feeApi/FeeRecord/GetPrintInfo',
GetFees = '/feeApi/PaymentApplication/GetFees'
}
// 列表 (Auth)
export function GetList(data: PageRequest) {
return request<DataResult>({
url: Api.list,
method: 'post',
data
})
}
// 编辑 (Auth)
export function SubmitFee(data: PageRequest) {
return request<DataResult>({
url: Api.edit,
method: 'post',
data
})
}
// 详情 (Auth)
export function DeleteFee(data) {
return request<DataResult>({
url: Api.delete,
method: 'post',
data
})
}
// 统计
export function FeeStatistics(data: PageRequest) {
return request<DataResult>({
url: Api.statistic,
method: 'post',
data
})
}
// 费用模版转换费用数据 (Auth)
export function ReadAsTemplate(query) {
return request<DataResult>({
url: Api.ReadAsTemplate,
method: 'get',
params: query
})
}
// 打印
export function GetPrintInfo(data: PageRequest) {
return request<DataResult>({
url: Api.GetPrintInfo,
method: 'post',
data
})
}
// 提交
export function ApplyAudit(data: PageRequest) {
return request<DataResult>({
url: Api.submit,
method: 'post',
data
})
}
// 撤销提交
export function Withdraw(data: PageRequest) {
return request<DataResult>({
url: Api.Withdraw,
method: 'post',
data
})
}
// 申请修改
export function ApplyModification(data: PageRequest) {
return request<DataResult>({
url: Api.ApplyModification,
method: 'post',
data
})
}
// 申请修改
export function ApplyDeletion(data: PageRequest) {
return request<DataResult>({
url: Api.ApplyDeletion,
method: 'post',
data
})
}
// 根据业务编号及类型获取关联费用记录 (Auth)
export function GetFees(data: PageRequest) {
return request<DataResult>({
url: Api.GetFees,
method: 'post',
data
})
}

@ -0,0 +1,88 @@
/*
* @Description: tsx
* @Author: lijj
* @Date: 2024-05-11 11:54:06
*/
// 币别合计列数据
export const currencyColumns = [
{
title: '总计',
dataIndex: 'total',
width: 100
},
{
title: '应收',
children: [
{
title: '不含税',
dataIndex: 'noTaxReceive',
width: 150
}, {
title: '含税',
dataIndex: 'taxReceive',
width: 150
}
]
}, {
title: '应付',
children: [
{
title: '不含税',
dataIndex: 'noTaxPay',
width: 150
}, {
title: '含税',
dataIndex: 'taxPay',
width: 150
}
]
}, {
title: '利润',
children: [
{
title: '不含税',
dataIndex: 'noTaxProfit',
width: 150
}, {
title: '含税',
dataIndex: 'taxProfit',
width: 150
}
]
}
]
// 客户合计列数据
export const costomerColumns = [
{
title: '结算对象',
dataIndex: 'customerName',
width: 150
}, {
title: 'RMB应收',
dataIndex: 'receivableCNY',
width: 150
}, {
title: 'RMB应付',
dataIndex: 'payableCNY',
width: 150
}, {
title: 'USD应收',
dataIndex: 'receivableUSD',
width: 150
}, {
title: 'USD应付',
dataIndex: 'payableUSD',
width: 150
}, {
title: '合计应收',
dataIndex: 'receivableTotal',
width: 150
}, {
title: '合计应付',
dataIndex: 'payableTotal',
width: 150
}
]
export const feeStatusList = ['审核通过', '录入状态', '提交审核', '申请修改', '申请删除', '撤销申请', '驳回提交', '驳回申请', '部分结算', '结算完毕']

@ -0,0 +1,913 @@
<!--
* @Description: 费用录入应收组件
* @Author: lijj
* @Date: 2024-05-07 15:19:07
-->
<template>
<a-spin :spinning="loading">
<div class="cost-entry-receive">
<div class="flex">
<h4>发票明细</h4>
</div>
<div>
<input class="ds-tb-check" type="checkbox" v-model="allCheck" :indeterminate="someCheck" />
<hot-table ref="hotTb" :data="list" :settings="settings">
</hot-table>
</div>
</div>
</a-spin>
</template>
<script lang="ts" setup>
import {
defineProps,
defineEmits,
ref,
watch,
watchEffect,
computed,
unref,
defineComponent,
onMounted,
reactive,
nextTick,
provide,
} from 'vue'
//
import { GetFeeCurrencySelectList, GetFeeCodeSelectList, GetClientSelectInfoByCode, GetUnitSelectInfo } from '/@/api/common'
import { HotTable } from '@handsontable/vue3'
import { registerAllModules } from 'handsontable/registry'
import 'handsontable/dist/handsontable.full.min.css'
//
import { feeStatusList } from './columns'
//
import { feeUnitDict } from '/@/hooks/dict/index'
import { GetList, SubmitFee, DeleteFee, ApplyAudit, Withdraw } from './api'
//
import { GetClientListByCode } from '/@/api/common'
import { useMessage } from '/@/hooks/web/useMessage'
const { createMessage } = useMessage()
defineComponent({
HotTable,
})
registerAllModules()
const props = defineProps({
//
tbType: {
type: String,
default: '',
},
//
broData: {
type: Array,
default: () => {
return []
},
},
// ID
id: {
type: String,
default: '',
},
//
details: { type: [Object, Array] },
//
type: { type: [String, Number] },
//
height: {
type: [String, Number],
default: '300'
}
})
const emits = defineEmits(['broInsert'])
//
const feeDict = ref([])
//
const unitDict = ref([])
//
const currencyDict = ref([])
//
const companyDict = ref([])
//
import { getDictOption } from '/@/utils/dictUtil'
//
const hotTb = ref(null)
// loading
const loading = ref(false)
//
const row = {
selected: false,
feeStatus: '1',
feeStatusText: '录入状态',
id: '',
businessId: '',
feeCode: '',
feeName: '',
feeEnName: '',
quantity: 1,
exchangeRate: 1,
feeType: props.tbType == 'receive' ? 1 : 2,
}
//
const list = ref([])
provide('temFieldData', list)
//
let oldData = []
//
const allCheck = ref(false)
//
const someCheck = ref(false)
//
const columns = [
{
data: 'selected',
type: 'checkbox',
title: ' ',
width: 32,
className: 'htCenter',
readOnly: false,
},
{
title: '序号',
width: 130,
readOnly: true,
},
{
title: '业务编号',
width: 130,
data: 'businessId',
readOnly: true,
},
{
title: '费用状态',
width: 70,
data: 'feeStatusText',
readOnly: true,
},
{
title: props.tbType == 'receive' ? '应收费用名称' : '应付费用名称',
width: 130,
data: 'feeName',
type: 'dropdown',
// (process)
source: async (query, process) => {
const res = feeDict.value.length ? feeDict.value : (await GetFeeCodeSelectList())?.data
if (!feeDict.value.length) feeDict.value = res
console.log(res)
const dict = res.map((res) => {
return res.code + '-' + res.name
})
process(dict)
},
},
{
title: '费用英文名称',
width: 130,
data: 'feeEnName',
type: 'dropdown',
source: async (query, process) => {
const res = feeDict.value.length ? feeDict.value : (await GetFeeCodeSelectList())?.data
if (!feeDict.value.length) feeDict.value = res
const dict = res.map((res) => {
return res.enName
})
process(dict)
},
},
{
title: '客户类别',
width: 130,
data: 'customerTypeText',
type: 'dropdown',
source: async (query, process) => {
const results = await getDictOption('djy_cust_prop')
console.log(results)
const dict = results.map((item) => {
return item.value + '-' + item.name
})
process(dict)
},
},
{
title: '结算对象',
width: 130,
data: 'customerName',
type: 'dropdown',
source: async (query, process) => {
//
const rowIndex = hotTb.value.hotInstance.getActiveEditor().row
const code = list.value[rowIndex]?.customerType || null
GetClientListByCode({ code }).then((res) => {
const { data } = res
data.forEach((item) => {
item['label'] = item.shortName
item['value'] = item.codeName
})
companyDict.value = data
const dict = data.map((item) => {
return item.codeName + '-' + item.shortName
})
process(dict)
})
},
},
{
title: '单位标准',
width: 130,
data: 'unitText',
type: 'dropdown',
source: async (query, process) => {
if (unitDict.value && unitDict.value.length) {
const dict = unitDict.value.map((item) => {
return item.value + '-' + item.name
})
process(dict)
} else {
const results = await feeUnitDict()
unitDict.value = results
const dict = results.map((item) => {
return item.value + '-' + item.name
})
process(dict)
}
},
},
{
title: '税率',
width: 120,
data: 'taxRate',
type: 'numeric',
},
{
title: '单价',
width: 120,
data: 'unitPrice',
type: 'numeric',
format: '0.00',
},
{
title: '数量',
width: 120,
data: 'quantity',
type: 'numeric',
format: '0',
},
{
title: '不含税单价',
width: 120,
data: 'noTaxPrice',
type: 'numeric',
readOnly: true,
},
{
title: '不含税金额',
width: 120,
data: 'noTaxAmount',
type: 'numeric',
format: '0.00',
readOnly: true,
},
{
title: '金额',
width: 120,
data: 'amount',
type: 'numeric',
},
{
title: '币别',
width: 80,
data: 'currency',
type: 'dropdown',
source: async (query, process) => {
if (currencyDict.value.length) {
process(currencyDict.value)
} else {
const results = await GetFeeCurrencySelectList()
const dict = results.data?.map((res) => {
return res.codeName
})
currencyDict.value = dict
process(dict)
}
},
},
{
title: '汇率',
width: 120,
data: 'exchangeRate',
type: 'numeric',
},
{
title: '备注',
width: 120,
data: 'note',
},
{
title: '销项税率',
width: 100,
data: 'accTaxRate',
type: 'numeric',
},
{
title: '销项税额',
width: 100,
data: 'accTaxAmount',
readOnly: true,
},
{
title: '销项金额',
width: 100,
data: 'accAmount',
readOnly: true,
},
{
title: '是否机密',
width: 100,
data: 'isOpen',
type: 'checkbox',
},
{
title: '是否垫付',
width: 100,
data: 'isAdvancedPay',
type: 'checkbox',
},
{
title: '是否禁开发票',
width: 120,
data: 'isInvoice',
type: 'checkbox',
},
{
title: 'FRT',
width: 120,
data: 'feeFrt',
type: 'dropdown',
source: ['PP', 'CC'],
},
{
title: '录入人',
width: 100,
data: 'createByName',
readOnly: true,
},
{
title: '录入日期',
width: 100,
data: 'createTime',
readOnly: true,
},
{
title: '结算金额',
width: 100,
data: 'settlementAmount',
readOnly: true,
},
{
title: '已开票金额',
width: 100,
data: 'invoiceAmount',
readOnly: true,
},
{
title: '对账编号',
width: 140,
data: 'debitNo',
readOnly: true,
},
{
title: '修改人',
width: 100,
data: 'updateByName',
readOnly: true,
},
{
title: '修改日期',
width: 100,
data: 'updateTime',
readOnly: true,
},
{
title: '发票申请金额',
width: 100,
data: 'orderInvoiceAmount',
readOnly: true,
},
{
title: '未开票金额',
width: 100,
data: 'invoiceAmountRest',
readOnly: true,
},
{
title: '审核人',
width: 100,
data: 'auditOperator',
readOnly: true,
},
{
title: '审核日期',
width: 100,
data: 'auditDate',
readOnly: true,
},
]
//
const settings = {
height: props.height,
width: '100%',
autoWrapRow: true,
autoWrapCol: true,
//
rowHeights: 32,
fixedColumnsLeft: 1,
//
hiddenColumns: {
columns: [1, 2],
indicators: true,
},
//
enterMoves: 'row',
columnSorting: true,
//
// columnSorting: {
// column: 2, //
// sortOrder: ['asc', 'desc'] //
// },
//
afterValidate: function (isValid, value, row, prop, source) {
if (!isValid) {
hotTb.value.hotInstance.setDataAtRowProp(row, prop, '')
// if (/^noTaxPrice|unitPrice|noTaxAmount|taxRate|exchangeRate$/.test(prop)) {
// if (!isNaN(value)) {
// hotTb.value.hotInstance.setDataAtRowProp(row, prop, value.toFixed(2))
// }
// }
}
},
columns: columns,
// ()
licenseKey: 'non-commercial-and-evaluation',
//
afterChange(changes, source) {
//
if (source === 'edit' || source === 'Autofill.fill' || source === 'CopyPaste.paste') {
let dict = {}
changes.forEach((res) => {
//
if (res[1] === 'feeName') {
//
const item = feeDict.value.filter((item) => {
return changes[0][3].includes(item.name)
})
if (item) dict = item[0]
list.value[res[0]]['feeName'] = changes[0][3].split('-')[1]
list.value[res[0]]['feeEnName'] = dict['enName']
list.value[res[0]]['currency'] = dict['defaultCurrency']
list.value[res[0]]['unitText'] = dict['defaultUnitName']
list.value[res[0]]['unit'] = dict['defaultUnit']
list.value[res[0]]['customerTypeText'] = dict['defaultDebitName']
list.value[res[0]]['customerType'] = dict['defaultDebit']
list.value[res[0]]['isOpen'] = dict['isOpen']
list.value[res[0]]['isAdvancedPay'] = dict['isAdvancedPay']
list.value[res[0]]['isInvoice'] = dict['isInvoice']
list.value[res[0]]['feeFrt'] = dict['feeFrt']
list.value[res[0]]['feeCode'] = dict['code']
list.value[res[0]]['taxRate'] = dict['taxRate']
}
})
//
if (changes[0][1] === 'feeEnName') {
}
//
if (changes[0][1] === 'customerName') {
const item = companyDict.value.filter((item) => {
return changes[0][3].includes(item.name)
})
if (item) dict = item[0]
list.value[changes[0][0]]['customerCode'] = dict?.value
list.value[changes[0][0]]['customerName'] = changes[0][3].split('-')[1]
}
//
if (changes[0][1] === 'customerTypeText') {
getDictOption('djy_cust_prop').then((res) => {
const item = res.filter((item) => {
return changes[0][3].includes(item.name)
})
if (item) dict = item[0]
list.value[changes[0][0]]['customerType'] = dict?.value
list.value[changes[0][0]]['customerTypeText'] = changes[0][3].split('-')[1]
//
console.log(props.details)
GetClientSelectInfoByCode({ code: dict?.value, businessId: props.id, businessType: props.type }).then(res => {
list.value[changes[0][0]]['customerCode'] = res.data.clientId
list.value[changes[0][0]]['customerName'] = res.data.clientName
})
})
}
//
if (changes[0][1] === 'unitText') {
const item = unitDict.value.filter((item) => {
return changes[0][3].includes(item.name)
})
if (item) dict = item[0]
list.value[changes[0][0]]['unit'] = dict?.value
list.value[changes[0][0]]['unitText'] = changes[0][3].split('-')[1]
GetUnitSelectInfo({ code: dict?.value, businessId: props.id, businessType: props.type }).then(res => {
list.value[changes[0][0]]['quantity'] = res.data.quantity
})
//
// const text = list.value[changes[0][0]]['unitText']
// if (text == '') {
// list.value[changes[0][0]]['quantity'] = 1
// } else if (text == '') {
// list.value[changes[0][0]]['quantity'] = props.details.pkgs
// } else if (text == '') {
// list.value[changes[0][0]]['quantity'] = props.details.kgs
// } else if (text == '') {
// list.value[changes[0][0]]['quantity'] = props.details.cbm
// } else if (text == '') {
// let r = props.details.kgs
// const k = (props.details.pkgs || 0) / 1000
// if (k > r) {
// r = k
// }
// list.value[changes[0][0]]['quantity'] = r
}
//
if (changes[0][1] === 'currencyName') {
const item = currencyDict.value.filter((item) => {
return item.name === changes[0][3]
})
if (item) dict = item[0]
list.value[changes[0][0]]['currency'] = dict?.codeName
}
//
const index = changes[0][0]
//
if (changes[0][1] === 'noTaxPrice') {
//
list.value[index].unitPrice = Number(
(changes[0][3] || 0) * ((list.value[index].taxRate || 0) / 100 + 1),
).toFixed(6)
//
list.value[index].amount = Number(
(list.value[index].unitPrice || 0) * (list.value[index].quantity || 0),
).toFixed(6)
//
list.value[index].noTaxAmount = Number(
(changes[0][3] || 0) * (list.value[index].quantity || 0),
).toFixed(6)
}
//
if (changes[0][1] === 'unitPrice') {
//
list.value[index].noTaxPrice = Number(
(changes[0][3] || 0) / ((list.value[index].taxRate || 0) / 100 + 1),
).toFixed(6)
//
list.value[index].amount = Number(
(changes[0][3] || 0) * (list.value[index].quantity || 0),
).toFixed(6)
//
list.value[index].noTaxAmount = Number(
(list.value[index].noTaxPrice || 0) * (list.value[index].quantity || 0),
).toFixed(6)
}
//
if (changes[0][1] === 'quantity') {
//
list.value[index].amount = Number(
(changes[0][3] || 0) * (list.value[index].unitPrice || 0),
).toFixed(6)
//
list.value[index].noTaxAmount = Number(
(changes[0][3] || 0) * (list.value[index].noTaxPrice || 0),
).toFixed(6)
}
//
if (changes[0][1] === 'taxRate') {
//
list.value[index].noTaxPrice = Number(
(list.value[index].unitPrice || 0) / ((changes[0][3] || 0) / 100 + 1),
).toFixed(6)
//
list.value[index].noTaxAmount = Number(
(list.value[index].noTaxPrice || 0) * (list.value[index].quantity || 0),
).toFixed(6)
}
}
},
}
//
const save = () => {
const postData = {
BusinessId: props.id,
items: list.value.filter((res) => {
return res.feeStatus == 1
}),
businessType: 1,
}
loading.value = true
SubmitFee(postData)
.then((res) => {
loading.value = false
init()
createMessage.success(res.message)
})
.catch(() => {
loading.value = false
})
}
//
const submit = (arr) => {
loading.value = true
const ids = []
arr.forEach((res) => {
if (res.id) ids.push(res.id)
})
if (ids.length == arr.length) {
ApplyAudit({ id: '', ids })
.then((res) => {
loading.value = false
createMessage.success(res.message)
init()
})
.catch(() => {
loading.value = false
})
} else {
const postData = {
BusinessId: props.id,
items: arr,
}
SubmitFee(postData).then((res) => {
const { data } = res
const ids = data.map((item) => {
return item.id
})
ApplyAudit({ ids })
.then((res) => {
loading.value = false
createMessage.success(res.message)
init()
})
.catch(() => {
loading.value = false
})
})
}
}
//
const revoke = (ids) => {
loading.value = true
Withdraw({ ids })
.then((res) => {
loading.value = false
createMessage.success(res.message)
init()
})
.catch(() => {
loading.value = false
})
}
//
const cancelEdit = () => {
const copy = JSON.parse(JSON.stringify(oldData))
list.value = copy
hotTb.value.hotInstance.loadData(copy)
}
//
const history = (v) => {
v.forEach((row) => {
list.value.push(row)
})
}
//
const selectInsert = (v) => {
const selectData = JSON.parse(JSON.stringify(list.value))
//
if (v === 1) {
let flag = false
selectData.forEach((item) => {
item.id = ''
item.feeStatus = 1
item.feeStatusText = '录入状态'
if (props.tbType == 'receive') {
item.feeType = 2
} else {
item.feeType = 1
}
if (item.selected) flag = true
})
if (!flag) return createMessage.warning('请勾选要复制的数据!')
const res = selectData.filter((item) => {
return item.selected
})
emits('broInsert', res)
} else {
//
selectData.forEach((item) => {
item.id = ''
item.feeStatus = 1
item.feeStatusText = '录入状态'
item.selected = false
if (props.tbType == 'receive') {
item.feeType = 2
} else {
item.feeType = 1
}
})
console.log(selectData)
emits('broInsert', selectData)
}
}
//
const deleteRow = async () => {
const ids = []
list.value.forEach((item) => {
if (item.selected && item.id) ids.push(item.id)
})
if (ids.length) {
loading.value = true
const data = await DeleteFee({ ids })
loading.value = false
createMessage.success(data.message)
}
const res = list.value.filter((item) => {
return !item.selected
})
list.value = res
hotTb.value.hotInstance.loadData(res)
}
//
const init = () => {
loading.value = true
const postData = {
pageCondition: {
pageIndex: 1,
pageSize: 1000,
sortConditions: [],
},
queryCondition: JSON.stringify([
{ FieldName: 'BusinessId', FieldValue: props.id, ConditionalType: 1 },
{ FieldName: 'FeeType', FieldValue: props.tbType == 'receive' ? 1 : 2, ConditionalType: 1 },
]),
}
GetList(postData)
.then((res) => {
loading.value = false
const { data } = res
data.forEach((item, index) => {
item['feeStatusText'] = feeStatusList[item.feeStatus]
if (item.createTime) item.createTime = item.createTime.split(' ')[0]
if (item.auditDate) item.auditDate = item.auditDate.split(' ')[0]
if (item.updateTime) item.updateTime = item.updateTime.split(' ')[0]
if (item.updateTime == '1900-01-01') item.updateTime = ''
})
list.value = data
// 使
oldData = JSON.parse(JSON.stringify(data))
if (data.length != 0) {
hotTb.value.hotInstance.updateSettings({
cells: function (row, col) {
//
const props = { readOnly: true }
// STATUS=0
// STATUS=1
// STATUS=2
// (STATUS=3)
// (STATUS=4)
// (STATUS=5)
// STATUS=6
// STATUS=7
// STATUS=8
// STATUS=9
if (data[row]?.feeStatus != 1 && col != 0) {
//
if (data[row]?.feeStatus == 0 && col == 3) {
props['className'] = 'hot-green'
}
if (data[row]?.feeStatus == 2 && col == 3) {
props['className'] = 'hot-yellow'
}
if (data[row]?.feeStatus == 7 && col == 3) {
props['className'] = 'hot-red'
}
if ((data[row]?.feeStatus == 4 || data[row]?.feeStatus == 3) && col == 3) {
props['className'] = 'hot-red'
}
return props
} else {
return
}
},
})
}
hotTb.value.hotInstance.loadData(list.value)
})
.catch(() => {
loading.value = false
})
}
//
const add = () => {
const hot = hotTb.value.hotInstance
nextTick(() => {
hot.selectCell(list.value.length - 1, 4)
})
}
onMounted(() => {
const hot = hotTb.value.hotInstance
hot.addHook('afterOnCellMouseDown', function (event, coords, TD) {})
//
hot.addHook('beforeKeyDown', function (event) {
// 'Enter'
if (event.key === 'ArrowDown') {
if (hot.getSelected()[0][0] == list.value.length - 1 && !hot.getActiveEditor()?._opened) {
list.value.push(JSON.parse(JSON.stringify(row)))
nextTick(() => {
hot.selectCell(list.value.length - 1, 4)
})
return false
}
}
})
//
init()
})
watchEffect(() => {
//
if (allCheck.value) {
list.value.forEach((item) => {
item.selected = true
})
} else {
//
list.value.forEach((item) => {
item.selected = false
})
}
})
watch(
() => props.broData,
(row) => {
row.forEach((item) => {
list.value.push(item)
})
},
)
watch(
() => props.id,
() => {
init()
},
)
watch(
list.value,
(val) => {
let a = 0
let b = 0
val.forEach((item) => {
if (item.selected) {
a += 1
} else {
b += 1
}
})
if (a == 0) {
allCheck.value = false
}
if (b == 0) {
allCheck.value = true
}
if (a != 0 && b != 0) {
someCheck.value = true
} else {
someCheck.value = false
}
},
{
deep: true,
},
)
</script>
<style lang="scss">
.cost-entry-receive {
.flex {
h4 {
margin: 10px 0;
}
}
.line {
width: 3px;
height: 12px;
background: #489cef;
position: relative;
top: 10px;
}
background-color: #ffffff;
padding: 0;
}
</style>

@ -1,20 +1,31 @@
<template>
<div class="main">
<div>
<a-button type="link" @click="handleSave" > <i class="iconfont icon-zhcc_tidan"></i> 新增</a-button>
<a-button type="link" ><i class="iconfont icon-return"></i>撤销审核</a-button>
</div>
<BasicForm @register="registerForm" />
<feeTable></feeTable>
</div>
</template>
<script lang="ts" setup>
import { ref, computed, unref } from 'vue'
import { BasicForm, useForm } from '/@/components/Form/index'
import { detailForm } from '../columns'
import feeTable from './feeTable.vue';
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
labelWidth: 100,
schemas: detailForm,
showActionButtonGroup: false,
})
async function handleSave(){
const values = await validate()
console.log(values)
}
</script>
<style lang="less" scoped >
.main{
padding: 20px;
padding-top: 5px;
}
</style>

@ -18,7 +18,9 @@
</a-popconfirm>
</a-col>
<a-col v-if="buttonList?.includes('邮件')">
<a-button type="primary" @click="handleSendMail"></a-button>
<a-popconfirm title="确定发送邮件?" ok-text="" cancel-text="" @confirm="handleSendMail">
<a-button type="primary" >发送邮件</a-button>
</a-popconfirm>
</a-col>
<a-col v-if="buttonList?.includes('匹配')">
<a-button type="primary" @click="handleSendMail"></a-button>

@ -313,11 +313,7 @@ function getInfo(type) {
})
if (type == 'Amendment') {
GetCompareResult({ taskId: taskPKId.value }).then(res => {
if (res.succeeded) {
compareResultList.value = res.data
} else {
createMessage.error(res.message)
}
compareResultList.value = res.data
})
}
}

@ -4,7 +4,7 @@
<div class="main-content">
<a-row style="padding: 15px;" :gutter="16">
<a-col :span="pdfUrl ? 11 : 24">
<taskData :pdfUrl="pdfUrl" ref="taskDataRef" title='Booking Confirmation'></taskData>
<taskData :pdfUrl="pdfUrl" ref="taskDataRef" title='Booking Amendment'></taskData>
</a-col>
<a-col :span="13" v-show="pdfUrl">
<pdf v-show="pdfUrl" @handleSuccess="handleSuccess" style="margin-bottom: 20px;" :id="taskPKId"

@ -42,7 +42,7 @@ const pdfData = ref()
onMounted(() => {
taskDataRef.value.getInfo()
pdfData.value.init(['BC','BC_NOTICE'])
pdfData.value.startInit(['BC','BC_NOTICE'])
})
function loadingStart() {

@ -43,7 +43,7 @@ function handleSuccess(url) {
const pdfData = ref()
onMounted(() => {
taskDataRef.value.getInfo()
pdfData.value.init(['BC','BC_NOTICE'])
pdfData.value.startInit(['BC','BC_NOTICE'])
})
function loadingStart() {

Loading…
Cancel
Save