This commit is contained in:
zmj 2024-01-30 14:27:42 +08:00
parent b4edbaf21d
commit 829600031c
24 changed files with 335 additions and 287 deletions

View File

@ -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
});
//

View File

@ -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>()

View File

@ -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>) => {

View File

@ -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>) => {

View File

@ -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) => {

View File

@ -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) => {

View File

@ -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>()

View File

@ -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>>()

View File

@ -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>>()

View File

@ -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>>()

View File

@ -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) => {

View File

@ -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>({

View File

@ -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) => {

View File

@ -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 }">

View File

@ -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>

View File

@ -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' },
]
})

View File

@ -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">

View File

@ -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

View File

@ -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);

View File

@ -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)">

View File

@ -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;

View File

@ -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>>()

View File

@ -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
}
//

View File

@ -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>({