This commit is contained in:
zmj 2024-03-22 11:58:48 +08:00
parent d792a9665e
commit c415828eb4
24 changed files with 1623 additions and 2306 deletions

View File

@ -1,7 +1,7 @@
{ {
"editor.formatOnSave": true, "editor.formatOnSave": true,
"[vue]": { "[vue]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint" "editor.defaultFormatter": "Vue.volar"
}, },
"editor.defaultFormatter": "esbenp.prettier-vscode", "editor.defaultFormatter": "esbenp.prettier-vscode",
"[javascript]": { "[javascript]": {

View File

@ -1,424 +1,505 @@
interface Iconfig{ interface Iconfig {
/** 请求列表的接口*/ /** 请求列表的接口*/
fetchFn:Function, fetchFn: Function;
/**用户可搜索的内容select为下拉列表,select为数组时为自定义option,w为string时表示获取字典里的值 */ /**用户可搜索的内容select为下拉列表,select为数组时为自定义option,w为string时表示获取字典里的值 */
serchList:Array<{label:String,value:String,select?:Array<{name:string,value:string|Number}>|String }>, serchList: Array<{
label: String;
value: String;
select?: Array<{ name: string; value: string | Number }> | String;
}>;
/**需要的字典数据隔开的string */ /**需要的字典数据隔开的string */
dictData?:String, dictData?: String;
/**table配置 */ /**table配置 */
tableList:Array<Object>, tableList: Array<Object>;
} }
import { apiSupervisionProjectLists } from '@/api/supervision_project' import { apiSupervisionProjectLists } from "@/api/supervision_project";
import { apiSupervisionParticipatingUnitsLists, } from '@/api/supervision_participating_units' import { apiSupervisionParticipatingUnitsLists } from "@/api/supervision_participating_units";
import { apiSupervisionCheckItemLists } from '@/api/supervision_check_item' import { apiSupervisionCheckItemLists } from "@/api/supervision_check_item";
import { apiManageProjectLists} from '@/api/manage_project' import { apiManageProjectLists } from "@/api/manage_project";
import { apiSupervisionDangerousEngineeringMonitoringLists, } from '@/api/supervision_dangerous_engineering_monitoring' import { apiSupervisionDangerousEngineeringMonitoringLists } from "@/api/supervision_dangerous_engineering_monitoring";
import { apiSupervisionMaterialEntryLists } from '@/api/supervision_material_entry' import { apiSupervisionMaterialEntryLists } from "@/api/supervision_material_entry";
import { apiSupervisionParticipatingUnitsQualificationsLists } from '@/api/supervision_participating_units_qualifications' import { apiSupervisionParticipatingUnitsQualificationsLists } from "@/api/supervision_participating_units_qualifications";
import { apiCostApprovedProjectLists } from '@/api/cost_approved_project' import { apiCostApprovedProjectLists } from "@/api/cost_approved_project";
import { apiCostProjectLists } from '@/api/cost_project' import { apiCostProjectLists } from "@/api/cost_project";
import { apiTaskTypeLists } from '@/api/task_type' import { apiTaskTypeLists } from "@/api/task_type";
import {apiSupervisionMaterialEquipmentInfoLists}from "@/api/supervision_material_equipment_info" import { apiSupervisionMaterialEquipmentInfoLists } from "@/api/supervision_material_equipment_info";
import { apiConsultProjectLists} from '@/api/consult_project' import { apiConsultProjectLists } from "@/api/consult_project";
import { apiZjzxInvoiceLists } from '@/api/zjzx_invoice' 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 = { export const supervision_check_item: Iconfig = {
fetchFn: apiSupervisionProjectLists, fetchFn: apiSupervisionCheckItemLists,
serchList: [ dictData: "check_item_node_type",
{ serchList: [
label: '项目名称', {
value: "project_name" label: "节点名称",
}, value: "node_name",
{ },
label: '项目编号', {
value: "project_code" label: "节点类型",
}, value: "node_type",
], select: "check_item_node_type",
tableList: [ },
{ project_name: "项目名称" }, ],
{ project_code: "项目编号" }, tableList: [
{ industry_text: "性质" }, { project_name: "项目名称" },
{ build_unit: "建设单位" }, { node_name: "节点名称" },
{ build_area_text: "建设区域" }, { node_type_text: "节点类型" },
{ address: "项目地址" }, { node_code: "节点编号" },
{ 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 = { export const manage_project: Iconfig = {
fetchFn: apiSupervisionParticipatingUnitsLists, fetchFn: apiManageProjectLists,
serchList: [ dictData: "cost_consultation_industry_nature,industry,engineering_status",
{ serchList: [
label: '单位名称', {
value: "unit_name" label: "项目名称",
}, value: "project_name",
{ },
label: '资质等级', {
value: "qualification_grade" label: "项目编号",
}, value: "project_code",
], },
tableList: [ {
{ unit_name: "单位名称" }, label: "性质",
{ unit_type_text: "单位类别" }, value: "nature",
{ qualification_grade: "资质等级" }, select: "cost_consultation_industry_nature",
{ telephone: "联系电话" }, },
{ duty: "责任范围" }, {
] 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 = { export const supervision_dangerous_engineering_monitoring: Iconfig = {
fetchFn: apiSupervisionCheckItemLists, fetchFn: apiSupervisionDangerousEngineeringMonitoringLists,
dictData:'check_item_node_type', dictData: "partial_project",
serchList: [ serchList: [
{ {
label: '节点名称', label: "危大工程类型",
value: "node_name" value: "type",
}, },
{ {
label: '节点类型', label: "分部分项工程",
value: "node_type", value: "partial_project",
select:'check_item_node_type' select: "partial_project",
}, },
], {
tableList: [ label: "施工部位",
{ project_name: "项目名称" }, value: "position",
{ node_name: "节点名称" }, },
{ node_type_text: "节点类型" }, ],
{ node_code: "节点编号" }, tableList: [
] { project_name: "项目名称" },
} { type_text: "危大工程类型" },
{ partial_project_text: "分部分项工程" },
{ planned_construction_time: "计划施工时间" },
{ position: "施工部位" },
],
};
export const manage_project:Iconfig = { export const supervision_material_entry: Iconfig = {
fetchFn: apiManageProjectLists, fetchFn: apiSupervisionMaterialEntryLists,
dictData:'cost_consultation_industry_nature,industry,engineering_status', serchList: [
serchList: [ {
{ label: "进场主题",
label: '项目名称', value: "theme",
value: "project_name" },
}, {
{ label: "编号",
label: '项目编号', value: "code",
value: "project_code", },
}, ],
{ tableList: [
label:"性质", { project_name: "项目名称" },
value:'nature', { company_name: "采购单位" },
select:'cost_consultation_industry_nature' { theme: "进场主题" },
}, { code: "编号" },
{ { enter_time: "进场时间" },
label:"行业", { enter_result_text: "进场结果" },
value:'industry', { parallel_test_text: "是否平行检验" },
select:"industry" ],
}, };
{
label:"工程状态",
value:'engineering_status',
select:"engineering_status"
}
], export const supervision_material_equipment_info: Iconfig = {
tableList: [ fetchFn: apiSupervisionMaterialEquipmentInfoLists,
{ project_name: "项目名称" }, serchList: [
{ project_code: "项目编号" }, {
{ nature_text: "性质" }, label: "材料/设备名称",
{ industry_text: "行业" }, value: "name",
{ build_area_text: "建设区域" }, },
{ project_level_text: "项目级别" }, {
{ total_investment: "总投资" }, label: "材料/设备品牌",
{ engineering_status_text: "工程状态" }, value: "brand",
{ implementation_department: "实施部门" }, },
{ supervision_department: "监管部门" }, {
{ project_manager: "项目经理" }, 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 supervision_dangerous_engineering_monitoring:Iconfig = { export const supervision_participating_units_qualifications: Iconfig = {
fetchFn: apiSupervisionDangerousEngineeringMonitoringLists, fetchFn: apiSupervisionParticipatingUnitsQualificationsLists,
dictData:'partial_project', serchList: [
serchList: [ {
{ label: "资质名称",
label: '危大工程类型', value: "qualification_name",
value: "type" },
}, {
{ label: "资质编号",
label:"分部分项工程", value: "qualification_number",
value:'partial_project', },
select:"partial_project" ],
}, tableList: [
{ { project_name: "项目名称" },
label:"施工部位", { company_name: "所属单位" },
value:'position', { qualification_name: "资质名称" },
} { qualification_number: "资质编号" },
{ get_date: "发证日期" },
{ effective_date: "有效日期" },
{ qualification_status_text: "资质状态" },
{ remark: "备注" },
],
};
], export const cost_approved_projects: Iconfig = {
tableList: [ fetchFn: apiCostApprovedProjectLists,
{ project_name: "项目名称" }, serchList: [
{ type_text: "危大工程类型" }, {
{ partial_project_text: "分部分项工程" }, label: "合同名称",
{ planned_construction_time: "计划施工时间" }, value: "contract_name",
{ position: "施工部位" }, },
] {
} 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_material_entry:Iconfig = { export const cost_project: Iconfig = {
fetchFn: apiSupervisionMaterialEntryLists, fetchFn: apiCostProjectLists,
serchList: [ serchList: [
{ {
label: '进场主题', label: "项目编号",
value: "theme" value: "project_num",
}, },
{ {
label:"编号", label: "项目名称",
value:'code', value: "project_name",
}, },
], ],
tableList: [ tableList: [
{ project_name: "项目名称" }, { project_name: "项目名称" },
{ company_name: "采购单位" }, { address: "具体地址" },
{ theme: "进场主题" }, { starting: "计划开始日期" },
{ code: "编号" }, { endtime: "计划结束日期" },
{ enter_time: "进场时间" }, { jhgq: "计划工期(天)" },
{ enter_result_text: "进场结果" }, { person_text: "项目相关人员" },
{ parallel_test_text: "是否平行检验" }, { invest: "项目总投资(元)" },
] { budget: "预算造价(元)" },
} { cost: "送审造价(元)" },
{ approval: "审定造价(元)" },
{ aunit: "委托单位" },
{ acontactnum: "联系电话" },
{ date: "登记日期" },
{ generalize: "项目规模及概括" },
{ note: "注意事项" },
{ remark: "备注" },
],
};
export const supervision_material_equipment_info:Iconfig = { export const task_type: Iconfig = {
fetchFn: apiSupervisionMaterialEquipmentInfoLists, fetchFn: apiTaskTypeLists,
serchList: [ dictData: "superior_category",
{ serchList: [
label: '材料/设备名称', {
value: "name" label: "任务名称",
}, value: "unit_name",
{ },
label:"材料/设备品牌", {
value:'brand', label: "上级类别",
}, value: "superior_sort",
{ select: "superior_category",
label:"合同约定品牌", },
value:'contract_brand', ],
select:[ tableList: [
{ { dataid: "标识" },
name:"否", { num: "任务编号" },
value:0 { name: "任务名称" },
}, { level: "任务级次" },
{ { remarks: "备注" },
name:"是", ],
value:1 };
},
] export const consult_project: Iconfig = {
}, fetchFn: apiConsultProjectLists,
{ dictData: "",
label:"类型", serchList: [
value:'type', {
select:[ label: "项目名称",
{ value: "project_name",
name:"材料", },
value:0 {
}, label: "项目编号",
{ value: "project_code",
name:"设备", },
value:1 ],
}, tableList: [
{ project_name: "项目名称" },
] { project_code: "项目编号" },
}, { company: "委托单位" },
], { total_investment: "总投资" },
tableList: [ { contract: "关联合同" },
{ project_name: "项目名称" }, { engineering_status_text: "工程状态" },
{ name: "材料/设备名称" }, { consult_type_text: "咨询类型" },
{ brand: "材料/设备品牌" }, { supervision_department: "监管部门" },
{ model: "型号" }, { implementation_department: "实施部门" },
{ unit: "计数单位" }, { project_manager: "项目负责人员" },
{ number: "计划数量" }, ],
{ contract_brand_text: "合同约定品牌" }, };
{ type_text: "类型" },
{ remark: "备注" },
]
}
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_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 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 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 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 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 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 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 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: "数量" },
],
};

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> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-card> <el-card>
<template #header> <template #header>
@ -38,8 +37,8 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="开票日期" prop="invoicing_date" <el-form-item label="开票日期" prop="invoicing_date"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]"> :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.invoicing_date" clearable <el-date-picker class="flex-1 !flex" v-model="formData.invoicing_date" clearable type="date"
type="date" value-format="YYYY-MM-DD" placeholder="选择开票日期"> value-format="YYYY-MM-DD" placeholder="选择开票日期">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -53,8 +52,8 @@
<el-form-item label="期次" prop="period" <el-form-item label="期次" prop="period"
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]"> :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-select class="flex-1" v-model="formData.period" clearable placeholder="请选择期次"> <el-select class="flex-1" v-model="formData.period" clearable placeholder="请选择期次">
<el-option v-for="(item, index) in dictData.pay_period" :key="index" <el-option v-for="(item, index) in dictData.pay_period" :key="index" :label="item.name"
:label="item.name" :value="parseInt(item.value)" /> :value="parseInt(item.value)" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -62,15 +61,14 @@
<el-form-item label="税率" prop="tax_rate"> <el-form-item label="税率" prop="tax_rate">
<el-select class="flex-1" v-model="formData.tax_rate" clearable placeholder="请选择税率"> <el-select class="flex-1" v-model="formData.tax_rate" clearable placeholder="请选择税率">
<el-option v-for="(item, index) in dictData.tax_rate" :key="index" <el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name"
:label="item.name" :value="parseInt(item.value)" /> :value="parseInt(item.value)" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="发票类型" prop="contacts"> <el-form-item label="发票类型" prop="contacts">
<el-select class="flex-1" v-model="formData.invoice_type" clearable <el-select class="flex-1" v-model="formData.invoice_type" clearable placeholder="请选择发票类型">
placeholder="请选择发票类型">
<el-option v-for="(item, index) in dictData.invoice_type" :key="index" <el-option v-for="(item, index) in dictData.invoice_type" :key="index"
:label="item.name" :value="parseInt(item.value)" /> :label="item.name" :value="parseInt(item.value)" />
</el-select> </el-select>
@ -105,26 +103,7 @@
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附件"> <el-form-item label="附件">
<el-upload <uploadAnnex :formData="formData" />
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>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -192,14 +171,13 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="联系电话" prop="phone" <el-form-item label="联系电话" prop="phone" :rules="[{ validator: checkPhone, trigger: 'blur' }]">
:rules="[{ validator: checkPhone, trigger: 'blur' }]">
<el-input v-model="formData.phone" clearable placeholder="请输入联系电话" /> <el-input v-model="formData.phone" clearable placeholder="请输入联系电话" />
</el-form-item> </el-form-item>
</el-col> <el-col :span="8"> </el-col> <el-col :span="8">
<el-form-item label="邮寄时间" prop="mailing_time"> <el-form-item label="邮寄时间" prop="mailing_time">
<el-date-picker class="flex-1 !flex" v-model="formData.mailing_time" clearable <el-date-picker class="flex-1 !flex" v-model="formData.mailing_time" clearable type="date"
type="date" value-format="YYYY-MM-DD" placeholder="选择邮寄时间"> value-format="YYYY-MM-DD" placeholder="选择邮寄时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -254,21 +232,9 @@ const custom_name = ref('')
const next = () => { const next = () => {
if (active.value++ > 3) active.value = 0 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) => { 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({ let props = defineProps({
project: Object project: Object
@ -328,7 +289,7 @@ const customEvent1 = (e: any) => {
}; };
// //
const popupTitle = computed(() => { 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>) => { 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) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore

View File

@ -53,7 +53,7 @@
<el-table-column label="开票金额(含税)" prop="invoicing_amount" 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="amount_including_tax" show-overflow-tooltip />
<el-table-column label="税率(%)" prop="tax_rate" show-overflow-tooltip /> <el-table-column label="税率(%)" prop="tax_rate" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right"> <el-table-column label="操作" width="160" fixed="right" align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['InvoicingRequests.InvoicingRequests/edit']" type="primary" link <el-button v-perms="['InvoicingRequests.InvoicingRequests/edit']" type="primary" link
@click="handleEdit(row)"> @click="handleEdit(row)">
@ -64,7 +64,7 @@
删除 删除
</el-button> </el-button>
<el-button v-perms="['InvoicingRequests.InvoicingRequests/detail']" link <el-button v-perms="['InvoicingRequests.InvoicingRequests/detail']" link
@click="handledetail(row)"> @click="handleDetail(row.id)">
详情 详情
</el-button> </el-button>
</template> </template>
@ -76,7 +76,7 @@
</div> </div>
</el-card> </el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> <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> </div>
</template> </template>
@ -87,22 +87,17 @@ import { apiinvoiceapplyLists, apiinvoiceapplyDelete, apiinvoiceapplyDetail } fr
import { apiContractSearch } from '@/api/contract' import { apiContractSearch } from '@/api/contract'
import { apiProjectSearch } from '@/api/project' import { apiProjectSearch } from '@/api/project'
import { apiCustomSearch } from '@/api/custom' import { apiCustomSearch } from '@/api/custom'
const protype = reactive([])
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import EditPopup from './edit.vue' import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
import { useRoute } from "vue-router"; 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 editRef = shallowRef<InstanceType<typeof EditPopup>>()
const detailRef = ref('')
// //
const showEdit = ref(false) const showEdit = ref(false)
const showDetail = ref(false)
const showDtail = ref(false) const route = useRoute()
const list = ref([])
const list1 = ref([])
// //
const queryParams = reactive({ const queryParams = reactive({
@ -152,10 +147,10 @@ const handleDelete = async (id: number | any[]) => {
await apiinvoiceapplyDelete({ id }) await apiinvoiceapplyDelete({ id })
getLists() getLists()
} }
// //
const handledetail = async (data: any) => { const handleDetail = async (id: any) => {
let res = await apiinvoiceapplyDetail({ id: data.id }) let res = await apiinvoiceapplyDetail({ id })
showDtail.value = true showDetail.value = true
await nextTick() await nextTick()
detailRef.value?.open() detailRef.value?.open()
detailRef.value?.setFormData(res) detailRef.value?.setFormData(res)

View File

@ -1,8 +1,7 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="8"> <el-col :span="8">
@ -70,8 +69,8 @@
<el-form-item label="付款性质" prop="payment_nature" <el-form-item label="付款性质" prop="payment_nature"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"> :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.payment_nature" clearable placeholder="请选择付款性质"> <el-select class="flex-1" v-model="formData.payment_nature" clearable placeholder="请选择付款性质">
<el-option v-for="(item, index) in dictData.payment_natrue" :key="index" <el-option v-for="(item, index) in dictData.payment_natrue" :key="index" :label="item.name"
:label="item.name" :value="parseInt(item.value)" /> :value="parseInt(item.value)" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -94,16 +93,15 @@
<el-form-item label="开票状态" prop="invoice_status" <el-form-item label="开票状态" prop="invoice_status"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"> :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.invoice_status" clearable placeholder="请选择开票状态"> <el-select class="flex-1" v-model="formData.invoice_status" clearable placeholder="请选择开票状态">
<el-option v-for="(item, index) in dictData.invoice_status" :key="index" <el-option v-for="(item, index) in dictData.invoice_status" :key="index" :label="item.name"
:label="item.name" :value="parseInt(item.value)" /> :value="parseInt(item.value)" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="本次申请金额" prop="amount" <el-form-item label="本次申请金额" prop="amount"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"> :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.amount" @input="amountinput" clearable <el-input v-model="formData.amount" @input="amountinput" clearable placeholder="请输入本次申请金额" />
placeholder="请输入本次申请金额" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -125,22 +123,7 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附件"> <el-form-item label="附件">
<el-upload <uploadAnnex :formData="formData"></uploadAnnex>
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>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -173,8 +156,8 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="账户编码" prop="bank_account_info" <el-form-item label="账户编码" prop="bank_account_info"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"> :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.bank_account_info.account_sn" @click="showDialog4 = true" <el-input v-model="formData.bank_account_info.account_sn" @click="showDialog4 = true" readonly
readonly clearable placeholder="请输入收款账号" /> clearable placeholder="请输入收款账号" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -241,14 +224,23 @@
import customDialog from '@/components/custom-dialog/index.vue' import customDialog from '@/components/custom-dialog/index.vue'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
// import procurementDialog from '@/components/procurement/index.vue'
import suppliertable from '@/components/supplier/index.vue'
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from '@/hooks/useDictOptions'
import suppliertable from '@/components/supplier/index.vue'
import subcontractingDialog from '@/components/procurementsubcontracting_selector/index.vue' import subcontractingDialog from '@/components/procurementsubcontracting_selector/index.vue'
import subcontracting from '@/components/procurementsubcontracting_selector/subcontracting.vue' import subcontracting from '@/components/procurementsubcontracting_selector/subcontracting.vue'
import paylistDialog from '@/components/paylist/index.vue' import paylistDialog from '@/components/paylist/index.vue'
const active = ref(0)
import bankaccountDialog from '@/components/bankaccount/index.vue' import bankaccountDialog from '@/components/bankaccount/index.vue'
import { paymentapplyAdd, paymentapplyEdit, paymentapplyDetail } from '@/api/paymentrequest' import { paymentapplyAdd, paymentapplyEdit, paymentapplyDetail } from '@/api/paymentrequest'
import { toChinesNum } from "@/utils/util"; import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype' import { getAllProjectTypes } from '@/api/projecttype'
@ -258,7 +250,6 @@ import type { PropType } from 'vue'
import configs from "@/config" import configs from "@/config"
import useUserStore from "@/stores/modules/user"; import useUserStore from "@/stores/modules/user";
const protype = reactive([]) const protype = reactive([])
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore(); const userStore = useUserStore();
const formDataannex = reactive([]) const formDataannex = reactive([])
const contract_name = ref('') const contract_name = ref('')
@ -270,26 +261,7 @@ const project_amount = ref('')
const contract_no = ref('') const contract_no = ref('')
const custom_name = ref('') const custom_name = ref('')
const userInfo = userStore.userInfo 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({ let props = defineProps({
project: Object project: Object
}) })
@ -410,19 +382,6 @@ const formRules = reactive<any>({
// //
const setFormData = async (data: Record<any, 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) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
@ -451,9 +410,7 @@ const getDetail = async (row: Record<string, any>) => {
// //
const handleSubmit = async () => { const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData } const data = { ...formData }
mode.value == 'edit' mode.value == 'edit'

View File

@ -1,8 +1,7 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10"> <el-row :gutter="10">
@ -94,43 +93,27 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附件"> <el-form-item label="附件">
<el-upload <uploadAnnex :formData="formData"></uploadAnnex>
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>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-dialog v-model="showDialog" title="选择供应商" width="70%"> <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> </el-dialog>
<div v-if="formData.contract_cate == 1 && showDialog1"> <div v-if="formData.contract_cate == 1 && showDialog1">
<el-dialog v-model="showDialog1" title="选择采购合同" width="70%"> <el-dialog v-model="showDialog1" title="选择采购合同" width="70%">
<subcontractingDialog @customEvent="customEvent1" :supplier_id="formData.supplier_id"> <dialogTable :config="procurement_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
</subcontractingDialog> @customEvent="customEvent1" />
</el-dialog> </el-dialog>
</div> </div>
<div v-if="formData.contract_cate == 2 && showDialog1"> <div v-if="formData.contract_cate == 2 && showDialog1">
<el-dialog v-model="showDialog1" title="选择分包合同" width="70%"> <el-dialog v-model="showDialog1" title="选择分包合同" width="70%">
<subcontracting @customEvent="customEvent1" :supplier_id="formData.supplier_id"> <dialogTable :config="subcontracting_contract" :query="{ supplier_id: formData?.supplier_id || '' }"
</subcontracting> @customEvent="customEvent1" />
</el-dialog> </el-dialog>
</div> </div>
</el-form> </el-form>
@ -143,9 +126,7 @@
import customDialog from '@/components/custom-dialog/index.vue' import customDialog from '@/components/custom-dialog/index.vue'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import supplier from '@/components/supplier/index.vue' import { supplier_tab, procurement_contract, subcontracting_contract } from "@/components/dialogTable/dialogTableConfig"
import subcontractingDialog from '@/components/procurementsubcontracting_selector/index.vue'
import subcontracting from '@/components/procurementsubcontracting_selector/subcontracting.vue'
import { paymentplanAdd, paymentplanEdit, paymentplanDetail } from '@/api/paymentplan' import { paymentplanAdd, paymentplanEdit, paymentplanDetail } from '@/api/paymentplan'
import { toChinesNum } from "@/utils/util"; import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype' import { getAllProjectTypes } from '@/api/projecttype'
@ -169,26 +150,7 @@ const contract_no = ref('')
const supplier_name = ref('') const supplier_name = ref('')
const supplier_code = ref('') const supplier_code = ref('')
const userInfo = userStore.userInfo 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({ const props = defineProps({
project: Object project: Object
}) })
@ -268,18 +230,6 @@ const formRules = reactive<any>({
// //
const setFormData = async (data: Record<any, 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) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
@ -307,9 +257,6 @@ const getDetail = async (row: Record<string, any>) => {
// //
const handleSubmit = async () => { const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData } const data = { ...formData }
mode.value == 'edit' mode.value == 'edit'

View File

@ -34,8 +34,7 @@
</template> </template>
新增 新增
</el-button> </el-button>
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" <el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
@click="handleDelete(selectData)">
删除 删除
</el-button> </el-button>
@ -52,15 +51,12 @@
<el-table-column label="状态" prop="status_text" show-overflow-tooltip /> <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="has_payment_amount" show-overflow-tooltip />
<el-table-column label="未付款" prop="not_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"> <el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)"> <el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
编辑 编辑
</el-button> </el-button>
<el-button v-perms="['refund.refund/delete']" type="danger" link <el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
@click="handleDelete(row.id)">
删除 删除
</el-button> </el-button>
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)"> <el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">

View File

@ -1,8 +1,7 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10"> <el-row :gutter="10">
@ -84,8 +83,7 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="发票金额大写" prop="invoice_amount_daxie"> <el-form-item label="发票金额大写" prop="invoice_amount_daxie">
<el-input v-model="formData.invoice_amount_daxie" clearable disabled <el-input v-model="formData.invoice_amount_daxie" clearable disabled placeholder="请输入金额大写" />
placeholder="请输入金额大写" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -103,17 +101,14 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="税额" prop="tax" <el-form-item label="税额" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.tax" disabled clearable placeholder="请输入税额" /> <el-input v-model="formData.tax" disabled clearable placeholder="请输入税额" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="不含税金额" prop="amount_excluding_tax" <el-form-item label="不含税金额" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]"> <el-input v-model="formData.amount_excluding_tax" clearable disabled placeholder="请输入不含税金额" />
<el-input v-model="formData.amount_excluding_tax" clearable disabled
placeholder="请输入不含税金额" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -130,29 +125,9 @@
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" /> <el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附件"> <el-form-item label="附件">
<el-upload <uploadAnnex :formData="formData"></uploadAnnex>
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>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -197,7 +172,6 @@ import type { PropType } from 'vue'
import configs from "@/config" import configs from "@/config"
import useUserStore from "@/stores/modules/user"; import useUserStore from "@/stores/modules/user";
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('invoice_type,contract_type,tax_rate')
const protype = reactive([]) const protype = reactive([])
const base_url = configs.baseUrl + configs.urlPrefix const base_url = configs.baseUrl + configs.urlPrefix
@ -212,21 +186,7 @@ const contract_no = ref('')
const supplier_name = ref('') const supplier_name = ref('')
const supplier_code = ref('') const supplier_code = ref('')
const userInfo = userStore.userInfo 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) => { const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
if (value && !/^1\d{10}$/.test(value)) { 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({ const props = defineProps({
dictData: Object,
project: Object project: Object
}) })
if (props.project) { if (props.project) {
@ -280,14 +238,14 @@ const customEvent1 = (e: any) => {
//Name //Name
const getTaxValue = (value) => { const getTaxValue = (value) => {
let i = dictData.tax_rate.findIndex((item) => item.value == value) let i = props.dictData.tax_rate.findIndex((item) => item.value == value)
return (dictData.tax_rate[i]?.name / 100) || 0 return (props.dictData.tax_rate[i]?.name / 100) || 0
} }
// //
const amountinput = (e) => { const amountinput = (e) => {
formData.tax = formData.invoice_amount * getTaxValue(formData.invoice_tax_rate) formData.tax = (formData.invoice_amount * getTaxValue(formData.invoice_tax_rate)).toFixed(2)
formData.amount_excluding_tax = formData.invoice_amount - formData.tax formData.amount_excluding_tax = (formData.invoice_amount - formData.tax).toFixed(2)
formData.invoice_amount_daxie = toChinesNum(formData.invoice_amount) formData.invoice_amount_daxie = toChinesNum(formData.invoice_amount)
} }
@ -313,7 +271,7 @@ const formData = reactive({
amount_excluding_tax: "", amount_excluding_tax: "",
receipt_date: "", receipt_date: "",
remark: "", remark: "",
annex: "", annex: [],
contract_cate: 1, contract_cate: 1,
approve_detail: {} approve_detail: {}
}) })
@ -326,15 +284,6 @@ const formRules = reactive<any>({
// //
const setFormData = async (data: Record<any, 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) { if (data.invoice_amount_daxie) {
toChinesNum(data.invoice_amount_daxie) toChinesNum(data.invoice_amount_daxie)
} }
@ -364,16 +313,8 @@ const getDetail = async (row: Record<string, any>) => {
// //
const handleSubmit = async () => { const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
}
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData } const data = { ...formData }
mode.value == 'edit' mode.value == 'edit'
? await apifinancereceiptEdit(data) ? await apifinancereceiptEdit(data)
: await apifinancereceiptAdd(data) : await apifinancereceiptAdd(data)

View File

@ -28,8 +28,7 @@
</template> </template>
新增 新增
</el-button> </el-button>
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" <el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
@click="handleDelete(selectData)">
删除 删除
</el-button> </el-button>
@ -57,8 +56,7 @@
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)"> <el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
编辑 编辑
</el-button> </el-button>
<el-button v-perms="['refund.refund/delete']" type="danger" link <el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
@click="handleDelete(row.id)">
删除 删除
</el-button> </el-button>
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)"> <el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
@ -116,6 +114,7 @@ const handleSelectionChange = (val: any[]) => {
// //
const { dictData } = useDictData('invoice_type,contract_type,tax_rate') const { dictData } = useDictData('invoice_type,contract_type,tax_rate')
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apifinancereceiptLists, fetchFun: apifinancereceiptLists,

View File

@ -1,8 +1,7 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10"> <el-row :gutter="10">
@ -55,10 +54,9 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="收款性质" prop="contacts"> <el-form-item label="收款性质" prop="contacts">
<el-select class="flex-1" v-model="formData.collection_type" clearable <el-select class="flex-1" v-model="formData.collection_type" clearable placeholder="请选择收款性质">
placeholder="请选择收款性质"> <el-option v-for="(item, index) in dictData.collection_type" :key="index" :label="item.name"
<el-option v-for="(item, index) in dictData.collection_type" :key="index" :value="parseInt(item.value)" />
:label="item.name" :value="parseInt(item.value)" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -76,8 +74,8 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="开票状态" prop="contacts"> <el-form-item label="开票状态" prop="contacts">
<el-select class="flex-1" v-model="formData.invoice_status" clearable placeholder="请选择开票状态"> <el-select class="flex-1" v-model="formData.invoice_status" clearable placeholder="请选择开票状态">
<el-option v-for="(item, index) in dictData.invoice_status" :key="index" <el-option v-for="(item, index) in dictData.invoice_status" :key="index" :label="item.name"
:label="item.name" :value="parseInt(item.value)" /> :value="parseInt(item.value)" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -112,49 +110,32 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附件"> <el-form-item label="附件">
<el-upload <uploadAnnex :formData="formData"></uploadAnnex>
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>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<div style="margin: 20px 0;">付款银行信息</div> <div style="margin: 20px 0;">付款银行信息
</div>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="账户编码" @click="showDialog2 = true"> <el-form-item label="账户编码" @click="showDialog2 = true">
<el-input v-model="account_sn" readonly clearable placeholder="请选择收款账户" /> <el-input v-model="account_sn" readonly clearable placeholder="请选择收款账户" class="!flex flex-1" />
<toolTip content="可在财务管理--银行账户--银行账户添加"></toolTip>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="开户银行" prop="deposit_bank"> <el-form-item label="开户银行" prop="deposit_bank">
<el-input v-model="deposit_bank" clearable disabled placeholder="请输入开户银行" /> <el-input v-model="deposit_bank" clearable disabled placeholder="系统自动填写" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="账号" prop="account"> <el-form-item label="账号" prop="account">
<el-input v-model="account" clearable disabled placeholder="请输入开票公司名称" /> <el-input v-model="account" clearable disabled placeholder="系统自动填写" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -171,7 +152,6 @@
<pendingDialog @customEvent="customEvent3" :contract_id="formData.contract_id"></pendingDialog> <pendingDialog @customEvent="customEvent3" :contract_id="formData.contract_id"></pendingDialog>
</el-dialog> </el-dialog>
</div> </div>
</el-form> </el-form>
</popup> </popup>
@ -211,26 +191,6 @@ const account = ref('')
const deposit_bank = ref('') const deposit_bank = ref('')
//
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({ let props = defineProps({
project: Object project: Object
}) })
@ -315,19 +275,6 @@ const formRules = reactive<any>({
// //
const setFormData = async (data: Record<any, 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) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
@ -359,13 +306,7 @@ const getDetail = async (row: Record<string, any>) => {
// //
const handleSubmit = async () => { const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData } const data = { ...formData }
mode.value == 'edit' mode.value == 'edit'
? await apireturnedrecordEdit(data) ? await apireturnedrecordEdit(data)

View File

@ -44,7 +44,7 @@
<el-table-column label="付款方式" prop="pay_type" show-overflow-tooltip /> <el-table-column label="付款方式" prop="pay_type" show-overflow-tooltip />
<el-table-column label="收款性质" prop="collection_type" show-overflow-tooltip /> <el-table-column label="收款性质" prop="collection_type" show-overflow-tooltip />
<el-table-column label="收款人" prop="receiver" show-overflow-tooltip /> <el-table-column label="收款人" prop="receiver" show-overflow-tooltip />
<el-table-column label="操作" width="150" fixed="right"> <el-table-column label="操作" width="150" fixed="right" align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['recordsPayment.recordsPayment/edit']" type="primary" link <el-button v-perms="['recordsPayment.recordsPayment/edit']" type="primary" link
@ -55,8 +55,7 @@
@click="handleDelete(row.id)"> @click="handleDelete(row.id)">
删除 删除
</el-button> </el-button>
<el-button v-perms="['recordsPayment.recordsPayment/detail']" link <el-button v-perms="['recordsPayment.recordsPayment/detail']" link @click="handledetail(row)">
@click="handledetail(row)">
详情 详情
</el-button> </el-button>

View File

@ -1,15 +1,13 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合同名称" prop="contract_name"> <el-form-item label="合同名称" prop="contract_name">
<el-input v-model="contract_name" clearable placeholder="点击选择合同" <el-input v-model="contract_name" clearable placeholder="点击选择合同" @click="showDialog1 = true" />
@click="showDialog1 = true" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -81,26 +79,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附件"> <el-form-item label="附件">
<el-upload <uploadAnnex :formData="formData"></uploadAnnex>
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>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -123,12 +103,13 @@
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="账户编码" prop="collection_account"> <el-form-item label="账户编码" prop="collection_account">
<el-input v-model="formData.bank_account_info.account_sn" @click="showDialog = true" <el-input v-model="formData.bank_account_info.account_sn" @click="showDialog = true" readonly
readonly clearable placeholder="请输入收款账号" /> clearable placeholder="请输入收款账号" class="!flex flex-1" />
<toolTip content="可在财务管理--银行账户--银行账户添加"></toolTip>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="开户银行" prop="collection_bank"> <el-form-item label="开户银行" prop="collection_bank">
<el-input v-model="formData.bank_account_info.deposit_bank" clearable readonly <el-input v-model="formData.bank_account_info.deposit_bank" clearable readonly
@ -293,20 +274,6 @@ const formRules = reactive<any>({
// //
const setFormData = async (data: Record<any, 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) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
@ -319,7 +286,6 @@ const setFormData = async (data: Record<any, any>) => {
project_amount.value = data.contract_amount project_amount.value = data.contract_amount
contract_name.value = data.contract_name; contract_name.value = data.contract_name;
contract_no.value = data.contract_code contract_no.value = data.contract_code
bank_account_no.value = data.bank_account_info.account; bank_account_no.value = data.bank_account_info.account;
} }
@ -333,9 +299,6 @@ const getDetail = async (row: Record<string, any>) => {
// //
const handleSubmit = async () => { const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex
}
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData } const data = { ...formData }
mode.value == 'edit' mode.value == 'edit'

View File

@ -28,8 +28,7 @@
</template> </template>
新增 新增
</el-button> </el-button>
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" <el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
@click="handleDelete(selectData)">
删除 删除
</el-button> </el-button>
@ -46,15 +45,13 @@
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip /> <el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip /> <el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip />
<el-table-column label="退款人" prop="refund_user" show-overflow-tooltip /> <el-table-column label="退款人" prop="refund_user" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip /> <el-table-column label="操作" width="150" fixed="right" align="center">
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)"> <el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
编辑 编辑
</el-button> </el-button>
<el-button v-perms="['refund.refund/delete']" type="danger" link <el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
@click="handleDelete(row.id)">
删除 删除
</el-button> </el-button>
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)"> <el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">

View File

@ -1,8 +1,7 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10"> <el-row :gutter="10">
@ -70,37 +69,13 @@
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" /> <el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<!-- <el-form-item label="附件" prop="annex">
<el-input v-model="formData.annex" clearable placeholder="请输入附件" />
</el-form-item> -->
<el-form-item label="附件"> <el-form-item label="附件">
<el-upload <uploadAnnex :formData="formData"></uploadAnnex>
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>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-dialog v-model="showDialog1" title="选择合同" width="70%"> <el-dialog v-model="showDialog1" title="选择合同" width="70%">
<contractDialog @customEvent="customEvent1"></contractDialog> <contractDialog @customEvent="customEvent1"></contractDialog>
</el-dialog> </el-dialog>
@ -116,7 +91,7 @@ import customDialog from '@/components/custom-dialog/index.vue'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import salescontractDialog from '@/components/salescontract/index.vue' import salescontractDialog from '@/components/salescontract/index.vue'
//使 // 使 ???
import contractDialog from '@/components/contract/index.vue' import contractDialog from '@/components/contract/index.vue'
import personnelselector from '@/components/personnelselector/index.vue' import personnelselector from '@/components/personnelselector/index.vue'
import { apireturnedAdd, apireturnedEdit, apireturnedDetail } from '@/api/remittance' import { apireturnedAdd, apireturnedEdit, apireturnedDetail } from '@/api/remittance'
@ -139,32 +114,6 @@ const contract_no = ref('')
const custom_name = ref('') const custom_name = ref('')
const return_name = ref('') const return_name = ref('')
//
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)
}
// defineProps({
// dictData: {
// type: Object as PropType<Record<string, any[]>>,
// default: () => ({})
// }
// })
const { dictData } = useDictData('return_status,pay_period,contract_type') const { dictData } = useDictData('return_status,pay_period,contract_type')
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
@ -215,18 +164,6 @@ const formRules = reactive<any>({
// //
const setFormData = async (data: Record<any, 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) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {

View File

@ -1,34 +1,50 @@
<template> <template>
<div> <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 class="mb-[-16px]" :model="queryParams" label-width="80px">
<el-form-item label="关联合同" prop="contract_id"> <el-row>
<selectRemote :formData="queryParams" model="contract_id" :api="apiContractSearch" /> <el-col :span="6">
</el-form-item> <el-form-item label="关联合同" prop="contract_id">
<el-form-item label="所属项目" prop="project_id"> <selectRemote :formData="queryParams" model="contract_id" :api="apiContractSearch" />
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="客户名称" prop="custom_id"> <el-col :span="6">
<selectRemote :formData="queryParams" model="custom_id" :api="apiCustomSearch" /> <el-form-item label="所属项目" prop="project_id">
</el-form-item> <selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
<el-form-item label="期次" prop="project_name"> </el-form-item>
<el-select class="flex-1" v-model="queryParams.period" clearable placeholder="请选择期次"> </el-col>
<el-option v-for="(item, index) in dictData.pay_period" :key="index" :label="item.name" <el-col :span="6">
:value="parseInt(item.value)" /> <el-form-item label="客户名称" prop="custom_id">
</el-select> <selectRemote :formData="queryParams" model="custom_id" :api="apiCustomSearch" />
</el-form-item> </el-form-item>
<el-form-item label="回款状态" prop="return_status"> </el-col>
<el-select class="flex-1" v-model="queryParams.return_status" clearable placeholder="请选择回款状态"> <el-col :span="6">
<el-option v-for="(item, index) in dictData.return_status" :key="index" :label="item.name" <el-form-item label="期次" prop="project_name">
:value="parseInt(item.value)" /> <el-select class="flex-1" v-model="queryParams.period" clearable placeholder="请选择期次">
</el-select> <el-option v-for="(item, index) in dictData.pay_period" :key="index" :label="item.name"
</el-form-item> :value="parseInt(item.value)" />
<el-form-item> </el-select>
<el-button type="primary" @click="resetPage">查询</el-button> </el-form-item>
<el-button @click="resetParams">重置</el-button> </el-col>
<export-data class="ml-2.5" :fetch-fun="apireturnedLists" :params="queryParams" <el-col :span="6">
:page-size="pager.size" /> <el-form-item label="回款状态" prop="return_status">
</el-form-item> <el-select class="flex-1 !fle" v-model="queryParams.return_status" clearable
placeholder="请选择回款状态">
<el-option v-for="(item, index) in dictData.return_status" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
<export-data class="ml-2.5" :fetch-fun="apireturnedLists" :params="queryParams"
:page-size="pager.size" />
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
@ -58,7 +74,6 @@
<el-table-column label="已回款" prop="has_return_amount" show-overflow-tooltip /> <el-table-column label="已回款" prop="has_return_amount" show-overflow-tooltip />
<el-table-column label="未回款" prop="not_return_amount" show-overflow-tooltip /> <el-table-column label="未回款" prop="not_return_amount" show-overflow-tooltip />
<el-table-column label="回款责任人" prop="return_duty" show-overflow-tooltip /> <el-table-column label="回款责任人" prop="return_duty" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="150" fixed="right"> <el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['remittance.remittance/edit']" type="primary" link <el-button v-perms="['remittance.remittance/edit']" type="primary" link

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,20 @@
<template> <template>
<div> <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 class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="分包合同" prop="contract_id"> <el-form-item label="分包合同" prop="contract_id">
<selectRemote :formData="queryParams" model="contract_id" :api="apiSubcontractingContractSearch" /> <selectRemote :formData="queryParams" model="contract_id" :api="apiSubcontractingContractSearch" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button> <el-button @click="resetParams">重置</el-button>
<export-data class="ml-2.5" :fetch-fun="apiSubcontractingContractDetailLists" :params="queryParams" <export-data class="ml-2.5" :fetch-fun="apiSubcontractingContractDetailLists" :params="queryParams"
:page-size="pager.size" /> :page-size="pager.size" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<!-- <el-button v-perms="['contract.subcontracting_contract/add']" type="primary" @click="handleAdd"> <!-- <el-button v-perms="['contract.subcontracting_contract/add']" type="primary" @click="handleAdd">
<template #icon> <template #icon>
<icon name="el-icon-Plus" /> <icon name="el-icon-Plus" />
</template> </template>
@ -25,116 +25,119 @@
删除 删除
</el-button> --> </el-button> -->
<div class="mt-4"> <div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange"> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" /> <el-table-column label="序号" type="index" width="55" />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip /> <el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip /> <el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
<el-table-column label="合同名称" prop="contract_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="contract_no" show-overflow-tooltip />
<el-table-column label="合同类型" prop="contract_type" show-overflow-tooltip /> <el-table-column label="合同类型" prop="contract_type" show-overflow-tooltip />
<el-table-column label="工作类型" prop="work_type" show-overflow-tooltip /> <el-table-column label="工作类型" prop="work_type" show-overflow-tooltip />
<el-table-column label="工作内容" prop="work_content" show-overflow-tooltip /> <el-table-column label="工作内容" prop="work_content" show-overflow-tooltip />
<el-table-column label="项目特征" prop="project_features" show-overflow-tooltip /> <el-table-column label="项目特征" prop="project_features" show-overflow-tooltip />
<el-table-column label="单位" prop="unit" show-overflow-tooltip /> <el-table-column label="单位" prop="unit" show-overflow-tooltip />
<el-table-column label="税率(%)" prop="tax_rate_text" show-overflow-tooltip /> <el-table-column label="税率(%)" prop="tax_rate_text" show-overflow-tooltip />
<el-table-column label="工作量" prop="num" show-overflow-tooltip /> <el-table-column label="工作量" prop="num" show-overflow-tooltip />
<el-table-column label="不含税金额" prop="amount_excluding_tax" show-overflow-tooltip /> <el-table-column label="不含税金额" prop="amount_excluding_tax" show-overflow-tooltip />
<el-table-column label="含税金额" prop="amount_including_tax" show-overflow-tooltip /> <el-table-column label="含税金额" prop="amount_including_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 }"> <template #default="{ row }">
<!-- <el-button v-perms="['contract.subcontracting_contract/edit']" type="primary" link @click="handleEdit(row)"> <!-- <el-button v-perms="['contract.subcontracting_contract/edit']" type="primary" link @click="handleEdit(row)">
编辑 编辑
</el-button> </el-button>-->
<el-button v-perms="['contract.subcontracting_contract/delete']" type="danger" link @click="handleDelete(row.id)"> <el-button v-perms="['contract.subcontracting_contract/delete']" type="danger" link
删除 @click="handleDelete(row.id)">
</el-button> --> 删除
<el-button v-perms="['contract.subcontracting_contract/detail']" link </el-button>
@click="handleDetail(row)"> <el-button v-perms="['contract.subcontracting_contract/detail']" link @click="handleDetail(row)">
详情 详情
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="flex justify-end mt-4"> <div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" /> <pagination v-model="pager" @change="getLists" />
</div> </div>
</el-card> </el-card>
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" /> <detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
<!-- <edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> --> <!-- <edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> -->
</div> </div>
</template> </template>
<script lang="ts" setup name="subcontractingContractLists"> <script lang="ts" setup name="subcontractingContractLists">
import { usePaging } from '@/hooks/usePaging' import { usePaging } from "@/hooks/usePaging";
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from "@/hooks/useDictOptions";
import { apiSubcontractingContractDetailLists, apiSubcontractingContractDetailDelete, apiSubcontractingContractDetailDetail } from '@/api/subcontracting_contract_detail' import {
import { apiSubcontractingContractSearch } from '@/api/subcontracting_contract' apiSubcontractingContractDetailLists,
import feedback from '@/utils/feedback' apiSubcontractingContractDetailDelete,
apiSubcontractingContractDetailDetail,
} from "@/api/subcontracting_contract_detail";
import { apiSubcontractingContractSearch } from "@/api/subcontracting_contract";
import feedback from "@/utils/feedback";
// import EditPopup from './edit.vue' // import EditPopup from './edit.vue'
import DetailPopup from './detail.vue' import DetailPopup from "./detail.vue";
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>() const detailRef = shallowRef<InstanceType<typeof DetailPopup>>();
const editRef = shallowRef<InstanceType<typeof EditPopup>>() const editRef = shallowRef<InstanceType<typeof EditPopup>>();
// //
const showEdit = ref(false) const showEdit = ref(false);
const showDtail = ref(false) const showDtail = ref(false);
// //
const queryParams = reactive({ const queryParams = reactive({
contract_id: '' contract_id: "",
}) });
// //
const selectData = ref<any[]>([]) const selectData = ref<any[]>([]);
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id);
} };
// //
const { dictData } = useDictData('contract_type,account_period,tax_rate,pay_type,pay_period ') const { dictData } = useDictData(
"contract_type,account_period,tax_rate,pay_type,pay_period "
);
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiSubcontractingContractDetailLists, fetchFun: apiSubcontractingContractDetailLists,
params: queryParams params: queryParams,
}) });
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true;
await nextTick() await nextTick();
editRef.value?.open('add') editRef.value?.open("add");
} };
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
let res = await apiSubcontractingContractDetailDetail({ id: data.id }) let res = await apiSubcontractingContractDetailDetail({ id: data.id });
showEdit.value = true showEdit.value = true;
await nextTick() await nextTick();
editRef.value?.open('edit') editRef.value?.open("edit");
editRef.value?.setFormData(res) editRef.value?.setFormData(res);
} };
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm("确定要删除?");
await apiSubcontractingContractDetailDelete({ id }) await apiSubcontractingContractDetailDelete({ id });
getLists() getLists();
} };
const handleDetail = async (data: any) => { const handleDetail = async (data: any) => {
let res = await apiSubcontractingContractDetailDetail({ id: data.id }) let res = await apiSubcontractingContractDetailDetail({ id: data.id });
showDtail.value = true showDtail.value = true;
await nextTick() await nextTick();
detailRef.value?.open() detailRef.value?.open();
detailRef.value?.setFormData(res) detailRef.value?.setFormData(res);
} };
getLists();
getLists()
</script> </script>

View File

@ -1,286 +0,0 @@
<template>
<div>
<el-card>
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="120px" label-position="left">
<el-row :gutter="10">
<el-col :span="12">
<el-form-item label="合同编号" prop="field102">
<el-input v-model="formData.field102" placeholder="点击选择合同编号" :disabled='true' clearable
suffix-icon='el-icon-search' :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="签订日期" prop="field106">
<el-date-picker v-model="formData.field106" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
:style="{ width: '100%' }" placeholder="请输入签约日期" clearable
:disabled='true'></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商" prop="field102">
<el-input v-model="formData.field102" placeholder="系统自动填写" :disabled='true' clearable
suffix-icon='el-icon-search' :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商编码" prop="field102">
<el-input v-model="formData.field102" placeholder="系统自动填写" :disabled='true' clearable
suffix-icon='el-icon-search' :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目名称" prop="field103">
<el-input v-model="formData.field103" placeholder="点击选择项目名称" :disabled='true' clearable
suffix-icon='el-icon-search' :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编码" prop="field102">
<el-input v-model="formData.field102" placeholder="系统自动填写" :disabled='true' clearable
suffix-icon='el-icon-search' :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="治商编号" prop="field110">
<el-input v-model="formData.field110" placeholder="系统自动获取" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="治商单位名称" prop="field109">
<el-input v-model="formData.field109" placeholder="请输入治商单位名称" clearable
:style="{ width: '100%' }">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="治商金额" prop="field111">
<el-input v-model="formData.field111" placeholder="请输入治商金额" clearable
:style="{ width: '100%' }">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="治商类别" prop="field135">
<el-radio-group v-model="formData.field135" size="medium">
<el-radio v-for="(item, index) in field135Options" :key="index" :label="item.value"
:disabled="item.disabled">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="治商质保金额" prop="field138">
<el-input v-model="formData.field138" placeholder="请输入治商质保金额" clearable
:style="{ width: '100%' }">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="治商质保到期时间" prop="field139" label-width="130px">
<el-input v-model="formData.field139" placeholder="请输入治商质保到期时间" clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="治商内容" prop="field142">
<el-input v-model="formData.field142" type="textarea" placeholder="请输入治商内容"
:autosize="{ minRows: 4, maxRows: 4 }" :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="具体说明" prop="field143">
<el-input v-model="formData.field143" type="textarea" placeholder="请输入具体说明"
:autosize="{ minRows: 4, maxRows: 4 }" :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="签证报价表" prop="field144">
<el-upload ref="field144" :file-list="field144fileList" :action="field144Action"
:before-upload="field144BeforeUpload">
<el-button size="small" type="primary" icon="el-icon-upload">点击上传</el-button>
</el-upload>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="治商依据" prop="field145">
<el-upload ref="field145" :file-list="field145fileList" :action="field145Action"
:before-upload="field145BeforeUpload">
<el-button size="small" type="primary" icon="el-icon-upload">点击上传</el-button>
</el-upload>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item size="large">
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</div>
</template>
<script>
export default {
components: {},
props: [],
data() {
return {
formData: {
field101: undefined,
field102: undefined,
field103: undefined,
field104: undefined,
field107: undefined,
field105: undefined,
field106: undefined,
field108: undefined,
field109: undefined,
field110: undefined,
field111: undefined,
field135: 1,
field136: undefined,
field137: undefined,
field138: undefined,
field139: undefined,
field140: undefined,
field141: undefined,
field142: undefined,
field143: undefined,
field144: null,
field145: null,
},
rules: {
field101: [{
required: true,
message: '点击选择合同',
trigger: 'blur'
}],
field102: [{
required: true,
message: '点击选择合同编号',
trigger: 'blur'
}],
field103: [{
required: true,
message: '点击选择项目名称',
trigger: 'blur'
}],
field104: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field107: [{
required: true,
message: '系统自动填写',
trigger: 'change'
}],
field105: [{
required: true,
message: '系统自动获取',
trigger: 'blur'
}],
field106: [{
required: true,
message: '请输入签约日期',
trigger: 'change'
}],
field108: [{
required: true,
message: '点击选择',
trigger: 'blur'
}],
field109: [{
required: true,
message: '请输入治商单位名称',
trigger: 'blur'
}],
field110: [],
field111: [{
required: true,
message: '请输入治商金额',
trigger: 'blur'
}],
field135: [],
field136: [],
field137: [],
field138: [],
field139: [],
field140: [],
field141: [],
field142: [],
field143: [],
},
field144Action: 'https://jsonplaceholder.typicode.com/posts/',
field144fileList: [],
field145Action: 'https://jsonplaceholder.typicode.com/posts/',
field145fileList: [],
field107Options: [{
"label": "选项一",
"value": 1
}, {
"label": "选项二",
"value": 2
}],
field108Options: [{
"label": "总价合同",
"value": 1
}, {
"label": "清单计价",
"value": 2
}],
field135Options: [{
"label": "设计变更",
"value": 1
}, {
"label": "现场变更",
"value": 2
}, {
"label": "补充协议",
"value": 3
}],
}
},
computed: {},
watch: {},
created() { },
mounted() { },
methods: {
submitForm() {
this.$refs['elForm'].validate(valid => {
if (!valid) return
// TODO
})
},
resetForm() {
this.$refs['elForm'].resetFields()
},
field144BeforeUpload(file) {
let isRightSize = file.size / 1024 / 1024 < 2
if (!isRightSize) {
this.$message.error('文件大小超过 2MB')
}
return isRightSize
},
field145BeforeUpload(file) {
let isRightSize = file.size / 1024 / 1024 < 2
if (!isRightSize) {
this.$message.error('文件大小超过 2MB')
}
return isRightSize
},
}
}
</script>
<style>
.el-upload__tip {
line-height: 1.2;
}
</style>

View File

@ -1,43 +1,51 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px" :rules="formRules"> <el-form ref="formRef" :model="formData" label-width="160px" :rules="formRules">
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合同编号" prop="subcontracting_contract_id" @click="showDialog = true" <el-form-item label="合同编号" prop="subcontracting_contract_id" @click="showDialog = true" :rules="[
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]"> { required: true, message: '不可为空', trigger: 'change' },
]">
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" /> <el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
</el-form-item> </el-col> </el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="供应商名称" prop="subcontracting_contract_id"> <el-form-item label="供应商名称" prop="subcontracting_contract_id">
<el-input v-model="supplier_name" clearable disabled placeholder="系统自动填写" /> <el-input v-model="supplier_name" clearable disabled placeholder="系统自动填写" />
</el-form-item> </el-col> </el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="供应商编码" prop="subcontracting_contract_id"> <el-form-item label="供应商编码" prop="subcontracting_contract_id">
<el-input v-model="supplier_code" clearable disabled placeholder="系统自动填写" /> <el-input v-model="supplier_code" clearable disabled placeholder="系统自动填写" />
</el-form-item> </el-col> </el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目名称" prop="subcontracting_contract_id" <el-form-item label="项目名称" prop="subcontracting_contract_id" :rules="[
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]"> { required: true, message: '不可为空', trigger: 'change' },
]">
<el-input v-model="project_name" clearable disabled placeholder="系统自动填写" /> <el-input v-model="project_name" clearable disabled placeholder="系统自动填写" />
</el-form-item> </el-col> </el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目编码" prop="subcontracting_contract_id" <el-form-item label="项目编码" prop="subcontracting_contract_id" :rules="[
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]"> { required: true, message: '不可为空', trigger: 'change' },
]">
<el-input v-model="project_code" clearable disabled placeholder="系统自动填写" /> <el-input v-model="project_code" clearable disabled placeholder="系统自动填写" />
</el-form-item> </el-col> </el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="洽商编号" prop="negotiation_no"> <el-form-item label="洽商编号" prop="negotiation_no">
<el-input v-model="formData.negotiation_no" clearable disabled placeholder="系统自动生成" /> <el-input v-model="formData.negotiation_no" clearable disabled placeholder="系统自动生成" />
</el-form-item> </el-col> </el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="洽商单名称" prop="negotiation_name"> <el-form-item label="洽商单名称" prop="negotiation_name">
<el-input v-model="formData.negotiation_name" clearable placeholder="请输入洽商单名称" /> <el-input v-model="formData.negotiation_name" clearable placeholder="请输入洽商单名称" />
</el-form-item> </el-col> </el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="签订日期" prop="sign_date"> <el-form-item label="签订日期" prop="sign_date">
@ -47,8 +55,9 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="洽商金额" prop="negotiation_amount" <el-form-item label="洽商金额" prop="negotiation_amount" :rules="[
:rules="[{ required: true, message: '不可为空', trigger: 'change' }]"> { required: true, message: '不可为空', trigger: 'change' },
]">
<el-input v-model="formData.negotiation_amount" clearable placeholder="请输入合同金额" /> <el-input v-model="formData.negotiation_amount" clearable placeholder="请输入合同金额" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -65,7 +74,6 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="洽商类别" prop="negotiation_type"> <el-form-item label="洽商类别" prop="negotiation_type">
<el-radio-group v-model="formData.negotiation_type" placeholder="请选择付款方式"> <el-radio-group v-model="formData.negotiation_type" placeholder="请选择付款方式">
@ -74,166 +82,102 @@
{{ item.name }} {{ item.name }}
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-col> </el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="洽商质保金额" prop="warranty_amount"> <el-form-item label="洽商质保金额" prop="warranty_amount">
<el-input v-model="formData.warranty_amount" clearable placeholder="请输入不含税金额" /> <el-input v-model="formData.warranty_amount" clearable placeholder="请输入不含税金额" />
</el-form-item> </el-col> </el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="洽商质保到期时间" prop="warranty_expire_date"> <el-form-item label="洽商质保到期时间" prop="warranty_expire_date">
<el-date-picker class="flex-1 !flex" v-model="formData.warranty_expire_date" clearable <el-date-picker class="flex-1 !flex" v-model="formData.warranty_expire_date" clearable
value-format="YYYY-MM-DD" placeholder="选择洽商质保到期时间"> value-format="YYYY-MM-DD" placeholder="选择洽商质保到期时间">
</el-date-picker> </el-date-picker>
</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" :key="index"
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-form-item>
</el-col> </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_five" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div> <el-col :span="12">
<div v-for="(item, index) in formDataannex1" :key="index" <el-form-item label="签证报价表">
style="margin-left: 5px;display: block;"> <uploadAnnex :formData="formData" value="negotiation_quotation">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" </uploadAnnex>
:href="item.uri" target="_blank">{{ item.name }}</a> </el-form-item>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn1(index)">x</span> </el-col>
</div> <el-col :span="12">
</div> <el-form-item label="洽商依据">
<uploadAnnex :formData="formData" value="negotiation_basis">
</uploadAnnex>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<el-dialog v-model="showDialog" title="选择分包合同" width="70%"> <el-dialog v-model="showDialog" title="选择分包合同" width="70%">
<procurementTable @customEvent="customEvent" :project_id="project?.id || ''"></procurementTable> <dialogTable :config="subcontracting_contract" :query="{ project_id: project?.id || '' }"
@customEvent="customEvent">
</dialogTable>
</el-dialog> </el-dialog>
</popup> </popup>
</div> </div>
</template> </template>
<script lang="ts" setup name="procurementContractEdit"> <script lang="ts" setup name="procurementContractEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from "element-plus";
import Popup from '@/components/popup/index.vue' import Popup from "@/components/popup/index.vue";
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from "@/hooks/useDictOptions";
import procurementTable from '@/components/procurement/index.vue' import {
import { apinegotiationAdd, apinegotiationEdit, apinegotiationDetail } from '@/api/subcontractor' apinegotiationAdd,
const { dictData } = useDictData('negotiation_type') apinegotiationEdit,
apinegotiationDetail,
} from "@/api/subcontractor";
import { subcontracting_contract } from "@/components/dialogTable/dialogTableConfig"
const { dictData } = useDictData("negotiation_type");
let props = defineProps({ let props = defineProps({
project: Object project: Object,
}) });
const emit = defineEmits(['success', 'close']) const emit = defineEmits(["success", "close"]);
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>();
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>();
const mode = ref('add') const mode = ref("add");
const showDialog = ref(false) const showDialog = ref(false);
const project_name = ref('') const project_name = ref("");
const project_code = ref('') const project_code = ref("");
const formDataannex = reactive([]) const formDataannex = reactive([]);
const formDataannex1 = reactive([]) const formDataannex1 = reactive([]);
const supplier_name = ref('') const supplier_name = ref("");
const supplier_code = ref('') const supplier_code = ref("");
const contract_no = ref('') const contract_no = ref("");
const tableData = reactive([]) const tableData = reactive([]);
const tableData1 = reactive([]) const tableData1 = reactive([]);
import feedback from '@/utils/feedback' import feedback from "@/utils/feedback";
import configs from "@/config" import configs from "@/config";
const base_url = configs.baseUrl + configs.urlPrefix const base_url = configs.baseUrl + configs.urlPrefix;
import useUserStore from "@/stores/modules/user"; import useUserStore from "@/stores/modules/user";
const userStore = useUserStore(); 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 handleAvatarSuccess_five = (
response,
uploadFile
) => {
if (response.code == 0) {
feedback.msgError(response.msg);
return;
}
formDataannex1.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn1 = (index: number) => {
formDataannex1.splice(index, 1)
}
// //
const popupTitle = computed(() => { const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑分包洽商' : '新增分包洽商' return mode.value == "edit" ? "编辑分包洽商" : "新增分包洽商";
}) });
// //
const formData = reactive({ const formData = reactive({
id: '', id: "",
subcontracting_contract_id: '1', subcontracting_contract_id: "1",
negotiation_name: '', negotiation_name: "",
negotiation_no: '', negotiation_no: "",
negotiation_amount: '', negotiation_amount: "",
negotiation_type: '', negotiation_type: "",
sign_date: '', sign_date: "",
warranty_amount: '', warranty_amount: "",
warranty_expire_date: '', warranty_expire_date: "",
negotiation_content: '', negotiation_content: "",
negotiation_quotation: [], negotiation_quotation: [],
negotiation_basis: [], negotiation_basis: [],
negotiation_detail: "", negotiation_detail: "",
}) });
const customEvent = (e: any) => { const customEvent = (e: any) => {
contract_no.value = e.contract_no; contract_no.value = e.contract_no;
@ -242,100 +186,65 @@ const customEvent = (e: any) => {
formData.sign_date = e.signing_date; formData.sign_date = e.signing_date;
project_name.value = e.project_name; project_name.value = e.project_name;
formData.subcontracting_contract_id = e.id; formData.subcontracting_contract_id = e.id;
project_code.value = e.project_code project_code.value = e.project_code;
showDialog.value = false; showDialog.value = false;
}; };
if (props.project) { if (props.project) {
project_name.value = props.project.name project_name.value = props.project.name;
project_code.value = props.project.project_code project_code.value = props.project.project_code;
} }
// //
const formRules = reactive<any>({ const formRules = reactive<any>({});
})
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
if (data.negotiation_quotation.length > 0) { project_name.value = data.project_name;
project_code.value = data.project_code;
const arry1 = data.negotiation_quotation.map((item: any, index: any) => { contract_no.value = data.contract_no;
return { supplier_name.value = data.supplier_name;
name: `文件${index + 1}`, supplier_code.value = data.supplier_code;
uri: item
};
});
Object.assign(formDataannex, arry1)
}
if (data.negotiation_basis.length > 0) {
const arry1 = data.negotiation_basis.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex1, arry1)
}
project_name.value = data.project_name
project_code.value = data.project_code
contract_no.value = data.contract_no
supplier_name.value = data.supplier_name
supplier_code.value = data.supplier_code
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key];
} }
} }
} };
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
const data = await apinegotiationDetail({ const data = await apinegotiationDetail({
id: row.id id: row.id,
}) });
setFormData(data) setFormData(data);
} };
// //
const handleSubmit = async () => { const handleSubmit = async () => {
if (formDataannex.length > 0) { await formRef.value?.validate();
formData.negotiation_quotation = formDataannex.map((item) => item.uri) const data = { ...formData };
} mode.value == "edit"
if (formDataannex1.length > 0) {
formData.negotiation_basis = formDataannex1.map((item) => item.uri)
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apinegotiationEdit(data) ? await apinegotiationEdit(data)
: await apinegotiationAdd(data) : await apinegotiationAdd(data);
popupRef.value?.close() popupRef.value?.close();
emit('success') emit("success");
} };
// //
const open = (type = 'add') => { const open = (type = "add") => {
mode.value = type mode.value = type;
popupRef.value?.open() popupRef.value?.open();
} };
// //
const handleClose = () => { const handleClose = () => {
emit('close') emit("close");
} };
defineExpose({ defineExpose({
open, open,
setFormData, setFormData,
getDetail getDetail,
}) });
</script> </script>

View File

@ -52,19 +52,20 @@
<el-table-column label="洽商类别" prop="negotiation_type_text" show-overflow-tooltip /> <el-table-column label="洽商类别" prop="negotiation_type_text" show-overflow-tooltip />
<el-table-column label="洽商质保金额" prop="warranty_amount" show-overflow-tooltip /> <el-table-column label="洽商质保金额" prop="warranty_amount" show-overflow-tooltip />
<el-table-column label="洽商质保到期时间" prop="warranty_expire_date" show-overflow-tooltip /> <el-table-column label="洽商质保到期时间" prop="warranty_expire_date" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right"> <el-table-column label="操作" width="160" fixed="right" align='center'>
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['contract.subcontracting_contract_negotiation/edit']" type="primary" <el-button v-perms="['contract.subcontracting_contract_negotiation/edit']" type="primary" link
link @click="handleEdit(row)"> @click="handleEdit(row)">
编辑 编辑
</el-button> </el-button>
<el-button v-perms="['contract.subcontracting_contract_negotiation/delete']" type="danger" <el-button v-perms="[
link @click="handleDelete(row.id)"> 'contract.subcontracting_contract_negotiation/delete',
]" type="danger" link @click="handleDelete(row.id)">
删除 删除
</el-button> </el-button>
<el-button v-perms="['contract.subcontracting_contract_negotiation/detail']" link <el-button v-perms="[
@click="handledetail(row)"> 'contract.subcontracting_contract_negotiation/detail',
]" link @click="handledetail(row)">
详情 详情
</el-button> </el-button>
</template> </template>
@ -81,78 +82,82 @@
</template> </template>
<script lang="ts" setup name="projectLists"> <script lang="ts" setup name="projectLists">
import { usePaging } from '@/hooks/usePaging' import { usePaging } from "@/hooks/usePaging";
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from "@/hooks/useDictOptions";
import { apinegotiationLists, apinegotiationDelete, apinegotiationDetail } from '@/api/subcontractor' import {
import { apiSubcontractingContractSearch } from '@/api/subcontracting_contract' apinegotiationLists,
import { apiProjectSearch } from '@/api/project' apinegotiationDelete,
import feedback from '@/utils/feedback' apinegotiationDetail,
import EditPopup from './edit.vue' } from "@/api/subcontractor";
import DetailPopup from './detail.vue' import { apiSubcontractingContractSearch } from "@/api/subcontracting_contract";
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>() import { apiProjectSearch } from "@/api/project";
const editRef = shallowRef<InstanceType<typeof EditPopup>>() import feedback from "@/utils/feedback";
import EditPopup from "./edit.vue";
import DetailPopup from "./detail.vue";
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>();
const editRef = shallowRef<InstanceType<typeof EditPopup>>();
// //
const showEdit = ref(false) const showEdit = ref(false);
const showDtail = ref(false) const showDtail = ref(false);
// //
const queryParams = reactive({ const queryParams = reactive({
negotiation_no: '', negotiation_no: "",
subcontracting_contract_id: '', subcontracting_contract_id: "",
negotiation_type: '', negotiation_type: "",
project_id: '' project_id: "",
}) });
// //
const selectData = ref<any[]>([]) const selectData = ref<any[]>([]);
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id);
} };
// //
const { dictData } = useDictData('negotiation_type') const { dictData } = useDictData("negotiation_type");
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apinegotiationLists, fetchFun: apinegotiationLists,
params: queryParams params: queryParams,
}) });
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true;
await nextTick() await nextTick();
editRef.value?.open('add') editRef.value?.open("add");
} };
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
let res = await apinegotiationDetail({ id: data.id }) let res = await apinegotiationDetail({ id: data.id });
showEdit.value = true showEdit.value = true;
await nextTick() await nextTick();
editRef.value?.open('edit') editRef.value?.open("edit");
editRef.value?.setFormData(res) editRef.value?.setFormData(res);
} };
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm("确定要删除?");
await apinegotiationDelete({ id }) await apinegotiationDelete({ id });
getLists() getLists();
} };
const handledetail = async (data: any) => { const handledetail = async (data: any) => {
let res = await apinegotiationDetail({ id: data.id }) let res = await apinegotiationDetail({ id: data.id });
showDtail.value = true showDtail.value = true;
await nextTick() await nextTick();
detailRef.value?.open() detailRef.value?.open();
detailRef.value?.setFormData(res) detailRef.value?.setFormData(res);
} };
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
const route = useRoute() const route = useRoute();
if (route.query?.listId) { if (route.query?.listId) {
handledetail({ id: route.query.listId }) handledetail({ id: route.query.listId });
} }
getLists() getLists();
</script> </script>

View File

@ -66,7 +66,6 @@
<el-table-column label="联系人" prop="contacts" show-overflow-tooltip /> <el-table-column label="联系人" prop="contacts" show-overflow-tooltip />
<el-table-column label="性别" prop="contacts_sex" show-overflow-tooltip /> <el-table-column label="性别" prop="contacts_sex" show-overflow-tooltip />
<el-table-column label="电话号码" prop="phone" show-overflow-tooltip /> <el-table-column label="电话号码" prop="phone" 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">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['bid.bid_bidding_decision/edit']" type="primary" link <el-button v-perms="['bid.bid_bidding_decision/edit']" type="primary" link