This commit is contained in:
zmj 2024-03-22 19:03:43 +08:00
commit 7186893b96
174 changed files with 8332 additions and 6065 deletions

View File

@ -11,14 +11,14 @@ export function apiBidBuyBiddingDocumentAdd(params: any) {
}
// 编辑购买标书
// export function apiBidBuyBiddingDocumentEdit(params: any) {
// return request.post({ url: '/bid.bid_buy_bidding_document/edit', params })
// }
export function apiBidBuyBiddingDocumentEdit(params: any) {
return request.post({ url: '/bid.bid_buy_bidding_document/edit', params })
}
// 删除购买标书
// export function apiBidBuyBiddingDocumentDelete(params: any) {
// return request.post({ url: '/bid.bid_buy_bidding_document/delete', params })
// }
export function apiBidBuyBiddingDocumentDelete(params: any) {
return request.post({ url: '/bid.bid_buy_bidding_document/delete', params })
}
// 购买标书详情
export function apiBidBuyBiddingDocumentDetail(params: any) {

View File

@ -1,26 +1,30 @@
import request from '@/utils/request'
import request from "@/utils/request";
// 采购合同列表
export function apiProcurementContractLists(params: any) {
return request.get({ url: '/contract.procurement_contract/lists', params })
return request.get({ url: "/contract.procurement_contract/lists", params });
}
// 添加采购合同
export function apiProcurementContractAdd(params: any) {
return request.post({ url: '/contract.procurement_contract/add', params })
return request.post({ url: "/contract.procurement_contract/add", params });
}
// 编辑采购合同
export function apiProcurementContractEdit(params: any) {
return request.post({ url: '/contract.procurement_contract/edit', params })
return request.post({ url: "/contract.procurement_contract/edit", params });
}
// 删除采购合同
export function apiProcurementContractDelete(params: any) {
return request.post({ url: '/contract.procurement_contract/delete', params })
return request.post({ url: "/contract.procurement_contract/delete", params });
}
// 采购合同详情
export function apiProcurementContractDetail(params: any) {
return request.get({ url: '/contract.procurement_contract/detail', params })
}
return request.get({ url: "/contract.procurement_contract/detail", params });
}
export function apiProcurementContractSearch(params: any) {
return request.get({ url: "/contract.procurement_contract/datas", params });
}

View File

@ -5,3 +5,9 @@ export function apiQuotationDetailLists(params: any) {
return request.get({ url: '/quotation.quotation_detail/lists', params })
}
// 删除报价明细列表
export function apiQuotationDetailDelete(params: any) {
return request.post({ url: '/quotation.quotation_detail/delete', params })
}

View File

@ -1,26 +1,45 @@
import request from '@/utils/request'
import request from "@/utils/request";
// 分包合同列表
export function apiSubcontractingContractLists(params: any) {
return request.get({ url: '/contract.subcontracting_contract/lists', params })
return request.get({
url: "/contract.subcontracting_contract/lists",
params,
});
}
// 添加分包合同
export function apiSubcontractingContractAdd(params: any) {
return request.post({ url: '/contract.subcontracting_contract/add', params })
return request.post({ url: "/contract.subcontracting_contract/add", params });
}
// 编辑分包合同
export function apiSubcontractingContractEdit(params: any) {
return request.post({ url: '/contract.subcontracting_contract/edit', params })
return request.post({
url: "/contract.subcontracting_contract/edit",
params,
});
}
// 删除分包合同
export function apiSubcontractingContractDelete(params: any) {
return request.post({ url: '/contract.subcontracting_contract/delete', params })
return request.post({
url: "/contract.subcontracting_contract/delete",
params,
});
}
// 分包合同详情
export function apiSubcontractingContractDetail(params: any) {
return request.get({ url: '/contract.subcontracting_contract/detail', params })
}
return request.get({
url: "/contract.subcontracting_contract/detail",
params,
});
}
export function apiSubcontractingContractSearch(params: any) {
return request.get({
url: "/contract.subcontracting_contract/datas",
params,
});
}

View File

@ -1,27 +1,30 @@
import request from '@/utils/request'
import request from "@/utils/request";
// 供应商表列表
export function apisupplierLists(params: any) {
return request.get({ url: '/supplier.supplier/lists', params })
return request.get({ url: "/supplier.supplier/lists", params });
}
// 添加供应商
export function apisupplierAdd(params: any) {
return request.post({ url: '/supplier.supplier/add', params })
return request.post({ url: "/supplier.supplier/add", params });
}
// 编辑供应商
export function apisupplierEdit(params: any) {
return request.post({ url: '/supplier.supplier/edit', params })
return request.post({ url: "/supplier.supplier/edit", params });
}
// 删除供应商
export function apisupplierDelete(params: any) {
return request.post({ url: '/supplier.supplier/delete', params })
return request.post({ url: "/supplier.supplier/delete", params });
}
// 供应商详情
export function apisupplierDetail(params: any) {
return request.get({ url: '/supplier.supplier/detail', params })
}
return request.get({ url: "/supplier.supplier/detail", params });
}
export function apiSupplierSearch(params: any) {
return request.get({ url: "/supplier.supplier/datas", params });
}

View File

@ -16,7 +16,7 @@
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<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_estimation" show-overflow-tooltip />
<el-table-column label="项目估算(元)" prop="project_estimation" show-overflow-tooltip />
<el-table-column label="招标项目资金来源" prop="bidding_project_fund_source" show-overflow-tooltip />
<el-table-column label="投标时间" prop="bidding_time" show-overflow-tooltip />
<!-- <el-table-column label="购买标书时间" prop="buy_bid_document_date" show-overflow-tooltip /> -->

View File

@ -16,7 +16,7 @@
<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="组织" prop="custom_id" show-overflow-tooltip />
<el-table-column label="组织" prop="org_name" show-overflow-tooltip />
<el-table-column label="姓名" prop="name" show-overflow-tooltip />
<el-table-column label="职位" prop="position" show-overflow-tooltip />
<el-table-column label="手机" prop="phone" show-overflow-tooltip />
@ -34,7 +34,7 @@
</el-card>
</div>
</template>
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"

View File

@ -24,8 +24,8 @@
</template>
</el-table-column>
<el-table-column label="省" property="province_name" />
<el-table-column label="市" property="city_name" />
<el-table-column label="区" property="area_name" />
<!-- <el-table-column label="市" property="city_name" />
<el-table-column label="区" property="area_name" /> -->
<el-table-column label="职务" prop="master_position" show-overflow-tooltip />
<el-table-column label="电话" prop="master_phone" show-overflow-tooltip />
<el-table-column label="手机" prop="master_telephone" show-overflow-tooltip />
@ -43,7 +43,7 @@
</el-card>
</div>
</template>
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"

View File

