页面修复

This commit is contained in:
zmj 2024-01-31 11:48:10 +08:00
parent c0a0d6f328
commit efe3835896
18 changed files with 220 additions and 256 deletions

View File

@ -0,0 +1,15 @@
import request from '@/utils/request'
// 项目预算统计
export function apiProjectStatisticsbudget(params: any) {
return request.get({ url: '/project.project_statistics/budget', params })
}
// 项目商务工作统计
export function apiProjectStatisticsbusiness(params: any) {
return request.get({ url: '/project.project_statistics/business', params })
}
// 项目合同统计
export function apiProjectStatisticsContracts(params: any) {
return request.get({ url: '/project.project_statistics/contracts', params })
}

View File

@ -1,16 +1,5 @@
<template>
<div>
<el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="查询" prop="name">
<el-input class="w-[280px]" v-model="queryParams.name" 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">
@ -37,19 +26,17 @@
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { apiProjectCostBudgetLists } from '@/api/project_cost_budget'
import { defineEmits, defineProps } from "vue"
import { defineEmits } from "vue"
import { timeFormat } from '@/utils/util'
const props = defineProps({
project_id: Number
})
//
const queryParams = reactive({
// custom_name: '',
// project_type: ""
project_id: props.project_id
});
const { dictData } = useDictData('contract_type,contract_pricing_method')
//
const emits = defineEmits(["customEvent"]);

View File

@ -1,17 +1,5 @@
<template>
<div>
<!-- <el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="查询" prop="name">
<el-input class="w-[280px]" v-model="queryParams.name" 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 :data="pager.lists" @cell-click="handleCurrentChange">
@ -29,7 +17,7 @@
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
@ -38,17 +26,19 @@
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { apiProjectEquipmentBudgetLists } from '@/api/project_equipment_budget'
import { defineEmits } from "vue"
const props = defineProps({
project_id: Number
})
//
const queryParams = reactive({
// name: ''
project_id: props.project_id
});
const { dictData } = useDictData('supplier_grade,supplier_group,supplier_category,sex')
//
const emits = defineEmits(["customEvent"]);

View File

