This commit is contained in:
zmj 2024-04-14 23:38:10 +08:00
parent ac1ddac17c
commit 766cccae34
27 changed files with 2510 additions and 93 deletions

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 财务管理--投标保证金申请列表
export function apiFinancialBidMarginLists(params: any) {
return request.get({ url: '/financial.financial_bid_margin/lists', params })
}
// 添加财务管理--投标保证金申请
export function apiFinancialBidMarginAdd(params: any) {
return request.post({ url: '/financial.financial_bid_margin/add', params })
}
// 编辑财务管理--投标保证金申请
export function apiFinancialBidMarginEdit(params: any) {
return request.post({ url: '/financial.financial_bid_margin/edit', params })
}
// 删除财务管理--投标保证金申请
export function apiFinancialBidMarginDelete(params: any) {
return request.post({ url: '/financial.financial_bid_margin/delete', params })
}
// 财务管理--投标保证金申请详情
export function apiFinancialBidMarginDetail(params: any) {
return request.get({ url: '/financial.financial_bid_margin/detail', params })
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 财务管理--投标保证金回收列表
export function apiFinancialBidMarginRecoveryLists(params: any) {
return request.get({ url: '/financial.financial_bid_margin_recovery/lists', params })
}
// 添加财务管理--投标保证金回收
export function apiFinancialBidMarginRecoveryAdd(params: any) {
return request.post({ url: '/financial.financial_bid_margin_recovery/add', params })
}
// 编辑财务管理--投标保证金回收
export function apiFinancialBidMarginRecoveryEdit(params: any) {
return request.post({ url: '/financial.financial_bid_margin_recovery/edit', params })
}
// 删除财务管理--投标保证金回收
export function apiFinancialBidMarginRecoveryDelete(params: any) {
return request.post({ url: '/financial.financial_bid_margin_recovery/delete', params })
}
// 财务管理--投标保证金回收详情
export function apiFinancialBidMarginRecoveryDetail(params: any) {
return request.get({ url: '/financial.financial_bid_margin_recovery/detail', params })
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 财务管理--履约金申请列表
export function apiFinancialPerformanceMoneyApplyLists(params: any) {
return request.get({ url: '/financial.financial_performance_money_apply/lists', params })
}
// 添加财务管理--履约金申请
export function apiFinancialPerformanceMoneyApplyAdd(params: any) {
return request.post({ url: '/financial.financial_performance_money_apply/add', params })
}
// 编辑财务管理--履约金申请
export function apiFinancialPerformanceMoneyApplyEdit(params: any) {
return request.post({ url: '/financial.financial_performance_money_apply/edit', params })
}
// 删除财务管理--履约金申请
export function apiFinancialPerformanceMoneyApplyDelete(params: any) {
return request.post({ url: '/financial.financial_performance_money_apply/delete', params })
}
// 财务管理--履约金申请详情
export function apiFinancialPerformanceMoneyApplyDetail(params: any) {
return request.get({ url: '/financial.financial_performance_money_apply/detail', params })
}

View File

@ -0,0 +1,36 @@
import request from "@/utils/request";
export function apiwinning_project(params: any) {
return request.get({
url: "/marketing.marketing_bid_statistics/winning_project",
params,
});
}
export function apibid_project_status(params: any) {
return request.get({
url: "/marketing.marketing_bid_statistics/bid_project_status",
params,
});
}
export function apibid_project_number(params: any) {
return request.get({
url: "/marketing.marketing_bid_statistics/bid_project_number",
params,
});
}
export function apibid_project_analysis(params: any) {
return request.get({
url: "/marketing.marketing_bid_statistics/bid_project_analysis",
params,
});
}
export function apibid_industry_analysis(params: any) {
return request.get({
url: "/marketing.marketing_bid_statistics/bid_industry_analysis",
params,
});
}

View File

@ -0,0 +1,244 @@
<template>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" inline>
<el-form-item label="图表类型">
<el-select v-model="chartType" placeholder="请选择图表类型" class="flex-1" @change="changeChartType">
<el-option v-for="item in chartTypeList" :key="item.value" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="图标宽度" prop="num">
<el-input v-model="chartWitdth" clearable type="number" @blur="chartResize" />
</el-form-item>
<el-form-item label="图标高度" prop="project">
<el-input v-model="chartHeight" clearable type="number" @blur="chartResize" />
</el-form-item>
</el-form>
</el-card>
<el-card style="min-height: 75vh;">
<div class="tit">投标项目状态明细表</div>
<div id="main" style="margin: 0 auto;" :style="{ width: chartWitdth + 'px', height: chartHeight + 'px' }"></div>
</el-card>
</template>
<script lang="ts" setup name="">
import * as echarts from 'echarts';
import { ref, reactive, onMounted } from "vue";
import { useRoute } from 'vue-router';
import { apibid_project_status, apibid_project_number, apibid_project_analysis, apibid_industry_analysis } from '@/api/marketing_bid_statistics'
const route = useRoute()
var chartDom: any;
var option: any;
var myChart: any
const chartWitdth = ref(500)
const chartHeight = ref(500)
const chartType = ref(3)
const chartTypeList = reactive([
{
name: '柱状图',
value: 1
},
{
name: '折线图',
value: 2
},
{
name: '饼状图',
value: 3
},
{
name: '漏斗图',
value: 4
},
])
//
let option1 = {
tooltip: {
trigger: 'item',
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar',
}
],
};
//
let option4 = {
tooltip: {
trigger: 'item',
},
legend: {
data: ['Show', 'Click', 'Visit', 'Inquiry', 'Order']
},
series: [
{
name: 'Funnel',
type: 'funnel',
sort: 'descending',
gap: 2,
label: {
show: true,
position: 'inside'
},
labelLine: {
length: 10,
lineStyle: {
width: 1,
type: 'solid'
}
},
itemStyle: {
borderColor: '#fff',
borderWidth: 1
},
emphasis: {
label: {
fontSize: 20
}
},
data: [
{ value: 60, name: 'Visit' },
{ value: 40, name: 'Inquiry' },
{ value: 20, name: 'Order' },
{ value: 80, name: 'Click' },
{ value: 100, name: 'Show' }
],
}
]
};
// 线
let option2 = {
tooltip: {
trigger: 'item'
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [
{
data: [150, 230, 224, 218, 135, 147, 260],
type: 'line',
}
]
};
//
let option3 = {
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left: 'left',
},
series: [
{
name: 'Access From',
type: 'pie',
radius: '50%',
data: [
{ value: 1048, name: 'Search Engine' },
{ value: 735, name: 'Direct' },
{ value: 580, name: 'Email' },
{ value: 484, name: 'Union Ads' },
{ value: 300, name: 'Video Ads' }
],
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
},
}
]
};
let chartData: object;
const getData = async (fetchFun: Function) => {
let res = await fetchFun()
chartData = res
option3.series[0].data = res.data
option = option3
initChart()
}
const initChart = () => {
myChart = echarts.init(chartDom);
myChart.setOption(option, true);
}
const changeChartType = (e: any) => {
switch (e) {
case 1:
option1.xAxis.data = chartData.data.map(item => item.name)
option1.series[0].data = chartData.data.map(item => item.value)
option = option1
break;
case 2:
option2.xAxis.data = chartData.data.map(item => item.name)
option2.series[0].data = chartData.data.map(item => item.value)
option = option2
break;
case 3:
option = option3
break;
case 4:
option4.legend.data = chartData.data.map(item => item.name)
option4.series[0].data = chartData.data
option = option4
break;
}
initChart()
}
const chartResize = () => {
myChart.resize()
}
onMounted(() => {
chartDom = document.getElementById('main');
if (route.path.includes('bid_project_status')) getData(apibid_project_status);
if (route.path.includes('bid_project_number')) getData(apibid_project_number);
if (route.path.includes('bid_project_analysis')) getData(apibid_project_analysis);
if (route.path.includes('bid_industry_analysis')) getData(apibid_industry_analysis);
})
</script>
<style>
.tit {
margin: 10px 0;
text-align: center;
font-size: 20px;
}
</style>

