This commit is contained in:
zmj 2024-01-29 18:13:13 +08:00
parent 3a1815b0fb
commit 058b349725
66 changed files with 973 additions and 1009 deletions

View File

@ -75,7 +75,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>

View File

@ -4,15 +4,8 @@
<!-- 触发弹窗 -->
<slot name="trigger"></slot>
</div>
<el-dialog
v-model="visible"
:custom-class="customClass"
:center="center"
:append-to-body="true"
:width="width"
:close-on-click-modal="clickModalClose"
@closed="close"
>
<el-dialog v-model="visible" :custom-class="customClass" :center="center" :append-to-body="true" :width="width"
:close-on-click-modal="clickModalClose" @closed="close">
<!-- 弹窗内容 -->
<template v-if="title" #header>{{ title }}</template>
@ -24,11 +17,7 @@
<el-button v-if="cancelButtonText" @click="handleEvent('cancel')">
{{ cancelButtonText }}
</el-button>
<el-button
v-if="confirmButtonText"
type="primary"
@click="handleEvent('confirm')"
>
<el-button v-if="confirmButtonText" type="primary" @click="handleEvent('confirm')">
{{ confirmButtonText }}
</el-button>
</div>

View File

@ -43,11 +43,15 @@
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { apisupplierLists } from '@/api/suppler_list'
import { defineEmits } from "vue"
import { defineEmits, defineProps } from "vue"
let props = defineProps({
project_id: Number
})
//
const queryParams = reactive({
name: ''
name: '',
project_id: props.project_id
});
const { dictData } = useDictData('supplier_grade,supplier_group,supplier_category,sex')

View File