@ -16,7 +16,6 @@
<div class="mt-4">
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<el-table-column type="selection" width="55" />
<!-- <el-table-column label="项目id" prop="project_id" show-overflow-tooltip /> -->
<el-table-column label="人工预算单号" prop="labor_budget_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
@ -32,7 +31,6 @@
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { apiProjectLaborBudgetLists, } from '@/api/project_labor_budget'
import { defineEmits } from "vue"
const props = defineProps({

View File

@ -1,17 +1,5 @@
<template>
<div>
<!-- <el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="查询" prop="name">
<el-input class="w-[280px]" v-model="queryParams.name" 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 :data="pager.lists" @cell-click="handleCurrentChange">
@ -23,14 +11,10 @@
<el-table-column label="预算总工作量" prop="total_num" show-overflow-tooltip />
<el-table-column label="预算总金额" prop="total_amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
@ -39,17 +23,18 @@
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { subpackagebudgetLists } from '@/api/project_subpackage_budget'
import { defineEmits } from "vue"
const props = defineProps({
project_id: Number
})
//
const queryParams = reactive({
// name: ''
project_id: props.project_id
});
const { dictData } = useDictData('supplier_grade,supplier_group,supplier_category,sex')
//
const emits = defineEmits(["customEvent"]);

View File

@ -136,7 +136,7 @@ import Popup from '@/components/popup/index.vue'
import reviewprocess from '@/components/reviewprocess/index.vue'
import projectTable from "@/components/project/index.vue"
import { useDictData } from '@/hooks/useDictOptions'
import { apiBidBiddingDecisionAdd, apiBidBiddingDecisionDetail } from '@/api/bid_bidding_decision'
import { apiBidBiddingDecisionAdd, apiBidBiddingDecisionDetail, apiBidBiddingDecisionEdit } from '@/api/bid_bidding_decision'
let props = defineProps({
project: Object
})
@ -200,11 +200,12 @@ const formData = reactive({
annex: [],
approve_id: 0
})
console.log(props.project)
//
const customEvent = (e: any) => {
formData.project_id = e.id;
matsname.value = e.person
matsname.value = e.custom_name
project_name.value = e.name
project_code.value = e.project_code
showDialog.value = false;
@ -219,11 +220,10 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
matsname.value = data.project.person
project_name.value = data.project.name
project_code.value = data.project.project_code
matsname.value = data.custom_name
project_name.value = data.project_name
project_code.value = data.project_code
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
@ -258,10 +258,9 @@ const handleSubmit = async () => {
}
await formRef.value?.validate()
const data = { ...formData, }
// mode.value == 'edit'
// ? await apiBidBiddingDecisionEdit(data)
// :
await apiBidBiddingDecisionAdd(data)
mode.value == 'edit'
? await apiBidBiddingDecisionEdit(data)
: await apiBidBiddingDecisionAdd(data)
popupRef.value?.close()
emit('success')
}
@ -270,7 +269,7 @@ const handleSubmit = async () => {
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getlist()
// getlist()
}
//

View File

@ -3,14 +3,12 @@
<popup ref="popupRef" :title="popupTitle" :async="true" width="700px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="项目名称" prop="cost_budget_id">
<el-input v-model="formData.project_name" clearable placeholder="点击选择" @click="showDialog = true"
readonly />
<el-input v-model="formData.project_name" clearable placeholder="点击选择" @click="showDialog = true" />
</el-form-item>
<el-form-item label="项目费用模板" prop="project_cost_temp_id" label-width="120px">
<el-input v-model="formData.first_level_subject" clearable placeholder="点击选择"
@click="showDialog1 = true" readonly />
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-input v-model="formData.unit" clearable placeholder="请输入单位" />
</el-form-item>
@ -25,7 +23,7 @@
</el-form-item>
</el-form>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent"></projectDialog>
<projectDialog @customEvent="customEvent" :project_id="project?.id || ''"></projectDialog>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择科目" width="70%">
<projectcostTemLists @customEvent="customEvent1"></projectcostTemLists>
@ -38,15 +36,10 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiProjectCostBudgetDetailAdd, apiProjectCostBudgetDetailEdit, apiProjectCostBudgetDetailDetail } from '@/api/project_cost_budget_detail'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import projectDialog from '@/components/projectCostBudget/index.vue'
import projectcostTemLists from '@/components/projectcostTemLists/index.vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
let props = defineProps({
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()

View File

@ -3,7 +3,6 @@
<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="equipment_budget_id">
<!-- <el-input v-model="formData.equipment_budget_id" clearable placeholder="请输入机具预算id" /> -->
<el-input v-model="formData.project_name" readonly clearable placeholder="点击选择项目"
@click="showDialog = true" />
</el-form-item>
@ -33,7 +32,7 @@
</el-form-item>
</el-form>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent"></projectDialog>
<projectDialog @customEvent="customEvent" :project_id="project?.id || ''"></projectDialog>
</el-dialog>
</popup>
@ -44,14 +43,9 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiProjectEquipmentBudgetDetailAdd, apiProjectEquipmentBudgetDetailEdit, apiProjectEquipmentBudgetDetailDetail } from '@/api/project_equipment_budget_detail'
import { timeFormat } from '@/utils/util'
import projectDialog from '@/components/project_equipment_budget_detail/index.vue'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()

View File

@ -11,8 +11,6 @@
<el-select v-model="formData.job_type_id" class="flex-1">
<el-option :label="item.type_name" :value="item.id" v-for="item in jobList"></el-option>
</el-select>
<!-- <el-input v-model="formData.job_type_id" clearable placeholder="请输入工种id" /> -->
</el-form-item>
<el-form-item label="人工说明" prop="desc">
<el-input v-model="formData.desc" clearable placeholder="请输入人工说明" />
@ -32,7 +30,7 @@
</el-form>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent"></projectDialog>
<projectDialog @customEvent="customEvent" :project_id="project?.id || ''"></projectDialog>
</el-dialog>
</popup>
</div>
@ -42,16 +40,11 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiProjectLaborBudgetDetailAdd, apiProjectLaborBudgetDetailEdit, apiProjectLaborBudgetDetailDetail } from '@/api/project_labor_budget_detail'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import projectDialog from "@/components/project_labor_budget/index.vue"
import { projectjobtypeLists } from "@/api/project_job_type.ts";
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()

View File

@ -2,7 +2,7 @@
<el-card>
<template #header>
<div class="card-header">
<span>这是个啥起码子标题</span>
<span>项目预算统计</span>
</div>
</template>
<div id="ProjectPayment" class="chart"></div>
@ -42,57 +42,102 @@
<script setup>
import * as echarts from 'echarts';
import { apistatisticsprojectRefund } from '@/api/statistics'
import { ref, reactive } from "vue"
import { apiProjectStatisticsbudget, apiProjectStatisticsbusiness, apiProjectStatisticsContracts } from '@/api/projectStatistics'
import { ref, reactive, defineProps } from "vue"
const props = defineProps({
project_id: Number
})
const businessList = reactive([
[
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目跟进', value: 0 },
{ name: '客户需求', value: 0 },
{ name: '解决方案', value: 0 },
{ name: '项目核算', value: 0 },
{ name: '竞争对手', value: 0 },
],
[
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '投标决策 ', value: 0 },
{ name: '购买标书', value: 0 },
{ name: '标书审查', value: 0 },
{ name: '投标结果', value: 0 },
],
[
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '投标保证金', value: 0 },
{ name: '已退保证金', value: 0 },
{ name: '未退保证金', value: 0 },
],
])
const getBusinessData = async () => {
let res = await apiProjectStatisticsbusiness({ project_id: props.project_id })
businessList[0][0].value = res.follow_total
businessList[0][1].value = res.demand_total
businessList[0][2].value = res.solution_total
businessList[0][3].value = res.estimate_total
businessList[0][4].value = res.competitor_total
businessList[1][0].value = res.decision_total
businessList[1][1].value = res.document_total
businessList[1][2].value = res.examination_total
businessList[1][3].value = res.successful_total
businessList[2][0].value = res.security_amount
businessList[2][1].value = res.han_refund_security_amount
businessList[2][2].value = res.not_refund_security_amount
}
const contractList = reactive([
[
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '合同金额', value: 0 },
{ name: '合同洽商', value: 0 },
{ name: '结算金额', value: 0 },
{ name: '已开票', value: 0 },
{ name: '已回款', value: 0 },
{ name: '未回款', value: 0 },
{ name: '回款比例', value: 0 },
],
[
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '分包合同金额', value: 0 },
{ name: '分包合同洽商', value: 0 },
{ name: '结算金额', value: 0 },
{ name: '已收票', value: 0 },
{ name: '已付款', value: 0 },
{ name: '未付款', value: 0 },
{ name: '付款比例', value: 0 },
],
[
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '项目', value: 1000 },
{ name: '材料合同金额', value: 0 },
{ name: '已收票', value: 0 },
{ name: '已付款', value: 0 },
{ name: '未付款', value: 0 },
{ name: '付款比例', value: 0 },
],
])
const getContractData = async () => {
let res = await apiProjectStatisticsContracts({ project_id: props.project_id })
contractList[0][0].value = res.project_contract_amount
contractList[0][1].value = res.project_negotiation_amount
contractList[0][2].value = res.project_settlement_amount
contractList[0][3].value = res.project_invoicing_amount
contractList[0][4].value = res.project_returned_amount
contractList[0][5].value = res.project_not_returned_amount
contractList[0][6].value = res.project_returned_ratio
contractList[1][0].value = res.subcontracting_contract_amount
contractList[1][1].value = res.subcontracting_negotiation_amount
contractList[1][2].value = res.subcontracting_settlement_amount
contractList[1][3].value = res.subcontracting_invoicing_amount
contractList[1][4].value = res.subcontracting_payment_amount
contractList[1][5].value = res.subcontracting_not_payment_amount
contractList[1][6].value = res.subcontracting_payment_ratio
contractList[2][0].value = res.procurement_contract_amount
contractList[2][1].value = res.procurement_invoicing_amount
contractList[2][2].value = res.procurement_payment_amount
contractList[2][3].value = res.procurement_not_payment_amount
contractList[2][4].value = res.procurement_payment_ratio
}
const labelOption = {
show: true,
@ -107,13 +152,8 @@ const initChart = (id, opt) => {
myChart.setOption(opt);
}
const getCustom = async () => {
let res = await apistatisticsprojectRefund()
let res = await apiProjectStatisticsbudget({ project_id: props.project_id })
await nextTick()
var option4 = {
tooltip: {
@ -123,8 +163,7 @@ const getCustom = async () => {
}
},
legend: {
data: [res.invoice_series.name, res.refund_plan_series.name, res.refund_series
.name, res.not_refund_series.name,]
data: [res.series1.name, res.series2.name]
},
toolbox: {
show: true,
@ -147,14 +186,14 @@ const getCustom = async () => {
],
series: [
{
name: res.invoice_series.name,
name: res.series1.name,
type: 'bar',
barGap: 0,
label: labelOption,
emphasis: {
focus: 'series'
},
data: res.invoice_series.data,
data: res.series1.data,
itemStyle: {
normal: {
label: {
@ -163,43 +202,13 @@ const getCustom = async () => {
}
},
{
name: res.refund_plan_series.name,
name: res.series2.name,
type: 'bar',
label: labelOption,
emphasis: {
focus: 'series'
},
data: res.refund_plan_series.data,
itemStyle: {
normal: {
label: {
}
}
}
},
{
name: res.refund_series.name,
type: 'bar',
label: labelOption,
emphasis: {
focus: 'series'
},
data: res.refund_series.data,
itemStyle: {
normal: {
label: {
}
}
}
},
{
name: res.not_refund_series.name,
type: 'bar',
label: labelOption,
emphasis: {
focus: 'series'
},
data: res.not_refund_series.data,
data: res.series2.data,
itemStyle: {
normal: {
label: {
@ -207,12 +216,15 @@ const getCustom = async () => {
}
}
},
]
};
initChart("ProjectPayment", option4)
}
getCustom()
getBusinessData()
getContractData()
</script>
<style>
.chart {

View File

@ -1,16 +1,16 @@
<template>
<myTable :baseData="baseData" :project="project" editPath="project_cost_budget"></myTable>
<myTable :baseData="baseData1" :project="project" editPath="project_material_budget"></myTable>
<myTable :baseData="baseData2" :project="project" editPath="project_subpackage_budget"></myTable>
<myTable :baseData="baseData3" :project="project" editPath="project_equipment_budget"></myTable>
<myTable :baseData="baseData4" :project="project" editPath="project_labor_budget"></myTable>
<myTable :baseData="baseData" :project="project" editPath="project_cost_budget_detail"></myTable>
<myTable :baseData="baseData1" :project="project" editPath="project_material_budget_detail"></myTable>
<myTable :baseData="baseData2" :project="project" editPath="project_subpackage_budget_detail"></myTable>
<myTable :baseData="baseData3" :project="project" editPath="project_equipment_budget_detail"></myTable>
<myTable :baseData="baseData4" :project="project" editPath="project_labor_budget_detail"></myTable>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { apiProjectCostBudgetLists, apiProjectCostBudgetDelete, apiProjectCostBudgetDetail } from '@/api/project_cost_budget'
import { apiProjectCostBudgetDetailLists, apiProjectCostBudgetDetailDelete, apiProjectCostBudgetDetailDetail } from '@/api/project_cost_budget_detail'
import { MaterialbudgetDetailLists, MaterialbudgetDetailDelete, MaterialbudgetDetailDetail } from '@/api/project_material_budget_detail.ts'
import { subpackagdetailLists, subpackagdetailDelete, subpackagdetailDetail } from '@/api/project_subpackage_budget_detail.ts'
import { apiProjectEquipmentBudgetDetailLists, apiProjectEquipmentBudgetDetailDelete, apiProjectEquipmentBudgetDetailDetail } from '@/api/project_equipment_budget_detail.ts'
@ -21,17 +21,20 @@ const props = defineProps({
})
const baseData = reactive({
fetchFun: apiProjectCostBudgetLists,
editApi: apiProjectCostBudgetDetail,
delApi: apiProjectCostBudgetDelete,
fetchFun: apiProjectCostBudgetDetailLists,
editApi: apiProjectCostBudgetDetailDetail,
delApi: apiProjectCostBudgetDetailDelete,
tit: "费用预算",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '项目名称', prop: 'project_name' },
{ label: '费用预算单号', prop: 'cost_budget_code' },
{ label: '金额', prop: 'total_amount' },
{ label: '备注', prop: 'remark' },
{ label: '一级科目', prop: 'first_level_subject' },
{ label: '二级科目', prop: 'second_level_subject' },
{ label: '三级科目', prop: 'third_level_subject' },
{ label: '是否差旅科目', prop: 'is_travel_text' },
{ label: '预算金额', prop: 'amount' },
{ label: '编制标准', prop: 'standard' },
]
})
@ -43,17 +46,25 @@ const baseData1 = reactive({
tit: "材料预算",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '预算单号', prop: 'material_budget_code' },
{ label: '项目名称', prop: 'project_name' },
{ label: '项目编码', prop: 'project_code' },
{ label: '类型', prop: 'budget_type' },
{ label: '材料大类', prop: 'material_first_level' },
{ label: '材料中类', prop: 'material_second_level' },
{ label: '材料小类', prop: 'material_three_level' },
{ label: '材料名称', prop: 'material_name' },
{ label: '材料编码', prop: 'material_code' },
{ label: '规格单号', prop: 'material_budget_code' },
{ label: '规格型号', prop: 'material_specs' },
{ label: '品牌', prop: 'material_brand' },
{ label: '参数说明', prop: 'material_parameter_description' },
{ label: '单位', prop: 'material_unit' },
{ label: '申请数量', prop: 'apply_num' },
{ label: '预算数量', prop: 'num' },
{ label: '剩余预算数量', prop: 'residual_num' },
{ label: '单价', prop: 'price' },
{ label: '金额', prop: 'amount' },
{ label: '已申购量', prop: 'apply_num' },
{ label: '剩余数量', prop: 'residual_num' },
{ label: '备注', prop: 'remark' },
]
})
@ -65,17 +76,19 @@ const baseData2 = reactive({
tit: "分包预算",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '预算单号', prop: 'subpackage_budget_code' },
{ label: '项目名称', prop: 'project_name' },
{ label: '项目编码', prop: 'project_code' },
{ label: '工作类型', prop: 'work_type' },
{ label: '工作内容', prop: 'work_content' },
{ label: '项目特征', prop: 'project_features' },
{ label: '单位', prop: 'unit' },
{ label: '首次预算量', prop: 'num' },
{ label: '预算调正量', prop: 'price' },
{ label: '预算工作量', prop: 'amount' },
{ label: '单价', prop: 'price' },
{ label: '金额', prop: 'amount' },
{ label: '已分包量', prop: 'has_subcontract_num' },
{ label: '剩余工作量', prop: 'residue_num' },
{ label: '预算总工作量', prop: 'num' },
{ label: '单价', prop: 'amount' },
{ label: '备注', prop: 'remark' },
{ label: '已分包工作量', prop: 'has_subcontract_num' },
{ label: '剩余预算工作量', prop: 'residue_num' },
]
})
@ -86,13 +99,13 @@ const baseData3 = reactive({
tit: "机具预算",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '项目名称', prop: 'project_name' },
{ label: '机具预算单号', prop: 'equipment_budget_code' },
{ label: '机具类别', prop: 'type' },
{ label: '机具名称', prop: 'name' },
{ label: '规格型号', prop: 'spec' },
{ label: '单位', prop: 'unit' },
{ label: '首次预算量', prop: '' },
{ label: '预算调整量', prop: '' },
{ label: '预算总量', prop: '' },
{ label: '数量', prop: 'num' },
{ label: '单价', prop: 'price' },
{ label: '金额', prop: 'amount' },
{ label: '备注', prop: 'remark' },
@ -106,11 +119,12 @@ const baseData4 = reactive({
tit: "人工预算",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '人工预算单号', prop: 'labor_budget_code' },
{ label: '项目名称', prop: 'project_name' },
{ label: '项目编码', prop: 'project_code' },
{ label: '数量', prop: 'total_num' },
{ label: '金额', prop: 'total_amount' },
{ label: '工种名称', prop: 'job_type_name' },
{ label: '人工说明', prop: 'desc' },
{ label: '单位', prop: 'unit' },
{ label: '数量', prop: 'num' },
{ label: '单价', prop: 'price' },
{ label: '金额', prop: 'amount' },
{ label: '备注', prop: 'remark' },
]
})

View File

@ -22,7 +22,8 @@
editPath="project_attendance_detail"></myTable>
</el-tab-pane>
<el-tab-pane label="工资付款" name="first-6">
<myTable :baseData="baseData4" v-if="active == 'first-6'" :project="project" editPath="project_salary_payment">
<myTable :baseData="baseData4" v-if="active == 'first-6'" :project="project" :isAction="true"
editPath="project_salary_payment">
</myTable>
</el-tab-pane>
</el-tabs>

View File

@ -20,7 +20,7 @@
<el-table :data="pager.lists" style="width: 100%">
<el-table-column :label="item.label" :prop='item.prop' v-for="(item, index) in baseData.columnList" :key="index" />
<el-table-column label="操作" fixed="right" align="center">
<el-table-column label="操作" fixed="right" align="center" v-if="!isAction">
<template #default="{ row }">
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
编辑
@ -46,7 +46,8 @@ import { useDictData } from '@/hooks/useDictOptions'
const props = defineProps({
baseData: Object,
project: Object,
editPath: String
editPath: String,
isAction: Boolean,
})
const EditPopup = defineAsyncComponent(() => import(`../../${props.editPath}/edit.vue`));

View File

@ -1,6 +1,6 @@
<template>
<myTable :baseData="baseData" :project="project" editPath="bid_bidding_decision"></myTable>
<myTable :baseData="baseData1" :project="project" editPath="bid_document_examination"></myTable>
<myTable :baseData="baseData" :project="project" editPath="bid_bidding_decision" :isAction="true"></myTable>
<myTable :baseData="baseData1" :project="project" editPath="bid_document_examination" :isAction="true"></myTable>
<myTable :baseData="baseData2" :project="project" editPath="bid_result"></myTable>
<myTable :baseData="baseData3" :project="project" editPath="bidbbond"></myTable>
<myTable :baseData="baseData4" :project="project" editPath="refundbidDeposit"></myTable>

View File

@ -74,16 +74,16 @@
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-dialog v-model="showDialog" title="选择材料预算" width="70%">
<projectDialog @customEvent="customEvent" :project_id="project?.id || ''"></projectDialog>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择材料" width="70%">
<product @customEvent="customEvent2"></product>
</el-dialog>
</popup>
<el-dialog v-model="showDialog" title="选择材料预算" width="70%">
<projectDialog @customEvent="customEvent"></projectDialog>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择材料" width="70%">
<product @customEvent="customEvent2"></product>
</el-dialog>
</div>
</template>
@ -92,20 +92,20 @@ import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/material_budget/index.vue'
import product from '@/components/product/index.vue'
import { MaterialbudgetDetailLists, MaterialbudgetDetailAdd, MaterialbudgetDetailEdit, MaterialbudgetDetailDetail } from '@/api/project_material_budget_detail'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { MaterialbudgetDetailAdd, MaterialbudgetDetailEdit, MaterialbudgetDetailDetail } from '@/api/project_material_budget_detail'
import { useDictData } from '@/hooks/useDictOptions'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
project: Object
})
const { dictData } = useDictData('budget_type,is_residual')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
import feedback from '@/utils/feedback'
const showDialog = ref(false)
const showDialog1 = ref(false)
const project_name = ref('')

