This commit is contained in:
zmj 2024-01-22 19:24:31 +08:00
parent f0e25500d6
commit ef45268da3
18 changed files with 394 additions and 187 deletions

View File

@ -1,3 +1,4 @@
NODE_ENV = 'development' NODE_ENV = 'development'
VITE_APP_BASE_URL = 'https://ceshi-engineering.lihaink.cn/' # VITE_APP_BASE_URL = 'https://ceshi-engineering.lihaink.cn/'
VITE_APP_BASE_URL = 'http://192.168.1.13:8089/'

View File

@ -0,0 +1,69 @@
<template>
<div>
<el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="查询" prop="name">
<!-- <el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入内容" /> -->
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="流程dsfdsf步骤" prop="customer_name" show-overflow-tooltip />
<el-table-column label="采购申请单号" prop="material_purchase_request_code" 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="apply_date" show-overflow-tooltip />
<el-table-column label="希望到货日期" prop="arrival_date" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { materialrequestLists } from '@/api/material_purchase_request.ts'
import { ref, reactive, defineProps } from "vue"
import { defineEmits } from "vue"
import { timeFormat } from '@/utils/util'
const props = defineProps({
project_id: Number
})
const queryParams = reactive({
project_id: props.project_id
});
const { dictData } = useDictData('contract_type,contract_pricing_method')
//
const emits = defineEmits(["customEvent"]);
//
const handleCurrentChange = (value: any) => {
emits("customEvent", value);
};
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: materialrequestLists,
params: queryParams,
});
getLists();
</script>

View File

@ -203,6 +203,7 @@ const customEvent = (e: any) => {
matsname.value = e.custom_name matsname.value = e.custom_name
project_name.value = e.project_name project_name.value = e.project_name
project_code.value = e.project_code project_code.value = e.project_code
formData.bid_document_no = ''
showDialog.value = false; showDialog.value = false;
}; };

View File

