add
This commit is contained in:
parent
766cccae34
commit
060cfeb39f
35
src/api/financial_bid_statistics.ts
Normal file
35
src/api/financial_bid_statistics.ts
Normal 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,
|
||||
});
|
||||
}
|
26
src/api/financial_performance_money_recovery.ts
Normal file
26
src/api/financial_performance_money_recovery.ts
Normal 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 })
|
||||
}
|
@ -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: "资金来源" },
|
||||
|
@ -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>({
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 }">
|
||||
|
@ -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"
|
||||
|
@ -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 />
|
||||
|
||||
|
86
src/views/bid_margin_list/index.vue
Normal file
86
src/views/bid_margin_list/index.vue
Normal 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>
|
82
src/views/bid_margin_recovery_search/index.vue
Normal file
82
src/views/bid_margin_recovery_search/index.vue
Normal 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>
|
261
src/views/bid_margin_statistics/index.vue
Normal file
261
src/views/bid_margin_statistics/index.vue
Normal 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>
|
@ -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:
|
||||
|
@ -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)">
|
||||
|
@ -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)">
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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)">
|
||||
|
@ -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">
|
||||
|
@ -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
|
||||
|
@ -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 />
|
||||
|
@ -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">
|
||||
|
@ -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" />
|
||||
|
||||
|
@ -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>
|
||||
|
46
src/views/financial_performance_money_recovery/detail.js
Normal file
46
src/views/financial_performance_money_recovery/detail.js
Normal 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;
|
162
src/views/financial_performance_money_recovery/edit.vue
Normal file
162
src/views/financial_performance_money_recovery/edit.vue
Normal 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>
|
134
src/views/financial_performance_money_recovery/index.vue
Normal file
134
src/views/financial_performance_money_recovery/index.vue
Normal 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>
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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({
|
||||
|
@ -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
|
||||
|
87
src/views/performance_money_list/index.vue
Normal file
87
src/views/performance_money_list/index.vue
Normal 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>
|
79
src/views/performance_money_recovery_search/index.vue
Normal file
79
src/views/performance_money_recovery_search/index.vue
Normal 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>
|
@ -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" />
|
||||
|
@ -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)">
|
||||
|
@ -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">
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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">
|
||||
|
@ -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>({
|
||||
|
@ -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,
|
||||
|
@ -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 }">
|
||||
|
@ -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 }">
|
||||
|
@ -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 }">
|
||||
|
@ -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)">
|
||||
|
@ -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
|
||||
|
@ -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
4842
stats.html
Normal file
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user