This commit is contained in:
zmj 2024-04-15 15:33:11 +08:00
parent 766cccae34
commit 060cfeb39f
46 changed files with 6085 additions and 202 deletions

View File

@ -0,0 +1,35 @@
import request from "@/utils/request";
export function apibid_margin_recovery_searchs(params: any) {
return request.get({
url: "/financial.financial_bid_statistics/bid_margin_recovery_search",
params,
});
}
export function apiperformance_money_recovery_search(params: any) {
return request.get({
url: "/financial.financial_bid_statistics/performance_money_recovery_search",
params,
});
}
export function apiperformance_money_list(params: any) {
return request.get({
url: "/financial.financial_bid_statistics/performance_money_list",
params,
});
}
export function apibid_margin_list(params: any) {
return request.get({
url: "/financial.financial_bid_statistics/bid_margin_list",
params,
});
}
export function apibid_margin_statistics(params: any) {
return request.get({
url: "/financial.financial_bid_statistics/bid_margin_statistics",
params,
});
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 财务管理--履约金回收列表
export function apiFinancialPerformanceMoneyRecoveryLists(params: any) {
return request.get({ url: '/financial.financial_performance_money_recovery/lists', params })
}
// 添加财务管理--履约金回收
export function apiFinancialPerformanceMoneyRecoveryAdd(params: any) {
return request.post({ url: '/financial.financial_performance_money_recovery/add', params })
}
// 编辑财务管理--履约金回收
export function apiFinancialPerformanceMoneyRecoveryEdit(params: any) {
return request.post({ url: '/financial.financial_performance_money_recovery/edit', params })
}
// 删除财务管理--履约金回收
export function apiFinancialPerformanceMoneyRecoveryDelete(params: any) {
return request.post({ url: '/financial.financial_performance_money_recovery/delete', params })
}
// 财务管理--履约金回收详情
export function apiFinancialPerformanceMoneyRecoveryDetail(params: any) {
return request.get({ url: '/financial.financial_performance_money_recovery/detail', params })
}

View File

@ -883,7 +883,6 @@ export const marketing_contract: Iconfig = {
{ contract_code: "合同编号" },
{ part_a_name: "甲方签约单位" },
{ part_b: "乙方签约单位" },
{ part_b_signatory_name: "乙方签约人" },
{ business_nature_text: "业务性质" },
{ industry_nature_text: "行业性质" },
{ fund_sources_text: "资金来源" },

View File

@ -93,7 +93,8 @@
<el-col :span="8">
<el-form-item label="发票编号" prop="invoice_no">
<el-input v-model="formData.invoice_no" clearable placeholder="请输入发票编号" type="number" />
<el-input v-model="formData.invoice_no" clearable placeholder="请输入发票编号" v-type="'code'"
@input="invoicChnage" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -323,6 +324,12 @@ const formData = reactive({
approve_detail: {}
})
var numberRegex = /\d/g;
const invoicChnage = (e) => {
formData.invoice_no = (e.match(numberRegex)).join(",").replace(/,/g, '')
}
//
const formRules = reactive<any>({

View File

@ -59,7 +59,7 @@
show-overflow-tooltip width="120" />
<el-table-column :render-header="pager.calcWidth" label="开票金额(非税)" prop="amount_including_tax"
show-overflow-tooltip width="120" />
<el-table-column :render-header="pager.calcWidth" label="税率(%)" prop="tax_rate" show-overflow-tooltip />
<el-table-column label="税率(%)" prop="tax_rate" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right" align="center">
<template #default="{ row }">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/edit']" type="primary" link

View File

@ -181,7 +181,7 @@
</template></el-table-column>
<el-table-column label="单位" prop="unit">
<template #default="{ row }">
<el-input v-model="row.product_unit" /> </template>
<el-input v-model="row.product_unit" disabled /> </template>
</el-table-column>
<el-table-column label="数量" prop="num">
<template #default="{ row, $index }">

View File

@ -41,10 +41,8 @@
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="投标公司名称" prop="bid_company_name"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="招标项目资金来源" prop="bidding_project_fund_source"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="是否需要保证金" prop="is_margin"
show-overflow-tooltip />
<el-table-column label="招标项目资金来源" prop="bidding_project_fund_source" show-overflow-tooltip />
<el-table-column label="是否需要保证金" prop="is_margin" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="保证金金额" prop="margin_amount"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="开标日期" prop="bid_opening_date"

View File

@ -38,15 +38,13 @@
<el-table-column :render-header="pager.calcWidth" label="产品名称" prop="product_name" />
<el-table-column :render-header="pager.calcWidth" label="型号规格" prop="product_specs"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="单位" prop="product_unit"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="数量" prop="num" show-overflow-tooltip />
<el-table-column label="单位" prop="product_unit" show-overflow-tooltip />
<el-table-column label="数量" prop="num" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="成本单价" prop="cost_price"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="金额" prop="cost_amount" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="点数" prop="points" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="报价单价" prop="sale_price"
show-overflow-tooltip />
<el-table-column label="报价单价" prop="sale_price" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="报价金额" prop="sale_amount"
show-overflow-tooltip />

View File

@ -0,0 +1,86 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<!-- <el-form-item label="标书编号" prop="bid_document_no">
<el-input class="w-[250px]" v-model="queryParams.bid_document_no" clearable placeholder="请输入标书编号" />
</el-form-item>
<el-form-item label="审查编号" prop="code">
<el-input class="w-[250px]" v-model="queryParams.code" clearable placeholder="请输入审查编号" />
</el-form-item>
<el-form-item label="是否需要保证金" prop="is_need_deposit">
<el-select v-model="queryParams.is_need_deposit" clearable placeholder="请选择是否需要保证金">
<el-option v-for="(item, index) in dictData.whether_status" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</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 label="序号" type="index" width="55" />
<el-table-column label="合同名称" prop="contract_name" />
<el-table-column label="建设单位" prop="build_unit" />
<el-table-column label="保证金金额" prop="margin_amount" />
<el-table-column label="缴纳截止日期" prop="end_date" show-overflow-tooltip />
<el-table-column label="预计退回日期" prop="" show-overflow-tooltip />
<el-table-column label="申请状态" prop="margin_amount" show-overflow-tooltip />
<el-table-column label="支付状态" prop="" show-overflow-tooltip />
<el-table-column label="回收状态" prop="" show-overflow-tooltip />
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup name="bidDocumentExaminationLists">
import { usePaging } from '@/hooks/usePaging'
import { apibid_margin_list } from '@/api/financial_bid_statistics'
import feedback from '@/utils/feedback'
//
const queryParams = reactive({
bid_document_no: '',
code: '',
is_need_deposit: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apibid_margin_list,
params: queryParams
})
getLists()
</script>

View File

@ -0,0 +1,82 @@
<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">
<!-- <selectRemote :formData="queryParams" model="part_a" :api="apiProjectSearch" /> -->
</el-form-item>
<el-form-item label="回收人员" prop="bid_document_no">
<el-input class="w-[250px]" v-model="queryParams.create_user" clearable placeholder="请输入标书编号" />
</el-form-item>
<el-form-item label="回收日期" prop="create_time">
<el-date-picker class="flex-1 !flex" v-model="queryParams.create_time" clearable type="date"
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">
<div class="mt-4">
<el-table border :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="项目名称" prop="project_name" />
<el-table-column label="甲方单位" prop="" />
<el-table-column label="经办人" prop="" />
<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="recovery_amount" show-overflow-tooltip />
<el-table-column label="转为履约金金额" prop="" show-overflow-tooltip />
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup name="bidDocumentExaminationLists">
import { usePaging } from '@/hooks/usePaging'
import { apibid_margin_recovery_searchs } from '@/api/financial_bid_statistics'
import feedback from '@/utils/feedback'
//
const queryParams = reactive({
part_a: '',
create_user: '',
create_time: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apibid_margin_recovery_searchs,
params: queryParams
})
getLists()
</script>

View File

@ -0,0 +1,261 @@
<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_margin_list } from '@/api/financial_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(1)
const chartTypeList = reactive([
{
name: '柱状图',
value: 1
},
{
name: '折线图',
value: 2
},
{
name: '饼状图',
value: 3
},
{
name: '漏斗图',
value: 4
},
])
//
let option1 = {
tooltip: {
trigger: 'item',
},
yAxis: {
type: 'value'
},
legend: {
data: ['总金额', '中标金额', '未中标金额']
},
xAxis: {
type: 'category',
data: ['房屋建筑工程', '化工石油工程', '矿山工程', '市政公用工程', '通信与光电工程', '其他工程', 'Sun']
},
series: [
//
{
name: '总金额',
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar',
},
//
{
name: '中标金额',
data: [10, 20, 50, 10, 32, 46, 55],
type: 'bar',
},
//
{
name: '未中标金额',
data: [33, 47, 21, 80, 95, 35, 120],
type: 'bar',
}
],
};
// 线
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 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 chartData: object;
const getData = async (fetchFun: Function) => {
let res = await fetchFun()
chartData = res
// option1.xAxis.data = chartData.data.map(item => item.name)
// option1.series[0].data = chartData.data.map(item => item.value)
console.log(chartData, '保证金统计表')
option = option1
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:
option3.series[0].data = res.data
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');
getData(apibid_margin_list);
})
</script>
<style>
.tit {
margin: 10px 0;
text-align: center;
font-size: 20px;
}
</style>

View File

@ -34,7 +34,7 @@ var myChart: any
const chartWitdth = ref(500)
const chartHeight = ref(500)
const chartType = ref(3)
const chartType = ref(1)
const chartTypeList = reactive([
{
name: '柱状图',
@ -60,67 +60,40 @@ let option1 = {
tooltip: {
trigger: 'item',
},
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
legend: {
data: ['总金额', '中标金额', '未中标金额']
},
xAxis: {
type: 'category',
data: ['房屋建筑工程', '化工石油工程', '矿山工程', '市政公用工程', '通信与光电工程', '其他工程', 'Sun']
},
series: [
//
{
name: '总金额',
data: [120, 200, 150, 80, 70, 110, 130],
type: 'bar',
},
//
{
name: '中标金额',
data: [10, 20, 50, 10, 32, 46, 55],
type: 'bar',
},
//
{
name: '未中标金额',
data: [33, 47, 21, 80, 95, 35, 120],
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 = {
@ -174,14 +147,59 @@ let option3 = {
]
};
//
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 chartData: object;
const getData = async (fetchFun: Function) => {
let res = await fetchFun()
chartData = res
option3.series[0].data = res.data
option = option3
// option1.xAxis.data = chartData.data.map(item => item.name)
// option1.series[0].data = chartData.data.map(item => item.value)
option = option1
initChart()
}
@ -205,6 +223,7 @@ const changeChartType = (e: any) => {
option = option2
break;
case 3:
option3.series[0].data = res.data
option = option3
break;
case 4:

View File

@ -46,18 +46,15 @@
<el-table-column :render-header="pager.calcWidth" label="序号" type="index" 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="custom_name"
show-overflow-tooltip />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="客户需求" prop="customer_demand_name"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="竞争对手名称" prop="competitor_name"
show-overflow-tooltip />
<el-table-column label="竞争对手名称" prop="competitor_name" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="竞争对手联系人" prop="competitor_contacts"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="联系人电话" prop="competitor_contacts_phone"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="竞争能力" prop="competitive_power"
show-overflow-tooltip />
<el-table-column label="竞争能力" prop="competitive_power" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.competitor/edit']" type="primary" link @click="handleEdit(row)">

View File

@ -68,7 +68,7 @@
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="未开票" prop="not_invoicing_amount"
show-overflow-tooltip />
<el-table-column label="已退款金额" prop="refund_amount" :render-header="pager.calcWidth" />
<el-table-column label="已退款金额" prop="refund_amount" />
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['contract.contract/edit']" type="primary" link @click="handleEdit(row)">

View File

@ -33,7 +33,8 @@
<el-col :span="8">
<el-form-item label="电话" prop="phone"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }, { validator: checkPhone, trigger: 'blur' }]">
<el-input v-model="formData.phone" placeholder="请输入电话" clearable :style="{ width: '100%' }">
<el-input v-model="formData.phone" placeholder="请输入电话" clearable :style="{ width: '100%' }"
type="number">
</el-input>
</el-form-item>
</el-col>
@ -122,7 +123,7 @@
<el-form-item label="邮箱" prop="master_email"
:rules="[{ validator: userEmail, trigger: 'blur' }]">
<el-input v-model="formData.master_email" placeholder="请输入邮箱" clearable
:style="{ width: '100%' }">
:style="{ width: '100%' }" v-type="'code'">
</el-input>
</el-form-item>
</el-col>
@ -176,7 +177,7 @@
<el-table-column label="邮箱" prop="email">
<template #default="{ row, $index }">
<el-input v-model="row.email" @blur="tableEmail(row, $index)" />
<el-input v-model="row.email" @blur="tableEmail(row, $index)" v-type="'code'" />
</template></el-table-column>
<el-table-column label="电话" prop="telephone">
@ -532,9 +533,12 @@ const handleClose = () => {
//
function province_change(value: string) {
formData.city = '';
formData.area = '';
getCityList();
}
function city_change(value: string) {
formData.area = '';
getAreaList();
}

View File

@ -59,9 +59,9 @@
<el-table-column :render-header="pager.calcWidth" label="负责人手机" prop="master_phone" />
<el-table-column :render-header="pager.calcWidth" label="负责人电话" prop="master_telephone" />
<el-table-column :render-header="pager.calcWidth" label="跟进记录" prop="follow_total" />
<el-table-column :render-header="pager.calcWidth" label="最后跟进" prop="last_follow_date" />
<el-table-column :render-header="pager.calcWidth" label="下次回访日期" prop="next_follow_date" />
<el-table-column :render-header="pager.calcWidth" label="创建时间" prop="create_time" />
<el-table-column label="最后跟进" prop="last_follow_date" />
<el-table-column label="下次回访日期" prop="next_follow_date" />
<el-table-column label="创建时间" prop="create_time" />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['custom.custom/edit']" type="primary" link @click="handleEdit(row)">

View File

@ -37,10 +37,10 @@
<el-table-column :render-header="pager.calcWidth" label="组织" prop="org_name" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="部门" prop="dept_name" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="姓名" prop="name" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="职位" prop="position" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="手机" prop="phone" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="电话" prop="telephone" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="邮箱" prop="email" show-overflow-tooltip />
<el-table-column label="职位" prop="position" show-overflow-tooltip />
<el-table-column label="手机" prop="phone" show-overflow-tooltip />
<el-table-column label="电话" prop="telephone" show-overflow-tooltip />
<el-table-column label="邮箱" prop="email" show-overflow-tooltip />
<el-table-column label="备注" prop="notes" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">

View File

@ -53,12 +53,10 @@
<dict-value :options="dictData.follow_type" :value="row.types" />
</template>
</el-table-column>
<el-table-column :render-header="pager.calcWidth" label="执行人" prop="executor" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="行动描述" prop="description"
show-overflow-tooltip />
<el-table-column label="执行人" prop="executor" show-overflow-tooltip />
<el-table-column label="行动描述" prop="description" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="位置" prop="coordinate" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="下次回访日期" prop="next_follow_date"
show-overflow-tooltip />
<el-table-column label="下次回访日期" prop="next_follow_date" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['custom_follow.custom_follow/edit']" type="primary" link

View File

@ -53,16 +53,15 @@
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="客户名称" prop="custom_name"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="需求主题" prop="theme" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="需求提供人" prop="supplier" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="提供人联系方式" prop="supplier_contacts"
show-overflow-tooltip />
<el-table-column label="需求主题" prop="theme" show-overflow-tooltip />
<el-table-column label="需求提供人" prop="supplier" show-overflow-tooltip />
<el-table-column label="提供人联系方式" prop="supplier_contacts" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="重要程度" prop="importance">
<template #default="{ row }">
<dict-value :options="dictData.importance" :value="row.importance" />
</template>
</el-table-column>
<el-table-column :render-header="pager.calcWidth" label="记录时间" prop="recording_time" />
<el-table-column label="记录时间" prop="recording_time" />
<el-table-column :render-header="pager.calcWidth" label="需求内容" prop="demand_content"
show-overflow-tooltip />

View File

@ -38,15 +38,13 @@
<el-table-column :render-header="pager.calcWidth" label="序号" type="index" 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="custom_name"
show-overflow-tooltip />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="需求名称" prop="customer_demand_name"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="解决方案主题" prop="theme" show-overflow-tooltip />
<el-table-column label="解决方案主题" prop="theme" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="提交时间" prop="submission_time"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="方案内容" prop="solution_content"
show-overflow-tooltip />
<el-table-column label="方案内容" prop="solution_content" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="客户反馈" prop="customer_feedback"
show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">

View File

@ -50,7 +50,7 @@
:render-header="pager.calcWidth" />
<el-table-column label="开票日期" prop="invoicing_date" show-overflow-tooltip
:render-header="pager.calcWidth" />
<el-table-column label="提交人" prop="commitor" show-overflow-tooltip :render-header="pager.calcWidth" />
<el-table-column label="提交人" prop="commitor" show-overflow-tooltip />
<el-table-column label="发票税率" prop="invoice_tax_rate_text" show-overflow-tooltip
:render-header="pager.calcWidth" />
<el-table-column label="发票金额" prop="invoice_amount" show-overflow-tooltip
@ -58,8 +58,7 @@
<el-table-column label="不含税金额" prop="amount_excluding_tax" show-overflow-tooltip width="120"
:render-header="pager.calcWidth" />
<el-table-column label="税额" prop="tax_amount" show-overflow-tooltip :render-header="pager.calcWidth" />
<el-table-column label="发票类型" prop="invoice_type_text" show-overflow-tooltip
:render-header="pager.calcWidth" />
<el-table-column label="发票类型" prop="invoice_type_text" show-overflow-tooltip />
<el-table-column label="发票编号" prop="invoice_no" show-overflow-tooltip
:render-header="pager.calcWidth" />

View File

@ -1,7 +1,6 @@
<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">
@ -13,8 +12,8 @@
<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-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>
@ -37,8 +36,7 @@
</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-input v-model="formData.collection_account" clearable placeholder="请输入收款账号" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -53,8 +51,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>
@ -63,8 +61,8 @@
<el-col :span="8">
<el-form-item label="开户市区" prop="city">
<el-select v-model="formData.city" clearable placeholder="请选择市" class="flex-1">
<el-option v-for="(item, index) in datas.cityOptions" :key="index"
:label="item.city_name" :value="(item.city_code)" />
<el-option v-for="(item, index) in datas.cityOptions" :key="index" :label="item.city_name"
:value="(item.city_code)" />
</el-select>
</el-form-item>
</el-col>

View File

@ -0,0 +1,46 @@
const detailConfig = {
title: "财务管理--履约金回收",
config: [
{
label: "合同名称",
value: "contract_name"
},
{
label: "回收日期",
value: "recovery_date"
},
{
label: "回收金额",
value: "recovery_amount"
},
{
label: "未收金额",
value: "not_recovery_amount"
},
{
label: "说明",
value: "remark",
column: 1
},
{
label: "附件",
value: "annex",
column: 1
},
{
label: "录入人",
value: "create_user",
},
{
label: "录入时间",
value: "create_time",
},
]
}
export default detailConfig;

View File

@ -0,0 +1,162 @@
<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="合同名称" prop="contract_name">
<el-input v-model="formData.contract_name" clearable placeholder="点击选择合同" readonly
@click="showDialog = true" />
</el-form-item>
<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-form-item label="回收金额" prop="recovery_amount">
<el-input v-model="formData.recovery_amount" clearable placeholder="请输入回收金额" type="number" />
</el-form-item>
<el-form-item label="未收金额" prop="not_recovery_amount">
<el-input v-model="formData.not_recovery_amount" clearable placeholder="请输入未收金额" type="number" />
</el-form-item>
<el-form-item label="说明">
<el-input v-model="formData.recovery_desc" clearable placeholder="请输入说明" type="textarea" />
</el-form-item>
<createUserLable :form-data="formData" name="录入"></createUserLable>
</el-form>
<el-dialog v-model="showDialog" title="选择合同" width="70%">
<dialogTable :config="marketing_contract" @customEvent="customEvent" :query="{ contract_type: 0 }">
</dialogTable>
</el-dialog>
</popup>
</div>
</template>
<script lang="ts" setup name="financialPerformanceMoneyRecoveryEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiFinancialPerformanceMoneyRecoveryAdd, apiFinancialPerformanceMoneyRecoveryEdit, apiFinancialPerformanceMoneyRecoveryDetail } from '@/api/financial_performance_money_recovery'
import { timeFormat } from '@/utils/util'
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 popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑财务管理--履约金回收' : '新增财务管理--履约金回收'
})
//
const formData = reactive({
id: '',
contract_id: '',
contract_name: "",
recovery_date: '',
recovery_amount: '',
not_recovery_amount: '',
recovery_desc: '',
create_user: '',
create_time: '',
})
const customEvent = (e) => {
formData.contract_id = e.id
formData.contract_name = e.contract_name
showDialog.value = false
}
//
const formRules = reactive<any>({
contract_name: [{
required: true,
message: '请选择合同',
trigger: ['blur']
}],
recovery_date: [{
required: true,
message: '请输入回收日期',
trigger: ['blur']
}],
recovery_amount: [{
required: true,
message: '请输入回收金额',
trigger: ['blur']
}],
not_recovery_amount: [{
required: true,
message: '请输入未收金额',
trigger: ['blur']
}],
recovery_desc: [{
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 apiFinancialPerformanceMoneyRecoveryDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiFinancialPerformanceMoneyRecoveryEdit(data)
: await apiFinancialPerformanceMoneyRecoveryAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,134 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="录入人">
<el-input class="w-[280px]" v-model="queryParams.create_user" 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_performance_money_recovery/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['financial.financial_performance_money_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="contract_name" show-overflow-tooltip />
<el-table-column label="回收日期" prop="recovery_date" show-overflow-tooltip />
<el-table-column label="回收金额" prop="recovery_amount" show-overflow-tooltip />
<el-table-column label="未收金额" prop="not_recovery_amount" show-overflow-tooltip />
<el-table-column label="说明" prop="recovery_desc" show-overflow-tooltip />
<el-table-column label="录入人" prop="create_user" show-overflow-tooltip />
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['financial.financial_performance_money_recovery/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['financial.financial_performance_money_recovery/delete']" type="danger"
link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['financial.financial_performance_money_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" 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="financialPerformanceMoneyRecoveryLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiFinancialPerformanceMoneyRecoveryLists, apiFinancialPerformanceMoneyRecoveryDelete, apiFinancialPerformanceMoneyRecoveryDetail } from '@/api/financial_performance_money_recovery'
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({
create_user: ""
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiFinancialPerformanceMoneyRecoveryLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apiFinancialPerformanceMoneyRecoveryDetail({ 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 apiFinancialPerformanceMoneyRecoveryDelete({ id })
getLists()
}
//
const handleDetail = async (id: any) => {
let res = await apiFinancialPerformanceMoneyRecoveryDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -39,14 +39,14 @@
<el-col :span="8">
<el-form-item label="实际开始日期" prop="start_date">
<el-date-picker class="flex-1 !flex" v-model="formData.start_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
value-format="YYYY-MM-DD" placeholder="请选择日期" @change="calcDuration">
</el-date-picker>
</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 type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
value-format="YYYY-MM-DD" placeholder="请选择日期" @change="calcDuration">
</el-date-picker>
</el-form-item>
</el-col>
@ -168,6 +168,11 @@ const formData = reactive({
projectInfo: {}
})
const calcDuration = () => {
formData.duration = (new Date(formData.end_date) - new Date(formData.start_date)) / (1000 * 60 * 60 * 24)
}
const customEvent = (e: any) => {
formData.project_id = e.id
formData.project_name = e.project_name

View File

@ -7,13 +7,21 @@
readonly />
</el-form-item>
<el-form-item label="合同类型">
<el-input v-model="formData.contract_type" clearable placeholder="请输入合同id" />
<el-select v-model="formData.contract_type" placeholder="请选择合同类型" class=" flex-1">
<el-option :label="item.name" :value="parseInt(item.value)"
v-for="item in dictData.cost_contract_type">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="业务性质">
<el-input v-model="formData.business_nature" clearable placeholder="请输入合同id" />
<el-select v-model="formData.business_nature" placeholder="请选择业务性质" class=" flex-1">
<el-option :label="item.name" :value="parseInt(item.value)"
v-for="item in dictData.cost_consultation_business_nature">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="合同签订金额">
<el-input v-model="formData.signed_amount" clearable placeholder="请输入合同id" />
<el-input v-model="formData.signed_amount" clearable placeholder="请输入合同签订金额" type="number" />
</el-form-item>
<el-form-item label="签证变更后金额" prop="change_amount">
<el-input v-model="formData.change_amount" clearable placeholder="请输入签证变更后金额" type="number" />
@ -127,7 +135,7 @@ const formRules = reactive<any>({
change_user_name: [{
required: true,
message: '请输入签证变更人员',
trigger: ['blur']
trigger: ['change']
}],
change_date: [{
required: true,

View File

@ -90,7 +90,7 @@ const handleSelectionChange = (val: any[]) => {
}
//
const { dictData } = useDictData('')
const { dictData } = useDictData('cost_contract_type,cost_consultation_business_nature')
//
const { pager, getLists, resetParams, resetPage } = usePaging({

View File

@ -55,8 +55,7 @@
show-overflow-tooltip />
<el-table-column label="审核状态" :render-header="pager.calcWidth" prop="approve_status_text"
show-overflow-tooltip />
<el-table-column label="移交状态" :render-header="pager.calcWidth" prop="review_status_text"
show-overflow-tooltip />
<el-table-column label="移交状态" prop="review_status_text" show-overflow-tooltip />
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['marketing.marketing_supplementary_agreement/edit']" type="primary" link

View File

@ -0,0 +1,87 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<!-- <el-form-item label="标书编号" prop="bid_document_no">
<el-input class="w-[250px]" v-model="queryParams.bid_document_no" clearable placeholder="请输入标书编号" />
</el-form-item>
<el-form-item label="审查编号" prop="code">
<el-input class="w-[250px]" v-model="queryParams.code" clearable placeholder="请输入审查编号" />
</el-form-item>
<el-form-item label="是否需要保证金" prop="is_need_deposit">
<el-select v-model="queryParams.is_need_deposit" clearable placeholder="请选择是否需要保证金">
<el-option v-for="(item, index) in dictData.whether_status" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</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 label="序号" type="index" width="55" />
<el-table-column label="履约金到期日期" prop="performance_money_expiration_time" />
<el-table-column label="合同名称" prop="contract_name" />
<el-table-column label="甲方单位" prop="part_a" />
<el-table-column label="履约金金额" prop="performance_money" show-overflow-tooltip />
<el-table-column label="申请状态" prop="apply_status" show-overflow-tooltip />
<el-table-column label="支付状态" prop="" show-overflow-tooltip />
<el-table-column label="回收状态" prop="recovery_status" show-overflow-tooltip />
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup name="bidDocumentExaminationLists">
import { usePaging } from '@/hooks/usePaging'
import { apiperformance_money_list } from '@/api/financial_bid_statistics'
import feedback from '@/utils/feedback'
//
const queryParams = reactive({
bid_document_no: '',
code: '',
is_need_deposit: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiperformance_money_list,
params: queryParams
})
getLists()
</script>

View File

@ -0,0 +1,79 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="回收日期" prop="recovery_date">
<el-date-picker class="flex-1 !flex" v-model="queryParams.recovery_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择回收日期">
</el-date-picker>
</el-form-item>
<el-form-item label="录入人" prop="create_user">
<el-input class="w-[250px]" v-model="queryParams.create_user" 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 label="序号" type="index" width="55" />
<el-table-column label="回收单据" prop="contract_code" />
<el-table-column label="合同名称" prop="contract_name" />
<el-table-column label="履约金到期时间" prop="performance_money_expiration_time" />
<el-table-column label="履约金金额" prop="performance_money" show-overflow-tooltip />
<el-table-column label="回收金额" prop="recovery_amount" show-overflow-tooltip />
<el-table-column label="回收日期" prop="recovery_date" show-overflow-tooltip />
<el-table-column label="录入人" prop="applier" show-overflow-tooltip />
<el-table-column label="录入日期" prop="" show-overflow-tooltip />
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup name="bidDocumentExaminationLists">
import { usePaging } from '@/hooks/usePaging'
import { apiperformance_money_recovery_search } from '@/api/financial_bid_statistics'
import feedback from '@/utils/feedback'
//
const queryParams = reactive({
recovery_date: '',
create_user: '',
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiperformance_money_recovery_search,
params: queryParams
})
getLists()
</script>

View File

@ -108,56 +108,56 @@
<el-button @click="handleDelete1(row)">-</el-button>
</template>
</el-table-column>
<el-table-column width="170" label="采购申请单号" prop="material_purchase_request_code">
<el-table-column width="200" label="采购申请单号" prop="material_purchase_request_code">
<template #default="{ row }">
<el-input v-model="row.material_purchase_request_code" disabled />
</template>
</el-table-column>
<el-table-column width="170" label="材料名称" prop="material_name">
<el-table-column width="200" label="材料名称" prop="material_name">
<template #default="{ row }"> <el-input v-model="row.material_name" disabled />
</template></el-table-column>
<el-table-column width="170" label="材料编码" prop="material_code">
<el-table-column width="200" label="材料编码" prop="material_code">
<template #default="{ row }"> <el-input v-model="row.material_code" disabled />
</template></el-table-column>
<el-table-column width="170" label="规格型号" prop="material_specs">
<el-table-column width="200" label="规格型号" prop="material_specs">
<template #default="{ row }">
<el-input v-model="row.material_specs" />
</template>
</el-table-column>
<el-table-column width="170" label="品牌" prop="material_brand">
<el-table-column width="200" label="品牌" prop="material_brand">
<template #default="{ row }">
<el-input v-model="row.material_brand" disabled />
</template>
</el-table-column>
<el-table-column width="170" label="单位" prop="material_unit">
<el-table-column width="200" label="单位" prop="material_unit">
<template #default="{ row }">
<el-input v-model="row.material_unit" disabled />
</template>
</el-table-column>
<el-table-column width="170" label="可申购数量" prop="could_num">
<el-table-column width="200" label="可申购数量" prop="could_num">
<template #default="{ row, $index }">
<el-input v-model="row.could_num" disabled />
</template>
</el-table-column>
<el-table-column width="170" label="数量" prop="num">
<el-table-column width="200" label="数量" prop="num">
<template #default="{ row, $index }">
<el-input-number v-model="row.num" min="0" :max="row.could_num" />
</template>
</el-table-column>
<el-table-column width="170" label="含税单价" prop="price">
<el-table-column width="200" label="含税单价" prop="price">
<template #default="{ row, $index }">
<el-input v-model="row.price" />
</template>
</el-table-column>
<el-table-column width="170" label="税率(%)" prop="tax_rate">
<el-table-column width="200" label="税率(%)" prop="tax_rate">
<template #default="{ row, $index }">
<el-select v-model="row.tax_rate" clearable placeholder="请选择税率" value-key="name">
@ -167,13 +167,13 @@
</template>
</el-table-column>
<el-table-column width="170" label="不含税金额" prop="amount_excluding_tax">
<el-table-column width="200" label="不含税金额" prop="amount_excluding_tax">
<template #default="{ row }">
<el-input v-model="row.amount_excluding_tax" prop="num" disabled />
</template>
</el-table-column>
<el-table-column width="170" label="含税金额" prop="amount_including_tax">
<el-table-column width="200" label="含税金额" prop="amount_including_tax">
<template #default="{ row }">
<el-input v-model="row.amount_including_tax" prop="num" disabled type="number" />

View File

@ -93,11 +93,10 @@
<el-table-column :render-header="pager.calcWidth" label="所属行业" prop="industry" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="单位性质" prop="unit_nature"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="招标方式" prop="bidding_method"
show-overflow-tooltip />
<el-table-column label="招标方式" prop="bidding_method" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="信息来源" prop="information_sources"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="负责人" prop="person" show-overflow-tooltip />
<el-table-column label="负责人" prop="person" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">

View File

@ -63,9 +63,8 @@
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="客户名称" prop="custom_name"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="需求" prop="customer_demand_name"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="概算来源" prop="estimate_source">
<el-table-column label="需求" prop="customer_demand_name" show-overflow-tooltip />
<el-table-column label="概算来源" prop="estimate_source">
<template #default="{ row }">
<dict-value :options="dictData.estimate_source" :value="row.estimate_source" />
</template>
@ -74,13 +73,12 @@
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="报价日期" prop="quotation_date"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="发票类型" prop="invoice_type">
<el-table-column label="发票类型" prop="invoice_type">
<template #default="{ row }">
<dict-value :options="dictData.invoice_type" :value="row.invoice_type" />
</template>
</el-table-column>
<el-table-column :render-header="pager.calcWidth" label="技术人员" prop="technician_name"
show-overflow-tooltip />
<el-table-column label="技术人员" prop="technician_name" show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="概算金额" prop="estimate_amount"
show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">

View File

@ -51,53 +51,60 @@
<el-table-column label="序号" type="index">
</el-table-column>
<el-table-column label="材料名称">
<el-table-column width="200px" label="材料名称">
<template #default="{ row }"> <el-input v-model="row.name" disabled />
</template></el-table-column>
<el-table-column label="材料编码">
<el-table-column width="200px" label="材料编码">
<template #default="{ row }"> <el-input v-model="row.code" disabled />
</template></el-table-column>
<el-table-column label="规格型号">
<el-table-column width="200px" label="规格型号">
<template #default="{ row }">
<el-input v-model="row.specs" disabled />
</template>
</el-table-column>
<el-table-column label="品牌">
<el-table-column width="200px" label="品牌">
<template #default="{ row }">
<el-input v-model="row.brand" disabled />
</template>
</el-table-column>
<el-table-column label="参数说明">
<el-table-column width="200px" label="参数说明">
<template #default="{ row }">
<el-input v-model="row.parameter_description" disabled />
</template>
</el-table-column>
<el-table-column label="单位" prop="unit">
<el-table-column width="200px" label="单位" prop="unit">
<template #default="{ row }">
<el-input v-model="row.unit" disabled />
</template>
</el-table-column>
<el-table-column label="数量" prop="num">
<el-table-column width="200px" label="安全库存数量">
<template #default="{ row }">
<el-input v-model="row.num" />
<el-input v-model="row.inventory" disabled />
</template>
</el-table-column>
<el-table-column label="金额" prop="price">
<el-table-column width="200px" label="数量" prop="num">
<template #default="{ row }">
<!-- <el-input v-model="row.num" /> -->
<el-input-number v-model="row.num" :max="row.inventory" />
</template>
</el-table-column>
<el-table-column width="200px" label="金额" prop="price">
<template #default="{ row }">
<el-input v-model="row.price" />
</template>
</el-table-column>
<el-table-column label="备注" prop="remark">
<el-table-column width="200px" label="备注" prop="remark">
<template #default="{ row }">
<el-input v-model="row.remark" />
</template>
</el-table-column>
<el-table-column label="管理" prop="amount_including_tax">
<el-table-column width="200px" label="管理" prop="amount_including_tax">
<template #default="{ row }">
<el-button @click="handleDelete(row)">删除</el-button>
</template>
@ -180,6 +187,7 @@ const customEvent1 = (e) => {
"specs": e.specs,
"num": e.num,
"price": e.price,
inventory: e.inventory,
"remark": e.remark
})
showDialog1.value = false

View File

@ -40,7 +40,8 @@
<el-col :span="8">
<el-form-item label="工种" prop="work_type"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-select v-model="formData.work_type" clearable placeholder="请选择工种" class="flex-1">
<el-select v-model="formData.work_type" clearable placeholder="请选择工种" class="flex-1"
@change="workChange">
<el-option v-for="(item, index) in allJobType" :key="index" :label="item.type_name"
:value="parseInt(item.id)" />
</el-select>
@ -200,6 +201,11 @@ const formData = reactive({
opening_income: "",
})
const workChange = (e) => {
let workerInfo = allJobType.find(item => item.id == e)
formData.unit_price = workerInfo.type_unit_price
formData.daily_living_expenses = workerInfo.per_daily_living
}
const customEvent2 = (e: any) => {
formData.project_id = e.id;

View File

@ -29,6 +29,7 @@
</el-button>
<div class="mt-4">
<el-table border :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="预算单号" prop="subpackage_budget_code" :render-header="pager.calcWidth" />
@ -72,11 +73,9 @@
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
</div> </div>
</el-card>
</div>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
</div>
</template>
<script lang="ts" setup name="projectLists">

View File

@ -55,10 +55,9 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="允许偏差" prop="allowable_deviation">
<el-input-number v-model="formData.allowable_deviation" :min="1" :max="10"
placeholder="范围为1-200" class="flex flex-1" />
<el-form-item label="允许偏差" prop="allowable_deviation"
:rules="[{ validator: checkNum, trigger: 'blur' }]">
<el-input v-model="formData.allowable_deviation" placeholder="范围为1-200" class="flex flex-1" />
</el-form-item>
</el-col>
@ -161,6 +160,11 @@ const formData = reactive({
})
const checkNum = (rules: any, value: any, callback: any) => {
(+value < 1 || +value > 200) ? callback(new Error("偏差范围为1-200"))
: callback();
}
//
const formRules = reactive<any>({

View File

@ -105,45 +105,52 @@
<el-button @click="handleDelete(row)" size="small">-</el-button>
</template>
</el-table-column>
<el-table-column label="产品名称">
<el-table-column width="200px" label="产品名称">
<template #default="{ row }">
<el-input v-model="row.product_name" disabled placeholder="系统自动填写" />
</template>
</el-table-column>
<el-table-column label="产品编码">
<el-table-column width="200px" label="产品编码">
<template #default="{ row }"> <el-input v-model="row.product_code" disabled
placeholder="系统自动填写" />
</template></el-table-column>
<el-table-column label="规格型号">
<el-table-column width="200px" label="规格型号">
<template #default="{ row }"> <el-input v-model="row.product_specs" disabled
placeholder="系统自动填写" />
</template></el-table-column>
<el-table-column label="品牌">
<el-table-column width="200px" label="品牌">
<template #default="{ row }">
<el-input v-model="row.product_brand" disabled placeholder="系统自动填写" />
</template>
</el-table-column>
<el-table-column label="参数说明">
<el-table-column width="200px" label="参数说明">
<template #default="{ row }"> <el-input v-model="row.product_parameter_description" disabled />
</template></el-table-column>
<el-table-column label="单位">
<el-table-column width="200px" label="单位">
<template #default="{ row, index }"> <el-input v-model="row.product_unit" disabled />
</template></el-table-column>
<el-table-column label="数量">
<template #default="{ row, $index }">
<el-input v-model="row.num" @change="calcAmount($index)" />
</template>
</el-table-column>
<el-table-column label="税率(%)" prop="tax_rate">
<el-table-column width="200px" label="安全库存量">
<template #default="{ row, $index }">
<el-input v-model="row.inventory" type="number" disabled />
</template>
</el-table-column>
<el-table-column width="200px" label="数量">
<template #default="{ row, $index }">
<!-- <el-input v-model="row.num" @change="calcAmount($index)" type="number" /> -->
<el-input-number v-model="row.num" @change="calcAmount($index)" :max="row.inventory" />
</template>
</el-table-column>
<el-table-column width="200px" label="税率(%)" prop="tax_rate">
<template #default="scope">
<el-select class="flex-1" v-model="scope.row.tax_rate" clearable placeholder="请选择税率"
@change="getTaxText(scope.$index)">
@ -152,23 +159,23 @@
</el-select>
</template>
</el-table-column>
<el-table-column label="含税单价">
<el-table-column width="200px" label="含税单价">
<template #default="{ row }">
<el-input v-model="row.tax_inclusive_price" disabled />
</template>
</el-table-column>
<el-table-column label="含税金额">
<el-table-column width="200px" label="含税金额">
<template #default="{ row }">
<el-input v-model="row.tax_inclusive_amount" disabled />
</template>
</el-table-column>
<el-table-column label="不含税金额">
<el-table-column width="200px" label="不含税金额">
<template #default="{ row }">
<el-input v-model="row.tax_exclusive_amount" disabled />
</template>
</el-table-column>
<el-table-column label="备注" prop="remark">
<el-table-column width="200px" label="备注" prop="remark">
<template #default="{ row }">
<el-input v-model="row.remark" />
@ -254,6 +261,7 @@ const customEvent = (e: any) => {
const customEvent1 = (e: any) => {
formData.quotation_detail.push({
product_id: e.id,
inventory: e.inventory,
product_name: e.name,
product_code: e.code,
product_unit: e.unit,

View File

@ -41,13 +41,13 @@
<el-table-column :render-header="pager.calcWidth" label="客户名称" prop="custom_name" />
<el-table-column :render-header="pager.calcWidth" label=" 报价单号" prop="code" />
<el-table-column :render-header="pager.calcWidth" label=" 报价日期" prop="quotation_date" />
<el-table-column :render-header="pager.calcWidth" label=" 联系人" prop="custom_master_name" />
<el-table-column label=" 联系人" prop="custom_master_name" />
<el-table-column :render-header="pager.calcWidth" label=" 联系电话" prop="custom_master_phone" />
<el-table-column :render-header="pager.calcWidth" label=" 制单人" prop="create_user" />
<el-table-column :render-header="pager.calcWidth" label=" 发票类型" prop="invoice_type_text" />
<el-table-column label=" 发票类型" prop="invoice_type_text" />
<el-table-column :render-header="pager.calcWidth" label=" 含税金额" prop="amount_including_tax" />
<el-table-column :render-header="pager.calcWidth" label=" 运费" prop="freight" />
<el-table-column :render-header="pager.calcWidth" label=" 其他费用" prop="other_fee" />
<el-table-column label=" 其他费用" prop="other_fee" />
<el-table-column :render-header="pager.calcWidth" label=" 合计金额" prop="total_amount" />
<el-table-column label="操作" width="170" align="center" fixed="right">
<template #default="{ row }">

View File

@ -65,7 +65,7 @@
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="质量隐患" prop="quality_hazard"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="子表" prop="sub_table" show-overflow-tooltip />
<el-table-column prop="sub_table" show-overflow-tooltip />
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">

View File

@ -76,8 +76,7 @@
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="管理措施" prop="manage_measure"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="应急措施" prop="emergency_measure"
show-overflow-tooltip />
<el-table-column label="应急措施" width="200px" prop="emergency_measure" show-overflow-tooltip />
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">

View File

@ -71,8 +71,7 @@
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="检查性质" prop="check_nature"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="检查结果" prop="check_result"
show-overflow-tooltip />
<el-table-column label="检查结果" prop="check_result" show-overflow-tooltip />
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['safety.safety_modify/edit']" type="primary" link @click="handleEdit(row)">

View File

@ -47,21 +47,20 @@
<el-table-column :render-header="pager.calcWidth" label="洽商金额" prop="negotiation_amount"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="不含税金额" prop="excluding_tax_amount"
show-overflow-tooltip width="94" />
<el-table-column :render-header="pager.calcWidth" label="实际合同金额" prop="reality_contract_amount"
show-overflow-tooltip width="120" />
<el-table-column :render-header="pager.calcWidth" label="已付款金额" prop="has_pay_amount"
show-overflow-tooltip width="100" />
<el-table-column :render-header="pager.calcWidth" label="未付款金额" prop="not_pay_amount"
show-overflow-tooltip width="100" />
<el-table-column :render-header="pager.calcWidth" label="已开票金额" prop="invoice_amount"
show-overflow-tooltip width="100" />
<el-table-column :render-header="pager.calcWidth" label="未开票金额" prop="not_invoice_amount"
show-overflow-tooltip width="100" />
<el-table-column :render-header="pager.calcWidth" label="已退款金额" prop="refund_amount"
show-overflow-tooltip width="100" />
<el-table-column :render-header="pager.calcWidth" label="结算差异" prop="settlement_difference"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="实际合同金额" prop="reality_contract_amount"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="已付款金额" prop="has_pay_amount"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="未付款金额" prop="not_pay_amount"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="已开票金额" prop="invoice_amount"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="未开票金额" prop="not_invoice_amount"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="已退款金额" prop="refund_amount"
show-overflow-tooltip />
<el-table-column label="结算差异" prop="settlement_difference" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right" align='center'>
<template #default="{ row }">
<el-button v-perms="['contract.subcontracting_contract/edit']" type="primary" link

View File

@ -53,10 +53,8 @@
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="洽商类别" prop="negotiation_type_text"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="洽商质保金额" prop="warranty_amount"
show-overflow-tooltip />
<el-table-column :render-header="pager.calcWidth" label="洽商质保到期时间" prop="warranty_expire_date"
width="170" />
<el-table-column label="洽商质保金额" prop="warranty_amount" show-overflow-tooltip />
<el-table-column label="洽商质保到期时间" prop="warranty_expire_date" />
<el-table-column label="操作" width="160" fixed="right" align='center'>
<template #default="{ row }">
<el-button v-perms="['contract.subcontracting_contract_negotiation/edit']" type="primary" link

4842
stats.html Normal file

File diff suppressed because one or more lines are too long