页面修复
This commit is contained in:
parent
c0a0d6f328
commit
efe3835896
15
src/api/projectStatistics.ts
Normal file
15
src/api/projectStatistics.ts
Normal 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 })
|
||||
}
|
@ -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"]);
|
||||
|
@ -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"]);
|
||||
|
@ -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({
|
||||
|
@ -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"]);
|
||||
|
||||
|
@ -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()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -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>()
|
||||
|
@ -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>()
|
||||
|
@ -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>()
|
||||
|
@ -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 {
|
||||
|
@ -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' },
|
||||
]
|
||||
})
|
||||
|
@ -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>
|
||||
|
@ -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`));
|
||||
|
@ -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>
|
||||
|
@ -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('')
|
||||
|
@ -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'
|
||||
|
@ -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
|
||||
|
@ -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)">
|
||||
|
Loading…
x
Reference in New Issue
Block a user