1.完成供应商库(供应商,供应商联系人)对接增删改查功能 2.项目管理(考勤记录,考勤明细)对接增删改查功能 3.完成项目合同、采购合同、收款管理、付款管理模块缺少字段对接

This commit is contained in:
jia 2023-12-26 18:24:54 +08:00
parent 29ad706716
commit d866cfe34f
93 changed files with 3060 additions and 1319 deletions

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 考勤记录表列表
export function attendancedetailLists(params: any) {
return request.get({ url: '/project.project_attendance_detail/lists', params })
}
// 添加考勤记录
export function attendancedetailAdd(params: any) {
return request.post({ url: '/project.project_attendance_detail/add', params })
}
// 编辑考勤记录
export function attendancedetailEdit(params: any) {
return request.post({ url: '/project.project_attendance_detail/edit', params })
}
// 删除考勤记录
export function attendancedetailDelete(params: any) {
return request.post({ url: '/project.project_attendance_detail/delete', params })
}
// 考勤记录详情
export function attendancedetailDetail(params: any) {
return request.get({ url: '/project.project_attendance_detail/detail', params })
}

View File

@ -0,0 +1,26 @@
import request from '@/utils/request'
// 考勤记录表列表
export function attendanceRecordLists(params: any) {
return request.get({ url: '/project.project_attendance_record/lists', params })
}
// 添加考勤记录
export function attendanceRecordAdd(params: any) {
return request.post({ url: '/project.project_attendance_record/add', params })
}
// 编辑考勤记录
export function attendanceRecordEdit(params: any) {
return request.post({ url: '/project.project_attendance_record/edit', params })
}
// 删除考勤记录
export function attendanceRecordDelete(params: any) {
return request.post({ url: '/project.project_attendance_record/delete', params })
}
// 考勤记录详情
export function attendanceRecordDetail(params: any) {
return request.get({ url: '/project.project_attendance_record/detail', params })
}

View File

@ -0,0 +1,27 @@
import request from '@/utils/request'
// 供应商联系人表列表
export function suppliercontactsLists(params: any) {
return request.get({ url: '/supplier.supplier_contacts/lists', params })
}
// 添加供应商联系人
export function suppliercontactsAdd(params: any) {
return request.post({ url: '/supplier.supplier_contacts/add', params })
}
// 编辑供应商联系人
export function suppliercontactsEdit(params: any) {
return request.post({ url: '/supplier.supplier_contacts/edit', params })
}
// 删除供应商联系人
export function suppliercontactsDelete(params: any) {
return request.post({ url: '/supplier.supplier_contacts/delete', params })
}
// 供应商联系人详情
export function suppliercontactsDetail(params: any) {
return request.get({ url: '/supplier.supplier_contacts/detail', params })
}

27
src/api/suppler_list.ts Normal file
View File

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

View File

@ -24,7 +24,7 @@
<el-table-column label="合同类型" prop="contract_type">
<template #default="{ row }">
<dict-value :options="dictData.contract_type" :value="row.contract_type" />
<dict-value :options="dictData.procurement_contract_type" :value="row.contract_type" />
</template>
</el-table-column>
<el-table-column label="签订日期" prop="signing_date" show-overflow-tooltip />
@ -66,7 +66,7 @@ const queryParams = reactive({
name: ''
});
const { dictData } = useDictData('contract_type,account_period,tax_rate,pay_type,pay_period ')
const { dictData } = useDictData('procurement_contract_type,account_period,tax_rate,pay_type,pay_period ')
//
const emits = defineEmits(["customEvent"]);

View File

@ -24,7 +24,7 @@
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="合同类型" prop="contract_type">
<template #default="{ row }">
<dict-value :options="dictData.contract_type" :value="row.contract_type" />
<dict-value :options="dictData.procurement_contract_type" :value="row.contract_type" />
</template>
</el-table-column>
<el-table-column label="合同金额" prop="signing_date" show-overflow-tooltip />
@ -59,7 +59,7 @@ const queryParams = reactive({
all: 1,
});
const { dictData } = useDictData('contract_type,account_period,tax_rate,pay_type,pay_period ')
const { dictData } = useDictData('procurement_contract_type,account_period,tax_rate,pay_type,pay_period ')
//
const emits = defineEmits(["customEvent"]);

View File

@ -17,15 +17,34 @@
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<el-table-column label="序号" property="name" />
<el-table-column label="建档人" property="custom_type" />
<el-table-column label="供应商名称" property="credit_rating" />
<el-table-column label="供应商分组" property="province_name" />
<el-table-column label="供应商等级" property="city_name" />
<el-table-column label="联系人" property="street_name" />
<el-table-column label="性别" property="master_name" />
<el-table-column label="电话号码" property="master_name" />
<el-table-column label="性别" property="master_name" />
<el-table-column label="邮箱地址" property="master_name" />
<el-table-column label="邮箱地址" property="master_name" />
<el-table-column label="供应商名称" property="supplier_name" />
<el-table-column label="供应商编码" property="supplier_code" />
<el-table-column label="供应商分组" prop="group_id">
<template #default="{ row }">
<dict-value :options="dictData.supplier_group" :value="row.group_id" />
</template>
</el-table-column>
<el-table-column label="供应商分类" prop="category_id">
<template #default="{ row }">
<dict-value :options="dictData.supplier_category" :value="row.category_id" />
</template>
</el-table-column>
<el-table-column label="供应商等级" prop="grade">
<template #default="{ row }">
<dict-value :options="dictData.supplier_grade" :value="row.grade" />
</template>
</el-table-column>
<el-table-column label="联系人" property="contacts" />
<el-table-column label="性别" property="contacts_sex" />
<el-table-column label="电话号码" property="phone" />
<el-table-column label="性别" property="contacts_sex">
<template #default="{ row }">
<dict-value :options="dictData.sex" :value="row.contacts_sex" />
</template>
</el-table-column>
<el-table-column label="邮箱地址" property="email" />
</el-table>
@ -40,7 +59,7 @@
<script lang="ts" setup>
import { usePaging } from "@/hooks/usePaging"
import { useDictData } from "@/hooks/useDictOptions"
import { apiCustomLists } from '@/api/custom'
import { apisupplierLists } from '@/api/suppler_list'
import { defineEmits } from "vue"
//
@ -48,6 +67,7 @@ const queryParams = reactive({
name: ''
});
const { dictData } = useDictData('supplier_grade,supplier_group,supplier_category,sex')
//
const emits = defineEmits(["customEvent"]);
@ -59,7 +79,7 @@ const handleCurrentChange = (value: any) => {
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiCustomLists,
fetchFun: apisupplierLists,
params: queryParams,
});

View File