@ -225,7 +225,7 @@
<customDialog @customEvent="customEvent"></customDialog>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
<contractDialog @customEvent="customEvent1"></contractDialog>
<contractDialog @customEvent="customEvent1" :project_id="project?.id || ''"></contractDialog>
</el-dialog>
</el-form>
</popup>
@ -247,6 +247,8 @@ import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { computed } from "vue"
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('pay_period,invoice_type,tax_rate')
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
@ -288,13 +290,6 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
}
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
// // if (!value) {
// // return callback(new Error(''))
// // }
if (value && !mailReg.test(value)) {
callback(new Error('请输入正确的邮箱格式'))
} else {
@ -313,12 +308,13 @@ let invoicing_amount_daxie = computed(() => {
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
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>>()

View File

@ -3,7 +3,8 @@
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="开票公司名称" prop="invoicing_company_name">
<el-input class="w-[280px]" v-model="queryParams.invoicing_company_name" clearable placeholder="请输入开票公司名称" />
<el-input class="w-[280px]" v-model="queryParams.invoicing_company_name" clearable
placeholder="请输入开票公司名称" />
</el-form-item>
<el-form-item label="客户" prop="customer_id">
@ -15,7 +16,8 @@
<el-form-item label="合同" prop="contract_id">
<el-select class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name" :value="item.id" />
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="item.id" />
</el-select>
</el-form-item>
@ -33,7 +35,8 @@
</template>
新增
</el-button>
<el-button v-perms="['InvoicingRequests.InvoicingRequests/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
@ -44,25 +47,25 @@
<el-table-column label="客户" prop="custom_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="开票日期" prop="invoicing_date" show-overflow-tooltip />
<el-table-column label="期次" prop="period" show-overflow-tooltip />
<el-table-column label="发票类型" prop="invoice_type" show-overflow-tooltip />
<el-table-column label="开票金额(含税)" prop="invoicing_amount" show-overflow-tooltip />
<el-table-column label="开票金额(非税)" prop="amount_including_tax" show-overflow-tooltip />
<el-table-column label="税率(%)" prop="tax_rate" show-overflow-tooltip />
<!-- <el-table-column label="开票金额(税额)" prop="tax" show-overflow-tooltip /> -->
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/edit']" type="primary" link @click="handleEdit(row)">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['InvoicingRequests.InvoicingRequests/delete']" type="danger" link @click="handleDelete(row.id)">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['InvoicingRequests.InvoicingRequests/detail']" link @click="handledetail(row)">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/detail']" link
@click="handledetail(row)">
详情
</el-button>
</template>

View File

@ -27,9 +27,6 @@ const year = ref(new Date().getFullYear())
const showChart = ref(true)
/* CtrlA
上的全部文字都被选择并变色于是隐藏在黑背景里的黑色文字浮现了出来你需要有一张交通卡一日之间在一线和环线上的每个地铁站进入各一次每次都要刷这张卡然后你就会看见卡片变成金色的
刷这张地铁卡就能到达隐藏的站点*/
const customList = reactive([
{
@ -40,11 +37,16 @@ const customList = reactive([
name: "年度回款金额",
value: 3
},
{
name: "年度未回款金额",
value: 3
},
{
name: "年度回款计划金额",
value: 3
},
])
const labelOption = {
@ -63,8 +65,7 @@ const initChart = (id, opt) => {
const getCustom = async () => {
showChart.value = false
let res = await apistatisticsprojectRefund()
let res = await apistatisticsprojectRefund({ year: year.value })
showChart.value = true
await nextTick()
var option4 = {
@ -76,7 +77,7 @@ const getCustom = async () => {
},
legend: {
data: [res.invoice_series.name, res.refund_plan_series.name, res.refund_series
.name,]
.name, res.not_refund_series.name,]
},
toolbox: {
show: true,
@ -144,16 +145,30 @@ const getCustom = async () => {
}
}
},
{
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)
customList[0].value = res.year_invoicing_amount
customList[1].value = res.year_refund_amount
customList[2].value = res.year_refund_plan_amount
customList[2].value = res.year_not_refund_amount
customList[3].value = res.year_refund_plan_amount
}
getCustom()
</script>
<style lang="scss" scoped>

View File

@ -57,7 +57,7 @@ const initChart = (id, opt) => {
const getCustom = async () => {
showChart.value = false
let res = await apistatisticsprojectPayment()
let res = await apistatisticsprojectPayment({ year: year.value })
showChart.value = true
await nextTick()

View File

@ -94,7 +94,7 @@ const setHistogramOption = (legend, xAxisData, series) => {
const getCustom = async () => {
showChart.value = false
let res = await apistatisticsprocurementContract()
let res = await apistatisticsprocurementContract({ yaer: year.value })
showChart.value = true
await nextTick()
initChart("PurchaseContracts", setHistogramOption({ data: [res.series.name] }, res.column

View File

@ -97,7 +97,7 @@ const setHistogramOption = (legend, xAxisData, series) => {
const getCustom = async () => {
showChart.value = false
let res = await apistatisticssubcontractingContract()
let res = await apistatisticssubcontractingContract({ year: year.value })
showChart.value = true
await nextTick()
initChart("Subcontract", setHistogramOption({ data: [res.series.name] }, res.column

View File

@ -96,7 +96,7 @@ const setHistogramOption = (legend, xAxisData, series) => {
const getCustom = async () => {
showChart.value = false
let res = await apistatisticscontracts()
let res = await apistatisticscontracts({ year: year.value })
showChart.value = true
await nextTick()
initChart("main3", setHistogramOption({ data: [res.series.name] }, res.column

View File

@ -6,7 +6,7 @@
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]" @click="showDialog = true">
<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">
@ -21,7 +21,7 @@
</el-form-item></el-col><el-col :span="8">
<el-form-item label="项目估算" prop="project_estimation"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.project_estimation" clearable placeholder="请输入项目估算" />
<el-input v-model="formData.project_estimation" clearable placeholder="请输入项目估算" type="number" />
</el-form-item></el-col><el-col :span="24">
<el-form-item label="招标项目资金来源" label-width="130px" prop="bidding_project_fund_source">
<el-radio-group v-model="formData.bidding_project_fund_source" placeholder="请选择招标项目资金来源">
@ -48,7 +48,8 @@
<el-form-item label="竞争对手" prop="competitor">
<el-input v-model="formData.competitor" clearable placeholder="请输入竞争对手" />
</el-form-item></el-col><el-col :span="24">
<el-form-item label="是否需要保证金" prop="is_margin" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-form-item label="是否需要保证金" prop="is_margin"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-radio-group v-model="formData.is_margin" placeholder="请选择是否需要保证金">
<el-radio v-for="(item, index) in dictData.whether_status" :key="index"
:label="parseInt(item.value)">
@ -133,28 +134,22 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import reviewprocess from '@/components/reviewprocess/index.vue'
import projectTable from "@/components/project/index.vue"
import { useDictData } from '@/hooks/useDictOptions'
import { apiBidBiddingDecisionAdd, apiBidBiddingDecisionDetail } from '@/api/bid_bidding_decision'
import { 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 { dictData } = useDictData('construction_funds_sources,bidding_method,whether_status,project_assurance')
const matsname = ref('')
const project_name = ref('')
const project_code = ref('')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const list1 = reactive([])
const list2 = reactive([])
const mode = ref('')
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
@ -178,17 +173,7 @@ const handleAvatarSuccess_four = (
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const customEvent = (e: any) => {
console.log(e, "e")
formData.project_id = e.id;
matsname.value = e.person
project_name.value = e.name
project_code.value = e.project_code
showDialog.value = false;
};
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑投标决策' : '新增投标决策'
@ -216,7 +201,16 @@ const formData = reactive({
approve_id: 0
})
//
const customEvent = (e: any) => {
formData.project_id = e.id;
matsname.value = e.person
project_name.value = e.name
project_code.value = e.project_code
showDialog.value = false;
};
if (props.project) customEvent(props.project)
//
const formRules = reactive<any>({

View File

@ -80,40 +80,9 @@
<el-col :span="8">
<el-form-item label="是否需要保证金" prop="is_margin">
<el-input v-model="is_margin" clearable disabled placeholder="系统自动填写" />
<!-- <el-radio-group v-model="is_margin" placeholder="请选择是否需要保证金">
<el-radio v-for="(item, index) in dictData.whether_status" :key="index" :label="parseInt(item.value)">
{{ item.name }}
</el-radio>
</el-radio-group> -->
</el-form-item>
</el-col>
<!-- <el-col :span="8"><el-form-item label="开标日期" prop="bid_opening_date">
<el-date-picker class="flex-1 !flex" v-model="formData.bid_opening_date" clearable value-format="YYYY-MM-DD " placeholder="选择开标日期">
</el-date-picker>
<el-input v-model="bid_opening_date" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col> <el-col :span="8"> -->
<!-- <el-col :span="8"><el-form-item label="保证金退还时间" prop="deposit_refund_time">
<el-date-picker class="flex-1 !flex" v-model="formData.deposit_refund_time" clearable value-format="YYYY-MM-DD " placeholder="选择保证金退还时间">
</el-date-picker>
<el-input v-model="deposit_refund_time" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>-->
<!-- <el-col :span="8">
<el-form-item label="招标项目概况" prop="bidding_project_overview">
<el-input v-model="bidding_project_overview" clearable disabled placeholder="系统自动填写" />
<el-input v-model="formData.bidding_project_overview" clearable placeholder="请输入招标项目概况" />
</el-form-item></el-col> <el-col :span="8">
<el-form-item label="项目简介" prop="project_introduction">
<el-input v-model="project_introduction" clearable disabled placeholder="系统自动填写" />
<el-input v-model="formData.project_introduction" clearable placeholder="请输入项目简介" />
</el-form-item>
</el-col> -->
</el-row>
<div class="tit">技术审查</div>
<el-row>
@ -156,7 +125,8 @@
<el-row>
<el-col :span="8">
<el-form-item label="总金额" prop="business_review_total_amount">
<el-input v-model="formData.business_review_total_amount" clearable placeholder="请输入总金额" />
<el-input v-model="formData.business_review_total_amount" clearable placeholder="系统自动计算"
disabled />
</el-form-item></el-col> <el-col :span="8">
<el-form-item label="税率" prop="tax_rate">
<el-select class="flex-1" v-model="formData.tax_rate" clearable placeholder="请选择税率">
@ -264,13 +234,14 @@
</el-table>
</div>
</el-form>
<el-dialog v-model="showDialog" title="选择标书" width="70%">
<biddocumentTable @customEvent="customEvent"></biddocumentTable>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择产品" width="70%">
<customDialog1 @customEvent="customEvent1"></customDialog1>
</el-dialog>
</popup>
<el-dialog v-model="showDialog" title="选择标书" width="70%">
<biddocumentTable @customEvent="customEvent"></biddocumentTable>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择产品" width="70%">
<customDialog1 @customEvent="customEvent1"></customDialog1>
</el-dialog>
</div>
</template>
@ -280,16 +251,10 @@ import Popup from '@/components/popup/index.vue'
import customDialog1 from '@/components/product/index.vue'
import biddocumentTable from "@/components/biddocument/index.vue"
import { apiBidDocumentExaminationAdd, apiBidDocumentExaminationEdit, apiBidDocumentExaminationDetail } from '@/api/bid_document_examination'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { watch } from "vue"
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('whether_status,tax_rate,pay_type,construction_funds_sources,bidding_method')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()

View File

@ -57,11 +57,11 @@
</el-form-item>
</el-form>
</popup>
<el-dialog v-model="showDialog" title="选择标书审查" width="70%">
<biddocumentTable @customEvent="customEvent"></biddocumentTable>
<el-dialog v-model="showDialog" title="选择标书审查" width="70%">
<biddocumentTable @customEvent="customEvent"></biddocumentTable>
</el-dialog>
</el-dialog>
</popup>
</div>
</template>
@ -71,19 +71,13 @@ import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import biddocumentTable from "@/components/document_examination/index.vue"
import { apiBidResultAdd, apiBidResultEdit, apiBidResultDetail } from '@/api/bid_result'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('is_successful')
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
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>>()

View File

@ -5,12 +5,14 @@
<el-form-item label="标书审查" prop="bid_document_examination_id">
<el-select v-model="queryParams.bid_document_examination_id" clearable placeholder="请选择标书审查">
<el-option v-for="(item, index) in documentList" :key="index" :label="item.bid_document_no" :value="parseInt(item.id)" />
<el-option v-for="(item, index) in documentList" :key="index" :label="item.bid_document_no"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="项目" prop="project_id">
<el-select v-model="queryParams.project_id" clearable placeholder="请选择项目">
<el-option v-for="(item, index) in projectList" :key="index" :label="item.name" :value="parseInt(item.id)" />
<el-option v-for="(item, index) in projectList" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
@ -64,7 +66,7 @@
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
@ -80,7 +82,6 @@ import { apiBidResultLists, apiBidResultDelete, apiBidResultDetail } from '@/api
import {
apiBidDocumentExaminationLists
} from '@/api/bid_document_examination'
import { timeFormat } from '@/utils/util'
import { apiProjectLists } from '@/api/project'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'

View File

@ -147,6 +147,8 @@ 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')
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
@ -181,12 +183,8 @@ const handleAvatarSuccess_four = (
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>>()

View File

@ -74,9 +74,6 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { bidapplyLists, bidapplyDelete, bidapplyDetail } from '@/api/bidbbond'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'

View File

@ -16,7 +16,7 @@
</el-form-item>
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_name" clearable readonly placeholder="请输入项目名称" />
<el-input v-model="project_name" clearable readonly placeholder="请输入项目名称" :disabled="project" />
</el-form-item>
<el-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
@ -70,15 +70,16 @@
</div>
</el-form-item>
</el-form>
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
</div>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
</el-dialog>
</div>
</popup>
</div>
</template>
@ -92,11 +93,12 @@ import { getAll } from '@/api/org/organization'
import projectTable from "@/components/project/index.vue"
import customerdemand from "@/components/customerdemand/index.vue"
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
let props = defineProps({
// dictData: {
// type: Object as PropType<Record<string, any[]>>,
// default: () => ({})
// }
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
@ -138,6 +140,23 @@ const handleAvatarSuccess_four = (
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formData = reactive({
id: '',
org_id: '',
dept_id: '',
project_id: '',
customer_demand_id: '',
competitor_name: '',
competitor_contacts: '',
competitor_contacts_phone: '',
competitive_power: '',
competitor_advantages: '',
competitor_disadvantages: '',
remark: '',
annex: [],
})
// dialog
const showDialog = ref(false)
const showDialog1 = ref(false)
@ -151,6 +170,9 @@ const customEvent = (e: any) => {
.value = e.custom_name;
showDialog.value = false;
};
if (props.project) customEvent(props.project);
const customEvent1 = (e: any) => {
formData.customer_demand_id = e.id;
customer_demand_name.value = e.theme;
@ -186,22 +208,7 @@ const xuDialog = () => {
feedback.msgError('请先选择项目')
}
}
//
const formData = reactive({
id: '',
org_id: '',
dept_id: '',
project_id: '',
customer_demand_id: '',
competitor_name: '',
competitor_contacts: '',
competitor_contacts_phone: '',
competitive_power: '',
competitor_advantages: '',
competitor_disadvantages: '',
remark: '',
annex: [],
})
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/

View File

@ -15,13 +15,13 @@
<el-col :span="8">
<el-form-item label="客户" prop="custom_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="custom_name" readonly clearable placeholder="请选择客户" />
<el-input v-model="custom_name" readonly clearable placeholder="请选择客户" :disabled="project" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="tanchuan"
: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="项目编码">
@ -36,11 +36,6 @@
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item></el-col>
<!-- <el-col :span="8">
<el-form-item label="合同编号" prop="contract_code"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.contract_code" placeholder="系统自动填写" disabled />
</el-form-item></el-col> -->
<el-col :span="8">
<el-form-item label="合同类型" prop="contract_type"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
@ -199,22 +194,23 @@
</el-table>
</div>
</el-form>
<el-dialog v-model="showDialog" title="选择客户" width="70%">
<customDialog @customEvent="customEvent"></customDialog>
</el-dialog>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择标书" width="70%">
<biddocumentTable @customEvent="customEvent1" :project_id="project_id"></biddocumentTable>
</el-dialog>
</div>
<div v-if="showDialog2">
<el-dialog v-model="showDialog2" title="选择项目" width="70%">
<projectTable @customEvent="customEvent2" :custom_id="formData.custom_id"></projectTable>
</el-dialog>
</div>
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
<!-- <reviewprocess /> -->
</popup>
<el-dialog v-model="showDialog" title="选择客户" width="70%">
<customDialog @customEvent="customEvent"></customDialog>
</el-dialog>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择标书" width="70%">
<biddocumentTable @customEvent="customEvent1" :project_id="project_id"></biddocumentTable>
</el-dialog>
</div>
<div v-if="showDialog2">
<el-dialog v-model="showDialog2" title="选择项目" width="70%">
<projectTable @customEvent="customEvent2" :custom_id="formData.custom_id"></projectTable>
</el-dialog>
</div>
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
</div>
</template>
@ -226,14 +222,13 @@ import projectTable from "@/components/project/index.vue"
import personnelselector from '@/components/personnelselector/index.vue'
import { apiContractAdd, apiContractEdit, apiContractDetail } from '@/api/contract'
import { apireturnedLists } from "@/api/remittance.ts"
import { useDictData } from '@/hooks/useDictOptions'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
let props = defineProps({
project: Object
})
const { dictData } = useDictData('contract_type,contract_pricing_method,contract_status,pay_period')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
@ -272,13 +267,7 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
}
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
// // if (!value) {
// // return callback(new Error(''))
// // }
if (value && !mailReg.test(value)) {
callback(new Error('请输入正确的邮箱格式'))
} else {
@ -311,30 +300,53 @@ const handleAvatarSuccess_four = (
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formData = reactive({
id: '',
dept_id: '',
org_id: '',
approve_id: 1,
custom_id: '',
buy_bidding_document_id: '',
contract_name: '',
contract_code: '',
contract_type: '',
contract_pricing_method: '',
party_a: '',
party_a_contact_address: '',
party_a_diretor: '',
party_a_phone: '',
party_a_mobile: '',
party_a_email: '',
project_id: "",
party_b: '',
party_b_contact_address: '',
party_b_diretor: '',
party_b_phone: '',
party_b_mobile: '',
party_b_email: '',
amount: '',
returned_money: [],
business_director: '',
contract_status: '',
expire: '',
contract_date: '',
main_content: '',
remark: '',
annex: [],
})
//
const userclick = () => {
// console.log(personnel.value, '1111111')
personnel.value.open()
}
//
const paymentplanList = (id: any) => {
// paymentplanLists({ 'page_no': 1, 'page_size': 5000, 'contract_type': 1, 'contract_id': id }).then((res) => {
// const data = res.lists.map((item: any) => ({
// 'period': item.period,
// 'return_date': item.return_date,
// 'amount': item.amount,
// 'remark': item.remark,
// }))
// paymentList.splice(0, paymentList.length, ...data);
// })
}
//
const submituser = (e: any) => {
formData.business_director = e.id;
@ -349,11 +361,11 @@ const tanchuan = () => {
}
}
//
const customEvent = (e: any) => {
formData.custom_id = e.id;
custom_name.value = e.name;
// console.log(custom_name.value, e.name)
bidding_code.value = ''
project_name.value = ''
project_code.value = ''
@ -361,11 +373,10 @@ const customEvent = (e: any) => {
};
const customEvent1 = (e: any) => {
formData.buy_bidding_document_id = e.id;
project_name.value = e.project_name;
project_code.value = e.project_code
bidding_code.value = e.bid_document_no
showDialog1.value = false;
};
const customEvent2 = (e: any) => {
project_id.value = e.id;
formData.project_id = e.id;
@ -375,6 +386,18 @@ const customEvent2 = (e: any) => {
showDialog2.value = false;
};
if (props.project) {
formData.custom_id = props.project.custom_id;
custom_name.value = props.project.custom_name;
project_id.value = props.project.id;
formData.project_id = props.project.id;
project_name.value = props.project.name;
project_code.value = props.project.project_code;
}
//
const amountinput = (e) => {
// console.log(e)
@ -415,41 +438,6 @@ const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目合同' : '新增项目合同'
})
//
const formData = reactive({
id: '',
dept_id: '',
org_id: '',
approve_id: 1,
custom_id: '',
buy_bidding_document_id: '',
contract_name: '',
contract_code: '',
contract_type: '',
contract_pricing_method: '',
party_a: '',
party_a_contact_address: '',
party_a_diretor: '',
party_a_phone: '',
party_a_mobile: '',
party_a_email: '',
project_id: "",
party_b: '',
party_b_contact_address: '',
party_b_diretor: '',
party_b_phone: '',
party_b_mobile: '',
party_b_email: '',
amount: '',
returned_money: [],
business_director: '',
contract_status: '',
expire: '',
contract_date: '',
main_content: '',
remark: '',
annex: [],
})
//

View File

@ -71,7 +71,7 @@
编辑
</el-button>
<el-button v-perms="['contract.contract/delete']" type="danger" link
@click="handleDelete(row.approve_id)">
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['contract.contract/detail']" link @click="handleDetail(row)">
@ -149,6 +149,7 @@ const handleEdit = async (data: any) => {
//
const handleDelete = async (id: number | any[]) => {
console.log(id, "id")
await feedback.confirm('确定要删除?')
await apiContractDelete({ id })
getLists()

View File

@ -145,11 +145,11 @@
</el-form-item></el-col>
</el-row>
</el-form>
<el-dialog v-model="showDialog" title="选择合同" width="70%">
<proontractTable @customEvent="customEvent" :project_id="project?.id || ''"></proontractTable>
</el-dialog>
</popup>
<el-dialog v-model="showDialog" title="选择合同" width="70%">
<proontractTable @customEvent="customEvent"></proontractTable>
</el-dialog>
</div>
</template>
@ -157,15 +157,14 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiContractNegotiationAdd, apiContractNegotiationEdit, apiContractNegotiationDetail } from '@/api/contract_negotiation'
import { timeFormat } from '@/utils/util'
import proontractTable from "@/components/contract/index.vue"
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
import { useDictData } from '@/hooks/useDictOptions'
let props = defineProps({
project: Object
})
const { dictData } = useDictData('negotiation_type,contract_type,contract_pricing_method')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
@ -247,13 +246,15 @@ const formData = reactive({
material_costs: '',
warranty_amount: '',
warranty_expire_date: '',
negotiation_content: '',
negotiation_detail: '',
negotiation_quotation: [],
negotiation_basis: [],
})
if (props.project) {
console.log(props.project)
}
//
const customEvent = (e: any) => {
formData.contract_id = e.id;

View File

@ -16,7 +16,7 @@
</el-form-item>
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="project_name" clearable placeholder="请选择项目" />
<el-input v-model="project_name" clearable placeholder="请选择项目" :disabled="project" />
</el-form-item>
<el-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code
@ -71,8 +71,7 @@ import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import projectTable from "@/components/project/index.vue"
import { apiCustomerDemandAdd, apiCustomerDemandEdit, apiCustomerDemandDetail } from '@/api/customer_demand'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { useDictData } from '@/hooks/useDictOptions'
//
import annexUpload from "@/components/annexUpload/index.vue"
const handleAvatarSuccess_four = (response: any) => {
@ -82,12 +81,11 @@ const handleAvatarSuccess_four = (response: any) => {
//
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
let props = defineProps({
project: Object
})
const { dictData } = useDictData('importance')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
@ -102,17 +100,8 @@ const custom_name
= ref('')
const formDataannex = reactive([])
// dialog
const showDialog = ref(false)
const customEvent = (e: any) => {
formData.project_id = e.id;
project_name.value = e.name;
project_code
.value = e.project_code;
custom_name
.value = e.custom_name;
showDialog.value = false;
};
const getlista = () => {
getAll().then((res) => {
@ -152,24 +141,22 @@ const formData = reactive({
demand_content: '',
annex: [],
})
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/
// if (!value) {
// return callback(new Error(''))
// }
if (value) {
setTimeout(() => {
if (phoneReg.test(value)) {
callback()
} else {
callback(new Error('电话号码格式不正确'))
}
}, 100)
}
// dialog
const showDialog = ref(false)
const customEvent = (e: any) => {
formData.project_id = e.id;
project_name.value = e.name;
project_code
.value = e.project_code;
custom_name
.value = e.custom_name;
showDialog.value = false;
};
if (props.project) {
customEvent(props.project)
}
//
const formRules = reactive<any>({

View File

@ -16,7 +16,7 @@
</el-form-item>
<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-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
@ -42,21 +42,23 @@
<el-form-item label="客户反馈" prop="customer_feedback">
<el-input v-model="formData.customer_feedback" clearable placeholder="请输入客户反馈" />
</el-form-item>
<el-form-item label="附件" prop="field127">
<el-form-item label="附12件" prop="field127">
<annexUpload :annex="formData.annex" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
</el-form-item>
</el-form>
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
</div>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择需求" width="70%" :z-index="99999">
<customerdemand @customEvent="customEvent1" :productid="formData.project_id">
</customerdemand>
</el-dialog>
</div>
</popup>
</div>
</template>
@ -68,7 +70,6 @@ import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import projectTable from "@/components/project/index.vue"
import customerdemand from "@/components/customerdemand/index.vue"
import { apiCustomerDemandSolutionAdd, apiCustomerDemandSolutionEdit, apiCustomerDemandSolutionDetail } from '@/api/customer_demand_solution'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
@ -82,13 +83,27 @@ const handleAvatarSuccess_four = (response: any) => {
};
//
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
//
const formData = reactive({
id: '',
org_id: '',
dept_id: '',
project_id: '',
customer_demand_id: '',
theme: '',
submission_time: '',
solution_content: '',
customer_feedback: '',
annex: [],
})
defineProps({
let props = defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
},
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
@ -107,6 +122,7 @@ const formDataannex = reactive([])
const showDialog = ref(false)
const showDialog1 = ref(false)
const customEvent = (e: any) => {
formData.project_id = e.id;
project_name.value = e.name;
@ -116,6 +132,11 @@ const customEvent = (e: any) => {
.value = e.custom_name;
showDialog.value = false;
};
if (props.project) {
customEvent(props.project)
}
const customEvent1 = (e: any) => {
formData.customer_demand_id = e.id;
customer_demand_name.value = e.theme;
@ -145,19 +166,6 @@ const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑客户需求解决方案' : '新增客户需求解决方案'
})
//
const formData = reactive({
id: '',
org_id: '',
dept_id: '',
project_id: '',
customer_demand_id: '',
theme: '',
submission_time: '',
solution_content: '',
customer_feedback: '',
annex: [],
})
//

View File

@ -119,7 +119,7 @@
<el-dialog v-model="showDialog" title="选择供应商" width="70%">
<supplier @customEvent="customEvent"></supplier>
<supplier @customEvent="customEvent" :project_id="project?.id || ''"></supplier>
</el-dialog>
<div v-if="formData.contract_cate == 1 && showDialog1">
<el-dialog v-model="showDialog1" title="选择采购合同" width="70%">
@ -155,6 +155,9 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('pay_status,pay_period')
const protype = reactive([])
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
@ -193,13 +196,6 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
}
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
// // if (!value) {
// // return callback(new Error(''))
// // }
if (value && !mailReg.test(value)) {
callback(new Error('请输入正确的邮箱格式'))
} else {
@ -212,10 +208,7 @@ const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()

View File

@ -41,11 +41,9 @@
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_no" show-overflow-tooltip />
<el-table-column label="计划付款日期" prop="pay_date" show-overflow-tooltip />
<el-table-column label="金额" prop="amount" show-overflow-tooltip />
<el-table-column label="期次" prop="period" show-overflow-tooltip>
<template #default="{ row }">

View File

@ -153,7 +153,7 @@
</el-col>
</el-row>
<el-dialog v-model="showDialog" title="选择供应商" width="70%">
<suppliertable @customEvent="customEvent"></suppliertable>
<suppliertable @customEvent="customEvent" :project_id="project?.id || ''"></suppliertable>
</el-dialog>
<div v-if="formData.contract_cate == 1 && showDialog1">
@ -192,10 +192,8 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { useDictData } from "@/hooks/useDictOptions"
// const { dictData } = useDictData('tax_rate ')
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('invoice_type,contract_type,tax_rate')
const protype = reactive([])
const base_url = configs.baseUrl + configs.urlPrefix
@ -210,7 +208,6 @@ const contract_no = ref('')
const supplier_name = ref('')
const supplier_code = ref('')
const userInfo = userStore.userInfo
// console.log(dictData, '222222')
//
const handleAvatarSuccess_four = (
response,
@ -243,15 +240,13 @@ const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined)
}
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
const props = defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
@ -285,8 +280,8 @@ const customEvent1 = (e: any) => {
//Name
const getTaxValue = (value) => {
let i = props.dictData.tax_rate.findIndex((item) => item.value == value)
return (props.dictData.tax_rate[i]?.name / 100) || 0
let i = dictData.tax_rate.findIndex((item) => item.value == value)
return (dictData.tax_rate[i]?.name / 100) || 0
}
//

View File

@ -28,7 +28,7 @@
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<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"
@ -234,19 +234,19 @@
</el-row>
</el-form>
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择供应商" width="70%">
<suppliertable @customEvent="customEvent1"></suppliertable>
</el-dialog>
<div v-if="showDialog2">
<el-dialog v-model="showDialog2" title="选择产品" width="70%">
<prodctTable @customEvent="customEvent2" :project_id="formData.project_id"></prodctTable>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
</div>
<el-dialog v-model="showDialog1" title="选择供应商" width="70%">
<suppliertable @customEvent="customEvent1" :project_id="project?.id || ''"></suppliertable>
</el-dialog>
<div v-if="showDialog2">
<el-dialog v-model="showDialog2" title="选择产品" width="70%">
<prodctTable @customEvent="customEvent2" :project_id="formData.project_id"></prodctTable>
</el-dialog>
</div>
</popup>
</div>
</template>
@ -256,6 +256,7 @@ import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectTable from '@/components/project/index.vue'
import suppliertable from '@/components/supplier/index.vue'
import { useDictData } from '@/hooks/useDictOptions'
import prodctTable from '@/components/Materialprocurement_details/index.vue'
const list1 = reactive([])
const list2 = reactive([])
@ -264,15 +265,12 @@ import { getAll } from '@/api/org/organization'
import { paymentplanLists } from '@/api/paymentplan'
import { apiProcurementContractDetailLists } from '@/api/procurement_contract_detail'
import { apiProcurementContractAdd, apiProcurementContractEdit, apiProcurementContractDetail } from '@/api/procurement_contract'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
const { dictData } = useDictData('procurement_contract_type,pay_type,tax_rate,account_period,pay_period')
let props = defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
},
project: Object
})
console.log(props.project, "project")
import { toChinesNum } from "@/utils/util";
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
@ -443,18 +441,20 @@ const customEvent = (e: any) => {
project_code.value = e.project_code
showDialog.value = false;
materialList.splice(0, 9999)
};
const customEvent1 = (e: any) => {
if (props.project) customEvent(props.project)
const customEvent1 = (e: any) => {
formData.supplier_id = e.id;
supplier_code.value = e.supplier_code
supplier_name.value = e.supplier_name
showDialog1.value = false;
};
const customEvent2 = (e: any) => {
materialList.push({
'material_purchase_request_detail_id': e.id,
'material_name': e.material_name,
@ -465,13 +465,14 @@ const customEvent2 = (e: any) => {
'material_specs': e.material_specs,
});
showDialog2.value = false;
console.log(e, 'e')
}
//Name
const getTaxValue = (value) => {
let i = props.dictData.tax_rate.findIndex((item) => item.value == value)
return (1 - props.dictData.tax_rate[i]?.name / 100) || 0
let i = dictData.tax_rate.findIndex((item) => item.value == value)
return (1 - dictData.tax_rate[i]?.name / 100) || 0
}
//

View File

@ -84,7 +84,6 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiProcurementContractLists, apiProcurementContractDelete, apiProcurementContractDetail } from '@/api/procurement_contract'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import { apiProjectLists } from '@/api/project'
import { apisupplierLists } from '@/api/suppler_list'

View File

@ -0,0 +1,155 @@
<template>
<el-tabs v-model="active" class="demo-tabs">
<el-tab-pane label="项目人员" name="first-1">
<myTable :baseData="baseData" v-if="active == 'first-1'"></myTable>
</el-tab-pane>
<el-tab-pane label="劳动合同" name="first-2">
<myTable :baseData="baseData5" v-if="active == 'first-2'"></myTable>
</el-tab-pane>
<el-tab-pane label="保险记录" name="first-3">
<myTable :baseData="baseData1" v-if="active == 'first-3'"></myTable>
</el-tab-pane>
<el-tab-pane label="项目考勤" name="first-4">
<myTable :baseData="baseData2" v-if="active == 'first-4'"></myTable>
</el-tab-pane>
<el-tab-pane label="考勤明细" name="first-5">
<myTable :baseData="baseData3" v-if="active == 'first-5'"></myTable>
</el-tab-pane>
<el-tab-pane label="工资付款" name="first-6">
<myTable :baseData="baseData4" v-if="active == 'first-6'"></myTable>
</el-tab-pane>
</el-tabs>
</template>
<script setup>
import { ref, reactive, defineProps } from "vue"
import myTable from "./myTable.vue"
import { projectpersonnelLists } from '@/api/project_personnel'
import { projectlaborcontractLists } from '@/api/project_labor_contract'
import { insurancemanagementLists } from '@/api/project_insurance_management'
import { attendanceRecordLists } from '@/api/project_attendance_record'
import { attendancedetailLists } from '@/api/project_attendance_detail'
import { projectsalaryDetailLists } from '@/api/project_salary_detail'
const active = ref('first-1')
const props = defineProps({
project_id: Number
})
const baseData = reactive({
fetchFun: projectpersonnelLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '姓名', prop: 'name' },
{ label: '身份证号', prop: 'idcard' },
{ label: '手机号', prop: 'mobile' },
{ label: '工种', prop: 'work_type_text' },
{ label: '人工单价', prop: 'unit_price' },
{ label: '每日生活费', prop: 'price' },
{ label: '期初收入', prop: 'opening_income' },
{ label: '日结收入', prop: 'daily_income' },
{ label: '完工量收入', prop: 'work_income' },
{ label: '总收入', prop: 'total_income' },
{ label: '总支出', prop: 'pay_out' },
{ label: '余额', prop: 'balance' },
]
})
const baseData1 = reactive({
fetchFun: insurancemanagementLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '姓名', prop: 'project_name' },
{ label: '身份证号', prop: 'person_idcard' },
{ label: '投保日期', prop: 'insurance_date' },
{ label: '到期日期', prop: 'due_date' },
{ label: '保险种类', prop: 'type_text' },
{ label: '保单号', prop: 'insurance_no' },
{ label: '投保金额(万元)', prop: 'insured_amount' },
{ label: '保险公司', prop: 'insurance_company' },
]
})
const baseData2 = reactive({
fetchFun: attendanceRecordLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '日记工单号', prop: 'attendance_code' },
{ label: '日期', prop: 'attendance_date' },
{ label: '出勤人数', prop: 'competitor_contacts_phone' },
{ label: '记工数量', prop: 'work_record_num_total' },
{ label: '日工资合计', prop: 'daily_salary_total' },
{ label: '日生活费合计', prop: 'daily_living_total' },
{ label: '日补贴合计', prop: 'daily_subsidy_total' },
{ label: '日其它合计', prop: 'daily_other_total' },
{ label: '日收入合计', prop: 'daily_income_total' },
{ label: '备注', prop: 'remark' },
]
})
const baseData3 = reactive({
fetchFun: attendancedetailLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '日记工单号', prop: 'attendance_code' },
{ label: '日期', prop: 'attendance_date' },
{ label: '姓名', prop: 'person_name' },
{ label: '身份证号', prop: 'person_idcard' },
{ label: '工种', prop: 'work_type_text' },
{ label: '上班时间', prop: 'work_start_time' },
{ label: '下班时间', prop: 'work_end_time' },
{ label: '记工数量', prop: 'work_record_num' },
{ label: '日工资', prop: 'daily_salary' },
{ label: '日生活费', prop: 'daily_living' },
{ label: '日补贴', prop: 'daily_subsidy' },
{ label: '日其它', prop: 'daily_other' },
{ label: '日收入', prop: 'daily_income' },
{ label: '备注', prop: 'remark' },
]
})
const baseData4 = reactive({
fetchFun: projectsalaryDetailLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '工资付款单号', prop: 'payment_code' },
{ label: '日期', prop: 'apply_date' },
{ label: '姓名', prop: 'person_name' },
{ label: '身份证号', prop: 'person_idcard' },
{ label: '工种', prop: 'person_work_type_text' },
{ label: '总收入', prop: 'total_income' },
{ label: '总支出', prop: 'total_pay_out' },
{ label: '未发放', prop: 'balance' },
{ label: '本次付款金额', prop: 'apply_amount' },
{ label: '备注', prop: 'remark' },
]
})
const baseData5 = reactive({
fetchFun: projectlaborcontractLists,
tit: "",
queryParams: { project_id: props.project_id },
columnList: [
{ label: '项目名称', prop: 'project_name' },
{ label: '身份证号', prop: 'person_idcard' },
{ label: '合同状态', prop: 'contract_status_text' },
{ label: '合同类别', prop: 'contract_type_text' },
{ label: '合同名称', prop: 'contract_title_text' },
{ label: '合同签定日期', prop: 'signing_date' },
{ label: '起始时间', prop: 'start_date' },
{ label: '终止时间', prop: 'end_date' },
]
})
</script>

View File

@ -95,112 +95,6 @@ const popupRef = shallowRef<InstanceType<typeof Popup>>()
const pager12 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager13 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager14 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager15 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager16 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager17 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager18 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager21 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager22 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager23 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager24 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager25 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager26 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager27 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager28 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager29 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager30 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager31 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
const pager32 = reactive({
page_size: 10,
page_no: 1,
project_id: ""
})
//
const formData = reactive({

View File

@ -6,7 +6,7 @@
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
<el-input v-model="project_name" 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">
@ -85,29 +85,23 @@
<el-input v-model="formData.daily_income" type="number" clearable placeholder="请输入日收入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
</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%">
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
<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%">
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
</el-dialog>
</div>
</popup>
</div>
</template>
@ -118,13 +112,11 @@ import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import { attendancedetailAdd, attendancedetailEdit, attendancedetailDetail } from '@/api/project_attendance_detail'
import customDialog from '@/components/project_personnel/index.vue'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
let props = defineProps({
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
@ -142,8 +134,26 @@ import useUserStore from "@/stores/modules/user";
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const formDataannex = reactive([])
import feedback from '@/utils/feedback'
const userInfo = userStore.userInfo
//
const formData = reactive({
id: '',
project_id: '',
person_id: '',
attendance_date: '',
work_start_time: '',
work_end_time: '',
work_record_num: '',
daily_salary: '',
daily_living: '',
daily_subsidy: '',
daily_other: '',
daily_income: '',
remark: '',
people: "",
person_name: ""
})
//
const customEvent = (e) => {
formData.project_id = e.id
@ -154,8 +164,11 @@ const customEvent = (e) => {
showDialog.value = false
formData.people = ''
console.log(people.value, "name")
}
if (props.project) customEvent(props.project);
const customEvent1 = (e) => {
formData.person_id = e.id
formData.people = e.name
@ -187,25 +200,6 @@ const handleAvatarSuccess_four = (
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formData = reactive({
id: '',
project_id: '',
person_id: '',
attendance_date: '',
work_start_time: '',
work_end_time: '',
work_record_num: '',
daily_salary: '',
daily_living: '',
daily_subsidy: '',
daily_other: '',
daily_income: '',
remark: '',
people: "",
person_name: ""
})
//

View File

@ -66,8 +66,6 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { attendancedetailLists, attendancedetailDelete, attendancedetailDetail } from '@/api/project_attendance_detail'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'

View File

@ -6,7 +6,7 @@
<el-col :span="24">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
<el-input v-model="project_name" clearable placeholder="请输入项目名称" :disabled="project" />
</el-form-item> </el-col>
<el-col :span="24">
<el-form-item label="项目编码" prop="project_id">
@ -135,17 +135,17 @@
</el-table-column>
</el-table>
</div>
<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%">
<projectPersonnel @customEvent="customEvent1" :project_id="formData.project_id"></projectPersonnel>
</el-dialog>
</div>
</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%">
<projectPersonnel @customEvent="customEvent1" :project_id="formData.project_id"></projectPersonnel>
</el-dialog>
</div>
</div>
</template>
@ -160,12 +160,21 @@ import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { watch } from "vue"
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
let props = defineProps({
project: Object
})
//
const formData = reactive({
id: '',
project_id: '',
attendance_date: '',
remark: '',
file: '',
attendance_detail: [{}],
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
@ -200,6 +209,7 @@ const customEvent = (e) => {
}
if (props.project) customEvent(props.project);
let rowIndex = 0
@ -239,16 +249,6 @@ const handleAvatarSuccess_four = (
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formData = reactive({
id: '',
project_id: '',
attendance_date: '',
remark: '',
file: '',
attendance_detail: [{}],
})
//

View File

@ -40,9 +40,6 @@
<el-table-column label="日补贴合计" prop="daily_subsidy_total" show-overflow-tooltip />
<el-table-column label="日其它合计" prop="daily_other_total" show-overflow-tooltip />
<el-table-column label="日收入合计" prop="daily_income_total" show-overflow-tooltip />
<el-table-column label="备注" prop="invoice_no" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_attendance_record/edit']" type="primary" link
@ -75,8 +72,6 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { attendanceRecordLists, attendanceRecordDelete, attendanceRecordDetail } from '@/api/project_attendance_record'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'

View File

@ -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 { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'

View File

@ -2,9 +2,7 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="项目id" prop="project_id">
<el-input class="w-[280px]" v-model="queryParams.project_id" clearable placeholder="请输入项目id" />
</el-form-item>
<el-form-item label="费用预算单号" prop="cost_budget_code">
<el-input class="w-[280px]" v-model="queryParams.cost_budget_code" clearable placeholder="请输入费用预算单号" />
</el-form-item>
@ -56,7 +54,7 @@
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
@ -68,7 +66,6 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiProjectCostBudgetLists, apiProjectCostBudgetDelete } from '@/api/project_cost_budget'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'

View File

@ -22,7 +22,7 @@
</el-form-item></el-col><el-col :span="12">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<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="12">
<el-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
@ -68,9 +68,9 @@
</el-radio>
</el-radio-group>
</el-form-item></el-col><el-col :span="12">
<el-form-item label="技术人员id" prop="technician">
<el-form-item label="技术人员" prop="technician">
<el-select class="flex-1" v-model="formData.technician" clearable placeholder="请输入技术人员">
<el-select class="flex-1" v-model="formData.technician" clearable placeholder="点击选择技术人员">
<el-option v-for="(item, index) in jlist" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
@ -105,22 +105,20 @@
</el-col>
</el-row>
</el-form>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
</el-dialog>
</div>
<div v-if="showDialog2">
<el-dialog v-model="showDialog2" title="选择联系人" width="70%">
<contactsTable @customEvent="customEvent2" :custom_id="customid"></contactsTable>
</el-dialog>
</div>
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择需求" width="70%">
<customerdemand @customEvent="customEvent1" :productid="formData.project_id"></customerdemand>
</el-dialog>
</div>
<div v-if="showDialog2">
<el-dialog v-model="showDialog2" title="选择联系人" width="70%">
<contactsTable @customEvent="customEvent2" :custom_id="customid"></contactsTable>
</el-dialog>
</div>
</div>
</template>
@ -131,17 +129,15 @@ import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import projectTable from "@/components/project/index.vue"
import contactsTable from "@/components/contacts/index.vue"
import { useDictData } from '@/hooks/useDictOptions'
import { getAdminsByDept } from '@/api/common'
import { apiProjectEstimateAdd, apiProjectEstimateEdit, apiProjectEstimateDetail } from '@/api/project_estimate'
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 { dictData } = useDictData('estimate_source,invoice_type')
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
@ -183,12 +179,30 @@ const handleAvatarSuccess_four = (
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formData = reactive({
id: '',
org_id: '',
dept_id: '',
project_id: '',
customer_demand_id: '',
estimate_source: '',
create_user: '',
quotation_date: '',
invoice_type: '',
technician: '',
estimate_amount: '',
ask: '',
annex: [],
contact_id: ''
})
// dialog
const showDialog = ref(false)
const showDialog1 = ref(false)
const showDialog2 = ref(false)
const customEvent = (e: any) => {
formData.project_id = e.id;
customid.value = e.custom_id
@ -199,6 +213,15 @@ const customEvent = (e: any) => {
.value = e.custom_name;
showDialog.value = false;
};
if (props.project) customEvent(props.project);
const customEvent1 = (e: any) => {
// console.log(e.theme)
formData.customer_demand_id = e.id;
@ -262,23 +285,7 @@ const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目概算' : '新增项目概算'
})
//
const formData = reactive({
id: '',
org_id: '',
dept_id: '',
project_id: '',
customer_demand_id: '',
estimate_source: '',
create_user: '',
quotation_date: '',
invoice_type: '',
technician: '',
estimate_amount: '',
ask: '',
annex: [],
contact_id: ''
})
//

View File

@ -6,11 +6,12 @@
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="project_code" clearable placeholder="请输入项目编码" @click="showDialog = true" />
<el-input v-model="project_code" clearable placeholder="请输入项目编码" @click="showDialog = true"
:disabled="project" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
<el-input v-model="project_name" clearable placeholder="请输入项目名称" disabled />
</el-form-item> </el-col>
<el-col :span="8">
@ -21,7 +22,7 @@
<el-col :span="8">
<el-form-item label="身份证号" prop="project_person_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="idcard" clearable placeholder="系统自动填写" />
<el-input v-model="idcard" clearable placeholder="系统自动填写" disabled />
</el-form-item> </el-col>
<el-col :span="8">
@ -96,16 +97,15 @@
</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%">
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
<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%">
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
</el-dialog>
</div>
</popup>
</div>
</template>
@ -115,19 +115,16 @@ import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import { insurancemanagementAdd, insurancemanagementEdit, insurancemanagementDetail } from '@/api/project_insurance_management'
import customDialog from '@/components/project_personnel/index.vue'
import { timeFormat } from '@/utils/util'
import { useDictData } from '@/hooks/useDictOptions'
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')
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
const showDialog = ref(false)
const showDialog1 = ref(false)
const project_name = ref('')
@ -140,8 +137,26 @@ import useUserStore from "@/stores/modules/user";
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const formDataannex = reactive([])
import feedback from '@/utils/feedback'
const userInfo = userStore.userInfo
//
const formData = reactive({
id: '',
project_id: '',
project_person_id: '',
insurance_date: '',
due_date: '',
type: '',
insurance_no: '',
insurance: '',
insured_amount: '',
insurance_company: '',
insurance_detail: '',
invoice_no: '',
handler: '',
annex: [],
})
//
const customEvent = (e) => {
formData.project_id = e.id
@ -151,6 +166,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
@ -181,23 +199,6 @@ const handleAvatarSuccess_four = (
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formData = reactive({
id: '',
project_id: '',
project_person_id: '',
insurance_date: '',
due_date: '',
type: '',
insurance_no: '',
insurance: '',
insured_amount: '',
insurance_company: '',
insurance_detail: '',
invoice_no: '',
handler: '',
annex: [],
})
//

View File

@ -31,7 +31,8 @@
</template>
新增
</el-button>
<el-button v-perms="['project.project_insurance_management/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
<el-button v-perms="['project.project_insurance_management/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
@ -43,16 +44,11 @@
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="姓名" prop="person_name" show-overflow-tooltip />
<el-table-column label="身份证号" prop="person_idcard" show-overflow-tooltip />
<el-table-column label="投保日期" prop="insurance_date" show-overflow-tooltip />
<el-table-column label="到期日期" prop="due_date" show-overflow-tooltip />
<el-table-column label="保险种类" prop="type" show-overflow-tooltip />
<el-table-column label="保单号" prop="insurance_no" show-overflow-tooltip />
<el-table-column label="保费(元)" prop="insurance" show-overflow-tooltip />
<el-table-column label="投保金额(万元)" prop="insured_amount" show-overflow-tooltip />
<el-table-column label="保险公司" prop="insurance_company" show-overflow-tooltip />
<el-table-column label="保单明细" prop="insurance_detail" show-overflow-tooltip />
@ -73,13 +69,16 @@
<!-- <el-table-column label="人员标识" prop="per_daily_living" show-overflow-tooltip /> -->
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_insurance_management/edit']" type="primary" link @click="handleEdit(row)">
<el-button v-perms="['project.project_insurance_management/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project_insurance_management/delete']" type="danger" link @click="handleDelete(row.id)">
<el-button v-perms="['project.project_insurance_management/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project_insurance_management/detail']" link @click="handledetail(row)">
<el-button v-perms="['project.project_insurance_management/detail']" link
@click="handledetail(row)">
详情
</el-button>

View File

@ -45,8 +45,7 @@ import { apiProjectLaborBudgetDetailAdd, apiProjectLaborBudgetDetailEdit, apiPro
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import projectDialog from "@/components/project_labor_budget/index.vue"
import { projectjobtypeLists } from "@/api/project_job_type.ts ";
import { projectjobtypeLists } from "@/api/project_job_type.ts";
defineProps({
dictData: {

View File

@ -6,11 +6,12 @@
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input class="w-[220px]" v-model="project_name" clearable placeholder="请输入项目名称" />
<el-input class="w-[220px]" v-model="project_name" clearable placeholder="请输入项目名称"
:disabled="project" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id">
<el-input class="w-[220px]" v-model="project_code" clearable placeholder="请输入项目编码" />
<el-input class="w-[220px]" v-model="project_code" clearable placeholder="请输入项目编码" disabled />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="姓名" prop="project_person_id" @click="showDialog1 = true"
@ -116,15 +117,16 @@
</el-col>
</el-row>
</el-form>
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent" :is_budget="1"></projectDialog>
</el-dialog>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent" :is_budget="1"></projectDialog>
</el-dialog>
</div>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
</el-dialog>
</div>
</popup>
</div>
</template>
@ -137,11 +139,9 @@ import { projectlaborcontractAdd, projectlaborcontractEdit, projectlaborcontract
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>()
@ -160,7 +160,26 @@ import useUserStore from "@/stores/modules/user";
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const formDataannex = reactive([])
import feedback from '@/utils/feedback'
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
//
const formData = reactive({
id: '',
project_id: '',
project_person_id: '',
contract_status: '',
contract_type: '',
contract_title: '',
signing_date: '',
trial_start_date: '',
trial_end_date: '',
start_date: '',
end_date: '',
release_time: '',
release_reason: '',
remark: '',
annex: [],
})
//
const customEvent = (e) => {
@ -171,6 +190,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
@ -201,24 +223,7 @@ const handleAvatarSuccess_four = (
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formData = reactive({
id: '',
project_id: '',
project_person_id: '',
contract_status: '',
contract_type: '',
contract_title: '',
signing_date: '',
trial_start_date: '',
trial_end_date: '',
start_date: '',
end_date: '',
release_time: '',
release_reason: '',
remark: '',
annex: [],
})
//

View File

@ -42,10 +42,14 @@ const baseData1 = reactive({
tit: "客户需求",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '需求主题', prop: 'project_name' },
{ label: '重要程度', prop: 'custom_name' },
{ label: '记录时间', prop: 'executor' },
{ label: '需求内容', prop: 'theme' },
{ label: '项目名称', prop: 'project_name' },
{ label: '客户名称', prop: 'custom_name' },
{ label: '需求主题', prop: 'theme' },
{ label: '需求提供人', prop: 'supplier' },
{ label: '提供人联系方式', prop: 'supplier_contacts' },
{ label: '重要程度', prop: 'importance_text' },
{ label: '记录时间', prop: 'recording_time' },
{ label: '需求内容', prop: 'demand_content' },
]
})
const baseData2 = reactive({
@ -53,24 +57,32 @@ const baseData2 = reactive({
tit: "解决方案",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '解决方案主题', prop: 'project_name' },
{ label: '提交时间', prop: 'custom_name' },
{ label: '方案内容', prop: 'executor' },
{ label: '客户反馈', prop: 'theme' },
{ label: '项目名称', prop: 'project_name' },
{ label: '客户名称', prop: 'custom_name' },
{ label: '需求名称', prop: 'customer_demand_name' },
{ label: '解决方案主题', prop: 'theme' },
{ label: '提交时间', prop: 'submission_time' },
{ label: '方案内容', prop: 'solution_content' },
{ label: '客户反馈', prop: 'customer_feedback' },
]
})
const baseData3 = reactive({
fetchFun: apiProjectEstimateLists,
tit: "项目概算",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '项目名称', prop: 'project_name' },
{ label: '客户名称', prop: 'custom_name' },
{ label: '需求', prop: 'customer_demand_name' },
{ label: '概算来源', prop: 'estimate_source_text' },
{ label: '制单人', prop: 'create_user' },
{ label: '报价日期', prop: 'quotation_date' },
{ label: '发票类型', prop: 'invoice_type_text' },
{ label: '技术人员', prop: 'technician_name' },
{ label: '概算金额(万元)', prop: 'estimate_amount' },
{ label: '要求', prop: 'ask' },
{ label: '概算金额', prop: 'estimate_amount' },
]
})
@ -79,17 +91,16 @@ const baseData4 = reactive({
tit: "竞争对手",
queryParams: { project_id: props.project.id },
columnList: [
{ label: '项目名称', prop: 'project_name' },
{ label: '客户名称', prop: 'custom_name' },
{ label: '客户需求', prop: 'customer_demand_name' },
{ label: '竞争对手名称', prop: 'competitor_name' },
{ label: '竞争对手联系人', prop: 'competitor_contacts' },
{ label: '联系人电话', prop: 'competitor_contacts_phone' },
{ label: '竞争能力', prop: 'competitive_power' },
{ label: '竞争对手优势', prop: 'competitor_advantages' },
{ label: '竞争对手劣势', prop: 'competitor_disadvantages' },
{ label: '备注', prop: 'remark' },
]
})
</script>
<style lang="scss">
.tit {

View File

@ -1,8 +1,8 @@
<template>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData1"></myTable>
<myTable :baseData="baseData2"></myTable>
<myTable :baseData="baseData3"></myTable>
<myTable :baseData="baseData" :project="project" editPath="InvoicingRequests"></myTable>
<myTable :baseData="baseData1" :project="project" editPath="remittance"></myTable>
<myTable :baseData="baseData2" :project="project" editPath="recordsPayment"></myTable>
<myTable :baseData="baseData3" :project="project" editPath="refund"></myTable>
</template>
<script setup>
@ -13,35 +13,30 @@ import { apiinvoiceapplyLists } from '@/api/InvoicingRequests'
import { apireturnedLists } from '@/api/remittance'
import { apireturnedrecordLists } from '@/api/recordsPayment'
import { apirefundapplyLists } from '@/api/refund'
import EditPopup from '@/views/project_follow_up/edit.vue'
const props = defineProps({
project_id: Number,
components: EditPopup
project: Object,
})
const baseData = reactive({
fetchFun: apiinvoiceapplyLists,
tit: "开票记录",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '开票单号', prop: 'invoicing_code' },
{ label: '合同编号', prop: 'contract_code' },
{ label: '合同名称', prop: 'contract_name' },
{ label: '客户', prop: 'custom_name' },
{ label: '项目编码', prop: 'project_code' },
{ label: '项目名称', prop: 'project_name' },
{ label: '开票日期', prop: 'invoicing_date' },
{ label: '期次', prop: 'period' },
{ label: '发票类型', prop: 'invoice_type' },
{ label: '发票编号', prop: 'tax' },
{ label: '开票金额(含税)', prop: 'amount_including_tax' },
{ label: '开票金额(含税)', prop: 'invoicing_amount' },
{ label: '税率', prop: 'tax_rate' },
{ label: '税额', prop: 'tax_amount' },
]
})
const baseData1 = reactive({
fetchFun: apireturnedLists,
tit: "回款计划",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '合同编号', prop: 'contract_code' },
{ label: '合同名称', prop: 'contract_name' },
@ -59,7 +54,7 @@ const baseData1 = reactive({
const baseData2 = reactive({
fetchFun: apireturnedrecordLists,
tit: "回款记录",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '合同名称', prop: 'contract_name' },
{ label: '合同编号', prop: 'contract_code' },
@ -73,7 +68,7 @@ const baseData2 = reactive({
const baseData3 = reactive({
fetchFun: apirefundapplyLists,
tit: "退款记录",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '退款单号', prop: 'refund_code' },
{ label: '合同编号', prop: 'contract_code' },

View File

@ -1,6 +1,6 @@
<template>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData1"></myTable>
<myTable :baseData="baseData" :project="project" editPath="contract"></myTable>
<myTable :baseData="baseData1" :project="project" editPath="contract_negotiation"></myTable>
</template>
<script setup>
@ -9,15 +9,14 @@ import { apiContractLists } from '@/api/contract'
import { apiContractNegotiationLists } from '@/api/contract_negotiation'
import myTable from "./myTable.vue"
const props = defineProps({
project_id: Number
project: Object
})
const baseData = reactive({
fetchFun: apiContractLists,
tit: "主合同",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '合同编号', prop: 'contract_name' },
{ label: '合同名称', prop: 'contract_code' },
@ -37,7 +36,7 @@ const baseData = reactive({
const baseData1 = reactive({
fetchFun: apiContractNegotiationLists,
tit: "合同洽商",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '洽商编号', prop: 'negotiation_no' },
{ label: '洽商单名称', prop: 'negotiation_name' },

View File

@ -2,22 +2,28 @@
<el-tabs v-model="active" class="demo-tabs">
<el-tab-pane label="项目人员" name="first-1">
<myTable :baseData="baseData" v-if="active == 'first-1'"></myTable>
<myTable :baseData="baseData" v-if="active == 'first-1'" :project="project" editPath="project_personnel">
</myTable>
</el-tab-pane>
<el-tab-pane label="劳动合同" name="first-2">
<myTable :baseData="baseData5" v-if="active == 'first-2'"></myTable>
<myTable :baseData="baseData5" v-if="active == 'first-2'" :project="project" editPath="project_labor_contract">
</myTable>
</el-tab-pane>
<el-tab-pane label="保险记录" name="first-3">
<myTable :baseData="baseData1" v-if="active == 'first-3'"></myTable>
<myTable :baseData="baseData1" v-if="active == 'first-3'" :project="project"
editPath="project_insurance_management"></myTable>
</el-tab-pane>
<el-tab-pane label="项目考勤" name="first-4">
<myTable :baseData="baseData2" v-if="active == 'first-4'"></myTable>
<myTable :baseData="baseData2" v-if="active == 'first-4'" :project="project"
editPath="project_attendance_record"></myTable>
</el-tab-pane>
<el-tab-pane label="考勤明细" name="first-5">
<myTable :baseData="baseData3" v-if="active == 'first-5'"></myTable>
<myTable :baseData="baseData3" v-if="active == 'first-5'" :project="project"
editPath="project_attendance_detail"></myTable>
</el-tab-pane>
<el-tab-pane label="工资付款" name="first-6">
<myTable :baseData="baseData4" v-if="active == 'first-6'"></myTable>
<myTable :baseData="baseData4" v-if="active == 'first-6'" :project="project" editPath="project_salary_payment">
</myTable>
</el-tab-pane>
</el-tabs>
</template>
@ -35,13 +41,13 @@ import { projectsalaryDetailLists } from '@/api/project_salary_detail'
const active = ref('first-1')
const props = defineProps({
project_id: Number
project: Object
})
const baseData = reactive({
fetchFun: projectpersonnelLists,
tit: "",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '姓名', prop: 'name' },
{ label: '身份证号', prop: 'idcard' },
@ -61,16 +67,22 @@ const baseData = reactive({
const baseData1 = reactive({
fetchFun: insurancemanagementLists,
tit: "",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '姓名', prop: 'project_name' },
{ label: '项目编码', prop: 'project_code' },
{ label: '项目名称', prop: 'project_name' },
{ label: '姓名', prop: 'person_name' },
{ label: '身份证号', prop: 'person_idcard' },
{ label: '投保日期', prop: 'insurance_date' },
{ label: '到期日期', prop: 'due_date' },
{ label: '保险种类', prop: 'type_text' },
{ label: '保险种类', prop: 'type' },
{ label: '保单号', prop: 'insurance_no' },
{ label: '保费(元)', prop: 'insurance' },
{ label: '投保金额(万元)', prop: 'insured_amount' },
{ label: '保险公司', prop: 'insurance_company' },
{ label: '保单明细', prop: 'insurance_detail' },
{ label: '发票编号', prop: 'invoice_no' },
{ label: '经办人', prop: 'handler' },
]
})
@ -78,7 +90,7 @@ const baseData1 = reactive({
const baseData2 = reactive({
fetchFun: attendanceRecordLists,
tit: "",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '日记工单号', prop: 'attendance_code' },
{ label: '日期', prop: 'attendance_date' },
@ -97,7 +109,7 @@ const baseData2 = reactive({
const baseData3 = reactive({
fetchFun: attendancedetailLists,
tit: "",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '日记工单号', prop: 'attendance_code' },
{ label: '日期', prop: 'attendance_date' },
@ -120,7 +132,7 @@ const baseData3 = reactive({
const baseData4 = reactive({
fetchFun: projectsalaryDetailLists,
tit: "",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '工资付款单号', prop: 'payment_code' },
{ label: '日期', prop: 'apply_date' },
@ -139,7 +151,7 @@ const baseData4 = reactive({
const baseData5 = reactive({
fetchFun: projectlaborcontractLists,
tit: "",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '项目名称', prop: 'project_name' },
{ label: '身份证号', prop: 'person_idcard' },

View File

@ -10,7 +10,7 @@
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="handleAdd"> 添加</el-dropdown-item>
<el-dropdown-item @click="handleAdd">添加</el-dropdown-item>
<el-dropdown-item> 编辑</el-dropdown-item>
<el-dropdown-item> 删除</el-dropdown-item>
<el-dropdown-item> 导出</el-dropdown-item>
@ -51,9 +51,7 @@ const handleAdd = async () => {
showEdit.value = true
setTimeout(() => {
editRef.value?.open('add')
console.log("执行了点击")
}, 100);
}, 700);
}
//

View File

@ -1,8 +1,8 @@
<template>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData1"></myTable>
<myTable :baseData="baseData2"></myTable>
<myTable :baseData="baseData3"></myTable>
<myTable :baseData="baseData" :project="project" editPath="finance_receipt_record"></myTable>
<myTable :baseData="baseData1" :project="project" editPath="finance_payment_plan"></myTable>
<myTable :baseData="baseData2" :project="project" editPath="procurement_contract"></myTable>
<myTable :baseData="baseData3" :project="project" editPath="procurement_contract"></myTable>
</template>
<script setup>
@ -15,13 +15,13 @@ import { paymentapplyLists } from '@/api/paymentrequest'
import { apiFinancerefundLists } from '@/api/refundrecord'
const props = defineProps({
project_id: Number
project: Object
})
const baseData = reactive({
fetchFun: apifinancereceiptLists,
tit: "收票记录",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '开票日期', prop: 'invoicing_date' },
{ label: '提交人', prop: 'commitor' },
@ -37,23 +37,25 @@ const baseData = reactive({
const baseData1 = reactive({
fetchFun: paymentplanLists,
tit: "付款计划",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '供应商名称', prop: 'supplier_name' },
{ label: '项目名称', prop: 'project_name' },
{ label: '合同编号', prop: 'contract_no' },
{ label: '计划付款日期', prop: 'pay_date' },
{ label: '期次', prop: 'period' },
{ label: '状态', prop: 'status' },
{ label: '金额', prop: 'amount' },
{ label: '期次', prop: 'pay_period_text' },
{ label: '状态', prop: 'pay_status_text' },
{ label: '已付款', prop: 'has_payment_amount' },
{ label: '未付款', prop: 'not_payment_amoun' },
{ label: '备注', prop: 'amount_excluding_tax' },
{ label: '税额', prop: 'remark' },
]
{ label: '未付款', prop: 'not_payment_amount' },
{ label: '备注', prop: 'remark' },
],
})
const baseData2 = reactive({
fetchFun: paymentapplyLists,
tit: "付款记录",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '付款单号', prop: 'competitor_name' },
{ label: '合同编号', prop: 'contract_no' },
@ -71,7 +73,7 @@ const baseData2 = reactive({
const baseData3 = reactive({
fetchFun: apiFinancerefundLists,
tit: "退款记录",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '合同编号', prop: 'contract_no' },
{ label: '合同名称', prop: 'contract_name' },

View File

@ -1,5 +1,5 @@
<template>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData" :project="project" editPath="procurement_contract"></myTable>
</template>
<script setup>
@ -9,14 +9,14 @@ import myTable from "./myTable.vue"
import { apiProcurementContractLists } from '@/api/procurement_contract'
const props = defineProps({
project_id: Number
project: Object
})
const baseData = reactive({
fetchFun: apiProcurementContractLists,
tit: "采购合同",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '合同编号', prop: 'contract_no' },

View File

@ -1,6 +1,6 @@
<template>
<myTable :baseData="baseData"></myTable>
<myTable :baseData="baseData1"></myTable>
<myTable :baseData="baseData" :project="project" editPath="subcontracting_contract"></myTable>
<myTable :baseData="baseData1" :project="project" editPath="subcontracting_contract_negotiation"></myTable>
</template>
<script setup>
@ -11,13 +11,13 @@ import { apiSubcontractingContractLists } from '@/api/subcontracting_contract'
import { apinegotiationLists } from '@/api/subcontractor'
const props = defineProps({
project_id: Number
project: Object
})
const baseData1 = reactive({
fetchFun: apinegotiationLists,
tit: "分包洽商",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '洽商编号', prop: 'negotiation_no' },
@ -36,7 +36,7 @@ const baseData1 = reactive({
const baseData = reactive({
fetchFun: apiSubcontractingContractLists,
tit: "分包合同",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '项目名称', prop: 'project_name' },

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="bid_bidding_decision"></myTable>
<myTable :baseData="baseData1" :project="project" editPath="bid_document_examination"></myTable>
<myTable :baseData="baseData2" :project="project" editPath="bid_result"></myTable>
<myTable :baseData="baseData3" :project="project" editPath="bidbbond"></myTable>
<myTable :baseData="baseData4" :project="project" editPath="refundbidDeposit"></myTable>
</template>
<script setup>
@ -18,7 +18,7 @@ import { bidrefundLists } from '@/api/refundbidDeposit'
import myTable from "./myTable.vue"
const props = defineProps({
project_id: Number
project: Object
})
@ -26,7 +26,7 @@ const props = defineProps({
const baseData = reactive({
fetchFun: apiBidBiddingDecisionLists,
tit: "投标决策",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '流程编号', prop: 'code' },
{ label: '项目估算(万元)', prop: 'project_estimation' },
@ -43,7 +43,7 @@ const baseData = reactive({
const baseData1 = reactive({
fetchFun: apiBidDocumentExaminationLists,
tit: "标书审查",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '流程编号', prop: 'code' },
{ label: '标书编号', prop: 'bid_document_no' },
@ -57,7 +57,7 @@ const baseData1 = reactive({
const baseData2 = reactive({
fetchFun: apiBidResultLists,
tit: "投标结果",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '投标编号', prop: 'bid_document_examination_code' },
{ label: '投标时间', prop: 'bidding_time' },
@ -71,32 +71,35 @@ const baseData2 = reactive({
const baseData3 = reactive({
fetchFun: bidapplyLists,
tit: "投标保证金",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '流程编号', prop: 'bidding_decision_code' },
{ label: '投标编号', prop: 'security_apply_code' },
{ label: '客户名称', prop: 'custom_name' },
{ label: '项目名称', prop: 'project_name' },
{ label: '投标时间', prop: 'bidding_time' },
{ label: '预计退还时间', prop: 'refund_date' },
{ label: '申请人', prop: 'applier' },
{ label: '保证金金额', prop: 'margin_amount' },
{ label: '已退金额', prop: 'refund_amount' },
{ label: '已退金额', prop: 'has_refund_amount' },
{ label: '未退金额', prop: 'not_refund_amount' },
{ label: '创建日期', prop: 'create_time' },
]
})
const baseData4 = reactive({
fetchFun: bidrefundLists,
tit: "退投标保证金",
queryParams: { project_id: props.project_id },
queryParams: { project_id: props.project.id },
columnList: [
{ label: '投标时间', prop: 'bidding_time' },
{ label: '退款日期', prop: 'refund_date' },
{ label: '账户编码', prop: 'bank_account_info' },
{ label: '开户银行', prop: 'bank_account_info' },
{ label: '退款金额', prop: 'refund_amount' },
{ label: '投标编号', prop: 'bidding_decision_code' },
{ label: '客户名称', prop: 'custom_name' },
{ label: '创建日期', prop: 'create_time' },
{ label: '项目编码', prop: 'project_code' },
{ label: '项目名称', prop: 'project_name' },
{ label: '投标时间', prop: 'refund_date' },
{ label: '退款金额', prop: 'refund_amount' },
{ label: '退款日期', prop: 'refund_date' },
{ label: '备注', prop: 'remark' },
]
})

View File

@ -12,11 +12,11 @@
</el-tab-pane>
<el-tab-pane label="投标" name="demo-3">
<tender v-if="activeName == 'demo-3'" :project_id="project_id"></tender>
<tender v-if="activeName == 'demo-3'" :project="formData"></tender>
</el-tab-pane>
<el-tab-pane label="合同" name="demo-4">
<contract v-if="activeName == 'demo-4'" :project_id="project_id"></contract>
<contract v-if="activeName == 'demo-4'" :project="formData"></contract>
</el-tab-pane>
<el-tab-pane label="预算" name="demo-5">
@ -24,23 +24,23 @@
</el-tab-pane>
<el-tab-pane label="采购" name="demo-8">
<procurement v-if="activeName == 'demo-8'" :project_id="project_id"></procurement>
<procurement v-if="activeName == 'demo-8'" :project="formData"></procurement>
</el-tab-pane>
<el-tab-pane label="分包" name="demo-9">
<subcontract v-if="activeName == 'demo-9'" :project_id="project_id"></subcontract>
<subcontract v-if="activeName == 'demo-9'" :project="formData"></subcontract>
</el-tab-pane>
<el-tab-pane label="人力" name="demo-12">
<manpower v-if="activeName == 'demo-12'" :project_id="project_id"></manpower>
<manpower v-if="activeName == 'demo-12'" :project="formData"></manpower>
</el-tab-pane>
<el-tab-pane label="收款" name="demo-14">
<Collection v-if="activeName == 'demo-14'" :project_id="project_id"></Collection>
<Collection v-if="activeName == 'demo-14'" :project="formData"></Collection>
</el-tab-pane>
<el-tab-pane label="付款" name="demo-15">
<payment v-if="activeName == 'demo-15'" :project_id="project_id"></payment>
<payment v-if="activeName == 'demo-15'" :project="formData"></payment>
</el-tab-pane>
<el-tab-pane label="文档" name="demo-16">
<documentation v-if="activeName == 'demo-16'" :project_id="project_id"></documentation>

View File

@ -179,28 +179,6 @@ const { pager, getLists, resetParams, resetPage } = usePaging({
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apiProjectDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiProjectDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await apiProjectDetail({ id: data.id })
showDtail.value = true

View File

@ -4,17 +4,22 @@
<popup ref="popupRef" title="材料预算详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-descriptions :column="2" border>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="材料预算单号" label-align="left" align="left" label-class-name="my-label"> {{ formData.material_budget_code }}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{ formData.remark
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="材料预算单号" label-align="left" align="left" label-class-name="my-label"> {{
formData.material_budget_code }}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
formData.remark
}}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item" target="_blank">文件{{ index + 1 }}查看</el-link>
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item"
target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
@ -42,7 +47,9 @@
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size" :page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
</div>
</popup>
</div>
@ -172,5 +179,4 @@ defineExpose({
:deep(.my-label) {
width: 150px;
}
</style>
}</style>

View File

@ -9,13 +9,13 @@
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog2 = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_name" clearable readonly placeholder="请输入项目名称" />
<el-input v-model="project_name" clearable readonly placeholder="请输入项目名称" :disabled="project" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_code" clearable readonly placeholder="请输入项目编码" />
<el-input v-model="project_code" clearable placeholder="请输入项目编码" disabled />
</el-form-item>
</el-col>
@ -51,13 +51,14 @@
<el-col :span="8">
<el-form-item label="人工单价" prop="unit_price"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.unit_price" clearable placeholder="请输入人工单价" />
<el-input v-model="formData.unit_price" clearable placeholder="请输入人工单价" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="每日生活费" prop="daily_living_expenses"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.daily_living_expenses" clearable placeholder="请输入每日生活费" />
<el-input v-model="formData.daily_living_expenses" clearable placeholder="请输入每日生活费"
type="number" />
</el-form-item>
</el-col>
@ -116,25 +117,16 @@
</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 documentDialog from '@/components/project_document/index.vue'
import projectDialog from '@/components/project/index.vue'
import { projectpersonnelAdd, projectpersonnelEdit, projectpersonnelDetail } from '@/api/project_personnel'
import { getAllProjectTypes } from '@/api/projecttype'
import { timeFormat } from '@/utils/util'
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import type { PropType } from 'vue'
import { useDictData } from '@/hooks/useDictOptions'
import { projectjobtypeAll } from "@/api/project_job_type.ts"
const { dictData } = useDictData('work_type')
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
let props = defineProps({
project: Object
})
const project_name = ref('')
const project_code = ref('')
@ -142,15 +134,8 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const showDialog2 = ref(false)
const customEvent2 = (e: any) => {
formData.project_id = e.id;
project_name.value = e.name;
project_code.value = e.project_code;
showDialog2.value = false;
};
const allJobType = reactive([])
@ -217,6 +202,14 @@ const formData = reactive({
})
const customEvent2 = (e: any) => {
formData.project_id = e.id;
project_name.value = e.name;
project_code.value = e.project_code;
showDialog2.value = false;
};
if (props.project) customEvent2(props.project)
//
const formRules = reactive<any>({

View File

@ -10,7 +10,8 @@
</el-form-item>
<el-form-item label="工种" prop="work_type">
<el-select v-model="queryParams.work_type" clearable placeholder="请选择工种">
<el-option v-for="(item, index) in dictData.work_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
<el-option v-for="(item, index) in dictData.work_type" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select></el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
@ -25,7 +26,8 @@
</template>
新增
</el-button>
<el-button v-perms="['project.project_document/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
<el-button v-perms="['project.project_document/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
@ -49,10 +51,12 @@
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_document/edit']" type="primary" link @click="handleEdit(row)">
<el-button v-perms="['project.project_document/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project_document/delete']" type="danger" link @click="handleDelete(row.id)">
<el-button v-perms="['project.project_document/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project_document/detail']" link @click="handledetail(row)">
@ -76,8 +80,6 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { projectpersonnelLists, projectpersonnelDelete, projectpersonnelDetail } from '@/api/project_personnel'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'

View File

@ -6,11 +6,12 @@
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_code" clearable placeholder="请选择项目编码" @click="showDialog = true" />
<el-input v-model="project_code" clearable placeholder="请选择项目编码" @click="showDialog = true"
:disabled="project" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="项目名称">
<el-input v-model="project_name" clearable disabled placeholder="系统自动填写" />
<el-input v-model="project_name" clearable placeholder="系统自动填写" disabled />
</el-form-item> </el-col>
<el-col :span="24">
<el-form-item label="付款类型" prop="payment_type">
@ -97,15 +98,16 @@
</el-table>
</div>
</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%">
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
<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%">
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
</el-dialog>
</div>
</popup>
</div>
</template>
@ -130,13 +132,12 @@ const handleAvatarSuccess_four = (response: any) => {
//
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('salary_payment_type')
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
let props = defineProps({
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
@ -151,7 +152,19 @@ const idcard = ref('')
const num = ref(0)
const formDataannex = reactive([])
const paymentlist = reactive([{}])
//
const formData = reactive({
id: '',
project_id: '',
payment_type: '',
apply_date: '',
total_amount: '',
total_amount_uppercase: '',
payment_detail: [],
remark: '',
annex: [],
})
//
const customEvent = (e) => {
formData.project_id = e.id
@ -163,6 +176,10 @@ const customEvent = (e) => {
showDialog.value = false
}
if (props.project) customEvent(props.project);
const customEvent1 = (e) => {
paymentlist[num.value].person_id = e.id
paymentlist[num.value].person_name = e.name
@ -201,19 +218,7 @@ const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑工资付款' : '新增工资付款'
})
//
const formData = reactive({
id: '',
project_id: '',
payment_type: '',
apply_date: '',
total_amount: '',
total_amount_uppercase: '',
payment_detail: [],
remark: '',
annex: [],
})
//
watch(
paymentlist,

View File

@ -92,8 +92,6 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { projectsalarypaymentLists, projectsalarypaymentDelete, projectsalarypaymentDetail } from '@/api/project_salary_payment'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'

View File

@ -46,24 +46,29 @@
{{ formData.settlement_amount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结算金额大写">
{{ formData.settlement_amount_uppercase
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同金额">
{{ formData.contract_amount
}}
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="12">
<el-form-item label="洽商金额">
{{ formData.negotiation_amount
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结算差异">
{{ formData.settlement_difference }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同附件">
<div v-if="formDataannex.length > 0">
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
:href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>

View File

@ -34,8 +34,9 @@
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="结算日期" prop="settlement_date" show-overflow-tooltip />
<el-table-column label="合同金额" prop="contract_amount" show-overflow-tooltip />
<el-table-column label="洽商金额" prop="negotiation_amount" show-overflow-tooltip />
<el-table-column label="结算金额" prop="settlement_amount" show-overflow-tooltip />
<el-table-column label="结算差异" prop="remaining_amount" show-overflow-tooltip />
<el-table-column label="结算差异" prop="settlement_difference" show-overflow-tooltip />
<el-table-column label="添加人" prop="add_user_name" show-overflow-tooltip />
<!-- <el-table-column label="负责人" prop="add_user_name" show-overflow-tooltip /> -->
<el-table-column label="操作" width="160" fixed="right">

View File

@ -45,8 +45,8 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结算金额大写">
{{ formData.settlement_amount_uppercase
<el-form-item label="结算差异">
{{ formData.settlement_difference
}}
</el-form-item>
</el-col>
@ -56,12 +56,18 @@
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="洽商金额">
{{ formData.negotiation_amount
}}
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="合同附件">
<div v-if="formDataannex.length > 0">
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
:href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>

View File

@ -34,8 +34,9 @@
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="结算日期" prop="settlement_date" show-overflow-tooltip />
<el-table-column label="合同金额" prop="contract_amount" show-overflow-tooltip />
<el-table-column label="洽商金额" prop="negotiation_amount" show-overflow-tooltip />
<el-table-column label="结算金额" prop="settlement_amount" show-overflow-tooltip />
<el-table-column label="结算差异" prop="remaining_amount" show-overflow-tooltip />
<el-table-column label="结算差异" prop="settlement_difference" show-overflow-tooltip />
<el-table-column label="添加人" prop="add_user_name" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">

View File

@ -5,8 +5,6 @@
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="合同编号" prop="contract_id" @click="showDialog1 = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
@ -156,18 +154,11 @@
<el-form-item label="账号" prop="account">
<el-input v-model="account" clearable disabled placeholder="请输入开票公司名称" />
</el-form-item>
</el-col>
</el-row>
<!-- <el-dialog v-model="showDialog" title="选择客户" width="70%">
<customDialog @customEvent="customEvent"></customDialog>
</el-dialog> -->
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
<contractDialog @customEvent="customEvent1"></contractDialog>
<contractDialog @customEvent="customEvent1" :project_id="project?.id || ''"></contractDialog>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择银行账户" width="70%">
@ -200,6 +191,8 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('isaccrued,pay_type,invoice_status,pay_period,collection_type')
const protype = reactive([])
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
@ -236,11 +229,8 @@ const handleAvatarSuccess_four = (
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
let props = defineProps({
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()

View File

@ -5,11 +5,15 @@
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true"
<el-form-item label="合同名称" prop="contract_name">
<el-input v-model="contract_name" clearable placeholder="点击选择合同" @click="showDialog1 = true" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="contract_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="project_name" clearable placeholder="请选择项目" />
<el-input v-model="project_name" clearable placeholder="系统自动填写" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
@ -23,11 +27,7 @@
<el-input v-model="contract_no" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同名称" prop="contract_name">
<el-input v-model="contract_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="客户名称" prop="customer_id">
<el-input v-model="custom_name" clearable disabled placeholder="系统自动填写" />
@ -154,7 +154,7 @@
<bankaccountDialog @customEvent="customEvent"></bankaccountDialog>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
<contractDialog @customEvent="customEvent1"></contractDialog>
<contractDialog @customEvent="customEvent1" :project_id="project?.id || ''"></contractDialog>
</el-dialog>
@ -179,6 +179,9 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('refund_type')
const protype = reactive([])
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
@ -192,7 +195,6 @@ const contract_no = ref('')
const custom_name = ref('')
const bank_account_no = ref('')
const userInfo = userStore.userInfo
console.log(userInfo, '222222')
//
const handleAvatarSuccess_four = (
response,
@ -211,11 +213,8 @@ const handleAvatarSuccess_four = (
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
let props = defineProps({
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()

View File

@ -5,11 +5,6 @@
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10">
<!-- <el-col :span="8">
<el-form-item label="客户名称" prop="custom_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="合同编号" prop="contract_id" @click="showDialog1 = true">
@ -104,13 +99,9 @@
</el-row>
<!-- <el-dialog v-model="showDialog" title="选择客户" width="70%">
<customDialog @customEvent="customEvent"></customDialog>
</el-dialog> -->
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
<contractDialog @customEvent="customEvent1"></contractDialog>
<!-- <salescontractDialog @customEvent="customEvent1" :contract_type="2"></salescontractDialog> -->
</el-dialog>
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
@ -135,6 +126,7 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { useDictData } from '@/hooks/useDictOptions'
const protype = reactive([])
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
@ -167,12 +159,14 @@ const handleAvatarSuccess_four = (
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
// defineProps({
// dictData: {
// type: Object as PropType<Record<string, any[]>>,
// default: () => ({})
// }
// })
const { dictData } = useDictData('return_status,pay_period,contract_type')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()

View File

@ -28,7 +28,7 @@
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<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"
@ -224,22 +224,22 @@
</el-table>
</div>
</el-col>
</el-row>
</el-form>
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择供应商" width="70%">
<suppliertable @customEvent="customEvent1"></suppliertable>
</el-dialog>
<div v-if="showDialog2">
<el-dialog v-model="showDialog2" title="选择分包明细" width="70%">
<subpackageTable @customEvent="customEvent2" :project_id="formData.project_id"></subpackageTable>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
</div>
<el-dialog v-model="showDialog1" title="选择供应商" width="70%">
<suppliertable @customEvent="customEvent1" :project_id="project?.id || ''"></suppliertable>
</el-dialog>
<div v-if="showDialog2">
<el-dialog v-model="showDialog2" title="选择分包明细" width="70%">
<subpackageTable @customEvent="customEvent2" :project_id="formData.project_id"></subpackageTable>
</el-dialog>
</div>
</popup>
</div>
</template>
@ -250,28 +250,18 @@ import Popup from '@/components/popup/index.vue'
import projectTable from '@/components/project/index.vue'
import suppliertable from '@/components/supplier/index.vue'
import subpackageTable from '@/components/subpackage_budget_detail/index.vue'
import { useDictData } from '@/hooks/useDictOptions'
const list1 = reactive([])
const list2 = reactive([])
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import { paymentplanLists } from '@/api/paymentplan'
import { apiSubcontractingContractDetailLists } from '@/api/subcontracting_contract_detail'
import { apiSubcontractingContractAdd, apiSubcontractingContractEdit, apiSubcontractingContractDetail } from '@/api/subcontracting_contract'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
let props = defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
},
project: Object
})
import { toChinesNum } from "@/utils/util";
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
@ -296,6 +286,11 @@ import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
const { dictData } = useDictData('divide_contract_type,account_period,tax_rate,pay_type,pay_period ')
//
const handleAvatarSuccess_four = (
response,
@ -326,11 +321,7 @@ const handleDelete = (row: any) => {
const index = paymentList.indexOf(row);
paymentList.splice(index, 1);
};
const handleAdd1 = (row: any) => {
// row
const index = subcontractList.indexOf(row);
subcontractList.splice(index + 1, 0, {});
};
const handleDelete1 = (row: any) => {
// row
@ -354,7 +345,7 @@ const procurementList = (id) => {
'unit': item.unit,
'num': item.num,
'price': item.price,
'tax_rate': props.dictData.tax_rate.find((items) => items.name == item.tax_rate)
'tax_rate': dictData.tax_rate.find((items) => items.name == item.tax_rate)
}))
// console.log(data, props.dictData)
subcontractList.splice(0, subcontractList.length, ...data);
@ -429,6 +420,11 @@ const customEvent = (e: any) => {
project_code.value = e.project_code
showDialog.value = false;
};
if (props.project) customEvent(props.project);
const customEvent1 = (e: any) => {
formData.supplier_id = e.id;
@ -450,8 +446,8 @@ const customEvent2 = (e: any) => {
//Name
const getTaxValue = (value) => {
let i = props.dictData.tax_rate.findIndex((item) => item.value == value)
return (1 - props.dictData.tax_rate[i]?.name / 100) || 0
let i = dictData.tax_rate.findIndex((item) => item.value == value)
return (1 - dictData.tax_rate[i]?.name / 100) || 0
}
//

View File

@ -140,19 +140,15 @@
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn1(index)">x</span>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-dialog v-model="showDialog" title="选择分包合同" width="70%">
<procurementTable @customEvent="customEvent" :project_id="project?.id || ''"></procurementTable>
</el-dialog>
</popup>
<el-dialog v-model="showDialog" title="选择分包合同" width="70%">
<procurementTable @customEvent="customEvent"></procurementTable>
</el-dialog>
</div>
</template>
@ -160,16 +156,14 @@
<script lang="ts" setup name="procurementContractEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { useDictData } from '@/hooks/useDictOptions'
import procurementTable from '@/components/procurement/index.vue'
import { apinegotiationAdd, apinegotiationEdit, apinegotiationDetail } from '@/api/subcontractor'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
const { dictData } = useDictData('negotiation_type')
let props = defineProps({
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
@ -288,6 +282,7 @@ const formData = reactive({
const customEvent = (e: any) => {
contract_no.value = e.contract_no;
supplier_name.value = e.supplier_name;
supplier_code.value = e.supplier_code;
formData.signing_date = e.signing_date;
project_name.value = e.project_name;
formData.subcontracting_contract_id = e.id;

View File

@ -89,8 +89,6 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apinegotiationLists, apinegotiationDelete, apinegotiationDetail } from '@/api/subcontractor'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'