View File

@ -0,0 +1,92 @@
const detailConfig = {
title: "财务管理--投标保证金申请",
config: [
{
label: "投标信息id",
value: ""
},
{
label: "业务机会id",
value: ""
},
{
label: "甲方单位",
value: "part_a_name"
},
{
label: "收款单位",
value: "collection_company"
},
{
label: "收款账号",
value: "collection_account"
},
{
label: "开户省份",
value: "province_name",
},
{
label: "开户城市",
value: "city_name",
},
{
label: "收款银行",
value: "collection_bank",
},
{
label: "收款开户行",
value: "collection_open_bank",
},
{
label: "经办人",
value: "agent_name",
},
{
label: "负责部门",
value: "head_dept_name",
},
{
label: "投标保证金",
value: "bid_margin",
},
{
label: "支付方式",
value: "pay_type_text",
},
{
label: "缴纳截止日期",
value: "end_date",
},
{
label: "预计归还日期",
value: "expected_return_date",
},
{
label: "缴纳截止日期",
value: "end_date",
},
{
label: "备注",
value: "remark",
column: 1
},
{
label: "附件",
value: "annex",
column: 1
},
{
label: "申请人",
value: "create_user"
},
{
label: "申请时间",
value: "create_time"
},
],
}
export default detailConfig;

View File

