add
This commit is contained in:
parent
b4edbaf21d
commit
829600031c
@ -26,7 +26,7 @@
|
||||
</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>
|
||||
@ -37,11 +37,15 @@
|
||||
import { usePaging } from "@/hooks/usePaging"
|
||||
import { useDictData } from "@/hooks/useDictOptions"
|
||||
import { bidapplyLists } from '@/api/bidbbond'
|
||||
import { defineEmits } from "vue"
|
||||
import { defineEmits, defineProps } from "vue"
|
||||
const props = defineProps({
|
||||
project_id: Number
|
||||
})
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
custom_name: ''
|
||||
custom_name: '',
|
||||
project_id: props.project_id
|
||||
});
|
||||
|
||||
// 获取字典数据
|
||||
|
@ -289,14 +289,7 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
}
|
||||
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
let invoicing_amount_daxie = computed(() => {
|
||||
@ -313,7 +306,11 @@ const delFileFn = (index: number) => {
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
custom_name.value = props.project.custom_name
|
||||
}
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
|
@ -235,7 +235,7 @@
|
||||
</div>
|
||||
</el-form>
|
||||
<el-dialog v-model="showDialog" title="选择标书" width="70%">
|
||||
<biddocumentTable @customEvent="customEvent"></biddocumentTable>
|
||||
<biddocumentTable @customEvent="customEvent" :project_id="project.id"></biddocumentTable>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择产品" width="70%">
|
||||
<customDialog1 @customEvent="customEvent1"></customDialog1>
|
||||
@ -289,24 +289,8 @@ const userStore = useUserStore();
|
||||
const formDataannex = reactive([])
|
||||
const formDataannex1 = reactive([])
|
||||
const formDataannex2 = reactive([])
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
);
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
|
||||
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four1 = (
|
||||
@ -446,10 +430,6 @@ const customEvent1 = (e: any) => {
|
||||
tableData.value[num.value].name = e.name
|
||||
tableData.value[num.value].specs = e.specs
|
||||
tableData.value[num.value].unit = e.unit
|
||||
|
||||
|
||||
// formData.customer_id = e.id;
|
||||
// customer_name.value = e.name;
|
||||
showDialog1.value = false;
|
||||
|
||||
};
|
||||
@ -457,6 +437,14 @@ const customEvent1 = (e: any) => {
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
const props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
}
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
|
||||
@ -491,17 +479,13 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formDataannex2, arry1)
|
||||
|
||||
}
|
||||
|
||||
|
||||
bid_document_no.value = data.bid_document_no
|
||||
invite_tenders_company_name.value = data.invite_tenders_company_name
|
||||
bid_company_name.value = data.bid_company_name
|
||||
amount.value = data.bid_document_amount
|
||||
|
||||
buyer.value = data.buyer
|
||||
bid_date.value = data.bidding_time
|
||||
buy_date.value = data.buy_date
|
||||
//project_fund_source.value = data.project_fund_source
|
||||
bid_date.value = data.bidding_time
|
||||
invite_tenders_type.value = data.bid_type
|
||||
bid_address.value = data.bid_address
|
||||
@ -510,11 +494,6 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
deposit_refund_time.value = data.margin_amount_return_date
|
||||
bidding_project_overview.value = data.bid_project_overview
|
||||
project_introduction.value = data.project_desc
|
||||
|
||||
// //@ts-ignore
|
||||
// formData.bid_opening_date = timeFormat(formData.bid_opening_date, 'YYYY-MM-DD ')
|
||||
// //@ts-ignore
|
||||
// formData.deposit_refund_time = timeFormat(formData.deposit_refund_time, 'YYYY-MM-DD ')
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
|
@ -58,7 +58,7 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-dialog v-model="showDialog" title="选择标书审查" width="70%">
|
||||
<biddocumentTable @customEvent="customEvent"></biddocumentTable>
|
||||
<biddocumentTable @customEvent="customEvent" :project_id="project.id || ''"></biddocumentTable>
|
||||
</el-dialog>
|
||||
|
||||
</popup>
|
||||
@ -139,12 +139,19 @@ const customEvent = (e: any) => {
|
||||
custom_name.value = e.custom_name
|
||||
project_name.value = e.project_name
|
||||
project_code.value = e.project_code
|
||||
|
||||
showDialog.value = false
|
||||
|
||||
|
||||
};
|
||||
const props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
custom_name.value = props.project.custom_name
|
||||
}
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
|
@ -122,7 +122,8 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-dialog v-model="showDialog" title="选择投标决策" width="70%">
|
||||
<biddingDecisionDialog @customEvent="customEvent"></biddingDecisionDialog>
|
||||
<biddingDecisionDialog @customEvent="customEvent" :project_id="project?.id || ''">
|
||||
</biddingDecisionDialog>
|
||||
</el-dialog>
|
||||
<!-- <el-dialog v-model="showDialog3" title="选择收款人信息" width="70%">
|
||||
<bankaccountDialog @customEvent="customEvent3"></bankaccountDialog>
|
||||
@ -140,13 +141,8 @@ import Popup from '@/components/popup/index.vue'
|
||||
import biddingDecisionDialog from '@/components/biddingDecision/index.vue'
|
||||
import { bidapplyAdd, bidapplyEdit, bidapplyDetail } from '@/api/bidbbond'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
import bankaccountDialog from '@/components/bankaccount/index.vue'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
const { dictData } = useDictData('pay_type')
|
||||
|
||||
@ -156,11 +152,9 @@ const active = reactive(0)
|
||||
|
||||
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const project_name = ref('')
|
||||
const bidding_time = ref('')
|
||||
const project_code = ref('')
|
||||
const contract_no = ref('')
|
||||
const document_no = ref('')
|
||||
const userInfo = userStore.userInfo
|
||||
// 上传文件
|
||||
@ -205,12 +199,14 @@ const customEvent = (e: any) => {
|
||||
amountinput(e.margin_amount)
|
||||
};
|
||||
|
||||
const customEvent3 = (e: any) => {
|
||||
formData.deposit_bank = e.deposit_bank
|
||||
formData.account_name = e.account_name
|
||||
formData.account = e.account
|
||||
showDialog3.value = false
|
||||
};
|
||||
const props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
}
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
|
@ -124,7 +124,7 @@
|
||||
</div>
|
||||
</el-form-item></el-col><el-col :span="24">
|
||||
<el-form-item label="洽商依据" prop="negotiation_basis">
|
||||
<!-- <el-input v-model="formData.negotiation_basis" clearable placeholder="请输入洽商依据" /> -->
|
||||
|
||||
<el-upload
|
||||
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
|
||||
class="upload-demo" :show-file-list="false" aria-hidden="true"
|
||||
@ -254,6 +254,9 @@ const formData = reactive({
|
||||
|
||||
if (props.project) {
|
||||
console.log(props.project)
|
||||
project_name.value = props.project.name
|
||||
custom_name.value = props.project.custom_name
|
||||
|
||||
}
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
|
@ -283,30 +283,21 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
}
|
||||
|
||||
|
||||
const { dictData } = useDictData('pay_period,pay_type,payment_natrue,invoice_status')
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
|
@ -185,31 +185,20 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
const props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
}
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
@ -231,15 +231,7 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
@ -248,6 +240,10 @@ const delFileFn = (index: number) => {
|
||||
const props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
}
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
@ -42,7 +42,7 @@
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id">
|
||||
<el-input v-model="project_name" clearable placeholder="请选择项目" />
|
||||
<el-input v-model="project_name" clearable disabled placeholder="请选择项目" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
@ -237,9 +237,13 @@ const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined)
|
||||
};
|
||||
const { dictData } = useDictData('refund_type,isaccrued,contract_type')
|
||||
|
||||
defineProps({
|
||||
const props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
}
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
@ -12,8 +12,8 @@
|
||||
</el-select>
|
||||
</div>
|
||||
<el-form-item label="项目名称" prop="project_id">
|
||||
<el-input v-model="formData.project_name" readonly clearable placeholder="点击选择项目"
|
||||
@click="showDialog = true" />
|
||||
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" @click="showDialog = true"
|
||||
:disabled="project" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编码" prop="remark">
|
||||
<el-input v-model="formData.project_code" disabled clearable placeholder="系统自动输入" />
|
||||
@ -107,7 +107,6 @@
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiProjectCostBudgetAdd, apiProjectCostBudgetEdit, apiProjectCostBudgetDetail } from '@/api/project_cost_budget'
|
||||
import type { PropType } from 'vue'
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
import projectDialog from '@/components/project/index.vue'
|
||||
@ -126,11 +125,8 @@ const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -165,13 +161,15 @@ const formData = reactive({
|
||||
]
|
||||
})
|
||||
const customEvent = (e: any) => {
|
||||
console.log(e)
|
||||
formData.project_id = e.id
|
||||
formData.project_code = e.project_code
|
||||
formData.project_name = e.name
|
||||
showDialog.value = false
|
||||
}
|
||||
|
||||
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
// 获取点击行的index
|
||||
let rowIndex = 0
|
||||
const openDialog1 = (e: any) => {
|
||||
|
@ -12,7 +12,7 @@
|
||||
</el-select>
|
||||
</div>
|
||||
<el-form-item label="项目名称" prop="project_id">
|
||||
<el-input v-model="formData.project_name" readonly clearable placeholder="点击选择项目"
|
||||
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" :disabled="project"
|
||||
@click="showDialog = true" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编码" prop="remark">
|
||||
@ -122,25 +122,14 @@ const userStore = useUserStore();
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
|
||||
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
const props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const customEvent = (e) => {
|
||||
console.log(e)
|
||||
formData.project_id = e.id
|
||||
formData.project_code = e.project_code
|
||||
formData.project_name = e.name
|
||||
showDialog.value = false
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 上传文件
|
||||
@ -181,7 +170,13 @@ const formData = reactive({
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
const customEvent = (e) => {
|
||||
formData.project_id = e.id
|
||||
formData.project_code = e.project_code
|
||||
formData.project_name = e.name
|
||||
showDialog.value = false
|
||||
}
|
||||
if (props.project) customEvent(props.project)
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
@ -12,7 +12,7 @@
|
||||
</el-select>
|
||||
</div>
|
||||
<el-form-item label="项目名称" prop="project_id">
|
||||
<el-input v-model="formData.project_name" readonly clearable placeholder="点击选择项目"
|
||||
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" :disabled="project"
|
||||
@click="showDialog = true" />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目编码" prop="remark">
|
||||
@ -121,11 +121,8 @@ const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
const props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
@ -172,13 +169,12 @@ const formData = reactive({
|
||||
|
||||
|
||||
const customEvent = (e) => {
|
||||
console.log(e)
|
||||
formData.project_id = e.id
|
||||
formData.project_code = e.project_code
|
||||
formData.project_name = e.name
|
||||
showDialog.value = false
|
||||
}
|
||||
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (response: any) => {
|
||||
|
@ -32,6 +32,8 @@
|
||||
<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 />
|
||||
<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-column label="附件" prop="annex" show-overflow-tooltip align="center">
|
||||
<template #default="{ row }">
|
||||
|
@ -1,3 +1,134 @@
|
||||
<template>
|
||||
项目统计页面
|
||||
</template>
|
||||
<el-card style="">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>这是个啥起码子标题</span>
|
||||
</div>
|
||||
</template>
|
||||
<div id="ProjectPayment" class="chart"></div>
|
||||
</el-card>
|
||||
</template>
|
||||
<script setup>
|
||||
|
||||
import * as echarts from 'echarts';
|
||||
import { apistatisticsprojectRefund } from '@/api/statistics'
|
||||
const labelOption = {
|
||||
show: true,
|
||||
rich: {
|
||||
name: {}
|
||||
}
|
||||
};
|
||||
|
||||
const initChart = (id, opt) => {
|
||||
var chartDom = document.getElementById(id);
|
||||
var myChart = echarts.init(chartDom);
|
||||
myChart.setOption(opt);
|
||||
}
|
||||
const getCustom = async () => {
|
||||
let res = await apistatisticsprojectRefund()
|
||||
await nextTick()
|
||||
var option4 = {
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: {
|
||||
type: 'shadow'
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
data: [res.invoice_series.name, res.refund_plan_series.name, res.refund_series
|
||||
.name, res.not_refund_series.name,]
|
||||
},
|
||||
toolbox: {
|
||||
show: true,
|
||||
orient: 'vertical',
|
||||
left: 'right',
|
||||
top: 'center',
|
||||
|
||||
},
|
||||
xAxis: [
|
||||
{
|
||||
type: 'category',
|
||||
axisTick: { show: false },
|
||||
data: res.column
|
||||
}
|
||||
],
|
||||
yAxis: [
|
||||
{
|
||||
type: 'value'
|
||||
}
|
||||
],
|
||||
series: [
|
||||
{
|
||||
name: res.invoice_series.name,
|
||||
type: 'bar',
|
||||
barGap: 0,
|
||||
label: labelOption,
|
||||
emphasis: {
|
||||
focus: 'series'
|
||||
},
|
||||
data: res.invoice_series.data,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
name: res.refund_plan_series.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,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
};
|
||||
|
||||
initChart("ProjectPayment", option4)
|
||||
}
|
||||
getCustom()
|
||||
</script>
|
||||
<style>
|
||||
.chart {
|
||||
width: 100%;
|
||||
height: 400px;
|
||||
}
|
||||
</style>
|
@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<myTable :baseData="baseData"></myTable>
|
||||
<myTable :baseData="baseData1"></myTable>
|
||||
<myTable :baseData="baseData2"></myTable>
|
||||
<myTable :baseData="baseData3"></myTable>
|
||||
<myTable :baseData="baseData4"></myTable>
|
||||
<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>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -17,24 +17,19 @@ import { apiProjectEquipmentBudgetDetailLists } from '@/api/project_equipment_bu
|
||||
import { apiProjectLaborBudgetDetailLists } from '@/api/project_labor_budget_detail.ts'
|
||||
|
||||
const props = defineProps({
|
||||
project_id: Number
|
||||
project: Object
|
||||
})
|
||||
|
||||
const baseData = reactive({
|
||||
fetchFun: apiProjectCostBudgetLists,
|
||||
tit: "费用预算",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '一级科目', prop: 'first_level_subject' },
|
||||
{ label: '差?科目', prop: 'second_level_subject' },
|
||||
{ label: '单位', prop: 'unit' },
|
||||
{ label: '首次预算', prop: 'unit' },
|
||||
{ label: '预算调整', prop: 'num' },
|
||||
{ label: '预算金额', prop: 'amount' },
|
||||
{ label: '已支出', prop: 'amount' },
|
||||
{ label: '剩余预算', prop: 'has_subcontract_num' },
|
||||
{ label: '编制标准', prop: 'standard' },
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '费用预算单号', prop: 'cost_budget_code' },
|
||||
{ label: '金额', prop: 'total_amount' },
|
||||
{ label: '备注', prop: 'remark' },
|
||||
|
||||
]
|
||||
})
|
||||
|
||||
@ -42,7 +37,7 @@ const baseData = reactive({
|
||||
const baseData1 = reactive({
|
||||
fetchFun: MaterialbudgetDetailLists,
|
||||
tit: "材料预算",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '材料名称', prop: 'material_name' },
|
||||
{ label: '材料编码', prop: 'material_code' },
|
||||
@ -62,7 +57,7 @@ const baseData1 = reactive({
|
||||
const baseData2 = reactive({
|
||||
fetchFun: subpackagdetailLists,
|
||||
tit: "分包预算",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '工作类型', prop: 'work_type' },
|
||||
{ label: '工作内容', prop: 'work_content' },
|
||||
@ -81,7 +76,7 @@ const baseData2 = reactive({
|
||||
const baseData3 = reactive({
|
||||
fetchFun: apiProjectEquipmentBudgetDetailLists,
|
||||
tit: "机具预算",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '机具类别', prop: 'type' },
|
||||
{ label: '机具名称', prop: 'name' },
|
||||
@ -99,16 +94,13 @@ const baseData3 = reactive({
|
||||
const baseData4 = reactive({
|
||||
fetchFun: apiProjectLaborBudgetDetailLists,
|
||||
tit: "人工预算",
|
||||
queryParams: { project_id: props.project_id },
|
||||
queryParams: { project_id: props.project.id },
|
||||
columnList: [
|
||||
{ label: '工种名称', prop: 'job_type_name' },
|
||||
{ label: '人工说明', prop: 'desc' },
|
||||
{ label: '单位', prop: 'unit' },
|
||||
{ label: '首次预算量', prop: '' },
|
||||
{ label: '预算调整量', prop: '' },
|
||||
{ label: '预算总量', prop: '' },
|
||||
{ label: '单价', prop: 'price' },
|
||||
{ label: '金额', prop: 'amount' },
|
||||
{ label: '人工预算单号', prop: 'labor_budget_code' },
|
||||
{ label: '项目名称', prop: 'project_name' },
|
||||
{ label: '项目编码', prop: 'project_code' },
|
||||
{ label: '数量', prop: 'total_num' },
|
||||
{ label: '金额', prop: 'total_amount' },
|
||||
{ label: '备注', prop: 'remark' },
|
||||
]
|
||||
})
|
||||
|
@ -20,7 +20,7 @@
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="预算" name="demo-5">
|
||||
<budget v-if="activeName == 'demo-5'" :project_id="project_id"></budget>
|
||||
<budget v-if="activeName == 'demo-5'" :project="formData"></budget>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="采购" name="demo-8">
|
||||
|
@ -15,7 +15,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" />
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" :disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
@ -122,16 +122,15 @@
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择产品" width="70%">
|
||||
<prodctTable @customEvent="customEvent1" :project_id='formData.project_id'></prodctTable>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择产品" width="70%">
|
||||
<prodctTable @customEvent="customEvent1" :project_id='formData.project_id'></prodctTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -142,26 +141,19 @@ import projectDialog from '@/components/project/index.vue'
|
||||
import { MaterialbudgetDetailLists } from '@/api/project_material_budget_detail'
|
||||
import prodctTable from '@/components/product/index.vue'
|
||||
import { apiMaterialbudgetAdd, apiMaterialbudgetEdit, apiMaterialbudgetDetail } from '@/api/project_material_budget'
|
||||
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: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
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([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
@ -172,7 +164,16 @@ import useUserStore from "@/stores/modules/user";
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const formDataannex = reactive([])
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: '',
|
||||
project_id: '',
|
||||
material_budget_detail: [],
|
||||
remark: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
|
||||
//获取值
|
||||
@ -183,10 +184,10 @@ const customEvent = (e) => {
|
||||
showDialog.value = false
|
||||
|
||||
}
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
const customEvent1 = (e) => {
|
||||
// formData.project_person_id = e.id
|
||||
// idcard.value = e.idcard
|
||||
// person_name.value = e.name
|
||||
|
||||
tableData.value.push({
|
||||
"material_id": e.id,
|
||||
"name": e.name,
|
||||
@ -285,21 +286,8 @@ const budgetDetailLists = (id) => {
|
||||
}
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: '',
|
||||
project_id: '',
|
||||
material_budget_detail: [],
|
||||
remark: '',
|
||||
annex: [],
|
||||
})
|
||||
const handleAdd = (row: any) => {
|
||||
// 在 row 后面插入一行数据
|
||||
const index = tableData.value.indexOf(row);
|
||||
tableData.value.splice(index + 1, 0, {});
|
||||
};
|
||||
|
||||
|
||||
|
||||
const handleDelete = (row: any) => {
|
||||
// 删除 row
|
||||
|
@ -15,7 +15,7 @@
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
|
||||
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" />
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" :disabled="project" />
|
||||
</el-form-item> </el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id">
|
||||
@ -106,15 +106,16 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</popup>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择产品" width="70%">
|
||||
<prodctTable @customEvent="customEvent1" :project_id='formData.project_id'></prodctTable>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<projectDialog @customEvent="customEvent"></projectDialog>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<div v-if="showDialog1">
|
||||
<el-dialog v-model="showDialog1" title="选择产品" width="70%">
|
||||
<prodctTable @customEvent="customEvent1" :project_id='formData.project_id'></prodctTable>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</popup>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
@ -124,23 +125,15 @@ import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import projectDialog from '@/components/project/index.vue'
|
||||
import { subpackagdetailLists } from '@/api/project_subpackage_budget_detail'
|
||||
|
||||
import prodctTable from '@/components/product/index.vue'
|
||||
import { subpackagebudgetAdd, subpackagebudgetEdit, subpackagebudgetDetail } from '@/api/project_subpackage_budget'
|
||||
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: () => ({})
|
||||
}
|
||||
let props = defineProps({
|
||||
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('')
|
||||
@ -158,7 +151,16 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const formDataannex = reactive([])
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: '',
|
||||
project_id: '',
|
||||
subpackage_budget_detail: [],
|
||||
remark: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
//获取值
|
||||
const customEvent = (e) => {
|
||||
@ -168,6 +170,9 @@ const customEvent = (e) => {
|
||||
showDialog.value = false
|
||||
|
||||
}
|
||||
|
||||
if (props.project) customEvent(props.project);
|
||||
|
||||
const customEvent1 = (e) => {
|
||||
// formData.project_person_id = e.id
|
||||
// idcard.value = e.idcard
|
||||
@ -255,16 +260,7 @@ const budgetDetailLists = (id: any) => {
|
||||
}
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: '',
|
||||
project_id: '',
|
||||
subpackage_budget_detail: [],
|
||||
remark: '',
|
||||
annex: [],
|
||||
})
|
||||
|
||||
const handleAdd = (row: any) => {
|
||||
// 在 row 后面插入一行数据
|
||||
const index = tableData.value.indexOf(row);
|
||||
|
@ -1,21 +1,5 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- <el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
|
||||
|
||||
<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-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card> -->
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['project.project/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
@ -23,7 +7,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>
|
||||
|
||||
@ -46,7 +31,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)">
|
||||
|
@ -232,6 +232,11 @@ const delFileFn = (index: number) => {
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
custom_name.value = props.project.custom_name
|
||||
}
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
@ -241,11 +246,7 @@ const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
const showDialog2 = ref(false)
|
||||
const showDialog3 = ref(false)
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
|
@ -216,6 +216,10 @@ const delFileFn = (index: number) => {
|
||||
let props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
}
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
@ -121,7 +121,7 @@
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择投标保证金" width="70%">
|
||||
<bidbondDialog @customEvent="customEvent"></bidbondDialog>
|
||||
<bidbondDialog @customEvent="customEvent" :project_id="project?.id || ''"></bidbondDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
@ -135,7 +135,6 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import bidbondDialog from '@/components/bidbond/index.vue'
|
||||
@ -143,9 +142,7 @@ import bankaccountDialog from '@/components/bankaccount/index.vue'
|
||||
import { bidrefundAdd, bidrefundEdit, bidrefundDetail } from '@/api/refundbidDeposit'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
@ -156,12 +153,8 @@ const bidding_code = ref('')
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const bidding_time = ref('')
|
||||
const accnout_sn = ref('')
|
||||
const bank_accnout = ref('')
|
||||
const address_phone = ref('')
|
||||
const deposit_bank = ref('')
|
||||
const custom_name = ref('')
|
||||
|
||||
const { dictData } = useDictData('refund_type,isaccrued,contract_type')
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
@ -179,27 +172,12 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
@ -226,6 +204,17 @@ const customEvent1 = (e: any) => {
|
||||
showDialog1.value = false
|
||||
};
|
||||
|
||||
const props = defineProps({
|
||||
project: Object
|
||||
})
|
||||
|
||||
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
custom_name.value = props.project.custom_name
|
||||
|
||||
}
|
||||
|
||||
|
||||
//监听输入
|
||||
|
@ -290,7 +290,11 @@ const customEvent = (e: any) => {
|
||||
showDialog.value = false;
|
||||
|
||||
};
|
||||
if (props.project) {
|
||||
project_name.value = props.project.name
|
||||
project_code.value = props.project.project_code
|
||||
|
||||
}
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
Loading…
x
Reference in New Issue
Block a user