add
This commit is contained in:
parent
ac1ddac17c
commit
766cccae34
26
src/api/financial_bid_margin.ts
Normal file
26
src/api/financial_bid_margin.ts
Normal 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 })
|
||||
}
|
26
src/api/financial_bid_margin_recovery.ts
Normal file
26
src/api/financial_bid_margin_recovery.ts
Normal 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 })
|
||||
}
|
26
src/api/financial_performance_money_apply.ts
Normal file
26
src/api/financial_performance_money_apply.ts
Normal 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 })
|
||||
}
|
36
src/api/marketing_bid_statistics.ts
Normal file
36
src/api/marketing_bid_statistics.ts
Normal 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,
|
||||
});
|
||||
}
|
244
src/views/bid_project_status/index.vue
Normal file
244
src/views/bid_project_status/index.vue
Normal 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>
|
92
src/views/financial_bid_margin/detail.js
Normal file
92
src/views/financial_bid_margin/detail.js
Normal 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;
|
393
src/views/financial_bid_margin/edit.vue
Normal file
393
src/views/financial_bid_margin/edit.vue
Normal 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>
|
158
src/views/financial_bid_margin/index.vue
Normal file
158
src/views/financial_bid_margin/index.vue
Normal 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>
|
119
src/views/financial_bid_margin_recovery/detail.js
Normal file
119
src/views/financial_bid_margin_recovery/detail.js
Normal 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;
|
437
src/views/financial_bid_margin_recovery/edit.vue
Normal file
437
src/views/financial_bid_margin_recovery/edit.vue
Normal 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>
|
150
src/views/financial_bid_margin_recovery/index.vue
Normal file
150
src/views/financial_bid_margin_recovery/index.vue
Normal 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>
|
@ -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">
|
||||
|
35
src/views/financial_collection_plan/detail.js
Normal file
35
src/views/financial_collection_plan/detail.js
Normal 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;
|
@ -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')
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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">
|
||||
|
@ -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>
|
||||
|
||||
|
81
src/views/financial_performance_money_apply/detail.js
Normal file
81
src/views/financial_performance_money_apply/detail.js
Normal 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;
|
348
src/views/financial_performance_money_apply/edit.vue
Normal file
348
src/views/financial_performance_money_apply/edit.vue
Normal 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>
|
140
src/views/financial_performance_money_apply/index.vue
Normal file
140
src/views/financial_performance_money_apply/index.vue
Normal 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>
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
|
@ -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%">
|
||||
|
78
src/views/winning_project/index.vue
Normal file
78
src/views/winning_project/index.vue
Normal 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>
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user