1.剩余施工管理模块 施工汇报对接增删改查功能 2.项目工种 项目合同 对接增删改查功能

This commit is contained in:
jia 2023-12-25 18:30:29 +08:00
parent 26bb3b0f69
commit 0e5e582b78
51 changed files with 3165 additions and 787 deletions

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
//施工汇报表列表
export function buildreportLists(params: any) {
return request.get({ url: '/build.build_report/lists', params })
}
// 添加施工计划
export function buildreportAdd(params: any) {
return request.post({ url: '/build.build_report/add', params })
}
// 编辑施工计划
export function buildreportEdit(params: any) {
return request.post({ url: '/build.build_report/edit', params })
}
// 删除施工计划
export function buildreportDelete(params: any) {
return request.post({ url: '/build.build_report/delete', params })
}
// 施工计划详情
export function buildreportDetail(params: any) {
return request.get({ url: '/build.build_report/detail', params })
}

View File

@ -0,0 +1,5 @@
import request from '@/utils/request'
// 人工明细列表
export function buildreportDetaillists(params: any) {
return request.get({ url: '/build.build_report_detail/lists', params })
}

View File

@ -0,0 +1,27 @@
import request from '@/utils/request'
// 保险管理列表
export function insurancemanagementLists(params: any) {
return request.get({ url: '/project.project_insurance_management//lists', params })
}
// 添加保险管理
export function insurancemanagementAdd(params: any) {
return request.post({ url: '/project.project_insurance_management//add', params })
}
// 编辑保险管理
export function insurancemanagementEdit(params: any) {
return request.post({ url: '/project.project_insurance_management//edit', params })
}
// 删除保险管理
export function insurancemanagementDelete(params: any) {
return request.post({ url: '/project.project_insurance_management//delete', params })
}
// 保险管理详情
export function insurancemanagementDetail(params: any) {
return request.get({ url: '/project.project_insurance_management//detail', params })
}

View File

@ -0,0 +1,32 @@
import request from '@/utils/request'
// 工种记录列表
export function projectjobtypeLists(params: any) {
return request.get({ url: '/project.project_job_type/lists', params })
}
// 添加工种记录
export function projectjobtypeAdd(params: any) {
return request.post({ url: '/project.project_job_type/add', params })
}
// 编辑工种记录
export function projectjobtypeEdit(params: any) {
return request.post({ url: '/project.project_job_type/edit', params })
}
// 删除工种记录
export function projectjobtypeDelete(params: any) {
return request.post({ url: '/project.project_job_type/delete', params })
}
// 工种记录详情
export function projectjobtypeDetail(params: any) {
return request.get({ url: '/project.project_job_type/detail', params })
}
// 工种列表
export function projectjobtypeAll(params: any) {
return request.get({ url: '/project.project_job_type/all', params })
}

View File

@ -0,0 +1,28 @@
import request from '@/utils/request'
// 劳动合同列表
export function projectlaborcontractLists(params: any) {
return request.get({ url: '/project.project_labor_contract/lists', params })
}
// 添加劳动合同
export function projectlaborcontractAdd(params: any) {
return request.post({ url: '/project.project_labor_contract/add', params })
}
// 编辑劳动合同
export function projectlaborcontractEdit(params: any) {
return request.post({ url: '/project.project_labor_contract/edit', params })
}
// 删除劳动合同
export function projectlaborcontractDelete(params: any) {
return request.post({ url: '/project.project_labor_contract/delete', params })
}
// 劳动合同详情
export function projectlaborcontractDetail(params: any) {
return request.get({ url: '/project.project_labor_contract/detail', params })
}

View File

@ -24,3 +24,8 @@ export function projectpersonnelDelete(params: any) {
export function projectpersonnelDetail(params: any) {
return request.get({ url: '/project.project_personnel/detail', params })
}
//获取某个项目下的所有人员
export function personneToProject(params: any) {
return request.get({ url: '/project.project_personnel/listToProject', params })
}

View File

@ -0,0 +1,77 @@
<template>
<div>
<el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="客户名称" prop="name">
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入客户名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<el-table-column label="序号" type="index" />
<el-table-column label="收票银行" prop="account_name" show-overflow-tooltip />
<el-table-column label="收票账户编码" prop="account" show-overflow-tooltip />
<el-table-column label="收票日期" prop="receipt_date" show-overflow-tooltip />
<el-table-column label="票据编号" prop="bill_sn" show-overflow-tooltip />
<el-table-column label="汇票类型" prop="invoice_amount" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.bill_type" :value="row.bill_type" />
</template>
</el-table-column>
<el-table-column label="汇票承兑银行" prop="draft_acceptance_bank" show-overflow-tooltip />
<el-table-column label="汇票到期日期" prop="bill_due_date" show-overflow-tooltip />
<el-table-column label="收款金额大写" prop="receipt_amount_daxie" show-overflow-tooltip />
<el-table-column label="收款金额(元)" prop="receipt_amount" show-overflow-tooltip />
<el-table-column label="支出金额" prop="tax" show-overflow-tooltip />
<el-table-column label="余额" prop="tax" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { acceptancebillLists } from '@/api/acceptance'
import { defineEmits } from "vue"
//
const queryParams = reactive({
});
const { dictData } = useDictData('bill_type ')
//
const emits = defineEmits(["customEvent"]);
//
const handleCurrentChange = (value: any) => {
emits("customEvent", value);
};
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: acceptancebillLists,
params: queryParams,
});
getLists();
</script>

View File

@ -0,0 +1,76 @@
<template>
<div>
<el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="工序步骤" prop="process_step">
<el-input class="w-[280px]" v-model="queryParams.process_step" clearable placeholder="请输入工序步骤" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<el-table-column type="selection" width="55" />
<el-table-column label="作业编码" prop="zy_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="分项工程" prop="subentry_engineering" show-overflow-tooltip />
<el-table-column label="工序步骤号" prop="process_step_no" show-overflow-tooltip />
<el-table-column label="工序步骤" prop="process_step" show-overflow-tooltip />
<el-table-column label="质量控制点" prop="quality_control_points" show-overflow-tooltip />
<el-table-column label="图例说明" prop="file" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.file && row.file.length > 0">
<div v-for="(item, i) in row.file " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { buildplanLists } from '@/api/build/build_plan'
import { defineEmits } from "vue"
//
const queryParams = reactive({
process_step: ''
});
//
const emits = defineEmits(["customEvent"]);
//
const handleCurrentChange = (value: any) => {
emits("customEvent", value);
};
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: buildplanLists,
params: queryParams,
});
getLists();
</script>

View File

@ -25,7 +25,18 @@
<el-table-column label="重要程度" prop="importance_text" show-overflow-tooltip />
<el-table-column label="记录时间" prop="recording_time" show-overflow-tooltip />
<el-table-column label="需求内容" prop="demand_content" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
</el-table>
</div>

View File