@ -0,0 +1,393 @@
<template>
<div class="edit-popup">
<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="投标信息id" prop="bid_info_id">
<el-input v-model="formData.business_opportunity.project_name" clearable
placeholder="点击选择投标信息" readonly @click="showDialog = true" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="业务机会id" prop="business_opportunity_id">
<el-input v-model="formData.business_opportunity_name" clearable placeholder="点击选择业务机会"
@click="showDialog1 = true" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="甲方单位" prop="part_a">
<!-- <el-input v-model="formData.part_a" clearable placeholder="请输入甲方单位" /> -->
<el-input v-model="formData.part_a_name" clearable placeholder="点击选择甲方签约单位"
@click="showDialog2 = true" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款单位" prop="collection_company">
<el-input v-model="formData.collection_company" clearable placeholder="请输入收款单位" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款账号" prop="collection_account">
<el-input v-model="formData.collection_account" clearable placeholder="请输入收款账号"
type='number' />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户省份" prop="province">
<el-select v-model="formData.province" clearable placeholder="请选择省"
@change="province_change" class="flex-1">
<el-option v-for="(item, index) in datas.provinceOptions" :key="index"
:label="item.province_name" :value="(item.province_code)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户城市" prop="city">
<el-select v-model="formData.city" clearable placeholder="请选择市" class="flex-1">
<el-option v-for="(item, index) in datas.cityOptions" :key="index"
:label="item.city_name" :value="(item.city_code)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款银行" prop="collection_bank">
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款开户行" prop="collection_open_bank">
<el-input v-model="formData.collection_open_bank" clearable placeholder="请输入收款开户行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="经办人" prop="agent">
<el-input v-model="formData.agent_name" clearable placeholder="请输入经办人" readonly
@click="userclick" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="负责部门" prop="head_dept">
<el-select v-model="formData.head_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="bid_margin">
<el-input v-model="formData.bid_margin" clearable placeholder="请输入投标保证金" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="支付方式" prop="pay_type">
<el-select v-model="formData.pay_type" class=" flex-1">
<el-option v-for="item in dictData.financial_pay_type" :key="item.value"
:label="item.name" :value="parseInt(item.value)"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="缴纳截止日期" prop="end_date">
<el-date-picker class="flex-1 !flex" v-model="formData.end_date" clearable
value-format="YYYY-MM-DD" placeholder="选择缴纳截止日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="预计归还日期" prop="expected_return_date">
<el-date-picker class="flex-1 !flex" v-model="formData.expected_return_date" clearable
value-format="YYYY-MM-DD" placeholder="选择预计归还日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="annex">
<upload-annex :form-data="formData"></upload-annex>
</el-form-item>
</el-col>
<create-user-lable flag :formData="formData" name="申请"></create-user-lable>
</el-row>
</el-form>
<el-dialog v-model="showDialog" title="选择建设单位" width="70%">
<dialogTable :config="marketing_bid_info" @customEvent="customEvent">
</dialogTable>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择业务机会" width="70%">
<dialogTable :config="marketing_business_opportunity" @customEvent="customEvent1"
:query="{ status: 0 }">
</dialogTable>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择甲方签订单位" width="70%">
<dialogTable :config="marketing_custom" @customEvent="customEvent2">
</dialogTable>
</el-dialog>
<div v-if="showDialog3">
<personnelselector ref="personnel" @confirm="submituser" type="1">
</personnelselector>
</div>
</popup>
</div>
</template>
<script lang="ts" setup name="financialBidMarginEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiFinancialBidMarginAdd, apiFinancialBidMarginEdit, apiFinancialBidMarginDetail } from '@/api/financial_bid_margin'
import { marketing_bid_info, marketing_business_opportunity, marketing_custom } from "@/components/dialogTable/dialogTableConfig";
import type { PropType } from 'vue'
import { apiCityList, apiProvinceList } from "@/api/common";
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
},
deptList: Array
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const showDialog1 = ref(false)
const showDialog2 = ref(false)
const showDialog3 = ref(false)
const personnel = ref(null)
const datas = reactive({
provinceOptions: [],
cityOptions: [],
});
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑财务管理--投标保证金申请' : '新增财务管理--投标保证金申请'
})
//
const formData = reactive({
id: '',
bid_info_id: '',
business_opportunity_id: '',
business_opportunity_name: "",
part_a: '',
part_a_name: '',
collection_company: '',
collection_account: '',
province: '',
city: '',
collection_bank: '',
collection_open_bank: '',
agent: '',
agent_name: '',
head_dept: '',
bid_margin: '',
pay_type: '',
end_date: '',
expected_return_date: '',
remark: '',
annex: '',
create_user: '',
create_time: '',
business_opportunity: {}
})
const userclick = async () => {
showDialog3.value = true
await nextTick()
personnel.value.open()
}
//
const submituser = (e: any) => {
formData['agent'] = e.id;
formData['agent_name'] = e.name;
showDialog1.value = false
}
const customEvent = (e) => {
formData.bid_info_id = e.id
formData.business_opportunity = e.business_opportunity
showDialog.value = false
}
const customEvent1 = (e) => {
formData.business_opportunity_id = e.id
formData.business_opportunity_name = e.project_name
showDialog1.value = false
}
const customEvent2 = (e) => {
formData.part_a = e.id
formData.part_a_name = e.name
showDialog2.value = false
}
//
const formRules = reactive<any>({
bid_info_id: [{
required: true,
message: '请输入投标信息id',
trigger: ['blur']
}],
business_opportunity_id: [{
required: true,
message: '请输入业务机会id',
trigger: ['blur']
}],
part_a: [{
required: true,
message: '请输入甲方单位',
trigger: ['blur']
}],
collection_company: [{
required: true,
message: '请输入收款单位',
trigger: ['blur']
}],
collection_account: [{
required: true,
message: '请输入收款账号',
trigger: ['blur']
}],
province: [{
required: true,
message: '请输入开户省份',
trigger: ['blur']
}],
city: [{
required: true,
message: '请输入开户城市',
trigger: ['blur']
}],
collection_bank: [{
required: true,
message: '请输入收款银行',
trigger: ['blur']
}],
collection_open_bank: [{
required: true,
message: '请输入收款开户行',
trigger: ['blur']
}],
agent: [{
required: true,
message: '请输入经办人',
trigger: ['blur']
}],
head_dept: [{
required: true,
message: '请输入负责部门',
trigger: ['blur']
}],
bid_margin: [{
required: true,
message: '请输入投标保证金',
trigger: ['blur']
}],
pay_type: [{
required: true,
message: '请输入支付方式',
trigger: ['blur']
}],
end_date: [{
required: true,
message: '请输入缴纳截止日期',
trigger: ['blur']
}],
expected_return_date: [{
required: true,
message: '请输入预计归还日期',
trigger: ['blur']
}],
remark: [{
required: true,
message: '请输入备注',
trigger: ['blur']
}],
create_user: [{
required: true,
message: '请输入申请人',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiFinancialBidMarginDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiFinancialBidMarginEdit(data)
: await apiFinancialBidMarginAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
const getProvinceList = async () => {
const data = await apiProvinceList({});
datas["provinceOptions"] = data;
};
const getCityList = async () => {
const data = await apiCityList({ province_code: formData.province });
datas["cityOptions"] = data;
};
//
function province_change(value: string) {
formData.city = ''
getCityList();
}
getProvinceList()
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,158 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<!-- <el-form-item label="业务机会id" prop="business_opportunity_id">
<el-input class="w-[280px]" v-model="queryParams.business_opportunity_id" clearable
placeholder="请输入业务机会id" />
</el-form-item>
<el-form-item label="甲方单位" prop="part_a">
<el-input class="w-[280px]" v-model="queryParams.part_a" clearable placeholder="请输入甲方单位" />
</el-form-item> -->
<el-form-item label="缴纳截止日期" prop="end_date">
<el-date-picker class="flex-1 !flex" v-model="queryParams.end_date" clearable
value-format="YYYY-MM-DD" placeholder="选择缴纳截止日期">
</el-date-picker>
</el-form-item>
<el-form-item label="预计归还日期" prop="expected_return_date">
<el-date-picker class="flex-1 !flex" v-model="queryParams.expected_return_date" clearable
value-format="YYYY-MM-DD" placeholder="选择预计归还日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['financial.financial_bid_margin/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['financial.financial_bid_margin/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="项目名称" prop="bid_info_id" show-overflow-tooltip />
<el-table-column label="甲方单位" prop="part_a_name" show-overflow-tooltip />
<el-table-column label="投标保证金" prop="" show-overflow-tooltip />
<el-table-column label="实际支付金额" prop="" show-overflow-tooltip />
<el-table-column label="投标负责人" prop="" show-overflow-tooltip />
<el-table-column label="缴纳截止日期" prop="end_date" show-overflow-tooltip />
<el-table-column label="预计归还日期" prop="expected_return_date" show-overflow-tooltip />
<el-table-column label="流程状态" prop="" show-overflow-tooltip />
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['financial.financial_bid_margin/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['financial.financial_bid_margin/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['financial.financial_bid_margin/detail']" link
@click="handleDetail(row.id)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup :deptList="deptList" 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="financialBidMarginLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiFinancialBidMarginLists, apiFinancialBidMarginDelete, apiFinancialBidMarginDetail } from '@/api/financial_bid_margin'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import { deptLists } from "@/api/org/department"
import detailConfig from './detail'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailRef = ref('')
//
const showEdit = ref(false)
const showDetail = ref(false)
//
const queryParams = reactive({
bid_info_id: '',
business_opportunity_id: '',
part_a: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('financial_pay_type')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiFinancialBidMarginLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apiFinancialBidMarginDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiFinancialBidMarginDelete({ id })
getLists()
}
//
const handleDetail = async (id: any) => {
let res = await apiFinancialBidMarginDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
const deptList = ref([])
const getDeptList = async () => {
let res = await deptLists()
deptList.value = res.lists
}
getDeptList()
getLists()
</script>

View File

@ -0,0 +1,119 @@
const detailConfig = {
title: "财务管理--投标保证金回收",
config: [
{
label: "投标信息id",
value: ""
},
{
label: "业务机会id",
value: ""
},
{
label: "甲方单位",
value: "part_a_name"
},
{
label: "收款单位",
value: "collection_company"
},
{
label: "收款账号",
value: "collection_account"
},
{
label: "开户省份",
value: "province_name",
},
{
label: "开户城市",
value: "city_name",
},
{
label: "收款银行",
value: "collection_bank",
},
{
label: "收款开户行",
value: "collection_open_bank",
},
{
label: "经办人",
value: "agent_name",
},
{
label: "负责部门",
value: "head_dept_name",
},
{
label: "投标保证金",
value: "bid_margin",
},
{
label: "支付方式",
value: "pay_type_text",
},
{
label: "缴纳截止日期",
value: "end_date",
},
{
label: "预计归还日期",
value: "expected_return_date",
},
{
label: "缴纳截止日期",
value: "end_date",
},
{
label: "支付金额",
value: "pay_amount",
},
{
label: "操作人",
value: "operator",
},
{
label: "操作日期",
value: "operation_date",
},
{
label: "回收金额",
value: "recovery_amount",
},
{
label: "回收日期",
value: "recovery_date",
},
{
label: "说明",
value: "recovery_desc",
column: 1
},
{
label: "备注",
value: "remark",
column: 1
},
{
label: "附件",
value: "annex",
column: 1
},
{
label: "申请人",
value: "create_user"
},
{
label: "申请时间",
value: "create_time"
},
],
}
export default detailConfig;

View File

@ -0,0 +1,437 @@
<template>
<div class="edit-popup">
<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="投标信息id" prop="bid_info_id">
<el-input v-model="formData.business_opportunity.project_name" clearable
placeholder="点击选择投标信息" readonly @click="showDialog = true" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="业务机会id" prop="business_opportunity_id">
<el-input v-model="formData.business_opportunity_name" clearable placeholder="点击选择业务机会"
@click="showDialog1 = true" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="甲方单位" prop="part_a">
<el-input v-model="formData.part_a_name" clearable placeholder="点击选择甲方签约单位"
@click="showDialog2 = true" readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="配合单位">
<el-input v-model="formData.cooperate_company" clearable placeholder="请输入配合单位" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款单位" prop="collection_company">
<el-input v-model="formData.collection_company" clearable placeholder="请输入收款单位" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款账号" prop="collection_account">
<el-input v-model="formData.collection_account" clearable placeholder="请输入收款账号"
type='number' />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户省份" prop="province">
<el-select v-model="formData.province" clearable placeholder="请选择省"
@change="province_change" class="flex-1">
<el-option v-for="(item, index) in datas.provinceOptions" :key="index"
:label="item.province_name" :value="(item.province_code)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户城市" prop="city">
<el-select v-model="formData.city" clearable placeholder="请选择市" class="flex-1">
<el-option v-for="(item, index) in datas.cityOptions" :key="index"
:label="item.city_name" :value="(item.city_code)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款银行" prop="collection_bank">
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款开户行" prop="collection_open_bank">
<el-input v-model="formData.collection_open_bank" clearable placeholder="请输入收款开户行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="经办人" prop="agent">
<el-input v-model="formData.agent_name" clearable placeholder="请输入经办人" readonly
@click="userclick" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="负责部门" prop="head_dept">
<el-select v-model="formData.head_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="bid_margin">
<el-input v-model="formData.bid_margin" clearable placeholder="请输入投标保证金" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="支付方式" prop="pay_type">
<el-select v-model="formData.pay_type" class=" flex-1">
<el-option v-for="item in dictData.financial_pay_type" :key="item.value"
:label="item.name" :value="parseInt(item.value)"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="缴纳截止日期" prop="end_date">
<el-date-picker class="flex-1 !flex" v-model="formData.end_date" clearable
value-format="YYYY-MM-DD" placeholder="选择缴纳截止日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="预计归还日期" prop="expected_return_date">
<el-date-picker class="flex-1 !flex" v-model="formData.expected_return_date" clearable
value-format="YYYY-MM-DD" placeholder="选择预计归还日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="annex">
<upload-annex :form-data="formData"></upload-annex>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="支付金额" prop="pay_amount">
<el-input v-model="formData.pay_amount" clearable placeholder="请输入支付金额" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="支付时间" prop="pay_date">
<el-date-picker class="flex-1 !flex" v-model="formData.pay_date" clearable
value-format="YYYY-MM-DD" placeholder="选择支付时间">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="操作人" prop="operator">
<el-input v-model="formData.operator" clearable placeholder="请输入操作人" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="操作日期" prop="operation_date">
<el-date-picker class="flex-1 !flex" v-model="formData.operation_date" clearable
value-format="YYYY-MM-DD" placeholder="选择操作日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="回收金额" prop="recovery_amount">
<el-input v-model="formData.recovery_amount" clearable placeholder="请输入回收金额"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="回收日期" prop="recovery_date">
<el-date-picker class="flex-1 !flex" v-model="formData.recovery_date" clearable
value-format="YYYY-MM-DD" placeholder="选择回收日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="说明" prop="recovery_desc">
<el-input v-model="formData.recovery_desc" clearable placeholder="请输入说明" type="textarea" />
</el-form-item>
</el-col>
<create-user-lable flag :formData="formData" name="申请"></create-user-lable>
</el-row>
</el-form>
<el-dialog v-model="showDialog" title="选择建设单位" width="70%">
<dialogTable :config="marketing_bid_info" @customEvent="customEvent">
</dialogTable>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择业务机会" width="70%">
<dialogTable :config="marketing_business_opportunity" @customEvent="customEvent1"
:query="{ status: 0 }">
</dialogTable>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择甲方签订单位" width="70%">
<dialogTable :config="marketing_custom" @customEvent="customEvent2">
</dialogTable>
</el-dialog>
<div v-if="showDialog3">
<personnelselector ref="personnel" @confirm="submituser" type="1">
</personnelselector>
</div>
</popup>
</div>
</template>
<script lang="ts" setup name="financialBidMarginEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiFinancialBidMarginRecoveryAdd, apiFinancialBidMarginRecoveryEdit } from '@/api/financial_bid_margin_recovery'
import { marketing_bid_info, marketing_business_opportunity, marketing_custom } from "@/components/dialogTable/dialogTableConfig";
import type { PropType } from 'vue'
import { apiCityList, apiProvinceList } from "@/api/common";
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
},
deptList: Array
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const showDialog1 = ref(false)
const showDialog2 = ref(false)
const showDialog3 = ref(false)
const personnel = ref(null)
const datas = reactive({
provinceOptions: [],
cityOptions: [],
});
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑财务管理--投标保证金回收' : '新增财务管理--投标保证金回收'
})
//
const formData = reactive({
id: '',
bid_info_id: '',
business_opportunity_id: '',
business_opportunity_name: "",
part_a: '',
part_a_name: '',
collection_company: '',
collection_account: '',
province: '',
city: '',
collection_bank: '',
collection_open_bank: '',
agent: '',
agent_name: '',
head_dept: '',
bid_margin: '',
pay_type: '',
end_date: '',
expected_return_date: '',
remark: '',
annex: '',
create_user: '',
create_time: '',
business_opportunity: {},
cooperate_company: "",
pay_amount: '',
pay_date: '',
operator: '',
operation_date: '',
recovery_amount: '',
recovery_date: '',
recovery_desc: '',
})
const userclick = async () => {
showDialog3.value = true
await nextTick()
personnel.value.open()
}
//
const submituser = (e: any) => {
formData['agent'] = e.id;
formData['agent_name'] = e.name;
showDialog3.value = false
}
const customEvent = (e) => {
formData.bid_info_id = e.id
formData.business_opportunity = e.business_opportunity
showDialog.value = false
}
const customEvent1 = (e) => {
formData.business_opportunity_id = e.id
formData.business_opportunity_name = e.project_name
showDialog1.value = false
}
const customEvent2 = (e) => {
formData.part_a = e.id
formData.part_a_name = e.name
showDialog2.value = false
}
//
const formRules = reactive<any>({
bid_info_id: [{
required: true,
message: '请输入投标信息id',
trigger: ['blur']
}],
business_opportunity_id: [{
required: true,
message: '请输入业务机会id',
trigger: ['blur']
}],
part_a: [{
required: true,
message: '请输入甲方单位',
trigger: ['blur']
}],
collection_company: [{
required: true,
message: '请输入收款单位',
trigger: ['blur']
}],
collection_account: [{
required: true,
message: '请输入收款账号',
trigger: ['blur']
}],
province: [{
required: true,
message: '请输入开户省份',
trigger: ['blur']
}],
city: [{
required: true,
message: '请输入开户城市',
trigger: ['blur']
}],
collection_bank: [{
required: true,
message: '请输入收款银行',
trigger: ['blur']
}],
collection_open_bank: [{
required: true,
message: '请输入收款开户行',
trigger: ['blur']
}],
agent: [{
required: true,
message: '请输入经办人',
trigger: ['blur']
}],
head_dept: [{
required: true,
message: '请输入负责部门',
trigger: ['blur']
}],
bid_margin: [{
required: true,
message: '请输入投标保证金',
trigger: ['blur']
}],
pay_type: [{
required: true,
message: '请输入支付方式',
trigger: ['blur']
}],
end_date: [{
required: true,
message: '请输入缴纳截止日期',
trigger: ['blur']
}],
expected_return_date: [{
required: true,
message: '请输入预计归还日期',
trigger: ['blur']
}],
remark: [{
required: true,
message: '请输入备注',
trigger: ['blur']
}],
create_user: [{
required: true,
message: '请输入申请人',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiFinancialBidMarginRecoveryEdit(data)
: await apiFinancialBidMarginRecoveryAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
const getProvinceList = async () => {
const data = await apiProvinceList({});
datas["provinceOptions"] = data;
};
const getCityList = async () => {
const data = await apiCityList({ province_code: formData.province });
datas["cityOptions"] = data;
};
//
function province_change(value: string) {
formData.city = ''
getCityList();
}
getProvinceList()
defineExpose({
open,
setFormData,
})
</script>

View File

@ -0,0 +1,150 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="甲方单位" prop="part_a">
<el-input class="w-[280px]" v-model="queryParams.part_a" clearable placeholder="请输入甲方单位" />
</el-form-item>
<el-form-item label="经办人">
<el-input class="w-[280px]" v-model="queryParams.agent" clearable placeholder="请输入经办人" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['financial.financial_bid_margin_recovery/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['financial.financial_bid_margin_recovery/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="项目名称" prop="bid_info_id" show-overflow-tooltip />
<el-table-column label="甲方单位" prop="part_a_name" show-overflow-tooltip />
<el-table-column label="经办人" prop="agent_name" show-overflow-tooltip />
<el-table-column label="投标保证金" prop="" show-overflow-tooltip />
<el-table-column label="缴纳截止日期" prop="end_date" show-overflow-tooltip />
<el-table-column label="预计归还日期" prop="expected_return_date" show-overflow-tooltip />
<el-table-column label="回收金额" prop="recovery_amount" show-overflow-tooltip />
<el-table-column label="转为履约金金额" prop="" show-overflow-tooltip />
<el-table-column label="未回收金额" prop="" show-overflow-tooltip />
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['financial.financial_bid_margin_recovery/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['financial.financial_bid_margin_recovery/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['financial.financial_bid_margin_recovery/detail']" link
@click="handleDetail(row.id)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" :deptList="deptList" 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="financialBidMarginRecoveryLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiFinancialBidMarginRecoveryLists, apiFinancialBidMarginRecoveryDelete, apiFinancialBidMarginRecoveryDetail } from '@/api/financial_bid_margin_recovery'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import { deptLists } from "@/api/org/department"
import detailConfig from './detail'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailRef = ref('')
//
const showEdit = ref(false)
const showDetail = ref(false)
//
const queryParams = reactive({
bid_info_id: '',
business_opportunity_id: '',
part_a: '',
cooperate_company: '',
agent: ""
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('financial_pay_type')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiFinancialBidMarginRecoveryLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apiFinancialBidMarginRecoveryDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiFinancialBidMarginRecoveryDelete({ id })
getLists()
}
//
const handleDetail = async (id: any) => {
let res = await apiFinancialBidMarginRecoveryDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
const deptList = ref([])
const getDeptList = async () => {
let res = await deptLists()
deptList.value = res.lists
}
getDeptList()
getLists()
</script>

View File

@ -1,6 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<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">

View File

@ -0,0 +1,35 @@
const detailConfig = {
title: "财务管理--合同收款计划",
config: [
{
label: "合同名称",
value: "contract_name"
},
{
label: "计划收款金额",
value: "collection_amount"
},
{
label: "计划日期",
value: "collection_date"
},
{
label: "计划人",
value: "collection_user"
},
{
label: "备注",
value: "remark",
column: 1
},
{
label: "附件",
value: "annex",
column: 1
},
]
}
export default detailConfig;

View File

@ -1,33 +1,34 @@
<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">
<el-form-item label="合同id" prop="contract_id">
<el-input v-model="formData.contract_id" clearable placeholder="请输入合同id" />
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form-item label="合同名称" prop="contract_name">
<el-input v-model="formData.contract_name" clearable placeholder="点击选择合同" @click="showDialog = true"
readonly />
</el-form-item>
<el-form-item label="计划收款金额" prop="collection_amount">
<el-input v-model="formData.collection_amount" clearable placeholder="请输入计划收款金额" />
<el-input v-model="formData.collection_amount" clearable placeholder="请输入计划收款金额" type="number" />
</el-form-item>
<el-form-item label="计划日期" prop="collection_date">
<el-input v-model="formData.collection_date" clearable placeholder="请输入计划日期" />
<el-date-picker class="flex-1 !flex" v-model="formData.collection_date" clearable
value-format="YYYY-MM-DD" placeholder="选择计划日期">
</el-date-picker>
</el-form-item>
<el-form-item label="计划人" prop="collection_user">
<el-input v-model="formData.collection_user" clearable placeholder="请输入计划人" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="remark" />
</el-form-item>
<el-form-item label="附件" prop="annex">
<el-input v-model="formData.annex" clearable placeholder="请输入附件" />
<upload-annex :form-data="formData"></upload-annex>
</el-form-item>
</el-form>
<el-dialog v-model="showDialog" title="选择合同" width="70%">
<dialogTable :config="cost_approved_projects" @customEvent="customEvent" :query="{ status: 1 }">
</dialogTable>
</el-dialog>
</popup>
</div>
</template>
@ -36,8 +37,8 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiFinancialCollectionPlanAdd, apiFinancialCollectionPlanEdit, apiFinancialCollectionPlanDetail } from '@/api/financial_collection_plan'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { cost_approved_projects } from "@/components/dialogTable/dialogTableConfig";
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -48,6 +49,7 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
//
@ -59,19 +61,32 @@ const popupTitle = computed(() => {
const formData = reactive({
id: '',
contract_id: '',
contract_name: '',
collection_amount: '',
collection_date: '',
collection_user: '',
remark: '',
annex: '',
annex: [],
})
const customEvent = (e) => {
formData.contract_id = e.id
formData.contract_name = e.contract_name
// formData.contract_type = e.contract_type_text
// formData.part_a = e.part_a
// formData.part_b = e.part_b
// formData.sign_money = e.money
// formData.sign_time = e.sign_date
// formData.total_invoice_amount = e.total_invoice_amount
// formData.total_refund_amount = e.total_refund_amount
showDialog.value = false
}
//
const formRules = reactive<any>({
contract_id: [{
contract_name: [{
required: true,
message: '请输入合同id',
message: '请选择合同',
trigger: ['blur']
}],
collection_amount: [{
@ -89,11 +104,7 @@ const formRules = reactive<any>({
message: '请输入计划人',
trigger: ['blur']
}],
remark: [{
required: true,
message: '请输入备注',
trigger: ['blur']
}]
})
@ -105,8 +116,8 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
@ -120,9 +131,9 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiFinancialCollectionPlanEdit(data)
const data = { ...formData, }
mode.value == 'edit'
? await apiFinancialCollectionPlanEdit(data)
: await apiFinancialCollectionPlanAdd(data)
popupRef.value?.close()
emit('success')

View File

@ -1,13 +1,11 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="合同id" prop="contract_id">
<el-input class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请输入合同id" />
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="计划日期" prop="collection_user">
<el-date-picker class="flex-1 !flex" v-model="queryParams.collection_date" clearable
value-format="YYYY-MM-DD" placeholder="选择计划日期">
</el-date-picker>
</el-form-item>
<el-form-item label="计划人" prop="collection_user">
<el-input class="w-[280px]" v-model="queryParams.collection_user" clearable placeholder="请输入计划人" />
@ -25,40 +23,31 @@
</template>
新增
</el-button>
<el-button
v-perms="['financial.financial_collection_plan/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
<el-button v-perms="['financial.financial_collection_plan/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="合同id" prop="contract_id" show-overflow-tooltip />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="计划收款金额" prop="collection_amount" show-overflow-tooltip />
<el-table-column label="计划日期" prop="collection_date" show-overflow-tooltip />
<el-table-column label="计划人" prop="collection_user" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" 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_collection_plan/edit']"
type="primary"
link
@click="handleEdit(row)"
>
<el-button v-perms="['financial.financial_collection_plan/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button
v-perms="['financial.financial_collection_plan/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
<el-button v-perms="['financial.financial_collection_plan/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['financial.financial_collection_plan/detail']" link
@click="handleDetail(row.id)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
@ -68,26 +57,33 @@
</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"
width="550px" :column='1' />
</div>
</template>
<script lang="ts" setup name="financialCollectionPlanLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiFinancialCollectionPlanLists, apiFinancialCollectionPlanDelete } from '@/api/financial_collection_plan'
import { apiFinancialCollectionPlanLists, apiFinancialCollectionPlanDelete, apiFinancialCollectionPlanDetail } from '@/api/financial_collection_plan'
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)
//
const queryParams = reactive({
contract_id: '',
collection_user: ''
collection_user: '',
collection_date: ""
})
//
@ -116,10 +112,11 @@ const handleAdd = async () => {
//
const handleEdit = async (data: any) => {
let res = await apiFinancialCollectionPlanDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
editRef.value?.setFormData(res)
}
//
@ -128,7 +125,14 @@ const handleDelete = async (id: number | any[]) => {
await apiFinancialCollectionPlanDelete({ id })
getLists()
}
//
const handleDetail = async (id: any) => {
let res = await apiFinancialCollectionPlanDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -1,6 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="135px" :rules="formRules">
<el-row>
<el-col :span="8">

View File

@ -60,7 +60,8 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['financial.financial_invoice/detail']" link @click="handleDetail(row.id)">
<el-button v-perms="['financial.financial_invoice/detail']" link
@click="handleDetail(row.id)">
详情
</el-button>
</template>
@ -152,4 +153,3 @@ const handleDetail = async (id: any) => {
getLists()
</script>

View File

@ -0,0 +1,81 @@
const detailConfig = {
title: "财务管理--履约金申请",
config: [
{
label: "合同名称",
value: "contract_name"
},
{
label: "支付方式",
value: "pay_type_text"
},
{
label: "要求交款日期",
value: "payment_date"
},
{
label: "申请金额",
value: "apply_amount"
},
{
label: "收款单位",
value: "collection_account"
},
{
label: "收款银行",
value: "collection_bank"
},
{
label: "收款开户行",
value: "collection_open_bank"
},
{
label: "开户省份",
value: "province_name"
},
{
label: "开户市区",
value: "city_name",
},
{
label: "支付人",
value: "pay_user_name",
},
{
label: "付款账号",
value: "pay_account",
},
{
label: "支付金额",
value: "pay_amount",
},
{
label: "支付日期",
value: "pay_date",
},
{
label: "备注",
value: "remark",
column: 1
},
{
label: "附件",
value: "annex",
column: 1
},
{
label: "创建人",
value: "create_user",
},
{
label: "创建时间",
value: "create_time",
},
]
}
export default detailConfig;

View File

@ -0,0 +1,348 @@
<template>
<div class="edit-popup">
<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="contract_name">
<el-input v-model="formData.contract_name" clearable placeholder="点击选择合同" readonly
@click="showDialog = true" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="支付方式" prop="pay_type">
<el-select v-model="formData.pay_type" class=" flex-1">
<el-option v-for="item in dictData.financial_pay_type" :key="item.value"
:label="item.name" :value="parseInt(item.value)"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="要求交款日期" prop="payment_date">
<el-date-picker class="flex-1 !flex" v-model="formData.payment_date" clearable
value-format="YYYY-MM-DD" placeholder="选择要求交款日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请金额" prop="apply_amount">
<el-input v-model="formData.apply_amount" clearable placeholder="请输入申请金额" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款单位" prop="collection_company">
<el-input v-model="formData.collection_company" clearable placeholder="请输入收款单位" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款账号" prop="collection_account">
<el-input v-model="formData.collection_account" clearable placeholder="请输入收款账号"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款银行" prop="collection_bank">
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款开户行" prop="collection_open_bank">
<el-input v-model="formData.collection_open_bank" clearable placeholder="请输入收款开户行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户省份" prop="province">
<el-select v-model="formData.province" clearable placeholder="请选择省"
@change="province_change" class="flex-1">
<el-option v-for="(item, index) in datas.provinceOptions" :key="index"
:label="item.province_name" :value="(item.province_code)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户市区" prop="city">
<el-select v-model="formData.city" clearable placeholder="请选择市" class="flex-1">
<el-option v-for="(item, index) in datas.cityOptions" :key="index"
:label="item.city_name" :value="(item.city_code)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="支付人" prop="pay_user">
<!-- <el-input v-model="formData.pay_user" clearable placeholder="请输入支付人" /> -->
<el-input v-model="formData.pay_user_name" clearable placeholder="请输入支付人" readonly
@click="userclick" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="付款账号" prop="pay_account">
<el-input v-model="formData.pay_account" clearable placeholder="请输入付款账号" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="支付金额" prop="pay_amount">
<el-input v-model="formData.pay_amount" clearable placeholder="请输入支付金额" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="支付日期" prop="pay_date">
<el-date-picker class="flex-1 !flex" v-model="formData.pay_date" clearable
value-format="YYYY-MM-DD" placeholder="选择支付日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="annex">
<UploadAnnex :form-data="formData"></UploadAnnex>
</el-form-item>
</el-col>
<create-user-lable flag :formData="formData" name="申请"></create-user-lable>
</el-row>
</el-form>
<el-dialog v-model="showDialog" title="选择合同" width="70%">
<dialogTable :config="marketing_contract" @customEvent="customEvent" :query="{ contract_type: 0 }">
</dialogTable>
</el-dialog>
<div v-if="showDialog3">
<personnelselector ref="personnel" @confirm="submituser" type="1">
</personnelselector>
</div>
</popup>
</div>
</template>
<script lang="ts" setup name="financialPerformanceMoneyApplyEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiFinancialPerformanceMoneyApplyAdd, apiFinancialPerformanceMoneyApplyEdit, apiFinancialPerformanceMoneyApplyDetail } from '@/api/financial_performance_money_apply'
import { apiCityList, apiProvinceList } from "@/api/common";
import { marketing_contract } from "@/components/dialogTable/dialogTableConfig";
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const showDialog3 = ref(false)
const personnel = ref(null)
const datas = reactive({
provinceOptions: [],
cityOptions: [],
});
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑财务管理--履约金申请' : '新增财务管理--履约金申请'
})
//
const formData = reactive({
id: '',
contract_id: '',
contract_name: '',
pay_type: '',
payment_date: '',
apply_amount: '',
collection_company: '',
collection_account: '',
collection_bank: '',
collection_open_bank: '',
province: '',
city: '',
pay_user: '',
pay_user_name: '',
pay_account: '',
pay_amount: '',
pay_date: '',
remark: '',
annex: '',
create_user: '',
create_time: '',
})
const customEvent = (e) => {
formData.contract_id = e.id
formData.contract_name = e.contract_name
showDialog.value = false
}
const userclick = async () => {
showDialog3.value = true
await nextTick()
personnel.value.open()
}
//
const submituser = (e: any) => {
formData['pay_user'] = e.id;
formData['pay_user_name'] = e.name;
showDialog3.value = false
}
//
const formRules = reactive<any>({
contract_name: [{
required: true,
message: '请选择合同',
trigger: ['blur']
}],
pay_type: [{
required: true,
message: '请输入支付方式',
trigger: ['blur']
}],
payment_date: [{
required: true,
message: '请输入要求交款日期',
trigger: ['blur']
}],
apply_amount: [{
required: true,
message: '请输入申请金额',
trigger: ['blur']
}],
collection_company: [{
required: true,
message: '请输入收款单位',
trigger: ['blur']
}],
collection_account: [{
required: true,
message: '请输入收款账号',
trigger: ['blur']
}],
collection_bank: [{
required: true,
message: '请输入收款银行',
trigger: ['blur']
}],
collection_open_bank: [{
required: true,
message: '请输入收款开户行',
trigger: ['blur']
}],
province: [{
required: true,
message: '请输入开户省份',
trigger: ['blur']
}],
city: [{
required: true,
message: '请输入开户市区',
trigger: ['blur']
}],
pay_user: [{
required: true,
message: '请输入支付人',
trigger: ['blur']
}],
pay_account: [{
required: true,
message: '请输入付款账号',
trigger: ['blur']
}],
pay_amount: [{
required: true,
message: '请输入支付金额',
trigger: ['blur']
}],
pay_date: [{
required: true,
message: '请输入支付日期',
trigger: ['blur']
}],
remark: [{
required: true,
message: '请输入备注',
trigger: ['blur']
}],
create_user: [{
required: true,
message: '请输入申请人',
trigger: ['blur']
}],
create_time: [{
required: true,
message: '请输入申请日期',
trigger: ['blur']
}]
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiFinancialPerformanceMoneyApplyDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiFinancialPerformanceMoneyApplyEdit(data)
: await apiFinancialPerformanceMoneyApplyAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
const getProvinceList = async () => {
const data = await apiProvinceList({});
datas["provinceOptions"] = data;
};
const getCityList = async () => {
const data = await apiCityList({ province_code: formData.province });
datas["cityOptions"] = data;
};
//
function province_change(value: string) {
formData.city = ''
getCityList();
}
getProvinceList()
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,140 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="要求交款日期" prop="payment_date">
<el-date-picker class="flex-1 !flex" v-model="queryParams.payment_date" clearable
value-format="YYYY-MM-DD" placeholder="选择要求交款日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['financial.financial_performance_money_apply/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['financial.financial_performance_money_apply/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="支付方式" prop="pay_type_text" show-overflow-tooltip />
<el-table-column label="要求交款日期" prop="payment_date" show-overflow-tooltip />
<el-table-column label="申请金额" prop="apply_amount" show-overflow-tooltip />
<el-table-column label="收款单位" prop="collection_company" show-overflow-tooltip />
<el-table-column label="收款账号" prop="collection_account" show-overflow-tooltip />
<el-table-column label="收款银行" prop="collection_bank" show-overflow-tooltip />
<el-table-column label="收款开户行" prop="collection_open_bank" show-overflow-tooltip />
<el-table-column label="支付金额" prop="pay_amount" show-overflow-tooltip />
<el-table-column label="支付日期" prop="pay_date" 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">
<template #default="{ row }">
<el-button v-perms="['financial.financial_performance_money_apply/edit']" type="primary"
link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['financial.financial_performance_money_apply/delete']" type="danger"
link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['financial.financial_performance_money_apply/detail']" link
@click="handleDetail(row.id)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</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="financialPerformanceMoneyApplyLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiFinancialPerformanceMoneyApplyLists, apiFinancialPerformanceMoneyApplyDelete, apiFinancialPerformanceMoneyApplyDetail } from '@/api/financial_performance_money_apply'
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)
//
const queryParams = reactive({
payment_date: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('financial_pay_type')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiFinancialPerformanceMoneyApplyLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apiFinancialPerformanceMoneyApplyDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiFinancialPerformanceMoneyApplyDelete({ id })
getLists()
}
//
const handleDetail = async (id: any) => {
let res = await apiFinancialPerformanceMoneyApplyDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -1,6 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<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-card>
@ -92,8 +93,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="负责人">
<el-input v-model="formData.business_opportunity.head_name" clearable placeholder="点击选择负责人"
readonly @click="userclick('head')" disabled />
<el-input v-model="formData.business_opportunity.head_name" clearable
placeholder="点击选择负责人" readonly @click="userclick('head')" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
@ -141,17 +142,20 @@
</el-col>
<el-col :span="8">
<el-form-item label="投标项目编号" prop="bid_code">
<el-input v-model="formData.bid_code" clearable placeholder="请输入投标项目编号" v-type="'code'" />
<el-input v-model="formData.bid_code" clearable placeholder="请输入投标项目编号"
v-type="'code'" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="投标保证金" prop="bid_margin">
<el-input v-model="formData.bid_margin" clearable placeholder="请输入投标保证金" type="number" />
<el-input v-model="formData.bid_margin" clearable placeholder="请输入投标保证金"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="报名和标书费" prop="bid_amount">
<el-input v-model="formData.bid_amount" clearable placeholder="请输入报名和标书费" type="number" />
<el-input v-model="formData.bid_amount" clearable placeholder="请输入报名和标书费"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -223,7 +227,7 @@
</el-col>
</el-card>
</el-form>
<el-dialog v-model="showDialog" title="选择建设单位" width="70%">
<el-dialog v-model="showDialog" title="选择业务机会" width="70%">
<dialogTable :config="marketing_business_opportunity" @customEvent="customEvent" :query="{ status: 0 }">
</dialogTable>
</el-dialog>

View File

@ -1,6 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="140px" :rules="formRules">
<el-card>
@ -34,8 +35,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="开标日期" prop="bid_open_date">
<el-date-picker class="flex-1 !flex" v-model="formData.bid_open_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="选择开标日期">
<el-date-picker class="flex-1 !flex" v-model="formData.bid_open_date" clearable
type="date" value-format="YYYY-MM-DD" placeholder="选择开标日期">
</el-date-picker>
</el-form-item>
</el-col>
@ -46,7 +47,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="我方报价">
<el-input v-model="formData.our_quotation" clearable placeholder="请输入我方报价" type="number" />
<el-input v-model="formData.our_quotation" clearable placeholder="请输入我方报价"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">

View File

@ -1,6 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px" :rules="formRules">
<el-row>
<el-col :span="8">
@ -95,8 +96,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="所在省份" prop="province">
<el-select v-model="formData.province" clearable placeholder="请选择省" @change="province_change"
class="flex-1">
<el-select v-model="formData.province" clearable placeholder="请选择省"
@change="province_change" class="flex-1">
<el-option v-for="(item, index) in datas.provinceOptions" :key="index"
:label="item.province_name" :value="(item.province_code)" />
</el-select>
@ -105,8 +106,8 @@
<el-col :span="8">
<el-form-item label="所在市区" prop="city">
<el-select v-model="formData.city" clearable placeholder="请选择市" class="flex-1">
<el-option v-for="(item, index) in datas.cityOptions" :key="index" :label="item.city_name"
:value="(item.city_code)" />
<el-option v-for="(item, index) in datas.cityOptions" :key="index"
:label="item.city_name" :value="(item.city_code)" />
</el-select>
</el-form-item>
</el-col>

View File

@ -1,6 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<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">
@ -53,7 +54,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="暂估签订金额" prop="signed_amount">
<el-input v-model="formData.signed_amount" clearable placeholder="请输入暂估签订金额" type="number" />
<el-input v-model="formData.signed_amount" clearable placeholder="请输入暂估签订金额"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">

View File

@ -1,6 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<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">
@ -107,8 +108,8 @@
<el-col :span="8">
<el-form-item label="文件类型">
<el-select class='flex-1' v-model="formData.file_type">
<el-option v-for="( item, index ) in dictData.cost_consultation_file_type " :key="index"
:label="item.name" :value="parseInt(item.value)"></el-option>
<el-option v-for="( item, index ) in dictData.cost_consultation_file_type "
:key="index" :label="item.name" :value="parseInt(item.value)"></el-option>
</el-select>
</el-form-item>
</el-col>
@ -126,8 +127,8 @@
<el-col :span="8">
<el-form-item label="骑缝盖章">
<el-select class='flex-1' v-model="formData.plance_seal">
<el-option v-for="( item, index ) in dictData.isqfgz " :key="index" :label="item.name"
:value="parseInt(item.value)"></el-option>
<el-option v-for="( item, index ) in dictData.isqfgz " :key="index"
:label="item.name" :value="parseInt(item.value)"></el-option>
</el-select>
</el-form-item>
</el-col>
@ -151,7 +152,7 @@
</personnelselector>
</div>
<el-dialog v-model="showDialog1" title="选择主合同" width="70%">
<dialogTable :config="marketing_contract" @customEvent="customEvent">
<dialogTable :config="marketing_contract" @customEvent="customEvent" :query="{ contract_type: 0 }">
</dialogTable>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择甲方签订单位" width="70%">

View File

@ -0,0 +1,78 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="结算日期" prop="date">
<el-input class="w-[280px]" v-model="queryParams.date" clearable placeholder="请输入结算日期" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table border :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column :render-header="pager.calcWidth" label="项目名称" prop="project_name"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="业主单位" prop="project_num"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="中标日期" prop="contract_name"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="是否中标" prop="contract_type"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="中标价" prop="amount" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="中标通知书编号" prop="part_a"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="投标负责人" prop="part_b"
show-overflow-tooltip />
<el-table-column label="工程总投资" prop="sign_money" show-overflow-tooltip />
<el-table-column label="中标总监/经理" prop="sign_time" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="招标方式" prop="date" show-overflow-tooltip />
<el-table-column label="行业性质" prop="total_invoice_amount" show-overflow-tooltip />
<el-table-column label="项目地点" prop="total_refund_amount" show-overflow-tooltip />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup name="zjzxSettlementLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiwinning_project, } from '@/api/marketing_bid_statistics'
//
const queryParams = reactive({
project_id: '',
date: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiwinning_project,
params: queryParams
})
getLists()
</script>

View File

@ -1,6 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-row>
<el-col :span="8">
@ -65,8 +66,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="结算日期" prop="date">
<el-date-picker class="flex-1 !flex" v-model="formData.date" clearable value-format="YYYY-MM-DD"
placeholder="选择到账日期">
<el-date-picker class="flex-1 !flex" v-model="formData.date" clearable
value-format="YYYY-MM-DD" placeholder="选择到账日期">
</el-date-picker>
</el-form-item>
</el-col>
@ -144,7 +145,7 @@ const formData = reactive({
const customEvent = (e) => {
let list = ['project_num', , 'project_name', 'contract_name', 'part_a', 'part_b', 'total_invoice_amount', 'total_refund_amount']
list.forEach(item => {
formData[item] = e[item] ?? (e.contract)[item]
formData[item] = e[item]
})
// formData.contract_type = e.contract.contract_type_text
formData.project_id = e.id