View File

@ -7,14 +7,16 @@
<el-form-item label="是否有剩余" prop="is_residual">
<el-select class="w-[280px]" v-model="queryParams.is_residual" clearable placeholder="请选择是否有剩余">
<el-option v-for="(item, index) in dictData.is_residual" :key="index" :label="item.name" :value="parseInt(item.value)" />
<el-option v-for="(item, index) in dictData.is_residual" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item label="类型" prop="budget_type">
<el-select class="w-[280px]" v-model="queryParams.budget_type" clearable placeholder="请选择类型">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in dictData.budget_type" :key="index" :label="item.name" :value="item.value" />
<el-option v-for="(item, index) in dictData.budget_type" :key="index" :label="item.name"
:value="item.value" />
</el-select>
</el-form-item>
@ -31,7 +33,8 @@
</template>
新增
</el-button>
<el-button v-perms="['project.project/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
<el-button v-perms="['project.project/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
@ -64,7 +67,8 @@
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project/delete']" type="danger" link @click="handleDelete(row.id)">
<el-button v-perms="['project.project/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
@ -88,8 +92,6 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { MaterialbudgetDetailLists, MaterialbudgetDetailDelete, MaterialbudgetDetailDetail } from '@/api/project_material_budget_detail'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'

View File

@ -35,8 +35,6 @@
</el-col>
<el-col :span="8">
<el-form-item label="工作量" prop="num">
<!-- <el-input-number v-model="formData.num" :max="10000" placeholder="请输入工作量"
oninput="if(formData.num.length>4)formData.num=formData.num.slice(0,4)" /> -->
<el-input v-model="formData.num" clearable placeholder="请输入工作量" @change="numberChange" />
</el-form-item>
</el-col> <el-col :span="8">
@ -49,13 +47,13 @@
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-dialog v-model="showDialog" title="选择分包预算" width="70%">
<projectDialog @customEvent="customEvent" :project_id="project?.id || ''"></projectDialog>
</el-dialog>
</popup>
<el-dialog v-model="showDialog" title="选择分包预算" width="70%">
<projectDialog @customEvent="customEvent"></projectDialog>
</el-dialog>
</div>
</template>
@ -64,36 +62,18 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/subpackage_budget/index.vue'
import { MaterialbudgetDetailLists } from '@/api/project_material_budget_detail'
import prodctTable from '@/components/product/index.vue'
import { subpackagdetailAdd, subpackagdetailEdit, subpackagdetailDetail } from '@/api/project_subpackage_budget_detail'
import customDialog from '@/components/project_personnel/index.vue'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
import feedback from '@/utils/feedback'
const showDialog = ref(false)
const showDialog1 = ref(false)
const project_name = ref('')
const project_code = ref('')
const person_name = ref('')
const idcard = ref('')
const tableData = ref([{}])
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const formDataannex = reactive([])
const numberChange = () => {
if (formData.num > 10000) formData.num = 10000

View File

@ -23,7 +23,8 @@
</template>
新增
</el-button>
<el-button v-perms="['project.project/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
<el-button v-perms="['project.project/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
@ -38,8 +39,6 @@
<el-table-column label="工作内容" prop="work_content" show-overflow-tooltip />
<el-table-column label="项目特征" prop="project_features" show-overflow-tooltip />
<el-table-column label="单位" prop="unit" show-overflow-tooltip />
<!-- <el-table-column label="首次预算工作量" prop="remark" show-overflow-tooltip />
<el-table-column label="预算调整工作量" prop="remark" show-overflow-tooltip /> -->
<el-table-column label="预算总工作量" prop="num" show-overflow-tooltip />
<el-table-column label="单价" prop="price" show-overflow-tooltip />
<el-table-column label="金额" prop="amount" show-overflow-tooltip />
@ -52,7 +51,8 @@
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project/delete']" type="danger" link @click="handleDelete(row.id)">
<el-button v-perms="['project.project/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">