@ -1,31 +1,16 @@
<template>
<div class="material-select">
<popup
ref="popupRef"
width="830px"
custom-class="body-padding"
:title="`选择${tipsText}`"
@confirm="handleConfirm"
@close="handleClose"
>
<popup ref="popupRef" width="830px" custom-class="body-padding" :title="`选择${tipsText}`" @confirm="handleConfirm" @close="handleClose">
<template v-if="!hiddenUpload" #trigger>
<div class="material-select__trigger clearfix" @click.stop>
<draggable class="draggable" v-model="fileList" animation="300" item-key="id">
<template v-slot:item="{ element, index }">
<div
class="material-preview"
:class="{
'is-disabled': disabled,
'is-one': limit == 1
}"
@click="showPopup(index)"
>
<div class="material-preview" :class="{
'is-disabled': disabled,
'is-one': limit == 1
}" @click="showPopup(index)">
<del-wrap @close="deleteImg(index)">
<file-item
:uri="excludeDomain ? getImageUrl(element) : element"
:file-size="size"
:type="type"
></file-item>
<file-item :uri="excludeDomain ? getImageUrl(element) : element" :file-size="size" :type="type"></file-item>
</del-wrap>
<div class="operation-btns text-xs text-center">
<span>修改</span>
@ -35,24 +20,16 @@
</div>
</template>
</draggable>
<div
class="material-upload"
@click="showPopup(-1)"
v-show="showUpload"
:class="{
'is-disabled': disabled,
'is-one': limit == 1,
[uploadClass]: true
}"
>
<div class="material-upload" @click="showPopup(-1)" v-show="showUpload" :class="{
'is-disabled': disabled,
'is-one': limit == 1,
[uploadClass]: true
}">
<slot name="upload">
<div
class="upload-btn"
:style="{
width: size,
height: size
}"
>
<div class="upload-btn" :style="{
width: size,
height: size
}">
<icon :size="25" name="el-icon-Plus" />
<span>添加</span>
</div>
@ -62,13 +39,7 @@
</template>
<el-scrollbar>
<div class="material-wrap">
<material
ref="materialRef"
:type="type"
:file-size="fileSize"
:limit="meterialLimit"
@change="selectChange"
/>
<material ref="materialRef" :type="type" :file-size="fileSize" :limit="meterialLimit" @change="selectChange" />
</div>
</el-scrollbar>
</popup>
@ -258,6 +229,7 @@ export default defineComponent({
<style scoped lang="scss">
.material-select {
.material-upload,
.material-preview {
position: relative;
@ -267,17 +239,21 @@ export default defineComponent({
margin-bottom: 8px;
box-sizing: border-box;
float: left;
&.is-disabled {
cursor: not-allowed;
}
&.is-one {
margin-bottom: 0;
}
&:hover {
.operation-btns {
display: block;
}
}
.operation-btns {
display: none;
position: absolute;
@ -289,12 +265,14 @@ export default defineComponent({
background-color: rgba(0, 0, 0, 0.3);
}
}
.material-upload {
:deep(.upload-btn) {
@apply text-tx-secondary box-border rounded border-br border-dashed border flex flex-col justify-center items-center;
}
}
}
.material-wrap {
min-width: 720px;
height: 430px;

View File

@ -43,7 +43,7 @@ const props = defineProps({
}
})
console.log(props.project_id)
// console.log(props.project_id)
//
const queryParams = reactive({
project_id: props.project_id,

View File

@ -80,11 +80,16 @@ import { apiProjectLists } from '@/api/project'
import { defineEmits } from "vue"
import { timeFormat } from '@/utils/util'
const props = defineProps({
customer_id: {
type: String
}
})
//
const queryParams = reactive({
custom_name: '',
project_type: ""
project_type: "",
customer_id: props.customer_id
});
const { dictData } = useDictData('project_type,project_content,bidding_method,relationship,information_sources,construction_funds_sources,construction_financial_status,construction_recognition,my_construction_recognition,strategic_significance,industry,unit_nature')

View File

@ -0,0 +1,107 @@
<template>
<div>
<el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="查询" prop="name">
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入内容" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<el-table-column label="序号" property="name" />
<el-table-column label="项目编码" property="project_code" />
<el-table-column label="项目名称" property="project_name" />
<el-table-column label="姓名" property="name" />
<el-table-column label="身份证号" property="idcard" />
<el-table-column label="手机号" property="mobile" />
<el-table-column label="身份证正面" property="idcard_front">
<template #default="{ row }">
<div v-if="row.file && row.idcard_front.length > 0">
<el-link :href="row.idcard_front" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
<el-table-column label="身份证反面" property="idcard_backend">
<template #default="{ row }">
<div v-if="row.file && row.idcard_backend.length > 0">
<el-link :href="row.idcard_backend" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
<el-table-column label="银行卡照片" property="bank_card">
<template #default="{ row }">
<div v-if="row.file && row.bank_card.length > 0">
<el-link :href="row.bank_card" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
<el-table-column label="银行卡号" property="bank_no" />
<el-table-column label="开户银行" property="deposit_bank" />
<el-table-column label="备注" property="master_name" />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { personneToProject } from '@/api/project_personnel'
import { defineEmits } from "vue"
const props = defineProps({
project_id: {
type: String
}
})
//
const queryParams = reactive({
project_id: props.project_id,
});
//
const emits = defineEmits(["customEvent"]);
//
const handleCurrentChange = (value: any) => {
emits("customEvent", value);
};
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: personneToProject,
params: queryParams,
});
getLists();
</script>

View File

@ -43,7 +43,18 @@
</el-table-column>
<el-table-column label="招标项目概况" prop="bidding_project_overview" show-overflow-tooltip />
<el-table-column label="项目简介" prop="project_introduction" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
<el-table-column label="技术协议偏差" prop="technical_protocol_deviation" show-overflow-tooltip />
<el-table-column label="协议偏差处理方案" prop="protocol_deviation_handling_plan" show-overflow-tooltip />
<el-table-column label="技术审查附件" prop="technical_review_annex" show-overflow-tooltip />

View File

@ -1,10 +1,15 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="项目计划详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" title="施工汇报详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="作业编码">
{{ formData.zy_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目名称">
{{ formData.project_name }}
@ -16,19 +21,46 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="分项工程">
{{ formData.subentry_engineering }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工序步骤">
{{ formData.process_step }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计划开始日期">
{{ formData.start_time }}
{{ formData.plan_start_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="计划结束日期">
{{ formData.deliver_time }}
{{ formData.plan_end_date
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="负责人">
{{ formData.project_manager_name }}
<el-form-item label="班组长">
{{ formData.project_member_name
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="作业量">
{{ formData.workload }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="施工人员">
{{ formData.work_user }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="施工内容">
{{ formData.work_content }}
</el-form-item>
</el-col>
</el-row>

View File

@ -6,86 +6,90 @@
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog2 = true">
<el-form-item label="作业编码" prop="plan_id" @click="showDialog2 = true">
<el-input v-model="zy_code" clearable placeholder="请输入作业编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id">
<el-form-item label="项目编码" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工序步骤号" prop="process_step_no" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.process_step_no" clearable placeholder="请输入工序步骤号" />
<el-form-item label="工序步骤号" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="process_step_no" clearable placeholder="请输入工序步骤号" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工序步骤" prop="process_step" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.process_step" clearable placeholder="请输入工序步骤" />
<el-form-item label="工序步骤" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="process_step" clearable placeholder="请输入工序步骤" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="图例说明">
<material-picker v-model="formData.annex" />
<material-picker v-model="process_file" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="质量控制点" prop="quality_control_points" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.quality_control_points" clearable placeholder="请输入质量控制点" />
<el-form-item label="质量控制点" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="quality_control_points" clearable placeholder="请输入质量控制点" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="计划开始日期" prop="start_time" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.start_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择计划开始日期">
<el-form-item label="计划开始日期" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="plan_start_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择计划开始日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="计划结束日期" prop="deliver_time" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.deliver_time" clearable type="date" value-format="YYYY-MM-DD " placeholder="选择计划结束日期">
<el-form-item label="计划结束日期" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="plan_end_date" clearable type="date" value-format="YYYY-MM-DD " placeholder="选择计划结束日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="班组长" prop="remark" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.remark" clearable placeholder="请输入班组长" />
<el-form-item label="班组长" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_member_name" clearable placeholder="请输入班组长" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="施工内容" prop="remark">
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入施工内容" />
<el-form-item label="施工内容" prop="plan_id">
<el-input v-model="work_content" clearable placeholder="请输入施工内容" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="作业量" prop="remark" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.remark" type="number" clearable placeholder="请输入作业量" />
<el-form-item label="作业量" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="workload" type="number" clearable placeholder="请输入作业量" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="剩余作业量" prop="remark" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="剩余作业量" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.remark" clearable placeholder="请输入剩余作业量" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="填报人" prop="remark">
<el-form-item label="填报人" prop="plan_id">
<el-input v-model="formData.remark" clearable placeholder="请输入填报人" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="填报日期" prop="deliver_time" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="填报日期" prop="plan_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.deliver_time" clearable type="date" value-format="YYYY-MM-DD " placeholder="选择填报日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<div>
<div class="tit" style="margin:10px 0">
人工明细
</div>
<el-row>
@ -97,85 +101,75 @@
<el-button @click="handleDelete(row)" size="small">-</el-button>
</template>
</el-table-column>
<el-table-column label="一级科目" prop="name1">
<el-table-column label="姓名" prop="name1">
<template #default="{ row, column, $index }">
<el-input v-model="row.name1" @click="subjectmu(row, column, $index)" />
</template>
</el-table-column>
<el-table-column label="二级科目" prop="name2">
<template #default="{ row }"> <el-input v-model="row.name2" /> </template></el-table-column>
<el-table-column label="1月" prop="month1">
<template #default="{ row }"> <el-input v-model="row.month1" type="number" /> </template></el-table-column>
<el-table-column label="身份证号" prop="name2">
<template #default="{ row }"> <el-input v-model="row.name2" readonly /> </template></el-table-column>
<el-table-column label="工种" prop="name3">
<template #default="{ row }"> <el-input v-model="row.name3" /> </template></el-table-column>
<el-table-column label="2月" prop="month2">
<el-table-column label="今日完工量" prop="work_num">
<template #default="{ row }">
<el-input v-model="row.month2" type="number" />
<el-input v-model="row.work_num" type="number" @input="amouttol" />
</template>
</el-table-column>
<el-table-column label="3月" prop="month3">
<template #default="{ row }"> <el-input v-model="row.month3" type="number" /> </template></el-table-column>
<el-table-column label="备注" prop="remark">
<template #default="{ row }"> <el-input v-model="row.remark" /> </template>
</el-table-column>
<el-table-column label="4月" prop="month4">
<template #default="{ row }">
<el-input v-model="row.month4" type="number" />
</template>
</el-table-column>
<el-table-column label="5月" prop="month5">
<template #default="{ row }">
<el-input v-model="row.month5" type="number" />
</template>
</el-table-column>
<el-table-column label="6月" prop="month6">
<template #default="{ row }">
<el-input v-model="row.month6" type="number" />
</template>
</el-table-column>
<el-table-column label="7月" prop="month7">
<template #default="{ row }">
<el-input v-model="row.month7" type="number" />
</template>
</el-table-column>
<el-table-column label="8月" prop="month8">
<template #default="{ row }">
<el-input v-model="row.month8" type="number" />
</template>
</el-table-column>
<el-table-column label="9月" prop="month9">
<template #default="{ row }">
<el-input v-model="row.month9" type="number" />
</template>
</el-table-column>
<el-table-column label="10月" prop="month10">
<template #default="{ row }">
<el-input v-model="row.month10" type="number" />
</template>
</el-table-column>
<el-table-column label="11月" prop="month11">
<template #default="{ row }">
<el-input v-model="row.month11" type="number" />
</template>
</el-table-column>
<el-table-column label="12月" prop="month12">
<template #default="{ row }">
<el-input v-model="row.month12" type="number" />
</template>
</el-table-column>
<!-- 其他列 -->
</el-table>
</el-row>
<div class="tit" style="margin:10px 0">
完工量情况
</div>
<el-dialog v-model="showDialog" title="选择项目成员" width="70%">
<customDialog @customEvent="customEvent"></customDialog>
<el-row>
<el-col :span="8">
<el-form-item label="今日完工量" prop="remark">
<el-input v-model="today_workload" type="num" readonly clearable placeholder="请输入今日完工量" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="单位" prop="unit">
<el-input v-model="unit" readonly clearable placeholder="请输入单位" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="单价" prop="remark">
<el-input v-model="price" readonly clearable placeholder="请输入单价" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="金额" prop="remark">
<el-input v-model="amount" readonly clearable placeholder="请输入金额" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="现场照片" prop="file">
<material-picker v-model="formData.file" :limit="100" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
<el-dialog v-model="showDialog" title="选择项目人员" width="70%">
<customDialog @customEvent="customEvent" :project_id="project_id"></customDialog>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent2"></projectDialog>
<buildplanDialog @customEvent="customEvent2"></buildplanDialog>
</el-dialog>
<personnelselector ref="personnel" @confirm="submituser" type="1"></personnelselector>
</el-form>
@ -185,12 +179,12 @@
</template>
<script lang="ts" setup name="projectEdit">
import customDialog from '@/components/project-member/index.vue'
import customDialog from '@/components/project_personnel/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import salescontractDialog from '@/components/salescontract/index.vue'
import projectDialog from '@/components/project/index.vue'
import { apiProjectplanAdd, apiProjectplanEdit, apiProjectplanDetail } from '@/api/project_plan'
import buildplanDialog from '@/components/build_plan/index.vue'
import { buildreportAdd, buildreportEdit, buildreportDetail } from '@/api/build/build_report'
import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype'
@ -199,14 +193,27 @@ import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import type { PropType } from 'vue'
import feedback from '@/utils/feedback'
const project_name = ref('')
const project_code = ref('')
const custom_name = ref('')
const manage_name = ref('')
const personnel = ref<any>()
const plan_start_date = ref('')
const plan_end_date = ref('')
const project_member_name = ref('')
const workload = ref('')
const work_content = ref('')
const process_step_no = ref('')
const process_step = ref('')
const amount = ref(0)
const unit = ref('')
const today_workload = ref('')
const zy_code = ref('')
const price = ref(0)
const project_id = ref(0)
const quality_control_points = ref('')
const process_file = ref([])
const personnel = ref<any>()
const num = ref(0)
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -220,27 +227,39 @@ const mode = ref('add')
const showDialog = ref(false)
const showDialog2 = ref(false)
const formDataannex = reactive([])
const customEvent2 = (e: any) => {
formData.project_id = e.id;
project_name.value = e.name;
formData.plan_id = e.id;
project_id.value = e.project_id
zy_code.value = e.zy_code
project_name.value = e.project_name;
project_code.value = e.project_code;
custom_name.value = e.custom_name;
plan_start_date.value = e.plan_start_date
plan_end_date.value = e.plan_end_date
project_member_name.value = e.project_member_name
workload.value = e.workload
work_content.value = e.work_content
process_step_no.value = e.process_step_no
process_step.value = e.process_step
quality_control_points.value = e.quality_control_points
showDialog2.value = false;
};
const customEvent = (e: any) => {
showDialog2.value = false;
tableData.value[num.value].name1 = e.name
tableData.value[num.value].name2 = e.idcard
tableData.value[num.value].name3 = e.work_type_text
tableData.value[num.value].person_id = e.id
showDialog.value = false;
};
const tableData = ref([
//
{ name1: "", name2: "", month1: ' ', month2: ' ', month3: ' ', month4: ' ', month5: ' ', month6: ' ', month7: ' ', month8: ' ', month9: ' ', month10: ' ', month11: ' ', month12: ' ', },
{},
]);
const handleAdd = (row) => {
// row
const index = tableData.value.indexOf(row);
tableData.value.splice(index + 1, 0, { name1: "", name2: "", month1: ' ', month2: ' ', month3: ' ', month4: ' ', month5: ' ', month6: ' ', month7: ' ', month8: ' ', month9: ' ', month10: ' ', month11: ' ', month12: ' ', });
tableData.value.splice(index + 1, 0, {});
};
const handleDelete = (row) => {
@ -250,20 +269,14 @@ const handleDelete = (row) => {
};
//
//
const amouttol = (e) => {
const userclick = () => {
// console.log(personnel.value, '1111111')
personnel.value.open()
today_workload.value = tableData.value.reduce((total, item) => {
return total + parseInt(item.work_num);
}, 0);
}
//
const submituser = (e: any) => {
formData.project_manage = e.id;
manage_name.value = e.name;
}
//
const amountinput = (e) => {
@ -274,23 +287,16 @@ const amountinput = (e) => {
}
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目计划表' : '新增项目计划表'
return mode.value == 'edit' ? '编辑施工汇报表' : '新增施工汇报表'
})
//
const formData = reactive({
id: '',
org_id: "",
dept_id: "",
project_id: 0,
declare_time: '',
project_manage: '',
project_approval_date: "",
start_time: "",
deliver_time: "",
remark: "",
annex: "",
process_approval: '{"current_step":"1","action":"1","submit_step":"2","check_user":"2","check_opinions":"dgfdsfds","copy_user":"3,4"}'
plan_id: '',
file: '',
remark: '',
person_detail: '',
})
@ -299,37 +305,13 @@ const formRules = reactive<any>({
})
//
const getlist = () => {
getAll().then((res) => {
Object.assign(list1, res)
if (res.length > 0) {
formData.org_id = res[0].id
deptAll({ 'org_id': res[0].id }).then((res) => {
if (res.length > 0) {
Object.assign(list2, res)
formData.dept_id = res[0].id
}
})
}
})
}
const deptrmt = (e) => {
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
})
}
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
if (data.file && data.file.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
const arry1 = data.file.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
@ -346,20 +328,23 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
custom_name.value = data.custom_name
zy_code.value = data.zy_code
project_name.value = data.project_name
project_code.value = data.project_code
manage_name.value = data.project_manager_name
plan_start_date.value = data.plan_start_date
plan_end_date.value = data.plan_end_date
project_member_name.value = data.project_member_name
workload.value = data.workload
work_content.value = data.work_content
process_step_no.value = data.process_step_no
process_step.value = data.process_step
quality_control_points.value = data.quality_control_points
if (data && data.contract_name) {
contract_name.value = data.contract_name;
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiProjectplanDetail({
const data = await buildreportDetail({
id: row.id
})
setFormData(data)
@ -369,27 +354,43 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = JSON.stringify(formDataannex.map((item: any) => item.uri))
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
}
if (tableData.value.length > 0) {
formData.person_detail = JSON.stringify(tableData.value.map(({ name1, name2, name3, ...rest }) => rest))
}
if (formData.file.length > 0) {
formData.file = JSON.stringify(formData.file)
}
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'
? await apiProjectplanEdit(data)
: await apiProjectplanAdd(data)
? await buildreportEdit(data)
: await buildreportAdd(data)
popupRef.value?.close()
emit('success')
}
//
const subjectmu = (row, i, a) => {
// console.log(row, i, a)
if (project_id.value) {
num.value = a
showDialog.value = true
} else {
feedback.msgError('请先选择施工计划')
}
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
getlist()
}

View File

@ -33,41 +33,38 @@
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="处理流程" prop="sort" show-overflow-tooltip />
<el-table-column label="施工汇报单号" prop="sort" show-overflow-tooltip />
<el-table-column label="作业编码" prop="zy_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="节点名称" prop="sort" show-overflow-tooltip />
<el-table-column label="是否末节点" prop="sort" show-overflow-tooltip />
<el-table-column label="一级节点" prop="sort" show-overflow-tooltip />
<el-table-column label="二级节点" prop="sort" show-overflow-tooltip />
<el-table-column label="三级节点" prop="sort" show-overflow-tooltip />
<el-table-column label="四级节点" prop="sort" show-overflow-tooltip />
<el-table-column label="五级节点" prop="sort" show-overflow-tooltip />
<el-table-column label="六级节点" prop="sort" show-overflow-tooltip />
<el-table-column label="七级节点" prop="sort" show-overflow-tooltip />
<el-table-column label="八级节点" prop="sort" show-overflow-tooltip />
<el-table-column label="九级节点" prop="sort" show-overflow-tooltip />
<el-table-column label="计划开始日期" prop="start_time" show-overflow-tooltip />
<el-table-column label="计划结束日期" prop="deliver_time" show-overflow-tooltip />
<el-table-column label="负责人" prop="project_manager_name" show-overflow-tooltip />
<el-table-column label="预算工时" prop="sort" show-overflow-tooltip />
<el-table-column label="工时单价" prop="sort" show-overflow-tooltip />
<el-table-column label="预算工时费" prop="sort" show-overflow-tooltip />
<el-table-column label="实际开始日期" prop="sort" show-overflow-tooltip />
<el-table-column label="实际结束日期" prop="sort" show-overflow-tooltip />
<el-table-column label="实际工时" prop="sort" show-overflow-tooltip />
<el-table-column label="实际工时费" prop="sort" show-overflow-tooltip />
<el-table-column label="权重" prop="sort" show-overflow-tooltip />
<el-table-column label="工时进度" prop="sort" show-overflow-tooltip />
<el-table-column label="输出资料" prop="sort" show-overflow-tooltip />
<el-table-column label="权重" prop="sort" show-overflow-tooltip />
<el-table-column label="备注" prop="sort" show-overflow-tooltip />
<el-table-column label="排序号" prop="sort" show-overflow-tooltip />
<el-table-column label="关键里程碑" prop="sort" show-overflow-tooltip />
<el-table-column label="分项工程" prop="subentry_engineering" show-overflow-tooltip />
<el-table-column label="工序步骤" prop="process_step" show-overflow-tooltip />
<el-table-column label="质量控制点" prop="quality_control_points" show-overflow-tooltip />
<el-table-column label="图例说明" prop="file" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.file && row.file.length > 0">
<div v-for="(item, i) in row.file " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
<el-table-column label="工序步骤号" prop="process_step_no" show-overflow-tooltip />
<el-table-column label="班组长" prop="project_member_name" show-overflow-tooltip />
<el-table-column label="施工人员" prop="work_user" show-overflow-tooltip />
<el-table-column label="施工内容" prop="work_content" show-overflow-tooltip />
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_plan/edit']" type="primary" link @click="handleEdit(row)">
<!-- <el-button v-perms="['project.project_plan/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
</el-button> -->
<el-button v-perms="['project.project_plan/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
@ -91,10 +88,9 @@
<script lang="ts" setup name="projectLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiProjectplanLists, apiProjectplanDelete, apiProjectplanDetail } from '@/api/project_plan'
import { buildreportLists, buildreportDelete, buildreportDetail } from '@/api/build/build_report'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
@ -138,7 +134,7 @@ const handleSelectionChange = (val: any[]) => {
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiProjectplanLists,
fetchFun: buildreportLists,
params: queryParams
})
@ -153,7 +149,7 @@ const handleAdd = async () => {
//
const handleEdit = async (data: any) => {
console.log(data.id)
let res = await apiProjectplanDetail({ id: data.id })
let res = await buildreportDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
@ -163,11 +159,11 @@ const handleEdit = async (data: any) => {
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiProjectplanDelete({ id })
await buildreportDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await apiProjectplanDetail({ id: data.id })
let res = await buildreportDetail({ id: data.id })
showDtail.value = true
await nextTick()
detailRef.value?.open()

View File

@ -0,0 +1,91 @@
<template>
<div>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="index" label="序号" width="55" />
<el-table-column label="施工汇报单号" prop="zy_code" show-overflow-tooltip />
<el-table-column label="作业编码" prop="zy_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="分项工程" prop="subentry_engineering" show-overflow-tooltip />
<el-table-column label="工序步骤" prop="process_step" show-overflow-tooltip />
<el-table-column label="日期" prop="sort" show-overflow-tooltip />
<el-table-column label="姓名" prop="user_name" show-overflow-tooltip />
<el-table-column label="身份证号" prop="user_idcard" show-overflow-tooltip />
<el-table-column label="工种" prop="user_work_type" show-overflow-tooltip />
<el-table-column label="今日完工量" prop="work_num" show-overflow-tooltip />
<el-table-column label="单价" prop="price" show-overflow-tooltip />
<el-table-column label="金额" prop="amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<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" />
</div>
</template>
<script lang="ts" setup name="projectLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { buildreportDetaillists } from '@/api/build/build_report_detail'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
//
const queryParams = reactive({
deliver_time: '',
start_time: '',
declare_time: ''
})
//
const dateclick = (e: any) => {
queryParams.start_time = e[0]
queryParams.deliver_time = e[1]
}
//
const reset = () => {
Object.assign(queryParams, {
project_approval_date: '',
start_date: '',
delivery_date: '',
})
getLists()
}
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: buildreportDetaillists,
params: queryParams
})
getLists()
</script>

View File

@ -37,7 +37,18 @@
</el-table-column>
<el-table-column label="方案内容" prop="solution_content" show-overflow-tooltip />
<el-table-column label="客户反馈" prop="customer_feedback" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['custom.customer_demand_solution/edit']" type="primary" link @click="handleEdit(row)">

View File

@ -123,20 +123,16 @@ const formData = reactive({
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}

View File

@ -287,20 +287,16 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}

View File

@ -136,20 +136,16 @@ const formData = reactive({
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}

View File

@ -281,20 +281,16 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}

View File

@ -7,20 +7,17 @@
<el-col :span="12">
<el-form-item label="客户名称" prop="field101">
<el-input v-model="formData.field101" placeholder="点击选择客户" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
<el-input v-model="formData.field101" placeholder="点击选择客户" :disabled='true' clearable :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日期" prop="field102">
<el-date-picker v-model="formData.field102" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
:style="{ width: '100%' }" placeholder="请选择日期" clearable></el-date-picker>
<el-date-picker v-model="formData.field102" format="yyyy-MM-dd" value-format="yyyy-MM-dd" :style="{ width: '100%' }" placeholder="请选择日期" clearable></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同编号" prop="field103">
<el-input v-model="formData.field103" placeholder="点击选择销售i/项目合同" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
<el-input v-model="formData.field103" placeholder="点击选择销售/项目合同" :disabled='true' clearable :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
@ -32,15 +29,13 @@
<el-col :span="12">
<el-form-item label="期次" prop="field105">
<el-select v-model="formData.field105" placeholder="请选择期次" clearable :style="{ width: '100%' }">
<el-option v-for="(item, index) in field105Options" :key="index" :label="item.label"
:value="item.value" :disabled="item.disabled"></el-option>
<el-option v-for="(item, index) in field105Options" :key="index" :label="item.label" :value="item.value" :disabled="item.disabled"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收款性质" prop="field106">
<el-input v-model="formData.field106" placeholder="请输入收款性质" clearable
:style="{ width: '100%' }">
<el-input v-model="formData.field106" placeholder="请输入收款性质" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
</el-col>
@ -58,30 +53,25 @@
</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 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="field110">
<el-select v-model="formData.field110" placeholder="请选择付款方式" clearable
:style="{ width: '100%' }">
<el-option v-for="(item, index) in field110Options" :key="index" :label="item.label"
:value="item.value" :disabled="item.disabled"></el-option>
<el-select v-model="formData.field110" placeholder="请选择付款方式" clearable :style="{ width: '100%' }">
<el-option v-for="(item, index) in field110Options" :key="index" :label="item.label" :value="item.value" :disabled="item.disabled"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="累计回数" prop="field111">
<el-input v-model="formData.field111" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
<el-input v-model="formData.field111" placeholder="系统自动填写" :disabled='true' clearable :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="款项说明" prop="field112">
<el-input v-model="formData.field112" placeholder="请输入款项说明" clearable
:style="{ width: '100%' }">
<el-input v-model="formData.field112" placeholder="请输入款项说明" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
</el-col>
@ -99,8 +89,7 @@
</el-col>
<el-col :span="24">
<el-form-item label="附件" prop="field115">
<el-upload ref="field115" :file-list="field115fileList" :action="field115Action"
:before-upload="field115BeforeUpload">
<el-upload ref="field115" :file-list="field115fileList" :action="field115Action" :before-upload="field115BeforeUpload">
<el-button size="small" type="primary" icon="el-icon-upload">点击上传</el-button>
</el-upload>
</el-form-item>
@ -113,35 +102,29 @@
<el-row :gutter="10">
<el-col :span="24">
<el-form-item label="账户编码" prop="field116">
<el-input v-model="formData.field116" placeholder="点击选择收款账户" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
<el-input v-model="formData.field116" placeholder="点击选择收款账户" :disabled='true' clearable :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="开户银行" prop="field117">
<el-input v-model="formData.field117" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
<el-input v-model="formData.field117" placeholder="系统自动填写" :disabled='true' clearable :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="账号" prop="field118">
<el-input v-model="formData.field118" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
<el-input v-model="formData.field118" placeholder="系统自动填写" :disabled='true' clearable :style="{ width: '100%' }"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="是否计息" prop="field119">
<el-radio-group v-model="formData.field119" size="medium">
<el-radio v-for="(item, index) in field119Options" :key="index" :label="item.value"
:disabled="item.disabled">{{ item.label }}</el-radio>
<el-radio v-for="(item, index) in field119Options" :key="index" :label="item.value" :disabled="item.disabled">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="开始计息日期" prop="field120">
<el-time-picker v-model="formData.field120" format="HH:mm:ss" value-format="HH:mm:ss"
:picker-options='{ "selectableRange": "00:00:00-23:59:59" }' :style="{ width: '100%' }"
placeholder="请选择开始计息日期" clearable></el-time-picker>
<el-time-picker v-model="formData.field120" format="HH:mm:ss" value-format="HH:mm:ss" :picker-options='{ "selectableRange": "00:00:00-23:59:59" }' :style="{ width: '100%' }" placeholder="请选择开始计息日期" clearable></el-time-picker>
</el-form-item>
</el-col>
<el-col :span="24">

View File

@ -3,26 +3,21 @@
<el-card>
<el-form ref="elForm" :model="formData" :rules="rules" size="medium" label-width="120px" label-position="left">
<el-form-item label="客户名称" prop="field101">
<el-input v-model="formData.field101" placeholder="点击选择客户" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
<el-input v-model="formData.field101" placeholder="点击选择客户" :disabled='true' clearable :style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="合同编号" prop="field102">
<el-input v-model="formData.field102" placeholder="点击选择户销售合同" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
<el-input v-model="formData.field102" placeholder="选择销售合同" :disabled='true' clearable :style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="合同名称" prop="field103">
<el-input v-model="formData.field103" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
<el-input v-model="formData.field103" placeholder="系统自动填写" :disabled='true' clearable :style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="期次" prop="field106">
<el-select v-model="formData.field106" placeholder="请选择期次" clearable :style="{ width: '100%' }">
<el-option v-for="(item, index) in field106Options" :key="index" :label="item.label"
:value="item.value" :disabled="item.disabled"></el-option>
<el-option v-for="(item, index) in field106Options" :key="index" :label="item.label" :value="item.value" :disabled="item.disabled"></el-option>
</el-select>
</el-form-item>
<el-form-item label="计划回款日期" prop="field107">
<el-date-picker v-model="formData.field107" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
:style="{ width: '100%' }" placeholder="请选择计划回款日期" clearable></el-date-picker>
<el-date-picker v-model="formData.field107" format="yyyy-MM-dd" value-format="yyyy-MM-dd" :style="{ width: '100%' }" placeholder="请选择计划回款日期" clearable></el-date-picker>
</el-form-item>
<el-form-item label="金额" prop="field108">
<el-input v-model="formData.field108" placeholder="请输入金额" clearable :style="{ width: '100%' }">
@ -30,21 +25,18 @@
</el-form-item>
<el-form-item label="是否回款" prop="field109">
<el-radio-group v-model="formData.field109" size="medium">
<el-radio v-for="(item, index) in field109Options" :key="index" :label="item.value"
:disabled="item.disabled">{{ item.label }}</el-radio>
<el-radio v-for="(item, index) in field109Options" :key="index" :label="item.value" :disabled="item.disabled">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="回款责任人" prop="field110">
<el-input v-model="formData.field110" placeholder="点击指定责任人" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
<el-input v-model="formData.field110" placeholder="点击指定责任人" :disabled='true' clearable :style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="备注" prop="field111">
<el-input v-model="formData.field111" placeholder="请输入备注" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="附件" prop="field112">
<el-upload ref="field112" :file-list="field112fileList" :action="field112Action"
:before-upload="field112BeforeUpload">
<el-upload ref="field112" :file-list="field112fileList" :action="field112Action" :before-upload="field112BeforeUpload">
<el-button size="small" type="primary" icon="el-icon-upload">点击上传</el-button>
</el-upload>
</el-form-item>

View File

@ -1,13 +1,26 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="行政付款详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" title="承兑汇票详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="合同编号">
{{ formData.contract.contract_no }}
{{ formData.contract.contract_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目名称">
{{ formData.project.name
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编号">
{{ formData.project.project_code }}
</el-form-item>
</el-col>
@ -19,44 +32,54 @@
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="供应商名称">
<el-col :span="12">
<el-form-item label="客户名称">
{{ formData.custom.name
}}
</el-form-item>
</el-col> -->
</el-col>
<el-col :span="12">
<el-form-item label="申请日期">
{{ formData.apply_date
<el-form-item label="收票日期">
{{ formData.receipt_date
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请人">
{{ formData.applier }}
<el-form-item label="票据编号">
{{ formData.bill_sn }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同金额">
{{ formData.amount_daxie }}
<el-form-item label="收票银行">
{{ formData.acceptance_bank_no }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="付款方式">
<dict-value :options="dictData.pay_type" :value="formData.pay_type" />
<el-form-item label="合同类型">
<dict-value :options="dictData.contract_type" :value="formData.contract_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="汇票类型">
<dict-value :options="dictData.bill_type" :value="formData.bill_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="本次支付金额">
{{ formData.payment_amount }}
<el-form-item label="收款金额">
{{ formData.receipt_amount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收款金额大写
">
{{ formData.receipt_amount_daxie }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收款银行">
{{ formData.deposit_bank }}
<el-form-item label="汇票承兑银行">
{{ formData.draft_acceptance_bank }}
</el-form-item>
</el-col>
@ -71,12 +94,15 @@
<el-col :span="24">
<el-form-item label="附件">
<div>
<div v-if="formDataannex.length > 0">
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<div v-else>
暂无文件
</div>
</el-form-item>
</el-col>
@ -123,20 +149,16 @@ const formData = reactive({
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}

View File

@ -8,43 +8,43 @@
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="组织" prop="org_id">
<el-form-item label="组织" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select> </el-form-item></el-col>
<el-col :span="8">
<el-form-item label="请选择部门" prop="dept_id">
<el-form-item label="请选择部门" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select></el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="客户名称" prop="customer_id" @click="showDialog = true">
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog = true">
<el-input v-model="customer_name" readonly clearable placeholder="请输入客户名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="reimburser">
<el-form-item label="项目名称" prop="project_id" @click="showDialog1 = true">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="reimburser">
<el-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同名称" prop="reimburser">
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
<el-form-item label="合同名称" prop="reimburser" @click="showDialog2 = true">
<el-input v-model="contract_name" readonly clearable placeholder="请输入合同名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同编码" prop="reimburser">
<el-input v-model="contract_no" clearable placeholder="请输入合同编码" />
<el-input v-model="contract_no" readonly clearable placeholder="请输入合同编码" />
</el-form-item>
</el-col>
@ -55,33 +55,33 @@
</el-select>
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="收票日期" prop="invoice_date">
<el-date-picker class="flex-1 !flex" v-model="formData.invoice_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择收票日期">
<el-form-item label="收票日期" prop="receipt_date" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.receipt_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择收票日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="票据编号" prop="bill_sn">
<el-form-item label="票据编号" prop="bill_sn" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.bill_sn" clearable placeholder="请输入票据编号" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收票银行" prop="reimburser">
<el-input v-model="formData.reimburser" clearable placeholder="请输入收票银行" />
<el-form-item label="收票银行" prop="bank_account_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="acceptance_bank" clearable placeholder="请输入收票银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收票账户编码" prop="reimburser">
<el-input v-model="formData.reimburser" clearable placeholder="请输入收票账户编码" />
<el-form-item label="收票账户编码" prop="bank_account_id">
<el-input v-model="acceptance_bank_no" clearable placeholder="请输入收票账户编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="汇票类型" prop="bill_type">
<el-form-item label="汇票类型" prop="bill_type" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-radio-group v-model="formData.bill_type" placeholder="请选择汇票类型">
<el-radio v-for="(item, index) in dictData.bill_type" :key="index" :label="parseInt(item.value)">
{{ item.name }}
@ -93,13 +93,13 @@
</el-col>
<el-col :span="8">
<el-form-item label="汇票承兑银行" prop="draft_acceptance_bank">
<el-input v-model="formData.draft_acceptance_bank" readonly clearable placeholder="请输入汇票承兑银行" />
<el-form-item label="汇票承兑银行" prop="draft_acceptance_bank" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.draft_acceptance_bank" clearable placeholder="请输入汇票承兑银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="汇票到期日期" prop="bill_due_date">
<el-form-item label="汇票到期日期" prop="bill_due_date" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.bill_due_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择汇票到期日期">
</el-date-picker>
</el-form-item>
@ -107,13 +107,13 @@
<el-col :span="8">
<el-form-item label="收款金额" prop="receipt_amount">
<el-form-item label="收款金额" prop="receipt_amount" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.receipt_amount" clearable placeholder="请输入收款金额" @input="amountinput" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款金额大写" prop="receipt_amount_daxie">
<el-form-item label="收款金额大写" prop="receipt_amount_daxie" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.receipt_amount_daxie" readonly clearable placeholder="请输入收款金额大写" />
</el-form-item>
@ -149,17 +149,20 @@
<el-dialog v-model="showDialog1" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent1"></projectDialog>
<projectDialog @customEvent="customEvent1" :customer_id="formData.customer_id"></projectDialog>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择合同" width="70%">
<proontractDialog @customEvent="customEvent2"></proontractDialog>
<el-dialog v-model="showDialog2" title="选择销售合同" width="70%">
<salescontract @customEvent="customEvent2" contract_type="2"></salescontract>
</el-dialog>
<el-dialog v-model="showDialog" title="选择客户" width="70%">
<customDialog @customEvent="customEvent"></customDialog>
</el-dialog>
<el-dialog v-model="showDialog3" title="选择银行" width="70%">
<bankaccountDialog @customEvent="customEvent3"></bankaccountDialog>
</el-dialog>
</el-form>
</popup>
@ -171,7 +174,8 @@ import customDialog from '@/components/custom-dialog/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import proontractDialog from '@/components/proontract/index.vue'
import bankaccountDialog from '@/components/bankaccount/index.vue'
import salescontractDialog from '@/components/salescontract/index.vue'
import { acceptancebillAdd, acceptancebillEdit, acceptancebillDetail } from '@/api/acceptance'
import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype'
@ -192,6 +196,9 @@ const contract_no = ref('')
const customer_name = ref('')
const project_name = ref('')
const project_code = ref('')
const contract_type = ref('')
const acceptance_bank_no = ref('')
const acceptance_bank = ref('')
const list1 = reactive([])
const list2 = reactive([])
@ -237,7 +244,7 @@ const showDialog = ref(false)
const showDialog1 = ref(false)
const showDialog2 = ref(false)
const showDialog3 = ref(false)
@ -249,10 +256,25 @@ const customEvent = (e: any) => {
};
const customEvent1 = (e: any) => {
formData.contract_id = e.id;
project_name.value = e.name;
project_code.value = e.project_code;
showDialog1.value = false;
};
const customEvent2 = (e: any) => {
formData.project_id = e.id
contract_name.value = e.contract_name;
contract_no.value = e.contract_code;
contract_type.value = e.contract_type;
showDialog2.value = false;
};
const customEvent3 = (e: any) => {
showDialog3.value = false;
};
//
const getlist = () => {
@ -294,7 +316,7 @@ const formData = reactive({
customer_id: 0,
project_id: 0,
contract_id: 0,
invoice_type: "",
receipt_date: "",
bill_sn: "",
bank_account_id: 0,
bill_type: 0,
@ -317,21 +339,17 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
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)
}
}
@ -341,9 +359,19 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
if (data.dept_id) {
getlist1(data.dept_id)
}
contract_name.value = data.contract.contract_name;
contract_no.value = data.contract.contract_code;
project_name.value = data.project.name;
project_code.value = data.project.project_code;
contract_type.value = data.contract.contract_type;
customer_name.value = data.custom.name
if (formData.reimbursement_amount) {
toChinesNum(formData.reimbursement_amount)
acceptance_bank_no.value = data.bankAccount.account_sn
acceptance_bank.value = data.bankAccount.deposit_bank
if (data.reimbursement_amount) {
toChinesNum(data.reimbursement_amount)
}
@ -361,7 +389,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri).toString()
formData.annex = JSON.stringify(formDataannex.map((item: any) => item.uri))
}

View File

@ -2,16 +2,22 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="提交人" prop="commitor">
<el-input class="w-[280px]" v-model="queryParams.commitor" clearable placeholder="请输入提交人" />
<el-form-item label="票据编号" prop="bill_sn">
<el-input class="w-[280px]" v-model="queryParams.bill_sn" clearable placeholder="请输入票据编号" />
</el-form-item>
<el-form-item label="报销id" prop="expense_id">
<el-input class="w-[280px]" v-model="queryParams.expense_id" clearable placeholder="请输入报销id" />
<el-form-item label="客户" prop="customer_id">
<el-select class="w-[280px]" v-model="queryParams.customer_id" clearable placeholder="请选择客户">
<el-option v-for="(item, index) in customerlist" :key="index" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="发票类型" prop="cost_subject_id">
<el-select class="w-[280px]" v-model="queryParams.cost_subject_id" clearable placeholder="请选择费用科目id">
<el-option v-for="(item, index) in dictData.invoice_type" :key="index" :label="item.name" :value="item.value" />
<el-form-item label="合同" prop="contract">
<el-select class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in contractlist" :key="index" :label="item.contract_name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="汇票类型" prop="bill_type">
<el-select class="w-[280px]" v-model="queryParams.bill_type" clearable placeholder="请选择汇票类型">
<el-option v-for="(item, index) in dictData.bill_type" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
@ -37,19 +43,24 @@
<el-table-column label="序号" type="index" show-overflow-tooltip />
<el-table-column label="处理流程" prop="project_code" show-overflow-tooltip />
<el-table-column label="流程步骤" prop="project_code" show-overflow-tooltip />
<el-table-column label="组织名称" prop="approve_no" show-overflow-tooltip />
<el-table-column label="客户名称" prop="contract_no" show-overflow-tooltip />
<el-table-column label="项目名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="supplier_name" show-overflow-tooltip />
<el-table-column label="收票日期" prop="apply_date" show-overflow-tooltip />
<el-table-column label="票据编号" prop="applier" show-overflow-tooltip />
<el-table-column label="收票银行" prop="payment_amount" show-overflow-tooltip />
<el-table-column label="汇票类型" prop="invoice_amount" show-overflow-tooltip />
<el-table-column label="汇票到期日期" prop="amount_excluding_tax" show-overflow-tooltip />
<el-table-column label="收款金额(元)" prop="tax" show-overflow-tooltip />
<el-table-column label="支出金额" prop="tax" show-overflow-tooltip />
<el-table-column label="兑现金额" prop="tax" show-overflow-tooltip />
<el-table-column label="余额" prop="tax" show-overflow-tooltip />
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
<el-table-column label="客户名称" prop="customer_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="收票日期" prop="receipt_date" show-overflow-tooltip />
<el-table-column label="票据编号" prop="bill_sn" show-overflow-tooltip />
<el-table-column label="收票银行" prop="account_name" show-overflow-tooltip />
<el-table-column label="汇票类型" prop="bill_type" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.bill_type" :value="row.bill_type" />
</template>
</el-table-column>
<el-table-column label="汇票到期日期" prop="bill_due_date" show-overflow-tooltip />
<el-table-column label="收款金额(元)" prop="receipt_amount" show-overflow-tooltip />
<el-table-column label="支出金额" prop="pay_amount" show-overflow-tooltip />
<el-table-column label="兑现金额" prop="cash_amount" show-overflow-tooltip />
<el-table-column label="余额" prop="balance" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="150" fixed="right">
@ -82,7 +93,8 @@ import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { acceptancebillLists, acceptancebillDelete, acceptancebillDetail } from '@/api/acceptance'
import { timeFormat } from '@/utils/util'
import { apiCustomLists } from '@/api/custom'
import { apiProcurementContractLists } from '@/api/procurement_contract'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
@ -91,13 +103,14 @@ const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const showDtail = ref(false)
const contractlist = ref([])
const customerlist = ref([])
//
const queryParams = reactive({
commitor: '',
expense_id: '',
invoice_type: '',
bill_type: '',
customer_id: '',
contract_id: '',
bill_sn: ''
})
@ -142,6 +155,7 @@ const handleDelete = async (id: number | any[]) => {
await acceptancebillDelete({ id })
getLists()
}
//
const handledetail = async (data: any) => {
let res = await acceptancebillDetail({ id: data.id })
showDtail.value = true
@ -149,7 +163,29 @@ const handledetail = async (data: any) => {
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
//
const customerList = () => {
apiCustomLists({
page_no: 1,
page_size: 9999,
}).then((res) => {
customerlist.value = res.lists
})
}
//
const contractList = () => {
apiProcurementContractLists({
page_no: 1,
page_size: 9999,
all: 1
}).then((res) => {
contractlist.value = res.lists
})
}
customerList()
contractList()
getLists()
</script>

View File

@ -1,25 +1,26 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="行政付款详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" title="汇票兑现详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="合同编号">
{{ formData.contract.contract_no }}
<el-form-item label="组织名称">
{{ formData.org.name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同名称">
{{ formData.contract.contract_name
<el-form-item label="部门名称">
{{ formData.org.name
}}
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="供应商名称">
{{ formData.custom.name
@ -27,40 +28,51 @@
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="申请日期">
{{ formData.apply_date
<el-form-item label="票据编号">
{{ formData.acceptance.bill_sn
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请人">
{{ formData.applier }}
<el-form-item label="汇票类型">
<dict-value :options="dictData.bill_type" :value="formData.acceptance.bill_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同金额">
<el-form-item label="汇票承兑银行">
{{ formData.acceptance.draft_acceptance_bank }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收票账户编码">
{{ formData.bankAccount.account }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收票账户">
{{ formData.bankAccount.account_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="兑现日期">
{{ formData.maturity_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="兑现金额">
{{ formData.amount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="兑现金额大写">
{{ formData.amount_daxie }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="付款方式">
<dict-value :options="dictData.pay_type" :value="formData.pay_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="本次支付金额">
{{ formData.payment_amount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收款银行">
{{ formData.deposit_bank }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注">
{{ formData.remark
@ -70,14 +82,13 @@
<el-col :span="24">
<el-form-item label="附件">
<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 v-if="formDataannex.length > 0">
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</el-form-item>
</div>
<div v-else>暂无文件</div>
</el-col>
</el-row>
@ -122,21 +133,17 @@ const formData = reactive({
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
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)
}
}

View File

@ -9,19 +9,19 @@
<el-col :span="8">
<el-form-item label="组织" prop="org_id">
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select> </el-form-item></el-col>
<el-col :span="8">
<el-form-item label="请选择部门" prop="dept_id">
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select></el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="票据编号" prop="bill_sn">
<el-input v-model="formData.bill_sn" clearable placeholder="请输入票据编号" />
<el-form-item label="票据编号" prop="acceptance_bill_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog = true">
<el-input v-model="bill_sn" clearable readonly placeholder="请输入票据编号" />
</el-form-item>
</el-col>
@ -29,8 +29,8 @@
<el-col :span="8">
<el-form-item label="汇票类型" prop="bill_type">
<el-radio-group v-model="formData.bill_type" placeholder="请选择汇票类型">
<el-form-item label="汇票类型" prop="acceptance_bill_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-radio-group v-model="bill_type" readonly placeholder="请选择汇票类型">
<el-radio v-for="(item, index) in dictData.bill_type" :key="index" :label="parseInt(item.value)">
{{ item.name }}
</el-radio>
@ -41,34 +41,34 @@
</el-col>
<el-col :span="8">
<el-form-item label="汇票承兑银行" prop="draft_acceptance_bank">
<el-input v-model="formData.draft_acceptance_bank" readonly clearable placeholder="请输入汇票承兑银行" />
<el-form-item label="汇票承兑银行" prop="acceptance_bill_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="draft_acceptance_bank" readonly clearable placeholder="请输入汇票承兑银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="汇票到期日期" prop="bill_due_date">
<el-date-picker class="flex-1 !flex" v-model="formData.bill_due_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择汇票到期日期">
<el-form-item label="汇票到期日期" prop="acceptance_bill_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" readonly v-model="bill_due_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择汇票到期日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收票账户编码" prop="reimburser">
<el-input v-model="formData.reimburser" clearable placeholder="请输入收票账户编码" />
<el-form-item label="收票账户编码" prop="acceptance_bill_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="bank_account_no" readonly clearable placeholder="请输入收票账户编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收票银行" prop="reimburser">
<el-input v-model="formData.reimburser" clearable placeholder="请输入收票银行" />
<el-form-item label="收票银行" prop="acceptance_bill_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="bank_account" readonly clearable placeholder="请输入收票银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="兑现日期" prop="maturity_date">
<el-form-item label="兑现日期" prop="maturity_date" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.maturity_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择兑现日期">
</el-date-picker>
</el-form-item>
@ -76,13 +76,13 @@
<el-col :span="8">
<el-form-item label="兑现金额" prop="amount">
<el-form-item label="兑现金额" prop="amount" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.amount" clearable placeholder="请输入兑现金额" @input="amountinput" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="兑现金额大写" prop="amount_daxie">
<el-form-item label="兑现金额大写" prop="amount_daxie" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入兑现金额大写" />
</el-form-item>
@ -117,16 +117,8 @@
<el-dialog v-model="showDialog1" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent1"></projectDialog>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择合同" width="70%">
<proontractDialog @customEvent="customEvent2"></proontractDialog>
</el-dialog>
<el-dialog v-model="showDialog" title="选择客户" width="70%">
<customDialog @customEvent="customEvent"></customDialog>
<el-dialog v-model="showDialog" title="选择汇票" width="70%">
<acceptanceDialog @customEvent="customEvent"></acceptanceDialog>
</el-dialog>
</el-form>
@ -136,11 +128,10 @@
</template>
<script lang="ts" setup name="projectEdit">
import customDialog from '@/components/custom-dialog/index.vue'
import acceptanceDialog from '@/components/acceptance/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import proontractDialog from '@/components/proontract/index.vue'
import { redemptionbillAdd, redemptionbillEdit, redemptionbillDetail } from '@/api/redemption_bill'
import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype'
@ -156,11 +147,14 @@ const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const active = ref(0)
const formDataannex = reactive([])
const contract_name = ref('')
const contract_no = ref('')
const customer_name = ref('')
const project_name = ref('')
const project_code = ref('')
const bill_sn = ref('')
const bill_type = ref('')
const bill_due_date = ref('')
const bank_account = ref('')
const bank_account_no = ref('')
const draft_acceptance_bank = ref('')
const list1 = reactive([])
const list2 = reactive([])
@ -203,8 +197,7 @@ const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const amount_daxie = ref('')
const showDialog = ref(false)
const showDialog1 = ref(false)
const showDialog2 = ref(false)
@ -212,14 +205,16 @@ const showDialog2 = ref(false)
const customEvent = (e: any) => {
formData.customer_id = e.id;
customer_name.value = e.name;
formData.acceptance_bill_id = e.id;
bill_sn.value = e.bill_sn
bill_due_date.value = e.bill_due_date
draft_acceptance_bank.value = e.draft_acceptance_bank
bill_type.value = e.bill_type
bank_account.value = e.account_name
bank_account_no.value = e.account
showDialog.value = false;
};
const customEvent1 = (e: any) => {
showDialog1.value = false;
};
@ -260,7 +255,7 @@ const formData = reactive({
id: '',
org_id: '',
dept_id: '',
supplier_id: 1,
acceptance_bill_id: 1,
maturity_date: "",
amount: "",
amount_daxie: "",
@ -278,21 +273,17 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
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)
}
}
@ -302,9 +293,18 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
customer_name.value = data.custom.name
if (formData.reimbursement_amount) {
toChinesNum(formData.reimbursement_amount)
if (data.dept_id) {
getlist1(data.dept_id)
}
// customer_name.value = data.custom.name
bill_sn.value = data.acceptance.bill_sn
bill_due_date.value = data.acceptance.bill_due_date
draft_acceptance_bank.value = data.acceptance.draft_acceptance_bank
bill_type.value = data.acceptance.bill_type
bank_account.value = data.bankAccount.deposit_bank
bank_account_no.value = data.bankAccount.account_sn
if (data.amount) {
toChinesNum(data.amount)
}
@ -322,7 +322,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri).toString()
formData.annex = JSON.stringify(formDataannex.map((item: any) => item.uri))
}

View File

@ -5,13 +5,19 @@
<el-form-item label="票据编号" prop="bill_sn">
<el-input class="w-[280px]" v-model="queryParams.bill_sn" clearable placeholder="请输入票据编号" />
</el-form-item>
<el-form-item label="客户id" prop="customer_id">
<el-input class="w-[280px]" v-model="queryParams.customer_id" clearable placeholder="请输入客户id" />
<el-form-item label="客户" prop="customer_id">
<el-select class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请选择客户">
<el-option v-for="(item, index) in customerlist" :key="index" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="销售合同id" prop="contract_id">
<el-select class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请选择销售合同id">
<el-option v-for="(item, index) in dictData.invoice_type" :key="index" :label="item.name" :value="item.value" />
<el-form-item label="合同" prop="contract">
<el-select class="w-[280px]" v-model="queryParams.customer_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in contractlist" :key="index" :label="item.contract_name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="汇票类型" prop="bill_type">
<el-select class="w-[280px]" v-model="queryParams.bill_type" clearable placeholder="请选择汇票类型">
<el-option v-for="(item, index) in dictData.bill_type" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
@ -37,17 +43,20 @@
<el-table-column label="序号" type="index" show-overflow-tooltip />
<el-table-column label="处理流程" prop="project_code" show-overflow-tooltip />
<el-table-column label="流程步骤" prop="project_code" show-overflow-tooltip />
<el-table-column label="组织名称" prop="approve_no" show-overflow-tooltip />
<el-table-column label="票据编号" prop="applier" show-overflow-tooltip />
<el-table-column label="收票银行" prop="payment_amount" show-overflow-tooltip />
<el-table-column label="汇票类型" prop="tax" show-overflow-tooltip />
<el-table-column label="汇票承兑银行" prop="tax" show-overflow-tooltip />
<el-table-column label="汇票到期日期" prop="tax" show-overflow-tooltip />
<el-table-column label="收票账户编码" prop="tax" show-overflow-tooltip />
<el-table-column label="收票银行" prop="tax" show-overflow-tooltip />
<el-table-column label="兑现日期" prop="tax" show-overflow-tooltip />
<el-table-column label="兑现金额" prop="tax" show-overflow-tooltip />
<el-table-column label="兑现金额大写" prop="tax" show-overflow-tooltip />
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
<el-table-column label="票据编号" prop="bill_sn" show-overflow-tooltip />
<el-table-column label="汇票类型" prop="bill_type" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.bill_type" :value="row.bill_type" />
</template>
</el-table-column>
<el-table-column label="汇票承兑银行" prop="draft_acceptance_bank" show-overflow-tooltip />
<el-table-column label="汇票到期日期" prop="bill_due_date" show-overflow-tooltip />
<el-table-column label="收票账户编码" prop="account" show-overflow-tooltip />
<el-table-column label="收票银行" prop="account_name" show-overflow-tooltip />
<el-table-column label="兑现日期" prop="maturity_date" show-overflow-tooltip />
<el-table-column label="兑现金额" prop="amount" show-overflow-tooltip />
<el-table-column label="兑现金额大写" prop="amount_daxie" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
@ -81,7 +90,8 @@ import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { redemptionbillLists, redemptionbillDelete, redemptionbillDetail } from '@/api/redemption_bill'
import { timeFormat } from '@/utils/util'
import { apiCustomLists } from '@/api/custom'
import { apiProcurementContractLists } from '@/api/procurement_contract'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
@ -90,13 +100,14 @@ const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const showDtail = ref(false)
const contractlist = ref([])
const customerlist = ref([])
//
const queryParams = reactive({
bill_sn: '',
bill_type: '',
customer_id: '',
invoice_type: '',
contract_id: '',
bill_sn: '',
})
@ -141,6 +152,7 @@ const handleDelete = async (id: number | any[]) => {
await redemptionbillDelete({ id })
getLists()
}
//
const handledetail = async (data: any) => {
let res = await redemptionbillDetail({ id: data.id })
showDtail.value = true
@ -149,7 +161,29 @@ const handledetail = async (data: any) => {
detailRef.value?.setFormData(res)
}
//
const customerList = () => {
apiCustomLists({
page_no: 1,
page_size: 9999,
}).then((res) => {
customerlist.value = res.lists
})
}
//
const contractList = () => {
apiProcurementContractLists({
page_no: 1,
page_size: 9999,
all: 1
}).then((res) => {
contractlist.value = res.lists
})
}
customerList()
contractList()
getLists()
</script>

View File

@ -1,10 +1,33 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="行政付款详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<popup ref="popupRef" title="汇票转出详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="组织名称">
{{ formData.org.name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门名称">
{{ formData.org.name
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商名称">
{{ formData.supplier_name
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同编号">
{{ formData.contract.contract_no }}
@ -12,55 +35,86 @@
</el-col>
<el-col :span="12">
<el-form-item label="项目名称">
{{ formData.project.name
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编号">
{{ formData.project.project_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同名称">
{{ formData.contract.contract_name
}}
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="供应商名称">
{{ formData.custom.name
}}
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="申请日期">
{{ formData.apply_date
}}
<el-form-item label="合同类型">
<dict-value :options="dictData.contract_type" :value="formData.contract.contract_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请人">
{{ formData.applier }}
<el-form-item label="票据编号">
{{ formData.acceptance.bill_sn
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="汇票类型">
<dict-value :options="dictData.bill_type" :value="formData.acceptance.bill_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同金额">
<el-form-item label="汇票承兑银行">
{{ formData.acceptance.draft_acceptance_bank }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收票账户编码">
{{ formData.bankAccount.account }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收票账户">
{{ formData.bankAccount.account_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="汇票到期日期">
{{ formData.acceptance.bill_due_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="付款日期">
{{ formData.payment_date }}
</el-form-item>
</el-col> <el-col :span="12">
<el-form-item label="金额">
{{ formData.amount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="金额大写">
{{ formData.amount_daxie }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="付款方式">
<dict-value :options="dictData.pay_type" :value="formData.pay_type" />
<el-form-item label="备注">
{{ formData.remark
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="本次支付金额">
{{ formData.payment_amount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="收款银行">
{{ formData.deposit_bank }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注">
{{ formData.remark
@ -71,12 +125,13 @@
<el-col :span="24">
<el-form-item label="附件">
<div>
<div v-if="formDataannex.length > 0">
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<div v-else>暂无文件</div>
</el-form-item>
</el-col>
@ -122,24 +177,22 @@ const formData = reactive({
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
Object.assign(formData, data)
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)
}
}
}
const getDetail = async (row: Record<string, any>) => {

View File

@ -8,42 +8,30 @@
<el-row :gutter="10">
<el-col :span="8">
<el-form-item label="组织" prop="org_id">
<el-form-item label="组织" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select> </el-form-item></el-col>
<el-col :span="8">
<el-form-item label="请选择部门" prop="dept_id">
<el-form-item label="请选择部门" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select></el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="供应商名称" prop="customer_id">
<el-form-item label="供应商名称" prop="supplier_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="customer_name" clearable placeholder="请输入供应商名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="供应商编码" prop="customer_id">
<el-form-item label="供应商编码" prop="supplier_id">
<el-input v-model="customer_name" clearable placeholder="请输入供应商编码 " />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="reimburser">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="reimburser">
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同名称" prop="reimburser">
<el-form-item label="合同名称" prop="reimburser" @click="showDialog2 = true">
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
</el-form-item>
@ -60,30 +48,43 @@
<el-option v-for="(item, index) in dictData.contract_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="reimburser">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="reimburser">
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="票据编号" prop="bill_sn">
<el-input v-model="formData.bill_sn" clearable placeholder="请输入票据编号" />
<el-form-item label="票据编号" prop="bill_sn" @click="showDialog1 = true">
<el-input v-model="bill_sn" readonly clearable placeholder="请输入票据编号" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户银行" prop="reimburser">
<el-input v-model="formData.reimburser" clearable placeholder="请输入开户银行" />
<el-form-item label="开户银行" prop="reimburser" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="bank_account" clearable placeholder="请输入开户银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="账户编码" prop="reimburser">
<el-input v-model="formData.reimburser" clearable placeholder="请输入账户编码" />
<el-form-item label="账户编码" prop="reimburser" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="bank_account_no" clearable placeholder="请输入账户编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="汇票类型" prop="bill_type">
<el-radio-group v-model="formData.bill_type" placeholder="请选择汇票类型">
<el-form-item label="汇票类型" prop="bill_type" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-radio-group v-model="bill_type" placeholder="请选择汇票类型">
<el-radio v-for="(item, index) in dictData.bill_type" :key="index" :label="parseInt(item.value)">
{{ item.name }}
</el-radio>
@ -94,14 +95,14 @@
</el-col>
<el-col :span="8">
<el-form-item label="汇票承兑银行" prop="draft_acceptance_bank">
<el-input v-model="formData.draft_acceptance_bank" readonly clearable placeholder="请输入汇票承兑银行" />
<el-form-item label="汇票承兑银行" prop="draft_acceptance_bank" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="draft_acceptance_bank" readonly clearable placeholder="请输入汇票承兑银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="汇票到期日期" prop="bill_due_date">
<el-date-picker class="flex-1 !flex" v-model="formData.bill_due_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择汇票到期日期">
<el-form-item label="汇票到期日期" prop="bill_due_date" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="bill_due_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择汇票到期日期">
</el-date-picker>
</el-form-item>
</el-col>
@ -114,13 +115,13 @@
<el-col :span="8">
<el-form-item label="金额" prop="amount">
<el-form-item label="金额" prop="amount" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.amount" clearable placeholder="请输入金额" @input="amountinput" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="金额大写" prop="amount_daxie">
<el-form-item label="金额大写" prop="amount_daxie" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
</el-form-item>
@ -155,16 +156,16 @@
<el-dialog v-model="showDialog1" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent1"></projectDialog>
<el-dialog v-model="showDialog1" title="选择汇票" width="70%">
<acceptanceDialog @customEvent="customEvent1"></acceptanceDialog>
</el-dialog>
<el-dialog v-model="showDialog2" title="选择合同" width="70%">
<proontractDialog @customEvent="customEvent2"></proontractDialog>
<subcontractDialog @customEvent="customEvent2"></subcontractDialog>
</el-dialog>
<el-dialog v-model="showDialog" title="选择客户" width="70%">
<customDialog @customEvent="customEvent"></customDialog>
<el-dialog v-model="showDialog" title="选择供应商" width="70%">
<supplierDialog @customEvent="customEvent"></supplierDialog>
</el-dialog>
</el-form>
@ -174,11 +175,11 @@
</template>
<script lang="ts" setup name="projectEdit">
import customDialog from '@/components/custom-dialog/index.vue'
import supplierDialog from '@/components/supplier/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import proontractDialog from '@/components/proontract/index.vue'
import acceptanceDialog from '@/components/acceptance/index.vue'
import subcontractDialog from '@/components/procurementsubcontracting_selector/index.vue'
import { transferbillAdd, transferbillEdit, transferbillDetail } from '@/api/transfer_bill'
import { toChinesNum } from "@/utils/util";
import { getAllProjectTypes } from '@/api/projecttype'
@ -199,9 +200,15 @@ const contract_no = ref('')
const customer_name = ref('')
const project_name = ref('')
const project_code = ref('')
const contract_type = ref('')
const bill_sn = ref('')
const bill_type = ref('')
const bill_due_date = ref('')
const bank_account = ref('')
const bank_account_no = ref('')
const draft_acceptance_bank = ref('')
const list1 = reactive([])
const list2 = reactive([])
const userInfo = userStore.userInfo
console.log(userInfo, '222222')
//
@ -258,6 +265,14 @@ const customEvent = (e: any) => {
const customEvent1 = (e: any) => {
showDialog1.value = false;
};
const customEvent2 = (e: any) => {
contract_name.value = e.contract_name;
contract_no.value = e.contract_no;
project_name.value = e.project_name;
project_code.value = e.project_code;
contract_type.value = e.contract_type;
showDialog2.value = false;
};
@ -319,23 +334,21 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
if (data.dept_id) {
getlist1(data.dept_id)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
@ -343,8 +356,23 @@ const setFormData = async (data: Record<any, any>) => {
}
}
customer_name.value = data.custom.name
if (formData.reimbursement_amount) {
toChinesNum(formData.reimbursement_amount)
contract_name.value = data.contract.contract_name;
contract_no.value = data.contract.contract_no;
project_name.value = data.project.name;
project_code.value = data.project.project_code;
contract_type.value = data.contract.contract_type;
bill_sn.value = data.acceptance.bill_sn
bill_due_date.value = data.acceptance.bill_due_date
draft_acceptance_bank.value = data.acceptance.draft_acceptance_bank
bill_type.value = data.acceptance.bill_type
bank_account.value = data.bankAccount.deposit_bank
bank_account_no.value = data.bankAccount.account_sn
// bill_sn.value = data.acceptance.bill_sn
if (data.amount) {
toChinesNum(data.amount)
}
@ -362,7 +390,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri).toString()
formData.annex = JSON.stringify(formDataannex.map((item: any) => item.uri))
}

View File

@ -5,13 +5,19 @@
<el-form-item label="票据编号" prop="bill_sn">
<el-input class="w-[280px]" v-model="queryParams.bill_sn" clearable placeholder="请输入票据编号" />
</el-form-item>
<el-form-item label="客户id" prop="customer_id">
<el-input class="w-[280px]" v-model="queryParams.customer_id" clearable placeholder="请输入客户id" />
<el-form-item label="客户" prop="customer_id">
<el-select class="w-[280px]" v-model="queryParams.customer_id" clearable placeholder="请选择客户">
<el-option v-for="(item, index) in customerlist" :key="index" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="销售合同id" prop="contract_id">
<el-select class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请选择销售合同id">
<el-option v-for="(item, index) in dictData.invoice_type" :key="index" :label="item.name" :value="item.value" />
<el-form-item label="合同" prop="contract">
<el-select class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请选择合同">
<el-option v-for="(item, index) in contractlist" :key="index" :label="item.contract_name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="汇票类型" prop="bill_type">
<el-select class="w-[280px]" v-model="queryParams.bill_type" clearable placeholder="请选择汇票类型">
<el-option v-for="(item, index) in dictData.bill_type" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
@ -40,14 +46,18 @@
<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_no" show-overflow-tooltip />
<el-table-column label="收票日期" prop="apply_date" show-overflow-tooltip />
<el-table-column label="票据编号" prop="applier" show-overflow-tooltip />
<el-table-column label="开户银行" prop="payment_amount" show-overflow-tooltip />
<el-table-column label="账户编码" prop="invoice_amount" show-overflow-tooltip />
<el-table-column label="收票日期" prop="receipt_date" show-overflow-tooltip />
<el-table-column label="票据编号" prop="bill_sn" show-overflow-tooltip />
<el-table-column label="开户银行" prop="account_name" show-overflow-tooltip />
<el-table-column label="账户编码" prop="account" show-overflow-tooltip />
<el-table-column label="汇票到期日期" prop="amount_excluding_tax" show-overflow-tooltip />
<el-table-column label="汇票类型" prop="tax" show-overflow-tooltip />
<el-table-column label="汇票承兑银行" prop="tax" show-overflow-tooltip />
<el-table-column label="汇票到期日期" prop="tax" show-overflow-tooltip />
<el-table-column label="汇票类型" prop="invoice_amount" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.bill_type" :value="row.bill_type" />
</template>
</el-table-column>
<el-table-column label="汇票承兑银行" prop="draft_acceptance_bank" show-overflow-tooltip />
<el-table-column label="汇票到期日期" prop="bill_due_date" show-overflow-tooltip />
<el-table-column label="付款日期" prop="payment_date" show-overflow-tooltip />
<el-table-column label="余额" prop="amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
@ -82,7 +92,8 @@ import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { transferbillLists, transferbillDelete, transferbillDetail } from '@/api/transfer_bill'
import { timeFormat } from '@/utils/util'
import { apiCustomLists } from '@/api/custom'
import { apiProcurementContractLists } from '@/api/procurement_contract'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
@ -91,13 +102,14 @@ const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const showDtail = ref(false)
const contractlist = ref([])
const customerlist = ref([])
//
const queryParams = reactive({
bill_sn: '',
customer_id: '',
invoice_type: '',
contract_id: '',
bill_type: ''
})
@ -142,6 +154,7 @@ const handleDelete = async (id: number | any[]) => {
await transferbillDelete({ id })
getLists()
}
//
const handledetail = async (data: any) => {
let res = await transferbillDetail({ id: data.id })
showDtail.value = true
@ -150,7 +163,29 @@ const handledetail = async (data: any) => {
detailRef.value?.setFormData(res)
}
//
const customerList = () => {
apiCustomLists({
page_no: 1,
page_size: 9999,
}).then((res) => {
customerlist.value = res.lists
})
}
//
const contractList = () => {
apiProcurementContractLists({
page_no: 1,
page_size: 9999,
all: 1
}).then((res) => {
contractlist.value = res.lists
})
}
customerList()
contractList()
getLists()
</script>

View File

@ -123,20 +123,16 @@ const formData = reactive({
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}

View File

@ -533,7 +533,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri).toString()
formData.annex = JSON.stringify(formDataannex.map((item: any) => item.uri))
}
if (tablist1.length > 0) {
const arr1 = tablist1.map(({ name1, name2, ...rest }) => rest)

View File

@ -0,0 +1,186 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="保险管理详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="项目名称">
{{ formData.project_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编号">
{{ formData.project_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="姓名">
{{ formData.person_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证号">
{{ formData.person_idcard }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="投保日期">
{{ formData.insurance_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="到期日期">
{{ formData.due_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="保费(元)">
{{ formData.insurance }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="投保金额(万元)">
{{ formData.insured_amount }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="保险公司">
{{ formData.insurance_company }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="保单明细">
{{ formData.insurance_detail }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发票编号">
{{ formData.invoice_no
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="经办人">
{{ formData.handler
}}
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="合同附件">
<div v-if="formDataannex.length > 0">
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<div v-else>暂无附件</div>
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const formDataannex = reactive([])
const datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
});
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
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)
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiCustomDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
console.log('1111111')
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style lang="scss">
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
</style>

View File

@ -0,0 +1,266 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules" inline>
<el-row>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code" clearable placeholder="请输入项目编码" @click="showDialog = true" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="姓名" prop="project_person_id" @click="showDialog1 = true" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="person_name" clearable placeholder="请选择项目人员" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="身份证号" prop="project_person_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="idcard" clearable placeholder="系统自动填写" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="投保日期" prop="insurance_date">
<el-date-picker class="flex-1 !flex" v-model="formData.insurance_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择投保日期">
</el-date-picker>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="到期日期" prop="due_date" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.due_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择到期日期">
</el-date-picker>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="保险种类" prop="type">
<el-input v-model="formData.type" clearable placeholder="请输入保险种类" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="保单号" prop="insurance_no">
<el-input v-model="formData.insurance_no" clearable placeholder="请输入保单号" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="保费(元)" prop="insurance">
<el-input v-model="formData.insurance" clearable type="number" placeholder="请输入保费(元)" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="投保金额(万元)" prop="insured_amount">
<el-input v-model="formData.insured_amount" clearable type="number" placeholder="请输入投保金额(万元)" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="保险公司" prop="insurance_company">
<el-input v-model="formData.insurance_company" clearable placeholder="请输入保险公司" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="保单明细" prop="insurance_detail">
<el-input v-model="formData.insurance_detail" clearable placeholder="请输入保单明细" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="发票编号" prop="invoice_no">
<el-input v-model="formData.invoice_no" clearable placeholder="请输入发票编号" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="经办人" prop="handler">
<el-input v-model="formData.handler" clearable placeholder="请输入经办人" />
</el-form-item> </el-col>
<el-col :span="24">
<el-form-item label="合同附件" prop="field127">
<el-upload accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent"></projectDialog>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="procurementContractEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import { insurancemanagementAdd, insurancemanagementEdit, insurancemanagementDetail } from '@/api/project_insurance_management'
import customDialog from '@/components/project_personnel/index.vue'
import { timeFormat } from '@/utils/util'
import 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 mode = ref('add')
const showDialog = ref(false)
const showDialog1 = ref(false)
const project_name = ref('')
const project_code = ref('')
const person_name = ref('')
const idcard = ref('')
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const formDataannex = reactive([])
import feedback from '@/utils/feedback'
const userInfo = userStore.userInfo
//
const customEvent = (e) => {
formData.project_id = e.id
project_name.value = e.name
project_code.value = e.project_code
showDialog.value = false
}
const customEvent1 = (e) => {
formData.project_person_id = e.id
idcard.value = e.idcard
person_name.value = e.name
showDialog1.value = false
}
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑保险管理' : '新增保险管理'
})
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formData = reactive({
id: '',
project_id: '',
project_person_id: '',
insurance_date: '',
due_date: '',
type: '',
insurance_no: '',
insurance: '',
insured_amount: '',
insurance_company: '',
insurance_detail: '',
invoice_no: '',
handler: '',
annex: '',
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
project_name.value = data.project_name
project_code.value = data.project_code
idcard.value = data.person_idcard
person_name.value = data.person_name
}
const getDetail = async (row: Record<string, any>) => {
const data = await insurancemanagementDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = JSON.stringify(formDataannex.map((item: any) => item.uri))
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await insurancemanagementEdit(data)
: await insurancemanagementAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
formData.handler = userInfo.name
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,177 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="保单号" prop="insurance_no">
<el-input v-model="queryParams.insurance_no" clearable placeholder="请输入保单号" />
</el-form-item>
<el-form-item label="保险种类" prop="type">
<el-input v-model="queryParams.type" clearable placeholder="请输入保险种类" />
</el-form-item>
<el-form-item label="保险公司" prop="insurance_company">
<el-input v-model="queryParams.insurance_company" clearable placeholder="请输入保险公司" />
</el-form-item>
<el-form-item label="发票编号" prop="invoice_no">
<el-input v-model="queryParams.invoice_no" clearable placeholder="请输入发票编号" />
</el-form-item>
<el-form-item label="经办人" prop="handler">
<el-input v-model="queryParams.handler" clearable placeholder="请输入经办人" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project.project_insurance_management/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project.project_insurance_management/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="姓名" prop="person_name" show-overflow-tooltip />
<el-table-column label="身份证号" prop="person_idcard" show-overflow-tooltip />
<el-table-column label="投保日期" prop="insurance_date" show-overflow-tooltip />
<el-table-column label="到期日期" prop="due_date" show-overflow-tooltip />
<el-table-column label="保险种类" prop="type" show-overflow-tooltip />
<el-table-column label="保单号" prop="insurance_no" show-overflow-tooltip />
<el-table-column label="保费(元)" prop="insurance" show-overflow-tooltip />
<el-table-column label="投保金额(万元)" prop="insured_amount" show-overflow-tooltip />
<el-table-column label="保险公司" prop="insurance_company" show-overflow-tooltip />
<el-table-column label="保单明细" prop="insurance_detail" show-overflow-tooltip />
<el-table-column label="发票编号" prop="invoice_no" show-overflow-tooltip />
<el-table-column label="经办人" prop="handler" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
<!-- <el-table-column label="人员标识" prop="per_daily_living" show-overflow-tooltip /> -->
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_insurance_management/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project_insurance_management/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project_insurance_management/detail']" link @click="handledetail(row)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
</div>
</template>
<script lang="ts" setup name="projectLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { insurancemanagementLists, insurancemanagementDelete, insurancemanagementDetail } from '@/api/project_insurance_management'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const showDtail = ref(false)
//
const queryParams = reactive({
type: '',
insurance_no: '',
insurance_company: '',
invoice_no: '',
handler: '',
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: insurancemanagementLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
console.log(data.id)
let res = await insurancemanagementDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await insurancemanagementDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await insurancemanagementDetail({ id: data.id })
showDtail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -0,0 +1,144 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="项目日志详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="项目名称">
{{ formData.project_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编号">
{{ formData.project_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型">
<dict-value :options="dictData.follow_type" :value="formData.follow_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="主题">
{{ formData.theme }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人">
{{ formData.contacts }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日志详情">
{{ formData.content }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="执行人">
{{ formData.executor }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="下次回访日期">
{{ formData.next_follow_up_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日期">
{{ formData.date }}
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
});
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiCustomDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
console.log('1111111')
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style lang="scss">
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
</style>

View File

@ -0,0 +1,123 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-row>
<el-col :span="24" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="工种名称" prop="type_name">
<el-input v-model="formData.type_name" clearable placeholder="请输入工种名称" />
</el-form-item> </el-col>
<el-col :span="24" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="工种单价" prop="type_unit_price">
<el-input v-model="formData.type_unit_price" clearable placeholder="请输入工种单价" />
</el-form-item> </el-col>
<el-col :span="24" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="每日生活费" prop="per_daily_living">
<el-input v-model="formData.per_daily_living" clearable placeholder="请输入每日生活费" />
</el-form-item> </el-col>
</el-row>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="procurementContractEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import { projectjobtypeAdd, projectjobtypeEdit, projectjobtypeDetail } from '@/api/project_job_type'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const project_name = ref('')
const project_code = ref('')
const formDataannex = reactive([])
import feedback from '@/utils/feedback'
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑工种' : '新增工种'
})
//
const formData = reactive({
id: '',
per_daily_living: '',
type_unit_price: '',
type_name: ''
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await projectjobtypeDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await projectjobtypeEdit(data)
: await projectjobtypeAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,133 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="工种名称" prop="type_name">
<el-input class="w-[280px]" v-model="queryParams.type_name" clearable placeholder="请输入工种名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project.project/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project.project/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="工种名称" prop="type_name" show-overflow-tooltip />
<el-table-column label="工种单价" prop="type_unit_price" show-overflow-tooltip />
<el-table-column label="每日生活费" prop="per_daily_living" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<!-- <el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
详情
</el-button> -->
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
</div>
</template>
<script lang="ts" setup name="projectLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { projectjobtypeLists, projectjobtypeDelete, projectjobtypeDetail } from '@/api/project_labor_contract'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const showDtail = ref(false)
//
const queryParams = reactive({
type_name: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('follow_type')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: projectjobtypeLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
console.log(data.id)
let res = await projectjobtypeDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await projectjobtypeDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await projectjobtypeDetail({ id: data.id })
showDtail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -0,0 +1,193 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="劳动合同详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="项目名称">
{{ formData.project_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编号">
{{ formData.project_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="姓名">
{{ formData.person_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证号">
{{ formData.person_idcard }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同状态">
<dict-value :options="dictData.labor_contract_status" :value="formData.contract_status" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同类别">
<dict-value :options="dictData.labor_contract_type" :value="formData.contract_type" /> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同名称">
<dict-value :options="dictData.labor_contract_name" :value="formData.contract_name" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合同签定日期">
{{ formData.signing_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="试用期起始日期">
{{ formData.trial_start_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="试用期结束日期">
{{ formData.trial_end_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="起始时间">
{{ formData.start_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结束时间">
{{ formData.end_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="解除时间">
{{ formData.release_time }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注">
{{ formData.remark
}}
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="合同附件">
<div v-if="formDataannex.length > 0">
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<div v-else>暂无附件</div>
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup name="customdetail">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const formDataannex = reactive([])
const datas = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
});
//
const formData = reactive({
})
//
const setFormData = async (data: Record<any, any>) => {
Object.assign(formData, data)
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)
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await apiCustomDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
popupRef.value?.close()
}
//
const open = () => {
console.log('1111111')
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>
<style lang="scss">
.tit {
font-size: 1.2em;
margin-bottom: 10px;
}
</style>

View File

@ -0,0 +1,271 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules" inline>
<el-row>
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="姓名" prop="project_person_id" @click="showDialog1 = true" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="person_name" clearable placeholder="请选择项目人员" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="身份证号" prop="project_person_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="idcard" clearable placeholder="系统自动填写" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="合同类型" prop="contract_type" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.contract_type" clearable placeholder="请选择合同类型">
<el-option v-for="(item, index) in dictData.labor_contract_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="合同状态" prop="contract_status" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.contract_status" clearable placeholder="请选择合同状态">
<el-option v-for="(item, index) in dictData.labor_contract_status" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="合同名称" prop="contract_title" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="flex-1" v-model="formData.contract_title" clearable placeholder="请选择合同名称">
<el-option v-for="(item, index) in dictData.labor_contract_name" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同签定日期" prop="signing_date" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.signing_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择合同签定日期">
</el-date-picker>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="试用期起始日期" prop="trial_start_date">
<el-date-picker class="flex-1 !flex" v-model="formData.trial_start_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择计划开始日期">
</el-date-picker>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="试用期结束日期" prop="per_daily_living">
<el-date-picker class="flex-1 !flex" v-model="formData.plan_start_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择计划开始日期">
</el-date-picker>
</el-form-item> </el-col><el-col :span="8">
<el-form-item label="起始时间" prop="start_date" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.start_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择计划开始日期">
</el-date-picker>
</el-form-item> </el-col><el-col :span="8">
<el-form-item label="终止时间" prop="end_date" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker class="flex-1 !flex" v-model="formData.end_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择计划开始日期">
</el-date-picker>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="解除时间" prop="release_time">
<el-date-picker class="flex-1 !flex" v-model="formData.release_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择解除时间">
</el-date-picker>
</el-form-item> </el-col><el-col :span="8">
<el-form-item label="解除原因" prop="release_reason">
<el-input v-model="formData.release_reason" clearable placeholder="请输入合同名称" />
</el-form-item> </el-col><el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入合同名称" />
</el-form-item> </el-col>
<el-col :span="24">
<el-form-item label="合同附件" prop="field127">
<el-upload accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent"></projectDialog>
</el-dialog>
<el-dialog v-model="showDialog1" title="选择项目人员" width="70%">
<customDialog @customEvent="customEvent1" :project_id="formData.project_id"></customDialog>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="procurementContractEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import { projectlaborcontractAdd, projectlaborcontractEdit, projectlaborcontractDetail } from '@/api/project_labor_contract'
import customDialog from '@/components/project_personnel/index.vue'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const showDialog1 = ref(false)
const project_name = ref('')
const project_code = ref('')
const person_name = ref('')
const idcard = ref('')
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const formDataannex = reactive([])
import feedback from '@/utils/feedback'
//
const customEvent = (e) => {
formData.project_id = e.id
project_name.value = e.name
project_code.value = e.project_code
showDialog.value = false
}
const customEvent1 = (e) => {
formData.project_person_id = e.id
idcard.value = e.idcard
person_name.value = e.name
showDialog1.value = false
}
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑劳动合同' : '新增劳动合同'
})
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const formData = reactive({
id: '',
project_id: '',
project_person_id: '',
contract_status: '',
contract_type: '',
contract_title: '',
signing_date: '',
trial_start_date: '',
trial_end_date: '',
start_date: '',
end_date: '',
release_time: '',
release_reason: '',
remark: '',
annex: '',
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
project_name.value = data.project_name
project_code.value = data.project_code
idcard.value = data.person_idcard
person_name.value = data.person_name
}
const getDetail = async (row: Record<string, any>) => {
const data = await projectlaborcontractDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = JSON.stringify(formDataannex.map((item: any) => item.uri))
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await projectlaborcontractEdit(data)
: await projectlaborcontractAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,178 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="合同类型" prop="contract_type">
<el-select class="w-[280px]" v-model="queryParams.contract_type" clearable placeholder="请选择合同类型">
<el-option v-for="(item, index) in dictData.labor_contract_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item label="合同状态" prop="contract_status">
<el-select class="w-[280px]" v-model="queryParams.contract_status" clearable placeholder="请选择合同状态">
<el-option v-for="(item, index) in dictData.labor_contract_status" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item label="合同名称" prop="contract_title">
<el-select class="w-[280px]" v-model="queryParams.contract_title" clearable placeholder="请选择合同名称">
<el-option v-for="(item, index) in dictData.labor_contract_name" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project.project/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project.project/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="姓名" prop="person_name" show-overflow-tooltip />
<el-table-column label="身份证号" prop="person_idcard" show-overflow-tooltip />
<el-table-column label="合同状态" prop="per_daily_living" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.labor_contract_status" :value="row.contract_status" />
</template>
</el-table-column>
<el-table-column label="合同类别" prop="per_daily_living" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.labor_contract_type" :value="row.contract_type" />
</template>
</el-table-column>
<el-table-column label="合同名称" prop="per_daily_living" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.labor_contract_name" :value="row.contract_name" />
</template>
</el-table-column>
<el-table-column label="合同签定日期" prop="signing_date" show-overflow-tooltip />
<el-table-column label="试用期起始日期" prop="trial_start_date" show-overflow-tooltip />
<el-table-column label="试用期结束日期" prop="trial_end_date" show-overflow-tooltip />
<el-table-column label="起始时间" prop="start_date" show-overflow-tooltip />
<el-table-column label="结束时间" prop="end_date" show-overflow-tooltip />
<el-table-column label="解除时间" prop="release_time" show-overflow-tooltip />
<!-- <el-table-column label="人员标识" prop="per_daily_living" show-overflow-tooltip /> -->
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project/detail']" link @click="handledetail(row)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
</div>
</template>
<script lang="ts" setup name="projectLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { projectlaborcontractLists, projectlaborcontractDelete, projectlaborcontractDetail } from '@/api/project_labor_contract'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//
const showEdit = ref(false)
const showDtail = ref(false)
//
const queryParams = reactive({
contract_status: '',
contract_type: '',
contract_title: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: projectlaborcontractLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
console.log(data.id)
let res = await projectlaborcontractDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await projectlaborcontractDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await projectlaborcontractDetail({ id: data.id })
showDtail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -123,7 +123,12 @@ import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const project_name = ref('')
const project_code = ref('')

View File

@ -287,20 +287,16 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}

View File

@ -181,7 +181,7 @@
</el-dialog>
<el-dialog v-model="showDialog2" title="选择银行账户" width="70%">
<bankaccountDialog @customEvent="customEvent"></bankaccountDialog>
<bankaccountDialog @customEvent="customEvent2"></bankaccountDialog>
</el-dialog>
<el-dialog v-model="showDialog3" title="选择待回款计划" width="70%">
<pendingDialog @customEvent="customEvent3"></pendingDialog>

View File

@ -275,20 +275,16 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}

View File

@ -134,7 +134,7 @@
<el-dialog v-model="showDialog2" title="选择银行账户" width="70%">
<bankaccountDialog @customEvent="customEvent"></bankaccountDialog>
<bankaccountDialog @customEvent="customEvent2"></bankaccountDialog>
</el-dialog>
</el-form>
</popup>
@ -280,20 +280,16 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
}
const arry1 = data.return_desc.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}

View File

@ -149,7 +149,7 @@
</el-dialog>
<el-dialog v-model="showDialog2" title="选择银行账户" width="70%">
<bankaccountDialog @customEvent="customEvent"></bankaccountDialog>
<bankaccountDialog @customEvent="customEvent2"></bankaccountDialog>
</el-dialog>
</el-form>
</popup>
@ -199,6 +199,10 @@ const handleAvatarSuccess_four = (
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
@ -224,10 +228,7 @@ const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined)
}
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -281,7 +282,7 @@ const formData = reactive({
refund_type: 0,
reason: "",
remark: "",
annexs: "",
annex: "",
bank_account_id: 0,
is_calculate_interest: '',
interest_calculation_start_date: ""
@ -296,21 +297,17 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
if (data.return_desc && data.return_desc.length > 0) {
if (data.return_desc.includes(",")) {
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
} else {
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
Object.assign(formDataannex, arry1)
console.log(formDataannex)
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)
}
}
@ -340,7 +337,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
formData.annex = JSON.stringify(formDataannex.map((item: any) => item.uri))
}
console.log(formRef.value?.validate(), '22222222')
await formRef.value?.validate()