@ -198,13 +198,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -263,8 +265,8 @@ const setFormData = async (data: Record<any, any>) => {
Object.assign(formDataannex, arry1)
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {

View File

@ -15,16 +15,16 @@
<el-row>
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog = true">
<el-input v-model="project_name" readonly clearable placeholder="请输入" />
<el-input v-model="project_name" readonly clearable placeholder="选择项目" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_code" clearable readonly placeholder="请输入" />
<el-input v-model="project_code" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="客户名称" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="matsname" clearable readonly placeholder="请输入" />
<el-input v-model="matsname" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="项目估算" prop="project_estimation" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.project_estimation" clearable placeholder="请输入项目估算" />
@ -80,10 +80,18 @@
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item></el-col><el-col :span="8">
<el-form-item label="项目把握度" prop="project_assurance">
<el-input v-model="formData.project_assurance" clearable placeholder="请输入项目把握度" />
</el-form-item></el-col><el-col :span="8">
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="项目把握度" label-width="130px" prop="project_assurance">
<el-select v-model="formData.project_assurance" clearable placeholder="请选择项目把握度">
<el-option v-for="(item, index) in dictData.project_assurance" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="招标项目概况" prop="bid_project_overview">
<el-input v-model="formData.bid_project_overview" clearable placeholder="请输入招标项目概况" />
</el-form-item></el-col><el-col :span="8">
@ -198,8 +206,10 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
@ -228,7 +238,7 @@ const formData = reactive({
bid_project_overview: '',
project_desc: '',
annex: '',
approve_id: ''
approve_id: 0
})
@ -254,8 +264,8 @@ const setFormData = async (data: Record<any, any>) => {
Object.assign(formDataannex, arry1)
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {

View File

@ -66,7 +66,11 @@
<dict-value :options="dictData.whether_status" :value="row.is_internal_resources" />
</template>
</el-table-column>
<el-table-column label="项目把握度" prop="project_assurance" show-overflow-tooltip />
<el-table-column label="项目把握度" prop="project_assurance" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.project_assurance" :value="row.project_assurance" />
</template>
</el-table-column>
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['bid.bid_bidding_decision/edit']" type="primary" link @click="handleEdit(row)">
@ -123,7 +127,7 @@ const handleSelectionChange = (val: any[]) => {
}
//
const { dictData } = useDictData('construction_funds_sources,bidding_method,whether_status')
const { dictData } = useDictData('construction_funds_sources,bidding_method,whether_status,project_assurance')
//
const { pager, getLists, resetParams, resetPage } = usePaging({

View File

@ -14,16 +14,16 @@
<el-row>
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog = true">
<el-input v-model="project_name" readonly clearable placeholder="请输入" />
<el-input v-model="project_name" readonly clearable placeholder="选择项目" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_code" clearable readonly placeholder="请输入" />
<el-input v-model="project_code" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="客户名称" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="matsname" clearable placeholder="请输入" />
<el-input v-model="matsname" clearable disabled placeholder="系统自动填写" />
</el-form-item></el-col><el-col :span="8">
<el-form-item label="招标公司名称" prop="invite_tenders_company_name" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.invite_tenders_company_name" clearable placeholder="请输入招标公司名称" />
@ -227,13 +227,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//

View File

@ -34,52 +34,50 @@
</el-col>
<el-col :span="8">
<el-form-item label="购买人员" prop="buy_bidding_document_id">
<el-input v-model="buyer" clearable readonly placeholder="请输入购买人员" />
<el-input v-model="buyer" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="客户名称" prop="buy_bidding_document_id">
<el-input v-model="bid_document_no" clearable readonly placeholder="请输入客户名称" />
<el-input v-model="bid_document_no" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="招标公司名称" prop="buy_bidding_document_id">
<el-input v-model="invite_tenders_company_name" clearable readonly placeholder="请输入招标公司名称" />
<el-input v-model="invite_tenders_company_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="投标公司名称" prop="buy_bidding_document_id">
<el-input v-model="bid_company_name" clearable readonly placeholder="请输入购买标书" />
<el-input v-model="bid_company_name" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="购买标书金额" prop="buy_bidding_document_id">
<el-input v-model="amount" clearable readonly placeholder="请输入购买标书金额" />
<el-input v-model="amount" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="招标项目资金来源" prop="buy_bidding_document_id">
<el-select v-model="project_fund_source" clearable placeholder="请选择招标项目资金来源" @change="deptrmt">
<el-select v-model="project_fund_source" clearable disabled placeholder="系统自动填写" @change="deptrmt">
<el-option v-for="(item, index) in dictData.construction_funds_sources" :key="index" :label="item.name" :value="parseInt(item.id)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="投标时间" prop="buy_bidding_document_id">
<el-input v-model="bid_date" clearable readonly placeholder="请输入投标时间" />
<el-input v-model="bid_date" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="购买标书时间" prop="buy_bidding_document_id">
<el-input v-model="buy_date" clearable readonly placeholder="请输入投标时间" />
<el-input v-model="buy_date" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="招标方式" prop="buy_bidding_document_id">
<el-select v-model="invite_tenders_type" clearable placeholder="请选择招标方式" @change="deptrmt">
<el-select v-model="invite_tenders_type" clearable disabled placeholder="系统自动填写" @change="deptrmt">
<el-option v-for="(item, index) in dictData.bidding_method" :key="index" :label="item.name" :value="parseInt(item.id)" />
</el-select>
@ -87,7 +85,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="投标地址" prop="buy_bidding_document_id">
<el-input v-model="bid_address" clearable readonly placeholder="请输入投标地址" />
<el-input v-model="bid_address" clearable disabled placeholder="系统自动填写" />
</el-form-item>
</el-col>
@ -394,27 +392,29 @@ const formData = reactive({
id: '',
dept_id: '',
org_id: '',
approve_id: '',
approve_id: 0,
buy_bidding_document_id: '',
is_need_deposit: '',
bid_opening_date: '',
deposit_refund_time: '',
bidding_project_overview: '',
project_introduction: '',
project_fund_source: '',
annex: '',
technical_protocol_deviation: '',
protocol_deviation_handling_plan: '',
technical_review_annex: '',
business_review_total_amount: '',
business_review_total_amount: 0,
tax_rate: '',
pay_type: '',
pay_rate: '',
business_contract_deviation: '',
business_contract_deviation_handling_plan: '',
business_contract_deviation_annex: '',
product: [{
product: [
{
}]
}
]
})
//
@ -455,13 +455,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -473,13 +475,13 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
if (data.project_fund_source && data.project_fund_source.length > 0) {
if (data.annex && data.annex.length > 0) {
const arry1 = data.project_fund_source.map((item: any, index: any) => {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
@ -489,7 +491,6 @@ const setFormData = async (data: Record<any, any>) => {
}
if (data.technical_review_annex && data.technical_review_annex.length > 0) {
const arry1 = data.technical_review_annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
@ -497,7 +498,6 @@ const setFormData = async (data: Record<any, any>) => {
};
});
Object.assign(formDataannex1, arry1)
}
if (data.business_contract_deviation_annex && data.business_contract_deviation_annex.length > 0) {
@ -519,7 +519,6 @@ const setFormData = async (data: Record<any, any>) => {
buyer.value = data.document.buyer
project_fund_source.value = data.document.project_fund_source
bid_date.value = data.document.bid_date
buy_date.value = data.document.buy_date
invite_tenders_type.value = data.document.invite_tenders_type
bid_address.value = data.document.bid_address
@ -539,7 +538,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
formData.project_fund_source = JSON.stringify(formDataannex.map(item => item.uri))
formData.annex = JSON.stringify(formDataannex.map(item => item.uri))
formData.technical_review_annex = JSON.stringify(formDataannex1.map(item => item.uri))
formData.business_contract_deviation_annex = JSON.stringify(formDataannex2.map(item => item.uri))
await formRef.value?.validate()

View File

@ -15,11 +15,7 @@
{{ 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="分项工程">

View File

@ -1,6 +1,6 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<!-- <el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="填报日期" prop="declare_time">
<el-date-picker class="flex-1 !flex" v-model="queryParams.declare_time" clearable type="date" value-format="YYYY-MM-DD " placeholder="选择填报日期">
@ -18,7 +18,7 @@
<el-button @click="reset">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</el-card> -->
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project.project_plan/add']" type="primary" @click="handleAdd">
<template #icon>
@ -44,9 +44,10 @@
<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'>
<!-- <div v-for="(item, i) in row.file " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div> -->
<el-image style="width:50px;height:50px;" :src="row.file" />
</div>
<div v-else>
暂无文件

View File

@ -11,7 +11,7 @@
<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="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 />

View File

@ -13,18 +13,16 @@
</el-select>
</el-form-item>
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
<el-input v-model="project_name" clearable readonly placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code
" clearable placeholder="请输入项目编码" />
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="客户名称" prop="project_id">
<el-input v-model="custom_name
" clearable placeholder="请输入客户名称" />
<el-input v-model="custom_name" disabled clearable placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="需求名称" prop="customer_demand_id">
<el-input v-model="customer_demand_name" clearable placeholder="输入需求名称" @click="showDialog1 = true" />
<el-input v-model="customer_demand_name" clearable placeholder="选择需求" @click="showDialog1 = true" />
</el-form-item>
<el-form-item label="竞争对手名称" prop="competitor_name">
<el-input v-model="formData.competitor_name" clearable placeholder="请输入竞争对手名称" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />

View File

@ -1,13 +1,22 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="项目id" prop="project_id">
<el-input class="w-[280px]" v-model="queryParams.project_id" clearable placeholder="请输入项目id" />
<el-form class="mb-[-16px]" :model="queryParams" inline label-width="auto">
<el-form-item label="项目名称" prop="project_name">
<el-input class="w-[280px]" v-model="queryParams.project_name" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="竞争对手名称" prop="competitor_name">
<el-input class="w-[280px]" v-model="queryParams.competitor_name" clearable placeholder="请输入竞争对手名称" />
</el-form-item>
<el-form-item label="联系人电话" prop="competitor_contacts_phone">
<el-input class="w-[280px]" v-model="queryParams.competitor_contacts_phone" clearable placeholder="请输入联系人电话" />
</el-form-item>
<el-form-item label="客户名称" prop="custom_name">
<el-input class="w-[280px]" v-model="queryParams.custom_name" clearable placeholder="请输入客户名称" />
</el-form-item>
<el-form-item label="需求名称" prop="customer_demand_name">
<el-input class="w-[280px]" v-model="queryParams.customer_demand_name" clearable placeholder="请输入需求名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -76,8 +85,12 @@ const showDtail = ref(false)
//
const queryParams = reactive({
project_id: '',
competitor_name: ''
project_name: '',
competitor_name: '',
customer_demand_name: '',
competitor_contacts_phone: '',
custom_name: '',
})
//

View File

@ -264,13 +264,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -335,8 +337,8 @@ const setFormData = async (data: Record<any, any>) => {
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {

View File

@ -201,13 +201,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -220,8 +222,8 @@ const setFormData = async (data: Record<any, any>) => {
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
business_director.value = data.business_director
contract_name.value = data.contract_name

View File

@ -295,13 +295,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -361,8 +363,8 @@ const setFormData = async (data: Record<any, any>) => {
}
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
formData.other_contacts = JSON.parse(data.other_contacts)

View File

@ -208,13 +208,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -259,8 +261,8 @@ const setFormData = async (data: Record<any, any>) => {
});
Object.assign(formDataannex, arry1)
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {

View File

@ -66,7 +66,19 @@
{{ formData.demand_content }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="附件">
<div v-if="formDataannex.length > 0">
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
<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>
@ -90,7 +102,7 @@ defineProps({
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const formDataannex = reactive([])
const datas = reactive({
provinceOptions: [],
cityOptions: [],
@ -109,7 +121,15 @@ 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)
}
}

View File

@ -1,16 +1,36 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item>
<el-form-item label="需求主题" prop="theme">
<el-input class="w-[280px]" v-model="queryParams.theme" clearable placeholder="请输入需求主题" />
</el-form-item>
<el-form class="mb-[-16px]" :model="queryParams" label-width="auto" inline>
<el-row>
<el-col :span="6">
<el-form-item label="需求主题" prop="theme">
<el-input class="w-[280px]" v-model="queryParams.theme" clearable placeholder="请输入需求主题" />
</el-form-item></el-col><el-col :span="6">
<el-form-item label="需求提供人" prop="supplier">
<el-input class="w-[280px]" v-model="queryParams.supplier" clearable placeholder="请输入需求提供人" />
</el-form-item></el-col><el-col :span="6">
<el-form-item label="提供人联系方式" prop="supplier_contacts">
<el-input class="w-[280px]" v-model="queryParams.supplier_contacts" clearable placeholder="请输入提供人联系方式" />
</el-form-item></el-col><el-col :span="6">
<el-form-item label="组织名称" prop="org_name">
<el-input class="w-[280px]" v-model="queryParams.org_name" clearable placeholder="请输入组织名称" />
</el-form-item></el-col><el-col :span="6">
<el-form-item label="部门名称" prop="dept_name">
<el-input class="w-[280px]" v-model="queryParams.dept_name" clearable placeholder="请输入部门名称" />
</el-form-item></el-col><el-col :span="6">
<el-form-item label="项目名称" prop="project_name">
<el-input class="w-[280px]" v-model="queryParams.project_name" clearable placeholder="请输入项目名称" />
</el-form-item></el-col><el-col :span="6">
<el-form-item label="客户名称" prop="custom_name">
<el-input class="w-[280px]" v-model="queryParams.custom_name" clearable placeholder="请输入客户名称" />
</el-form-item>
</el-col>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-row>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
@ -26,7 +46,6 @@
<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_name" show-overflow-tooltip />
<el-table-column label="客户名称" prop="custom_name" show-overflow-tooltip />
<el-table-column label="需求主题" prop="theme" show-overflow-tooltip />
@ -88,16 +107,13 @@ const showDtail = ref(false)
//
const queryParams = reactive({
org_id: '',
department_id: '',
project_id: '',
theme: '',
supplier: '',
supplier_contacts: '',
importance: '',
recording_time: '',
demand_content: '',
annex: ''
org_name: '',
dept_name: '',
project_name: '',
custom_name: ''
})
//

View File

@ -13,15 +13,13 @@
</el-select>
</el-form-item>
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code
" clearable placeholder="请输入项目编码" />
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="客户名称" prop="project_id">
<el-input v-model="custom_name
" clearable placeholder="请输入客户名称" />
<el-input v-model="custom_name" disabled clearable placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="需求名称" prop="customer_demand_id">
<el-input v-model="customer_demand_name" clearable placeholder="输入需求名称" @click="showDialog1 = true" />

View File

@ -2,8 +2,17 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="需求主题" prop="theme">
<el-input class="w-[280px]" v-model="queryParams.theme" clearable placeholder="请输入需求主题" />
<el-form-item label="解决方案主题" prop="theme">
<el-input class="w-[250px]" v-model="queryParams.theme" clearable placeholder="请输入解决方案主题" />
</el-form-item>
<el-form-item label="项目名称" prop="project_name">
<el-input class="w-[250px]" v-model="queryParams.project_name" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="客户名称" prop="custom_name">
<el-input class="w-[250px]" v-model="queryParams.custom_name" clearable placeholder="请输入客户名称" />
</el-form-item>
<el-form-item label="客户需求主题" prop="customer_demand_name">
<el-input class="w-[250px]" v-model="queryParams.customer_demand_name" clearable placeholder="请输入客户需求主题" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
@ -89,7 +98,10 @@ const showEdit = ref(false)
const showDtail = ref(false)
//
const queryParams = reactive({
theme: ''
theme: '',
customer_demand_name: '',
custom_name: '',
project_name: '',
})
//

View File

@ -236,13 +236,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -230,13 +230,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -416,13 +416,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -389,8 +389,8 @@ const setFormData = async (data: Record<any, any>) => {
})
// console.log(arry2, '22222222')
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
// console.log(formData, '2222222222')
@ -421,13 +421,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -1,213 +0,0 @@
<template>
<div>
<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="请输入组织名称" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="部门名称" prop="field102">
<el-input v-model="formData.field102" placeholder="请输入部门名称" 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-form-item>
<el-form-item label="项目名称" prop="field104">
<el-input v-model="formData.field104" placeholder="点击选择项目" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="项目编码" prop="field105">
<el-input v-model="formData.field105" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="合同编号" prop="field106">
<el-input v-model="formData.field106" placeholder="点击选择合同" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="合同名称" prop="field107">
<el-input v-model="formData.field107" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="合同类型" prop="field108">
<el-input v-model="formData.field108" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="收票日期" prop="field109">
<el-time-picker v-model="formData.field109" 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-form-item label="票据编号" prop="field110">
<el-input v-model="formData.field110" placeholder="请输入票据编号" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="收票银行" prop="field111">
<el-input v-model="formData.field111" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="收票账户编码" prop="field112">
<el-input v-model="formData.field112" placeholder="系统自动生成" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="汇票类型" prop="field113">
<el-radio-group v-model="formData.field113" size="medium">
<el-radio v-for="(item, index) in field113Options" :key="index" :label="item.value"
:disabled="item.disabled">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="汇票承兑银行" prop="field114">
<el-input v-model="formData.field114" placeholder="请输入汇票承兑银行" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="汇票到期日期" prop="field116">
<el-date-picker v-model="formData.field116" 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="field117">
<el-input v-model="formData.field117" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="收款金额" prop="field118">
<el-input v-model="formData.field118" placeholder="请输入收款金额" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="备注" prop="field119">
<el-input v-model="formData.field119" type="textarea" placeholder="请输入备注"
:autosize="{ minRows: 4, maxRows: 4 }" :style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item size="large">
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</template>
<script>
export default {
components: {},
props: [],
data() {
return {
formData: {
field101: undefined,
field102: undefined,
field103: undefined,
field104: undefined,
field105: undefined,
field106: undefined,
field107: undefined,
field108: undefined,
field109: null,
field110: undefined,
field111: undefined,
field112: undefined,
field113: undefined,
field114: undefined,
field116: null,
field117: undefined,
field118: undefined,
field119: undefined,
},
rules: {
field101: [{
required: true,
message: '请输入组织名称',
trigger: 'blur'
}],
field102: [{
required: true,
message: '请输入部门名称',
trigger: 'blur'
}],
field103: [{
required: true,
message: '点击选择客户',
trigger: 'blur'
}],
field104: [],
field105: [],
field106: [],
field107: [],
field108: [],
field109: [{
required: true,
message: '请选择收票日期',
trigger: 'change'
}],
field110: [{
required: true,
message: '请输入票据编号',
trigger: 'blur'
}],
field111: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field112: [{
required: true,
message: '系统自动生成',
trigger: 'blur'
}],
field113: [{
required: true,
message: '汇票类型不能为空',
trigger: 'change'
}],
field114: [{
required: true,
message: '请输入汇票承兑银行',
trigger: 'blur'
}],
field116: [{
required: true,
message: '请选择汇票到期日期',
trigger: 'change'
}],
field117: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field118: [{
required: true,
message: '请输入收款金额',
trigger: 'blur'
}],
field119: [],
},
field113Options: [{
"label": "银行承兑汇票",
"value": 1
}, {
"label": "商业承兑汇票",
"value": 2
}],
}
},
computed: {},
watch: {},
created() { },
mounted() { },
methods: {
submitForm() {
this.$refs['elForm'].validate(valid => {
if (!valid) return
// TODO
})
},
resetForm() {
this.$refs['elForm'].resetFields()
},
}
}
</script>
<style></style>

View File

@ -284,13 +284,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -1,180 +0,0 @@
<template>
<div>
<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="请输入组织名称" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="部门名称" prop="field102">
<el-input v-model="formData.field102" placeholder="请输入部门名称" 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-form-item>
<el-form-item label="汇票类型" prop="field104">
<el-input v-model="formData.field104" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="汇票承兑银行" prop="field105">
<el-input v-model="formData.field105" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="汇票到期日期" prop="field106">
<el-input v-model="formData.field106" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="收票账户编码" prop="field107">
<el-input v-model="formData.field107" placeholder="请输入收票账户编码" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="收票银行" prop="field108">
<el-input v-model="formData.field108" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="兑现日期" prop="field109">
<el-time-picker v-model="formData.field109" 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-form-item label="兑现金额" prop="field110">
<el-input v-model="formData.field110" placeholder="请输入兑现金额" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="兑现金额大写" prop="field111">
<el-input v-model="formData.field111" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="备注" prop="field112">
<el-input v-model="formData.field112" type="textarea" placeholder="请输入备注"
:autosize="{ minRows: 4, maxRows: 4 }" :style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="附件" prop="field113">
<el-upload ref="field113" :file-list="field113fileList" :action="field113Action"
:before-upload="field113BeforeUpload">
<el-button size="small" type="primary" icon="el-icon-upload">点击上传</el-button>
</el-upload>
</el-form-item>
<el-form-item size="large">
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</template>
<script>
export default {
components: {},
props: [],
data() {
return {
formData: {
field101: undefined,
field102: undefined,
field103: undefined,
field104: undefined,
field105: undefined,
field106: undefined,
field107: undefined,
field108: undefined,
field109: null,
field110: undefined,
field111: undefined,
field112: undefined,
field113: null,
},
rules: {
field101: [{
required: true,
message: '请输入组织名称',
trigger: 'blur'
}],
field102: [{
required: true,
message: '请输入部门名称',
trigger: 'blur'
}],
field103: [{
required: true,
message: '点击选择汇票',
trigger: 'blur'
}],
field104: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field105: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field106: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field107: [],
field108: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field109: [{
required: true,
message: '请选择兑现日期',
trigger: 'change'
}],
field110: [{
required: true,
message: '请输入兑现金额',
trigger: 'blur'
}],
field111: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field112: [],
},
field113Action: 'https://jsonplaceholder.typicode.com/posts/',
field113fileList: [],
}
},
computed: {},
watch: {},
created() { },
mounted() { },
methods: {
submitForm() {
this.$refs['elForm'].validate(valid => {
if (!valid) return
// TODO
})
},
resetForm() {
this.$refs['elForm'].resetFields()
},
field113BeforeUpload(file) {
let isRightSize = file.size / 1024 / 1024 < 2
if (!isRightSize) {
this.$message.error('文件大小超过 2MB')
}
return isRightSize
},
}
}
</script>
<style>
.el-upload__tip {
line-height: 1.2;
}
</style>

View File

@ -55,14 +55,14 @@
<el-col :span="8">
<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-input v-model="account_sn" readonly clearable placeholder="请输入收票账户编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收票银行" prop="acceptance_bill_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="bank_account" readonly clearable placeholder="请输入收票银行" />
<el-input v-model="deposit_bank" readonly clearable placeholder="请输入收票银行" />
</el-form-item>
</el-col>
@ -152,8 +152,8 @@ const customer_name = ref('')
const bill_sn = ref('')
const bill_type = ref('')
const bill_due_date = ref('')
const bank_account = ref('')
const bank_account_no = ref('')
const deposit_bank = ref('')
const account_sn = ref('')
const draft_acceptance_bank = ref('')
const list1 = reactive([])
const list2 = reactive([])
@ -210,8 +210,8 @@ const customEvent = (e: any) => {
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
deposit_bank.value = e.account_name
account_sn.value = e.account
showDialog.value = false;
};
@ -226,13 +226,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
@ -301,8 +303,8 @@ const setFormData = async (data: Record<any, any>) => {
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
deposit_bank.value = data.bankAccount.deposit_bank
account_sn.value = data.bankAccount.account_sn
if (data.amount) {
toChinesNum(data.amount)
}

View File

@ -1,218 +0,0 @@
<template>
<div>
<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="请输入组织名称" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="部门名称" prop="field102">
<el-input v-model="formData.field102" placeholder="请输入部门名称" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="供应商名称" prop="field120">
<el-input v-model="formData.field120" placeholder="点击选择供应商" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="供应商编码" prop="field121">
<el-input v-model="formData.field121" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="合同编号" prop="field106">
<el-input v-model="formData.field106" placeholder="点击选择合同" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="合同名称" prop="field107">
<el-input v-model="formData.field107" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="项目编码" prop="field105">
<el-input v-model="formData.field105" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="合同类型" prop="field122">
<el-input v-model="formData.field122" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="票据编号" prop="field110">
<el-input v-model="formData.field110" placeholder="请输入票据编号" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="开户银行" prop="field123">
<el-input v-model="formData.field123" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="账户编码" prop="field125">
<el-input v-model="formData.field125" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="汇票类型" prop="field126">
<el-input v-model="formData.field126" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="汇票承兑银行" prop="field127">
<el-input v-model="formData.field127" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="汇票到期日期" prop="field128">
<el-date-picker v-model="formData.field128" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
:style="{ width: '100%' }" placeholder="系统自动填写" clearable :disabled='true'></el-date-picker>
</el-form-item>
<el-form-item label="付款日期" prop="field129">
<el-date-picker v-model="formData.field129" 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="field130">
<el-input v-model="formData.field130" placeholder="请输入金额" clearable :style="{ width: '100%' }">
</el-input>
</el-form-item>
<el-form-item label="金额大写" prop="field131">
<el-input v-model="formData.field131" placeholder="系统自动填写" :disabled='true' clearable
:style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="备注" prop="field132">
<el-input v-model="formData.field132" type="textarea" placeholder="请输入备注"
:autosize="{ minRows: 4, maxRows: 4 }" :style="{ width: '100%' }"></el-input>
</el-form-item>
<el-form-item label="附件" prop="field133">
<el-upload ref="field133" :file-list="field133fileList" :action="field133Action"
:before-upload="field133BeforeUpload">
<el-button size="small" type="primary" icon="el-icon-upload">点击上传</el-button>
</el-upload>
</el-form-item>
<el-form-item size="large">
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</template>
<script>
export default {
components: {},
props: [],
data() {
return {
formData: {
field101: undefined,
field102: undefined,
field120: undefined,
field121: undefined,
field106: undefined,
field107: undefined,
field105: undefined,
field122: undefined,
field110: undefined,
field123: undefined,
field125: undefined,
field126: undefined,
field127: undefined,
field128: null,
field129: null,
field130: undefined,
field131: undefined,
field132: undefined,
field133: null,
},
rules: {
field101: [{
required: true,
message: '请输入组织名称',
trigger: 'blur'
}],
field102: [{
required: true,
message: '请输入部门名称',
trigger: 'blur'
}],
field120: [{
required: true,
message: '点击选择供应商',
trigger: 'blur'
}],
field121: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field106: [],
field107: [],
field105: [],
field122: [],
field110: [{
required: true,
message: '请输入票据编号',
trigger: 'blur'
}],
field123: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field125: [],
field126: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field127: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field128: [{
required: true,
message: '系统自动填写',
trigger: 'change'
}],
field129: [],
field130: [{
required: true,
message: '请输入金额',
trigger: 'blur'
}],
field131: [{
required: true,
message: '系统自动填写',
trigger: 'blur'
}],
field132: [],
},
field133Action: 'https://jsonplaceholder.typicode.com/posts/',
field133fileList: [],
}
},
computed: {},
watch: {},
created() { },
mounted() { },
methods: {
submitForm() {
this.$refs['elForm'].validate(valid => {
if (!valid) return
// TODO
})
},
resetForm() {
this.$refs['elForm'].resetFields()
},
field133BeforeUpload(file) {
let isRightSize = file.size / 1024 / 1024 < 2
if (!isRightSize) {
this.$message.error('文件大小超过 2MB')
}
return isRightSize
},
}
}
</script>
<style>
.el-upload__tip {
line-height: 1.2;
}
</style>

View File

@ -19,14 +19,14 @@
</el-select></el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="供应商名称" prop="supplier_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="customer_name" clearable placeholder="请输入供应商名称" />
<el-form-item label="供应商名称" prop="supplier_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" @click="showDialog = true">
<el-input v-model="supplier_name" readonly clearable placeholder="请输入供应商名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="供应商编码" prop="supplier_id">
<el-input v-model="customer_name" clearable placeholder="请输入供应商编码 " />
<el-input v-model="supplier_code" readonly clearable placeholder="请输入供应商编码 " />
</el-form-item>
</el-col>
@ -63,27 +63,27 @@
<el-col :span="8">
<el-form-item label="票据编号" prop="bill_sn" @click="showDialog1 = true">
<el-form-item label="票据编号" prop="acceptance_bill_id" @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" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="bank_account" clearable placeholder="请输入开户银行" />
<el-form-item label="开户银行" prop="acceptance_bill_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="deposit_bank" clearable placeholder="请输入开户银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="账户编码" prop="reimburser" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="bank_account_no" clearable placeholder="请输入账户编码" />
<el-form-item label="账户编码" prop="acceptance_bill_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="account_sn" clearable placeholder="请输入账户编码" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="汇票类型" prop="bill_type" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="汇票类型" prop="acceptance_bill_id" :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 }}
@ -95,13 +95,13 @@
</el-col>
<el-col :span="8">
<el-form-item label="汇票承兑银行" prop="draft_acceptance_bank" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<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" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="汇票到期日期" prop="acceptance_bill_id" :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>
@ -204,9 +204,11 @@ 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 deposit_bank = ref('')
const account_sn = ref('')
const draft_acceptance_bank = ref('')
const supplier_code = ref('')
const supplier_name = ref('')
const list1 = reactive([])
const list2 = reactive([])
const userInfo = userStore.userInfo
@ -255,17 +257,28 @@ const showDialog2 = ref(false)
const customEvent = (e: any) => {
formData.customer_id = e.id;
customer_name.value = e.name;
formData.supplier_id = e.id;
supplier_code.value = e.supplier_code
supplier_name.value = e.supplier_name
showDialog.value = false;
};
const customEvent1 = (e: any) => {
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
deposit_bank.value = e.account
account_sn.value = e.account_sn
showDialog1.value = false;
};
const customEvent2 = (e: any) => {
formData.procurement_contract_id = e.id
contract_name.value = e.contract_name;
contract_no.value = e.contract_no;
project_name.value = e.project_name;
@ -284,13 +297,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
@ -313,9 +328,9 @@ const formData = reactive({
id: '',
org_id: '',
dept_id: '',
supplier_id: 0,
procurement_contract_id: 0,
acceptance_bill_id: 0,
supplier_id: '',
procurement_contract_id: '',
acceptance_bill_id: '',
payment_date: "",
amount: "",
amount_daxie: "",
@ -365,8 +380,8 @@ const setFormData = async (data: Record<any, any>) => {
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
deposit_bank.value = data.bankAccount.deposit_bank
account_sn.value = data.bankAccount.account_sn

View File

@ -376,13 +376,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -91,12 +91,13 @@
<el-col :span="8">
<el-form-item label="附件" prop="field127">
<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>

View File

@ -311,13 +311,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -384,8 +386,8 @@ const setFormData = async (data: Record<any, any>) => {
});
Object.assign(formDataannex, arry1)
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {

View File

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form class="mb-[-16px]" :model="queryParams" inline label-width="auto">
<el-form-item label="供应商id" prop="supplier_id">
<el-input class="w-[280px]" v-model="queryParams.supplier_id" clearable placeholder="请输入供应商id" />
</el-form-item>
@ -33,10 +33,12 @@
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="供应商id" prop="supplier_id" show-overflow-tooltip />
<el-table-column label="审批id" prop="approve_id" show-overflow-tooltip />
<el-table-column label="项目id" prop="project_id" show-overflow-tooltip />
<el-table-column label="序号" type="index" width="55" show-overflow-tooltip />
<el-table-column label="处理流程" prop="supplier_id" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_no" show-overflow-tooltip />
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
<el-table-column label="供应商合同号" prop="supplier_contract_no" show-overflow-tooltip />
<el-table-column label="合同类型" prop="contract_type">
<template #default="{ row }">
@ -59,10 +61,15 @@
</template>
</el-table-column>
<el-table-column label="合同金额" prop="amount" show-overflow-tooltip />
<el-table-column label="不含税金额" prop="amount_excluding_tax" show-overflow-tooltip />
<el-table-column label="金额大写" prop="amount_daxie" show-overflow-tooltip />
<el-table-column label="质保金比例" prop="retention_money_rate" show-overflow-tooltip />
<el-table-column label="质保金" prop="retention_money" show-overflow-tooltip />
<el-table-column label="已付款金额" prop="" show-overflow-tooltip />
<el-table-column label="实际合同金额" prop="" show-overflow-tooltip />
<el-table-column label="已开票金额" prop="" show-overflow-tooltip />
<el-table-column label="未付款金额" prop="" show-overflow-tooltip />
<el-table-column label="未开票金额" prop="" show-overflow-tooltip />
<el-table-column label="退款金额" prop="" show-overflow-tooltip />
<el-table-column label="已入库数量" prop="" show-overflow-tooltip />
<el-table-column label="未入库数量" prop="" show-overflow-tooltip />
<el-table-column label="数量" prop="retention_money" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['contract.procurement_contract/edit']" type="primary" link @click="handleEdit(row)">

View File

@ -111,6 +111,21 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="field127">
<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>
@ -134,7 +149,7 @@ defineProps({
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const formDataannex = reactive([])
const datas = reactive({
provinceOptions: [],
cityOptions: [],
@ -192,7 +207,15 @@ const setFormData = async (data: Record<any, any>) => {
}
console.log(formData, '2222222222')
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

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form class="mb-[-16px]" :model="queryParams" inline label-width="auto">
<el-form-item label="客户名称" prop="custom_name">
<el-input class="w-[280px]" v-model="queryParams.custom_name" clearable placeholder="请输入客户昵称" />
</el-form-item>

View File

@ -0,0 +1,203 @@
<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.attendance_date }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工种">
{{ formData.work_type_text
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="上班时间">
{{ formData.work_start_time }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="下班时间">
{{ formData.work_end_time }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="记工数量">
{{ formData.work_record_num }}
</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.daily_salary
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日生活费">
{{ formData.daily_living
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日补贴">
{{ formData.daily_subsidy
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日其它">
{{ formData.daily_other
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="日收入">
{{ formData.daily_income
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注">
{{ formData.remark
}}
</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="60%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
<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 disabled placeholder="系统自动填写" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="日期" prop="attendance_date">
<el-date-picker class="flex-1 !flex" clearable v-model="formData.attendance_date" 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="person_id" @click="showDialog1 = true">
<el-input v-model="name" clearable readonly placeholder="请选择人员" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="身份证号" prop="person_id">
<el-input v-model="idcard" clearable disabled placeholder="系统自动填写" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工种" prop="person_id">
<el-input v-model="work_type" clearable disabled placeholder="系统自动填写" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="上班时间" prop="work_start_time">
<el-date-picker class="flex-1 !flex" clearable v-model="formData.work_start_time" 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="work_end_time">
<el-date-picker class="flex-1 !flex" clearable v-model="formData.work_end_time" 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="work_record_num">
<el-input v-model="formData.work_record_num" type="number" clearable placeholder="请输入记工数量" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="日工资" prop="daily_salary">
<el-input v-model="formData.daily_salary" type="number" clearable placeholder="请输入日工资" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="日生活费" prop="daily_living">
<el-input v-model="formData.daily_living" type="number" clearable placeholder="请输入日生活费" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="日补贴" prop="daily_subsidy">
<el-input v-model="formData.daily_subsidy" type="number" clearable placeholder="请输入日补贴" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="日其它" prop="daily_other">
<el-input v-model="formData.daily_other" type="number" clearable placeholder="请输入日其它" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="日收入" prop="daily_income">
<el-input v-model="formData.daily_income" type="number" clearable placeholder="请输入日收入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectDialog @customEvent="customEvent"></projectDialog>
</el-dialog>
<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 { attendancedetailAdd, attendancedetailEdit, attendancedetailDetail } from '@/api/project_attendance_detail'
import customDialog from '@/components/project_personnel/index.vue'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
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 idcard = ref('')
const name = ref('')
const work_type = 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.person_id = e.id
name.value = e.name
idcard.value = e.idcard
work_type.value = e.work_type_text
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: '',
person_id: '',
attendance_date: '',
work_start_time: '',
work_end_time: '',
work_record_num: '',
daily_salary: '',
daily_living: '',
daily_subsidy: '',
daily_other: '',
daily_income: '',
remark: '',
})
//
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
name.value = data.person_name
work_type.value = data.work_type_text
}
const getDetail = async (row: Record<string, any>) => {
const data = await attendancedetailDetail({
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 attendancedetailEdit(data)
: await attendancedetailAdd(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,137 @@
<template>
<div>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project.project_attendance_record/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project.project_attendance_record/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="序号" type="index" show-overflow-tooltip />
<el-table-column label="日记工单号" prop="person_idcard" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="日期" prop="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="work_type_text" show-overflow-tooltip />
<!-- <el-table-column label="日生活费合计" prop="insurance_no" show-overflow-tooltip /> -->
<el-table-column label="上班时间" prop="work_start_time" show-overflow-tooltip />
<el-table-column label="下班时间" prop="work_end_time" show-overflow-tooltip />
<el-table-column label="记工数量" prop="work_record_num" show-overflow-tooltip />
<el-table-column label="日工资" prop="daily_salary" show-overflow-tooltip />
<el-table-column label="日生活费" prop="daily_living" show-overflow-tooltip />
<el-table-column label="日补贴" prop="daily_subsidy" show-overflow-tooltip />
<el-table-column label="日其它" prop="daily_other" show-overflow-tooltip />
<el-table-column label="日收入" prop="daily_income" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_attendance_record/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project_attendance_record/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project_attendance_record/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 { attendancedetailLists, attendancedetailDelete, attendancedetailDetail } from '@/api/project_attendance_detail'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
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({
attendance_date: '',
})
//
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: attendancedetailLists,
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 attendancedetailDetail({ 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 attendancedetailDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await attendancedetailDetail({ id: data.id })
showDtail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>

View File

@ -1,87 +1,27 @@
<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">
<popup ref="popupRef" title="考勤记录" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData">
<div style="margin-bottom: 30px;font-size: 16px;">{{ formData.attendance_code }}</div>
<div style="margin-bottom: 30px;font-size: 16px;">{{ formData.attendance_date }}</div>
<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-table :data="formData.attendance_detail">
<el-table-column label="姓名" prop="name" show-overflow-tooltip />
<el-table-column label="姓名" prop="idcard" show-overflow-tooltip />
<el-table-column label="工种" prop="work_type_text" show-overflow-tooltip />
<el-table-column label="工作开始时间" prop="work_start_time" show-overflow-tooltip />
<el-table-column label="工作结束时间" prop="work_end_time" show-overflow-tooltip />
<el-table-column label="记工数量" prop="work_record_num" show-overflow-tooltip />
<el-table-column label="日工资" prop="daily_salary" show-overflow-tooltip />
<el-table-column label="日生活费" prop="daily_living" show-overflow-tooltip />
<el-table-column label="日补贴" prop="daily_subsidy" show-overflow-tooltip />
<el-table-column label="日其它" prop="daily_other" show-overflow-tooltip />
<el-table-column label="日收入" prop="daily_income" show-overflow-tooltip />
<el-table-column label="备注" prop="invoice_no" show-overflow-tooltip />
</el-table>
<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>

View File

@ -1,77 +1,41 @@
<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>
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<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-col :span="24">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
<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-col :span="24">
<el-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code" clearable disabled placeholder="系统自动填写" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="考勤日期" prop="attendance_date">
<el-date-picker class="flex-1 !flex" clearable v-model="formData.attendance_date" 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>
</el-col>
<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="type">
<el-input v-model="renshu" clearable disabled placeholder="系统自动填写" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" />
</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-col :span="24">
<el-form-item label="合同附件" prop="field127">
<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">
上传
@ -102,7 +66,7 @@
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 { attendanceRecordAdd, attendanceRecordEdit, attendanceRecordDetail } from '@/api/project_attendance_record'
import customDialog from '@/components/project_personnel/index.vue'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
@ -121,8 +85,8 @@ const showDialog = ref(false)
const showDialog1 = ref(false)
const project_name = ref('')
const project_code = ref('')
const person_name = ref('')
const idcard = ref('')
const renshu = ref('')
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
@ -139,16 +103,10 @@ const customEvent = (e) => {
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' ? '编辑保险管理' : '新增保险管理'
return mode.value == 'edit' ? '编辑考勤记录' : '新增考勤记录'
})
//
const handleAvatarSuccess_four = (
@ -173,18 +131,11 @@ const delFileFn = (index: number) => {
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: '',
attendance_date: '',
remark: '',
file: '',
attendance_detail: '',
})
@ -224,7 +175,7 @@ const setFormData = async (data: Record<any, any>) => {
}
const getDetail = async (row: Record<string, any>) => {
const data = await insurancemanagementDetail({
const data = await attendanceRecordDetail({
id: row.id
})
setFormData(data)
@ -239,8 +190,8 @@ const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await insurancemanagementEdit(data)
: await insurancemanagementAdd(data)
? await attendanceRecordEdit(data)
: await attendanceRecordAdd(data)
popupRef.value?.close()
emit('success')
}

View File

@ -2,21 +2,9 @@
<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 label="日期" prop="attendance_date">
<el-date-picker class="flex-1 !flex" clearable v-model="queryParams.attendance_date" type="date" value-format="YYYY-MM-DD" placeholder="选择考勤日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
@ -25,60 +13,45 @@
</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">
<el-button v-perms="['project.project_attendance_record/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 v-perms="['project.project_attendance_record/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="序号" type="index" show-overflow-tooltip />
<el-table-column label="处理流程" prop="person_idcard" show-overflow-tooltip />
<el-table-column label="流程步骤" prop="person_idcard" show-overflow-tooltip />
<el-table-column label="日记工单号" prop="attendance_code" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="姓名" prop="person_name" show-overflow-tooltip />
<el-table-column label="身份证号" prop="person_idcard" show-overflow-tooltip />
<el-table-column label="日期" prop="attendance_date" show-overflow-tooltip />
<el-table-column label="出勤人数" prop="due_date" show-overflow-tooltip />
<el-table-column label="记工数量" prop="work_record_num_total" show-overflow-tooltip />
<el-table-column label="日工资合计" prop="daily_salary_total" show-overflow-tooltip />
<el-table-column label="日生活费合计" prop="daily_living_total" show-overflow-tooltip />
<el-table-column label="日补贴合计" prop="daily_subsidy_total" show-overflow-tooltip />
<el-table-column label="日其它合计" prop="daily_other_total" show-overflow-tooltip />
<el-table-column label="日收入合计" prop="daily_income_total" show-overflow-tooltip />
<el-table-column label="投保日期" prop="insurance_date" show-overflow-tooltip />
<el-table-column label="备注" prop="invoice_no" 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 v-perms="['project.project_attendance_record/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project_insurance_management/delete']" type="danger" link @click="handleDelete(row.id)">
<el-button v-perms="['project.project_attendance_record/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project_insurance_management/detail']" link @click="handledetail(row)">
<el-button v-perms="['project.project_attendance_record/detail']" link @click="handledetail(row)">
详情
</el-button>
@ -98,7 +71,7 @@
<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 { attendanceRecordLists, attendanceRecordDelete, attendanceRecordDetail } from '@/api/project_attendance_record'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
@ -113,11 +86,8 @@ const showDtail = ref(false)
//
const queryParams = reactive({
type: '',
insurance_no: '',
insurance_company: '',
invoice_no: '',
handler: '',
attendance_date: '',
})
@ -135,7 +105,7 @@ const handleSelectionChange = (val: any[]) => {
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: insurancemanagementLists,
fetchFun: attendanceRecordLists,
params: queryParams
})
@ -150,7 +120,7 @@ const handleAdd = async () => {
//
const handleEdit = async (data: any) => {
console.log(data.id)
let res = await insurancemanagementDetail({ id: data.id })
let res = await attendanceRecordDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
@ -160,11 +130,11 @@ const handleEdit = async (data: any) => {
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await insurancemanagementDelete({ id })
await attendanceRecordDelete({ id })
getLists()
}
const handledetail = async (data: any) => {
let res = await insurancemanagementDetail({ id: data.id })
let res = await attendanceRecordDetail({ id: data.id })
showDtail.value = true
await nextTick()
detailRef.value?.open()

View File

@ -70,7 +70,20 @@
{{ formData.ask }}
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="附件" prop="field127">
<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>
@ -94,7 +107,7 @@ defineProps({
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const formDataannex = reactive([])
const datas = reactive({
provinceOptions: [],
cityOptions: [],
@ -112,6 +125,15 @@ 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)
}

View File

@ -16,15 +16,13 @@
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目编码" prop="project_id">
<el-input v-model="project_code
" readonly clearable placeholder="请输入项目编码" />
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="客户名称" prop="project_id">
<el-input v-model="custom_name
" readonly clearable placeholder="请输入客户名称" />
<el-input v-model="custom_name" disabled placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="需求名称" prop="customer_demand_id" @click="showDialog1 = true">
<el-input v-model="customer_demand_name" clearable readonly placeholder="请输入需求名称" />
<el-input v-model="customer_demand_name" clearable readonly placeholder="请选择需求" />
</el-form-item>
<el-form-item label="联系人" prop="contact_id" @click="showDialog2 = true">
@ -241,15 +239,7 @@ const setFormData = async (data: Record<any, any>) => {
deptAll({ 'org_id': data.org_id }).then((res) => {
Object.assign(jobs, res)
})
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
console.log(jobs)
project_name.value = data.project_name
custom_name.value = data.custom_name
@ -261,7 +251,15 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
//@ts-ignore
formData.quotation_date = timeFormat(formData.quotation_date, 'yyyy-mm-dd hh:MM:ss')
}

View File

@ -2,8 +2,21 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="项目id" prop="project_id">
<el-input class="w-[280px]" v-model="queryParams.project_id" clearable placeholder="请输入项目id" />
<el-form-item label="项目名称" prop="project_name">
<el-input class="w-[280px]" v-model="queryParams.project_name" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="客户名称" prop="custom_name">
<el-input class="w-[280px]" v-model="queryParams.custom_name" clearable placeholder="请输入客户名称" />
</el-form-item>
<el-form-item label="联系人" prop="contact_name">
<el-input class="w-[280px]" v-model="queryParams.contact_name" clearable placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="联系电话" prop="contact_phone">
<el-input class="w-[280px]" v-model="queryParams.contact_phone" clearable placeholder="请输入联系电话" />
</el-form-item>
<el-form-item label="技术人员" prop="technician_name">
<el-input class="w-[280px]" v-model="queryParams.technician_name" clearable placeholder="请输入技术人员" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
@ -89,7 +102,12 @@ const showDtail = ref(false)
//
const queryParams = reactive({
project_id: ''
project_name: '',
custom_name: '',
contact_name: '',
contact_phone: '',
technician_name: '',
})
//

View File

@ -10,10 +10,10 @@
</el-col>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="project_code" readonly @click="showDialog = true" clearable placeholder="点击选择项目" />
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
</el-form-item> </el-col><el-col :span="8">
<el-form-item label="客户名称" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]">
<el-input v-model="custom_name" readonly @click="showDialog = true" clearable placeholder="点击选择项目" />
<el-input v-model="custom_name" disabled clearable placeholder="系统自动填写" />
</el-form-item> </el-col><el-col :span="8">
<el-form-item label="执行人" prop="executor">
<el-input v-model="formData.executor" clearable placeholder="请输入执行人" />

View File

@ -1,106 +1,88 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-row>
<el-col :span="6">
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="queryParams.project_id" clearable placeholder="请输入项目名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="执行人" prop="executor">
<el-input v-model="queryParams.executor" clearable placeholder="请输入执行人" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="联系方式" prop="contact_information">
<el-input v-model="queryParams.contact_information" clearable placeholder="请输入联系方式" />
</el-form-item>
</el-col>
<el-form class="mb-[-16px]" :model="queryParams" inline label-width="auto">
<el-col :span="6">
<el-form-item label="职位" prop="position">
<el-input v-model="queryParams.position" clearable placeholder="请输入职位" />
</el-form-item>
</el-col>
<el-form-item label="项目名称" prop="project_id">
<el-input class="w-[280px]" v-model="queryParams.project_id" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-col :span="6">
<el-form-item label="项目角色" prop="project_role">
<el-input v-model="queryParams.project_role" clearable placeholder="请输入项目角色" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="联系人" prop="contacts">
<el-input v-model="queryParams.contacts" clearable placeholder="请输入联系人" />
</el-form-item>
</el-col>
<el-form-item label="执行人" prop="executor">
<el-input class="w-[280px]" v-model="queryParams.executor" clearable placeholder="请输入执行人" />
</el-form-item>
<el-form-item label="联系方式" prop="contact_information">
<el-input class="w-[280px]" v-model="queryParams.contact_information" clearable placeholder="请输入联系方式" />
</el-form-item>
<el-form-item label="职位" prop="position">
<el-input class="w-[280px]" v-model="queryParams.position" clearable placeholder="请输入职位" />
</el-form-item>
<el-form-item label="项目角色" prop="project_role">
<el-input class="w-[280px]" v-model="queryParams.project_role" clearable placeholder="请输入项目角色" />
</el-form-item>
<el-form-item label="联系人" prop="contacts">
<el-input class="w-[280px]" v-model="queryParams.contacts" clearable placeholder="请输入联系人" />
</el-form-item>
<el-col :span="6">
<el-form-item label="跟进类型" prop="follow_type">
<el-select v-model="queryParams.follow_type" clearable placeholder="请选择跟进类型">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in dictData.follow_type" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="主题" prop="theme">
<el-input v-model="queryParams.theme" clearable placeholder="请输入主题" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="行动描述" prop="action_description">
<el-input v-model="queryParams.action_description" clearable placeholder="请输入行动描述" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目把握度" prop="project_assurance">
<el-select v-model="queryParams.project_assurance" clearable placeholder="请选择项目把握度">
<el-option v-for="(item, index) in dictData.project_assurance" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="跟进状态" prop="follow_status">
<el-select v-model="queryParams.follow_status" clearable placeholder="请选择跟进状态">
<el-option v-for="(item, index) in dictData.follow_status" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="跟进阶段" prop="follow_stage">
<el-select v-model="queryParams.follow_stage" clearable placeholder="请输入跟进阶段">
<el-form-item label="跟进类型" prop="follow_type">
<el-select v-model="queryParams.follow_type" class="w-[280px]" clearable placeholder="请选择跟进类型">
<el-option label="全部" value=""></el-option>
<el-option v-for="(item, index) in dictData.follow_type" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-option v-for="(item, index) in dictData.follow_stage" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="主题" prop="theme">
<el-input v-model="queryParams.theme" class="w-[280px]" clearable placeholder="请输入主题" />
</el-form-item>
<el-form-item label="行动描述" prop="action_description">
<el-input v-model="queryParams.action_description" class="w-[280px]" clearable placeholder="请输入行动描述" />
</el-form-item>
<el-form-item label="项目把握度" prop="project_assurance">
<el-select v-model="queryParams.project_assurance" class="w-[280px]" clearable placeholder="请选择项目把握度">
<el-option v-for="(item, index) in dictData.project_assurance" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="跟进状态" prop="follow_status">
<el-select v-model="queryParams.follow_status" class="w-[280px]" clearable placeholder="请选择跟进状态">
<el-option v-for="(item, index) in dictData.follow_status" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="跟进阶段" prop="follow_stage">
<el-select v-model="queryParams.follow_stage" class="w-[280px]" clearable placeholder="请输入跟进阶段">
<el-option v-for="(item, index) in dictData.follow_stage" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="跟进日期" prop="follow_date">
<daterange-picker v-model:startTime="queryParams.start_time" v-model:endTime="queryParams.end_time" />
</el-form-item>
<el-form-item label="下次回访日期" prop="next_follow_up_date">
<daterange-picker v-model:startTime="queryParams.start_time" v-model:endTime="queryParams.end_time" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="跟进日期" prop="follow_date">
<daterange-picker v-model:startTime="queryParams.start_time" v-model:endTime="queryParams.end_time" />
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="下次回访日期" prop="next_follow_up_date">
<daterange-picker v-model:startTime="queryParams.start_time" v-model:endTime="queryParams.end_time" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-col>
</el-row>
<!-- <l-form-item label="" prop="ceate_time">
<el-input v-model="queryParams.ceate_time" clearable placeholder="请输入" />
</l-form-item> -->

View File

@ -312,13 +312,15 @@ const getlist = () => {
}
})
}
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -241,13 +241,15 @@ const getlist = () => {
}
})
}
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -2,8 +2,14 @@
<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="90px" :rules="formRules">
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="formData.project_name" @click="showDialog = true" clearable placeholder="点击选择项目" />
<el-form-item label="项目名称" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_name" @click="showDialog = true" clearable placeholder="点击选择项目" />
</el-form-item>
<el-form-item label="项目编码" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="project_code" disabled clearable placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="客户名称" prop="project_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="custom_name" disabled @click="showDialog = true" clearable placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="技术人员" prop="technician_ids">
<!-- <el-input v-model="technician" clearable placeholder="请输入技术人员" @click="userone('1')" /> -->
@ -197,11 +203,16 @@ const technician
const business_people
= ref([])
const custom_name = ref('')
const project_name = ref('')
const project_code = ref('')
const showDialog = ref(false)
const customEvent = (e: any) => {
formData.project_id = e.id;
formData.project_name = e.name;
project_name.value = e.name;
project_code.value = e.project_code;
custom_name.value = e.custom_name;
showDialog.value = false;
};
//
@ -326,7 +337,6 @@ const popupTitle = computed(() => {
const formData = reactive({
id: '',
project_id: '',
project_name: "",
technician_ids: '',
business_people_ids: '',
cross_departmental_personnel_ids: '',

View File

@ -1,7 +1,7 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form class="mb-[-16px]" :model="queryParams" inline label-width="auto">
<el-form-item label="项目名称" prop="project_id">
<el-input class="w-[280px]" v-model="queryParams.project_id" clearable placeholder="请输入项目名称" />
</el-form-item>

View File

@ -12,60 +12,36 @@
<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="24">
<el-form-item label="付款类型" prop="invoice_type">
<el-radio-group v-model="formData.invoice_type" placeholder="请选择付款类型">
<el-radio v-for="( item, index ) in dictData.invoice_type " :key="index" :label="parseInt(item.value)">
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="投保日期" prop="insurance_date">
<el-date-picker class="flex-1 !flex" v-model="formData.insurance_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择投保日期">
<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 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="type">
<el-input v-model="formData.type" clearable placeholder="请输入保险种类" />
<el-form-item label="合计金额大写(元)" prop="insured_amount">
<el-input v-model="formData.insured_amount" 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 label="备注" prop="handler">
<el-input v-model="formData.handler" clearable placeholder="请输入备注" />
</el-form-item> </el-col>
@ -87,6 +63,37 @@
</el-form-item>
</el-col>
</el-row>
<div style="margin-bottom: 30px;">付款计划</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.pay_plan">
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd(row)">+</el-button>
<el-button @click="handleDelete(row)">-</el-button>
</template>
</el-table-column>
<el-table-column label="期次" prop="name1">
<template #default="{ row }">
<el-select v-model="row.period" clearable placeholder="请选择期次">
<el-option v-for="(item, index) in dictData.pay_period " :key="index" :label="item.name" :value="item.id" />
</el-select>
</template>
</el-table-column>
<el-table-column label="计划付款日期" prop="pay_date">
<template #default="{ row }">
<el-date-picker v-model="row.pay_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择签订日期">
</el-date-picker>
</template></el-table-column>
<el-table-column label="金额" prop="pay_amount">
<template #default="{ row }"> <el-input v-model="row.pay_amount" /> </template></el-table-column>
<el-table-column label="备注" prop="remark">
<template #default="{ row }">
<el-input v-model="row.remark" />
</template>
</el-table-column>
</el-table>
</div>
</el-form>
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
@ -146,6 +153,18 @@ const customEvent1 = (e) => {
showDialog1.value = false
}
const handleAdd = (row: any) => {
// row
const index = formData.pay_plan.indexOf(row);
formData.pay_plan.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
// row
const index = formData.pay_plan.indexOf(row);
formData.pay_plan.splice(index, 1);
};
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑保险管理' : '新增保险管理'

View File

@ -25,38 +25,37 @@
</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">
<el-button v-perms="['project.project_salary/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 v-perms="['project.project_salary/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="序号" type="index" show-overflow-tooltip />
<el-table-column label="处理流程" prop="person_idcard" show-overflow-tooltip />
<el-table-column label="流程步骤" prop="person_idcard" show-overflow-tooltip />
<el-table-column label="工资付款单号" prop="person_idcard" 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="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="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="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="handler" 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">
@ -72,13 +71,13 @@
<!-- <el-table-column label="人员标识" prop="per_daily_living" show-overflow-tooltip /> -->
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_insurance_management/edit']" type="primary" link @click="handleEdit(row)">
<el-button v-perms="['project.project_salary/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project.project_insurance_management/delete']" type="danger" link @click="handleDelete(row.id)">
<el-button v-perms="['project.project_salary/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project_insurance_management/detail']" link @click="handledetail(row)">
<el-button v-perms="['project.project_salary/detail']" link @click="handledetail(row)">
详情
</el-button>
@ -98,7 +97,7 @@
<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 { insurancemanagementLists, insurancemanagementDelete, insurancemanagementDetail } from '@/api/project_salary'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])

View File

@ -316,13 +316,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -398,8 +400,8 @@ const setFormData = async (data: Record<any, any>) => {
}
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
project_name.value = data.project.name
project_code.value = data.project.project_code

View File

@ -159,13 +159,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -180,13 +180,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -179,13 +179,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -102,13 +102,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -225,13 +225,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -141,13 +141,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -159,13 +159,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -157,13 +157,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -183,13 +183,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -111,13 +111,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -143,13 +143,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -149,13 +149,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -239,13 +239,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -308,8 +310,8 @@ const setFormData = async (data: Record<any, any>) => {
});
Object.assign(formDataannex, arry1)
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
customer_name.value = data.custom.name
for (const key in formData) {

View File

@ -2,8 +2,11 @@
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<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="flex-1" v-model="queryParams.contract_id" clearable placeholder="请选择客户">
<el-option v-for="(item, index) in customerList" :key="index" :label="item.name" :value="parseInt(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="联系人" prop="contacts">
<el-input class="w-[280px]" v-model="queryParams.contacts" clearable placeholder="请输入联系人" />
@ -72,6 +75,7 @@
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiQuotationLists, apiQuotationDelete, apiQuotationDetail } from '@/api/quotation'
import { apiCustomLists } from '@/api/custom'
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
@ -82,7 +86,7 @@ const editRef = shallowRef<InstanceType<typeof EditPopup>>()
const showEdit = ref(false)
const showDtail = ref(false)
const customerList = ref([])
//
@ -145,6 +149,14 @@ const handleDetail = async (data: any) => {
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
//
const customerlist = async () => {
let res = await apiCustomLists({ page_size: 9999, page_no: 1 })
customerList.value = res.lists
}
customerlist()
getLists()
</script>

View File

@ -1,11 +1,7 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="报价单id" prop="quotation_id">
<el-input class="w-[280px]" v-model="queryParams.quotation_id" clearable placeholder="请输入报价单id" />
</el-form-item>
@ -18,12 +14,7 @@
<el-form-item label="税率" prop="tax_rate">
<el-select class="w-[280px]" v-model="queryParams.tax_rate" clearable placeholder="请选择税率">
<el-option label="全部" value=""></el-option>
<el-option
v-for="(item, index) in dictData.tax_rate"
:key="index"
:label="item.name"
:value="item.value"
/>
<el-option v-for="(item, index) in dictData.tax_rate" :key="index" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
@ -33,51 +24,37 @@
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['quotation.quotation_detail/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['quotation.quotation_detail/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="报价单id" prop="quotation_id" show-overflow-tooltip />
<el-table-column label="产品id" prop="product_id" show-overflow-tooltip />
<el-table-column label="产品数量" prop="product_num" show-overflow-tooltip />
<el-table-column label="报价单号" prop="quotation_id" show-overflow-tooltip />
<el-table-column label="客户名称" prop="quotation_id" show-overflow-tooltip />
<el-table-column label="制单人" prop="product_id" show-overflow-tooltip />
<el-table-column label="报价日期" prop="product_num" show-overflow-tooltip />
<el-table-column label="产品类别" prop="product_num" show-overflow-tooltip />
<el-table-column label="产品中类" prop="product_num" show-overflow-tooltip />
<el-table-column label="产品小类" prop="product_num" show-overflow-tooltip />
<el-table-column label="产品名称" prop="product_num" show-overflow-tooltip />
<el-table-column label="产品编码" prop="product_num" show-overflow-tooltip />
<el-table-column label="规格型号" prop="product_num" show-overflow-tooltip />
<el-table-column label="品牌" prop="product_num" show-overflow-tooltip />
<el-table-column label="参数说明" prop="product_num" show-overflow-tooltip />
<el-table-column label="单位" prop="product_num" show-overflow-tooltip />
<el-table-column label="数量" prop="product_num" show-overflow-tooltip />
<el-table-column label="税率" prop="tax_rate">
<template #default="{ row }">
<dict-value :options="dictData.tax_rate" :value="row.tax_rate" />
</template>
</el-table-column>
<el-table-column label="含税单价" prop="product_num" show-overflow-tooltip />
<el-table-column label="不含税金额" prop="product_num" show-overflow-tooltip />
<el-table-column label="含税金额" prop="product_num" show-overflow-tooltip />
<el-table-column label="备注" prop="product_num" show-overflow-tooltip />
<el-table-column label="添加人" prop="product_num" show-overflow-tooltip />
<el-table-column label="创建日期" prop="product_num" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['quotation.quotation_detail/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['quotation.quotation_detail/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">

View File

@ -185,13 +185,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -230,13 +230,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -153,13 +153,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -153,13 +153,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -216,13 +216,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -211,13 +211,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -172,13 +172,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -153,13 +153,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -137,13 +137,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -156,13 +156,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -162,13 +162,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}

View File

@ -219,13 +219,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -275,8 +277,8 @@ const setFormData = async (data: Record<any, any>) => {
});
Object.assign(formDataannex, arry1)
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
if (data.negotiation_basis.length > 0) {

View File

@ -363,13 +363,15 @@ const getlist = () => {
})
}
//
const deptrmt = (e) => {
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
list2.splice(0, list2.length, ...res)
})
}
//
@ -382,8 +384,8 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key]
}
}
if (formData.dept_id) {
getlist1(formData.dept_id)
if (data.dept_id) {
getlist1(data.dept_id)
}
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.split(',').map((item: any, index: any) => {

View File

@ -0,0 +1,227 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="供应商联系人详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="供应商编码">
{{ formData.supplier.supplier_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商名称">
{{ formData.supplier.supplier_name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="姓名">
{{ formData.name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别">
<dict-value :options="dictData.sex" :value="formData.sex" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出生日期">
{{ formData.birthday }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人分类">
<dict-value :options="dictData.contacts_type" :value="formData.contacts_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="负责业务">
{{ formData.responsible }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型">
<dict-value :options="dictData.contacts_cate" :value="formData.contacts_cate" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门">
{{ formData.department }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职务">
{{ formData.duties }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工作电话">
{{ formData.work_phone }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮件地址">
{{ formData.email }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="传真">
{{ formData.fax }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮编">
{{ formData.zip_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="家庭住址">
{{ formData.family_address }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="证件类型">
<dict-value :options="dictData.id_type" :value="formData.id_type" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="证件号码">
{{ formData.idcard }}
</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="附件" prop="field127">
<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>
</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>) => {
// for (const key in formData) {
// if (data[key] != null && data[key] != undefined) {
// //@ts-ignore
// formData[key] = data[key]
// }
// }
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
Object.assign(formData, data)
console.log(formData, '2222222222')
}
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,307 @@
<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">
<el-row>
<el-col :span="8">
<el-form-item label="供应商编码">
<el-input v-model="supplier_code" disabled clearable placeholder="系统默认生成" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="供应商" prop="supplier_id" :rules="[{ required: true, message: '不可为空', trigger: 'change' }]" @click="showDialog = true">
<el-input v-model="supplier_name" readonly clearable placeholder="选择供应商" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="姓名" prop="name" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.name" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="性别" prop="sex">
<el-select v-model="formData.sex" clearable placeholder="请选择性别">
<el-option v-for="(item, index) in dictData.sex" :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="birthday">
<el-date-picker v-model="formData.birthday" format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请输入出生日期" clearable></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系人分类" prop="contacts_type">
<el-select v-model="formData.contacts_type" clearable placeholder="请选择联系人分类">
<el-option v-for="(item, index) in dictData.contacts_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="responsible">
<el-input v-model="formData.responsible" clearable placeholder="请输入负责业务" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="称谓" prop="title">
<el-input v-model="formData.title" clearable placeholder="请输入称谓" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系人类型" prop="contacts_cate">
<el-select v-model="formData.contacts_cate" clearable placeholder="请选择联系人类型">
<el-option v-for="(item, index) in dictData.contacts_cate" :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="department">
<el-input v-model="formData.department" clearable placeholder="请输入部门" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="职务" prop="duties">
<el-input v-model="formData.duties" clearable placeholder="请输入职务" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工作电话" prop="work_phone">
<el-input v-model="formData.work_phone" clearable placeholder="请输入工作电话" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="移动电话" prop="mobile">
<el-input v-model="formData.mobile" clearable placeholder="请输入移动电话" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="邮件地址" prop="email">
<el-input v-model="formData.email" clearable placeholder="请输入邮件地址" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="传真" prop="fax">
<el-input v-model="formData.fax" clearable placeholder="请输入传真" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="邮编" prop="zip_code">
<el-input v-model="formData.zip_code" clearable placeholder="请输入邮编" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="家庭住址" prop="family_address">
<el-input v-model="formData.family_address" clearable placeholder="请输入家庭住址" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="证件类型" prop="id_type">
<el-select v-model="formData.id_type" clearable placeholder="请选择证件类型">
<el-option v-for="(item, index) in dictData.id_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="idcard">
<el-input v-model="formData.idcard" 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%">
<supplierTable @customEvent="customEvent"></supplierTable>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="bidBiddingDecisionEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import supplierTable from "@/components/supplier/index.vue"
import { suppliercontactsAdd, suppliercontactsEdit, suppliercontactsDetail } from '@/api/suppler_contact'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const supplier_name = ref('')
const supplier_code = ref('')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
const formDataannex = reactive([])
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const customEvent = (e: any) => {
formData.supplier_id = e.id;
supplier_name.value = e.supplier_name
supplier_code.value = e.supplier_code
showDialog.value = false;
};
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑供应商联系人表' : '新增供应商联系人表'
})
//
const formData = reactive({
id: '',
supplier_id: '',
name: "",
sex: '',
birthday: "",
contacts_type: '',
responsible: "",
title: "",
contacts_cate: '',
department: "",
duties: "",
work_phone: "",
mobile: "",
email: "",
fax: "",
zip_code: "",
family_address: "",
id_type: '',
idcard: "",
remark: "",
annex: ""
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
supplier_name.value = data.supplier.supplier_name
supplier_code.value = data.supplier.supplier_code
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
}
}
}
const getDetail = async (row: Record<string, any>) => {
const data = await suppliercontactsDetail({
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 suppliercontactsEdit(data)
: await suppliercontactsAdd(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,167 @@
<template>
<div>
<el-card class="!border-none mb-4" 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 label="联系人分类" prop="contacts_type">
<el-select class="flex-1" v-model="queryParams.contacts_type" clearable placeholder="请选择联系人分类">
<el-option v-for="(item, index) in dictData.contacts_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item label="供应商" prop="supplier_id">
<el-select class="flex-1" v-model="queryParams.supplier_id" clearable placeholder="请选择供应商">
<el-option v-for="(item, index) in supplierList" :key="index" :label="item.supplier_name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['bid.bid_bidding_decision/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['bid.bid_bidding_decision/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="supplier_code" show-overflow-tooltip />
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
<el-table-column label="姓名" prop="name" show-overflow-tooltip />
<el-table-column label="性别" prop="sex" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.sex" :value="row.sex" />
</template>
</el-table-column>
<el-table-column label="出生日期" prop="birthday" show-overflow-tooltip />
<el-table-column label="联系人分类" prop="contacts_type">
<template #default="{ row }">
<dict-value :options="dictData.contacts_type" :value="row.contacts_type" />
</template>
</el-table-column>
<el-table-column label="负责业务" prop="responsible" show-overflow-tooltip />
<el-table-column label="类型" prop="contacts_cate">
<template #default="{ row }">
<dict-value :options="dictData.contacts_cate" :value="row.contacts_cate" />
</template>
</el-table-column>
<el-table-column label="部门" prop="department" show-overflow-tooltip />
<el-table-column label="职务" prop="duties" show-overflow-tooltip />
<el-table-column label="工作电话" prop="work_phone" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['bid.bid_bidding_decision/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['bid.bid_bidding_decision/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['bid.bid_bidding_decision/detail']" link @click="handledetail(row)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="bidBiddingDecisionLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { suppliercontactsLists, suppliercontactsDelete, suppliercontactsDetail } from '@/api/suppler_contact'
import { apisupplierLists } from '@/api/suppler_list'
import { timeFormat } from '@/utils/util'
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 supplierList = ref([])
//
const queryParams = reactive({
name: '',
supplier_id: '',
contacts_type: ""
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('id_type,contacts_cate,contacts_type,sex')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: suppliercontactsLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await suppliercontactsDetail({ 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 suppliercontactsDelete({ id })
getLists()
}
//
const handledetail = async (data: any) => {
let res = await suppliercontactsDetail({ id: data.id })
showDtail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
const supplierlist = async () => {
let res = await apisupplierLists({ page_no: 1, page_size: 8888 })
supplierList.value = res.lists
}
supplierlist()
getLists()
</script>

View File

@ -0,0 +1,241 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="供应商管理详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px">
<el-card class="mb-2">
<el-row>
<el-col :span="12">
<el-form-item label="建档人">
{{ formData.custom_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.dept.name
}}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商编码">
{{ formData.supplier_code
}}
</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.supplier_introduction }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="品牌类别">
{{ formData.brand_category }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商照片" prop="photos">
<div v-if="formData.photos && formData.photos.length > 0">
<material-picker v-model="formData.photos" />
</div>
<div v-else>暂无供应商照片</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商分组">
<dict-value :options="dictData.supplier_group" :value="formData.group_id" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商分类">
<dict-value :options="dictData.supplier_category" :value="formData.category_id" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="供应商等级">
<dict-value :options="dictData.supplier_grade" :value="formData.grade" />
</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="性别">
<dict-value :options="dictData.sex" :value="formData.contacts_sex" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出生日期">
{{ formData.birthday }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="电话号码">
{{ formData.competitor }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="开标日期">
{{ formData.phone }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮箱">
{{ formData.email }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="地址">
{{ formData.address }}
</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="附件" prop="field127">
<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>
</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>) => {
// for (const key in formData) {
// if (data[key] != null && data[key] != undefined) {
// //@ts-ignore
// formData[key] = data[key]
// }
// }
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
Object.assign(formData, data)
console.log(formData, '2222222222')
}
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,405 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="基本信息" name="first">
<el-row>
<el-col :span="8">
<el-form-item label="建档人" prop="create_user_id">
<el-input v-model="create_user_name" readonly clearable placeholder="请输入建档人" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="组织" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="部门" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="供应商编码" prop="supplier_code">
<el-input v-model="formData.supplier_code" readonly clearable placeholder="系统默认生成" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="供应商名称" prop="supplier_name">
<el-input v-model="formData.supplier_name" clearable placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="供应商简介" prop="supplier_introduction">
<el-input v-model="formData.supplier_introduction" type="textarea" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="品牌类别" prop="brand_category">
<el-input v-model="formData.brand_category" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="24">
<el-form-item label="供应商照片" prop="photos">
<material-picker v-model="formData.photos" />
</el-form-item></el-col>
<el-col :span="24">
<el-form-item label="供应商分组" label-width="130px" prop="group_id">
<el-radio-group v-model="formData.group_id" placeholder="请选择供应商分组">
<el-radio v-for="(item, index) in dictData.supplier_group" :key="index" :label="parseInt(item.value)">
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item></el-col>
<el-col :span="24">
<el-form-item label="供应商分类" label-width="130px" prop="category_id">
<el-radio-group v-model="formData.category_id" placeholder="请选择供应商分类">
<el-radio v-for="(item, index) in dictData.supplier_category" :key="index" :label="parseInt(item.value)">
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item></el-col><el-col :span="24">
<el-form-item label="供应商等级" label-width="130px" prop="grade">
<el-radio-group v-model="formData.grade" placeholder="请选择供应商等级">
<el-radio v-for="(item, index) in dictData.supplier_grade" :key="index" :label="parseInt(item.value)">
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="联系人" prop="contacts">
<el-input v-model="formData.contacts" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="24">
<el-form-item label="性别" label-width="130px" prop="contacts_sex">
<el-radio-group v-model="formData.contacts_sex" placeholder="请选择性别">
<el-radio v-for="(item, index) in dictData.sex" :key="index" :label="parseInt(item.value)">
{{ item.name }}
</el-radio>
</el-radio-group>
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="出生日期" prop="birthday">
<el-date-picker v-model="formData.birthday" format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择出生日期" clearable></el-date-picker>
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="电话号码" prop="phone">
<el-input v-model="formData.phone" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="邮箱" prop="email">
<el-input v-model="formData.email" clearable placeholder="请输入" /> </el-form-item></el-col>
<el-col :span="8">
<el-form-item label="地址" prop="address">
<el-input v-model="formData.address" 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-tab-pane>
<el-tab-pane label="开票信息" name="second">
<el-row>
<el-col :span="8">
<el-form-item label="开票公司名称" prop="invoice_company_name">
<el-input v-model="formData.invoice_company_name" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="纳税人识别号" prop="taxpayer_identification_number">
<el-input v-model="formData.taxpayer_identification_number" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="开户银行" prop="bank_name">
<el-input v-model="formData.bank_name" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="开户名称" prop="bank_accnout_name">
<el-input v-model="formData.bank_accnout_name" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="账号" prop="bank_account">
<el-input v-model="formData.bank_account" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="开户地址" prop="bank_address">
<el-input v-model="formData.bank_address" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="期初未开票金额(元)" prop="init_invoice_amount">
<el-input v-model="formData.init_invoice_amount" type="number" clearable placeholder="请输入" />
</el-form-item></el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="账期管理" name="third">
<el-col :span="8">
<el-form-item label="授信额度(元)" prop="credit_limit">
<el-input v-model="formData.credit_limit" type="number" clearable placeholder="请输入" />
</el-form-item></el-col>
<el-col :span="8">
<el-form-item label="账期(元)" prop="account_period">
<el-input v-model="formData.account_period" type="number" clearable placeholder="请输入" />
</el-form-item></el-col>
</el-tab-pane>
</el-tabs>
</el-form>
<reviewprocess />
</popup>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="bidBiddingDecisionEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import reviewprocess from '@/components/reviewprocess/index.vue'
import projectTable from "@/components/project/index.vue"
import { apisupplierAdd, apisupplierEdit, apisupplierDetail } from '@/api/suppler_list'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const create_user_name = ref('')
const project_name = ref('')
const project_code = ref('')
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const list1 = reactive([])
const list2 = reactive([])
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
const userStore = useUserStore();
const userInfo = userStore.userInfo
const formDataannex = reactive([])
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
//
const customEvent = (e: any) => {
formData.project_id = e.id;
project_name.value = e.custom_name
project_code.value = e.project_code
showDialog.value = false;
};
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑供应商管理' : '新增供应商管理'
})
//
const activeName = ref('first')
const handleClick = (tab: TabsPaneContext, event: Event) => {
// console.log(tab, event)
}
//
const getlist = () => {
getAll().then((res) => {
Object.assign(list1, res)
if (res.length > 0 && !formData.org_id) {
formData.org_id = res[0].id
deptAll({ 'org_id': res[0].id }).then((res) => {
if (res.length > 0) {
Object.assign(list2, res)
formData.dept_id = res[0].id
}
})
}
})
}
//
const deptrmt = (e: any) => {
formData.dept_id = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
Object.assign(list2, res)
})
}
//
const formData = reactive({
id: '',
dept_id: '',
org_id: '',
create_user_id: "",
supplier_code: "",
supplier_name: "",
supplier_introduction: "",
brand_category: "",
photos: "",
group_id: "",
category_id: "",
grade: "",
contacts: "",
contacts_sex: "",
birthday: "",
phone: "",
email: "",
address: "",
remark: "",
annex: "",
invoice_company_name: "",
taxpayer_identification_number: "",
bank_name: "",
bank_accnout_name: "",
bank_account: "",
bank_address: "",
init_invoice_amount: "",
credit_limit: "",
account_period: ""
})
//
const formRules = reactive<any>({
})
//
const setFormData = async (data: Record<any, any>) => {
if (data.annex && data.annex.length > 0) {
const arry1 = data.annex.map((item: any, index: any) => {
return {
name: `文件${index + 1}`,
uri: item
};
});
Object.assign(formDataannex, arry1)
}
if (data.dept_id) {
getlist1(data.dept_id)
}
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 apisupplierDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = JSON.stringify(formDataannex.map((item: any) => item.uri))
}
if (formData.photos.length > 0) {
formData.photos = JSON.stringify(formData.photos)
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apisupplierEdit(data)
: await apisupplierAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
if (!formData.create_user_id) {
create_user_name.value = userInfo.name
formData.create_user_id = userInfo.id
}
popupRef.value?.open()
getlist()
}
//
const handleClose = () => {
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@ -0,0 +1,171 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="供应商编码" prop="supplier_code">
<el-input class="w-[280px]" v-model="queryParams.supplier_code" clearable placeholder="请输入供应商编码" />
</el-form-item>
<el-form-item label="供应商名称" prop="supplier_name">
<el-input class="w-[280px]" v-model="queryParams.supplier_name" clearable placeholder="请输入供应商名称" />
</el-form-item>
<el-form-item label="供应商分组" prop="group_id">
<el-select class="flex-1" v-model="queryParams.group_id" clearable placeholder="请选择供应商分组">
<el-option v-for="(item, index) in dictData.supplier_group" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item label="供应商分类" prop="category_id">
<el-select class="flex-1" v-model="queryParams.category_id" clearable placeholder="请选择供应商分类">
<el-option v-for="(item, index) in dictData.supplier_category" :key="index" :label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
<el-form-item label="供应商等级" prop="grade">
<el-select class="flex-1" v-model="queryParams.grade" clearable placeholder="请选择供应商等级">
<el-option v-for="(item, index) in dictData.supplier_grade" :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="['bid.bid_bidding_decision/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['bid.bid_bidding_decision/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_id" show-overflow-tooltip />
<el-table-column label="供应商编码" prop="supplier_code" show-overflow-tooltip />
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
<el-table-column label="品牌类别" prop="brand_category" show-overflow-tooltip />
<el-table-column label="供应商分组" prop="group_id">
<template #default="{ row }">
<dict-value :options="dictData.supplier_group" :value="row.group_id" />
</template>
</el-table-column>
<el-table-column label="供应商分类" prop="category_id">
<template #default="{ row }">
<dict-value :options="dictData.supplier_category" :value="row.category_id" />
</template>
</el-table-column>
<el-table-column label="供应商等级" prop="grade">
<template #default="{ row }">
<dict-value :options="dictData.supplier_grade" :value="row.grade" />
</template>
</el-table-column>
<el-table-column label="联系人" prop="contacts" show-overflow-tooltip />
<el-table-column label="性别" prop="contacts_sex" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.sex" :value="row.contacts_sex" />
</template>
</el-table-column>
<el-table-column label="电话号码" prop="phone" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['bid.bid_bidding_decision/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['bid.bid_bidding_decision/delete']" type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['bid.bid_bidding_decision/detail']" link @click="handledetail(row)">
详情
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template>
<script lang="ts" setup name="bidBiddingDecisionLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apisupplierLists, apisupplierDelete, apisupplierDetail } from '@/api/suppler_list'
import { timeFormat } from '@/utils/util'
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({
category_id: '',
grade: '',
group_id: "",
supplier_name: '',
supplier_code: ''
})
//
const selectData = ref<any[]>([])
//
const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id)
}
//
const { dictData } = useDictData('supplier_grade,supplier_category,supplier_group,sex')
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apisupplierLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apisupplierDetail({ 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 apisupplierDelete({ id })
getLists()
}
//
const handledetail = async (data: any) => {
let res = await apisupplierDetail({ id: data.id })
showDtail.value = true
await nextTick()
detailRef.value?.open()
detailRef.value?.setFormData(res)
}
getLists()
</script>