@ -2,14 +2,14 @@
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose"> <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules" inline> <el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules" inline>
<el-steps :active="2" align-center style="margin-bottom: 30px;"> <!-- <el-steps :active="2" align-center style="margin-bottom: 30px;">
<el-step title="销售发起" /> <el-step title="销售发起" />
<el-step title="商务部技术部" /> <el-step title="商务部技术部" />
<el-step title="财务部" /> <el-step title="财务部" />
<el-step title="事业部总工" /> <el-step title="事业部总工" />
<el-step title="事业部总经理审批" /> <el-step title="事业部总经理审批" />
<el-step title="销售副总" /> <el-step title="销售副总" />
</el-steps> </el-steps> -->
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="标书编号" prop="buy_bidding_document_id" @click="showDialog = true" <el-form-item label="标书编号" prop="buy_bidding_document_id" @click="showDialog = true"
@ -25,7 +25,7 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="客户名称" prop="buy_bidding_document_id" <el-form-item label="客户名称" prop="buy_bidding_document_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"> :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="bid_document_no" clearable disabled placeholder="系统自动填写" /> <el-input v-model="formData.custom_name" clearable disabled placeholder="系统自动填写" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -249,7 +249,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="金额" prop="cost_amount"> <el-table-column label="成本金额" prop="cost_amount">
<template #default="{ row }"> <template #default="{ row }">
<el-input v-model="row.cost_amount" type="number" disabled placeholder="系统自动计算" /> <el-input v-model="row.cost_amount" type="number" disabled placeholder="系统自动计算" />
</template> </template>
@ -289,6 +289,7 @@ import biddocumentTable from "@/components/biddocument/index.vue"
import { apiBidDocumentExaminationAdd, apiBidDocumentExaminationEdit, apiBidDocumentExaminationDetail } from '@/api/bid_document_examination' import { apiBidDocumentExaminationAdd, apiBidDocumentExaminationEdit, apiBidDocumentExaminationDetail } from '@/api/bid_document_examination'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
import { watch } from "vue"
defineProps({ defineProps({
dictData: { dictData: {
@ -369,7 +370,6 @@ const delFileFn1 = (index: number) => {
} }
// //
const jiprice1 = (row: any, index: any) => { const jiprice1 = (row: any, index: any) => {
console.log(row)
if (row.cost_price) { if (row.cost_price) {
row.cost_amount = row.num * row.cost_price row.cost_amount = row.num * row.cost_price
} }
@ -378,7 +378,6 @@ const jiprice1 = (row: any, index: any) => {
} }
} }
const jiprice2 = (row: any, index: any) => { const jiprice2 = (row: any, index: any) => {
console.log(row)
if (row.num) { if (row.num) {
row.cost_amount = row.num * row.cost_price row.cost_amount = row.num * row.cost_price
} }
@ -388,7 +387,6 @@ const jiprice3 = (row: any, index: any) => {
if (row.num) { if (row.num) {
row.sale_amount = row.num * row.sale_price row.sale_amount = row.num * row.sale_price
} }
// console.log(row)
} }
// //
@ -437,7 +435,7 @@ const formData = reactive({
id: '', id: '',
approve_id: 0, approve_id: 0,
buy_bidding_document_id: '', buy_bidding_document_id: '',
custom_name: "",
bidding_project_overview: '', bidding_project_overview: '',
project_introduction: '', project_introduction: '',
technical_protocol_deviation: '', technical_protocol_deviation: '',
@ -453,6 +451,15 @@ const formData = reactive({
quotation_detail: [] quotation_detail: []
}) })
watch(tableData.value, (newVal, oldVal) => {
formData.business_review_total_amount = 0
tableData.value.forEach(item => {
formData.business_review_total_amount += Number(item.sale_amount)
item.sale_amount = item.num * item.sale_price
})
})
// //
const customEvent = (e: any) => { const customEvent = (e: any) => {
formData.buy_bidding_document_id = e.id; formData.buy_bidding_document_id = e.id;
@ -473,6 +480,7 @@ const customEvent = (e: any) => {
bidding_project_overview.value = e.bid_project_overview bidding_project_overview.value = e.bid_project_overview
project_introduction.value = e.project_desc project_introduction.value = e.project_desc
showDialog.value = false showDialog.value = false
formData.custom_name = e.custom_name
}; };
const customEvent1 = (e: any) => { const customEvent1 = (e: any) => {
@ -486,7 +494,6 @@ const customEvent1 = (e: any) => {
// customer_name.value = e.name; // customer_name.value = e.name;
showDialog1.value = false; showDialog1.value = false;
console.log(tableData.value)
}; };
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
@ -502,7 +509,7 @@ const setFormData = async (data: Record<any, any>) => {
} }
} }
if (data.dept_id) { if (data.dept_id) {
getlist1(data.org_id) // getlist1(data.org_id)
} }
@ -594,7 +601,7 @@ const handleSubmit = async () => {
const open = (type = 'add') => { const open = (type = 'add') => {
mode.value = type mode.value = type
popupRef.value?.open() popupRef.value?.open()
getlist() // getlist()
} }
// //

View File

@ -3,18 +3,29 @@
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose"> <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目名称" prop="bid_document_examination_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog = true"> <el-form-item label="标书审查" prop="bid_document_examination_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog = true">
<el-input v-model="formData.code" readonly clearable placeholder="请选择标书审查" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="bid_document_examination_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_name" readonly clearable placeholder="请选择项目" /> <el-input v-model="project_name" readonly clearable placeholder="请选择项目" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目编码" prop="bid_document_examination_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"> <el-form-item label="项目编码" prop="bid_document_examination_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_code" clearable disabled placeholder="系统自动填写" /> <el-input v-model="project_code" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col> </el-form-item></el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="客户名称" prop="bid_document_examination_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"> <el-form-item label="客户名称" prop="bid_document_examination_id"
<el-input v-model="matsname" clearable disabled placeholder="系统自动填写" /> :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.custom_name" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col> </el-form-item></el-col>
<el-col :span="8"> <el-col :span="8">
<!-- @click="showDialog1 = true" --> <!-- @click="showDialog1 = true" -->
@ -63,13 +74,14 @@
<el-dialog v-model="showDialog1" title="选择产品" width="70%"> <el-dialog v-model="showDialog1" title="选择产品" width="70%">
<prodctTable @customEvent="customEvent1"></prodctTable> <prodctTable @customEvent="customEvent1"></prodctTable>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script lang="ts" setup name="bidDocumentExaminationDetailEdit"> <script lang="ts" setup name="bidDocumentExaminationDetailEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import biddocumentTable from "@/components/biddocument/index.vue" import biddocumentTable from "@/components/document_examination/index.vue"
import prodctTable from '@/components/product/index.vue' import prodctTable from '@/components/product/index.vue'
import { apiBidDocumentExaminationDetailAdd, apiBidDocumentExaminationDetailEdit, apiBidDocumentExaminationDetailDetail } from '@/api/bid_document_examination_detail' import { apiBidDocumentExaminationDetailAdd, apiBidDocumentExaminationDetailEdit, apiBidDocumentExaminationDetailDetail } from '@/api/bid_document_examination_detail'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
@ -108,6 +120,9 @@ const formData = reactive({
amount: '', amount: '',
cost_price: '', cost_price: '',
sale_price: '', sale_price: '',
code: "",
custom_name: ""
}) })
@ -118,10 +133,12 @@ const formRules = reactive<any>({
// //
const customEvent = (e: any) => { const customEvent = (e: any) => {
formData.bid_document_examination_id = e.id; // formData.bid_document_examination_id = e.id;
matsname.value = e.customer_name formData.custom_name = e.custom_name
project_name.value = e.project_name project_name.value = e.project_name
project_code.value = e.project_code project_code.value = e.project_code
formData.bid_document_examination_id = e.id
formData.code = e.code
showDialog.value = false; showDialog.value = false;

View File

@ -3,7 +3,8 @@
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline> <el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="标书审查编码" prop="bid_document_examination_code"> <el-form-item label="标书审查编码" prop="bid_document_examination_code">
<el-input class="w-[280px]" v-model="queryParams.bid_document_examination_code" clearable placeholder="请输入标书审查编码" /> <el-input class="w-[280px]" v-model="queryParams.bid_document_examination_code" clearable
placeholder="请输入标书审查编码" />
</el-form-item> </el-form-item>
<el-form-item label="产品名称" prop="product_name"> <el-form-item label="产品名称" prop="product_name">
<el-input class="w-[280px]" v-model="queryParams.product_name" clearable placeholder="请输入产品名称" /> <el-input class="w-[280px]" v-model="queryParams.product_name" clearable placeholder="请输入产品名称" />
@ -21,7 +22,8 @@
</template> </template>
新增 新增
</el-button> </el-button>
<el-button v-perms="['bid.bid_document_examination_detail/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)"> <el-button v-perms="['bid.bid_document_examination_detail/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除 删除
</el-button> </el-button>
<div class="mt-4"> <div class="mt-4">
@ -31,8 +33,8 @@
<el-table-column label="序号" type="index" width="55" /> <el-table-column label="序号" type="index" width="55" />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip /> <el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip /> <el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="product_code" show-overflow-tooltip /> <el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="投标审查单号" prop="cost_price" show-overflow-tooltip /> <el-table-column label="投标审查单号" prop="bid_document_examination_code" show-overflow-tooltip />
<el-table-column label="产品名称" prop="product_name" show-overflow-tooltip /> <el-table-column label="产品名称" prop="product_name" show-overflow-tooltip />
<el-table-column label="型号规格" prop="product_specs" show-overflow-tooltip /> <el-table-column label="型号规格" prop="product_specs" show-overflow-tooltip />
<el-table-column label="单位" prop="product_unit" show-overflow-tooltip /> <el-table-column label="单位" prop="product_unit" show-overflow-tooltip />
@ -45,20 +47,23 @@
<el-table-column label="操作" width="160" fixed="right"> <el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['bid.bid_document_examination_detail/edit']" type="primary" link @click="handleEdit(row)"> <el-button v-perms="['bid.bid_document_examination_detail/edit']" type="primary" link
@click="handleEdit(row)">
编辑 编辑
</el-button> </el-button>
<el-button v-perms="['bid.bid_document_examination_detail/delete']" type="danger" link @click="handleDelete(row.id)"> <el-button v-perms="['bid.bid_document_examination_detail/delete']" type="danger" link
@click="handleDelete(row.id)">
删除 删除
</el-button> </el-button>
<el-button v-perms="['bid.bid_document_examination_detail/detail']" link @click="handledetail(row)"> <el-button v-perms="['bid.bid_document_examination_detail/detail']" link
@click="handledetail(row)">
详情 详情
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="flex mt-4 justify-end"> <div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" /> <pagination v-model="pager" @change="getLists" />
</div> </div>
</el-card> </el-card>

View File

@ -4,85 +4,108 @@
<popup ref="popupRef" title="项目合同详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose"> <popup ref="popupRef" title="项目合同详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px"> <el-form ref="formRef" :model="formData" label-width="120px">
<el-descriptions title="基本信息" :column="2" border> <el-descriptions title="基本信息" :column="2" border>
<el-descriptions-item label="客户名称" label-align="left" align="left" label-class-name="my-label">{{ formData.custom_name }}</el-descriptions-item> <el-descriptions-item label="客户名称" label-align="left" align="left" label-class-name="my-label">{{
<el-descriptions-item label="投标编号" label-align="left" align="left" label-class-name="my-label">{{ formData.bid_document_no }}</el-descriptions-item> formData.custom_name }}</el-descriptions-item>
<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">{{
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{ formData.project_code }}</el-descriptions-item> formData.bid_document_no }}</el-descriptions-item>
<el-descriptions-item label="合同名称" label-align="left" align="left" label-class-name="my-label">{{ formData.contract_code }}</el-descriptions-item> <el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
<el-descriptions-item label="合同编号" label-align="left" align="left" label-class-name="my-label">{{ formData.custom_name }}</el-descriptions-item> 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.contract_name }}</el-descriptions-item>
<el-descriptions-item label="合同编号" label-align="left" align="left" label-class-name="my-label">{{
formData.contract_code }}</el-descriptions-item>
<el-descriptions-item label="合同类型" label-align="left" align="left" label-class-name="my-label"> <el-descriptions-item label="合同类型" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_type_text }} {{ formData.contract_type_text }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="合同计价方式" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_pricing_method_text <el-descriptions-item label="合同计价方式" label-align="left" align="left" label-class-name="my-label"> {{
formData.contract_pricing_method_text
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="甲方" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a <el-descriptions-item label="甲方" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_a
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="乙方" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b }}</el-descriptions-item> <el-descriptions-item label="乙方" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_b }}</el-descriptions-item>
<el-descriptions-item label="通讯地址" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_contact_address <el-descriptions-item label="通讯地址" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_a_contact_address
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="通讯地址" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_contact_address <el-descriptions-item label="通讯地址" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_b_contact_address
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="主要负责人" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_diretor <el-descriptions-item label="主要负责人" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_a_diretor
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="主要负责人" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_diretor <el-descriptions-item label="主要负责人" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_b_diretor
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="电话" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_phone <el-descriptions-item label="电话" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_a_phone
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="电话" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_phone <el-descriptions-item label="电话" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_b_phone
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="手机" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_mobile <el-descriptions-item label="手机" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_a_mobile
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="手机" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_mobile <el-descriptions-item label="手机" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_b_mobile
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="邮箱" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_a_email <el-descriptions-item label="邮箱" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_a_email
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="邮箱" label-align="left" align="left" label-class-name="my-label"> {{ formData.party_b_email <el-descriptions-item label="邮箱" label-align="left" align="left" label-class-name="my-label"> {{
formData.party_b_email
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="金额" label-align="left" align="left" label-class-name="my-label"> {{ formData.amount <el-descriptions-item label="金额" label-align="left" align="left" label-class-name="my-label"> {{
formData.amount
}}</el-descriptions-item>
<!-- <el-descriptions-item label="金额大写" label-align="left" align="left" label-class-name="my-label"> {{ formData.amount
}}</el-descriptions-item> -->
<el-descriptions-item label="业务负责人" label-align="left" align="left" label-class-name="my-label"> {{ formData.business_director_name
}}</el-descriptions-item>
<el-descriptions-item label="状态" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_status_text
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="合同有效期" label-align="left" align="left" label-class-name="my-label"> {{ formData.expire <el-descriptions-item label="业务负责人" label-align="left" align="left" label-class-name="my-label"> {{
formData.business_director_name
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="签约日期" label-align="left" align="left" label-class-name="my-label"> {{ formData.contract_date <el-descriptions-item label="状态" label-align="left" align="left" label-class-name="my-label"> {{
formData.contract_status_text
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="主要条款" label-align="left" align="left" label-class-name="my-label"> {{ formData.main_content
<el-descriptions-item label="合同有效期" label-align="left" align="left" label-class-name="my-label"> {{
formData.expire
}}</el-descriptions-item> }}</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.contract_date
}}</el-descriptions-item>
<el-descriptions-item label="主要条款" label-align="left" align="left" label-class-name="my-label"> {{
formData.main_content
}}</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>
@ -90,7 +113,8 @@
<el-descriptions-item label="合同附件" label-align="left" align="left" label-class-name="my-label"> <el-descriptions-item label="合同附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex.length > 0"> <div v-if="formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;"> <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>
</div> </div>
@ -105,16 +129,18 @@
</div> </div>
<div> <div>
<el-table :data="tableData" stripe style="width: 100%"> <el-table :data="tableData" stripe style="width: 100%">
<el-table-column label="期次" prop='customer_demand_name' width="180" /> <el-table-column label="期次" prop='period' width="180" />
<el-table-column label="计划回款日期" prop='submission_time' width="180" /> <el-table-column label="计划回款日期" prop='return_date' width="180" />
<el-table-column label="金额" prop='solution_content' /> <el-table-column label="金额" prop='amount' />
<el-table-column label="备注" prop="annex" show-overflow-tooltip /> <el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table> </el-table>
</div> </div>
<div style="margin: 10px 0;"> <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> </div>
@ -133,6 +159,8 @@ import { apiCustomerDemandSolutionLists } from '@/api/customer_demand_solution'
import { apiProjectEstimateLists } from '@/api/project_estimate' import { apiProjectEstimateLists } from '@/api/project_estimate'
import { apiCompetitorLists } from '@/api/competitor' import { apiCompetitorLists } from '@/api/competitor'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import { apireturnedLists } from "@/api/remittance.ts"
import type { TabsPaneContext } from 'element-plus' import type { TabsPaneContext } from 'element-plus'
@ -147,7 +175,7 @@ defineProps({
const pager1 = reactive({ const pager1 = reactive({
page_size: 10, page_size: 10,
page_no: 1, page_no: 1,
customer_demand_id: "" contract_id: ""
}) })
const total = ref(0) const total = ref(0)
@ -188,11 +216,9 @@ const handleCurrentChange1 = (val: number) => {
// //
const solutionLists = () => { const solutionLists = () => {
apiCustomerDemandSolutionLists(pager1).then((res) => { apireturnedLists(pager1).then((res) => {
tableData.value = res.lists tableData.value = res.lists
total.value = res.count total.value = res.count
}) })
} }
@ -201,7 +227,8 @@ const solutionLists = () => {
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data) Object.assign(formData, data)
pager1.customer_demand_id = data.id console.log(formData, "formdata")
pager1.contract_id = data.id
if (data.annex && data.annex.length > 0) { if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => { const arry1 = data.annex.map((item: any, index: any) => {
@ -212,7 +239,8 @@ const setFormData = async (data: Record<any, any>) => {
}); });
Object.assign(formDataannex, arry1) Object.assign(formDataannex, arry1)
} }
competitorLists() // competitorLists()
solutionLists()
} }

View File

@ -37,11 +37,11 @@
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"> :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.contract_name" clearable placeholder="请输入合同名称" /> <el-input v-model="formData.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item></el-col> </el-form-item></el-col>
<el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="合同编号" prop="contract_code" <el-form-item label="合同编号" prop="contract_code"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"> :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.contract_code" clearable placeholder="请输入合同编号" /> <el-input v-model="formData.contract_code" placeholder="系统自动填写" disabled />
</el-form-item></el-col> </el-form-item></el-col> -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合同类型" prop="contract_type" <el-form-item label="合同类型" prop="contract_type"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]"> :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
@ -200,7 +200,7 @@
</el-table> </el-table>
</div> </div>
</el-form> </el-form>
<reviewprocess /> <!-- <reviewprocess /> -->
</popup> </popup>
<el-dialog v-model="showDialog" title="选择客户" width="70%"> <el-dialog v-model="showDialog" title="选择客户" width="70%">
<customDialog @customEvent="customEvent"></customDialog> <customDialog @customEvent="customEvent"></customDialog>
@ -223,11 +223,11 @@
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import biddocumentTable from "@/components/biddocument/index.vue" import biddocumentTable from "@/components/biddocument/index.vue"
import reviewprocess from '@/components/reviewprocess/index.vue'
import projectTable from "@/components/project/index.vue" import projectTable from "@/components/project/index.vue"
import personnelselector from '@/components/personnelselector/index.vue' import personnelselector from '@/components/personnelselector/index.vue'
import { apiContractAdd, apiContractEdit, apiContractDetail } from '@/api/contract' import { apiContractAdd, apiContractEdit, apiContractDetail } from '@/api/contract'
import { timeFormat } from '@/utils/util' import { apireturnedLists } from "@/api/remittance.ts"
import type { PropType } from 'vue' import type { PropType } from 'vue'
defineProps({ defineProps({
dictData: { dictData: {
@ -354,7 +354,10 @@ const tanchuan = () => {
const customEvent = (e: any) => { const customEvent = (e: any) => {
formData.custom_id = e.id; formData.custom_id = e.id;
custom_name.value = e.name; custom_name.value = e.name;
console.log(custom_name.value, e.name) // console.log(custom_name.value, e.name)
bidding_code.value = ''
project_name.value = ''
project_code.value = ''
showDialog.value = false; showDialog.value = false;
}; };
const customEvent1 = (e: any) => { const customEvent1 = (e: any) => {
@ -368,6 +371,7 @@ const customEvent2 = (e: any) => {
project_id.value = e.id; project_id.value = e.id;
project_name.value = e.name; project_name.value = e.name;
project_code.value = e.project_code project_code.value = e.project_code
bidding_code.value = ''
showDialog2.value = false; showDialog2.value = false;
}; };
@ -487,6 +491,13 @@ const setFormData = async (data: Record<any, any>) => {
project_code.value = data.project_code project_code.value = data.project_code
bidding_code.value = data.bid_document_no bidding_code.value = data.bid_document_no
business_director_name.value = data.business_director_name business_director_name.value = data.business_director_name
let res = await apireturnedLists({ contract_id: data.id })
paymentList.splice(0, 9999)
res.lists.forEach((item: any) => {
paymentList.push(item)
})
} }
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {

View File

@ -8,7 +8,8 @@
<el-form-item label="合同类型" prop="contract_type"> <el-form-item label="合同类型" prop="contract_type">
<el-select class="w-[280px]" v-model="queryParams.contract_type" clearable placeholder="请选择合同类型"> <el-select class="w-[280px]" v-model="queryParams.contract_type" clearable placeholder="请选择合同类型">
<el-option label="全部" value=""></el-option> <el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in dictData.contract_type" :key="index" :label="item.name" :value="item.value" /> <el-option v-for="(item, index) in dictData.contract_type" :key="index" :label="item.name"
:value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -24,15 +25,15 @@
</template> </template>
新增 新增
</el-button> </el-button>
<el-button v-perms="['contract.contract/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)"> <el-button v-perms="['contract.contract/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除 删除
</el-button> </el-button>
<div class="mt-4"> <div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange"> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" /> <el-table-column label="序号" type="index" width="55" />
<el-table-column label="流程编号" prop="code" show-overflow-tooltip /> <el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="合同编号" prop="bid_document_no" show-overflow-tooltip />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip /> <el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip /> <el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip /> <el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
@ -47,9 +48,6 @@
<dict-value :options="dictData.contract_pricing_method" :value="row.contract_pricing_method" /> <dict-value :options="dictData.contract_pricing_method" :value="row.contract_pricing_method" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="甲方" prop="party_a" show-overflow-tooltip />
<el-table-column label="乙方" prop="party_b" show-overflow-tooltip />
<el-table-column label="金额" prop="amount" show-overflow-tooltip />
<el-table-column label="业务负责人" prop="business_director_name" show-overflow-tooltip /> <el-table-column label="业务负责人" prop="business_director_name" show-overflow-tooltip />
<el-table-column label="合同状态" prop="contract_status" show-overflow-tooltip> <el-table-column label="合同状态" prop="contract_status" show-overflow-tooltip>
<template #default="{ row }"> <template #default="{ row }">
@ -57,15 +55,23 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="合同有效期" prop="expire" show-overflow-tooltip /> <el-table-column label="合同有效期" prop="expire" show-overflow-tooltip />
<el-table-column label="签约日期" prop="contract_date" show-overflow-tooltip /> <el-table-column label="签约日期" prop="contract_date" show-overflow-tooltip />
<el-table-column label="合同金额" prop="amount" show-overflow-tooltip />
<el-table-column label="洽商金额" prop="negotiation_amount" show-overflow-tooltip />
<el-table-column label="实际合同金额" prop="reality_contract_amount" show-overflow-tooltip />
<el-table-column label="已回款" prop="returned_amount" show-overflow-tooltip />
<el-table-column label="未回款" prop="not_returned_amount" show-overflow-tooltip />
<el-table-column label="已开票" prop="invoicing_amount" show-overflow-tooltip />
<el-table-column label="未开票" prop="not_invoicing_amount" show-overflow-tooltip />
<el-table-column label="已退款金额" prop="refund_amount" show-overflow-tooltip />
<el-table-column label="操作" width="150" fixed="right"> <el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['contract.contract/edit']" type="primary" link @click="handleEdit(row)"> <el-button v-perms="['contract.contract/edit']" type="primary" link @click="handleEdit(row)">
编辑 编辑
</el-button> </el-button>
<el-button v-perms="['contract.contract/delete']" type="danger" link @click="handleDelete(row.approve_id)"> <el-button v-perms="['contract.contract/delete']" type="danger" link
@click="handleDelete(row.approve_id)">
删除 删除
</el-button> </el-button>
<el-button v-perms="['contract.contract/detail']" link @click="handleDetail(row)"> <el-button v-perms="['contract.contract/detail']" link @click="handleDetail(row)">
@ -75,7 +81,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="flex mt-4 justify-end"> <div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" /> <pagination v-model="pager" @change="getLists" />
</div> </div>
</el-card> </el-card>
@ -153,11 +159,11 @@ const handleDetail = async (data: any) => {
let res = await apiContractDetail({ let res = await apiContractDetail({
id: data.id id: data.id
}) })
showDtail.value = true showDtail.value = true
await nextTick() await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res) detailRef.value?.setFormData(res)
await nextTick()
detailRef.value?.open()
} }
getLists() getLists()
</script> </script>

View File

@ -38,8 +38,6 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange"> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" /> <el-table-column label="序号" type="index" width="55" />
<el-table-column label="流程步骤" prop="" show-overflow-tooltip />
<el-table-column label="流程编号" prop="" show-overflow-tooltip />
<el-table-column label="洽商编号" prop="negotiation_no" show-overflow-tooltip /> <el-table-column label="洽商编号" prop="negotiation_no" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip /> <el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip /> <el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />

View File

@ -231,10 +231,8 @@ import suppliertable from '@/components/supplier/index.vue'
import subcontractingDialog from '@/components/procurementsubcontracting_selector/index.vue' import subcontractingDialog from '@/components/procurementsubcontracting_selector/index.vue'
import paylistDialog from '@/components/paylist/index.vue' import paylistDialog from '@/components/paylist/index.vue'
import subcontracting from '@/components/procurementsubcontracting_selector/subcontracting.vue' import subcontracting from '@/components/procurementsubcontracting_selector/subcontracting.vue'
const active = ref(0) const active = ref(0)
import bankaccountDialog from '@/components/bankaccount/index.vue' import bankaccountDialog from '@/components/bankaccount/index.vue'
import { paymentapplyAdd, paymentapplyEdit, paymentapplyDetail } from '@/api/paymentrequest' import { paymentapplyAdd, paymentapplyEdit, paymentapplyDetail } from '@/api/paymentrequest'
import { toChinesNum } from "@/utils/util"; import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype' import { getAllProjectTypes } from '@/api/projecttype'
@ -370,31 +368,24 @@ const popupTitle = computed(() => {
// //
const formData = reactive({ const formData = reactive({
supplier_id: 1, id: "",
approve_id: '', "supplier_id": 0,
contract_id: '', "contract_cate": 0,
pay_date: '', "contract_id": 0,
period: '', "finance_payment_plan_id": 0,
finance_payment_plan_id: '', "pay_date": "string",
pay_type: '',
applier: '',
invoice_status: '',
amount: '',
amount_daxie: '',
desc: '',
remark: '',
annex: [],
bank: '',
account_name: '',
account: '',
contract_cate: 1,
"payment_nature": 0, "payment_nature": 0,
"apply_user": "", "pay_type": 0,
"payee_bank": "", "apply_user": "string",
"payee_account_name": "", "invoice_status": 0,
"payee_account": "", "amount": 0,
"bank_account_id": '', "desc": "string",
bank_account_name: "" "remark": "string",
"annex": "string",
"payee_bank": "string",
"payee_account_name": "string",
"payee_account": "string",
"bank_account_id": 0
}) })

View File

@ -119,7 +119,7 @@
</el-col> </el-col>
</el-row> </el-row>
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;"> <div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
<el-button @click="showDialog2 = true" type="primary" plain>选择项目MRP缺口</el-button> <el-button @click="showDialog2 = true" type="primary" plain>选择采购申请</el-button>
</div> </div>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
@ -445,6 +445,10 @@ const customEvent = (e: any) => {
formData.project_id = e.id formData.project_id = e.id
project_code.value = e.project_code project_code.value = e.project_code
showDialog.value = false; showDialog.value = false;
materialList.splice(0, 9999)
}; };
const customEvent1 = (e: any) => { const customEvent1 = (e: any) => {
@ -467,14 +471,14 @@ const customEvent2 = (e: any) => {
} }
// //
const materialji1 = (row: any, index: any) => { const materialji1 = (row: any, index: any) => {
// console.log(row)
const num = Number(row.num) || 0 const num = Number(row.num) || 0
const price = Number(row.price) || 0 const price = Number(row.price) || 0
const tax_rate = Number(row.tax_rate ? row.tax_rate.name : 0) || 0 const tax_rate = Number(row.tax_rate ? row.tax_rate.name : 0) || 0
row.amount_excluding_tax = num * price row.amount_including_tax = num * price
row.amount_including_tax = num * price * (tax_rate / 100) // row.amount_including_tax = num * price * (tax_rate / 100)
amount.value = num * price // amount.value = num * price
amount_excluding_tax.value = num * price * (tax_rate / 100) // amount_excluding_tax.value = num * price * (tax_rate / 100)
}; };
const materialji2 = (row: any, index: any, e) => { const materialji2 = (row: any, index: any, e) => {
console.log(e, row) console.log(e, row)

View File

@ -2,21 +2,25 @@
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose"> <popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form-item label="采购合同id" prop="procurement_contract_id"> <el-form-item label="采购合同名称" prop="procurement_contract_id">
<el-input v-model="formData.procurement_contract_id" clearable placeholder="请输入采购合同id" /> <el-input v-model="formData.procurement_contract_code" clearable readonly placeholder="点击选则采购合同"
@click="showDialog = true" />
</el-form-item> </el-form-item>
<el-form-item label="材料采购申请id" prop="material_procurement_application_id"> <el-form-item label="材料采购申请" prop="material_procurement_application_id">
<el-input v-model="formData.material_procurement_application_id" clearable placeholder="请输入材料采购申请id" /> <el-input v-model="formData.material_purchase_request_code"
:disabled="!formData.procurement_contract_code" readonly placeholder="请输入材料采购申请"
@click="showDialog1 = true" />
</el-form-item> </el-form-item>
<el-form-item label="数量" prop="num"> <el-form-item label="数量" prop="num">
<el-input v-model="formData.num" clearable placeholder="请输入数量" /> <el-input v-model="formData.num" clearable placeholder="请输入数量" type="number" />
</el-form-item> </el-form-item>
<el-form-item label="含税单价" prop="unit_price_including_tax"> <el-form-item label="含税单价" prop="unit_price_including_tax">
<el-input v-model="formData.unit_price_including_tax" clearable placeholder="请输入含税单价" /> <el-input v-model="formData.unit_price_including_tax" clearable placeholder="请输入含税单价" type="number" />
</el-form-item> </el-form-item>
<el-form-item label="税率" prop="tax_rate"> <el-form-item label="税率" prop="tax_rate">
<el-select class="flex-1" v-model="formData.tax_rate" clearable placeholder="请选择税率"> <el-select class="flex-1" v-model="formData.tax_rate" clearable placeholder="请选择税率">
<el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name" :value="item.value" /> <el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name"
:value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="不含税金额" prop="amount_excluding_tax"> <el-form-item label="不含税金额" prop="amount_excluding_tax">
@ -25,8 +29,18 @@
<el-form-item label="含税金额" prop="amount_including_tax"> <el-form-item label="含税金额" prop="amount_including_tax">
<el-input v-model="formData.amount_including_tax" clearable placeholder="请输入含税金额" /> <el-input v-model="formData.amount_including_tax" clearable placeholder="请输入含税金额" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-dialog v-model="showDialog" title="选择采购合同" width="70%">
<procurementsubcontractingSelector @customEvent="customEvent"></procurementsubcontractingSelector>
</el-dialog>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择采购合同" width="70%">
<materialPurchase @customEvent="customEvent1" :project_id="formData.project_id"></materialPurchase>
</el-dialog>
</div>
</popup> </popup>
</div> </div>
</template> </template>
@ -35,8 +49,12 @@
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiProcurementContractDetailAdd, apiProcurementContractDetailEdit, apiProcurementContractDetailDetail } from '@/api/procurement_contract_detail' import { apiProcurementContractDetailAdd, apiProcurementContractDetailEdit, apiProcurementContractDetailDetail } from '@/api/procurement_contract_detail'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
import procurementsubcontractingSelector from "@/components/procurementsubcontracting_selector/index.vue"
import materialPurchase from "@/components/materialPurchase/index.vue"
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
@ -47,6 +65,8 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
const showDialog = ref(false)
const showDialog1 = ref(false)
// //
@ -58,7 +78,10 @@ const popupTitle = computed(() => {
const formData = reactive({ const formData = reactive({
id: '', id: '',
procurement_contract_id: '', procurement_contract_id: '',
project_id: "",
procurement_contract_code: "",
material_procurement_application_id: '', material_procurement_application_id: '',
material_purchase_request_code: "",
num: '', num: '',
unit_price_including_tax: '', unit_price_including_tax: '',
tax_rate: '', tax_rate: '',
@ -66,7 +89,21 @@ const formData = reactive({
amount_including_tax: '', amount_including_tax: '',
}) })
const customEvent = (e: any) => {
console.log(e)
formData.procurement_contract_id = e.id
formData.project_id = e.project_id
formData.procurement_contract_code = e.contract_name
formData.material_procurement_application_id = ''
formData.material_purchase_request_code = ''
showDialog.value = false
}
const customEvent1 = (e: any) => {
formData.material_procurement_application_id = e.id
formData.material_purchase_request_code = e.material_purchase_request_code
showDialog1.value = false
}
// //
const formRules = reactive<any>({ const formRules = reactive<any>({

View File

@ -3,10 +3,12 @@
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline> <el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="采购合同id" prop="procurement_contract_id"> <el-form-item label="采购合同id" prop="procurement_contract_id">
<el-input class="w-[280px]" v-model="queryParams.procurement_contract_id" clearable placeholder="请输入采购合同id" /> <el-input class="w-[280px]" v-model="queryParams.procurement_contract_id" clearable
placeholder="请输入采购合同id" />
</el-form-item> </el-form-item>
<el-form-item label="材料采购申请id" prop="material_procurement_application_id"> <el-form-item label="材料采购申请id" prop="material_procurement_application_id">
<el-input class="w-[280px]" v-model="queryParams.material_procurement_application_id" clearable placeholder="请输入材料采购申请id" /> <el-input class="w-[280px]" v-model="queryParams.material_procurement_application_id" clearable
placeholder="请输入材料采购申请id" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
@ -15,15 +17,16 @@
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['procurement_contract_detail/add']" type="primary" @click="handleAdd"> <!-- <el-button v-perms="['procurement_contract_detail/add']" type="primary" @click="handleAdd">
<template #icon> <template #icon>
<icon name="el-icon-Plus" /> <icon name="el-icon-Plus" />
</template> </template>
新增 新增
</el-button> </el-button> -->
<el-button v-perms="['procurement_contract_detail/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)"> <!-- <el-button v-perms="['procurement_contract_detail/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除 删除
</el-button> </el-button> -->
<div class="mt-4"> <div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange"> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
@ -50,10 +53,12 @@
<el-table-column label="参数说明" prop="material_parameter_description" show-overflow-tooltip /> <el-table-column label="参数说明" prop="material_parameter_description" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right"> <el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['procurement_contract_detail/edit']" type="primary" link @click="handleEdit(row)"> <el-button v-perms="['procurement_contract_detail/edit']" type="primary" link
@click="handleEdit(row)">
编辑 编辑
</el-button> </el-button>
<el-button v-perms="['procurement_contract_detail/delete']" type="danger" link @click="handleDelete(row.id)"> <el-button v-perms="['procurement_contract_detail/delete']" type="danger" link
@click="handleDelete(row.id)">
删除 删除
</el-button> </el-button>
<el-button v-perms="['procurement_contract_detail/detail']" link @click="handleDetail(row)"> <el-button v-perms="['procurement_contract_detail/detail']" link @click="handleDetail(row)">
@ -63,7 +68,7 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="flex mt-4 justify-end"> <div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" /> <pagination v-model="pager" @change="getLists" />
</div> </div>
</el-card> </el-card>

View File

@ -19,6 +19,17 @@
@click="showDialog = true" /> @click="showDialog = true" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item label="联系人" prop="custom_master_name">
<el-input v-model="formData.custom_master_name" disabled clearable placeholder="请输入联系人" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="联系电话" prop="custom_master_phone"
:rules="[{ validator: isMobileNumber, trigger: 'blur' }]">
<el-input v-model="formData.custom_master_phone" disabled clearable placeholder="请输入联系电话"
:regex="/^ 1[3 - 9]\d{ 9}$ /" />
</el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="报价日期" prop="quotation_date"> <el-form-item label="报价日期" prop="quotation_date">
<el-date-picker class="flex-1 !flex" v-model="formData.quotation_date" clearable type="date" <el-date-picker class="flex-1 !flex" v-model="formData.quotation_date" clearable type="date"
@ -26,17 +37,7 @@
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item label="联系人" prop="custom_master_name">
<el-input v-model="formData.custom_master_name" clearable placeholder="请输入联系人" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="联系电话" prop="custom_master_phone"
:rules="[{ validator: isMobileNumber, trigger: 'blur' }]">
<el-input v-model="formData.custom_master_phone" clearable placeholder="请输入联系电话"
:regex="/^ 1[3 - 9]\d{ 9}$ /" />
</el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="制单人" prop="create_user"> <el-form-item label="制单人" prop="create_user">
<el-input v-model="formData.create_user" clearable placeholder="请输入制单人" /> <el-input v-model="formData.create_user" clearable placeholder="请输入制单人" />
@ -123,7 +124,7 @@
<el-table-column label="序号"> <el-table-column label="序号">
<template #default="{ row }"> <template #default="{ row }">
<el-button @click="handleAdd(row)" size="small">+</el-button> <!-- <el-button @click="handleAdd(row)" size="small">+</el-button> -->
<el-button @click="handleDelete(row)" size="small">-</el-button> <el-button @click="handleDelete(row)" size="small">-</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -159,8 +160,7 @@
<el-table-column label="税率(%)" prop="tax_rate"> <el-table-column label="税率(%)" prop="tax_rate">
<template #default="{ row }"> <template #default="{ row }">
<el-select class="flex-1" v-model="row.tax_rate" clearable placeholder="请选择税率" <el-select class="flex-1" v-model="row.tax_rate" clearable placeholder="请选择税率">
@change="test(row)">
<el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name" <el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name"
:value="item.value" /> :value="item.value" />
</el-select> </el-select>
@ -191,9 +191,9 @@
</el-table> </el-table>
</div> </div>
<div> <!-- <div>
<reviewprocess></reviewprocess> <reviewprocess></reviewprocess>
</div> </div> -->
</el-form> </el-form>
@ -338,7 +338,10 @@ const formData = reactive({
const customEvent = (e: any) => { const customEvent = (e: any) => {
formData.custom_id = e.id; formData.custom_id = e.id;
customer_name.value = e.name; customer_name.value = e.name;
formData.custom_master_name = e.master_name
formData.custom_master_phone = e.master_phone
showDialog.value = false; showDialog.value = false;
}; };
const customEvent1 = (e: any) => { const customEvent1 = (e: any) => {
tableData.value.push({ tableData.value.push({
@ -477,7 +480,16 @@ const totalPrice = computed(() => {
watch(tableData.value, (newVal, oldVal) => { watch(tableData.value, (newVal, oldVal) => {
let num = 0; let num = 0;
tableData.value.forEach(item => { tableData.value.forEach(item => {
num += item.price * item.product_num item.amount = item.price * item.product_num
let name;
props.dictData.tax_rate.forEach(items => {
if (items.value == item.tax_rate) {
name = items.name
}
})
item.amount_including = item.amount * (1 - (Number(name) / 100)) || 0
num += item.amount
}) })
formData.amount_including_tax = num formData.amount_including_tax = num
amount_including_daxie.value = convertToChinese(num) amount_including_daxie.value = convertToChinese(num)

View File

@ -459,29 +459,53 @@ const materialji1 = (row: any, index: any) => {
const num = Number(row.num) || 0 const num = Number(row.num) || 0
const price = Number(row.price) || 0 const price = Number(row.price) || 0
const tax_rate = Number(row.tax_rate ? row.tax_rate.name : 0) || 0 const tax_rate = Number(row.tax_rate ? row.tax_rate.name : 0) || 0
row.amount_excluding_tax = num * price row.amount_including_tax = num * price
row.amount_including_tax = (num * price * (tax_rate / 100)).toFixed(2) row.amount_excluding_tax = (num * price * (1 - tax_rate / 100)).toFixed(2)
amount.value = num * price
amount_excluding_tax.value = (num * price * (tax_rate / 100)).toFixed(2)
// amount.value = num * price
// amount_excluding_tax.value = (num * price * (tax_rate / 100)).toFixed(2)
}; };
const materialji2 = (row: any, index: any, e) => { const materialji2 = (row: any, index: any, e) => {
console.log(e, row) console.log(e, row)
const num = Number(row.num) || 0 const num = Number(row.num) || 0
const price = Number(row.price) || 0 const price = Number(row.price) || 0
const tax_rate = Number(row.tax_rate.name) || 0 const tax_rate = Number(row.tax_rate.name) || 0
row.amount_excluding_tax = num * price row.amount_including_tax = num * price
row.amount_including_tax = num * price * (tax_rate / 100) row.amount_excluding_tax = (num * price * (1 - tax_rate / 100)).toFixed(2)
amount.value = num * price // amount.value = num * price
amount_excluding_tax.value = num * price * (tax_rate / 100) // amount_excluding_tax.value = num * price * (tax_rate / 100)
}; };
watch( watch(
() => amount.value, () => subcontractList,
() => { () => {
if (amount.value && amount.value > 0) { // if (amount.value && amount.value > 0) {
amount_daxie.value = toChinesNum(amount.value) // amount_daxie.value = toChinesNum(amount.value)
} // }
amount.value = 0
amount_excluding_tax.value = 0
subcontractList.forEach(item => {
amount.value += Number(item.amount_including_tax)
amount_excluding_tax.value += Number(item.amount_excluding_tax)
})
} }
) )
// watch(
// () => amount.value,
// () => {
// if (amount.value && amount.value > 0) {
// amount_daxie.value = toChinesNum(amount.value)
// }
// }
// )
// //
watch( watch(
() => formData.retention_money_rate, () => formData.retention_money_rate,

View File

@ -44,14 +44,15 @@
<el-button v-perms="['contract.subcontracting_contract/delete']" type="danger" link @click="handleDelete(row.id)"> <el-button v-perms="['contract.subcontracting_contract/delete']" type="danger" link @click="handleDelete(row.id)">
删除 删除
</el-button> --> </el-button> -->
<el-button v-perms="['contract.subcontracting_contract/detail']" link @click="handleDetail(row)"> <el-button v-perms="['contract.subcontracting_contract/detail']" link
@click="handleDetail(row)">
详情 详情
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="flex mt-4 justify-end"> <div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" /> <pagination v-model="pager" @change="getLists" />
</div> </div>
</el-card> </el-card>
@ -121,6 +122,7 @@ const handleDelete = async (id: number | any[]) => {
} }
const handleDetail = async (data: any) => { const handleDetail = async (data: any) => {
let res = await apiSubcontractingContractDetailDetail({ id: data.id }) let res = await apiSubcontractingContractDetailDetail({ id: data.id })
console.log(res, "res")
showDtail.value = true showDtail.value = true
await nextTick() await nextTick()
detailRef.value?.open() detailRef.value?.open()

View File

@ -146,10 +146,7 @@
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" /> <el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附件" prop="field87"> <el-form-item label="附件" prop="field87">
<el-upload <el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv" accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
@ -160,7 +157,6 @@
上传 上传
</el-button> </el-button>
</el-upload> </el-upload>
<div> <div>
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;"> <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" <a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
@ -168,25 +164,18 @@
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span> <span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-dialog v-model="showDialog1" title="选择汇票" width="70%"> <el-dialog v-model="showDialog1" title="选择汇票" width="70%">
<acceptanceDialog @customEvent="customEvent1"></acceptanceDialog> <acceptanceDialog @customEvent="customEvent1"></acceptanceDialog>
</el-dialog> </el-dialog>
<el-dialog v-model="showDialog2" title="选择合同" width="70%"> <el-dialog v-model="showDialog2" title="选择合同" width="70%">
<subcontractDialog @customEvent="customEvent2"></subcontractDialog> <subcontractDialog @customEvent="customEvent2"></subcontractDialog>
</el-dialog> </el-dialog>
<el-dialog v-model="showDialog" title="选择供应商" width="70%"> <el-dialog v-model="showDialog" title="选择供应商" width="70%">
<supplierDialog @customEvent="customEvent"></supplierDialog> <supplierDialog @customEvent="customEvent"></supplierDialog>
</el-dialog> </el-dialog>
</el-form> </el-form>
</popup> </popup>