页面修复
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>
|
<template>
|
||||||
<div>
|
<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">
|
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
@ -37,19 +26,17 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { usePaging } from "@/hooks/usePaging"
|
import { usePaging } from "@/hooks/usePaging"
|
||||||
import { useDictData } from "@/hooks/useDictOptions"
|
|
||||||
import { apiProjectCostBudgetLists } from '@/api/project_cost_budget'
|
import { apiProjectCostBudgetLists } from '@/api/project_cost_budget'
|
||||||
|
import { defineEmits, defineProps } from "vue"
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
import { defineEmits } from "vue"
|
project_id: Number
|
||||||
import { timeFormat } from '@/utils/util'
|
})
|
||||||
|
|
||||||
// 查询条件
|
// 查询条件
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
// custom_name: '',
|
project_id: props.project_id
|
||||||
// project_type: ""
|
|
||||||
});
|
});
|
||||||
const { dictData } = useDictData('contract_type,contract_pricing_method')
|
|
||||||
|
|
||||||
// 选中数据
|
// 选中数据
|
||||||
const emits = defineEmits(["customEvent"]);
|
const emits = defineEmits(["customEvent"]);
|
||||||
|
@ -1,17 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<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">
|
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
|
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
|
||||||
@ -29,7 +17,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex mt-4 justify-end">
|
<div class="flex justify-end mt-4">
|
||||||
<pagination v-model="pager" @change="getLists" />
|
<pagination v-model="pager" @change="getLists" />
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -38,17 +26,19 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { usePaging } from "@/hooks/usePaging"
|
import { usePaging } from "@/hooks/usePaging"
|
||||||
import { useDictData } from "@/hooks/useDictOptions"
|
|
||||||
import { apiProjectEquipmentBudgetLists } from '@/api/project_equipment_budget'
|
import { apiProjectEquipmentBudgetLists } from '@/api/project_equipment_budget'
|
||||||
|
|
||||||
import { defineEmits } from "vue"
|
import { defineEmits } from "vue"
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
project_id: Number
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
// 查询条件
|
// 查询条件
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
// name: ''
|
project_id: props.project_id
|
||||||
});
|
});
|
||||||
|
|
||||||
const { dictData } = useDictData('supplier_grade,supplier_group,supplier_category,sex')
|
|
||||||
|
|
||||||
// 选中数据
|
// 选中数据
|
||||||
const emits = defineEmits(["customEvent"]);
|
const emits = defineEmits(["customEvent"]);
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
|
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
|
||||||
<el-table-column type="selection" width="55" />
|
<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="labor_budget_code" show-overflow-tooltip />
|
||||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||||
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
|
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
|
||||||
@ -32,7 +31,6 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { usePaging } from "@/hooks/usePaging"
|
import { usePaging } from "@/hooks/usePaging"
|
||||||
import { useDictData } from "@/hooks/useDictOptions"
|
|
||||||
import { apiProjectLaborBudgetLists, } from '@/api/project_labor_budget'
|
import { apiProjectLaborBudgetLists, } from '@/api/project_labor_budget'
|
||||||
import { defineEmits } from "vue"
|
import { defineEmits } from "vue"
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
@ -1,17 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<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">
|
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||||
<div class="mt-4">
|
<div class="mt-4">
|
||||||
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
|
<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_num" show-overflow-tooltip />
|
||||||
<el-table-column label="预算总金额" prop="total_amount" show-overflow-tooltip />
|
<el-table-column label="预算总金额" prop="total_amount" show-overflow-tooltip />
|
||||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="flex mt-4 justify-end">
|
<div class="flex justify-end mt-4">
|
||||||
<pagination v-model="pager" @change="getLists" />
|
<pagination v-model="pager" @change="getLists" />
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -39,17 +23,18 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { usePaging } from "@/hooks/usePaging"
|
import { usePaging } from "@/hooks/usePaging"
|
||||||
import { useDictData } from "@/hooks/useDictOptions"
|
|
||||||
import { subpackagebudgetLists } from '@/api/project_subpackage_budget'
|
import { subpackagebudgetLists } from '@/api/project_subpackage_budget'
|
||||||
import { defineEmits } from "vue"
|
import { defineEmits } from "vue"
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
project_id: Number
|
||||||
|
})
|
||||||
// 查询条件
|
// 查询条件
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
// name: ''
|
// name: ''
|
||||||
|
project_id: props.project_id
|
||||||
});
|
});
|
||||||
|
|
||||||
const { dictData } = useDictData('supplier_grade,supplier_group,supplier_category,sex')
|
|
||||||
|
|
||||||
// 选中数据
|
// 选中数据
|
||||||
const emits = defineEmits(["customEvent"]);
|
const emits = defineEmits(["customEvent"]);
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ import Popup from '@/components/popup/index.vue'
|
|||||||
import reviewprocess from '@/components/reviewprocess/index.vue'
|
import reviewprocess from '@/components/reviewprocess/index.vue'
|
||||||
import projectTable from "@/components/project/index.vue"
|
import projectTable from "@/components/project/index.vue"
|
||||||
import { useDictData } from '@/hooks/useDictOptions'
|
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({
|
let props = defineProps({
|
||||||
project: Object
|
project: Object
|
||||||
})
|
})
|
||||||
@ -200,11 +200,12 @@ const formData = reactive({
|
|||||||
annex: [],
|
annex: [],
|
||||||
approve_id: 0
|
approve_id: 0
|
||||||
})
|
})
|
||||||
|
console.log(props.project)
|
||||||
|
|
||||||
//获取值
|
//获取值
|
||||||
const customEvent = (e: any) => {
|
const customEvent = (e: any) => {
|
||||||
formData.project_id = e.id;
|
formData.project_id = e.id;
|
||||||
matsname.value = e.person
|
matsname.value = e.custom_name
|
||||||
project_name.value = e.name
|
project_name.value = e.name
|
||||||
project_code.value = e.project_code
|
project_code.value = e.project_code
|
||||||
showDialog.value = false;
|
showDialog.value = false;
|
||||||
@ -219,11 +220,10 @@ const formRules = reactive<any>({
|
|||||||
|
|
||||||
// 获取详情
|
// 获取详情
|
||||||
const setFormData = async (data: Record<any, any>) => {
|
const setFormData = async (data: Record<any, any>) => {
|
||||||
matsname.value = data.project.person
|
matsname.value = data.custom_name
|
||||||
project_name.value = data.project.name
|
project_name.value = data.project_name
|
||||||
project_code.value = data.project.project_code
|
project_code.value = data.project_code
|
||||||
if (data.annex && data.annex.length > 0) {
|
if (data.annex && data.annex.length > 0) {
|
||||||
|
|
||||||
const arry1 = data.annex.map((item: any, index: any) => {
|
const arry1 = data.annex.map((item: any, index: any) => {
|
||||||
return {
|
return {
|
||||||
name: `文件${index + 1}`,
|
name: `文件${index + 1}`,
|
||||||
@ -258,10 +258,9 @@ const handleSubmit = async () => {
|
|||||||
}
|
}
|
||||||
await formRef.value?.validate()
|
await formRef.value?.validate()
|
||||||
const data = { ...formData, }
|
const data = { ...formData, }
|
||||||
// mode.value == 'edit'
|
mode.value == 'edit'
|
||||||
// ? await apiBidBiddingDecisionEdit(data)
|
? await apiBidBiddingDecisionEdit(data)
|
||||||
// :
|
: await apiBidBiddingDecisionAdd(data)
|
||||||
await apiBidBiddingDecisionAdd(data)
|
|
||||||
popupRef.value?.close()
|
popupRef.value?.close()
|
||||||
emit('success')
|
emit('success')
|
||||||
}
|
}
|
||||||
@ -270,7 +269,7 @@ const handleSubmit = async () => {
|
|||||||
const open = (type = 'add') => {
|
const open = (type = 'add') => {
|
||||||
mode.value = type
|
mode.value = type
|
||||||
popupRef.value?.open()
|
popupRef.value?.open()
|
||||||
getlist()
|
// getlist()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 关闭回调
|
// 关闭回调
|
||||||
|
@ -3,14 +3,12 @@
|
|||||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="700px" @confirm="handleSubmit" @close="handleClose">
|
<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 ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
||||||
<el-form-item label="项目名称" prop="cost_budget_id">
|
<el-form-item label="项目名称" prop="cost_budget_id">
|
||||||
<el-input v-model="formData.project_name" clearable placeholder="点击选择" @click="showDialog = true"
|
<el-input v-model="formData.project_name" clearable placeholder="点击选择" @click="showDialog = true" />
|
||||||
readonly />
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目费用模板" prop="project_cost_temp_id" label-width="120px">
|
<el-form-item label="项目费用模板" prop="project_cost_temp_id" label-width="120px">
|
||||||
<el-input v-model="formData.first_level_subject" clearable placeholder="点击选择"
|
<el-input v-model="formData.first_level_subject" clearable placeholder="点击选择"
|
||||||
@click="showDialog1 = true" readonly />
|
@click="showDialog1 = true" readonly />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="单位" prop="unit">
|
<el-form-item label="单位" prop="unit">
|
||||||
<el-input v-model="formData.unit" clearable placeholder="请输入单位" />
|
<el-input v-model="formData.unit" clearable placeholder="请输入单位" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -25,7 +23,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
<projectDialog @customEvent="customEvent" :project_id="project?.id || ''"></projectDialog>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog v-model="showDialog1" title="选择科目" width="70%">
|
<el-dialog v-model="showDialog1" title="选择科目" width="70%">
|
||||||
<projectcostTemLists @customEvent="customEvent1"></projectcostTemLists>
|
<projectcostTemLists @customEvent="customEvent1"></projectcostTemLists>
|
||||||
@ -38,15 +36,10 @@
|
|||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import Popup from '@/components/popup/index.vue'
|
import Popup from '@/components/popup/index.vue'
|
||||||
import { apiProjectCostBudgetDetailAdd, apiProjectCostBudgetDetailEdit, apiProjectCostBudgetDetailDetail } from '@/api/project_cost_budget_detail'
|
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 projectDialog from '@/components/projectCostBudget/index.vue'
|
||||||
import projectcostTemLists from '@/components/projectcostTemLists/index.vue'
|
import projectcostTemLists from '@/components/projectcostTemLists/index.vue'
|
||||||
defineProps({
|
let props = defineProps({
|
||||||
dictData: {
|
project: Object
|
||||||
type: Object as PropType<Record<string, any[]>>,
|
|
||||||
default: () => ({})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
const emit = defineEmits(['success', 'close'])
|
const emit = defineEmits(['success', 'close'])
|
||||||
const formRef = shallowRef<FormInstance>()
|
const formRef = shallowRef<FormInstance>()
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
<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 ref="formRef" :model="formData" label-width="90px" :rules="formRules">
|
||||||
<el-form-item label="项目名称" prop="equipment_budget_id">
|
<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="点击选择项目"
|
<el-input v-model="formData.project_name" readonly clearable placeholder="点击选择项目"
|
||||||
@click="showDialog = true" />
|
@click="showDialog = true" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -33,7 +32,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
<projectDialog @customEvent="customEvent" :project_id="project?.id || ''"></projectDialog>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
</popup>
|
</popup>
|
||||||
@ -44,14 +43,9 @@
|
|||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import Popup from '@/components/popup/index.vue'
|
import Popup from '@/components/popup/index.vue'
|
||||||
import { apiProjectEquipmentBudgetDetailAdd, apiProjectEquipmentBudgetDetailEdit, apiProjectEquipmentBudgetDetailDetail } from '@/api/project_equipment_budget_detail'
|
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 projectDialog from '@/components/project_equipment_budget_detail/index.vue'
|
||||||
import type { PropType } from 'vue'
|
|
||||||
defineProps({
|
defineProps({
|
||||||
dictData: {
|
project: Object
|
||||||
type: Object as PropType<Record<string, any[]>>,
|
|
||||||
default: () => ({})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
const emit = defineEmits(['success', 'close'])
|
const emit = defineEmits(['success', 'close'])
|
||||||
const formRef = shallowRef<FormInstance>()
|
const formRef = shallowRef<FormInstance>()
|
||||||
|
@ -11,8 +11,6 @@
|
|||||||
<el-select v-model="formData.job_type_id" class="flex-1">
|
<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-option :label="item.type_name" :value="item.id" v-for="item in jobList"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
<!-- <el-input v-model="formData.job_type_id" clearable placeholder="请输入工种id" /> -->
|
|
||||||
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="人工说明" prop="desc">
|
<el-form-item label="人工说明" prop="desc">
|
||||||
<el-input v-model="formData.desc" clearable placeholder="请输入人工说明" />
|
<el-input v-model="formData.desc" clearable placeholder="请输入人工说明" />
|
||||||
@ -32,7 +30,7 @@
|
|||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
<projectDialog @customEvent="customEvent" :project_id="project?.id || ''"></projectDialog>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</popup>
|
</popup>
|
||||||
</div>
|
</div>
|
||||||
@ -42,16 +40,11 @@
|
|||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import Popup from '@/components/popup/index.vue'
|
import Popup from '@/components/popup/index.vue'
|
||||||
import { apiProjectLaborBudgetDetailAdd, apiProjectLaborBudgetDetailEdit, apiProjectLaborBudgetDetailDetail } from '@/api/project_labor_budget_detail'
|
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 projectDialog from "@/components/project_labor_budget/index.vue"
|
||||||
import { projectjobtypeLists } from "@/api/project_job_type.ts";
|
import { projectjobtypeLists } from "@/api/project_job_type.ts";
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
dictData: {
|
project: Object
|
||||||
type: Object as PropType<Record<string, any[]>>,
|
|
||||||
default: () => ({})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
const emit = defineEmits(['success', 'close'])
|
const emit = defineEmits(['success', 'close'])
|
||||||
const formRef = shallowRef<FormInstance>()
|
const formRef = shallowRef<FormInstance>()
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<el-card>
|
<el-card>
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>这是个啥起码子标题</span>
|
<span>项目预算统计</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div id="ProjectPayment" class="chart"></div>
|
<div id="ProjectPayment" class="chart"></div>
|
||||||
@ -42,57 +42,102 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
|
||||||
import * as echarts from 'echarts';
|
import * as echarts from 'echarts';
|
||||||
import { apistatisticsprojectRefund } from '@/api/statistics'
|
import { apiProjectStatisticsbudget, apiProjectStatisticsbusiness, apiProjectStatisticsContracts } from '@/api/projectStatistics'
|
||||||
import { ref, reactive } from "vue"
|
import { ref, reactive, defineProps } from "vue"
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
project_id: Number
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const businessList = reactive([
|
const businessList = reactive([
|
||||||
[
|
[
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '项目跟进', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '客户需求', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '解决方案', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '项目核算', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '竞争对手', value: 0 },
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '投标决策 ', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '购买标书', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '标书审查', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '投标结果', value: 0 },
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '投标保证金', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '已退保证金', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ 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([
|
const contractList = reactive([
|
||||||
[
|
[
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '合同金额', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '合同洽商', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '结算金额', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '已开票', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '已回款', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '未回款', value: 0 },
|
||||||
|
{ name: '回款比例', value: 0 },
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '分包合同金额', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '分包合同洽商', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '结算金额', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '已收票', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '已付款', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '未付款', value: 0 },
|
||||||
|
{ name: '付款比例', value: 0 },
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '材料合同金额', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '已收票', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ name: '已付款', value: 0 },
|
||||||
{ name: '项目', value: 1000 },
|
{ 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 = {
|
const labelOption = {
|
||||||
show: true,
|
show: true,
|
||||||
@ -107,13 +152,8 @@ const initChart = (id, opt) => {
|
|||||||
myChart.setOption(opt);
|
myChart.setOption(opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const getCustom = async () => {
|
const getCustom = async () => {
|
||||||
let res = await apistatisticsprojectRefund()
|
let res = await apiProjectStatisticsbudget({ project_id: props.project_id })
|
||||||
await nextTick()
|
await nextTick()
|
||||||
var option4 = {
|
var option4 = {
|
||||||
tooltip: {
|
tooltip: {
|
||||||
@ -123,8 +163,7 @@ const getCustom = async () => {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
legend: {
|
legend: {
|
||||||
data: [res.invoice_series.name, res.refund_plan_series.name, res.refund_series
|
data: [res.series1.name, res.series2.name]
|
||||||
.name, res.not_refund_series.name,]
|
|
||||||
},
|
},
|
||||||
toolbox: {
|
toolbox: {
|
||||||
show: true,
|
show: true,
|
||||||
@ -147,14 +186,14 @@ const getCustom = async () => {
|
|||||||
],
|
],
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
name: res.invoice_series.name,
|
name: res.series1.name,
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
barGap: 0,
|
barGap: 0,
|
||||||
label: labelOption,
|
label: labelOption,
|
||||||
emphasis: {
|
emphasis: {
|
||||||
focus: 'series'
|
focus: 'series'
|
||||||
},
|
},
|
||||||
data: res.invoice_series.data,
|
data: res.series1.data,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
label: {
|
label: {
|
||||||
@ -163,43 +202,13 @@ const getCustom = async () => {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: res.refund_plan_series.name,
|
name: res.series2.name,
|
||||||
type: 'bar',
|
type: 'bar',
|
||||||
label: labelOption,
|
label: labelOption,
|
||||||
emphasis: {
|
emphasis: {
|
||||||
focus: 'series'
|
focus: 'series'
|
||||||
},
|
},
|
||||||
data: res.refund_plan_series.data,
|
data: res.series2.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,
|
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
normal: {
|
normal: {
|
||||||
label: {
|
label: {
|
||||||
@ -207,12 +216,15 @@ const getCustom = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
initChart("ProjectPayment", option4)
|
initChart("ProjectPayment", option4)
|
||||||
}
|
}
|
||||||
getCustom()
|
getCustom()
|
||||||
|
getBusinessData()
|
||||||
|
getContractData()
|
||||||
</script>
|
</script>
|
||||||
<style>
|
<style>
|
||||||
.chart {
|
.chart {
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
<template>
|
<template>
|
||||||
<myTable :baseData="baseData" :project="project" editPath="project_cost_budget"></myTable>
|
<myTable :baseData="baseData" :project="project" editPath="project_cost_budget_detail"></myTable>
|
||||||
<myTable :baseData="baseData1" :project="project" editPath="project_material_budget"></myTable>
|
<myTable :baseData="baseData1" :project="project" editPath="project_material_budget_detail"></myTable>
|
||||||
<myTable :baseData="baseData2" :project="project" editPath="project_subpackage_budget"></myTable>
|
<myTable :baseData="baseData2" :project="project" editPath="project_subpackage_budget_detail"></myTable>
|
||||||
<myTable :baseData="baseData3" :project="project" editPath="project_equipment_budget"></myTable>
|
<myTable :baseData="baseData3" :project="project" editPath="project_equipment_budget_detail"></myTable>
|
||||||
<myTable :baseData="baseData4" :project="project" editPath="project_labor_budget"></myTable>
|
<myTable :baseData="baseData4" :project="project" editPath="project_labor_budget_detail"></myTable>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
|
||||||
import { ref, reactive, defineProps } from "vue"
|
import { ref, reactive, defineProps } from "vue"
|
||||||
import myTable from "./myTable.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 { MaterialbudgetDetailLists, MaterialbudgetDetailDelete, MaterialbudgetDetailDetail } from '@/api/project_material_budget_detail.ts'
|
||||||
import { subpackagdetailLists, subpackagdetailDelete, subpackagdetailDetail } from '@/api/project_subpackage_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'
|
import { apiProjectEquipmentBudgetDetailLists, apiProjectEquipmentBudgetDetailDelete, apiProjectEquipmentBudgetDetailDetail } from '@/api/project_equipment_budget_detail.ts'
|
||||||
@ -21,17 +21,20 @@ const props = defineProps({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const baseData = reactive({
|
const baseData = reactive({
|
||||||
fetchFun: apiProjectCostBudgetLists,
|
fetchFun: apiProjectCostBudgetDetailLists,
|
||||||
editApi: apiProjectCostBudgetDetail,
|
editApi: apiProjectCostBudgetDetailDetail,
|
||||||
delApi: apiProjectCostBudgetDelete,
|
delApi: apiProjectCostBudgetDetailDelete,
|
||||||
tit: "费用预算",
|
tit: "费用预算",
|
||||||
queryParams: { project_id: props.project.id },
|
queryParams: { project_id: props.project.id },
|
||||||
columnList: [
|
columnList: [
|
||||||
{ label: '项目名称', prop: 'project_name' },
|
{ label: '项目名称', prop: 'project_name' },
|
||||||
{ label: '费用预算单号', prop: 'cost_budget_code' },
|
{ label: '费用预算单号', prop: 'cost_budget_code' },
|
||||||
{ label: '金额', prop: 'total_amount' },
|
{ label: '一级科目', prop: 'first_level_subject' },
|
||||||
{ label: '备注', prop: 'remark' },
|
{ 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: "材料预算",
|
tit: "材料预算",
|
||||||
queryParams: { project_id: props.project.id },
|
queryParams: { project_id: props.project.id },
|
||||||
columnList: [
|
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_name' },
|
||||||
{ label: '材料编码', prop: 'material_code' },
|
{ label: '材料编码', prop: 'material_code' },
|
||||||
{ label: '规格单号', prop: 'material_budget_code' },
|
{ label: '规格型号', prop: 'material_specs' },
|
||||||
{ label: '品牌', prop: 'material_brand' },
|
{ label: '品牌', prop: 'material_brand' },
|
||||||
{ label: '参数说明', prop: 'material_parameter_description' },
|
{ label: '参数说明', prop: 'material_parameter_description' },
|
||||||
{ label: '单位', prop: 'material_unit' },
|
{ label: '单位', prop: 'material_unit' },
|
||||||
|
{ label: '申请数量', prop: 'apply_num' },
|
||||||
{ label: '预算数量', prop: 'num' },
|
{ label: '预算数量', prop: 'num' },
|
||||||
|
{ label: '剩余预算数量', prop: 'residual_num' },
|
||||||
{ label: '单价', prop: 'price' },
|
{ label: '单价', prop: 'price' },
|
||||||
{ label: '金额', prop: 'amount' },
|
{ label: '金额', prop: 'amount' },
|
||||||
{ label: '已申购量', prop: 'apply_num' },
|
{ label: '备注', prop: 'remark' },
|
||||||
{ label: '剩余数量', prop: 'residual_num' },
|
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -65,17 +76,19 @@ const baseData2 = reactive({
|
|||||||
tit: "分包预算",
|
tit: "分包预算",
|
||||||
queryParams: { project_id: props.project.id },
|
queryParams: { project_id: props.project.id },
|
||||||
columnList: [
|
columnList: [
|
||||||
|
{ label: '预算单号', prop: 'subpackage_budget_code' },
|
||||||
|
{ label: '项目名称', prop: 'project_name' },
|
||||||
|
{ label: '项目编码', prop: 'project_code' },
|
||||||
{ label: '工作类型', prop: 'work_type' },
|
{ label: '工作类型', prop: 'work_type' },
|
||||||
{ label: '工作内容', prop: 'work_content' },
|
{ label: '工作内容', prop: 'work_content' },
|
||||||
{ label: '项目特征', prop: 'project_features' },
|
{ label: '项目特征', prop: 'project_features' },
|
||||||
{ label: '单位', prop: 'unit' },
|
{ label: '单位', prop: 'unit' },
|
||||||
{ label: '首次预算量', prop: 'num' },
|
{ label: '预算总工作量', prop: 'num' },
|
||||||
{ label: '预算调正量', prop: 'price' },
|
{ label: '单价', prop: 'amount' },
|
||||||
{ label: '预算工作量', prop: 'amount' },
|
{ label: '备注', prop: 'remark' },
|
||||||
{ label: '单价', prop: 'price' },
|
{ label: '已分包工作量', prop: 'has_subcontract_num' },
|
||||||
{ label: '金额', prop: 'amount' },
|
{ label: '剩余预算工作量', prop: 'residue_num' },
|
||||||
{ label: '已分包量', prop: 'has_subcontract_num' },
|
|
||||||
{ label: '剩余工作量', prop: 'residue_num' },
|
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -86,13 +99,13 @@ const baseData3 = reactive({
|
|||||||
tit: "机具预算",
|
tit: "机具预算",
|
||||||
queryParams: { project_id: props.project.id },
|
queryParams: { project_id: props.project.id },
|
||||||
columnList: [
|
columnList: [
|
||||||
|
{ label: '项目名称', prop: 'project_name' },
|
||||||
|
{ label: '机具预算单号', prop: 'equipment_budget_code' },
|
||||||
{ label: '机具类别', prop: 'type' },
|
{ label: '机具类别', prop: 'type' },
|
||||||
{ label: '机具名称', prop: 'name' },
|
{ label: '机具名称', prop: 'name' },
|
||||||
{ label: '规格型号', prop: 'spec' },
|
{ label: '规格型号', prop: 'spec' },
|
||||||
{ label: '单位', prop: 'unit' },
|
{ label: '单位', prop: 'unit' },
|
||||||
{ label: '首次预算量', prop: '' },
|
{ label: '数量', prop: 'num' },
|
||||||
{ label: '预算调整量', prop: '' },
|
|
||||||
{ label: '预算总量', prop: '' },
|
|
||||||
{ label: '单价', prop: 'price' },
|
{ label: '单价', prop: 'price' },
|
||||||
{ label: '金额', prop: 'amount' },
|
{ label: '金额', prop: 'amount' },
|
||||||
{ label: '备注', prop: 'remark' },
|
{ label: '备注', prop: 'remark' },
|
||||||
@ -106,11 +119,12 @@ const baseData4 = reactive({
|
|||||||
tit: "人工预算",
|
tit: "人工预算",
|
||||||
queryParams: { project_id: props.project.id },
|
queryParams: { project_id: props.project.id },
|
||||||
columnList: [
|
columnList: [
|
||||||
{ label: '人工预算单号', prop: 'labor_budget_code' },
|
{ label: '工种名称', prop: 'job_type_name' },
|
||||||
{ label: '项目名称', prop: 'project_name' },
|
{ label: '人工说明', prop: 'desc' },
|
||||||
{ label: '项目编码', prop: 'project_code' },
|
{ label: '单位', prop: 'unit' },
|
||||||
{ label: '数量', prop: 'total_num' },
|
{ label: '数量', prop: 'num' },
|
||||||
{ label: '金额', prop: 'total_amount' },
|
{ label: '单价', prop: 'price' },
|
||||||
|
{ label: '金额', prop: 'amount' },
|
||||||
{ label: '备注', prop: 'remark' },
|
{ label: '备注', prop: 'remark' },
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
@ -22,7 +22,8 @@
|
|||||||
editPath="project_attendance_detail"></myTable>
|
editPath="project_attendance_detail"></myTable>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="工资付款" name="first-6">
|
<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>
|
</myTable>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
<el-table :data="pager.lists" style="width: 100%">
|
<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="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 }">
|
<template #default="{ row }">
|
||||||
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(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({
|
const props = defineProps({
|
||||||
baseData: Object,
|
baseData: Object,
|
||||||
project: Object,
|
project: Object,
|
||||||
editPath: String
|
editPath: String,
|
||||||
|
isAction: Boolean,
|
||||||
})
|
})
|
||||||
|
|
||||||
const EditPopup = defineAsyncComponent(() => import(`../../${props.editPath}/edit.vue`));
|
const EditPopup = defineAsyncComponent(() => import(`../../${props.editPath}/edit.vue`));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<myTable :baseData="baseData" :project="project" editPath="bid_bidding_decision"></myTable>
|
<myTable :baseData="baseData" :project="project" editPath="bid_bidding_decision" :isAction="true"></myTable>
|
||||||
<myTable :baseData="baseData1" :project="project" editPath="bid_document_examination"></myTable>
|
<myTable :baseData="baseData1" :project="project" editPath="bid_document_examination" :isAction="true"></myTable>
|
||||||
<myTable :baseData="baseData2" :project="project" editPath="bid_result"></myTable>
|
<myTable :baseData="baseData2" :project="project" editPath="bid_result"></myTable>
|
||||||
<myTable :baseData="baseData3" :project="project" editPath="bidbbond"></myTable>
|
<myTable :baseData="baseData3" :project="project" editPath="bidbbond"></myTable>
|
||||||
<myTable :baseData="baseData4" :project="project" editPath="refundbidDeposit"></myTable>
|
<myTable :baseData="baseData4" :project="project" editPath="refundbidDeposit"></myTable>
|
||||||
|
@ -74,16 +74,16 @@
|
|||||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</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>
|
</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>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -92,20 +92,20 @@ import type { FormInstance } from 'element-plus'
|
|||||||
import Popup from '@/components/popup/index.vue'
|
import Popup from '@/components/popup/index.vue'
|
||||||
import projectDialog from '@/components/material_budget/index.vue'
|
import projectDialog from '@/components/material_budget/index.vue'
|
||||||
import product from '@/components/product/index.vue'
|
import product from '@/components/product/index.vue'
|
||||||
import { MaterialbudgetDetailLists, MaterialbudgetDetailAdd, MaterialbudgetDetailEdit, MaterialbudgetDetailDetail } from '@/api/project_material_budget_detail'
|
import { MaterialbudgetDetailAdd, MaterialbudgetDetailEdit, MaterialbudgetDetailDetail } from '@/api/project_material_budget_detail'
|
||||||
import { timeFormat } from '@/utils/util'
|
import { useDictData } from '@/hooks/useDictOptions'
|
||||||
import type { PropType } from 'vue'
|
|
||||||
|
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
dictData: {
|
project: Object
|
||||||
type: Object as PropType<Record<string, any[]>>,
|
|
||||||
default: () => ({})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
const { dictData } = useDictData('budget_type,is_residual')
|
||||||
|
|
||||||
const emit = defineEmits(['success', 'close'])
|
const emit = defineEmits(['success', 'close'])
|
||||||
const formRef = shallowRef<FormInstance>()
|
const formRef = shallowRef<FormInstance>()
|
||||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||||
const mode = ref('add')
|
const mode = ref('add')
|
||||||
import feedback from '@/utils/feedback'
|
|
||||||
const showDialog = ref(false)
|
const showDialog = ref(false)
|
||||||
const showDialog1 = ref(false)
|
const showDialog1 = ref(false)
|
||||||
const project_name = ref('')
|
const project_name = ref('')
|
||||||
|
@ -7,14 +7,16 @@
|
|||||||
|
|
||||||
<el-form-item label="是否有剩余" prop="is_residual">
|
<el-form-item label="是否有剩余" prop="is_residual">
|
||||||
<el-select class="w-[280px]" v-model="queryParams.is_residual" clearable placeholder="请选择是否有剩余">
|
<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-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="类型" prop="budget_type">
|
<el-form-item label="类型" prop="budget_type">
|
||||||
<el-select class="w-[280px]" v-model="queryParams.budget_type" clearable placeholder="请选择类型">
|
<el-select class="w-[280px]" v-model="queryParams.budget_type" clearable placeholder="请选择类型">
|
||||||
<el-option label="全部" value=""></el-option>
|
<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-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
@ -31,7 +33,8 @@
|
|||||||
</template>
|
</template>
|
||||||
新增
|
新增
|
||||||
</el-button>
|
</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>
|
</el-button>
|
||||||
|
|
||||||
@ -64,7 +67,8 @@
|
|||||||
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
|
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</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>
|
||||||
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
|
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
|
||||||
@ -88,8 +92,6 @@
|
|||||||
import { usePaging } from '@/hooks/usePaging'
|
import { usePaging } from '@/hooks/usePaging'
|
||||||
import { useDictData } from '@/hooks/useDictOptions'
|
import { useDictData } from '@/hooks/useDictOptions'
|
||||||
import { MaterialbudgetDetailLists, MaterialbudgetDetailDelete, MaterialbudgetDetailDetail } from '@/api/project_material_budget_detail'
|
import { MaterialbudgetDetailLists, MaterialbudgetDetailDelete, MaterialbudgetDetailDetail } from '@/api/project_material_budget_detail'
|
||||||
import { timeFormat } from '@/utils/util'
|
|
||||||
import { getAllProjectTypes } from '@/api/projecttype'
|
|
||||||
const protype = reactive([])
|
const protype = reactive([])
|
||||||
import feedback from '@/utils/feedback'
|
import feedback from '@/utils/feedback'
|
||||||
import EditPopup from './edit.vue'
|
import EditPopup from './edit.vue'
|
||||||
|
@ -35,8 +35,6 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="工作量" prop="num">
|
<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-input v-model="formData.num" clearable placeholder="请输入工作量" @change="numberChange" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col> <el-col :span="8">
|
</el-col> <el-col :span="8">
|
||||||
@ -49,13 +47,13 @@
|
|||||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
<el-dialog v-model="showDialog" title="选择分包预算" width="70%">
|
||||||
|
<projectDialog @customEvent="customEvent" :project_id="project?.id || ''"></projectDialog>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
</popup>
|
</popup>
|
||||||
<el-dialog v-model="showDialog" title="选择分包预算" width="70%">
|
|
||||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -64,36 +62,18 @@
|
|||||||
import type { FormInstance } from 'element-plus'
|
import type { FormInstance } from 'element-plus'
|
||||||
import Popup from '@/components/popup/index.vue'
|
import Popup from '@/components/popup/index.vue'
|
||||||
import projectDialog from '@/components/subpackage_budget/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 { 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({
|
defineProps({
|
||||||
dictData: {
|
project: Object
|
||||||
type: Object as PropType<Record<string, any[]>>,
|
|
||||||
default: () => ({})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
const emit = defineEmits(['success', 'close'])
|
const emit = defineEmits(['success', 'close'])
|
||||||
const formRef = shallowRef<FormInstance>()
|
const formRef = shallowRef<FormInstance>()
|
||||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||||
const mode = ref('add')
|
const mode = ref('add')
|
||||||
import feedback from '@/utils/feedback'
|
|
||||||
const showDialog = ref(false)
|
const showDialog = ref(false)
|
||||||
const showDialog1 = ref(false)
|
|
||||||
const project_name = ref('')
|
const project_name = ref('')
|
||||||
const project_code = 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 = () => {
|
const numberChange = () => {
|
||||||
if (formData.num > 10000) formData.num = 10000
|
if (formData.num > 10000) formData.num = 10000
|
||||||
|
@ -23,7 +23,8 @@
|
|||||||
</template>
|
</template>
|
||||||
新增
|
新增
|
||||||
</el-button>
|
</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>
|
</el-button>
|
||||||
|
|
||||||
@ -38,8 +39,6 @@
|
|||||||
<el-table-column label="工作内容" prop="work_content" show-overflow-tooltip />
|
<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="project_features" show-overflow-tooltip />
|
||||||
<el-table-column label="单位" prop="unit" 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="num" show-overflow-tooltip />
|
||||||
<el-table-column label="单价" prop="price" show-overflow-tooltip />
|
<el-table-column label="单价" prop="price" show-overflow-tooltip />
|
||||||
<el-table-column label="金额" prop="amount" 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 v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</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>
|
||||||
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
|
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user