@ -25,18 +25,6 @@
<el-table-column label="重要程度" prop="importance_text" show-overflow-tooltip />
<el-table-column label="记录时间" prop="recording_time" show-overflow-tooltip />
<el-table-column label="需求内容" prop="demand_content" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
</el-table>
</div>
@ -46,14 +34,12 @@
</el-card>
</div>
</template>
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { apiCustomerDemandLists } from '@/api/customer_demand'
import { defineEmits } from "vue"
import { timeFormat } from '@/utils/util'
const props = defineProps({
productid: {
type: String

View File

@ -1,32 +1,37 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" :async="true" :width="width" @close="handleClose" :showFootBtn="false">
<el-form ref="formRef" :model="formData" label-width="100px">
<el-descriptions :column="column" :title="detailConfig?.title || '详情'" border>
<el-descriptions-item :label="item.label" label-align="left" align="left"
v-for="(item, index) in detailConfig?.config.filter(item => !item.column)" :key="index">
{{ formData[item.value] ??
<el-descriptions :column="column" :title="detailConfig?.title || '详情'" border>
<el-descriptions-item :label="item.label" label-align="left" align="left"
v-for="(item, index) in detailConfig?.config.filter(item => !item.column)" :key="index"
label-class-name="my-label">
{{ formData[item.value] ??
(item.value.includes('.') ?
(formData[item.value.split('.')[0]])[item.value.split('.')[1]] :
'')
}}
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="1" border
v-for="(item, index) in detailConfig?.config.filter(item => item.column == 1)" :key="index">
<el-descriptions-item :label="item.label" label-align="left" align="left"
v-if="Array.isArray(formData[item.value])">
<el-link :href="items.uri" type="primary" target="_blank" v-for="items in formData[item.value]"
class="mr-5">
{{ items.name }}
</el-link>
</el-descriptions-item>
<el-descriptions-item :label="item.label" label-align="left" align="left" v-else>
{{ formData[item.value] }}
</el-descriptions-item>
</el-descriptions>
</el-form>
<div v-if="detailConfig?.table">
}}
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="2" border
v-for="(item, index) in detailConfig?.config.filter(item => item.column == 1)" :key="index"
v-show="formData[item.value]">
<el-descriptions-item :label="item.label" label-align="left" align="left"
v-if="Array.isArray(formData[item.value])" label-class-name="my-label">
<el-link :href="items.uri" type="primary" target="_blank" v-for="items in formData[item.value]"
class="mr-5">
{{ items.name }}
</el-link>
</el-descriptions-item>
<el-descriptions-item :label="item.label" label-align="left" align="left" label-class-name="my-label"
v-else>
{{ formData[item.value] }}
</el-descriptions-item>
</el-descriptions>
<div v-if="detailConfig?.table && tableLists.length">
<el-card class="mt-5" v-if="!Array.isArray(detailConfig?.table)">
<template #header>
{{ detailConfig.table.title }}列表
@ -125,4 +130,8 @@ defineExpose({
})
</script>
<style lang="scss" scoped></style>
<style lang="scss" scoped>
:deep(.my-label) {
width: 198px !important;
}
</style>

View File

@ -1,424 +1,562 @@
interface Iconfig{
/** 请求列表的接口*/
fetchFn:Function,
interface Iconfig {
/** 请求列表的接口*/
fetchFn: Function;
/**用户可搜索的内容select为下拉列表,select为数组时为自定义option,w为string时表示获取字典里的值 */
serchList:Array<{label:String,value:String,select?:Array<{name:string,value:string|Number}>|String }>,
/**用户可搜索的内容select为下拉列表,select为数组时为自定义option,w为string时表示获取字典里的值 */
serchList: Array<{
label: String;
value: String;
select?: Array<{ name: string; value: string | Number }> | String;
}>;
/**需要的字典数据隔开的string */
dictData?:String,
/**需要的字典数据隔开的string */
dictData?: String;
/**table配置 */
tableList:Array<Object>,
/**table配置 */
tableList: Array<Object>;
}
import { apiSupervisionProjectLists } from '@/api/supervision_project'
import { apiSupervisionParticipatingUnitsLists, } from '@/api/supervision_participating_units'
import { apiSupervisionCheckItemLists } from '@/api/supervision_check_item'
import { apiManageProjectLists} from '@/api/manage_project'
import { apiSupervisionDangerousEngineeringMonitoringLists, } from '@/api/supervision_dangerous_engineering_monitoring'
import { apiSupervisionMaterialEntryLists } from '@/api/supervision_material_entry'
import { apiSupervisionParticipatingUnitsQualificationsLists } from '@/api/supervision_participating_units_qualifications'
import { apiCostApprovedProjectLists } from '@/api/cost_approved_project'
import { apiCostProjectLists } from '@/api/cost_project'
import { apiTaskTypeLists } from '@/api/task_type'
import {apiSupervisionMaterialEquipmentInfoLists}from "@/api/supervision_material_equipment_info"
import { apiConsultProjectLists} from '@/api/consult_project'
import { apiZjzxInvoiceLists } from '@/api/zjzx_invoice'
import { apiSupervisionProjectLists } from "@/api/supervision_project";
import { apiSupervisionParticipatingUnitsLists } from "@/api/supervision_participating_units";
import { apiSupervisionCheckItemLists } from "@/api/supervision_check_item";
import { apiManageProjectLists } from "@/api/manage_project";
import { apiSupervisionDangerousEngineeringMonitoringLists } from "@/api/supervision_dangerous_engineering_monitoring";
import { apiSupervisionMaterialEntryLists } from "@/api/supervision_material_entry";
import { apiSupervisionParticipatingUnitsQualificationsLists } from "@/api/supervision_participating_units_qualifications";
import { apiCostApprovedProjectLists } from "@/api/cost_approved_project";
import { apiCostProjectLists } from "@/api/cost_project";
import { apiTaskTypeLists } from "@/api/task_type";
import { apiSupervisionMaterialEquipmentInfoLists } from "@/api/supervision_material_equipment_info";
import { apiConsultProjectLists } from "@/api/consult_project";
import { apiZjzxInvoiceLists } from "@/api/zjzx_invoice";
import { apiSubcontractingContractLists } from "@/api/subcontracting_contract";
import { apisupplierLists } from "@/api/suppler_list";
export const supervision_project: Iconfig = {
fetchFn: apiSupervisionProjectLists,
serchList: [
{
label: "项目名称",
value: "project_name",
},
{
label: "项目编号",
value: "project_code",
},
],
tableList: [
{ project_name: "项目名称" },
{ project_code: "项目编号" },
{ industry_text: "性质" },
{ build_unit: "建设单位" },
{ build_area_text: "建设区域" },
{ address: "项目地址" },
{ project_level_text: "项目等级" },
{ total_investment: "总投资" },
{ initiation_date: "立项日期" },
{ contract: "关联合同" },
{ contract_amount: "合同金额" },
{ project_overview: "项目概况" },
{ contract_content: "合同服务内容" },
{ project_requirements: "项目要求" },
{ remark: "备注" },
{ supervision_department: "监管部门" },
{ implementation_department: "实施部门" },
{ project_department: "项目部" },
{ engineering_status_text: "工程状态" },
{ project_manager: "项目负责人员" },
{ part_a_unit: "甲方单位" },
],
};
export const supervision_participating_units: Iconfig = {
fetchFn: apiSupervisionParticipatingUnitsLists,
serchList: [
{
label: "单位名称",
value: "unit_name",
},
{
label: "资质等级",
value: "qualification_grade",
},
],
tableList: [
{ unit_name: "单位名称" },
{ unit_type_text: "单位类别" },
{ qualification_grade: "资质等级" },
{ telephone: "联系电话" },
{ duty: "责任范围" },
],
};
export const supervision_project:Iconfig = {
fetchFn: apiSupervisionProjectLists,
serchList: [
{
label: '项目名称',
value: "project_name"
},
{
label: '项目编号',
value: "project_code"
},
],
tableList: [
{ project_name: "项目名称" },
{ project_code: "项目编号" },
{ industry_text: "性质" },
{ build_unit: "建设单位" },
{ build_area_text: "建设区域" },
{ address: "项目地址" },
{ project_level_text: "项目等级" },
{ total_investment: "总投资" },
{ initiation_date: "立项日期" },
{ contract: "关联合同" },
{ contract_amount: "合同金额" },
{ project_overview: "项目概况" },
{ contract_content: "合同服务内容" },
{ project_requirements: "项目要求" },
{ remark: "备注" },
{ supervision_department: "监管部门" },
{ implementation_department: "实施部门" },
{ project_department: "项目部" },
{ engineering_status_text: "工程状态" },
{ project_manager: "项目负责人员" },
{ part_a_unit: "甲方单位" },
]
}
export const supervision_check_item: Iconfig = {
fetchFn: apiSupervisionCheckItemLists,
dictData: "check_item_node_type",
serchList: [
{
label: "节点名称",
value: "node_name",
},
{
label: "节点类型",
value: "node_type",
select: "check_item_node_type",
},
],
tableList: [
{ project_name: "项目名称" },
{ node_name: "节点名称" },
{ node_type_text: "节点类型" },
{ node_code: "节点编号" },
],
};
export const supervision_participating_units:Iconfig = {
fetchFn: apiSupervisionParticipatingUnitsLists,
serchList: [
{
label: '单位名称',
value: "unit_name"
},
{
label: '资质等级',
value: "qualification_grade"
},
],
tableList: [
{ unit_name: "单位名称" },
{ unit_type_text: "单位类别" },
{ qualification_grade: "资质等级" },
{ telephone: "联系电话" },
{ duty: "责任范围" },
]
}
export const manage_project: Iconfig = {
fetchFn: apiManageProjectLists,
dictData: "cost_consultation_industry_nature,industry,engineering_status",
serchList: [
{
label: "项目名称",
value: "project_name",
},
{
label: "项目编号",
value: "project_code",
},
{
label: "性质",
value: "nature",
select: "cost_consultation_industry_nature",
},
{
label: "行业",
value: "industry",
select: "industry",
},
{
label: "工程状态",
value: "engineering_status",
select: "engineering_status",
},
],
tableList: [
{ project_name: "项目名称" },
{ project_code: "项目编号" },
{ nature_text: "性质" },
{ industry_text: "行业" },
{ build_area_text: "建设区域" },
{ project_level_text: "项目级别" },
{ total_investment: "总投资" },
{ engineering_status_text: "工程状态" },
{ implementation_department: "实施部门" },
{ supervision_department: "监管部门" },
{ project_manager: "项目经理" },
],
};
export const supervision_check_item:Iconfig = {
fetchFn: apiSupervisionCheckItemLists,
dictData:'check_item_node_type',
serchList: [
{
label: '节点名称',
value: "node_name"
},
{
label: '节点类型',
value: "node_type",
select:'check_item_node_type'
},
],
tableList: [
{ project_name: "项目名称" },
{ node_name: "节点名称" },
{ node_type_text: "节点类型" },
{ node_code: "节点编号" },
]
}
export const supervision_dangerous_engineering_monitoring: Iconfig = {
fetchFn: apiSupervisionDangerousEngineeringMonitoringLists,
dictData: "partial_project",
serchList: [
{
label: "危大工程类型",
value: "type",
},
{
label: "分部分项工程",
value: "partial_project",
select: "partial_project",
},
{
label: "施工部位",
value: "position",
},
],
tableList: [
{ project_name: "项目名称" },
{ type_text: "危大工程类型" },
{ partial_project_text: "分部分项工程" },
{ planned_construction_time: "计划施工时间" },
{ position: "施工部位" },
],
};
export const manage_project:Iconfig = {
fetchFn: apiManageProjectLists,
dictData:'cost_consultation_industry_nature,industry,engineering_status',
serchList: [
{
label: '项目名称',
value: "project_name"
},
{
label: '项目编号',
value: "project_code",
},
{
label:"性质",
value:'nature',
select:'cost_consultation_industry_nature'
},
{
label:"行业",
value:'industry',
select:"industry"
},
{
label:"工程状态",
value:'engineering_status',
select:"engineering_status"
}
],
tableList: [
{ project_name: "项目名称" },
{ project_code: "项目编号" },
{ nature_text: "性质" },
{ industry_text: "行业" },
{ build_area_text: "建设区域" },
{ project_level_text: "项目级别" },
{ total_investment: "总投资" },
{ engineering_status_text: "工程状态" },
{ implementation_department: "实施部门" },
{ supervision_department: "监管部门" },
{ project_manager: "项目经理" },
]
}
export const supervision_material_entry: Iconfig = {
fetchFn: apiSupervisionMaterialEntryLists,
serchList: [
{
label: "进场主题",
value: "theme",
},
{
label: "编号",
value: "code",
},
],
tableList: [
{ project_name: "项目名称" },
{ company_name: "采购单位" },
{ theme: "进场主题" },
{ code: "编号" },
{ enter_time: "进场时间" },
{ enter_result_text: "进场结果" },
{ parallel_test_text: "是否平行检验" },
],
};
export const supervision_dangerous_engineering_monitoring:Iconfig = {
fetchFn: apiSupervisionDangerousEngineeringMonitoringLists,
dictData:'partial_project',
serchList: [
export const supervision_material_equipment_info: Iconfig = {
fetchFn: apiSupervisionMaterialEquipmentInfoLists,
serchList: [
{
label: "材料/设备名称",
value: "name",
},
{
label: "材料/设备品牌",
value: "brand",
},
{
label: "合同约定品牌",
value: "contract_brand",
select: [
{
label: '危大工程类型',
value: "type"
name: "否",
value: 0,
},
{
label:"分部分项工程",
value:'partial_project',
select:"partial_project"
name: "是",
value: 1,
},
],
},
{
label: "类型",
value: "type",
select: [
{
name: "材料",
value: 0,
},
{
label:"施工部位",
value:'position',
}
],
tableList: [
{ project_name: "项目名称" },
{ type_text: "危大工程类型" },
{ partial_project_text: "分部分项工程" },
{ planned_construction_time: "计划施工时间" },
{ position: "施工部位" },
]
}
name: "设备",
value: 1,
},
],
},
],
tableList: [
{ project_name: "项目名称" },
{ name: "材料/设备名称" },
{ brand: "材料/设备品牌" },
{ model: "型号" },
{ unit: "计数单位" },
{ number: "计划数量" },
{ contract_brand_text: "合同约定品牌" },
{ type_text: "类型" },
{ remark: "备注" },
],
};
export const supervision_material_entry:Iconfig = {
fetchFn: apiSupervisionMaterialEntryLists,
serchList: [
{
label: '进场主题',
value: "theme"
},
{
label:"编号",
value:'code',
},
],
tableList: [
{ project_name: "项目名称" },
{ company_name: "采购单位" },
{ theme: "进场主题" },
{ code: "编号" },
{ enter_time: "进场时间" },
{ enter_result_text: "进场结果" },
{ parallel_test_text: "是否平行检验" },
]
}
export const supervision_participating_units_qualifications: Iconfig = {
fetchFn: apiSupervisionParticipatingUnitsQualificationsLists,
serchList: [
{
label: "资质名称",
value: "qualification_name",
},
{
label: "资质编号",
value: "qualification_number",
},
],
tableList: [
{ project_name: "项目名称" },
{ company_name: "所属单位" },
{ qualification_name: "资质名称" },
{ qualification_number: "资质编号" },
{ get_date: "发证日期" },
{ effective_date: "有效日期" },
{ qualification_status_text: "资质状态" },
{ remark: "备注" },
],
};
export const supervision_material_equipment_info:Iconfig = {
fetchFn: apiSupervisionMaterialEquipmentInfoLists,
serchList: [
{
label: '材料/设备名称',
value: "name"
},
{
label:"材料/设备品牌",
value:'brand',
},
{
label:"合同约定品牌",
value:'contract_brand',
select:[
{
name:"否",
value:0
},
{
name:"是",
value:1
},
]
},
{
label:"类型",
value:'type',
select:[
{
name:"材料",
value:0
},
{
name:"设备",
value:1
},
]
},
],
tableList: [
{ project_name: "项目名称" },
{ name: "材料/设备名称" },
{ brand: "材料/设备品牌" },
{ model: "型号" },
{ unit: "计数单位" },
{ number: "计划数量" },
{ contract_brand_text: "合同约定品牌" },
{ type_text: "类型" },
{ remark: "备注" },
]
}
export const cost_approved_projects: Iconfig = {
fetchFn: apiCostApprovedProjectLists,
serchList: [
{
label: "合同名称",
value: "contract_name",
},
{
label: "合同编号",
value: "contract_num",
},
],
tableList: [
{ contract_num: "合同编号" },
{ contract_name: "合同名称" },
{ part_a: "甲方签约单位" },
{ part_b: "乙方签约单位" },
{ start_date: "合同计划开始日期" },
{ end_date: "合同计划结束日期" },
{ project_money: "工程总投资" },
{ business_nature_text: "业务性质" },
{ dept: "签订部门" },
{ fund_sources_text: "资金来源" },
{ project_director: "项目总监" },
{ regulators: "监管部门" },
],
};
export const supervision_participating_units_qualifications:Iconfig = {
fetchFn: apiSupervisionParticipatingUnitsQualificationsLists,
serchList: [
{
label: '资质名称',
value: "qualification_name"
},
{
label:"资质编号",
value:'qualification_number',
},
],
tableList: [
{ project_name: "项目名称" },
{ company_name: "所属单位" },
{ qualification_name: "资质名称" },
{ qualification_number: "资质编号" },
{ get_date: "发证日期" },
{ effective_date: "有效日期" },
{ qualification_status_text: "资质状态" },
{ remark: "备注" },
]
}
export const cost_project: Iconfig = {
fetchFn: apiCostProjectLists,
serchList: [
{
label: "项目编号",
value: "project_num",
},
{
label: "项目名称",
value: "project_name",
},
],
tableList: [
{ project_name: "项目名称" },
{ address: "具体地址" },
{ starting: "计划开始日期" },
{ endtime: "计划结束日期" },
{ jhgq: "计划工期(天)" },
{ person_text: "项目相关人员" },
{ invest: "项目总投资(元)" },
{ budget: "预算造价(元)" },
{ cost: "送审造价(元)" },
{ approval: "审定造价(元)" },
{ aunit: "委托单位" },
{ acontactnum: "联系电话" },
{ date: "登记日期" },
{ generalize: "项目规模及概括" },
{ note: "注意事项" },
{ remark: "备注" },
],
};
export const cost_approved_projects:Iconfig = {
fetchFn: apiCostApprovedProjectLists,
serchList: [
{
label: '合同名称',
value: "contract_name"
},
{
label:"合同编号",
value:'contract_num',
},
],
tableList: [
{ contract_num: "合同编号" },
{ contract_name: "合同名称" },
{ part_a: "甲方签约单位" },
{ part_b: "乙方签约单位" },
{ start_date: "合同计划开始日期" },
{ end_date: "合同计划结束日期" },
{ project_money: "工程总投资" },
{ business_nature_text: "业务性质" },
{ dept: "签订部门" },
{ fund_sources_text: "资金来源" },
{ project_director: "项目总监" },
{ regulators: "监管部门" },
]
}
export const task_type: Iconfig = {
fetchFn: apiTaskTypeLists,
dictData: "superior_category",
serchList: [
{
label: "任务名称",
value: "unit_name",
},
{
label: "上级类别",
value: "superior_sort",
select: "superior_category",
},
],
tableList: [
{ dataid: "标识" },
{ num: "任务编号" },
{ name: "任务名称" },
{ level: "任务级次" },
{ remarks: "备注" },
],
};
export const cost_project:Iconfig = {
fetchFn: apiCostProjectLists,
serchList: [
{
label: '项目编号',
value: "project_num"
},
{
label:"项目名称",
value:'project_name',
},
],
tableList: [
{ project_name: "项目名称" },
{ address: "具体地址" },
{ starting: "计划开始日期" },
{ endtime: "计划结束日期" },
{ jhgq: "计划工期(天)" },
{ person_text: "项目相关人员" },
{ invest: "项目总投资(万元)" },
{ budget: "预算造价(万元)" },
{ cost: "送审造价(万元)" },
{ approval: "审定造价(万元)" },
{ aunit: "委托单位" },
{ acontactnum: "联系电话" },
{ date: "登记日期" },
{ generalize: "项目规模及概括" },
{ note: "注意事项" },
{ remark: "备注" },
]
}
export const consult_project: Iconfig = {
fetchFn: apiConsultProjectLists,
dictData: "",
serchList: [
{
label: "项目名称",
value: "project_name",
},
{
label: "项目编号",
value: "project_code",
},
],
tableList: [
{ project_name: "项目名称" },
{ project_code: "项目编号" },
{ company: "委托单位" },
{ total_investment: "总投资" },
{ contract: "关联合同" },
{ engineering_status_text: "工程状态" },
{ consult_type_text: "咨询类型" },
{ supervision_department: "监管部门" },
{ implementation_department: "实施部门" },
{ project_manager: "项目负责人员" },
],
};
export const task_type:Iconfig = {
fetchFn: apiTaskTypeLists,
dictData:"superior_category",
serchList: [
{
label: '任务名称',
value: "unit_name"
},
{
label:"上级类别",
value:'superior_sort',
select:'superior_category'
},
],
tableList: [
{ dataid: "标识" },
{ num: "任务编号" },
{ name: "任务名称" },
{ level: "任务级次" },
{ remarks: "备注" },
]
}
export const zjzx_invoice: Iconfig = {
fetchFn: apiZjzxInvoiceLists,
dictData: "zjzx_invoice_type",
serchList: [
{
label: "开票编号",
value: "invoice_code",
},
{
label: "发票类型",
value: "invoice_type",
select: "zjzx_invoice_type",
},
{
label: "开票单位名称",
value: "apply_company",
},
],
tableList: [
{ project_name: "项目名称" },
{ invoice_code: "开票编号" },
{ invoice_type_text: "发票类型" },
{ apply_amount: "开票申请金额" },
],
};
export const consult_project:Iconfig = {
fetchFn: apiConsultProjectLists,
dictData:"",
serchList: [
{
label: '项目名称',
value: "project_name"
},
{
label:"项目编号",
value:'project_code',
},
],
tableList: [
{ project_name: "项目名称" },
{ project_code: "项目编号" },
{ company: "委托单位" },
{ total_investment: "总投资" },
{ contract: "关联合同" },
{ engineering_status_text: "工程状态" },
{ consult_type_text: "咨询类型" },
{ supervision_department: "监管部门" },
{ implementation_department: "实施部门" },
{ project_manager: "项目负责人员" },
]
}
export const subcontracting_contract: Iconfig = {
fetchFn: apiSubcontractingContractLists,
// dictData: "zjzx_invoice_type",
serchList: [
{
label: "合同编号",
value: "contract_no",
},
],
tableList: [
{ supplier_name: "供应商名称" },
{ project_name: "项目名称" },
{ contract_no: "合同编号" },
{ contract_name: "合同名称" },
{ signing_date: "签订日期" },
{ contract_type: "合同类型" },
{ contract_amount: "合同金额" },
{ negotiation_amount: "洽商金额" },
{ excluding_tax_amount: "不含税金额" },
{ reality_contract_amount: "实际合同金额" },
{ has_pay_amount: "已付款金额" },
{ not_pay_amount: "未付款金额" },
{ invoice_amount: "已开票金额" },
{ not_invoice_amount: "未开票金额" },
{ refund_amount: "已退款金额" },
{ settlement_difference: "结算差异" },
],
};
export const zjzx_invoice:Iconfig = {
fetchFn: apiZjzxInvoiceLists,
dictData:"zjzx_invoice_type",
serchList: [
{
label: '开票编号',
value: "invoice_code"
},
{
label: '发票类型',
value: "invoice_type",
select:'zjzx_invoice_type'
},
{
label:"开票单位名称",
value:'apply_company',
},
],
tableList: [
{ project_name: "项目名称" },
{ invoice_code: "开票编号" },
{ invoice_type_text: "发票类型" },
{ apply_amount: "开票申请金额" },
]
}
export const supplier_tab: Iconfig = {
fetchFn: apisupplierLists,
serchList: [
{
label: "联系人",
value: "contacts",
},
{
label: "建档人",
value: "create_user_name",
},
{
label: "供应商编码",
value: "supplier_code",
},
],
tableList: [
{ create_user_name: "建档人" },
{ supplier_code: "供应商编码" },
{ supplier_name: "供应商名称" },
{ brand_category: "品牌类别" },
{ supplier_group: "供应商分组" },
{ supplier_category: "供应商分类" },
{ supplier_grade: "供应商等级" },
{ contacts: "联系人" },
{ contacts_sex: "性别" },
{ phone: "电话号码" },
],
};
import { apiProcurementContractLists } from "@/api/procurement_contract";
export const procurement_contract: Iconfig = {
fetchFn: apiProcurementContractLists,
serchList: [
{
label: "合同编号",
value: "contract_no",
},
],
tableList: [
{ supplier_name: "供应商名称" },
{ project_name: "项目名称" },
{ contract_name: "合同名称" },
{ contract_type: "合同类型" },
{ signing_date: "签订日期" },
{ contract_amount: "合同金额" },
{ has_pay_amount: "已付款金额" },
{ has_invoice_amount: "已开票金额" },
{ not_pay_amount: "未付款金额" },
{ not_invoice_amount: "未开票金额" },
{ refund_amount: "退款金额" },
{ has_storage_num: "已入库数量" },
{ not_storage_num: "未入库数量" },
{ num: "数量" },
],
};
import { paymentplanLists } from "@/api/paymentplan";
export const finance_payment_plan: Iconfig = {
fetchFn: paymentplanLists,
dictData: "pay_status",
serchList: [
{
label: "状态",
value: "status",
select: "pay_status",
},
],
tableList: [
{ supplier_name: "供应商名称" },
{ project_name: "项目名称" },
{ contract_name: "合同名称" },
{ contract_type_text: "合同类型" },
{ pay_date: "计划付款日期" },
{ amount: "金额" },
{ period_text: "期次" },
{ status_text: "状态" },
{ has_payment_amount: "已付款" },
{ not_payment_amount: "未付款" },
],
};
import { bankaccountLists } from "@/api/bank_account";
export const bank_account: Iconfig = {
fetchFn: bankaccountLists,
serchList: [
{
label: "账户编码",
value: "account_sn",
},
{
label: "账号",
value: "account",
},
{
label: "开户银行",
value: "deposit_bank",
},
{
label: "开户名称",
value: "account_name",
},
],
tableList: [
{ account_sn: "账户编码" },
{ deposit_bank: "开户银行" },
{ account_name: "开户名称" },
{ account: "账号" },
{ account_opening_date: "开户日期" },
{ opening_amount: "期初金额" },
],
};

View File

@ -32,7 +32,7 @@
</div>
</template>
<script lang="ts" setup>
import { defineProps } from "vue"
import { defineProps, onMounted, ref } from "vue"
import { useDictData } from '@/hooks/useDictOptions'
/** config
@ -55,14 +55,10 @@ const props = defineProps({
config: {
type: Object,
require: true
}
},
dictData: Object
})
//
const dictValue = props.config.tableConfig.map(item => Array.isArray(item.select) ? null : item.select).filter(item => item).join(',')
const { dictData } = useDictData(dictValue)
// table
const list = props.config.tableConfig.map(item => item.value)
const getInitialData = () => {
@ -87,4 +83,12 @@ const handleDelete = async (row: any) => {
};
//
// const dictValue = props.config.tableConfig.map(item => Array.isArray(item.select) ? null : item.select).filter(item => item).join(',')
// if (!props.dictData) {
// props.dictData = useDictData(dictValue)
// }
</script>

View File

@ -26,7 +26,7 @@
<el-table-column label="招标方式" prop="bidding_method" show-overflow-tooltip />
<el-table-column label="投标时间" property="bidding_time" />
<el-table-column label="预计工期" property="estimated_construction" />
<el-table-column label="项目估算(万元)" property="project_estimation" />
<el-table-column label="项目估算(元)" property="project_estimation" />
<!-- <el-table-column label="项目估算(外币)" property="master_phone" /> -->
<el-table-column label="联系人" property="contacts" />
<el-table-column label="联系电话" property="telephone" />
@ -47,7 +47,7 @@
</el-card>
</div>
</template>
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"

View File

@ -0,0 +1,32 @@
<template>
<el-tooltip :content="content" v-if="settingStore.showToolTip">
<el-icon :class="class">
<InfoFilled />
</el-icon>
</el-tooltip>
</template>
<script setup lang="ts">
import { defineProps } from 'vue';
import useSettingStore from '@/stores/modules/setting'
const settingStore = useSettingStore()
defineProps({
class: {
type: String,
default: "ml-2 mt-4"
},
content: {
type: String
}
})
</script>

View File

@ -7,12 +7,10 @@
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formData[value]" 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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFile(index)">x</span>
</div>
<div v-for="(item, index) in formData[value]" class="ml-5 flex ">
<el-link :href="item.uri" type="primary"> {{ item.name }}</el-link>
<span class="ml-2 cursor-pointer" @click="delFile(index)">x</span>
</div>
</template>
<script setup lang="ts">

View File

@ -1,12 +1,13 @@
const defaultSetting = {
showCrumb: true, // 是否显示面包屑
showLogo: true, // 是否显示logo
showToolTip:false,//是否开启文字提示
isUniqueOpened: true, //只展开一个一级菜单
sideWidth: 250, //侧边栏宽度
sideTheme: 'light', //侧边栏主题
sideTheme: 'dark', //侧边栏主题
sideDarkColor: '#1d2124', //侧边栏深色主题颜色
openMultipleTabs: true, // 是否开启多标签tab栏
theme: '#4A5DFF', //主题色
theme: '#FF8F4A', //主题色
successTheme: '#67c23a', //成功主题色
warningTheme: '#e6a23c', //警告主题色
dangerTheme: '#f56c6c', //危险主题色

View File

@ -1,27 +1,13 @@
<template>
<div class="setting-drawer">
<el-drawer
v-model="showSetting"
append-to-body
direction="rtl"
size="250px"
title="主题设置"
>
<el-drawer v-model="showSetting" append-to-body direction="rtl" size="250px" title="主题设置">
<div class="setting-item mb-5">
<span class="text-tx-secondary">风格设置</span>
<div class="flex mt-4 cursor-pointer">
<div
class="mr-4 flex relative text-primary"
v-for="item in sideThemeList"
:key="item.type"
@click="sideTheme = item.type"
>
<div class="mr-4 flex relative text-primary" v-for="item in sideThemeList" :key="item.type"
@click="sideTheme = item.type">
<img :src="item.image" width="52" height="36" />
<icon
v-if="sideTheme == item.type"
class="icon-select"
name="el-icon-Select"
/>
<icon v-if="sideTheme == item.type" class="icon-select" name="el-icon-Select" />
</div>
</div>
</div>
@ -40,21 +26,13 @@
<div class="setting-item mb-5 flex justify-between items-center">
<span class="text-tx-secondary">开启多页签栏</span>
<div>
<el-switch
v-model="openMultipleTabs"
:active-value="true"
:inactive-value="false"
/>
<el-switch v-model="openMultipleTabs" :active-value="true" :inactive-value="false" />
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
<span class="text-tx-secondary">只展开一个一级菜单</span>
<div>
<el-switch
v-model="isUniqueOpened"
:active-value="true"
:inactive-value="false"
/>
<el-switch v-model="isUniqueOpened" :active-value="true" :inactive-value="false" />
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
@ -75,6 +53,12 @@
<el-switch v-model="showCrumb" :active-value="true" :inactive-value="false" />
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
<div class="text-tx-secondary flex-none mr-3">显示Tooltip</div>
<div>
<el-switch v-model="showToolTip" :active-value="true" :inactive-value="false" />
</div>
</div>
<div class="setting-item mb-5 flex justify-between items-center">
<el-button @click="resetTheme">重置主题</el-button>
</div>
@ -196,6 +180,21 @@ const showCrumb = computed({
}
})
const showToolTip = computed({
get() {
return settingStore.showToolTip
},
set(value) {
settingStore.setSetting({
key: 'showToolTip',
value
})
}
})
const isDark = useDark()
const themeChange = () => {
settingStore.setTheme(isDark.value)

View File

@ -1,210 +0,0 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="开票申请详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px">
<el-descriptions :column="3" title="基本信息" border>
<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">{{
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.custom_name }}</el-descriptions-item>
<el-descriptions-item label="合同金额" label-align="left" align="left" label-class-name="my-label">
{{ formData.contract_amount }}
</el-descriptions-item>
<el-descriptions-item label="期次" label-align="left" align="left" label-class-name="my-label"> {{
formData.period_text }}</el-descriptions-item>
<el-descriptions-item label="税率(%)" label-align="left" align="left" label-class-name="my-label"> {{
formData.tax_rate_text }}</el-descriptions-item>
<el-descriptions-item label="发票类型" label-align="left" align="left" label-class-name="my-label"> {{
formData.invoice_type_text }}</el-descriptions-item>
<el-descriptions-item label="开票金额(含税)" label-align="left" align="left" label-class-name="my-label">
{{
formData.amount_including_tax }}</el-descriptions-item>
<!-- <el-descriptions-item label="开票金额(税额)" label-align="left" align="left" label-class-name="my-label"> {{ formData.industry_text }}</el-descriptions-item> -->
<el-descriptions-item label="开票内容" label-align="left" align="left" label-class-name="my-label"> {{
formData.content }}</el-descriptions-item>
<el-descriptions-item label="发票编号" label-align="left" align="left" label-class-name="my-label"> {{
formData.invoice_no }}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex && formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">文件{{ index + 1 }} 查看</a>
</div>
</div>
<div v-else>
暂无文件
</div>
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="3" title="客户开票信息" border style="margin: 20px 0;">
<el-descriptions-item label="开票公司名称" label-align="left" align="left" label-class-name="my-label">{{
formData.invoicing_company_name }}</el-descriptions-item>
<el-descriptions-item label="纳税人识别号" label-align="left" align="left" label-class-name="my-label"> {{
formData.taxpayer_identification_number }}</el-descriptions-item>
<el-descriptions-item label="开户银行" label-align="left" align="left" label-class-name="my-label">{{
formData.deposit_bank }}</el-descriptions-item>
<el-descriptions-item label="账号" label-align="left" align="left" label-class-name="my-label"> {{
formData.bank_accnout }}</el-descriptions-item>
<el-descriptions-item label="开户地址及电话" label-align="left" align="left" label-class-name="my-label">
{{ formData.address_phone }}
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="3" title="发票邮寄信息" border style="margin: 20px 0;">
<el-descriptions-item label="收票地址" label-align="left" align="left" label-class-name="my-label">{{
formData.receiving_address }}</el-descriptions-item>
<el-descriptions-item label="联系人" label-align="left" align="left" label-class-name="my-label"> {{
formData.contacts }}</el-descriptions-item>
<el-descriptions-item label="联系电话" label-align="left" align="left" label-class-name="my-label">{{
formData.phone }}</el-descriptions-item>
<el-descriptions-item label="邮寄时间" label-align="left" align="left" label-class-name="my-label"> {{
formData.mailing_type }}</el-descriptions-item>
<el-descriptions-item label="邮寄方式" label-align="left" align="left" label-class-name="my-label"> {{
formData.mailing_type }}</el-descriptions-item>
<el-descriptions-item label="邮寄单号" label-align="left" align="left" label-class-name="my-label">
{{ formData.mailing_no }}
</el-descriptions-item>
</el-descriptions>
<flowProcess v-if="!formData?.approve_id || formData.approve_check_status == 4" :flows="flows"
:submitApi="apiInvoicingRequestsApprove" :id="formData?.id" @off="handleClose">
</flowProcess>
<flowDetail v-else :approve_id="formData?.approve_id" @off="handleClose" />
<!-- import { apiInvoicingRequestsApprove, apiInvoicingRequestsFlows } from '@/api/flowSet.ts'
//
const flows = ref([])
const getbidDocumentExaminationFlows = async () => {
if (formData?.approve_id) return
let res = await apisubcontracting_contract_negotiationFlows()
flows.value = res
} -->
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { apiInvoicingRequestsApprove, apiInvoicingRequestsFlows } from '@/api/flowSet.ts'
import type { PropType } from 'vue'
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>>()
const formDataannex = reactive([])
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
Object.assign(formData, data)
getbidDocumentExaminationFlows()
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiCustomDetail({
id: formData.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
//
const flows = ref([])
const getbidDocumentExaminationFlows = async () => {
if (formData?.approve_id) return
let res = await apiInvoicingRequestsFlows()
flows.value = res
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style lang="scss" scoped>
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>

View File

@ -0,0 +1,118 @@
const detailConfig = {
title: "开票申请",
config: [
{
label: "合同编号",
value: "contract_code"
},
{
label: "合同名称",
value: "contract_name"
},
{
label: "项目名称",
value: "project_name"
},
{
label: "项目编码",
value: "project_code"
},
{
label: "客户名称",
value: "custom_name"
},
{
label: "开票日期",
value: "invoicing_date"
},
{
label: "合同金额",
value: "contract_amount"
},
{
label: "期次",
value: "period_text"
},
{
label: "税率",
value: "tax_rate_text"
},
{
label: "发票类型",
value: "invoice_type_text"
},
{
label: "开票金额(含税)",
value: "invoicing_amount"
},
{
label: "开票内容",
value: "content",
column: 1
},
{
label: "发票编号",
value: "invoice_no"
},
{
label: "开票公司名称",
value: "invoicing_company_name"
},
{
label: "纳税人识别号",
value: "taxpayer_identification_number"
},
{
label: "开户银行",
value: "deposit_bank"
},
{
label: "账号",
value: "bank_accnout"
},
{
label: "开户地址及电话",
value: "address_phone"
},
{
label: "收票地址",
value: "receiving_address"
},
{
label: "联系人",
value: "contacts"
},
{
label: "联系电话",
value: "phone"
},
{
label: "邮寄时间",
value: "mailing_time"
},
{
label: "邮寄方式",
value: "mailing_type"
},
{
label: "邮寄单号",
value: "mailing_no"
},
{
label: "备注",
value: "remark",
column: 1
},
{
label: "附件",
value: "annex",
column: 1
},
],
}
export default detailConfig;

View File

@ -1,109 +0,0 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="开票申请详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData">
<el-descriptions :column="3" title="房子出租" border>
<el-descriptions-item label="开票公司名称" label-align="left">
{{ formData.invoicing_company_name }}萨达撒旦发射点发射
</el-descriptions-item>
<el-descriptions-item label="开票公司名称" label-align="left">
{{ formData.invoicing_company_name }}萨达撒旦发射点发射点发射点大师傅士大夫都是
</el-descriptions-item>
<el-descriptions-item label="开票公司名称" label-align="left">
{{ formData.invoicing_company_name }}点发射点大师傅士大夫都是
</el-descriptions-item>
<el-descriptions-item label="开票公司名称" label-align="left">
{{ formData.invoicing_company_name }}点发
</el-descriptions-item>
<el-descriptions-item label="开票公司名称" label-align="left">
{{ formData.invoicing_company_name }}点发点发射点大师傅士大夫都是点发射点大师傅士大夫都是
</el-descriptions-item>
<el-descriptions-item label="开票公司名称" label-align="left">
{{ formData.invoicing_company_name }}点发点发射点大师傅士大夫都是
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="3" title="空闲土地出租" border>
<el-descriptions-item label="开票公司名称" label-align="left">
{{ formData.invoicing_company_name }}
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="3" title="农副产品出售" border>
<el-descriptions-item label="开票公司名称" label-align="left">
{{ formData.invoicing_company_name }}
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="3" title="空闲资产出租/出售" border>
<el-descriptions-item label="开票公司名称" label-align="left">
{{ formData.invoicing_company_name }}
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="3" title="房屋装饰建设" border>
<el-descriptions-item label="开票公司名称" label-align="left">
{{ formData.invoicing_company_name }}
</el-descriptions-item>
</el-descriptions>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
})
</script>
<style lang="scss" scoped>
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
</style>

View File

@ -1,7 +1,6 @@
<template>
<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">
<el-card>
<template #header>
@ -38,8 +37,8 @@
<el-col :span="8">
<el-form-item label="开票日期" prop="invoicing_date"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.invoicing_date" clearable
type="date" value-format="YYYY-MM-DD" placeholder="选择开票日期">
<el-date-picker class="flex-1 !flex" v-model="formData.invoicing_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="选择开票日期">
</el-date-picker>
</el-form-item>
</el-col>
@ -53,8 +52,8 @@
<el-form-item label="期次" prop="period"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-select class="flex-1" v-model="formData.period" clearable placeholder="请选择期次">
<el-option v-for="(item, index) in dictData.pay_period" :key="index"
:label="item.name" :value="parseInt(item.value)" />
<el-option v-for="(item, index) in dictData.pay_period" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
@ -62,15 +61,14 @@
<el-form-item label="税率" prop="tax_rate">
<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="parseInt(item.value)" />
<el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="发票类型" prop="contacts">
<el-select class="flex-1" v-model="formData.invoice_type" clearable
placeholder="请选择发票类型">
<el-select class="flex-1" v-model="formData.invoice_type" clearable placeholder="请选择发票类型">
<el-option v-for="(item, index) in dictData.invoice_type" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
@ -105,26 +103,7 @@
</el-col>
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;"
@click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData" />
</el-form-item>
</el-col>
</el-row>
@ -192,14 +171,13 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系电话" prop="phone"
:rules="[{ validator: checkPhone, trigger: 'blur' }]">
<el-form-item label="联系电话" prop="phone" :rules="[{ validator: checkPhone, trigger: 'blur' }]">
<el-input v-model="formData.phone" clearable placeholder="请输入联系电话" />
</el-form-item>
</el-col> <el-col :span="8">
<el-form-item label="邮寄时间" prop="mailing_time">
<el-date-picker class="flex-1 !flex" v-model="formData.mailing_time" clearable
type="date" value-format="YYYY-MM-DD" placeholder="选择邮寄时间">
<el-date-picker class="flex-1 !flex" v-model="formData.mailing_time" clearable type="date"
value-format="YYYY-MM-DD" placeholder="选择邮寄时间">
</el-date-picker>
</el-form-item>
</el-col>
@ -254,21 +232,9 @@ const custom_name = ref('')
const next = () => {
if (active.value++ > 3) active.value = 0
}
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
@ -288,11 +254,6 @@ let invoicing_amount_daxie = computed(() => {
})
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
let props = defineProps({
project: Object
@ -328,7 +289,7 @@ const customEvent1 = (e: any) => {
};
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目表' : '新增项目表'
return mode.value == 'edit' ? '编辑开票申请' : '新增开票申请'
})
//
@ -370,19 +331,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore

View File

@ -2,26 +2,22 @@
<div>
<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-form-item label="关联合同" prop="contract_id">
<selectRemote :formData="queryParams" model="contract_id" :api="apiContractSearch" />
</el-form-item>
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<el-form-item label="客户名称" prop="custom_id">
<selectRemote :formData="queryParams" model="custom_id" :api="apiCustomSearch" />
</el-form-item>
<el-form-item label="开票编号" prop="invoicing_code">
<el-input class="w-[280px]" v-model="queryParams.invoicing_code" clearable placeholder="请输入开票编号" />
</el-form-item>
<el-form-item label="开票公司" prop="invoicing_company_name">
<el-input class="w-[280px]" v-model="queryParams.invoicing_company_name" clearable
placeholder="请输入开票公司名称" />
</el-form-item>
<el-form-item label="客户" prop="customer_id">
<el-select class="w-[280px]" v-model="queryParams.customer_id" clearable placeholder="请选择客户">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, i) in list1" :key="i" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<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-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -46,18 +42,18 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" 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="project_code" show-overflow-tooltip />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
<el-table-column label="开票编号" prop="invoicing_code" show-overflow-tooltip />
<el-table-column label="开票公司" prop="invoicing_company_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">
<el-table-column label="操作" width="160" fixed="right" align="center">
<template #default="{ row }">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/edit']" type="primary" link
@click="handleEdit(row)">
@ -68,7 +64,7 @@
删除
</el-button>
<el-button v-perms="['InvoicingRequests.InvoicingRequests/detail']" link
@click="handledetail(row)">
@click="handleDetail(row.id)">
详情
</el-button>
</template>
@ -80,7 +76,7 @@
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
<detailPage v-if="showDetail" ref="detailRef" @close="showEdit = false" :detailConfig="detailConfig" :column="2" />
</div>
</template>
@ -88,34 +84,28 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiinvoiceapplyLists, apiinvoiceapplyDelete, apiinvoiceapplyDetail } from '@/api/InvoicingRequests'
import { timeFormat } from '@/utils/util'
import { apiContractLists } from '@/api/contract'
import { apiCustomLists } from '@/api/custom'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import { apiContractSearch } from '@/api/contract'
import { apiProjectSearch } from '@/api/project'
import { apiCustomSearch } from '@/api/custom'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
import { useRoute } from "vue-router";
const route = useRoute()
import detailConfig from './detail'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailRef = ref('')
//
const showEdit = ref(false)
const showDtail = ref(false)
const list = ref([])
const list1 = ref([])
const showDetail = ref(false)
const route = useRoute()
//
const queryParams = reactive({
invoicing_code: '',
invoicing_company_name: '',
contract_id: '',
customer_id: '',
project_id: ''
})
//
@ -157,33 +147,15 @@ const handleDelete = async (id: number | any[]) => {
await apiinvoiceapplyDelete({ id })
getLists()
}
//
const handledetail = async (data: any) => {
let res = await apiinvoiceapplyDetail({ id: data.id })
showDtail.value = true
//
const handleDetail = async (id: any) => {
let res = await apiinvoiceapplyDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
//
const getlist1 = () => {
apiContractLists().then((res) => {
list.value = res.lists
})
}
//
const getlist2 = () => {
apiCustomLists().then((res) => {
list1.value = res.lists
})
}
getlist1()
getlist2()
if (route.query?.listId) {
handledetail({ id: route.query.listId })

View File

@ -1,21 +1,17 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="银行账户详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-descriptions :column="3" border>
<el-descriptions-item label="组织名称" label-align="left" align="left" label-class-name="my-label">{{
formData.org_name }}</el-descriptions-item>
<el-descriptions-item label="部门名称" label-align="left" align="left" label-class-name="my-label">{{
formData.dept_name }}</el-descriptions-item>
<popup ref="popupRef" title="银行账户详情" :async="true" width="30%" @confirm="handleSubmit" @close="handleClose">
<el-descriptions :column="1" border>
<el-descriptions-item label="账户编码" label-align="left" align="left" label-class-name="my-label">{{
formData.account_sn }}</el-descriptions-item>
formData.account_sn }}</el-descriptions-item>
<el-descriptions-item label="开户银行" label-align="left" align="left" label-class-name="my-label">{{
formData.deposit_bank }}</el-descriptions-item>
formData.deposit_bank }}</el-descriptions-item>
<el-descriptions-item label="开户名称" label-align="left" align="left" label-class-name="my-label">{{
formData.account_name }}</el-descriptions-item>
formData.account_name }}</el-descriptions-item>
<el-descriptions-item label="账号" label-align="left" align="left" label-class-name="my-label">{{
formData.account }}</el-descriptions-item>
formData.account }}</el-descriptions-item>
<el-descriptions-item label="开户日期" label-align="left" align="left" label-class-name="my-label">{{
formData.account_opening_date }}</el-descriptions-item>
formData.account_opening_date }}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label">{{
formData.remark }}</el-descriptions-item>
</el-descriptions>
@ -28,7 +24,6 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
@ -57,14 +52,6 @@ const formData = reactive({
//
const setFormData = async (data: Record<any, any>) => {
// for (const key in formData) {
// if (data[key] != null && data[key] != undefined) {
// //@ts-ignore
// formData[key] = data[key]
// }
// }
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
@ -106,12 +93,6 @@ const handleClose = () => {
}
defineExpose({
open,
setFormData,

View File

@ -5,26 +5,6 @@
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10">
<el-col :span="24">
<el-form-item label="组织名称" prop="org_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt"
class="flex-1">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="部门名称" prop="dept_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门" class="flex-1">
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="账户编码">
<el-input v-model="bank_no" clearable disabled placeholder="系统自动生成" />
@ -73,17 +53,7 @@
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
<!-- <el-dialog v-model="showDialog3" title="选择收款人信息" width="70%">
<bankaccountDialog @customEvent="customEvent3"></bankaccountDialog>
</el-dialog> -->
</el-form>
</popup>
@ -91,24 +61,10 @@
</template>
<script lang="ts" setup name="projectEdit">
import porjectDialog from '@/components/project/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { bankaccountAdd, bankaccountEdit, bankaccountDetail } from '@/api/bank_account'
import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype'
import { timeFormat } from '@/utils/util'
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const list1 = reactive([])
const list2 = reactive([])
const showDialog = ref(false)
const bank_no = ref('')
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
const emit = defineEmits(['success', 'close'])
@ -117,27 +73,6 @@ const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog3 = ref(false)
//
const getlist = () => {
getAll().then((res) => {
Object.assign(list1, res)
})
}
//
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
list2.splice(0, list2.length, ...res)
})
}
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑质量目标表' : '新增质量目标表'
@ -146,8 +81,6 @@ const popupTitle = computed(() => {
//
const formData = reactive({
id: '',
org_id: '',
dept_id: '',
deposit_bank: '',
account_name: '',
account: '',
@ -171,22 +104,13 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
if (data.dept_id) {
getlist1(data.org_id)
}
bank_no.value = data.account_sn
}
const getDetail = async (row: Record<string, any>) => {
const data = await bankaccountDetail({
@ -198,7 +122,6 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
@ -210,11 +133,8 @@ const handleSubmit = async () => {
//
const open = (type = 'add') => {
getlist()
mode.value = type
popupRef.value?.open()
}
//
@ -222,8 +142,6 @@ const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,

View File

@ -37,24 +37,14 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
<el-table-column label="账户编码" prop="account_sn" show-overflow-tooltip />
<el-table-column label="开户银行" prop="deposit_bank" show-overflow-tooltip />
<el-table-column label="开户名称" prop="account_name" show-overflow-tooltip />
<el-table-column label="账号" prop="account" show-overflow-tooltip />
<el-table-column label="开户日期" prop="account_opening_date" show-overflow-tooltip />
<el-table-column label="期初金额" prop="opening_amount" show-overflow-tooltip />
<!-- <el-table-column label="入账金额" prop="bidder_amount" show-overflow-tooltip />
<el-table-column label="出账金额" prop="bidder_amount" show-overflow-tooltip />
<el-table-column label="账户余额" prop="bidder_amount" show-overflow-tooltip />
<el-table-column label="账户资金余额" prop="bidder_amount" show-overflow-tooltip />
<el-table-column label="汇票账户余额" prop="bidder_amount" show-overflow-tooltip /> -->
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<el-table-column label="操作" width="160" fixed="right" align="center">
<template #default="{ row }">
<el-button v-perms="['bid.bid_result/edit']" type="primary" link @click="handleEdit(row)">
编辑
@ -82,11 +72,6 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { bankaccountLists, bankaccountDelete, bankaccountDetail } from '@/api/bank_account'
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'
import DetailPopup from './detail.vue'

View File

@ -1,56 +1,55 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="投标决策详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-card>
<el-descriptions :column="3" border>
<el-descriptions-item label="流程编号" label-align="left" align="left" label-class-name="my-label">{{
formData.code }}</el-descriptions-item>
formData.code }}</el-descriptions-item>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label">{{
formData.project_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>
formData.project_code }}</el-descriptions-item>
<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">{{
formData.project_estimation }}</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_estimation }}</el-descriptions-item>
<el-descriptions-item label="招标项目资金来源" label-align="left" align="left" label-class-name="my-label">{{
formData.bidding_project_fund_source }}</el-descriptions-item>
<el-descriptions-item label="招标项目资金来源" label-align="left" align="left"
label-class-name="my-label">{{
formData.bidding_project_fund_source_text }}</el-descriptions-item>
<el-descriptions-item label="投标时间" label-align="left" align="left" label-class-name="my-label">{{
formData.bidding_time }}</el-descriptions-item>
formData.bidding_time }}</el-descriptions-item>
<el-descriptions-item label="招标方式" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_type }}</el-descriptions-item>
formData.bid_type_text }}</el-descriptions-item>
<el-descriptions-item label="竞争对手" label-align="left" align="left" label-class-name="my-label">{{
formData.competitor }}</el-descriptions-item>
formData.competitor }}</el-descriptions-item>
<el-descriptions-item label="是否需要保证金" label-align="left" align="left" label-class-name="my-label">{{
formData.is_margin }}</el-descriptions-item>
<el-descriptions-item label="保证金金额(元)" label-align="left" align="left" label-class-name="my-label">{{
formData.margin_amount }}</el-descriptions-item>
formData.is_margin_text }}</el-descriptions-item>
<el-descriptions-item label="保证金金额(元)" label-align="left" align="left"
label-class-name="my-label">{{
formData.margin_amount }}</el-descriptions-item>
<el-descriptions-item label="开标日期" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_opening_date }}</el-descriptions-item>
formData.bid_opening_date }}</el-descriptions-item>
<el-descriptions-item label="保证金退还时间" label-align="left" align="left" label-class-name="my-label">{{
formData.margin_amount_return_date }}</el-descriptions-item>
formData.margin_amount_return_date }}</el-descriptions-item>
<el-descriptions-item label="有无内部资源" label-align="left" align="left" label-class-name="my-label">{{
formData.is_internal_resources }}</el-descriptions-item>
formData.is_internal_resources_text }}</el-descriptions-item>
<el-descriptions-item label="项目把握度" label-align="left" align="left" label-class-name="my-label">{{
formData.project_assurance }}</el-descriptions-item>
formData.project_assurance_text }}</el-descriptions-item>
<el-descriptions-item label="招标项目概况" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_project_overview }}</el-descriptions-item>
formData.bid_project_overview }}</el-descriptions-item>
<el-descriptions-item label="项目简介" label-align="left" align="left" label-class-name="my-label">{{
formData.project_desc }}</el-descriptions-item>
formData.project_desc }}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formDataannex.length > 0">

View File

@ -5,42 +5,45 @@
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-row>
<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="选择项目"
:disabled="project" />
<el-form-item label="项目名称" @click="showDialog = true">
<el-input v-model="formData.project_name" readonly clearable placeholder="选择项目" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-form-item label="项目编码">
<el-input v-model="project_code" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="客户名称" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-form-item label="客户名称">
<el-input v-model="matsname" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col><el-col :span="8">
</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="请输入项目估算"
type="number" />
</el-form-item></el-col><el-col :span="24">
<el-form-item label="招标项目资金来源" label-width="130px" prop="bidding_project_fund_source">
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目资金来源" label-width="130px" prop="bidding_project_fund_source">
<el-radio-group v-model="formData.bidding_project_fund_source" placeholder="请选择招标项目资金来源">
<el-radio v-for="(item, index) in dictData.construction_funds_sources" :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>
</el-col>
<el-col :span="8">
<el-form-item label="投标时间" prop="bidding_time">
<!-- <el-input v-model="formData.bidding_time" clearable placeholder="请输入投标时间" />
-->
<el-date-picker v-model="formData.bidding_time" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" placeholder="请选择投标时间" clearable></el-date-picker>
</el-form-item></el-col><el-col :span="8">
value-format="YYYY-MM-DD" placeholder="请选择投标时间" class="!flex flex-1"
clearable></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="招标方式" prop="bid_type">
<el-radio-group v-model="formData.bid_type" placeholder="请选择招标方式">
<el-radio v-for="(item, index) in dictData.bidding_method" :key="index"
@ -48,10 +51,14 @@
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item></el-col><el-col :span="8">
</el-form-item>
</el-col>
<el-col :span="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>
</el-col>
<el-col :span="8">
<el-form-item label="是否需要保证金" prop="is_margin"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-radio-group v-model="formData.is_margin" placeholder="请选择是否需要保证金">
@ -60,21 +67,25 @@
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item></el-col><el-col :span="8">
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="保证金金额" prop="margin_amount">
<el-input v-model="formData.margin_amount" clearable placeholder="请输入保证金金额" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="开标日期" prop="bid_opening_date">
<!-- <el-input v-model="formData.bid_opening_date" clearable placeholder="请输入开标日期" />
-->
<el-date-picker v-model="formData.bid_opening_date" format="YYYY-MM-DD"
<el-date-picker class="!flex flex-1" v-model="formData.bid_opening_date" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" placeholder="请输入开标日期" clearable></el-date-picker>
</el-form-item></el-col><el-col :span="8">
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="保证金退还时间" prop="margin_amount_return_date">
<!-- <el-input v-model="formData.margin_amount_return_date" clearable placeholder="请输入保证金退还时间" /> -->
<el-date-picker v-model="formData.margin_amount_return_date" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" placeholder="请输入保证金退还时间" clearable></el-date-picker>
</el-form-item></el-col><el-col :span="24">
class="!flex flex-1" value-format="YYYY-MM-DD" placeholder="请输入保证金退还时间"
clearable></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="有无内部资源" prop="is_internal_resources">
<el-radio-group v-model="formData.is_internal_resources" placeholder="请选择有无内部资源">
<el-radio v-for="(item, index) in dictData.whether_status" :key="index"
@ -82,27 +93,30 @@
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item></el-col>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目把握度" label-width="130px" prop="project_assurance">
<el-select v-model="formData.project_assurance" clearable placeholder="请选择项目把握度">
<el-select v-model="formData.project_assurance" clearable placeholder="请选择项目把握度"
class="flex-1">
<el-option v-for="(item, index) in dictData.project_assurance" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item></el-col>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="招标项目概况" prop="bid_project_overview">
<el-input v-model="formData.bid_project_overview" clearable placeholder="请输入招标项目概况" />
</el-form-item></el-col><el-col :span="8">
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目简介" prop="project_desc">
<el-input v-model="formData.project_desc" clearable placeholder="请输入项目简介" />
</el-form-item></el-col><el-col :span="24">
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="附件">
<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"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
@ -111,18 +125,16 @@
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
</el-form-item></el-col>
</div> -->
<UploadAnnex :formData="formData"></UploadAnnex>
</el-form-item>
</el-col>
</el-row>
</el-form>
<reviewprocess />
@ -146,36 +158,14 @@ let props = defineProps({
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 showDialog = ref(false)
const mode = ref('')
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
const formDataannex = reactive([])
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const popupTitle = computed(() => {
@ -186,6 +176,7 @@ const popupTitle = computed(() => {
const formData = reactive({
id: '',
project_id: '',
project_name: "",
project_estimation: '',
bidding_project_fund_source: '',
bidding_time: '',
@ -208,7 +199,7 @@ const formData = reactive({
const customEvent = (e: any) => {
formData.project_id = e.id;
matsname.value = e.custom_name
project_name.value = e.name
formData.project_name = e.name
project_code.value = e.project_code
showDialog.value = false;
};
@ -223,18 +214,8 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
matsname.value = data.custom_name
project_name.value = data.project_name
project_code.value = data.project_code
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
@ -255,9 +236,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'

View File

@ -63,12 +63,14 @@
<el-table-column label="项目把握度" width="85" prop="project_assurance" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<!-- <el-button v-perms="['bid.bid_bidding_decision/edit']" type="primary" link @click="handleEdit(row)">
<el-button v-perms="['bid.bid_bidding_decision/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button> -->
<!-- <el-button v-perms="['bid.bid_bidding_decision/delete']" type="danger" link @click="handleDelete(row.id)">
</el-button>
<el-button v-perms="['bid.bid_bidding_decision/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button> -->
</el-button>
<el-button v-perms="['bid.bid_bidding_decision/detail']" link @click="handledetail(row)">
详情
</el-button>
@ -88,8 +90,9 @@
<script lang="ts" setup name="bidBiddingDecisionLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiBidBiddingDecisionLists, apiBidBiddingDecisionDetail } from '@/api/bid_bidding_decision'
import { apiBidBiddingDecisionLists, apiBidBiddingDecisionDetail, apiBidBiddingDecisionDelete } from '@/api/bid_bidding_decision'
import { apiProjectSearch } from '@/api/project'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
@ -141,6 +144,25 @@ const handledetail = async (data: any) => {
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
//
const handleEdit = async (data: any) => {
let res = await apiBidBiddingDecisionDetail({ 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 apiBidBiddingDecisionDelete({ id })
getLists()
}
getLists()
import { useRoute } from "vue-router";
const route = useRoute()

View File

@ -1,52 +1,51 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="购买标书详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-card>
<el-descriptions :column="3" border>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label">{{
formData.project_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.code }}</el-descriptions-item>
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="客户名称" label-align="left" align="left" label-class-name="my-label">{{
formData.custom_name }}</el-descriptions-item>
formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="招标公司名称" label-align="left" align="left" label-class-name="my-label">{{
formData.invite_tenders_company_name }}</el-descriptions-item>
formData.invite_tenders_company_name }}</el-descriptions-item>
<el-descriptions-item label="投标公司名称" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_company_name }}</el-descriptions-item>
formData.bid_company_name }}</el-descriptions-item>
<el-descriptions-item label="标书编号" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_document_no }}</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.buyer }}</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.bidding_project_fund_source }}</el-descriptions-item>
formData.buyer_name }}</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.bidding_project_fund_source }}</el-descriptions-item>
<el-descriptions-item label="投标时间" label-align="left" align="left" label-class-name="my-label">{{
formData.bidding_time }}</el-descriptions-item>
formData.bidding_time }}</el-descriptions-item>
<el-descriptions-item label="购买标书时间" label-align="left" align="left" label-class-name="my-label">{{
formData.buy_date }}</el-descriptions-item>
formData.buy_date }}</el-descriptions-item>
<el-descriptions-item label="招标方式" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_type }}</el-descriptions-item>
formData.bid_type }}</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.bid_address }}</el-descriptions-item>
formData.amount }}</el-descriptions-item>
<!-- <el-descriptions-item label="投标地址" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_address }}</el-descriptions-item> -->
<el-descriptions-item label="是否需要保证金" label-align="left" align="left" label-class-name="my-label">{{
formData.is_margin }}</el-descriptions-item>
<el-descriptions-item label="保证金金额(元)" label-align="left" align="left" label-class-name="my-label">{{
formData.margin_amount }}</el-descriptions-item>
formData.is_margin }}</el-descriptions-item>
<el-descriptions-item label="保证金金额(元)" label-align="left" align="left"
label-class-name="my-label">{{
formData.margin_amount }}</el-descriptions-item>
<el-descriptions-item label="招标项目慨况" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_project_overview }}</el-descriptions-item>
formData.bid_project_overview }}</el-descriptions-item>
<el-descriptions-item label="项目简介" label-align="left" align="left" label-class-name="my-label">{{
formData.project_desc }}</el-descriptions-item>
formData.project_desc }}</el-descriptions-item>
</el-descriptions>
</el-card>

View File

@ -1,59 +1,45 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules" inline>
<el-row>
<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-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="project_code" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="客户名称" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="matsname" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="招标公司名称" prop="invite_tenders_company_name"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.invite_tenders_company_name" clearable
placeholder="请输入招标公司名称" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="投标公司名称" prop="bid_company_name"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.bid_company_name" clearable placeholder="请输入投标公司名称" />
</el-form-item></el-col>
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-col :span="8">
<el-form-item label="投标决策信息" prop="bid_decision_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog2 = true">
<el-input v-model="formData.bid_document_no" clearable placeholder="请选择" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="购买人员" prop="buyer" @click="userclick">
<el-input v-model="buyer_name" clearable placeholder="请输入购买人员" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="购买标书金额" prop="amount">
<el-input v-model="formData.amount" clearable placeholder="请输入购买标书金额" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="购买标书时间" prop="buy_date">
<el-date-picker class="flex-1 !flex" v-model="formData.buy_date" clearable
value-format="YYYY-MM-DD" placeholder="选择购买标书时间">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="项目名称" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]" @click="showDialog = true">
<el-input v-model="formData.project_name" readonly clearable placeholder="选择项目" />
</el-form-item>
<el-form-item label="项目编码" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="formData.project_code" clearable disabled placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="客户名称" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="formData.custom_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="招标公司名称" prop="invite_tenders_company_name"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.invite_tenders_company_name" clearable placeholder="请输入招标公司名称" />
</el-form-item>
<el-form-item label="投标公司名称" prop="bid_company_name"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.bid_company_name" clearable placeholder="请输入投标公司名称" />
</el-form-item>
<el-form-item label="投标决策信息" prop="bid_decision_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog2 = true">
<el-input v-model="formData.bid_document_no" clearable placeholder="请选择" />
</el-form-item>
<el-form-item label="购买人员" prop="buyer" @click="userclick">
<el-input v-model="formData.buyer_name" clearable placeholder="请输入购买人员" />
</el-form-item>
<el-form-item label="购买标书金额" prop="amount">
<el-input v-model="formData.amount" clearable placeholder="请输入购买标书金额" />
</el-form-item>
<el-form-item label="购买标书时间" prop="buy_date">
<el-date-picker class="flex-1 !flex" v-model="formData.buy_date" clearable value-format="YYYY-MM-DD"
placeholder="选择购买标书时间">
</el-date-picker>
</el-form-item>
</el-form>
</popup>
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
@ -73,14 +59,12 @@
<script lang="ts" setup name="bidBuyBiddingDocumentEdit">
import type { FormInstance } from 'element-plus'
import reviewprocess from '@/components/reviewprocess/index.vue'
import Popup from '@/components/popup/index.vue'
import personnelselector from '@/components/personnelselector/index.vue'
import biddingDecisionSelector from '@/components/biddingDecision/index.vue'
import projectTable from "@/components/biddingDecision/index.vue"
import { apiBidBuyBiddingDocumentAdd, apiBidBuyBiddingDocumentDetail } from '@/api/bid_buy_bidding_document'
import { timeFormat } from '@/utils/util'
import { apiBidBuyBiddingDocumentAdd, apiBidBuyBiddingDocumentDetail, apiBidBuyBiddingDocumentEdit } from '@/api/bid_buy_bidding_document'
import type { PropType } from 'vue'
defineProps({
dictData: {
@ -96,11 +80,6 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const list1 = reactive([])
const list2 = reactive([])
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const showDialog = ref(false)
const showDialog2 = ref(false)
const buyer_name = ref('')
@ -111,13 +90,18 @@ const popupTitle = computed(() => {
//
const formData = reactive({
id: "",
"project_id": 0,
project_name: "",
project_code: "",
custom_name: "",
"bid_decision_id": 0,
bid_decision_code: "",
"bid_document_no": "",
"invite_tenders_company_name": "",
"bid_company_name": "",
"buyer": "",
"buyer_name": "",
"amount": 0,
"buy_date": 0,
"bid_address": ""
@ -132,7 +116,7 @@ const userclick = () => {
//
const submituser = (e: any) => {
formData.buyer = e.id;
buyer_name.value = e.name;
formData.buyer_name = e.name;
}
//
const formRules = reactive<any>({
@ -141,9 +125,9 @@ const formRules = reactive<any>({
//
const customEvent = (e: any) => {
formData.project_id = e.project_id;
matsname.value = e.custom_name
project_name.value = e.project_name
project_code.value = e.project_code
formData.custom_name = e.custom_name
formData.project_name = e.project_name
formData.project_code = e.project_code
formData.bid_document_no = ''
showDialog.value = false;
};
@ -156,26 +140,12 @@ const customEvent2 = (e: any) => {
//
const setFormData = async (data: Record<any, any>) => {
matsname.value = data.project.person
project_name.value = data.project.name
project_code.value = data.project.project_code
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
// if (data.annex && data.annex.length > 0) {
// const arry1 = data.annex.map((item: any, index: any) => {
// return {
// name: `${index + 1}`,
// uri: item
// };
// });
// Object.assign(formDataannex, arry1)
// }
}
@ -193,10 +163,9 @@ const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData }
// mode.value == 'edit'
// ? await apiBidBuyBiddingDocumentEdit(data)
// :
await apiBidBuyBiddingDocumentAdd(data)
mode.value == 'edit'
? await apiBidBuyBiddingDocumentEdit(data)
: await apiBidBuyBiddingDocumentAdd(data)
popupRef.value?.close()
emit('success')
}
@ -205,7 +174,7 @@ const handleSubmit = async () => {
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getlist()
}
//

View File

@ -36,9 +36,7 @@
</template>
新增
</el-button>
<!-- <el-button v-perms="['bid.bid_buy_bidding_document/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button> -->
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
@ -60,12 +58,14 @@
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<!-- <el-button v-perms="['bid.bid_buy_bidding_document/edit']" type="primary" link @click="handleEdit(row)">
<el-button v-perms="['bid.bid_buy_bidding_document/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button> -->
<!-- <el-button v-perms="['bid.bid_buy_bidding_document/delete']" type="danger" link @click="handleDelete(row.id)">
</el-button>
<el-button v-perms="['bid.bid_buy_bidding_document/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button> -->
</el-button>
<el-button v-perms="['bid.bid_buy_bidding_document/detail']" link
@click="handledetail(row)">
详情
@ -86,17 +86,19 @@
<script lang="ts" setup name="bidBuyBiddingDocumentLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiBidBuyBiddingDocumentLists, apiBidBuyBiddingDocumentDetail } from '@/api/bid_buy_bidding_document'
import { apiBidBuyBiddingDocumentLists, apiBidBuyBiddingDocumentDetail, apiBidBuyBiddingDocumentDelete } from '@/api/bid_buy_bidding_document'
import { apiProjectSearch } from '@/api/project'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
import feedback from '@/utils/feedback'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const showDtail = ref(false)
const projectList = ref([])
//
@ -133,21 +135,21 @@ const handleAdd = async () => {
editRef.value?.open('add')
}
// //
// const handleEdit = async (data: any) => {
// let res = await apiBidBuyBiddingDocumentDetail({ id: data.id })
// showEdit.value = true
// await nextTick()
// editRef.value?.open('edit')
// editRef.value?.setFormData(res)
// }
//
const handleEdit = async (data: any) => {
let res = await apiBidBuyBiddingDocumentDetail({ 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 apiBidBuyBiddingDocumentDelete({ id })
// getLists()
// }
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiBidBuyBiddingDocumentDelete({ id })
getLists()
}
//
const handledetail = async (data: any) => {
let res = await apiBidBuyBiddingDocumentDetail({ id: data.id })
@ -158,19 +160,18 @@ const handledetail = async (data: any) => {
detailRef.value?.setFormData(res)
}
//
// const projectlist = async () => {
// let res = await apiProjectLists({ page_no: 1, page_size: 15 })
// projectList.value = res.lists
const projectlist = async () => {
let res = await apiProjectLists({ page_no: 1, page_size: 15 })
projectList.value = res.lists
}
// }
import { useRoute } from "vue-router";
const route = useRoute()
if (route.query?.listId) {
handledetail({ id: route.query.listId })
}
projectlist()
// projectlist()
getLists()
</script>

View File

@ -1,65 +1,56 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="投标审查详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-card>
<el-descriptions title="基本信息" :column="3" border>
<el-descriptions-item label="标书编号" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_document_no }}</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.buyer }}</el-descriptions-item>
formData.buyer }}</el-descriptions-item>
<el-descriptions-item label="客户名称" label-align="left" align="left" label-class-name="my-label">{{
formData.custom_name }}</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>
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="招标公司名称" label-align="left" align="left" label-class-name="my-label">{{
formData.invite_tenders_company_name }}</el-descriptions-item>
formData.invite_tenders_company_name }}</el-descriptions-item>
<el-descriptions-item label="投标公司名称" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_company_name }}</el-descriptions-item>
formData.bid_company_name }}</el-descriptions-item>
<el-descriptions-item label="购买标书金额" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_document_amount }}</el-descriptions-item>
<el-descriptions-item label="招标项目资金来源" label-align="left" align="left" label-class-name="my-label">{{
formData.bidding_project_fund_source }}</el-descriptions-item>
formData.bid_document_amount }}</el-descriptions-item>
<el-descriptions-item label="招标项目资金来源" label-align="left" align="left"
label-class-name="my-label">{{
formData.bidding_project_fund_source }}</el-descriptions-item>
<el-descriptions-item label="投标时间" label-align="left" align="left" label-class-name="my-label">{{
formData.bidding_time }}</el-descriptions-item>
formData.bidding_time }}</el-descriptions-item>
<el-descriptions-item label="购买标书时间" label-align="left" align="left" label-class-name="my-label">{{
formData.buy_date }}</el-descriptions-item>
formData.buy_date }}</el-descriptions-item>
<el-descriptions-item label="招标方式" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_type }}</el-descriptions-item>
formData.bid_type }}</el-descriptions-item>
<el-descriptions-item label="投标地址" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_address }}</el-descriptions-item>
formData.bid_address }}</el-descriptions-item>
<el-descriptions-item label="是否需要保证金" label-align="left" align="left" label-class-name="my-label">{{
formData.is_margin }}</el-descriptions-item>
formData.is_margin }}</el-descriptions-item>
<el-descriptions-item label="保证金金额" label-align="left" align="left" label-class-name="my-label">{{
formData.margin_amount }}</el-descriptions-item>
formData.margin_amount }}</el-descriptions-item>
<el-descriptions-item label="保证金退还时间" label-align="left" align="left" label-class-name="my-label">{{
formData.margin_amount_return_date }}</el-descriptions-item>
formData.margin_amount_return_date }}</el-descriptions-item>
<el-descriptions-item label="开标日期" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_opening_date }}</el-descriptions-item>
formData.bid_opening_date }}</el-descriptions-item>
<el-descriptions-item label="招标项目概况" label-align="left" align="left" label-class-name="my-label">{{
formData.bid_project_overview }}</el-descriptions-item>
formData.bid_project_overview }}</el-descriptions-item>
<el-descriptions-item label="项目简介" label-align="left" align="left" label-class-name="my-label">{{
formData.project_desc }}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex && 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>
</div>
</div>
<div v-else> 暂无附件</div>
</el-descriptions-item>
formData.project_desc }}</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card>
<el-descriptions title="技术审查" :column="1" border style="margin-top:30px">
<el-descriptions-item label="技术协议偏差" label-align="left" align="left" label-class-name="my-label">{{
formData.technical_protocol_deviation }}</el-descriptions-item>
<el-descriptions-item label="协议偏差处理方案" label-align="left" align="left" label-class-name="my-label">{{
formData.protocol_deviation_handling_plan }}</el-descriptions-item>
formData.technical_protocol_deviation }}</el-descriptions-item>
<el-descriptions-item label="协议偏差处理方案" label-align="left" align="left"
label-class-name="my-label">{{
formData.protocol_deviation_handling_plan }}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.technical_review_annex && formData.technical_review_annex.length > 0">
<div v-for="(item, index) in formData.technical_review_annex"
@ -76,17 +67,17 @@
<el-card>
<el-descriptions title="商务审查" :column="3" border style="margin-top:30px">
<el-descriptions-item label="总金额" label-align="left" align="left" label-class-name="my-label">{{
formData.total_amount }}</el-descriptions-item>
formData.total_amount }}</el-descriptions-item>
<el-descriptions-item label="税率" label-align="left" align="left" label-class-name="my-label">{{
formData.tax_rate }}</el-descriptions-item>
formData.tax_rate }}</el-descriptions-item>
<el-descriptions-item label="付款方式" label-align="left" align="left" label-class-name="my-label">{{
formData.pay_type }}</el-descriptions-item>
formData.pay_type }}</el-descriptions-item>
<el-descriptions-item label="付款比例" label-align="left" align="left" label-class-name="my-label">{{
formData.pay_rate }}</el-descriptions-item>
formData.pay_rate }}</el-descriptions-item>
<el-descriptions-item label="商务合同偏差" label-align="left" align="left" label-class-name="my-label">{{
formData.business_contract_deviation }}</el-descriptions-item>
formData.business_contract_deviation }}</el-descriptions-item>
<el-descriptions-item label="偏差处理方案" label-align="left" align="left" label-class-name="my-label">{{
formData.business_contract_deviation_handling_plan }}</el-descriptions-item>
formData.business_contract_deviation_handling_plan }}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div

View File

@ -1,238 +1,229 @@
<template>
<div class="edit-popup">
<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>
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="150px" :rules="formRules">
<el-card>
<template #header>
标书信息
</template>
<el-row>
<el-col :span="8">
<el-form-item label="标书编号" prop="buy_bidding_document_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="bid_document_no" clearable readonly placeholder="请选择标书编号" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="购买人员" prop="buy_bidding_document_id">
<el-input v-model="buyer" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="客户名称" prop="buy_bidding_document_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.custom_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="buy_bidding_document_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.project_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-row>
<el-col :span="8">
<el-form-item label="标书编号" prop="buy_bidding_document_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="bid_document_no" clearable readonly placeholder="请选择标书编号" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="购买人员" prop="buy_bidding_document_id">
<el-input v-model="buyer" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="客户名称" prop="buy_bidding_document_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.custom_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="buy_bidding_document_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="招标公司名称" prop="buy_bidding_document_id">
<el-input v-model="invite_tenders_company_name" clearable disabled
placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="投标公司名称" prop="buy_bidding_document_id">
<el-input v-model="bid_company_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="购买标书金额" prop="buy_bidding_document_id">
<el-input v-model="amount" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8">
<el-form-item label="招标公司名称" prop="buy_bidding_document_id">
<el-input v-model="invite_tenders_company_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="投标公司名称" prop="buy_bidding_document_id">
<el-input v-model="bid_company_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="购买标书金额" prop="buy_bidding_document_id">
<el-input v-model="amount" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="招标项目资金来源" prop="buy_bidding_document_id">
<el-input v-model="bidding_project_fund_source" clearable disabled
placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="投标时间" prop="buy_bidding_document_id">
<el-input v-model="bid_date" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="购买标书时间" prop="buy_bidding_document_id">
<el-input v-model="buy_date" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="招标方式" prop="buy_bidding_document_id">
<el-input v-model="invite_tenders_type" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-form-item label="招标项目资金来源" prop="buy_bidding_document_id">
<!-- <el-select v-model="project_fund_source" clearable disabled placeholder="系统自动填写">
<el-option v-for="(item, index) in dictData.construction_funds_sources" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select> -->
<el-input v-model="bidding_project_fund_source" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="投标时间" prop="buy_bidding_document_id">
<el-input v-model="bid_date" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="购买标书时间" prop="buy_bidding_document_id">
<el-input v-model="buy_date" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="招标方式" prop="buy_bidding_document_id">
<!-- <el-select v-model="invite_tenders_type" clearable disabled placeholder="系统自动填写">
<el-option v-for="(item, index) in dictData.bidding_method" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select> -->
<el-input v-model="invite_tenders_type" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="投标地址" prop="buy_bidding_document_id">
<el-input v-model="bid_address" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否需要保证金" prop="is_margin">
<el-input v-model="formData.is_margin" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
</el-row>
<el-col :span="8">
<el-form-item label="是否需要保证金" prop="is_margin">
<el-input v-model="is_margin" clearable disabled placeholder="系统自动填写" />
</el-card>
</el-form-item>
</el-col>
</el-row>
<div class="tit">技术审查</div>
<el-row>
<el-card>
<template #header>技术审查</template>
<el-row>
<el-col :span="8">
<el-form-item label="技术协议偏差" prop="technical_protocol_deviation">
<el-input v-model="formData.technical_protocol_deviation" clearable
placeholder="请输入技术协议偏差" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="协议偏差处理方案" prop="protocol_deviation_handling_plan">
<el-input v-model="formData.protocol_deviation_handling_plan" clearable
placeholder="请输入协议偏差处理方案" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="技术审查附件" prop="technical_review_annex">
<uploadAnnex :formData="formData" value="technical_review_annex"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card>
<template #header>
商务审查
</template>
<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="系统自动计算"
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="请选择税率">
<el-option v-for="(item, index) in dictData.tax_rate" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="付款方式" prop="pay_type">
<el-select class="flex-1" v-model="formData.pay_type" clearable placeholder="请选择付款方式">
<el-option v-for="(item, index) in dictData.pay_type" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="付款比例" prop="pay_rate">
<el-input v-model="formData.pay_rate" clearable placeholder="请输入付款比例" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="商务合同偏差" prop="business_contract_deviation">
<el-input v-model="formData.business_contract_deviation" clearable
placeholder="请输入商务合同偏差" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="偏差处理方案" prop="business_contract_deviation_handling_plan">
<el-input v-model="formData.business_contract_deviation_handling_plan" clearable
placeholder="请输入偏差处理方案" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="商务审查附件" prop="business_contract_deviation_annex">
<uploadAnnex :formData="formData" value="business_contract_deviation_annex">
</uploadAnnex>
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-col :span="8">
<el-form-item label="技术协议偏差" prop="technical_protocol_deviation">
<el-input v-model="formData.technical_protocol_deviation" clearable placeholder="请输入技术协议偏差" />
</el-form-item></el-col> <el-col :span="8">
<el-form-item label="协议偏差处理方案" prop="protocol_deviation_handling_plan">
<el-input v-model="formData.protocol_deviation_handling_plan" clearable
placeholder="请输入协议偏差处理方案" />
</el-form-item></el-col>
<el-col :span="24">
<el-form-item label="技术审查附件" prop="technical_review_annex">
<el-card>
<template #header>
审查明细
</template>
<div style="margin-bottom: 30px;">
<el-table :data="tableData">
<el-table-column label="序号">
<template #default="{ row }">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four1" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<el-button @click="handleAdd(row)" size="small">+</el-button>
<el-button @click="handleDelete(row)" size="small">-</el-button>
</template>
</el-table-column>
<el-table-column label="产品名称" prop="name">
<template #default="{ row, $index }">
<el-input v-model="row.product_name" readonly @click="productDiag(row, $index)"
placeholder="请选择产品">
<template #suffix>
<icon name="el-icon-Search" />
</template>
</el-input>
</template>
</el-table-column>
<el-table-column label="型号规格" prop="specs">
<template #default="{ row }">
<el-input v-model="row.product_specs" />
</template></el-table-column>
<el-table-column label="单位" prop="unit">
<template #default="{ row }">
<el-input v-model="row.product_unit" /> </template>
</el-table-column>
<el-table-column label="数量" prop="num">
<template #default="{ row, $index }">
<el-input v-model="row.num" type="number" @change="calcTotalAmount"
@input="jiprice1(row, $index)" /> </template>
</el-table-column>
<div>
<div v-for="(item, index) in formDataannex1" 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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn1(index)">x</span>
</div>
</div>
<el-table-column label="成本单价" prop="cost_price">
<template #default="{ row, $index }">
<el-input v-model="row.cost_price" @change="calcTotalAmount" type="number"
@input="jiprice2(row, $index)" />
</template>
</el-table-column>
</el-form-item>
</el-col>
<el-table-column label="成本金额" prop="cost_amount">
<template #default="{ row }">
<el-input v-model="row.cost_amount" type="number" disabled placeholder="系统自动计算" />
</template>
</el-table-column>
<el-table-column label="点数" prop="points">
<template #default="{ row }">
<el-input v-model="row.points" type="number" @change="calcTotalAmount" />
</template>
</el-table-column>
<el-table-column label="报价单价" prop="sale_price">
<template #default="{ row, $index }">
<el-input v-model="row.sale_price" type="number" @change="calcTotalAmount"
@input="jiprice3(row, $index)" />
</template>
</el-table-column>
<el-table-column label="报价金额" prop="total_amount">
<template #default="{ row }">
<el-input v-model="row.sale_amount" type="number" disabled placeholder="系统自动计算" />
</template>
</el-table-column>
</el-table>
</div>
</el-card>
</el-row>
<div class="tit">商务审查</div>
<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="系统自动计算"
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="请选择税率">
<el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</el-form-item></el-col> <el-col :span="8">
<el-form-item label="付款方式" prop="pay_type">
<el-select class="flex-1" v-model="formData.pay_type" clearable placeholder="请选择付款方式">
<el-option v-for="(item, index) in dictData.pay_type" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</el-form-item></el-col> <el-col :span="8">
<el-form-item label="付款比例" prop="pay_rate">
<el-input v-model="formData.pay_rate" clearable placeholder="请输入付款比例" />
</el-form-item></el-col> <el-col :span="8">
<el-form-item label="商务合同偏差" prop="business_contract_deviation">
<el-input v-model="formData.business_contract_deviation" clearable placeholder="请输入商务合同偏差" />
</el-form-item></el-col> <el-col :span="8">
<el-form-item label="偏差处理方案" prop="business_contract_deviation_handling_plan">
<el-input v-model="formData.business_contract_deviation_handling_plan" clearable
placeholder="请输入偏差处理方案" />
</el-form-item></el-col> <el-col :span="24">
<el-form-item label="商务审查附件" prop="business_contract_deviation_annex">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four2" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex2" 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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn2(index)">x</span>
</div>
</div>
</el-form-item></el-col>
</el-row>
<div class="tit">审查明细</div>
<div style="margin-bottom: 30px;">
<el-table :data="tableData">
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd(row)" size="small">+</el-button>
<el-button @click="handleDelete(row)" size="small">-</el-button>
</template>
</el-table-column>
<el-table-column label="产品名称" prop="name">
<template #default="{ row, $index }">
<el-input v-model="row.name" readonly @click="productDiag(row, $index)" placeholder="请选择产品">
<template #suffix>
<icon name="el-icon-Search" />
</template>
</el-input>
</template>
</el-table-column>
<el-table-column label="型号规格" prop="specs">
<template #default="{ row }">
<el-input v-model="row.specs" />
</template></el-table-column>
<el-table-column label="单位" prop="unit">
<template #default="{ row }">
<el-input v-model="row.unit" /> </template>
</el-table-column>
<el-table-column label="数量" prop="num">
<template #default="{ row, $index }">
<el-input v-model="row.num" type="number" @input="jiprice1(row, $index)" /> </template>
</el-table-column>
<el-table-column label="成本单价" prop="cost_price">
<template #default="{ row, $index }">
<el-input v-model="row.cost_price" type="number" @input="jiprice2(row, $index)" />
</template>
</el-table-column>
<el-table-column label="成本金额" prop="cost_amount">
<template #default="{ row }">
<el-input v-model="row.cost_amount" type="number" disabled placeholder="系统自动计算" />
</template>
</el-table-column>
<el-table-column label="点数" prop="points">
<template #default="{ row }">
<el-input v-model="row.points" type="number" /> </template>
</el-table-column>
<el-table-column label="报价单价" prop="sale_price">
<template #default="{ row, $index }">
<el-input v-model="row.sale_price" type="number" @input="jiprice3(row, $index)" />
</template>
</el-table-column>
<el-table-column label="报价金额" prop="total_amount">
<template #default="{ row }">
<el-input v-model="row.sale_amount" type="number" disabled placeholder="系统自动计算" />
</template>
</el-table-column>
</el-table>
</div>
</el-form>
<el-dialog v-model="showDialog" title="选择标书" width="70%">
<biddocumentTable @customEvent="customEvent" :project_id="project?.id || ''"></biddocumentTable>
@ -251,7 +242,7 @@ 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 type { PropType } from 'vue'
import { apiBidDocumentExaminationDetailLists, apiBidDocumentExaminationDetailDelete } from '@/api/bid_document_examination_detail'
import { watch } from "vue"
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('whether_status,tax_rate,pay_type,construction_funds_sources,bidding_method')
@ -268,7 +259,6 @@ const bid_company_name = ref('')
const amount = ref('')
const buyer = ref('')
const project_name = ref('')
const project_fund_source = ref('')
const is_margin = ref('')
const bid_date = ref('')
const buy_date = ref('')
@ -280,36 +270,10 @@ const bidding_project_overview = ref('')
const project_introduction = ref('')
const bid_address = ref('')
const tableData = ref([{}])
const list1 = reactive([])
const list2 = reactive([])
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
const formDataannex = reactive([])
const formDataannex1 = reactive([])
const formDataannex2 = reactive([])
//
const handleAvatarSuccess_four1 = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex1.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn1 = (index: number) => {
formDataannex1.splice(index, 1)
}
//
const jiprice1 = (row: any, index: any) => {
if (row.cost_price) {
@ -331,24 +295,7 @@ const jiprice3 = (row: any, index: any) => {
}
}
//
const handleAvatarSuccess_four2 = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex2.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn2 = (index: number) => {
formDataannex2.splice(index, 1)
}
const handleAdd = (row: any) => {
// row
@ -356,10 +303,12 @@ const handleAdd = (row: any) => {
tableData.value.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
const handleDelete = async (row: any) => {
if (row.id) await apiBidDocumentExaminationDetailDelete({ id: row.id })
// row
const index = tableData.value.indexOf(row);
tableData.value.splice(index, 1);
calcTotalAmount()
};
//
@ -377,7 +326,9 @@ const formData = reactive({
id: '',
approve_id: 0,
buy_bidding_document_id: '',
project_name: "",
custom_name: "",
is_margin: "",
bidding_project_overview: '',
project_introduction: '',
technical_protocol_deviation: '',
@ -393,25 +344,28 @@ const formData = reactive({
quotation_detail: [],
})
watch(tableData.value, (newVal, oldVal) => {
const calcTotalAmount = () => {
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) => {
formData.buy_bidding_document_id = e.id;
is_margin.value = e.is_margin
formData.is_margin = e.is_margin
bid_document_no.value = e.bid_document_no
invite_tenders_company_name.value = e.invite_tenders_company_name
bid_company_name.value = e.bid_company_name
amount.value = e.amount
buyer.value = e.buyer
project_name.value = e.project_name
formData.project_name = e.project_name
bid_date.value = e.bidding_time
buy_date.value = e.buy_date
invite_tenders_type.value = e.bid_type
@ -427,9 +381,9 @@ const customEvent = (e: any) => {
};
const customEvent1 = (e: any) => {
tableData.value[num.value].product_id = e.id
tableData.value[num.value].name = e.name
tableData.value[num.value].specs = e.specs
tableData.value[num.value].unit = e.unit
tableData.value[num.value].product_name = e.name
tableData.value[num.value].product_specs = e.specs
tableData.value[num.value].product_unit = e.unit
showDialog1.value = false;
};
@ -454,31 +408,7 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
if (data.dept_id) {
// getlist1(data.org_id)
}
if (data.technical_review_annex && data.technical_review_annex.length > 0) {
const arry1 = data.technical_review_annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex1, arry1)
}
if (data.business_contract_deviation_annex && data.business_contract_deviation_annex.length > 0) {
const arry1 = data.business_contract_deviation_annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex2, arry1)
}
bid_document_no.value = data.bid_document_no
invite_tenders_company_name.value = data.invite_tenders_company_name
bid_company_name.value = data.bid_company_name
@ -494,6 +424,15 @@ const setFormData = async (data: Record<any, any>) => {
deposit_refund_time.value = data.margin_amount_return_date
bidding_project_overview.value = data.bid_project_overview
project_introduction.value = data.project_desc
let res = await apiBidDocumentExaminationDetailLists({ bid_document_examination_id: formData.id })
tableData.value = res.lists
calcTotalAmount()
}
const getDetail = async (row: Record<string, any>) => {
@ -506,12 +445,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex1.length > 0) {
formData.technical_review_annex = formDataannex1.map(item => item.uri)
}
if (formDataannex2.length > 0) {
formData.business_contract_deviation_annex = formDataannex2.map(item => item.uri)
}
if (tableData.value.length > 0) {
let data1 = tableData.value.map((item) => ({
product_id: item.product_id,

View File

@ -30,9 +30,6 @@
</template>
新增
</el-button>
<!-- <el-button v-perms="['bid.bid_document_examination/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button> -->
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
@ -50,12 +47,14 @@
<el-table-column label="总金额" prop="total_amount" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<!-- <el-button v-perms="['bid.bid_document_examination/edit']" type="primary" link @click="handleEdit(row)">
<el-button v-perms="['bid.bid_document_examination/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button> -->
<!-- <el-button v-perms="['bid.bid_document_examination/delete']" type="danger" link @click="handleDelete(row.id)">
</el-button>
<el-button v-perms="['bid.bid_document_examination/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button> -->
</el-button>
<el-button v-perms="['bid.bid_document_examination/detail']" link
@click="handledetail(row)">
详情
@ -87,6 +86,7 @@ import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//

View File

@ -37,7 +37,7 @@
<el-descriptions-item label="添加人" label-align="left" align="left" label-class-name="my-label">{{
formData.add_user_name }}</el-descriptions-item>
<el-descriptions-item label="创建日期" label-align="left" align="left" label-class-name="my-label">{{
formData.create_time }}</el-descriptions-item>
formData.create_time }}</el-descriptions-item>
<el-descriptions-item label="更新人" label-align="left" align="left" label-class-name="my-label">{{
formData.update_user_name }}</el-descriptions-item>
<el-descriptions-item label="更新日期" label-align="left" align="left" label-class-name="my-label">{{

View File

@ -1,13 +1,15 @@
<template>
<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="90px" :rules="formRules">
<el-row>
<el-col :span="8">
<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-input v-model="formData.bid_document_examination_code" readonly clearable
placeholder="请选择标书审查" />
</el-form-item>
</el-col>
@ -84,8 +86,6 @@ import Popup from '@/components/popup/index.vue'
import biddocumentTable from "@/components/document_examination/index.vue"
import prodctTable from '@/components/product/index.vue'
import { apiBidDocumentExaminationDetailAdd, apiBidDocumentExaminationDetailEdit, apiBidDocumentExaminationDetailDetail } from '@/api/bid_document_examination_detail'
import { timeFormat } from '@/utils/util'
import projectTable from "@/components/project/index.vue"
import type { PropType } from 'vue'
defineProps({
dictData: {
@ -114,6 +114,7 @@ const popupTitle = computed(() => {
const formData = reactive({
id: '',
bid_document_examination_id: '',
bid_document_examination_code: "",
product_id: '',
num: '',
points: '',
@ -138,7 +139,7 @@ const customEvent = (e: any) => {
project_name.value = e.project_name
project_code.value = e.project_code
formData.bid_document_examination_id = e.id
formData.code = e.code
formData.bid_document_examination_code = e.code
showDialog.value = false;

View File

@ -121,10 +121,11 @@ const handleAdd = async () => {
//
const handleEdit = async (data: any) => {
let res = await apiBidDocumentExaminationDetailDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
editRef.value?.setFormData(res)
}
//
@ -144,4 +145,3 @@ const handledetail = async (data: any) => {
}
getLists()
</script>

View File

@ -44,13 +44,11 @@
<div v-else> 暂无附件</div>
</el-descriptions-item>
<el-descriptions-item label="添加人" label-align="left" align="left" label-class-name="my-label">{{
formData.add_user_name }}</el-descriptions-item>
<el-descriptions-item label="创建日期" label-align="left" align="left" label-class-name="my-label">{{
formData.create_time }}</el-descriptions-item>
formData.add_user_name }}</el-descriptions-item>
<el-descriptions-item label="更新人" label-align="left" align="left" label-class-name="my-label">{{
formData.update_user_name }}</el-descriptions-item>
<el-descriptions-item label="更新日期" label-align="left" align="left" label-class-name="my-label">{{
formData.update_time }}</el-descriptions-item>
</el-descriptions>
</popup>
</div>

View File

@ -43,7 +43,7 @@
<el-table-column label="中标单位" prop="bidder_company" show-overflow-tooltip />
<el-table-column label="中标金额" prop="bidder_amount" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<el-table-column label="操作" width="160" align="center" fixed="right">
<template #default="{ row }">
<el-button v-perms="['bid.bid_result/edit']" type="primary" link @click="handleEdit(row)">
编辑
@ -140,13 +140,7 @@ const handledetail = async (data: any) => {
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
//
const projectlist = async () => {
let res = await apiProjectLists({ page_no: 1, page_size: 9999 })
projectList.value = res.lists
}
//
const documentlists = async () => {
@ -155,6 +149,5 @@ const documentlists = async () => {
}
documentlists()
projectlist()
getLists()
</script>

View File

@ -1,78 +1,69 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="投标保证金详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-descriptions title="基本信息" :column="3" border>
<el-descriptions-item label="投标编号" label-align="left" align="left" label-class-name="my-label">{{
formData.security_apply_code }}</el-descriptions-item>
<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">{{
formData.applier }}</el-descriptions-item>
<el-descriptions-item label="付款方式" label-align="left" align="left" label-class-name="my-label">{{
formData.pay_type_text }}</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">{{
formData.project_code }}</el-descriptions-item>
<el-card>
<template #header>
基本信息
</template>
<el-descriptions :column="3" border>
<el-descriptions-item label="投标编号" label-align="left" align="left" label-class-name="my-label">{{
formData.security_apply_code }}</el-descriptions-item>
<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">{{
formData.applier }}</el-descriptions-item>
<el-descriptions-item label="付款方式" label-align="left" align="left" label-class-name="my-label">{{
formData.pay_type_text }}</el-descriptions-item>
<el-descriptions-item label="保证金金额" label-align="left" align="left" label-class-name="my-label">{{
formData.margin_amount }}</el-descriptions-item>
<!-- <el-descriptions-item label="大写" label-align="left" align="left" label-class-name="my-label">{{ formData.bid_opening_date }}</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">{{
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="保证金金额" label-align="left" align="left" label-class-name="my-label">{{
formData.margin_amount }}</el-descriptions-item>
<el-descriptions-item label="投标时间" label-align="left" align="left" label-class-name="my-label">{{
formData.bidding_time
}}</el-descriptions-item>
<el-descriptions-item label="投标时间" label-align="left" align="left" label-class-name="my-label">{{
formData.bidding_time
}}</el-descriptions-item>
<el-descriptions-item label="预计退还时间" label-align="left" align="left" label-class-name="my-label">{{
formData.refund_date }}</el-descriptions-item>
<el-descriptions-item label="预计退还时间" label-align="left" align="left" label-class-name="my-label">{{
formData.refund_date }}</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">
<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;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item"
target="_blank">文件{{ index + 1 }}查看</a>
<div v-if="formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item"
target="_blank">文件{{ index + 1 }}查看</a>
</div>
</div>
</div>
<div v-else> 暂无附件</div>
</el-descriptions-item>
<div v-else> 暂无附件</div>
</el-descriptions-item>
</el-descriptions>
<el-descriptions title="收款人信息" border>
</el-descriptions>
</el-card>
<el-card>
<template #header>
收款人信息
</template>
<el-descriptions border>
<el-descriptions-item label=" 开户银行" label-align="left" align="left" label-class-name="my-label">{{
formData.deposit_bank }}</el-descriptions-item>
<el-descriptions-item label="开户名称" label-align="left" align="left" label-class-name="my-label">{{
formData.account_name }}</el-descriptions-item>
<el-descriptions-item label="账号" label-align="left" align="left" label-class-name="my-label">{{
formData.account }}</el-descriptions-item>
</el-descriptions>
</el-card>
<el-descriptions-item label=" 开户银行" label-align="left" align="left" label-class-name="my-label">{{
formData.deposit_bank }}</el-descriptions-item>
<el-descriptions-item label="开户名称" label-align="left" align="left" label-class-name="my-label">{{
formData.account_name }}</el-descriptions-item>
<el-descriptions-item label="账号" label-align="left" align="left" label-class-name="my-label">{{
formData.account }}</el-descriptions-item>
</el-descriptions>
<!-- <el-descriptions title="付款账户信息" border>
<el-descriptions-item label="账号编码" label-align="left" align="left" label-class-name="my-label">{{}}</el-descriptions-item>
<el-descriptions-item label="开户银行" label-align="left" align="left" label-class-name="my-label">{{ formData.deposit_bank }}</el-descriptions-item>
<el-descriptions-item label="开户名称" label-align="left" align="left" label-class-name="my-label">{{ formData.account_name }}</el-descriptions-item>
<el-descriptions-item label="账号" label-align="left" align="left" label-class-name="my-label">{{ formData.account }}</el-descriptions-item>
</el-descriptions> -->
<flowProcess v-if="!formData?.approve_id || formData.approve_check_status == 4" :flows="flows"
:submitApi="apibid_security_applyApprove" :id="formData?.id" @off="handleClose">
</flowProcess>
<flowDetail v-else :approve_id="formData?.approve_id" @off="handleClose" />
<!-- import { apibid_security_applyApprove, apibid_security_applyFlows } from '@/api/flowSet.ts'
//
const flows = ref([])
const getbidDocumentExaminationFlows = async () => {
if (formData?.approve_id) return
let res = await apibid_security_applyFlows()
flows.value = res
} -->
</popup>
</div>

View File

@ -1,8 +1,7 @@
<template>
<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">
<el-row :gutter="10">
@ -78,24 +77,7 @@
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
@ -127,9 +109,6 @@
<biddingDecisionDialog @customEvent="customEvent" :project_id="project?.id || ''">
</biddingDecisionDialog>
</el-dialog>
<!-- <el-dialog v-model="showDialog3" title="选择收款人信息" width="70%">
<bankaccountDialog @customEvent="customEvent3"></bankaccountDialog>
</el-dialog> -->
</el-form>
</popup>
@ -159,26 +138,6 @@ const bidding_time = ref('')
const project_code = ref('')
const document_no = ref('')
const userInfo = userStore.userInfo
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
const emit = defineEmits(['success', 'close'])
@ -245,18 +204,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
@ -287,13 +234,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
? await bidapplyEdit(data)

View File

@ -1,7 +1,8 @@
<template>
<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">
@ -10,25 +11,29 @@
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="分部工程" prop="division_engineering" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="分部工程" prop="division_engineering"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.division_engineering" clearable placeholder="请输入分部工程" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="子分部工程" prop="sub_division_engineering" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="子分部工程" prop="sub_division_engineering"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.sub_division_engineering" clearable placeholder="请输入子分部工程" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="分项工程" prop="subentry_engineering" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="分项工程" prop="subentry_engineering"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.subentry_engineering" clearable placeholder="请输入分项工程" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="分项工程编码" prop="subentry_engineering_code" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="分项工程编码" prop="subentry_engineering_code"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.subentry_engineering_code" clearable placeholder="请输入分项工程编码" />
</el-form-item>
</el-col>

View File

@ -2,12 +2,7 @@
<div class="detail-popup">
<popup ref="popupRef" title="竞争对手详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-descriptions :column="2" border>
<el-descriptions-item label="组织名称" label-align="left" align="left" label-class-name="my-label">{{
formData.org_name }}</el-descriptions-item>
<el-descriptions-item label="部门名称" label-align="left" align="left" label-class-name="my-label">{{
formData.dept_name }}</el-descriptions-item>
<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"> {{
@ -91,7 +86,6 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
@ -103,11 +97,6 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
});
//
@ -151,11 +140,6 @@ const handleClose = () => {
defineExpose({
open,
setFormData,

View File

@ -3,19 +3,6 @@
<popup ref="popupRef" :title="popupTitle" :async="true" width="650px" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form-item label="组织" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.org_id" clearable placeholder="请选择组织"
@change="area_change">
<el-option v-for="(item, index) in orglist" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="部门" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in jobs" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
</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="请输入项目名称" :disabled="project" />
@ -55,22 +42,7 @@
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-form>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
@ -90,27 +62,15 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCompetitorAdd, apiCompetitorEdit, apiCompetitorDetail } from '@/api/competitor'
import { timeFormat } from '@/utils/util'
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 type { PropType } from 'vue'
let props = defineProps({
// dictData: {
// type: Object as PropType<Record<string, any[]>>,
// default: () => ({})
// }
project: Object
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const orglist = reactive([])
const jobs = reactive([])
const project_name
= ref('')
const project_code
@ -120,35 +80,13 @@ const custom_name
const customer_demand_name = ref('')
const formDataannex = reactive([])
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
import feedback from '@/utils/feedback'
const userStore = useUserStore();
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formData = reactive({
id: '',
org_id: '',
dept_id: '',
project_id: '',
customer_demand_id: '',
competitor_name: '',
@ -182,22 +120,7 @@ const customEvent1 = (e: any) => {
showDialog1.value = false;
};
const getlista = () => {
getAll().then((res) => {
// orglist = res.data
Object.assign(orglist, res)
})
}
const area_change = (e: any) => {
formData.org_id = e
let data = { 'org_id': e }
deptAll(data).then((res) => {
Object.assign(jobs, res)
})
}
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑竞争对手' : '新增竞争对手'
@ -229,18 +152,7 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
deptAll({ 'org_id': data.org_id }).then((res) => {
Object.assign(jobs, res)
})
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
project_name.value = data.project_name
custom_name.value = data.custom_name
project_code.value = data.project_code
@ -266,9 +178,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item) => item.uri)
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
@ -289,8 +199,6 @@ const handleClose = () => {
emit('close')
}
getlista()
defineExpose({
open,
setFormData,

View File

@ -15,7 +15,7 @@
<el-descriptions-item label="建筑面积" label-align="left" align="left">
{{ formData.area }}
</el-descriptions-item>
<el-descriptions-item label="投资(万元)" label-align="left" align="left">
<el-descriptions-item label="投资(元)" label-align="left" align="left">
{{ formData.invest }}
</el-descriptions-item>
<el-descriptions-item label="基础类型" label-align="left" align="left">

View File

@ -27,8 +27,8 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="投资(万元)" prop="invest">
<el-input v-model="formData.invest" clearable placeholder="请输入投资(万元)" type="number" />
<el-form-item label="投资(元)" prop="invest">
<el-input v-model="formData.invest" clearable placeholder="请输入投资(元)" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -292,7 +292,7 @@ const formRules = reactive<any>({
}],
invest: [{
required: true,
message: '请输入投资(万元)',
message: '请输入投资(元)',
trigger: ['blur']
}],
basic_type: [{

View File

@ -41,7 +41,7 @@
<el-table-column label="工程地点" prop="address" show-overflow-tooltip />
<el-table-column label="服务范围" prop="service_scope" show-overflow-tooltip />
<el-table-column label="建筑面积" prop="area" show-overflow-tooltip />
<el-table-column label="投资(万元)" prop="invest" show-overflow-tooltip />
<el-table-column label="投资(元)" prop="invest" show-overflow-tooltip />
<el-table-column label="基础类型" prop="basic_type" show-overflow-tooltip />
<el-table-column label="工期" prop="duration" show-overflow-tooltip />
<el-table-column label="操作" fixed="right" align="center">

View File

@ -29,7 +29,7 @@ const detailConfig = {
label: "项目级别",
value: "project_level_text"
}, {
label: "总投资(万元)",
label: "总投资(元)",
value: "total_investment"
}, {
label: "立项日期",

View File

@ -57,8 +57,8 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="总投资(万元)" prop="total_investment">
<el-input v-model="formData.total_investment" clearable placeholder="请输入总投资(万元)"
<el-form-item label="总投资(元)" prop="total_investment">
<el-input v-model="formData.total_investment" clearable placeholder="请输入总投资(元)"
type="number" />
</el-form-item>
</el-col>
@ -315,7 +315,7 @@ const formRules = reactive<any>({
}],
total_investment: [{
required: true,
message: '请输入总投资(万元)',
message: '请输入总投资(元)',
trigger: ['blur']
}],
initiation_date: [{

View File

@ -37,7 +37,7 @@
<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="company" show-overflow-tooltip />
<el-table-column label="总投资(万元)" prop="total_investment" show-overflow-tooltip />
<el-table-column label="总投资(元)" prop="total_investment" show-overflow-tooltip />
<el-table-column label="关联合同" prop="contract" show-overflow-tooltip />
<el-table-column label="工程状态" prop="engineering_status_text" show-overflow-tooltip />
<el-table-column label="咨询类型" prop="consult_type_text" show-overflow-tooltip />

View File

@ -3,20 +3,9 @@
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="140px" :rules="formRules">
<div
style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select>
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织"
@change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select>
</div>
<el-row>
<el-col :span="8">
<el-form-item label="客户" prop="custom_id" @click="showDialog = true"
<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="请选择客户"
:disabled="project" />
@ -44,6 +33,7 @@
<el-col :span="8">
<el-form-item label="合同类型" prop="contract_type"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-select class="flex-1" v-model="formData.contract_type" clearable placeholder="请选择合同类型">
<el-option v-for="(item, index) in dictData.contract_type" :key="index"
:label="item.name" :value="parseInt(item.value)" />
@ -111,7 +101,6 @@
<el-input v-model="business_director_name" readonly clearable placeholder="请输入业务负责人" />
</el-form-item></el-col>
<el-col :span="24">
<el-form-item label="合同状态" prop="contract_status"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-radio-group v-model="formData.contract_status" placeholder="请选择合同状态">
@ -130,13 +119,14 @@
value-format="YYYY-MM-DD" placeholder="选择合同有效期">
</el-date-picker>
</el-form-item></el-col><el-col :span="8">
<el-form-item label="签约日期" prop="contract_date"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.contract_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="选择签约日期">
</el-date-picker>
</el-form-item></el-col><el-col :span="8">
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="主要条款" prop="main_content">
<el-input v-model="formData.main_content" clearable placeholder="请输入主要条款" />
@ -145,64 +135,12 @@
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item></el-col><el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<div style="margin-bottom: 30px;">回款计划</div>
<div style="margin-bottom: 30px;">
<el-table :data="paymentList">
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd(row)">+</el-button>
<el-button @click="handleDelete(row)">-</el-button>
</template>
</el-table-column>
<el-table-column label="期次" prop="name1">
<formTable :formData="formData.returned_money" :config="tableConfig" :dictData="dictData"></formTable>
<template #default="{ row }">
<el-select v-model="row.period" clearable placeholder="请选择期次">
<el-option v-for="(item, index) in dictData.pay_period " :key="index"
:label="item.name" :value="item.value" />
</el-select>
</template>
</el-table-column>
<el-table-column label="计划回款日期" prop="return_date">
<template #default="{ row }">
<el-date-picker v-model="row.return_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="选择签订日期">
</el-date-picker>
</template></el-table-column>
<el-table-column label="金额" prop="amount">
<template #default="{ row }"> <el-input v-model="row.amount" />
</template></el-table-column>
<el-table-column label="备注" prop="remark">
<template #default="{ row }">
<el-input v-model="row.remark" />
</template>
</el-table-column>
</el-table>
</div>
</el-form>
<el-dialog v-model="showDialog" title="选择客户" width="70%">
<customDialog @customEvent="customEvent"></customDialog>
@ -218,7 +156,6 @@
</el-dialog>
</div>
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
<!-- <reviewprocess /> -->
</popup>
</div>
@ -231,23 +168,21 @@ import biddocumentTable from "@/components/biddocument/index.vue"
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 { apireturnedLists, apireturnedDelete } from "@/api/remittance.ts"
import { useDictData } from '@/hooks/useDictOptions'
import { toChinesNum } from "@/utils/util";
import feedback from '@/utils/feedback'
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>>()
const mode = ref('add')
const formDataannex = reactive([])
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
import { toChinesNum } from "@/utils/util";
const showDialog = ref(false)
const showDialog1 = ref(false)
const showDialog2 = ref(false)
@ -258,14 +193,7 @@ const bidding_code = ref('')
const amount_daxie = ref('')
const project_id = ref('')
const business_director_name = ref('')
const list1 = reactive([])
const list2 = reactive([])
const paymentList = reactive([{}])
const personnel = ref<any>()
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import feedback from '@/utils/feedback'
const userStore = useUserStore();
//
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
@ -285,41 +213,13 @@ const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined)
}
};
const handleAdd = (row: any) => {
// row
const index = paymentList.indexOf(row);
paymentList.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
// row
const index = paymentList.indexOf(row);
paymentList.splice(index, 1);
};
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
const { dictData } = useDictData('contract_type,contract_pricing_method,contract_status,pay_period')
);
};
//
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: '',
@ -351,6 +251,40 @@ const formData = reactive({
annex: [],
})
const tableConfig = reactive(
{
title: "回款计划",
tableConfig: [
{
label: "期次",
value: 'period',
select: "pay_period"
},
{
label: "计划回款日期",
value: 'return_date',
date: true
},
{
label: "金额",
value: 'amount',
},
{
label: "备注",
value: 'remark',
},
],
deleteApi: apireturnedDelete,
dictData
}
)
//
const userclick = () => {
@ -414,34 +348,7 @@ const amountinput = (e) => {
amount_daxie.value = toChinesNum(e)
}
}
//
const getlist = () => {
getAll().then((res) => {
Object.assign(list1, res)
if (res.length > 0 && !formData.org_id) {
formData.org_id = res[0].id
deptAll({ 'org_id': res[0].id }).then((res) => {
if (res.length > 0) {
Object.assign(list2, res)
formData.dept_id = res[0].id
}
})
}
})
}
//
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
list2.splice(0, list2.length, ...res)
})
}
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目合同' : '新增项目合同'
@ -457,24 +364,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
if (data.dept_id) {
getlist1(data.org_id)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
@ -490,11 +379,7 @@ const setFormData = async (data: Record<any, any>) => {
bidding_code.value = data.bid_document_no
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)
})
formData.returned_money = res.lists
}
@ -508,18 +393,6 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item) => item.uri)
}
if (paymentList.length > 0) {
formData.returned_money = paymentList.map((item) => ({
'id': item.id,
'period': item.period,
'remark': item.remark,
'amount': item.amount,
'return_date': item.return_date,
}))
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
@ -533,7 +406,6 @@ const handleSubmit = async () => {
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getlist()
}
//

View File

@ -2,6 +2,12 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<el-form-item label="客户名称" prop="custom_id">
<selectRemote :formData="queryParams" model="custom_id" :api="apiCustomSearch" />
</el-form-item>
<el-form-item label="合同名称" prop="contract_name">
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
@ -37,6 +43,7 @@
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="合同名称" prop="contract_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_code" show-overflow-tooltip />
@ -103,7 +110,8 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiContractLists, apiContractDelete, apiContractDetail } from '@/api/contract'
import { timeFormat } from '@/utils/util'
import { apiProjectSearch } from '@/api/project'
import { apiCustomSearch } from '@/api/custom'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
@ -117,6 +125,8 @@ const showDtail = ref(false)
//
const queryParams = reactive({
project_id: '',
custom_id: '',
contract_name: '',
contract_type: ''
})

View File

@ -3,18 +3,6 @@
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px" :rules="formRules">
<div
style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select>
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织"
@change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select>
</div>
<el-row>
<el-col :span="8">
<el-form-item label="合同名称" prop="contract_id" @click="showDialog = true"
@ -38,7 +26,7 @@
<el-col :span="8">
<el-form-item label="合同类型" prop="contract_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select v-model="contract_type" clearable disabled placeholder="请选择合同类型">
<el-select v-model="contract_type" clearable disabled placeholder="请选择合同类型" class=" flex-1">
<el-option v-for="(item, index) in dictData.contract_type" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
@ -107,44 +95,10 @@
<el-input v-model="formData.negotiation_detail" clearable placeholder="请输入具体说明" />
</el-form-item></el-col><el-col :span="24">
<el-form-item label="签证报价表" prop="negotiation_quotation">
<!-- <el-input v-model="formData.negotiation_quotation" clearable placeholder="请输入签证报价表" /> -->
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four1" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex1" 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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn1(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData" value="negotiation_quotation"></uploadAnnex>
</el-form-item></el-col><el-col :span="24">
<el-form-item label="洽商依据" prop="negotiation_basis">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four2" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex2" 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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn2(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData" value="negotiation_basis"></uploadAnnex>
</el-form-item></el-col>
</el-row>
@ -166,17 +120,10 @@ 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>>()
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
const mode = ref('add')
const showDialog = ref(false)
const contract_name = ref('')
@ -188,60 +135,17 @@ const contract_type = ref('')
const profit_rate = ref(0)
const negotiation_no = ref('')
const profit = ref(0)
const formDataannex1 = reactive([])
const formDataannex2 = reactive([])
const contract_pricing_method = ref('')
const list1 = reactive([])
const list2 = reactive([])
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑合同洽商' : '新增合同洽商'
})
//
const handleAvatarSuccess_four1 = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex1.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn1 = (index: number) => {
formDataannex1.splice(index, 1)
}
//
const handleAvatarSuccess_four2 = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex2.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn2 = (index: number) => {
formDataannex2.splice(index, 1)
}
//
const formData = reactive({
id: '',
dept_id: '',
org_id: '',
contract_id: '',
// approve_id: '',
negotiation_name: '',
negotiation_no: '',
negotiation_amount: '',
@ -320,58 +224,8 @@ watch(
}
)
//
const getlist = () => {
getAll().then((res) => {
Object.assign(list1, res)
if (res.length > 0 && !formData.org_id) {
formData.org_id = res[0].id
deptAll({ 'org_id': res[0].id }).then((res) => {
if (res.length > 0) {
Object.assign(list2, res)
formData.dept_id = res[0].id
}
})
}
})
}
//
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
list2.splice(0, list2.length, ...res)
})
}
//
const setFormData = async (data: Record<any, any>) => {
if (data.negotiation_quotation && data.negotiation_quotation.length > 0) {
const arry1 = data.negotiation_quotation.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex1, arry1)
}
if (data.negotiation_basis && data.negotiation_basis.length > 0) {
const arry1 = data.negotiation_basis.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex2, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
@ -379,10 +233,6 @@ const setFormData = async (data: Record<any, any>) => {
}
}
if (data.dept_id) {
getlist1(data.org_id)
}
business_director.value = data.business_director
contract_name.value = data.contract_name
contract_code.value = data.contract_code
@ -403,12 +253,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex1.length > 0) {
formData.negotiation_quotation = formDataannex1.map((item) => item.uri)
}
if (formDataannex2.length > 0) {
formData.negotiation_basis = formDataannex2.map((item) => item.uri)
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
@ -422,7 +267,6 @@ const handleSubmit = async () => {
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getlist()
}
//

View File

@ -2,16 +2,19 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="关联合同" prop="contract_id">
<selectRemote :formData="queryParams" model="contract_id" :api="apiContractSearch" />
</el-form-item>
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<el-form-item label="客户名称" prop="custom_id">
<selectRemote :formData="queryParams" model="custom_id" :api="apiCustomSearch" />
</el-form-item>
<el-form-item label="洽商编号" prop="negotiation_no">
<el-input class="w-[280px]" v-model="queryParams.negotiation_no" clearable placeholder="请输入洽商编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project_name">
<el-input class="w-[280px]" v-model="queryParams.project_name" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="洽商单名称" prop="negotiation_name">
<el-input class="w-[280px]" v-model="queryParams.negotiation_name" clearable placeholder="请输入洽商单名称" />
</el-form-item>
<el-form-item label="洽商单名称" prop="negotiation_type">
<el-form-item label="洽商类别" prop="negotiation_type">
<el-select class="w-[280px]" v-model="queryParams.negotiation_type" clearable placeholder="请选择洽商类别">
<el-option v-for="(item, index) in dictData.negotiation_type" :key="index" :label="item.name"
:value="item.value" />
@ -42,6 +45,7 @@
<el-table-column label="序号" type="index" width="55" />
<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_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="negotiation_amount" show-overflow-tooltip />
@ -60,7 +64,8 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['contract.contract_negotiation/detail']" link @click="handleDetail(row)">
<el-button v-perms="['contract.contract_negotiation/detail']" link
@click="handleDetail(row)">
详情
</el-button>
</template>
@ -80,7 +85,9 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiContractNegotiationLists, apiContractNegotiationDelete, apiContractNegotiationDetail } from '@/api/contract_negotiation'
import { timeFormat } from '@/utils/util'
import { apiContractSearch } from '@/api/contract'
import { apiProjectSearch } from '@/api/project'
import { apiCustomSearch } from '@/api/custom'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
@ -94,8 +101,9 @@ const showDtail = ref(false)
//
const queryParams = reactive({
project_name: '',
negotiation_name: '',
contract_id: '',
project_id: '',
custom_id: '',
negotiation_no: '',
negotiation_type: ''
})
@ -160,4 +168,3 @@ if (route.query?.listId) {
}
getLists()
</script>

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-row>
<el-col :span="8">
@ -32,8 +31,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="行业" prop="industry">
<el-select v-model="formData.industry" clearable placeholder="请选择行业" class="flex-1"
disabled>
<el-select v-model="formData.industry" clearable placeholder="请选择行业" class="flex-1" disabled>
<el-option v-for="(
item, index
) in dictData.cost_consultation_industry_nature" :key="index" :label="item.name"
@ -43,8 +41,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="所在省份" prop="province">
<el-select v-model="formData.province" clearable placeholder="请选择省"
@change="province_change" class="flex-1">
<el-select v-model="formData.province" clearable placeholder="请选择省" @change="province_change"
class="flex-1">
<el-option v-for="(item, index) in datas.provinceOptions" :key="index"
:label="item.province_name" :value="parseInt(item.province_code)" />
</el-select>
@ -55,8 +53,8 @@
<el-col :span="8">
<el-form-item label="所在市区" prop="city">
<el-select v-model="formData.city" clearable placeholder="请选择市" class="flex-1">
<el-option v-for="(item, index) in datas.cityOptions" :key="index"
:label="item.city_name" :value="parseInt(item.city_code)" />
<el-option v-for="(item, index) in datas.cityOptions" :key="index" :label="item.city_name"
:value="parseInt(item.city_code)" />
</el-select>
</el-form-item>
</el-col>
@ -88,8 +86,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="组织" :rules="[
{ required: true, message: '不可为空', trigger: 'blur' },
]">
{ required: true, message: '不可为空', trigger: 'blur' },
]">
<el-select class="flex-1" v-model="formData.org_id" clearable placeholder="请选择组织"
@change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name"
@ -101,8 +99,8 @@
<el-row>
<el-col :span="8">
<el-form-item label="部门" prop="depar" :rules="[
{ required: true, message: '不可为空', trigger: 'blur' },
]">
{ required: true, message: '不可为空', trigger: 'blur' },
]">
<el-select class="flex-1" v-model="formData.depar" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name"
:value="item.id" />
@ -125,25 +123,25 @@
<el-row>
<el-col :span="8">
<el-form-item label="项目总投资" prop="invest">
<el-input v-model="formData.invest" clearable placeholder="请输入项目总投资(元)" type="number"
<el-input v-model="formData.invest" clearable placeholder="请输入项目总投资(元)" type="number"
disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="预算造价" prop="budget">
<el-input v-model="formData.budget" clearable placeholder="请输入预算造价(元)" type="number" />
<el-input v-model="formData.budget" clearable placeholder="请输入预算造价(元)" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="送审造价" prop="cost">
<el-input v-model="formData.cost" clearable placeholder="请输入送审造价(元)" type="number" />
<el-input v-model="formData.cost" clearable placeholder="请输入送审造价(元)" type="number" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="审定造价" prop="approval">
<el-input v-model="formData.approval" clearable placeholder="请输入审定造价(元)" type="number" />
<el-input v-model="formData.approval" clearable placeholder="请输入审定造价(元)" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -308,7 +306,7 @@ const customEvent = (e) => {
formData.industry = e.industry_nature
formData.starting = e.start_date
formData.endtime = e.end_date
formData.principal = e.signing_person
formData.principal = e.project_director
formData.invest = e.project_money
formData.aunit = e.part_a
formData.generalize = e.project_scale
@ -377,7 +375,7 @@ const formRules = reactive<any>({
invest: [
{
required: true,
message: "请输入项目总投资(元)",
message: "请输入项目总投资(元)",
trigger: ["blur"],
},
],

View File

@ -59,10 +59,10 @@
<el-table-column label="计划工期(天)" prop="jhgq" show-overflow-tooltip />
<el-table-column label="项目负责人" prop="contract.signing_person" show-overflow-tooltip />
<el-table-column label="项目相关人员" prop="person_text" show-overflow-tooltip />
<el-table-column label="项目总投资(元)" prop="invest" show-overflow-tooltip />
<el-table-column label="预算造价(元)" prop="budget" show-overflow-tooltip />
<el-table-column label="送审造价(元)" prop="cost" show-overflow-tooltip />
<el-table-column label="审定造价(元)" prop="approval" show-overflow-tooltip />
<el-table-column label="项目总投资(元)" prop="invest" show-overflow-tooltip />
<el-table-column label="预算造价(元)" prop="budget" show-overflow-tooltip />
<el-table-column label="送审造价(元)" prop="cost" show-overflow-tooltip />
<el-table-column label="审定造价(元)" prop="approval" show-overflow-tooltip />
<el-table-column label="委托单位" prop="aunit" show-overflow-tooltip />
<el-table-column label="委托方联系人" prop="Acontact" show-overflow-tooltip />
<el-table-column label="联系电话" prop="acontactnum" show-overflow-tooltip />

View File

@ -118,7 +118,7 @@
<el-table :data="tableData1" stripe style="width: 100%">
<el-table-column label="项目编码" prop='project_code' width="180" />
<el-table-column label="项目名称" prop='name' width="180" />
<el-table-column label="项目估算(万元)" prop='project_estimation' />
<el-table-column label="项目估算(元)" prop='project_estimation' />
<el-table-column label="项目状态" prop='status' />
<el-table-column label="项目类型" prop='project_type' />
<el-table-column label="立项日期" prop='create_time' />
@ -196,7 +196,7 @@
</div>
</el-tab-pane>
<!-- <el-tab-pane label="订单" name="new_name_5">Task</el-tab-pane> -->
<el-tab-pane label="发票" name="new_name_6">Task</el-tab-pane>
<!-- <el-tab-pane label="发票" name="new_name_6">Task</el-tab-pane> -->
<el-tab-pane label="回款" name="new_name_7">
<div class="tit" style="margin:20px 0">回款计划</div>
<div>

View File

@ -3,34 +3,30 @@
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-row>
<el-form-item label="客户名称" prop="custom_name">
<el-input v-model="formData.custom_name" clearable placeholder="请选择客户"
@click="showDialog = true" />
</el-form-item>
<el-form-item label="姓名" prop="name">
<el-input v-model="formData.name" clearable placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="职位" prop="position">
<el-input v-model="formData.position" clearable placeholder="请输入职位" />
</el-form-item>
<el-form-item label="手机" prop="phone">
<el-input v-model="formData.phone" clearable placeholder="请输入手机" />
</el-form-item>
<el-form-item label="电话" prop="telephone">
<el-input v-model="formData.telephone" clearable placeholder="请输入电话" />
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="formData.email" clearable placeholder="请输入邮箱" />
</el-form-item>
<el-form-item label="备注" prop="notes">
<el-input v-model="formData.notes" clearable placeholder="请输入备注" />
</el-form-item>
<el-form-item label="附件">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-row>
<el-form-item label="客户名称" prop="custom_name">
<el-input v-model="formData.custom_name" clearable placeholder="请选择客户" @click="showDialog = true" />
</el-form-item>
<el-form-item label="姓名" prop="name">
<el-input v-model="formData.name" clearable placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="职位" prop="position">
<el-input v-model="formData.position" clearable placeholder="请输入职位" />
</el-form-item>
<el-form-item label="手机" prop="phone">
<el-input v-model="formData.phone" clearable placeholder="请输入手机" />
</el-form-item>
<el-form-item label="电话" prop="telephone">
<el-input v-model="formData.telephone" clearable placeholder="请输入电话" />
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="formData.email" clearable placeholder="请输入邮箱" />
</el-form-item>
<el-form-item label="备注" prop="notes">
<el-input v-model="formData.notes" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
<el-form-item label="附件">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
<el-dialog v-model="showDialog" title="选择客户" width="70%">
<customDialog @customEvent="customEvent"></customDialog>
</el-dialog>
@ -48,16 +44,6 @@ import { apiCustomContactsAdd, apiCustomContactsEdit, apiCustomContactsDetail }
import { apiCustomLists } from '@/api/custom'
import type { PropType } from 'vue'
const handleAvatarSuccess_four = (response: any) => {
formData.annex ||= []
// @ts-ignore
response.code != 0 ? formData.annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => { formData.annex.splice(index, 1) }
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -147,12 +133,6 @@ const handleSubmit = async () => {
emit('success')
}
//
const handleCurrentChange = (e: any) => {
formData.custom_name = e.name
formData.custom_id = e.id
showDialog.value = false
}
//
const open = (type = 'add') => {

View File

@ -1,8 +1,8 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="60%" @confirm="handleSubmit"
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form ref="formRef" :model="formData" label-width="100px" :rules="formRules">
<el-form-item label="主题" prop="name">
<el-input v-model="formData.name" clearable placeholder="请输入主题" />
</el-form-item>
@ -28,9 +28,9 @@
<el-input v-model="formData.executor" clearable placeholder="请输入执行人" />
</el-form-item>
<el-form-item label="行动描述" prop="description">
<el-input v-model="formData.description" clearable placeholder="请输入行动描述" />
<el-input v-model="formData.description" clearable placeholder="请输入行动描述" type="textarea" />
</el-form-item>
<el-form-item label="附件/现场照片" prop="annex">
<el-form-item label="附件" prop="annex">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
<el-form-item label="位置" prop="coordinate">
@ -54,7 +54,6 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomFollowAdd, apiCustomFollowEdit, apiCustomFollowDetail } from '@/api/custom_follow'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { usePaging } from '@/hooks/usePaging'
import { apiCustomLists } from '@/api/custom'

View File

@ -42,7 +42,7 @@
<el-table-column type="selection" 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="name" show-overflow-tooltip />
<el-table-column label="跟进主题" prop="name" show-overflow-tooltip width="200" />
<el-table-column label="联系人" prop="custom_master_name" show-overflow-tooltip />
<el-table-column label="日期" prop="date" show-overflow-tooltip />
<el-table-column label="类型" prop="types">

View File

@ -55,40 +55,40 @@
删除
</el-button> -->
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table :data="pager.lists" @selection-change="handleSelectionChange" fit>
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="客户名称" prop="custom_name" />
<el-table-column label="项目名称" prop="project_name" />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="投诉主题" prop="name" show-overflow-tooltip />
<el-table-column label="日期" prop="date" show-overflow-tooltip />
<el-table-column label="接待人" prop="receiver" show-overflow-tooltip />
<el-table-column label="分类" prop="classification" show-overflow-tooltip />
<el-table-column label="投诉人" prop="custom_master_name" show-overflow-tooltip />
<el-table-column label="联系电话" prop="custom_master_phone" show-overflow-tooltip />
<el-table-column label="处理结果" prop="processing_result" show-overflow-tooltip />
<el-table-column label="紧急程度" prop="urgency" show-overflow-tooltip />
<el-table-column label="指定处理人" prop="processed_user" width="105" show-overflow-tooltip />
<el-table-column label="问题是否解决" prop="is_solve_text" width="110" show-overflow-tooltip />
<el-table-column label="完成日期" prop="done_date" show-overflow-tooltip />
<el-table-column label="评分" prop="score" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" align="center" />
<el-table-column label="项目编码" prop="project_code" style="width:100%" />
<el-table-column label="合同编号" prop="contract_code" />
<el-table-column label="投诉主题" prop="name" />
<el-table-column label="日期" prop="date" />
<el-table-column label="接待人" prop="receiver" />
<el-table-column label="分类" prop="classification" />
<el-table-column label="投诉人" prop="custom_master_name" />
<el-table-column label="联系电话" prop="custom_master_phone" />
<el-table-column label="处理结果" prop="processing_result" />
<el-table-column label="紧急程度" prop="urgency" />
<el-table-column label="指定处理人" prop="processed_user" width="105" />
<el-table-column label="问题是否解决" prop="is_solve_text" width="110" />
<el-table-column label="完成日期" prop="done_date" />
<el-table-column label="评分" prop="score" />
<el-table-column label="操作" width="110" fixed="right">
<template #default="{ row }">
<el-button v-perms="['custom_service.custom_service/solve']" type="primary" link
@click="handleResolve(row)" v-if="row.is_solve != 1">
处理
</el-button>
<el-button v-perms="['custom_service.custom_service/edit']" type="primary" link
@click="handleEdit(row)" >
<el-button v-perms="['custom_service.custom_service/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['custom_service.custom_service/delete']" type="danger" link @click="handleDelete(row.id)">
<el-button v-perms="['custom_service.custom_service/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['custom_service.custom_service/detail']" link
@click="handledetail(row)">
<el-button v-perms="['custom_service.custom_service/detail']" link @click="handledetail(row)">
详情
</el-button>
</template>
@ -109,13 +109,14 @@
<script lang="ts" setup name="customServiceLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiCustomServiceLists, apiCustomServiceDetail ,apiCustomServiceDelete} from '@/api/custom_service'
import { apiCustomServiceLists, apiCustomServiceDetail, apiCustomServiceDelete } from '@/api/custom_service'
import { apiProjectSearch } from '@/api/project'
import { apiContractSearch } from '@/api/contract'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import HandlePopup from './handle.vue'
import DetailPopup from './detail.vue'
import { h } from "vue";
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
@ -165,7 +166,7 @@ const handleAdd = async () => {
//
const handleEdit = async (data: any) => {
let res=await apiCustomServiceDetail({id:data.id})
let res = await apiCustomServiceDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
@ -196,5 +197,31 @@ const handledetail = async (data: any) => {
detailRef.value?.setFormData(res)
}
const labelHead = (h, column, index) => {
console.log(column, index)
// let l = column.label.length
// let f = 16 //
// column.minWidth = f * l // ,pxminWidth
// //div100%
// return h('div', { class: 'table-head', style: { width: '100%' } }, [column.label])
}
const renderHeader = ({ column }) => {
console.log(column)
column.label = 'dgffjghdfgjhdfjgkh'
return h("div", [
h("div", column.label,),
]);
};
getLists()
</script>

View File

@ -98,7 +98,7 @@
<el-table-column label="制单人" prop='create_user' width="180" />
<el-table-column label="报价日期" prop='quotation_date' />
<el-table-column label="技术人员" prop='technician_name' width="180" />
<el-table-column label="概算金额(万元)" prop='estimate_amount' width="180" />
<el-table-column label="概算金额(元)" prop='estimate_amount' width="180" />
<el-table-column label="要求" prop='ask' />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">

View File

@ -4,10 +4,6 @@
<el-descriptions :column="2" border>
<el-descriptions-item label="组织名称" label-align="left" align="left" label-class-name="my-label">{{
formData.org_name }}</el-descriptions-item>
<el-descriptions-item label="部门名称" label-align="left" align="left" label-class-name="my-label">{{
formData.dept_name }}</el-descriptions-item>
<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"> {{
@ -25,11 +21,7 @@
}}</el-descriptions-item>
<el-descriptions-item label="方案内容" label-align="left" align="left" label-class-name="my-label"> {{
formData.solution_content
}}</el-descriptions-item>
<el-descriptions-item label="添加人" label-align="left" align="left" label-class-name="my-label"> {{
formData.add_user_name
@ -39,17 +31,10 @@
}}</el-descriptions-item>
<el-descriptions-item label="更新人" label-align="left" align="left" label-class-name="my-label"> {{
formData.update_user_name
}}</el-descriptions-item>
<el-descriptions-item label="更新日期" label-align="left" align="left" label-class-name="my-label"> {{
formData.update_time
}}</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;">
@ -73,7 +58,6 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
@ -91,20 +75,14 @@ const datas = reactive({
areaOptions: [],
});
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
}
const getDetail = async (row: Record<string, any>) => {
@ -114,7 +92,6 @@ const getDetail = async (row: Record<string, any>) => {
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
@ -131,13 +108,6 @@ const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,

View File

@ -3,19 +3,6 @@
<popup ref="popupRef" :title="popupTitle" :async="true" width="650px" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form-item label="组织" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.org_id" clearable placeholder="请选择组织"
@change="area_change">
<el-option v-for="(item, index) in orglist" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="部门" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in jobs" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
</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="请输入项目名称" :disabled="project" />
@ -69,8 +56,6 @@
<script lang="ts" setup name="customerDemandSolutionEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
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'
@ -80,8 +65,6 @@ import type { PropType } from 'vue'
//
const formData = reactive({
id: '',
org_id: '',
dept_id: '',
project_id: '',
customer_demand_id: '',
theme: '',
@ -137,22 +120,6 @@ const customEvent1 = (e: any) => {
showDialog1.value = false;
};
const getlista = () => {
getAll().then((res) => {
// orglist = res.data
Object.assign(orglist, res)
})
}
const area_change = (e: any) => {
formData.org_id = e
let data = { 'org_id': e }
deptAll(data).then((res) => {
Object.assign(jobs, res)
})
}
//
const popupTitle = computed(() => {
@ -169,9 +136,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
deptAll({ 'org_id': data.org_id }).then((res) => {
Object.assign(jobs, res)
})
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
@ -229,8 +193,6 @@ const handleClose = () => {
emit('close')
}
getlista()
defineExpose({
open,
setFormData,

View File

@ -43,18 +43,6 @@
<el-table-column label="提交时间" prop="submission_time" show-overflow-tooltip />
<el-table-column label="方案内容" prop="solution_content" show-overflow-tooltip />
<el-table-column label="客户反馈" prop="customer_feedback" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['custom.customer_demand_solution/edit']" type="primary" link
@ -154,4 +142,3 @@ const handledetail = async (data: any) => {
getLists()
</script>

View File

@ -1,8 +1,7 @@
<template>
<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">
<el-row :gutter="10">
<el-col :span="8">
@ -20,7 +19,8 @@
<el-col :span="8">
<el-form-item label="合同类型" prop="contract_cate"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select v-model="formData.contract_cate" placeholder="请选择" @change="resetFormData">
<el-select v-model="formData.contract_cate" placeholder="请选择" @change="resetFormData"
class="flex-1">
<el-option label="采购合同" :value="1"></el-option>
<el-option label="分包合同" :value="2"></el-option>
</el-select>
@ -70,8 +70,8 @@
<el-form-item label="付款性质" prop="payment_nature"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.payment_nature" clearable placeholder="请选择付款性质">
<el-option v-for="(item, index) in dictData.payment_natrue" :key="index"
:label="item.name" :value="parseInt(item.value)" />
<el-option v-for="(item, index) in dictData.payment_natrue" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
@ -94,16 +94,15 @@
<el-form-item label="开票状态" prop="invoice_status"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.invoice_status" clearable placeholder="请选择开票状态">
<el-option v-for="(item, index) in dictData.invoice_status" :key="index"
:label="item.name" :value="parseInt(item.value)" />
<el-option v-for="(item, index) in dictData.invoice_status" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="本次申请金额" prop="amount"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.amount" @input="amountinput" clearable
placeholder="请输入本次申请金额" />
<el-input v-model="formData.amount" @input="amountinput" clearable placeholder="请输入本次申请金额" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -125,22 +124,7 @@
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
@ -173,8 +157,8 @@
<el-col :span="8">
<el-form-item label="账户编码" prop="bank_account_info"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.bank_account_info.account_sn" @click="showDialog4 = true"
readonly clearable placeholder="请输入收款账号" />
<el-input v-model="formData.bank_account_info.account_sn" @click="showDialog4 = true" readonly
clearable placeholder="请输入收款账号" />
</el-form-item>
</el-col>
@ -202,33 +186,32 @@
</el-row>
<el-dialog v-model="showDialog" title="选择供应商" width="70%">
<suppliertable @customEvent="customEvent" :project_id="project?.id || ''"></suppliertable>
<dialogTable :config="supplier_tab" :query="{ project_id: project?.id || '' }"
@customEvent="customEvent">
</dialogTable>
</el-dialog>
<div v-if="formData.contract_cate == 1 && showDialog1">
<el-dialog v-model="showDialog1" title="选择采购合同" width="70%">
<subcontractingDialog @customEvent="customEvent1" :supplier_id="formData.supplier_id">
</subcontractingDialog>
<dialogTable :config="procurement_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
@customEvent="customEvent1" />
</el-dialog>
</div>
<div v-if="formData.contract_cate == 2 && showDialog1">
<el-dialog v-model="showDialog1" title="选择分包合同" width="70%">
<subcontracting @customEvent="customEvent1" :supplier_id="formData.supplier_id">
</subcontracting>
<dialogTable :config="subcontracting_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
@customEvent="customEvent1" />
</el-dialog>
</div>
<div v-if="showDialog2">
<el-dialog v-model="showDialog2" title="选择待付款计划" width="70%">
<paylistDialog @customEvent="customEvent2" :contract_id="formData.contract_id"></paylistDialog>
<dialogTable :config="finance_payment_plan"
:query="{ contract_id: formData?.contract_id, status: 1 }" @customEvent="customEvent2" />
</el-dialog>
</div>
<el-dialog v-model="showDialog3" title="选择收款人信息" width="70%">
<bankaccountDialog @customEvent="customEvent3"></bankaccountDialog>
</el-dialog>
<el-dialog v-model="showDialog4" title="选择付款银行" width="70%">
<bankaccountDialog @customEvent="customEvent4"></bankaccountDialog>
<dialogTable :config="bank_account" @customEvent="customEvent4" />
</el-dialog>
</el-form>
</popup>
@ -241,24 +224,14 @@
import customDialog from '@/components/custom-dialog/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
// import procurementDialog from '@/components/procurement/index.vue'
import suppliertable from '@/components/supplier/index.vue'
import { useDictData } from '@/hooks/useDictOptions'
import subcontractingDialog from '@/components/procurementsubcontracting_selector/index.vue'
import subcontracting from '@/components/procurementsubcontracting_selector/subcontracting.vue'
import paylistDialog from '@/components/paylist/index.vue'
const active = ref(0)
import bankaccountDialog from '@/components/bankaccount/index.vue'
import { supplier_tab, procurement_contract, subcontracting_contract, finance_payment_plan, bank_account } from "@/components/dialogTable/dialogTableConfig"
import { paymentapplyAdd, paymentapplyEdit, paymentapplyDetail } from '@/api/paymentrequest'
import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype'
import { timeFormat } from '@/utils/util'
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const protype = reactive([])
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const formDataannex = reactive([])
const contract_name = ref('')
@ -270,26 +243,7 @@ const project_amount = ref('')
const contract_no = ref('')
const custom_name = ref('')
const userInfo = userStore.userInfo
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
let props = defineProps({
project: Object
})
@ -309,7 +263,6 @@ const amount_daxie = ref('')
const showDialog = ref(false)
const showDialog1 = ref(false)
const showDialog2 = ref(false)
const showDialog3 = ref(false)
const showDialog4 = ref(false)
const customEvent = (e: any) => {
@ -339,12 +292,7 @@ const customEvent2 = (e: any) => {
showDialog2.value = false;
};
const customEvent3 = (e: any) => {
formData.payee_bank = e.deposit_bank
formData.payee_account_name = e.account_name
formData.payee_account = e.account
showDialog3.value = false
};
const customEvent4 = (e: any) => {
formData.bank_account_id = e.id;
formData.bank_account_info.account_sn = e.account_sn
@ -410,19 +358,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
@ -451,9 +386,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
@ -467,11 +400,6 @@ const handleSubmit = async () => {
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getAllProjectTypes().then((res) => {
protype.splice('', protype.length, ...res);
})
}
//

View File

@ -14,22 +14,10 @@
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item label="合同" prop="contract_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="供应商" prop="supplier_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
</el-select>
<selectRemote :formData="queryParams" model="supplier_id" :api="apiSupplierSearch"></selectRemote>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -95,6 +83,7 @@ import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { paymentapplyLists, paymentapplyDelete, paymentapplyDetail } from '@/api/paymentrequest'
import { apiProcurementContractLists } from '@/api/procurement_contract'
import { apiSupplierSearch } from '@/api/suppler_list'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'

View File

@ -1,8 +1,7 @@
<template>
<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">
<el-row :gutter="10">
@ -21,7 +20,7 @@
<el-col :span="8">
<el-form-item label="合同类型" prop="contract_cate">
<el-select v-model="formData.contract_cate" placeholder="请选择" @change="resetFormData"
class="flex-1">
class="flex-1 !flex">
<el-option label="采购合同" :value="1"></el-option>
<el-option label="分包合同" :value="2"></el-option>
</el-select>
@ -94,43 +93,27 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<el-dialog v-model="showDialog" title="选择供应商" width="70%">
<supplier @customEvent="customEvent" :project_id="project?.id || ''"></supplier>
<dialogTable :config="supplier_tab" :query="{ project_id: project?.id || '' }"
@customEvent="customEvent">
</dialogTable>
</el-dialog>
<div v-if="formData.contract_cate == 1 && showDialog1">
<el-dialog v-model="showDialog1" title="选择采购合同" width="70%">
<subcontractingDialog @customEvent="customEvent1" :supplier_id="formData.supplier_id">
</subcontractingDialog>
<dialogTable :config="procurement_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
@customEvent="customEvent1" />
</el-dialog>
</div>
<div v-if="formData.contract_cate == 2 && showDialog1">
<el-dialog v-model="showDialog1" title="选择分包合同" width="70%">
<subcontracting @customEvent="customEvent1" :supplier_id="formData.supplier_id">
</subcontracting>
<dialogTable :config="subcontracting_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
@customEvent="customEvent1" />
</el-dialog>
</div>
</el-form>
@ -143,9 +126,7 @@
import customDialog from '@/components/custom-dialog/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import supplier from '@/components/supplier/index.vue'
import subcontractingDialog from '@/components/procurementsubcontracting_selector/index.vue'
import subcontracting from '@/components/procurementsubcontracting_selector/subcontracting.vue'
import { supplier_tab, procurement_contract, subcontracting_contract } from "@/components/dialogTable/dialogTableConfig"
import { paymentplanAdd, paymentplanEdit, paymentplanDetail } from '@/api/paymentplan'
import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype'
@ -169,26 +150,7 @@ const contract_no = ref('')
const supplier_name = ref('')
const supplier_code = ref('')
const userInfo = userStore.userInfo
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
const props = defineProps({
project: Object
})
@ -268,18 +230,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
@ -307,9 +257,6 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'

View File

@ -2,23 +2,15 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="合同" prop="contract_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="供应商" prop="supplier_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
<selectRemote :formData="queryParams" model="supplier_id" :api="apiSupplierSearch"></selectRemote>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select class="flex-1" v-model="queryParams.status" clearable placeholder="请选择状态">
<el-option v-for="(item, index) in dictData.pay_status" :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>
<el-button @click="resetParams">重置</el-button>
@ -34,8 +26,7 @@
</template>
新增
</el-button>
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
@ -52,15 +43,12 @@
<el-table-column label="状态" prop="status_text" show-overflow-tooltip />
<el-table-column label="已付款" prop="has_payment_amount" show-overflow-tooltip />
<el-table-column label="未付款" prop="not_payment_amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['refund.refund/delete']" type="danger" link
@click="handleDelete(row.id)">
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
@ -86,7 +74,8 @@ import { useDictData } from '@/hooks/useDictOptions'
import { paymentplanLists, paymentplanDelete, paymentplanDetail } from '@/api/paymentplan'
import { apiProcurementContractLists } from '@/api/procurement_contract'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
import { apiSupplierSearch } from '@/api/suppler_list'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
@ -105,6 +94,7 @@ const list = ref([])
const queryParams = reactive({
contract_id: '',
supplier_id: '',
status: "",
})

View File

@ -1,8 +1,7 @@
<template>
<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">
<el-row :gutter="10">
@ -84,8 +83,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="发票金额大写" prop="invoice_amount_daxie">
<el-input v-model="formData.invoice_amount_daxie" clearable disabled
placeholder="请输入金额大写" />
<el-input v-model="formData.invoice_amount_daxie" clearable disabled placeholder="请输入金额大写" />
</el-form-item>
</el-col>
@ -103,17 +101,14 @@
</el-col>
<el-col :span="8">
<el-form-item label="税额" prop="tax"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="税额" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.tax" disabled clearable placeholder="请输入税额" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="不含税金额" prop="amount_excluding_tax"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.amount_excluding_tax" clearable disabled
placeholder="请输入不含税金额" />
<el-form-item label="不含税金额" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.amount_excluding_tax" clearable disabled placeholder="请输入不含税金额" />
</el-form-item>
</el-col>
@ -130,29 +125,9 @@
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
@ -197,7 +172,6 @@ import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('invoice_type,contract_type,tax_rate')
const protype = reactive([])
const base_url = configs.baseUrl + configs.urlPrefix
@ -212,21 +186,7 @@ const contract_no = ref('')
const supplier_name = ref('')
const supplier_code = ref('')
const userInfo = userStore.userInfo
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
if (value && !/^1\d{10}$/.test(value)) {
@ -237,11 +197,9 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
}
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
const props = defineProps({
dictData: Object,
project: Object
})
if (props.project) {
@ -280,14 +238,14 @@ const customEvent1 = (e: any) => {
//Name
const getTaxValue = (value) => {
let i = dictData.tax_rate.findIndex((item) => item.value == value)
return (dictData.tax_rate[i]?.name / 100) || 0
let i = props.dictData.tax_rate.findIndex((item) => item.value == value)
return (props.dictData.tax_rate[i]?.name / 100) || 0
}
//
const amountinput = (e) => {
formData.tax = formData.invoice_amount * getTaxValue(formData.invoice_tax_rate)
formData.amount_excluding_tax = formData.invoice_amount - formData.tax
formData.tax = (formData.invoice_amount * getTaxValue(formData.invoice_tax_rate)).toFixed(2)
formData.amount_excluding_tax = (formData.invoice_amount - formData.tax).toFixed(2)
formData.invoice_amount_daxie = toChinesNum(formData.invoice_amount)
}
@ -313,7 +271,7 @@ const formData = reactive({
amount_excluding_tax: "",
receipt_date: "",
remark: "",
annex: "",
annex: [],
contract_cate: 1,
approve_detail: {}
})
@ -326,15 +284,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
if (data.invoice_amount_daxie) {
toChinesNum(data.invoice_amount_daxie)
}
@ -364,16 +313,8 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
}
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
? await apifinancereceiptEdit(data)
: await apifinancereceiptAdd(data)

View File

@ -3,6 +3,10 @@
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="供应商" prop="supplier_id">
<selectRemote :formData="queryParams" model="supplier_id" :api="apiSupplierSearch"></selectRemote>
</el-form-item>
<el-form-item label="发票编号" prop="invoice_no">
<el-input class="w-[280px]" v-model="queryParams.invoice_no" clearable placeholder="请输入发票编号" />
</el-form-item>
@ -28,8 +32,7 @@
</template>
新增
</el-button>
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
@ -57,8 +60,7 @@
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['refund.refund/delete']" type="danger" link
@click="handleDelete(row.id)">
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
@ -82,6 +84,8 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apifinancereceiptLists, apifinancereceiptDelete, apifinancereceiptDetail } from '@/api/receiptrecord'
import { apiSupplierSearch } from '@/api/suppler_list'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
@ -101,6 +105,7 @@ const showDtail = ref(false)
const queryParams = reactive({
invoice_no: '',
invoice_type: '',
supplier_id: ""
})
@ -116,6 +121,7 @@ const handleSelectionChange = (val: any[]) => {
//
const { dictData } = useDictData('invoice_type,contract_type,tax_rate')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apifinancereceiptLists,

View File

@ -1,8 +1,7 @@
<template>
<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">
<el-row :gutter="10">
@ -92,27 +91,10 @@
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="12">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
@ -124,47 +106,49 @@
<el-form-item label="账户编码" prop="bank_account_id" @click="showDialog2 = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.bank_account_info.account_sn" readonly clearable
placeholder="请输入账户编码" />
placeholder="点击选择银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户银行" prop="deposit_bank">
<el-input v-model="formData.bank_account_info.deposit_bank" disabled
placeholder="请输入开户银行" />
<el-input v-model="formData.bank_account_info.deposit_bank" disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户名称" prop="deposit_bank">
<el-input v-model="formData.bank_account_info.account_name" disabled
placeholder="请输入开户名称" />
<el-input v-model="formData.bank_account_info.account_name" disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户账号" prop="bank_accnout">
<el-input v-model="formData.bank_account_info.account" disabled placeholder="请输入开户账号" />
<el-input v-model="formData.bank_account_info.account" disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
</el-row>
<el-dialog v-model="showDialog" title="选择供应商" width="70%">
<suppliertable @customEvent="customEvent" :project_id="project?.id || ''"></suppliertable>
<dialogTable :config="supplier_tab" :query="{ project_id: project?.id || '' }"
@customEvent="customEvent">
</dialogTable>
</el-dialog>
<div v-if="formData.contract_cate == 1 && showDialog1">
<el-dialog v-model="showDialog1" title="选择采购合同" width="70%">
<subcontractingDialog @customEvent="customEvent1" :supplier_id="formData.supplier_id">
</subcontractingDialog>
<dialogTable :config="procurement_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
@customEvent="customEvent1" />
</el-dialog>
</div>
<div v-if="formData.contract_cate == 2 && showDialog1">
<el-dialog v-model="showDialog1" title="选择分包合同" width="70%">
<subcontracting @customEvent="customEvent1" :supplier_id="formData.supplier_id">
</subcontracting>
<dialogTable :config="subcontracting_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
@customEvent="customEvent1" />
</el-dialog>
</div>
<el-dialog v-model="showDialog2" title="选择银行账户" width="70%">
<bankaccountDialog @customEvent="customEvent2"></bankaccountDialog>
<dialogTable :config="bank_account" @customEvent="customEvent2" />
</el-dialog>
</el-form>
</popup>
@ -176,10 +160,7 @@
import customDialog from '@/components/custom-dialog/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import suppliertable from '@/components/supplier/index.vue'
import subcontractingDialog from '@/components/procurementsubcontracting_selector/index.vue'
import subcontracting from '@/components/procurementsubcontracting_selector/subcontracting.vue'
import bankaccountDialog from '@/components/bankaccount/index.vue'
import { supplier_tab, procurement_contract, subcontracting_contract, finance_payment_plan, bank_account } from "@/components/dialogTable/dialogTableConfig"
import { apiFinancerefundAdd, apiFinancerefundEdit, apiFinancerefundDetail } from '@/api/refundrecord'
import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype'

View File

@ -8,20 +8,10 @@
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item label="合同" prop="contract_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="供应商" prop="supplier_id">
<el-select class="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in list" :key="index" :label="item.contract_name"
:value="parseInt(item.id)" />
</el-select>
<selectRemote :formData="queryParams" model="supplier_id" :api="apiSupplierSearch"></selectRemote>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -37,8 +27,7 @@
</template>
新增
</el-button>
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
@ -62,8 +51,7 @@
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['refund.refund/delete']" type="danger" link
@click="handleDelete(row.id)">
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
@ -88,7 +76,7 @@ import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiFinancerefundLists, apiFinancerefundDelete, apiFinancerefundDetail } from '@/api/refundrecord'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
import { apiSupplierSearch } from '@/api/suppler_list'
import { apiProcurementContractLists } from '@/api/procurement_contract'
const protype = reactive([])
import feedback from '@/utils/feedback'

View File

@ -10,11 +10,11 @@ const detailConfig = {
value: "date"
},
{
label: "本月完成(万元)",
label: "本月完成(元)",
value: "month_amount"
},
{
label: "本月支付(万元)",
label: "本月支付(元)",
value: "month_pay"
},
{

View File

@ -12,11 +12,11 @@
value-format="YYYY-MM" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="本月完成(万元)" prop="month_amount">
<el-input v-model="formData.month_amount" clearable placeholder="请输入本月完成(万元)" type="number" />
<el-form-item label="本月完成(元)" prop="month_amount">
<el-input v-model="formData.month_amount" clearable placeholder="请输入本月完成(元)" type="number" />
</el-form-item>
<el-form-item label="本月支付(万元)" prop="month_pay">
<el-input v-model="formData.month_pay" clearable placeholder="请输入本月支付(万元)" type="number" />
<el-form-item label="本月支付(元)" prop="month_pay">
<el-input v-model="formData.month_pay" clearable placeholder="请输入本月支付(元)" type="number" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
@ -99,12 +99,12 @@ const formRules = reactive<any>({
}],
month_amount: [{
required: true,
message: '请输入本月完成(万元)',
message: '请输入本月完成(元)',
trigger: ['blur']
}],
month_pay: [{
required: true,
message: '请输入本月支付(万元)',
message: '请输入本月支付(元)',
trigger: ['blur']
}],
remark: [{

View File

@ -30,10 +30,10 @@
<el-table-column type="selection" width="55" />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="年月" prop="date" show-overflow-tooltip />
<el-table-column label="本月完成(万元)" prop="month_amount" show-overflow-tooltip />
<el-table-column label="累计完成(万元)" prop="total_amount" show-overflow-tooltip />
<el-table-column label="本月支付(万元)" prop="month_pay" show-overflow-tooltip />
<el-table-column label="累计支付(万元)" prop="total_pay" show-overflow-tooltip />
<el-table-column label="本月完成(元)" prop="month_amount" show-overflow-tooltip />
<el-table-column label="累计完成(元)" prop="total_amount" show-overflow-tooltip />
<el-table-column label="本月支付(元)" prop="month_pay" show-overflow-tooltip />
<el-table-column label="累计支付(元)" prop="total_pay" show-overflow-tooltip />
<el-table-column label="填报人" prop="create_user" show-overflow-tooltip />
<el-table-column label="操作" align="center" fixed="right">
<template #default="{ row }">

View File

@ -30,7 +30,7 @@ const detailConfig = {
value: "project_level_text"
},
{
label: "总投资(万元)",
label: "总投资(元)",
value: "total_investment"
},
{

View File

@ -52,8 +52,8 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="总投资(万元)" prop="total_investment">
<el-input v-model="formData.total_investment" clearable placeholder="请输入总投资(万元)"
<el-form-item label="总投资(元)" prop="total_investment">
<el-input v-model="formData.total_investment" clearable placeholder="请输入总投资(元)"
type="number" />
</el-form-item>
</el-col>
@ -168,7 +168,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-form-item label="备注">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
</el-col>
@ -293,7 +293,7 @@ const formRules = reactive<any>({
}],
total_investment: [{
required: true,
message: '请输入总投资(万元)',
message: '请输入总投资(元)',
trigger: ['blur']
}],
engineering_status: [{

View File

@ -86,7 +86,7 @@
<el-table-column label="项目进度" prop="progress" show-overflow-tooltip />
<el-table-column label="建设区域" prop="build_area_text" show-overflow-tooltip />
<el-table-column label="项目级别" prop="project_level_text" show-overflow-tooltip />
<el-table-column label="总投资(万元)" prop="total_investment" show-overflow-tooltip />
<el-table-column label="总投资(元)" prop="total_investment" show-overflow-tooltip />
<el-table-column label="工程状态" prop="engineering_status_text" show-overflow-tooltip />
<el-table-column label="实施部门" prop="implementation_department" show-overflow-tooltip />
<el-table-column label="监管部门" prop="supervision_department" show-overflow-tooltip />

View File

@ -21,7 +21,7 @@
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog1 = true">
<el-input v-model="project_name" clearable readonly placeholder="系统自动填写" />
<el-input v-model="project_name" clearable readonly placeholder="点击选择项目" />
</el-form-item>
</el-col> <el-col :span="8">
<el-form-item label="项目编码" prop="contract_id">
@ -53,29 +53,9 @@
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
@ -84,7 +64,7 @@
<el-col :span="24" v-if="mode == 'add'">
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
<el-button @click="showDialog = true" type="primary" plain>选择材料</el-button>
<toolTip content="可在项目管理-项目预算-材料预算-材料预算添加"></toolTip>
</div>
</el-col>
<el-row v-if="mode == 'add'">
@ -169,50 +149,24 @@
import materialDialog from '@/components/material_budget_detail/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { toChinesNum } from "@/utils/util";
import projectDialog from '@/components/project/index.vue'
import { materialrequestAdd, materialrequestEdit, materialrequestDetail } from '@/api/material_purchase_request'
import { materialrequestDetailLists } from '@/api/material_purchase_request_detail'
import { getAllProjectTypes } from '@/api/projecttype'
import { timeFormat } from '@/utils/util'
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const list1 = reactive([])
const list2 = reactive([])
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const active = ref(0)
const formDataannex = reactive([])
const project_name = ref('')
const project_code = ref('')
const tablist1 = reactive([])
const next = () => {
if (active.value++ > 3) active.value = 0
}
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
const handleAdd = (row: any) => {
// row
const index = tablist1.indexOf(row);

View File

@ -5,8 +5,10 @@
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="基本信息" name="demo-tabs-1">
<el-descriptions :column="2" border>
<el-descriptions-item label="供应商编码" label-align="left" align="left"
label-class-name="my-label">{{ formData.supplier_code }}</el-descriptions-item>
<el-descriptions-item label="供应商名称" label-align="left" align="left"
label-class-name="my-label">{{ formData.supplier_name }}</el-descriptions-item>
<el-descriptions-item label="项目名称" label-align="left" align="left"
label-class-name="my-label">
{{ formData.project_name }}</el-descriptions-item>
@ -17,10 +19,6 @@
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_no }}</el-descriptions-item>
<el-descriptions-item label="供应商编码" label-align="left" align="left"
label-class-name="my-label">{{ formData.supplier_code }}</el-descriptions-item>
<el-descriptions-item label="供应商名称" label-align="left" align="left"
label-class-name="my-label">{{ formData.supplier_name }}</el-descriptions-item>
<el-descriptions-item label="合同类型" label-align="left" align="left"
label-class-name="my-label">
{{ formData.contract_type_text }}

View File

@ -3,18 +3,6 @@
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<div
style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select>
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织"
@change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select>
</div>
<el-row>
<el-col :span="8">
<el-form-item label="供应商名称" prop="supplier_id" @click="showDialog1 = true"
@ -102,29 +90,14 @@
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item> </el-col> <el-col :span="8">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<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>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<div style=" display: flex;justify-content: flex-end;margin-bottom: 30px;">
<el-button @click="showDialog2 = true" type="primary" :disabled="!formData.project_id"
plain>选择采购申请</el-button>
<toolTip content="可在材料管理-采购申请-采购申请添加"></toolTip>
</div>
<el-row>
<el-col :span="24">
@ -133,7 +106,6 @@
<el-table :data="materialList">
<el-table-column label="序号">
<template #default="{ row }">
<!-- <el-button @click="handleAdd1(row)">+</el-button> -->
<el-button @click="handleDelete1(row)">-</el-button>
</template>
</el-table-column>
@ -279,12 +251,8 @@ 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([])
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import { paymentplanLists } from '@/api/paymentplan'
import { apiProcurementContractDetailLists } from '@/api/procurement_contract_detail'
import { paymentplanLists, paymentplanDelete } from '@/api/paymentplan'
import { apiProcurementContractDetailLists, apiProcurementContractDetailDelete } from '@/api/procurement_contract_detail'
import { apiProcurementContractAdd, apiProcurementContractEdit, apiProcurementContractDetail } from '@/api/procurement_contract'
const { dictData } = useDictData('procurement_contract_type,pay_type,tax_rate,account_period,pay_period')
let props = defineProps({
@ -319,38 +287,17 @@ const paymentList = reactive([
])
const formDataannex = reactive([])
import feedback from '@/utils/feedback'
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
feedback.msgError(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
const handleAdd = (row: any) => {
// row
const index = paymentList.indexOf(row);
paymentList.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
if (paymentList.length <= 1) return
const handleDelete = async (row: any) => {
// if (paymentList.length <= 1) return
if (row.id) await paymentplanDelete({ id: row.id })
// row
const index = paymentList.indexOf(row);
paymentList.splice(index, 1);
@ -361,7 +308,8 @@ const handleAdd1 = (row: any) => {
materialList.splice(index + 1, 0, {});
};
const handleDelete1 = (row: any) => {
const handleDelete1 = async (row: any) => {
if (row.id) await apiProcurementContractDetailDelete({ id: row.id })
// row
const index = materialList.indexOf(row);
materialList.splice(index, 1);
@ -396,6 +344,7 @@ const procurementList = (id) => {
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) => ({
id: item.id,
'period': item.period,
'pay_date': item.pay_date,
'amount': item.amount,
@ -406,41 +355,9 @@ const paymentplanList = (id: any) => {
})
}
//
const getlist = () => {
getAll().then((res) => {
Object.assign(list1, res)
if (res.length > 0 && !formData.org_id) {
formData.org_id = res[0].id
deptAll({ 'org_id': res[0].id }).then((res) => {
if (res.length > 0) {
Object.assign(list2, res)
formData.dept_id = res[0].id
}
})
}
})
}
//
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
list2.splice(0, list2.length, ...res)
})
}
//
const formData = reactive({
id: '',
dept_id: '',
org_id: '',
supplier_id: '',
project_id: '',
contract_name: '',
@ -523,18 +440,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
if (data.dept_id) {
getlist1(data.org_id)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
@ -548,6 +453,8 @@ const setFormData = async (data: Record<any, any>) => {
contract_no.value = data.contract_no
supplier_name.value = data.supplier_name
supplier_code.value = data.supplier_code
let res = await apiProcurementContractDetailLists({ contract_id: data.id })
Object.assign(materialList, res.lists)
}
@ -595,7 +502,6 @@ const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getlist()
}
//

View File

@ -3,16 +3,10 @@
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline label-width="auto">
<el-form-item label="供应商" prop="supplier_id">
<el-select v-model="queryParams.supplier_id" clearable placeholder="请选择供应商">
<el-option v-for="(item, index) in supplierList" :key="index" :label="item.supplier_name"
:value="parseInt(item.value)" />
</el-select>
<selectRemote :formData="queryParams" model="supplier_id" :api="apiSupplierSearch" />
</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-select>
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<el-form-item label="合同编号" prop="project_id">
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
@ -41,10 +35,10 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" show-overflow-tooltip />
<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_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_no" show-overflow-tooltip />
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
<el-table-column label="合同类型" prop="contract_type" show-overflow-tooltip />
<el-table-column label="签订日期" prop="signing_date" show-overflow-tooltip />
<el-table-column label="合同金额" prop="contract_amount" show-overflow-tooltip />
@ -66,7 +60,8 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['contract.procurement_contract/detail']" link @click="handleDetail(row)">
<el-button v-perms="['contract.procurement_contract/detail']" link
@click="handleDetail(row)">
详情
</el-button>
</template>
@ -87,8 +82,8 @@ import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiProcurementContractLists, apiProcurementContractDelete, apiProcurementContractDetail } from '@/api/procurement_contract'
import feedback from '@/utils/feedback'
import { apiProjectLists } from '@/api/project'
import { apisupplierLists } from '@/api/suppler_list'
import { apiProjectSearch } from '@/api/project'
import { apiSupplierSearch } from '@/api/suppler_list'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
@ -96,8 +91,6 @@ const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const showDtail = ref(false)
const projectList = ref([])
const supplierList = ref([])
//
const queryParams = reactive({
supplier_id: '',
@ -152,22 +145,5 @@ const handleDetail = async (data: any) => {
detailRef.value?.setFormData(res)
}
//
const projectlist = async () => {
let res = await apiProjectLists({ page_no: 1, page_size: 9999 })
projectList.value = res.lists
}
//
const supplierlist = async () => {
let res = await apisupplierLists({ page_no: 1, page_size: 9999 })
supplierList.value = res.lists
}
projectlist()
supplierlist()
getLists()
</script>

View File

@ -1,14 +1,9 @@
<template>
<div>
<!-- <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-item label="采购合同id" prop="procurement_contract_id">
<el-input class="w-[280px]" v-model="queryParams.procurement_contract_id" clearable
placeholder="请输入采购合同id" />
</el-form-item>
<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-form-item label="采购合同" prop="contract_id">
<selectRemote :formData="queryParams" model="contract_id" :api="apiProcurementContractSearch" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
@ -17,14 +12,14 @@
:page-size="pager.size" />
</el-form-item>
</el-form>
</el-card> -->
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<!-- <el-button v-perms="['procurement_contract_detail/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button> -->
新增
</el-button> -->
<!-- <el-button v-perms="['procurement_contract_detail/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
@ -33,27 +28,26 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" 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="contract_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_no" show-overflow-tooltip />
<el-table-column label="供应编号" prop="supplier_code" show-overflow-tooltip />
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
<el-table-column label="合同类型" prop="contract_type_text" show-overflow-tooltip />
<el-table-column label="税率" prop="tax_rate_text" show-overflow-tooltip />
<el-table-column label="材料类别" prop="material_first_level" show-overflow-tooltip />
<el-table-column label="材料中类" prop="material_second_level" show-overflow-tooltip />
<el-table-column label="材料小类" prop="material_three_level" show-overflow-tooltip />
<el-table-column label="材料名称" prop="material_name" show-overflow-tooltip />
<el-table-column label="材料类别" prop="material_first_level" show-overflow-tooltip />
<el-table-column label="材料中类" prop="material_second_level" show-overflow-tooltip />
<el-table-column label="材料编码" prop="material_code" show-overflow-tooltip />
<el-table-column label="规格型号" prop="material_specs" show-overflow-tooltip />
<el-table-column label="品牌" prop="material_brand" show-overflow-tooltip />
<el-table-column label="参数说明" prop="material_parameter_description" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['procurement_contract_detail/edit']" type="primary" link
<!-- <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)">
删除
@ -77,8 +71,8 @@
<script lang="ts" setup name="procurementContractDetailLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiProcurementContractDetailLists, apiProcurementContractDetailDetail } from '@/api/procurement_contract_detail'
import { timeFormat } from '@/utils/util'
import { apiProcurementContractDetailLists, apiProcurementContractDetailDetail, apiProcurementContractDetailDelete } from '@/api/procurement_contract_detail'
import { apiProcurementContractSearch } from '@/api/procurement_contract'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
@ -92,8 +86,7 @@ const showDtail = ref(false)
//
const queryParams = reactive({
procurement_contract_id: '',
material_procurement_application_id: ''
contract_id: '',
})
//
@ -145,4 +138,3 @@ const handleDetail = async (data: any) => {
getLists()
</script>

View File

@ -22,7 +22,7 @@
<el-table-column label="下次回访日期" prop="next_follow_up_date">
<template #default="{ row }">
<span>{{ row.next_follow_up_date ? row.next_follow_up_date :
'' }}</span>
'' }}</span>
</template>
</el-table-column>
</el-table>
@ -95,7 +95,7 @@
<el-table-column label="制单人" prop='create_user' width="180" />
<el-table-column label="报价日期" prop='quotation_date' />
<el-table-column label="技术人员" prop='technician_name' width="180" />
<el-table-column label="概算金额(万元)" prop='estimate_amount' width="180" />
<el-table-column label="概算金额(元)" prop='estimate_amount' width="180" />
<el-table-column label="要求" prop='ask' />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">

View File

@ -1,7 +1,7 @@
<template>
<el-descriptions :column="3" title="基本信息" border>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label">{{ formData.name
}}</el-descriptions-item>
}}</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">
@ -27,10 +27,11 @@
{{ formData.bidding_time }}</el-descriptions-item>
<el-descriptions-item label="预计工期" label-align="left" align="left" label-class-name="my-label">
{{ formData.estimated_construction }}</el-descriptions-item>
<el-descriptions-item label="项目估算(万元)" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_estimation }}</el-descriptions-item>
<el-descriptions-item label="项目估算(外币)" label-align="left" align="left" label-class-name="my-label"> {{ formData.name
}}</el-descriptions-item>
<el-descriptions-item label="项目估算(元)" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_estimation }}</el-descriptions-item>
<el-descriptions-item label="项目估算(外币)" label-align="left" align="left" label-class-name="my-label"> {{
formData.name
}}</el-descriptions-item>
<el-descriptions-item label="联系人" label-align="left" align="left" label-class-name="my-label">
{{ formData.contacts }}</el-descriptions-item>
<el-descriptions-item label="联系人部门" label-align="left" align="left" label-class-name="my-label">
@ -46,12 +47,12 @@
<el-descriptions-item label="负责人" label-align="left" align="left" label-class-name="my-label">
{{ formData.person }}</el-descriptions-item>
<el-descriptions-item label="项目内容" label-align="left" align="left" label-class-name="my-label">
{{ formData.project_content }}</el-descriptions-item>
{{ formData.project_content_text }}</el-descriptions-item>
<el-descriptions-item label="竞争对手" label-align="left" align="left" label-class-name="my-label">
{{ formData.competitor }}</el-descriptions-item>
<el-descriptions-item label="项目建设资金来源" label-align="left" align="left" label-class-name="my-label"> {{
formData.construction_funds_sources_text
}}</el-descriptions-item>
formData.construction_funds_sources_text
}}</el-descriptions-item>
<el-descriptions-item label="建设单位付款方式" label-align="left" align="left" label-class-name="my-label"> {{
formData.construction_payment_method
}}</el-descriptions-item>

View File

@ -69,7 +69,7 @@ const baseData1 = reactive({
{ label: '到期日期', prop: 'due_date' },
{ label: '保险种类', prop: 'type_text' },
{ label: '保单号', prop: 'insurance_no' },
{ label: '投保金额(元)', prop: 'insured_amount' },
{ label: '投保金额(元)', prop: 'insured_amount' },
{ label: '保险公司', prop: 'insurance_company' },
]

View File

@ -2,7 +2,7 @@
<div class="tit" v-if="baseData.tit">{{ baseData.tit }}</div>
<el-table :data="pager.lists" style="width: 100%">
<el-table-column :label="item.label" :prop='item.prop' width="180" v-for="(item, index) in baseData.columnList"
:key="index" />
:key="index" show-overflow-tooltip />
</el-table>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />

View File

@ -3,7 +3,7 @@
<div>
<el-table :data="tableData6" stripe style="width: 100%">
<el-table-column label="流程编号" prop='code' width="180" />
<el-table-column label="项目估算(万元)" prop='project_estimation' width="180" />
<el-table-column label="项目估算(元)" prop='project_estimation' width="180" />
<el-table-column label="资金来源" prop='bidding_project_fund_source' />
<el-table-column label="投标时间" prop='bidding_time' />
<el-table-column label="招标方式" prop='bid_type' />
@ -260,7 +260,7 @@ applyLists()
bidResultLists()
refundLists()
</script>
<style >
<style>
.tit {
font-size: 1.2em;
margin-bottom: 10px;

View File

@ -3,12 +3,12 @@
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10">
<el-row>
<el-col :span="8">
<el-form-item label="客户名称" prop="custom_name"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.custom_name" @click="showDialog = true" clearable
placeholder="请选择客户" />
placeholder="请选择客户" class="flex-1" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -18,6 +18,7 @@
<el-option v-for="(item, index) in protype" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
<ToolTip content="可在项目管理--项目设置--项目类型设置里面添加项目类型"></ToolTip>
</el-form-item>
</el-col>
<el-col :span="8">
@ -34,7 +35,7 @@
<el-col :span="24">
<el-form-item label="项目内容" prop="project_content">
<el-checkbox-group v-model="formData.project_content" placeholder="请选择项目内容">
<el-checkbox v-for="(item, index) in dictData.project_content" :key="index"
<el-checkbox v-for="( item, index ) in dictData.project_content " :key="index"
:label="item.value">
{{ item.name }}
</el-checkbox>
@ -66,7 +67,7 @@
<el-col :span="24">
<el-form-item label="招标方式" prop="bidding_method">
<el-radio-group v-model="formData.bidding_method" placeholder="请选择招标方式">
<el-radio v-for="(item, index) in dictData.bidding_method" :key="index"
<el-radio v-for="( item, index ) in dictData.bidding_method " :key="index"
:label="parseInt(item.value)">
{{ item.name }}
</el-radio>
@ -112,7 +113,7 @@
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.information_sources" clearable
placeholder="请选择信息来源">
<el-option v-for="(item, index) in dictData.information_sources" :key="index"
<el-option v-for="( item, index ) in dictData.information_sources " :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
@ -131,7 +132,7 @@
<el-col :span="12">
<el-form-item label="关系度" prop="relationship">
<el-radio-group v-model="formData.relationship" placeholder="请选择关系度">
<el-radio v-for="(item, index) in dictData.relationship" :key="index"
<el-radio v-for="( item, index ) in dictData.relationship " :key="index"
:label="parseInt(item.value)">
{{ item.name }}
</el-radio>
@ -141,7 +142,7 @@
<el-col :span="12">
<el-form-item label="项目建设资金来源" prop="construction_funds_sources">
<el-radio-group v-model="formData.construction_funds_sources" placeholder="请选择项目建设资金来源">
<el-radio v-for="(item, index) in dictData.construction_funds_sources" :key="index"
<el-radio v-for="( item, index ) in dictData.construction_funds_sources " :key="index"
:label="parseInt(item.value)">
{{ item.name }}
</el-radio>
@ -152,8 +153,8 @@
<el-col :span="12">
<el-form-item label="建设方财务状况" prop="construction_financial_status">
<el-radio-group v-model="formData.construction_financial_status" placeholder="请选择建设方财务状况">
<el-radio v-for="(item, index) in dictData.construction_financial_status" :key="index"
:label="parseInt(item.value)">
<el-radio v-for="( item, index ) in dictData.construction_financial_status "
:key="index" :label="parseInt(item.value)">
{{ item.name }}
</el-radio>
</el-radio-group>
@ -162,7 +163,7 @@
<el-col :span="12">
<el-form-item label="建设方对我方认可度" prop="construction_recognition">
<el-radio-group v-model="formData.construction_recognition" placeholder="请选择建设方对我方认可度">
<el-radio v-for="(item, index) in dictData.construction_recognition" :key="index"
<el-radio v-for="( item, index ) in dictData.construction_recognition " :key="index"
:label="parseInt(item.value)">
{{ item.name }}
</el-radio>
@ -172,7 +173,7 @@
<el-col :span="12">
<el-form-item label="我方对建设方认可度" prop="my_construction_recognition">
<el-radio-group v-model="formData.my_construction_recognition" placeholder="请选择我方对建设方认可度">
<el-radio v-for="(item, index) in dictData.my_construction_recognition" :key="index"
<el-radio v-for="( item, index ) in dictData.my_construction_recognition " :key="index"
:label="parseInt(item.value)">
{{ item.name }}
</el-radio>
@ -182,7 +183,7 @@
<el-col :span="12">
<el-form-item label="战略意义" prop="strategic_significance">
<el-radio-group v-model="formData.strategic_significance" placeholder="请选择战略意义">
<el-radio v-for="(item, index) in dictData.strategic_significance" :key="index"
<el-radio v-for="( item, index ) in dictData.strategic_significance " :key="index"
:label="parseInt(item.value)">
{{ item.name }}
</el-radio>
@ -192,7 +193,7 @@
<el-col :span="12">
<el-form-item label="所属行业" prop="industry">
<el-radio-group v-model="formData.industry" placeholder="请选择所属行业">
<el-radio v-for="(item, index) in dictData.industry" :key="index"
<el-radio v-for="( item, index ) in dictData.industry " :key="index"
:label="parseInt(item.value)">
{{ item.name }}
</el-radio>
@ -202,7 +203,7 @@
<el-col :span="12">
<el-form-item label="单位性质" prop="unit_nature">
<el-radio-group v-model="formData.unit_nature" placeholder="请选择单位性质">
<el-radio v-for="(item, index) in dictData.unit_nature" :key="index"
<el-radio v-for="( item, index ) in dictData.unit_nature " :key="index"
:label="parseInt(item.value)">
{{ item.name }}
</el-radio>

View File

@ -0,0 +1,32 @@
const detailConfig = {
title: "项目预警设置",
config: [
{
label: "项目名称",
value: "project_name"
},
{
label: "项目编码",
value: "project_code"
},
{
label: "材料预算花费比例",
value: "material_budget_expenditure_ratio"
},
{
label: "人工预算花费比例",
value: "labour_budget_expenditure_ratio"
},
{
label: "费用预算花费比例",
value: "cost_budget_expenditure_ratio"
},
{
label: "分包预算花费比例",
value: "subcontract_budget_expenditure_ratio"
},
]
}
export default detailConfig;

View File

@ -1,137 +0,0 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="项目合同详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="项目">
{{ formData.project_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编码">
{{ formData.project_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="材料预算花费比例">
{{ formData.material_budget_expenditure_ratio }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="人工预算花费比例">
{{ formData.labour_budget_expenditure_ratio }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="费用预算花费比例">
{{ formData.cost_budget_expenditure_ratio }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="分包预算花费比例">
{{ formData.subcontract_budget_expenditure_ratio }}
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
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>>()
const datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
});
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiCustomDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style lang="scss" scoped>
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>

View File

@ -34,8 +34,7 @@
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="材料预算花费比例()" prop="material_budget_expenditure_ratio"
show-overflow-tooltip />
<el-table-column label="材料预算花费比例()" prop="material_budget_expenditure_ratio" show-overflow-tooltip />
<el-table-column label="人工预算花费比例()" prop="labour_budget_expenditure_ratio" show-overflow-tooltip />
@ -52,7 +51,7 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
<el-button v-perms="['project.project/detail']" link @click="handleDetail(row.id)">
详情
</el-button>
@ -65,7 +64,8 @@
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
<detailPage v-if="showDetail" ref="detailRef" @close="showDetail = false" :detailConfig="detailConfig" :column="1"
width="550px" />
</div>
</template>
@ -78,13 +78,13 @@ import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
import detailConfig from './detail'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailRef = ref('')
//
const showEdit = ref(false)
const showDtail = ref(false)
const showDetail = ref(false)
//
const queryParams = reactive({
name: ''
@ -133,14 +133,14 @@ const handleDelete = async (id: number | any[]) => {
await apiProjectalarmDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await apiProjectalarmDetail({ id: data.id })
showDtail.value = true
//
const handleDetail = async (id: any) => {
let res = await apiProjectalarmDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -0,0 +1,34 @@
const detailConfig = {
title: "项目费用模板",
config: [
{
label: "项目类型",
value: "project_type_name"
},
{
label: "科目编码",
value: "subject_code"
},
{
label: "一级科目",
value: "first_level_subject"
},
{
label: "二级科目",
value: "second_level_subject"
},
{
label: "三级科目",
value: "third_level_subject"
},
{
label: "单位",
value: "unit"
}, {
label: "是否属于差旅科目",
value: "is_travel_text"
},
]
}
export default detailConfig;

View File

@ -1,141 +0,0 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="项目费用模板详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="项目类型">
{{ formData.project_type_name
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="科目编码">
{{ formData.subject_code
}}
</el-form-item>
</el-col> <el-col :span="12">
<el-form-item label="一级科目">
{{ formData.first_level_subject }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="二级科目">
{{ formData.second_level_subject }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="三级科目">
{{ formData.third_level_subject }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位">
{{ formData.unit
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否属于差旅科目">
{{ formData.is_travel == 1 ? '是' : '否' }}
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
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>>()
const datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
});
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiCustomDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style lang="scss" scoped>
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>

View File

@ -6,7 +6,7 @@
<el-col :span="8">
<el-form-item label="项目类型" prop="project_type_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'cahange' }]">
<el-select class="w-[280px]" v-model="formData.project_type_id" clearable placeholder="请选择项目类型">
<el-select class="flex-1" v-model="formData.project_type_id" clearable placeholder="请选择项目类型">
<el-option v-for="(item, index) in list" :key="index" :label="item.name"
:value="(item.id)" />
</el-select>
@ -36,7 +36,7 @@
<el-col :span="8">
<el-form-item label="差旅科目" prop="is_travel">
<el-select class="w-[280px]" v-model="formData.is_travel" clearable placeholder="请选择的是否属于差旅科目">
<el-select class="flex-1" v-model="formData.is_travel" clearable placeholder="请选择的是否属于差旅科目">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name"
:value="parseInt(item.id)" />

View File

@ -12,7 +12,8 @@
<el-input class="w-[280px]" v-model="queryParams.first_level_subject" clearable placeholder="请输入一级科目" />
</el-form-item>
<el-form-item label="二级科目" prop="second_level_subject">
<el-input class="w-[280px]" v-model="queryParams.second_level_subject" clearable placeholder="请输入二级科目" />
<el-input class="w-[280px]" v-model="queryParams.second_level_subject" clearable
placeholder="请输入二级科目" />
</el-form-item>
<el-form-item label="三级科目" prop="third_level_subject">
<el-input class="w-[280px]" v-model="queryParams.third_level_subject" clearable placeholder="请输入二级科目" />
@ -23,7 +24,8 @@
<el-form-item label="差旅科目" prop="unit">
<el-select class="w-[280px]" v-model="queryParams.is_travel" clearable placeholder="请选择的是否属于差旅科目">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="parseInt(item.id)" />
<el-option v-for="(item, index) in list1" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item>
@ -39,7 +41,8 @@
</template>
新增
</el-button>
<el-button v-perms="['project.project/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
<el-button v-perms="['project.project/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
@ -64,10 +67,11 @@
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project/delete']" type="danger" link @click="handleDelete(row.id)">
<el-button v-perms="['project.project/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
<el-button v-perms="['project.project/detail']" link @click="handleDetail(row.id)">
详情
</el-button>
@ -80,7 +84,8 @@
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
<detailPage v-if="showDetail" ref="detailRef" @close="showDetail = false" :detailConfig="detailConfig" :column="1"
width="550px" />
</div>
</template>
@ -93,12 +98,14 @@ import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
import detailConfig from './detail'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailRef = ref('')
//
const showEdit = ref(false)
const showDtail = ref(false)
const showDetail = ref(false)
const list1 = ref([{
name: '是',
id: 1
@ -160,9 +167,10 @@ const handleDelete = async (id: number | any[]) => {
await apiProjectcostDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await apiProjectcostDetail({ id: data.id })
showDtail.value = true
//
const handleDetail = async (id: any) => {
let res = await apiProjectcostDetail({ id })
showDetail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)

View File

@ -0,0 +1,34 @@
const detailConfig = {
title: "项目文档设置",
config: [
{
label: "项目类型",
value: "project_type_name"
},
{
label: "文档大类",
value: "large_category"
},
{
label: "文档中类",
value: "middle_category"
},
{
label: "文档小类",
value: "small_category"
},
{
label: "文档名称",
value: "name"
},
{
label: "文档描述",
value: "describe"
}, {
label: "必传",
value: "is_upload_text"
},
]
}
export default detailConfig;

View File

@ -1,143 +0,0 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="项目文档设置详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="项目类型">
{{ formData.project_type_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文档大类">
{{ formData.large_category }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文档中类">
{{ formData.middle_category
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文档小类">
{{ formData.small_category
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="文档名称">
{{ formData.name }}
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="文档描述">
{{ formData.describe }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="必传">
{{ formData.is_upload == 1 ? '是' : '否' }}
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
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>>()
const datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
});
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiCustomDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style lang="scss" scoped>
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>

View File

@ -6,7 +6,7 @@
<el-col :span="8">
<el-form-item label="项目类型" prop="project_type_id" @click="showDialog = true"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-select class="w-[280px]" v-model="formData.project_type_id" clearable placeholder="请选择项目类型">
<el-select class=" flex-1" v-model="formData.project_type_id" clearable placeholder="请选择项目类型">
<el-option v-for="(item, index) in list" :key="index" :label="item.name"
:value="parseInt(item.id)" />
</el-select>
@ -14,8 +14,9 @@
<el-col :span="8">
<el-form-item label="文档大类" prop="large_category"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.large_category" clearable placeholder="请选择文档大类" />
</el-form-item> </el-col>
<el-input v-model="formData.large_category" clearable placeholder="请输入文档大类" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="文档中类" prop="middle_category"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
@ -84,7 +85,7 @@ const project_name = ref('')
const project_code = ref('')
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目WBS设置' : '新增项目WBS设置'
return mode.value == 'edit' ? '编辑项目文档设置' : '新增项目文档设置'
})
//

Some files were not shown because too many files have changed in this diff Show More