This commit is contained in:
zmj 2024-03-25 18:03:23 +08:00
parent 263eb68548
commit 32cacae8d7
70 changed files with 788 additions and 1252 deletions

View File

@ -1,26 +1,41 @@
import request from '@/utils/request'
import request from "@/utils/request";
// 考勤记录表列表
export function attendancedetailLists(params: any) {
return request.get({ url: '/project.project_attendance_detail/lists', params })
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 })
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 })
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 })
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 })
return request.get({
url: "/project.project_attendance_detail/detail",
params,
});
}

View File

@ -1,8 +1,11 @@
import request from '@/utils/request'
import request from "@/utils/request";
// 工资明细列表列表
export function projectsalaryDetailLists(params: any) {
return request.get({ url: '/project.project_salary_detail/lists', params })
return request.get({ url: "/project.project_salary_detail/lists", params });
}
// 工资明细列表列表
export function projectsalaryDetailDelete(params: any) {
return request.post({ url: "/project.project_salary_detail/delete", params });
}

View File

@ -0,0 +1,16 @@
<template>
<el-link type="primary" v-for="(item, index) in annex" :key="index" :href="item.uri" target="_blank" class="mr-5">{{
item.name
}}</el-link>
<span v-if="!annex.length">暂无附件</span>
</template>
<script lang="ts" setup>
import { defineProps } from 'vue'
defineProps({
annex: Array
})
</script>

View File

@ -8,9 +8,9 @@
label-class-name="my-label">
{{ formData[item.value] ??
(item.value.includes('.') ?
(formData[item.value.split('.')[0]])[item.value.split('.')[1]] :
'')
(item.value.includes('.') ?
(formData[item.value.split('.')[0]])[item.value.split('.')[1]] :
'')
}}
</el-descriptions-item>

View File

@ -6,15 +6,14 @@
<el-radio-button :label="1">全部人员</el-radio-button>
<el-radio-button :label="2">按部门筛选</el-radio-button>
<el-radio-button :label="3">按岗位筛选</el-radio-button>
<el-button class="ml-[200px]" v-show="isCollapse != 1 && (!isshow || !isshow1)"
@click="(isshow = true), (isshow1 = true)">返回</el-button>
</el-radio-group>
<div v-if="type == 1">
<div v-if="isCollapse == 1" style="margin-bottom: 20px">
<div style="margin-top: 20px">
<el-radio-group v-model="radionum">
<el-radio :label="item" v-for="(item, i) in uesrlist" :key="i"
style="margin-bottom: 20px;">
<el-radio :label="item" v-for="(item, i) in uesrlist" :key="i" style="margin-bottom: 40px;">
<div class="radio-con">
<div class="radioa">
<img :src="item.avatar" alt="" />
@ -34,6 +33,7 @@
</div>
</div>
<div v-if="isCollapse == 2">
<!-- 返回上一级别 -->
<div v-if="isshow">
<div class="lad" v-for="(item, i) in deparmetlist" :key="i">
<div class="lad">{{ i }}</div>
@ -322,6 +322,7 @@ defineExpose({
.radio-con {
display: flex;
width: 500px;
align-items: center;
.radioa {
img {

View File

@ -9,7 +9,7 @@
</el-upload>
<div v-for="(item, index) in formData[value]" class="ml-5 flex ">
<el-link :href="item.uri" type="primary"> {{ item.name }}</el-link>
<el-link :href="item.uri" type="primary" target="_blank"> {{ item.name }}</el-link>
<span class="ml-2 cursor-pointer" @click="delFile(index)">x</span>
</div>
</template>

View File

@ -22,8 +22,10 @@
<el-table-column label="客户名称" prop="custom_name" align="center" show-overflow-tooltip />
<el-table-column label="签订日期" prop="contract_date" align="center" show-overflow-tooltip />
<el-table-column label="合同金额" prop="contract_amount" align="center" show-overflow-tooltip />
<el-table-column label="已回款金额" prop="has_refund_amount" align="center" show-overflow-tooltip />
<el-table-column label="已开票金额" prop="has_invoice_amount" align="center" show-overflow-tooltip />
<el-table-column label="已回款金额" prop="has_refund_amount" align="center"
:render-header="pager.calcWidth" />
<el-table-column label="已开票金额" prop="has_invoice_amount" align="center"
:render-header="pager.calcWidth" />
<el-table-column label="开票未回款金额" prop="has_invoice_not_refund_amount" align="center" width="140px"
show-overflow-tooltip />
<el-table-column label="回款未开票金额" prop="has_refund_not_invoice_amount" align="center" width="140px"

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="160px" :rules="formRules">
<el-row>
<el-col :span="8">
@ -11,7 +10,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="合同编号" prop="contract_num">
<el-input v-model="formData.contract_num" clearable placeholder="请输入合同编号" />
<el-input v-model="formData.contract_num" clearable placeholder="请输入合同编号"
@input="formData.contract_num = formData.contract_num.replace(/[\u4e00-\u9fa5]/g, '')" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -54,10 +54,9 @@
</el-col>
<el-col :span="8">
<el-form-item label="业务性质" prop="business_nature">
<el-select class="flex-1" v-model="formData.business_nature" clearable
placeholder="请选择业务性质">
<el-option v-for="(item, index) in dictData.cost_consultation_business_nature"
:key="index" :label="item.name" :value="parseInt(item.value)" />
<el-select class="flex-1" v-model="formData.business_nature" clearable placeholder="请选择业务性质">
<el-option v-for="(item, index) in dictData.cost_consultation_business_nature" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
@ -66,10 +65,9 @@
<el-row>
<el-col :span="8">
<el-form-item label="行业性质" prop="industry_nature">
<el-select class="flex-1" v-model="formData.industry_nature" clearable
placeholder="请选择行业性质">
<el-option v-for="(item, index) in dictData.cost_consultation_industry_nature"
:key="index" :label="item.name" :value="parseInt(item.value)" />
<el-select class="flex-1" v-model="formData.industry_nature" clearable placeholder="请选择行业性质">
<el-option v-for="(item, index) in dictData.cost_consultation_industry_nature" :key="index"
:label="item.name" :value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
@ -98,13 +96,12 @@
</el-col>
<el-col :span="8">
<el-form-item label="工程规模及概况" prop="project_scale">
<el-input v-model="formData.project_scale" clearable placeholder="请输入工程规模及概况"
type="textarea" />
<el-input v-model="formData.project_scale" clearable placeholder="请输入工程规模及概况" type="textarea" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="签订金额(元)" prop="money">
<el-input v-model="formData.money" clearable placeholder="请输入签订金额(元)" />
<el-input v-model="formData.money" clearable placeholder="请输入签订金额(元)" type="number" />
</el-form-item>
</el-col>
@ -112,7 +109,7 @@
<el-row>
<el-col :span="8">
<el-form-item label="合同服务工期" prop="contract_service">
<el-input v-model="formData.contract_service" clearable placeholder="请输入合同服务工期" />
<el-input v-model="formData.contract_service" clearable placeholder="请输入合同服务工期" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -140,8 +137,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="合同履约金(元)" prop="performance">
<el-input v-model="formData.performance" clearable placeholder="请输入合同履约金(元)"
type="number" />
<el-input v-model="formData.performance" clearable placeholder="请输入合同履约金(元)" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -276,7 +272,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="邮寄编号" prop="number">
<el-input v-model="formData.number" clearable placeholder="请输入邮寄编号" />
<el-input v-model="formData.number" clearable placeholder="请输入邮寄编号"
@input="formData.number = formData.number.replace(/[\u4e00-\u9fa5]/g, '')" />
</el-form-item>
</el-col>

View File

@ -198,7 +198,8 @@
</el-form-item>
</el-col>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<dialogTable :config="cost_approved_projects" @customEvent="customEvent"></dialogTable>
<dialogTable :config="cost_approved_projects" @customEvent="customEvent" :query="{ status: 1 }">
</dialogTable>
</el-dialog>
<div v-if="showDialog1">
<personnelselector ref="personnel" @confirm="submituser" :type="persoleType">

View File

@ -7,12 +7,11 @@
<el-descriptions :column="2" border>
<el-descriptions-item label="客户名称" label-align="left" align="left"
label-class-name="my-label">{{ formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="项目名称" label-align="left" align="left"
label-class-name="my-label"> {{ formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left"
label-class-name="my-label"> {{ formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="需求主题" label-align="left" align="left"
label-class-name="my-label">
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label">
{{ formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label">
{{ formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="需求主题" label-align="left" align="left" label-class-name="my-label">
{{ formData.theme }}
</el-descriptions-item>
<el-descriptions-item label="客户需求提供人" label-align="left" align="left"
@ -23,43 +22,34 @@
}}</el-descriptions-item>
<el-descriptions-item label="重要程度" label-align="left" align="left"
label-class-name="my-label"> {{ formData.importance_text }}</el-descriptions-item>
<el-descriptions-item label="重要程度" label-align="left" align="left" label-class-name="my-label">
{{ formData.importance_text }}</el-descriptions-item>
<el-descriptions-item label="记录时间" label-align="left" align="left"
label-class-name="my-label"> {{ formData.recording_time
<el-descriptions-item label="记录时间" label-align="left" align="left" label-class-name="my-label">
{{ formData.recording_time
}}</el-descriptions-item>
<el-descriptions-item label="需求内容" label-align="left" align="left"
label-class-name="my-label"> {{ formData.demand_content
<el-descriptions-item label="需求内容" label-align="left" align="left" label-class-name="my-label">
{{ formData.demand_content
}}</el-descriptions-item>
<el-descriptions-item label="添加人" label-align="left" align="left"
label-class-name="my-label"> {{ formData.add_user_name
<el-descriptions-item label="添加人" label-align="left" align="left" label-class-name="my-label">
{{ formData.add_user_name
}}</el-descriptions-item>
<el-descriptions-item label="创建日期" label-align="left" align="left"
label-class-name="my-label"> {{ formData.create_time
<el-descriptions-item label="创建日期" label-align="left" align="left" label-class-name="my-label">
{{ formData.create_time
}}</el-descriptions-item>
<el-descriptions-item label="更新人" label-align="left" align="left"
label-class-name="my-label"> {{ formData.update_user_name
<el-descriptions-item label="更新人" label-align="left" align="left" label-class-name="my-label">
{{ formData.update_user_name
}}</el-descriptions-item>
<el-descriptions-item label="更新日期" label-align="left" align="left"
label-class-name="my-label"> {{ formData.update_time
<el-descriptions-item label="更新日期" label-align="left" align="left" label-class-name="my-label">
{{ formData.update_time
}}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left"
label-class-name="my-label">
<div v-if="formDataannex.length > 0">
<div v-for="(item, index) in formDataannex"
style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
:href="item.uri" target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无附件
</div>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<el-link v-for="(item, index) in formData.annex" :href="item.uri" target="_blank"
type="primary" class="mr-5">文件{{ index + 1 }}</el-link>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
@ -87,8 +77,7 @@
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total" @size-change="handleSizeChange1"
@current-change="handleCurrentChange1" />
:total="total" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
</div>
</el-tab-pane>
<el-tab-pane label="项目概算" name="third">
@ -117,8 +106,7 @@
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager2.page_no" v-model:page-size="pager2.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total1" @size-change="handleSizeChange2"
@current-change="handleCurrentChange2" />
:total="total1" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />
</div>
</el-tab-pane>
<el-tab-pane label="竞争对手" name="fourth">
@ -148,8 +136,7 @@
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager3.page_no" v-model:page-size="pager3.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper"
:total="total2" @size-change="handleSizeChange3"
@current-change="handleCurrentChange3" />
:total="total2" @size-change="handleSizeChange3" @current-change="handleCurrentChange3" />
</div>
</el-tab-pane>
</el-tabs>

View File

@ -135,7 +135,7 @@
<el-col :span="8">
<el-form-item label="收款开户银行" prop="payee_bank"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="formData.payee_bank" clearable placeholder="请输入收款账号" />
<el-input v-model="formData.payee_bank" clearable placeholder="请输入开户银行" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -386,7 +386,6 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData }
mode.value == 'edit'

View File

@ -74,11 +74,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="附件">
<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>
<annexLink :annex="formData.annex"></annexLink>
</el-form-item>
</el-col>
@ -119,7 +115,6 @@ defineProps({
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const formDataannex = reactive([])
const datas = reactive({
provinceOptions: [],
cityOptions: [],
@ -137,17 +132,6 @@ 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)
}
getbidDocumentExaminationFlows()
}

View File

@ -20,7 +20,7 @@
<el-col :span="8">
<el-form-item label="合同类型" prop="contract_cate">
<el-select v-model="formData.contract_cate" placeholder="请选择" @change="resetFormData"
class="flex-1 !flex">
class="flex-1 ">
<el-option label="采购合同" :value="1"></el-option>
<el-option label="分包合同" :value="2"></el-option>
</el-select>

View File

@ -2,9 +2,25 @@
<div class="detail-popup">
<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-descriptions :column="2" border>
<el-descriptions-item label="项目名称" label-align="left" align="left">
{{ formData.project_name }}
</el-descriptions-item>
<el-descriptions-item label="项目编号" label-align="left" align="left">
{{ formData.project_code }}
</el-descriptions-item>
<el-descriptions-item label="考勤日期" label-align="left" align="left">
{{ formData.attendance_date }}
</el-descriptions-item>
<el-descriptions-item label="出勤人数" label-align="left" align="left">
{{ formData.attendance_num }}
</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left">
<annexLink :annex="formData.file"></annexLink>
</el-descriptions-item>
</el-descriptions>
<el-card class="mt-2">
<el-table :data="formData.attendance_detail">
<el-table-column label="姓名" prop="name" show-overflow-tooltip />
<el-table-column label="姓名" prop="idcard" show-overflow-tooltip />
@ -63,20 +79,6 @@ 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>) => {
@ -107,9 +109,6 @@ const handleClose = () => {
defineExpose({
open,
setFormData,
@ -122,8 +121,4 @@ defineExpose({
font-size: 1.2em;
margin-bottom: 10px;
}
:deep(.my-label) {
width: 150px;
}
</style>

View File

@ -1,70 +1,56 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="85vw" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<popup ref="popupRef" :title="popupTitle" :async="true" width="85vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="80px" :rules="formRules">
<el-row>
<el-col :span="24">
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
<el-input v-model="project_name" clearable placeholder="请输入项目名称" :disabled="project" />
</el-form-item> </el-col>
<el-col :span="24">
<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="24">
<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 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="24">
<el-col :span="8">
<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-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-col :span="8">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
:href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<div class="tit" style="font-size: 16px;font-weight: bold;margin-bottom: 10px;">考勤记录清单</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.attendance_detail" width="100%">
<template #empty>
暂无数据点击添加
<el-button @click="handleAdd" size="small">+</el-button>
</template>
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd(row)" size="small">+</el-button>
<el-button @click="handleAdd" size="small">+</el-button>
<el-button @click="handleDelete(row)" size="small">-</el-button>
</template>
</el-table-column>
@ -84,23 +70,15 @@
placeholder="自动填写" />
</template></el-table-column>
<el-table-column label="上班时间" prop="brand">
<el-table-column label="上班时间" prop="brand" width="200">
<template #default="{ row }">
<!-- <el-date-picker clearable v-model="row.work_start_time" type="date"
value-format="YYYY-MM-DD" placeholder="请选择" style="width: 100px;">
</el-date-picker> -->
<el-time-select v-model="row.work_start_time" start="06:30" step="00:15" end="23:30"
placeholder="请选择" />
</template>
</el-table-column>
<el-table-column label="下班时间" prop="parameter_description">
<el-table-column label="下班时间" prop="parameter_description" width="200">
<template #default="{ row }">
<!-- <el-date-picker clearable v-model="row.work_end_time" type="date" value-format="YYYY-MM-DD"
placeholder="请选择" style="width: 100px;">
</el-date-picker> -->
<el-time-select v-model="row.work_end_time" start="06:30" step="00:15" end="23:30"
placeholder="请选择" />
</template></el-table-column>
@ -141,7 +119,6 @@
</template>
</el-table-column>
<el-table-column label="备注" prop="remark">
<template #default="{ row }">
<el-input v-model="row.remark" />
</template>
@ -169,14 +146,16 @@ import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import { attendanceRecordAdd, attendanceRecordEdit, attendanceRecordDetail } from '@/api/project_attendance_record'
import { attendancedetailDelete, attendancedetailLists } from '@/api/project_attendance_detail'
import projectPersonnel from '@/components/project_personnel/index.vue'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { watch } from "vue"
import { useDictData } from '@/hooks/useDictOptions'
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
import { cloneDeep } from 'lodash'
const { dictData } = useDictData('labor_contract_status,labor_contract_type,labor_contract_name')
let props = defineProps({
project: Object
})
@ -187,7 +166,7 @@ const formData = reactive({
attendance_date: '',
remark: '',
file: '',
attendance_detail: [{}],
attendance_detail: [],
})
@ -206,10 +185,13 @@ const formDataannex = reactive([])
const userInfo = userStore.userInfo
const handleAdd = (row: any) => {
const index = formData.attendance_detail.indexOf(row);
formData.attendance_detail.splice(index + 1, 0, {});
// const index = formData.attendance_detail.indexOf(row);
// formData.attendance_detail.splice(index + 1, 0, {});
formData.attendance_detail.push({})
};
const handleDelete = (row: any) => {
const handleDelete = async (row: any) => {
console.log(row.id)
if (row.id) await attendancedetailDelete({ id: row.id });
const index = formData.attendance_detail.indexOf(row);
formData.attendance_detail.splice(index, 1);
};
@ -244,25 +226,6 @@ const customEvent1 = (e) => {
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)
}
//
@ -275,18 +238,6 @@ let renshu = computed(() => {
//
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
@ -295,8 +246,10 @@ const setFormData = async (data: Record<any, any>) => {
}
project_name.value = data.project_name
project_code.value = data.project_code
idcard.value = data.person_idcard
person_name.value = data.person_name
// let res = await attendancedetailLists({})
// formData.attendance_detail = res.lists
}
@ -310,15 +263,12 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate()
formData.attendance_detail.forEach(item => {
const data = cloneDeep({ ...formData, })
data.attendance_detail.forEach(item => {
item.work_start_time = item.work_start_time ? formData.attendance_date + ` ${item.work_start_time}` : ""
item.work_end_time = item.work_end_time ? formData.attendance_date + ` ${item.work_end_time}` : ""
})
const data = { ...formData, }
mode.value == 'edit'
? await attendanceRecordEdit(data)
: await attendanceRecordAdd(data)

View File

@ -29,17 +29,17 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="日记工单号" prop="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="attendance_code" :render-header="pager.calcWidth" />
<el-table-column label="项目编码" prop="project_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="日期" prop="attendance_date" show-overflow-tooltip />
<el-table-column label="出勤人数" prop="cqrs" 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="daily_salary_total" show-overflow-tooltip width="100" />
<el-table-column label="日生活费合计" prop="daily_living_total" show-overflow-tooltip width="120" />
<el-table-column label="日补贴合计" prop="daily_subsidy_total" show-overflow-tooltip width="100" />
<el-table-column label="日其它合计" prop="daily_other_total" show-overflow-tooltip width="100" />
<el-table-column label="日收入合计" prop="daily_income_total" show-overflow-tooltip width="100" />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">

View File

@ -6,28 +6,22 @@
<el-descriptions :column="3" title="成本调整详情" border>
<el-descriptions-item :label="item.lable" label-align="left" align="left" label-class-name="my-label"
v-for="(item, index) in descriptionList" :key="index">
<span v-if="item.lable != '附件'"> {{ item.value.length > 1 ? formData[item.value[0]][item.value[1]] :
formData[item.value[0]]
}}</span>
<span v-else> <el-link class="m-2" v-for="item in formData.annex" :href="item.uri"
target="_blank">{{ item.name }}</el-link>
</span>
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="1" border>
<el-descriptions-item label="附件">
<annexLink :annex="formData.annex"></annexLink>
</el-descriptions-item>
</el-descriptions>
</el-card>
<flowProcess v-if="!formData?.approve_id || formData.approve_check_status == 4" :flows="flows"
:submitApi="apiproject_cost_adjustmentApprove" :id="formData?.id" @off="handleClose">
</flowProcess>
<flowDetail v-else :approve_id="formData?.approve_id" @off="handleClose" />
<!-- import { apiproject_cost_adjustmentApprove, apiproject_cost_adjustmentFlows } from '@/api/flowSet'
//
const flows = ref([])
const getbidDocumentExaminationFlows = async () => {
if (formData?.approve_id) return
let res = await apiproject_cost_adjustmentFlows()
flows.value = res
} -->
</popup>
</div>
</template>
@ -52,10 +46,6 @@ const descriptionList = reactive([
lable: "调整金额",
value: ['adjust_amount']
},
{
lable: "附件",
value: ['annex']
},
{
lable: "备注",
value: ['remark']

View File

@ -1,16 +1,14 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="formData.project_name" readonly clearable placeholder="点击选择项目"
@click="showDialog = true" />
</el-form-item>
<el-form-item label="调整日期" prop="adjust_date">
<!-- <el-input v-model="formData.adjust_date" clearable placeholder="请输入调整日期" /> -->
<el-date-picker class="flex-1 !flex" v-model="formData.adjust_date" clearable
value-format="YYYY-MM-DD " placeholder="选择日期">
<el-date-picker class="flex-1 !flex" v-model="formData.adjust_date" clearable value-format="YYYY-MM-DD "
placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="调整金额" prop="adjust_amount">
@ -20,22 +18,7 @@
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-form>
<el-dialog v-model="showDialog" title="选择项目" width="70%">

View File

@ -2,8 +2,8 @@
<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="请选择项目" />
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
@ -24,20 +24,12 @@
</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_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="调整日期" prop="adjust_date" show-overflow-tooltip />
<el-table-column label="调整金额" prop="adjust_amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip align="center">
<template #default="{ row }">
<el-link style="margin-right: 4px;" type="primary" :href="item.uri"
v-for="(item, index) in row.annex">文件{{
index + 1 }}</el-link>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_cost_adjustment/edit']" type="primary" link
@click="handleEdit(row)">
@ -72,6 +64,8 @@ import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
import { apiProjectSearch } from '@/api/project'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()

View File

@ -1,60 +1,56 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="人工预算详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-descriptions :column="2" border>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="费用预算单号" label-align="left" align="left" label-class-name="my-label"> {{
formData.cost_budget_code }}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
formData.remark
}}</el-descriptions-item>
<el-card>
<template #header>
项目信息
</template>
<el-descriptions :column="2" border>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="费用预算单号" label-align="left" align="left" label-class-name="my-label"> {{
formData.cost_budget_code }}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
formData.remark
}}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<annexLink :annex="formData.annex"></annexLink>
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card>
<template #header>
费用预算清单
</template>
<div>
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="费用预算单号" prop="cost_budget_code" show-overflow-tooltip />
<el-table-column label="一级科目" prop="first_level_subject" show-overflow-tooltip />
<el-table-column label="二级科目" prop="second_level_subject" show-overflow-tooltip />
<el-table-column label="三级科目" prop="third_level_subject" show-overflow-tooltip />
<el-table-column label="是否差旅科目" prop="is_travel_text" show-overflow-tooltip />
<el-table-column label="单位" prop="unit" show-overflow-tooltip />
<el-table-column label="预算金额" prop="amount" show-overflow-tooltip />
<el-table-column label="编制标准" prop="standard" show-overflow-tooltip />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
</div>
</el-card>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex && formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无附件
</div>
</el-descriptions-item>
</el-descriptions>
<div>
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="费用预算单号" prop="cost_budget_code" show-overflow-tooltip />
<el-table-column label="一级科目" prop="first_level_subject" show-overflow-tooltip />
<el-table-column label="二级科目" prop="second_level_subject" show-overflow-tooltip />
<el-table-column label="三级科目" prop="third_level_subject" show-overflow-tooltip />
<el-table-column label="是否差旅科目" prop="is_travel_text" show-overflow-tooltip />
<el-table-column label="单位" prop="unit" show-overflow-tooltip />
<el-table-column label="预算金额" prop="amount" show-overflow-tooltip />
<el-table-column label="编制标准" prop="standard" show-overflow-tooltip />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
</div>
<flowProcess v-if="!formData?.approve_id || formData.approve_check_status == 4" :flows="flows"
:submitApi="apiproject_cost_budgetApprove" :id="formData?.id" @off="handleClose">
</flowProcess>
<flowDetail v-else :approve_id="formData?.approve_id" @off="handleClose" />
<!-- import { apiproject_cost_budgetApprove, apiproject_cost_budgetFlows } from '@/api/flowSet'
//
const flows = ref([])
const getbidDocumentExaminationFlows = async () => {
if (formData?.approve_id) return
let res = await apiproject_cost_budgetFlows()
flows.value = res
} -->
</popup>
</div>
</template>

View File

@ -1,75 +1,58 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="85vw" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="85vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<div
style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<div style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select>
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织"
@change="deptrmt">
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select>
</div>
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" @click="showDialog = true"
:disabled="project" />
</el-form-item>
<el-form-item label="项目编码" prop="remark">
<el-input v-model="formData.project_code" disabled clearable placeholder="系统自动输入" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formData.annex" 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-col :span="12">
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目"
@click="showDialog = true" :disabled="project" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编码" prop="remark">
<el-input v-model="formData.project_code" disabled clearable placeholder="系统自动输入" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textaera" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="附件" prop="remark">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<el-col :span="24">
<div style="margin-bottom: 30px;">费用预算清单</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.cost_budget_detail">
<template #empty>
暂无数据点击添加
<el-button @click="handleAdd" size="small">+</el-button>
</template>
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd(row)" size="small">+</el-button>
<el-button @click="handleAdd" size="small">+</el-button>
<el-button @click="handleDelete(row)" size="small">-</el-button>
</template>
</el-table-column>
<el-table-column label="一级科目">
<template #default="scope">
<el-input v-model="scope.row.first_level_subject" @click="openDialog1(scope)"
readonly placeholder="点击选择" />
<el-input v-model="scope.row.first_level_subject" @click="openDialog1(scope)" readonly
placeholder="点击选择" />
</template>
<!-- <template #default="scope">
<div style="display: flex; align-items: center">
<el-icon @click="openDialog1(scope)">
<timer />
</el-icon>
</div>
</template> -->
</el-table-column>
<el-table-column label="单位">
@ -118,7 +101,7 @@ import projectcostTemLists from '@/components/projectcostTemLists/index.vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { apiProjectCostBudgetDetailLists } from "@/api/project_cost_budget_detail.ts"
import { apiProjectCostBudgetDetailLists, apiProjectCostBudgetDetailDelete } from "@/api/project_cost_budget_detail.ts"
const base_url = configs.baseUrl + configs.urlPrefix
@ -214,17 +197,7 @@ const formRules = reactive<any>({
}]
})
//
const handleAvatarSuccess_four = (response: any) => {
formData.annex ||= []
// @ts-ignore
response.code != 0 ? formData.annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => {
formData.annex.splice(index, 1)
}
//
const setFormData = async (data: Record<any, any>) => {
@ -306,9 +279,9 @@ const handleAdd = (row: any) => {
formData.cost_budget_detail.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
const handleDelete = async (row: any) => {
if (row.id) await apiProjectCostBudgetDetailDelete({ id: row.id })
// row
if (formData.cost_budget_detail.length <= 1) return
const index = formData.cost_budget_detail.indexOf(row);
formData.cost_budget_detail.splice(index, 1);
};

View File

@ -2,13 +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="cost_budget_code">
<el-input class="w-[280px]" v-model="queryParams.cost_budget_code" clearable placeholder="请输入费用预算单号" />
</el-form-item>
<el-form-item label="" prop="annex">
<el-input class="w-[280px]" v-model="queryParams.annex" clearable placeholder="请输入" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -33,14 +29,7 @@
<el-table-column label="费用预算单号" prop="cost_budget_code" show-overflow-tooltip />
<el-table-column label="金额" prop="total_amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip align="center">
<template #default="{ row }">
<el-link style="margin-right: 4px;" type="primary" :href="item.uri"
v-for="(item, index) in row.annex">文件{{
index + 1 }}</el-link>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_cost_budget/edit']" type="primary" link
@click="handleEdit(row)">

View File

@ -1,7 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="700px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-form-item label="项目名称" prop="cost_budget_id">
<el-input v-model="formData.project_name" clearable placeholder="点击选择" @click="showDialog = true" />
</el-form-item>
@ -19,7 +19,7 @@
<el-input v-model="formData.standard" clearable placeholder="请输入编制标准" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入" />
<el-input v-model="formData.remark" clearable placeholder="请输入" type="textarea" />
</el-form-item>
</el-form>
<el-dialog v-model="showDialog" title="选择项目" width="70%">

View File

@ -2,12 +2,10 @@
<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="请选择项目" />
</el-form-item>
<el-form-item label="费用预算id" prop="cost_budget_id">
<el-input class="w-[280px]" v-model="queryParams.cost_budget_id" clearable placeholder="请输入费用预算id" />
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
@ -28,8 +26,8 @@
<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="cost_budget_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="费用预算单号" prop="cost_budget_code" :render-header="pager.calcWidth" />
<el-table-column label="一级科目" prop="first_level_subject" show-overflow-tooltip />
<el-table-column label="二级科目" prop="second_level_subject" show-overflow-tooltip />
<el-table-column label="三级科目" prop="third_level_subject" show-overflow-tooltip />
@ -66,6 +64,7 @@ import { apiProjectCostBudgetDetailLists, apiProjectCostBudgetDetailDelete, apiP
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import { apiProjectSearch } from '@/api/project'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//

View File

@ -31,8 +31,8 @@
<el-col :span="8">
<el-form-item label="单位" prop="unit">
<el-input v-model="formData.unit" clearable placeholder="请输入单位" />
</el-form-item> </el-col>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="差旅科目" prop="is_travel">

View File

@ -1,61 +1,57 @@
<template>
<div class="detail-popup">
<popup ref="popupRef" title="人工预算详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-descriptions :column="2" border>
<el-card>
<template #header>
基本信息
</template>
<el-descriptions :column="2" border>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="机具预算单号" label-align="left" align="left" label-class-name="my-label"> {{
formData.equipment_budget_code }}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
formData.remark
}}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<annexLink :annex="formData.annex"></annexLink>
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card>
<template #header>
机器预算清单
</template>
<div class="mt-5">
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="机具预算单号" prop="equipment_budget_code" show-overflow-tooltip />
<el-table-column label="机具类别" prop="type" show-overflow-tooltip />
<el-table-column label="机具名称" prop="name" show-overflow-tooltip />
<el-table-column label="规格型号" prop="spec" show-overflow-tooltip />
<el-table-column label="单位" prop="unit" show-overflow-tooltip />
<el-table-column label="数量" prop="num" show-overflow-tooltip />
<el-table-column label="单价" prop="price" show-overflow-tooltip />
<el-table-column label="金额" prop="amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
</div>
</el-card>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="机具预算单号" label-align="left" align="left" label-class-name="my-label"> {{
formData.equipment_budget_code }}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
formData.remark
}}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex && formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无附件
</div>
</el-descriptions-item>
</el-descriptions>
<div>
<el-table :data="tableData" stripe style="width: 100%">
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="机具预算单号" prop="equipment_budget_code" show-overflow-tooltip />
<el-table-column label="机具类别" prop="type" show-overflow-tooltip />
<el-table-column label="机具名称" prop="name" show-overflow-tooltip />
<el-table-column label="规格型号" prop="spec" show-overflow-tooltip />
<el-table-column label="单位" prop="unit" show-overflow-tooltip />
<el-table-column label="数量" prop="num" show-overflow-tooltip />
<el-table-column label="单价" prop="price" show-overflow-tooltip />
<el-table-column label="金额" prop="amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table>
</div>
<div style="margin: 10px 0;">
<el-pagination v-model:current-page="pager1.page_no" v-model:page-size="pager1.page_size"
:page-sizes="[10, 20, 30, 40]" layout="total, sizes, prev, pager, next, jumper" :total="total"
@size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
</div>
<flowProcess v-if="!formData?.approve_id || formData.approve_check_status == 4" :flows="flows"
:submitApi="apiproject_equipment_budgetApprove" :id="formData?.id" @off="handleClose">
</flowProcess>
<flowDetail v-else :approve_id="formData?.approve_id" @off="handleClose" />
<!-- import { apiproject_equipment_budgetApprove, apiproject_equipment_budgetFlows } from '@/api/flowSet'
//
const flows = ref([])
const getbidDocumentExaminationFlows = async () => {
if (formData?.approve_id) return
let res = await apiproject_equipment_budgetFlows()
flows.value = res
} -->
</popup>
</div>
</template>

View File

@ -1,56 +1,46 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="85vw" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="85vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<div
style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<div style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select>
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织"
@change="deptrmt">
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select>
</div>
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" :disabled="project"
@click="showDialog = true" />
</el-form-item>
<el-form-item label="项目编码" prop="remark">
<el-input v-model="formData.project_code" disabled clearable placeholder="系统自动输入" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formData.annex" 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-col :span="12">
<el-form-item label="项目名称" prop="project_name">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" :disabled="project"
@click="showDialog = true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编码" prop="remark">
<el-input v-model="formData.project_code" disabled clearable placeholder="系统自动输入" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="附件">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<el-col :span="24">
<div style="margin-bottom: 30px;">机器预算清单</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.equipment_budget_detail">
<template #empty>
暂无数据点击添加
<el-button @click="handleAdd" size="small">+</el-button>
</template>
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd(row)" size="small">+</el-button>
@ -81,14 +71,9 @@
</el-table-column>
<el-table-column label="单位">
<template #default="{ row }">
<el-input v-model="row.unit" type="number" />
<el-input v-model="row.unit" />
</template>
</el-table-column>
<!-- <el-table-column label="金额">
<template #default="{ row }">
<el-input v-model="row.price" type="number" />
</template>
</el-table-column> -->
<el-table-column label="备注" prop="remark">
<template #default="{ row }">
<el-input v-model="row.remark" />
@ -117,7 +102,7 @@ import useUserStore from "@/stores/modules/user";
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import projectDialog from '@/components/project/index.vue'
import { apiProjectEquipmentBudgetDetailLists } from "@/api/project_equipment_budget_detail.ts"
import { apiProjectEquipmentBudgetDetailLists, apiProjectEquipmentBudgetDetailDelete } from "@/api/project_equipment_budget_detail.ts"
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
@ -134,17 +119,6 @@ const mode = ref('add')
//
const handleAvatarSuccess_four = (response: any) => {
formData.annex ||= []
// @ts-ignore
response.code != 0 ? formData.annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => {
formData.annex.splice(index, 1)
}
//
const popupTitle = computed(() => {
@ -284,9 +258,9 @@ const handleAdd = (row: any) => {
formData.equipment_budget_detail.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
const handleDelete = async (row: any) => {
if (row.id) await apiProjectEquipmentBudgetDetailDelete({ id: row.id })
// row
if (formData.equipment_budget_detail.length <= 1) return
const index = formData.equipment_budget_detail.indexOf(row);
formData.equipment_budget_detail.splice(index, 1);
};

View File

@ -2,8 +2,8 @@
<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="请选择项目" />
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<el-form-item label="机具预算单号" prop="equipment_budget_code">
<el-input class="w-[280px]" v-model="queryParams.equipment_budget_code" clearable
@ -33,14 +33,7 @@
<el-table-column label="机具预算单号" prop="equipment_budget_code" show-overflow-tooltip />
<el-table-column label="金额" prop="total_amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip align="center">
<template #default="{ row }">
<el-link style="margin-right: 4px;" type="primary" :href="item.uri"
v-for="(item, index) in row.annex">文件{{
index + 1 }}</el-link>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_equipment_budget/edit']" type="primary" link
@click="handleEdit(row)">
@ -75,6 +68,8 @@ import { apiProjectEquipmentBudgetLists, apiProjectEquipmentBudgetDelete, apiPro
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
import { apiProjectSearch } from '@/api/project'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()

View File

@ -2,13 +2,10 @@
<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="请选择项目" />
</el-form-item>
<el-form-item label="机具预算id" prop="equipment_budget_id">
<el-input class="w-[280px]" v-model="queryParams.equipment_budget_id" clearable
placeholder="请输入机具预算id" />
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<el-form-item label="机具类别" prop="type">
<el-input class="w-[280px]" v-model="queryParams.type" clearable placeholder="请输入机具类别" />
</el-form-item>
@ -35,8 +32,8 @@
<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="equipment_budget_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="机具预算单号" prop="equipment_budget_code" :render-header="pager.calcWidth" />
<el-table-column label="机具类别" prop="type" show-overflow-tooltip />
<el-table-column label="机具名称" prop="name" show-overflow-tooltip />
<el-table-column label="规格型号" prop="spec" show-overflow-tooltip />
@ -74,6 +71,7 @@ import { apiProjectEquipmentBudgetDetailLists, apiProjectEquipmentBudgetDetailDe
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import { apiProjectSearch } from '@/api/project'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//

View File

@ -4,79 +4,71 @@
<el-descriptions :column="2" border>
<el-descriptions-item label="客户名称" label-align="left" align="left" label-class-name="my-label">{{
formData.custom_name }}</el-descriptions-item>
formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_name }}</el-descriptions-item>
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_code }}</el-descriptions-item>
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="执行人" label-align="left" align="left" label-class-name="my-label">
{{ formData.executor }}
</el-descriptions-item>
<el-descriptions-item label="联系人" label-align="left" align="left" label-class-name="my-label"> {{
formData.contacts
}}</el-descriptions-item>
formData.contacts
}}</el-descriptions-item>
<el-descriptions-item label="联系方式" label-align="left" align="left" label-class-name="my-label"> {{
formData.contact_information
formData.contact_information
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="项目角色" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_role
formData.project_role
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="职位" label-align="left" align="left" label-class-name="my-label"> {{
formData.position
formData.position
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="日期" label-align="left" align="left" label-class-name="my-label"> {{
formData.follow_date
formData.follow_date
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="主题" label-align="left" align="left" label-class-name="my-label"> {{
formData.theme
formData.theme
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="行动描述" label-align="left" align="left" label-class-name="my-label"> {{
formData.action_description
formData.action_description
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="项目把握度" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_assurance_text
formData.project_assurance_text
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="状态" label-align="left" align="left" label-class-name="my-label"> {{
formData.follow_status_text
formData.follow_status_text
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="阶段" label-align="left" align="left" label-class-name="my-label"> {{
formData.follow_stage_text
formData.follow_stage_text
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
formData.notes
formData.notes
}}</el-descriptions-item><el-descriptions-item label="下次回访日期" label-align="left" align="left"
}}</el-descriptions-item><el-descriptions-item label="下次回访日期" label-align="left" align="left"
label-class-name="my-label"> {{ formData.next_follow_up_date
}}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.file && formData.file.length > 0">
<div v-for="(item, index) in formData.file" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item"
target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>暂无附件</div>
<annexLink :annex="formData.annex"></annexLink>
</el-descriptions-item>
</el-descriptions>

View File

@ -1,7 +1,7 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules" inline>
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id"
@ -15,7 +15,7 @@
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="姓名" prop="project_person_id" @click="showDialog1 = true"
<el-form-item label="姓名" @click="showDialog1 = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-input v-model="person_name" clearable placeholder="请选择项目人员" />
</el-form-item> </el-col>
@ -44,7 +44,8 @@
</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-input v-model="formData.insurance_no" clearable placeholder="请输入保单号"
@input="formData.insurance_no = formData.insurance_no.replace(/[\u4e00-\u9fa5]/g, '')" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="保费(元)" prop="insurance">
@ -61,11 +62,13 @@
<el-col :span="8">
<el-form-item label="保单明细" prop="insurance_detail">
<el-input v-model="formData.insurance_detail" clearable placeholder="请输入保单明细" />
<el-input v-model="formData.insurance_detail" clearable
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" 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-input v-model="formData.invoice_no" clearable placeholder="请输入发票编号"
@input="formData.invoice_no = formData.invoice_no.replace(/[\u4e00-\u9fa5]/g, '')" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="经办人" prop="handler">
@ -76,7 +79,7 @@
<el-col :span="24">
<el-form-item label="合同附件">
<uplaodAnnex :formData="formData"></uplaodAnnex>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
@ -221,6 +224,10 @@ const handleClose = () => {
emit('close')
}
const checkCode = (e) => {
console.log(e)
e = 12412121
}
defineExpose({
open,

View File

@ -4,25 +4,17 @@
<el-descriptions :column="2" border>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_name }}</el-descriptions-item>
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_code }}</el-descriptions-item>
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="人工预算单号" label-align="left" align="left" label-class-name="my-label"> {{
formData.labor_budget_code }}</el-descriptions-item>
formData.labor_budget_code }}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
formData.remark
}}</el-descriptions-item>
formData.remark
}}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex && formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无附件
</div>
<annexLink :annex="formData.annex"></annexLink>
</el-descriptions-item>
</el-descriptions>

View File

@ -11,22 +11,30 @@
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select>
</div>
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" :disabled="project"
@click="showDialog = true" />
</el-form-item>
<el-form-item label="项目编码" prop="remark">
<el-input v-model="formData.project_code" disabled clearable placeholder="系统自动输入" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="项目名称">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" :disabled="project"
@click="showDialog = true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目编码" prop="remark">
<el-input v-model="formData.project_code" disabled clearable placeholder="系统自动输入" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="附件">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<el-col :span="24">
<el-form-item label="附件">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
<el-col :span="24">
@ -96,7 +104,7 @@ import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import { apiProjectLaborBudgetDetailLists } from "@/api/project_labor_budget_detail.ts"
import { apiProjectLaborBudgetDetailLists, apiProjectLaborBudgetDetailDelete } from "@/api/project_labor_budget_detail.ts"
@ -267,9 +275,9 @@ const handleAdd = (row: any) => {
formData.labor_budget_detail.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
const handleDelete = async (row: any) => {
if (row.id) await apiProjectLaborBudgetDetailDelete({ id: row.id })
// row
if (formData.labor_budget_detail.length <= 1) return
const index = formData.labor_budget_detail.indexOf(row);
formData.labor_budget_detail.splice(index, 1);
};

View File

@ -2,8 +2,8 @@
<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="请选择项目" />
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<el-form-item label="人工预算单号" prop="labor_budget_code">
<el-input class="w-[280px]" v-model="queryParams.labor_budget_code" clearable placeholder="请输入人工预算单号" />
@ -28,21 +28,13 @@
<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="project_id" show-overflow-tooltip /> -->
<el-table-column label="人工预算单号" prop="labor_budget_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="人工预算单号" prop="labor_budget_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="项目编码" prop="project_code" :render-header="pager.calcWidth" />
<el-table-column label="数量" prop="total_num" show-overflow-tooltip />
<el-table-column label="金额" prop="total_amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="附件" prop="annex" show-overflow-tooltip align="center">
<template #default="{ row }">
<el-link style="margin-right: 4px;" type="primary" :href="item.uri"
v-for="(item, index) in row.annex">文件{{
index + 1 }}</el-link>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_labor_budget/edit']" type="primary" link
@click="handleEdit(row)">
@ -76,6 +68,8 @@ import { apiProjectLaborBudgetLists, apiProjectLaborBudgetDelete, apiProjectLabo
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import DetailPopup from './detail.vue'
import { apiProjectSearch } from '@/api/project'
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
const editRef = shallowRef<InstanceType<typeof EditPopup>>()

View File

@ -2,11 +2,8 @@
<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="请选择项目" />
</el-form-item>
<el-form-item label="人工预算id" prop="labor_budget_id">
<el-input class="w-[280px]" v-model="queryParams.labor_budget_id" clearable placeholder="请输入人工预算id" />
<el-form-item label="所属项目" prop="project_id">
<selectRemote :formData="queryParams" model="project_id" :api="apiProjectSearch" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
@ -64,6 +61,8 @@ import { apiProjectLaborBudgetDetailLists, apiProjectLaborBudgetDetailDelete } f
import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
import { apiProjectSearch } from '@/api/project'
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
//

View File

@ -89,10 +89,11 @@
</el-date-picker>
</el-form-item> </el-col><el-col :span="8">
<el-form-item label="解除原因" prop="release_reason">
<el-input class="w-[220px]" v-model="formData.release_reason" clearable placeholder="请输入合同名称" />
<el-input class="w-[220px]" v-model="formData.release_reason" clearable placeholder="请输入解除原因" />
</el-form-item> </el-col><el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input class="w-[220px]" v-model="formData.remark" clearable placeholder="请输入合同名称" />
<el-input class="w-[220px]" v-model="formData.remark" clearable placeholder="请输入备注"
type="textarea" />
</el-form-item> </el-col>
<el-col :span="24">
<el-form-item label="合同附件">

View File

@ -10,9 +10,15 @@
<span v-if="item.lable != '附件'"> {{ item.value.length > 1 ? formData[item.value[0]][item.value[1]] :
formData[item.value[0]]
}}</span>
<span v-else> <el-link class="m-2" v-for="item in formData.annex" :href="item.uri"
target="_blank">{{ item.name }}</el-link>
</span>
<!-- <span v-else>
<annexLink :annex="formData.annex"></annexLink>
</span> -->
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="1" border>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<annexLink :annex="formData.annex"></annexLink>
</el-descriptions-item>
</el-descriptions>
</el-card>
@ -20,14 +26,6 @@
:submitApi="apiproject_loan_applyApprove" :id="formData?.id" @off="handleClose">
</flowProcess>
<flowDetail v-else :approve_id="formData?.approve_id" @off="handleClose" />
<!-- import { apiproject_loan_applyApprove, apiproject_loan_applyFlows } from '@/api/flowSet'
//
const flows = ref([])
const getbidDocumentExaminationFlows = async () => {
if (formData?.approve_id) return
let res = await apiproject_loan_applyFlows()
flows.value = res
} -->
</popup>
</div>
</template>
@ -84,10 +82,6 @@ const descriptionList = reactive([
lable: "开户账号",
value: ['bank_account', 'account']
},
{
lable: "附件",
value: ['annex']
},
{
lable: "备注",
value: ['remark']

View File

@ -1,11 +1,8 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="700px" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="700px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<!-- <el-form-item label="借款单号" prop="loan_apply_code">
<el-input v-model="formData.loan_apply_code" clearable placeholder="请输入借款单号" />
</el-form-item> -->
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="formData.project_name" clearable placeholder="点击选择" readonly
@click="showDialog = true" />
@ -14,13 +11,12 @@
<el-input v-model="formData.apply_user" clearable placeholder="请输入借款人" />
</el-form-item>
<el-form-item label="借款申请日期" prop="loan_date">
<!-- <el-input v-model="formData.loan_date" clearable placeholder="请输入借款申请日期" /> -->
<el-date-picker class="flex-1 !flex" v-model="formData.loan_date" clearable
value-format="YYYY-MM-DD " placeholder="选择日期">
<el-date-picker class="flex-1 !flex" v-model="formData.loan_date" clearable value-format="YYYY-MM-DD "
placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="借款金额" prop="loan_amount">
<el-input v-model="formData.loan_amount" clearable placeholder="请输入借款金额" />
<el-input v-model="formData.loan_amount" clearable placeholder="请输入借款金额" type="number" />
</el-form-item>
<el-form-item label="收款人姓名" prop="payee_name">
<el-input v-model="formData.payee_name" clearable placeholder="请输入收款人姓名" />
@ -36,22 +32,7 @@
</el-form-item>
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
<el-form-item label="账户编码" prop="bank_account_id">
@ -138,12 +119,7 @@ const formData = reactive({
// }
})
//
const handleAvatarSuccess_four = (response: any) => {
formData.annex ||= []
// @ts-ignore
response.code != 0 ? formData.annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
const customEvent = (e: any) => {
formData.project_id = e.id
formData.project_name = e.name

View File

@ -31,8 +31,8 @@
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="借款单号" prop="loan_apply_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="借款单号" prop="loan_apply_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="借款人" prop="apply_user" show-overflow-tooltip />
<el-table-column label="借款申请日期" prop="loan_date" show-overflow-tooltip />
<el-table-column label="借款金额" prop="loan_amount" show-overflow-tooltip />
@ -40,7 +40,7 @@
<el-table-column label="收款银行" prop="payee_bank" show-overflow-tooltip />
<el-table-column label="收款账号" prop="payee_account" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project_loan_apply/edit']" type="primary" link @click="handleEdit(row)">
编辑

View File

@ -38,13 +38,10 @@
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="执行人" prop="executor">
<el-input v-model="formData.executor" clearable placeholder="请输入排序号" />
<el-input v-model="formData.executor" clearable placeholder="请输入执行人" />
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="下次回访日期" prop="next_follow_up_date">

View File

@ -145,13 +145,12 @@ import { getAll } from '@/api/org/organization'
import type { PropType } from 'vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
const protype = reactive([])
const protype = ref()
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
const active = ref(0)
const formDataannex = reactive([])
const list1 = reactive([])
const list2 = reactive([])
const contract_name = ref('')
const project_name = ref('')
const project_code = ref('')
@ -316,6 +315,15 @@ const handleClose = () => {
emit('close')
}
//
const list = () => {
getAllProjectTypes().then((res) => {
protype.value = res
})
}
list()
defineExpose({

View File

@ -4,18 +4,18 @@
<el-descriptions :column="2" border>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_name }}</el-descriptions-item>
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_code }}</el-descriptions-item>
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="材料预算单号" label-align="left" align="left" label-class-name="my-label"> {{
formData.material_budget_code }}</el-descriptions-item>
formData.material_budget_code }}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
formData.remark
}}</el-descriptions-item>
formData.remark
}}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex.length > 0">
<!-- <div v-if="formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item"
target="_blank">文件{{ index + 1 }}查看</el-link>
@ -24,7 +24,8 @@
</div>
<div v-else>
暂无附件
</div>
</div> -->
<annexLink :annex="formData.annex"></annexLink>
</el-descriptions-item>
</el-descriptions>

View File

@ -32,10 +32,9 @@
<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" width="55" />
<el-table-column label="预算单号" prop="material_budget_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="预算单号" prop="material_budget_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="项目编码" prop="project_code" :render-header="pager.calcWidth" />
<el-table-column label="预算总数量" prop="total_num" show-overflow-tooltip />
<el-table-column label="申请总数量" prop="total_apply_num" show-overflow-tooltip />
<el-table-column label="剩余预算数量" prop="total_residual_num" show-overflow-tooltip />

View File

@ -42,9 +42,9 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="预算单号" prop="material_budget_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="预算单号" prop="material_budget_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="项目编码" prop="project_code" :render-header="pager.calcWidth" />
<el-table-column label="类型" prop="budget_type" show-overflow-tooltip />
<el-table-column label="材料大类" prop="material_first_level" show-overflow-tooltip />
<el-table-column label="材料中类" prop="material_second_level" show-overflow-tooltip />
@ -57,7 +57,7 @@
<el-table-column label="单位" prop="material_unit" show-overflow-tooltip />
<el-table-column label="申请数量" prop="apply_num" show-overflow-tooltip />
<el-table-column label="预算数量" prop="num" show-overflow-tooltip />
<el-table-column label="剩余预算数量" prop="residual_num" show-overflow-tooltip />
<el-table-column label="剩余预算数量" prop="residual_num" show-overflow-tooltip width="120" />
<el-table-column label="单价" prop="price" show-overflow-tooltip />
<el-table-column label="金额" prop="amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-form-item label="项目名称" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
@ -13,8 +12,7 @@
</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-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')" /> -->
@ -70,23 +68,19 @@
</el-radio-group>
<div v-if="isCollapse == 1" style="margin-bottom: 20px">
<!-- <el-input v-model="content" clearable placeholder="搜索人员" /> -->
<div style="margin-top: 20px">
<el-checkbox-group v-model="radiolist">
<el-checkbox :label="item" v-for="(item, i) in uesrlist" :key="i"
style="margin-bottom: 20px;">
<div class="radio-con">
<el-checkbox :label="item" v-for="(item, i) in uesrlist" :key="i" style="margin-bottom: 40px;">
<div class="radio-con flex items-center">
<div class="radioa">
<img :src="item.avatar" alt="" />
</div>
<div class="radiob">
<div class="radiob_a">{{ item.name }}</div>
<div class="radiob_b">
<!-- {{ item.org_name }}/{{ item.dept_name }}/{{ item.job_name }} -->
<text v-if="item.org_name.length > 0">{{ item.org_name }}</text>
<text v-if="item.dept_name.length > 0">/{{ item.dept_name }}</text>
<text v-if="item.job_name.length > 0">/{{ item.job_name }}</text>
</div>
</div>
</div>
@ -106,14 +100,10 @@
</div>
</div>
<div v-else>
<!-- <el-input v-model="content" clearable placeholder="搜索人员" style="margin-bottom: 20px;" /> -->
<el-checkbox-group v-model="radiolist">
<el-checkbox :label="item" v-for="(item, i) in deparmetlist1" :key="i"
style="margin-bottom: 20px;">
<div class="radio-con">
style="margin-bottom: 200px;">
<div class="radio-con flex items-center">
<div class="radioa">
<img :src="item.avatar" alt="" />
</div>
@ -133,8 +123,8 @@
</div>
<div v-if="isCollapse == 3">
<div class="lad " v-if="isshow1">
<div class="flex " v-for="(item, j) in jobslist" :key="j"
style="justify-content: space-between;" @click="gwclck(item)">
<div class="flex " v-for="(item, j) in jobslist" :key="j" style="justify-content: space-between;"
@click="gwclck(item)">
<div>{{ item.name }}</div>
<div class="Collapsebj">{{ item.admin_num }}</div>
</div>
@ -142,8 +132,7 @@
<div v-else>
<!-- <el-input v-model="content" clearable placeholder="搜索人员" style="margin-bottom: 20px;" /> -->
<el-checkbox-group v-model="radiolist">
<el-checkbox :label="item" v-for="(item, i) in jobslist1" :key="i"
style="margin-bottom: 20px;">
<el-checkbox :label="item" v-for="(item, i) in jobslist1" :key="i" style="margin-bottom: 20px;">
<div class="radio-con">
<div class="radioa">
<img :src="item.avatar" alt="" />

View File

@ -8,9 +8,9 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="工资付款单号" prop="payment_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="工资付款单号" prop="payment_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="项目编码" prop="project_code" :render-header="pager.calcWidth" />
<el-table-column label="日期" prop="apply_date" show-overflow-tooltip />
<el-table-column label="姓名" prop="person_name" show-overflow-tooltip />
<el-table-column label="身份证号" prop="person_idcard" show-overflow-tooltip />
@ -18,12 +18,17 @@
<el-table-column label="总收入" prop="total_income" show-overflow-tooltip />
<el-table-column label="总支出" prop="total_pay_out" show-overflow-tooltip />
<el-table-column label="未发放" prop="balance" show-overflow-tooltip />
<el-table-column label="本次申请付款金额" prop="apply_amount" show-overflow-tooltip />
<el-table-column label="本次申请付款金额" prop="apply_amount" :render-header="pager.calcWidth" />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<!-- <el-table-column label="银行卡号" prop="handler" 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_salary_payment/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
@ -37,7 +42,7 @@
<script lang="ts" setup name="projectLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { projectsalaryDetailLists } from '@/api/project_salary_detail'
import { projectsalaryDetailLists, projectsalaryDetailDelete } from '@/api/project_salary_detail'
import { timeFormat } from '@/utils/util'
import { getAllProjectTypes } from '@/api/projecttype'
const protype = reactive([])
@ -78,6 +83,12 @@ const { pager, getLists, resetParams, resetPage } = usePaging({
params: queryParams
})
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await projectsalaryDetailDelete({ id })
getLists()
}
getLists()

View File

@ -19,15 +19,11 @@
{{ formData.project_code }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="付款类型">
{{ formData.payment_type }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="付款类型">
{{ formData.payment_type }}
@ -44,24 +40,11 @@
}}
</el-form-item>
</el-col>
<el-col :span="12">
<!-- <el-form-item label="合计金额大写">
{{ formData.total_amount_uppercase
}}
</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 label="附件" v-if="formData.annex.length">
<el-link class="mr-5" type="primary" :href="item.uri"
v-for="(item, index) in formData.annex" :key="index">{{ item.name
}}</el-link>
</el-form-item>
</el-col>
@ -73,7 +56,7 @@
<el-table-column label="序号" type="index" show-overflow-tooltip />
<el-table-column label="姓名" prop="person_name" show-overflow-tooltip />
<el-table-column label="工种" prop="person_work_type_text" show-overflow-tooltip />
<el-table-column label="银行卡号" prop="person_bank_no" show-overflow-tooltip />
<el-table-column label="银行卡号" prop="person_idcard" show-overflow-tooltip />
<el-table-column label="总收入" prop="total_income" show-overflow-tooltip />
<el-table-column label="总支出" prop="total_pay_out" show-overflow-tooltip />
<el-table-column label="未发放" prop="balance" show-overflow-tooltip />
@ -92,6 +75,8 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiCustomDetail } from '@/api/custom'
import { projectsalaryDetailLists } from '@/api/project_salary_detail'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
defineProps({
@ -123,19 +108,8 @@ 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)
}
let res = await projectsalaryDetailLists({ payment_salary_id: data.id })
formData.payment_detail = res.lists
}

View File

@ -1,12 +1,10 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules" inline>
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="140px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="项目编码" prop="project_id"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-form-item label="项目编码">
<el-input v-model="project_code" clearable placeholder="请选择项目编码" @click="showDialog = true"
:disabled="project" />
</el-form-item> </el-col>
@ -14,7 +12,7 @@
<el-form-item label="项目名称">
<el-input v-model="project_name" clearable placeholder="系统自动填写" disabled />
</el-form-item> </el-col>
<el-col :span="24">
<el-col :span="8">
<el-form-item label="付款类型" prop="payment_type">
<el-radio-group v-model="formData.payment_type" placeholder="请选择付款类型">
<el-radio v-for="( item, index ) in dictData.salary_payment_type " :key="index"
@ -44,18 +42,22 @@
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item> </el-col>
<el-col :span="24">
<el-form-item label="合同附件">
<el-form-item label="附件">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<div style="margin-bottom: 30px;">工资支付明细</div>
<div style="margin-bottom: 30px;">
<el-table :data="paymentlist">
<template #empty>
暂无数据点击添加
<el-button @click="handleAdd(row)" size="small">+</el-button>
</template>
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd(row)" size="small">+</el-button>
<el-button @click="handleDelete(row)" size="small">-</el-button>
</template>
@ -81,13 +83,11 @@
</template></el-table-column>
<el-table-column label="总支出" prop="pay_out">
<template #default="{ row }"> <el-input v-model="row.pay_out" placeholder="系统自动获取"
disabled />
<template #default="{ row }"> <el-input v-model="row.pay_out" placeholder="系统自动获取" disabled />
</template></el-table-column>
<el-table-column label="未发放" prop="balance">
<template #default="{ row }"> <el-input v-model="row.balance" placeholder="系统自动获取"
disabled />
<template #default="{ row }"> <el-input v-model="row.balance" placeholder="系统自动获取" disabled />
</template></el-table-column>
<el-table-column label="本次申请付款金额" prop="apply_amount">
@ -123,7 +123,7 @@ import { projectsalarypaymentAdd, projectsalarypaymentEdit, projectsalarypayment
import customDialog from '@/components/project_personnel/index.vue'
import feedback from '@/utils/feedback'
import { watch } from "vue"
import { projectsalaryDetailLists } from "@/api/project_salary_detail.ts"
import { projectsalaryDetailLists, projectsalaryDetailDelete } from "@/api/project_salary_detail.ts"
import { useDictData } from '@/hooks/useDictOptions'
@ -142,7 +142,6 @@ const project_code = ref('')
const person_name = ref('')
const idcard = ref('')
const num = ref(0)
const formDataannex = reactive([])
const paymentlist = reactive([{}])
//
const formData = reactive({
@ -195,12 +194,14 @@ const paymentdetail = (row, index) => {
}
const handleAdd = (row: any) => {
// row
const index = paymentlist.indexOf(row);
paymentlist.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
const handleDelete = async (row: any) => {
if (row.id) await projectsalaryDetailDelete({ id: row.id })
// row
const index = paymentlist.indexOf(row);
paymentlist.splice(index, 1);
@ -231,17 +232,7 @@ 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
@ -271,9 +262,7 @@ const handleSubmit = async () => {
const arr1 = paymentlist.map(({ name, bank_no, work_type_text, ...rest }) => rest)
formData.payment_detail = arr1
}
if (formDataannex.length > 0) {
formData.annex = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'

View File

@ -41,27 +41,12 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="工资付款单号" prop="payment_code" show-overflow-tooltip />
<el-table-column label="工资付款单号" prop="payment_code" :render-header="pager.calcWidth" />
<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="payment_type" show-overflow-tooltip />
<el-table-column label="申请日期" prop="apply_date" show-overflow-tooltip />
<el-table-column label="合计金额" prop="total_amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" 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 }">
@ -73,8 +58,7 @@
@click="handleDelete(row.id)">
删除
</el-button>
<el-button v-perms="['project.project_salary_payment/detail']" link
@click="handledetail(row)">
<el-button v-perms="['project.project_salary_payment/detail']" link @click="handledetail(row)">
详情
</el-button>

View File

@ -25,7 +25,7 @@
<el-input v-model="formData.settlement_amount_uppercase" readonly disabled placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="结算差异" prop="remaining_amount">
<el-input v-model="formData.remaining_amount" readonly disabled placeholder="系统自动计算" />
<el-input v-model="formData.remaining_amount" placeholder="请输入结算差异" />
</el-form-item>
<el-form-item label="结算日期" prop="settlement_date">
<el-date-picker class="flex-1 !flex" v-model="formData.settlement_date" clearable type="date"
@ -175,7 +175,7 @@ const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
const amountinput = (e) => {
if (e && e > 0) {
formData.remaining_amount = e
// formData.remaining_amount = e
formData.settlement_amount_uppercase = toChinesNum(e)
}
}

View File

@ -28,9 +28,9 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="结算单号" prop="settlement_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="合同名称" prop="contract_name" show-overflow-tooltip />
<el-table-column label="结算单号" prop="settlement_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="合同名称" prop="contract_name" :render-header="pager.calcWidth" />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="结算日期" prop="settlement_date" show-overflow-tooltip />
<el-table-column label="合同金额" prop="contract_amount" show-overflow-tooltip />

View File

@ -63,16 +63,7 @@
</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>
<annexLink :annex="formData.annex"></annexLink>
</el-form-item>
</el-col>

View File

@ -15,8 +15,8 @@
<el-form-item label="结算金额大写" prop="settlement_amount_uppercase">
<el-input v-model="formData.settlement_amount_uppercase" readonly disabled placeholder="系统自动填写" />
</el-form-item>
<el-form-item label="结算差异" prop="remaining_amount">
<el-input v-model="formData.remaining_amount" placeholder="请输入" />
<el-form-item label="结算差异">
<el-input v-model="formData.settlement_difference" placeholder="请输入" />
</el-form-item>
<el-form-item label="结算日期" prop="settlement_date">
<el-date-picker class="flex-1 !flex" v-model="formData.settlement_date" clearable type="date"
@ -35,8 +35,11 @@
<projectTable @customEvent="customEvent"></projectTable>
</el-dialog>
<div v-if="showDialog1">
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
<contractTable @customEvent="customEvent1" :project_id="formData.project_id"></contractTable>
<el-dialog v-model="showDialog1" title="选择分包合同" width="70%">
<!-- <contractTable @customEvent="customEvent1" :project_id="formData.project_id"></contractTable> -->
<dialogTable :config="subcontracting_contract" :query="{ project_id: project?.id || '' }"
@customEvent="customEvent1">
</dialogTable>
</el-dialog>
</div>
</div>
@ -48,7 +51,9 @@ import Popup from '@/components/popup/index.vue'
import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import projectTable from "@/components/project/index.vue"
import contractTable from "@/components/procurement/index.vue"
import { subcontracting_contract } from "@/components/dialogTable/dialogTableConfig"
import { computed } from "vue"
import { subcontractsettlementAdd, subcontractsettlementEdit, subcontractsettlementDetail } from '@/api/project_subcontract_settlement'
import { timeFormat, toChinesNum } from '@/utils/util'
@ -70,7 +75,6 @@ const project_name = ref('')
const project_code = ref('')
const custom_name
= ref('')
const formDataannex = reactive([])
import configs from "@/config"
const base_url = configs.baseUrl + configs.urlPrefix
import useUserStore from "@/stores/modules/user";
@ -93,24 +97,8 @@ const customEvent1 = (e: any) => {
showDialog1.value = false;
};
const getlista = () => {
getAll().then((res) => {
// orglist = res.data
Object.assign(orglist, res)
})
}
const area_change = (e: any) => {
formData.org_id = e
let data = { 'org_id': e }
deptAll(data).then((res) => {
Object.assign(jobs, res)
})
}
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑分包结算' : '新增分包结算'
@ -126,6 +114,7 @@ const formData = reactive({
settlement_amount_uppercase: '',
remaining_amount: '',
settlement_date: '',
settlement_difference: "",
remark: '',
annex: [],
approve_detail: {
@ -138,12 +127,8 @@ const formData = reactive({
//
const amountinput = (e) => {
if (e && e > 0) {
// formData.remaining_amount = e
formData.settlement_amount_uppercase = toChinesNum(e)
}
const amountinput = () => {
formData.settlement_amount_uppercase = toChinesNum(formData.settlement_amount)
}
//
const formRules = reactive<any>({
@ -153,9 +138,6 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
deptAll({ 'org_id': data.org_id }).then((res) => {
Object.assign(jobs, res)
})
project_name.value = data.project_name
custom_name.value = data.custom_name
@ -169,6 +151,7 @@ const setFormData = async (data: Record<any, any>) => {
//@ts-ignore
formData.recording_time = timeFormat(formData.recording_time, 'YYYY-MM-DD ')
amountinput()
}
const getDetail = async (row: Record<string, any>) => {
@ -202,7 +185,6 @@ const handleClose = () => {
}
getlista()
defineExpose({
open,
setFormData,

View File

@ -28,10 +28,10 @@
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="55" />
<el-table-column label="结算单号" prop="settlement_code" show-overflow-tooltip />
<el-table-column label="供应商名称" prop="supplier_name" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="合同编号" prop="contract_code" show-overflow-tooltip />
<el-table-column label="结算单号" prop="settlement_code" :render-header="pager.calcWidth" />
<el-table-column label="供应商名称" prop="supplier_name" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="合同编号" prop="contract_code" :render-header="pager.calcWidth" />
<el-table-column label="结算日期" prop="settlement_date" show-overflow-tooltip />
<el-table-column label="合同金额" prop="contract_amount" show-overflow-tooltip />
<el-table-column label="洽商金额" prop="negotiation_amount" show-overflow-tooltip />
@ -41,12 +41,14 @@
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<!-- <el-button v-perms="['project.project_subcontract_settlement/edit']" type="primary" link @click="handleEdit(row)">
<el-button v-perms="['project.project_subcontract_settlement/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button> -->
<!-- <el-button v-perms="['project.project_subcontract_settlement/delete']" type="danger" link @click="handleDelete(row.id)">
</el-button>
<el-button v-perms="['project.project_subcontract_settlement/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button> -->
</el-button>
<el-button v-perms="['project.project_subcontract_settlement/detail']" link
@click="handledetail(row)">
详情

View File

@ -4,26 +4,18 @@
<el-descriptions :column="2" border>
<el-descriptions-item label="项目名称" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_name }}</el-descriptions-item>
formData.project_name }}</el-descriptions-item>
<el-descriptions-item label="项目编码" label-align="left" align="left" label-class-name="my-label"> {{
formData.project_code }}</el-descriptions-item>
formData.project_code }}</el-descriptions-item>
<el-descriptions-item label="分包预算单号" label-align="left" align="left" label-class-name="my-label"> {{
formData.subpackage_budget_code }}</el-descriptions-item>
formData.subpackage_budget_code }}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
formData.remark
}}</el-descriptions-item>
formData.remark
}}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex && formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item"
target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无附件
</div>
<annexLink :annex="formData.annex"></annexLink>
</el-descriptions-item>
</el-descriptions>

View File

@ -1,16 +1,13 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules" inline>
<div
style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<div style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select>
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织"
@change="deptrmt">
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select>
</div>
@ -33,23 +30,7 @@
</el-col>
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
:href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
<el-col :span="24">
@ -128,7 +109,7 @@
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import projectDialog from '@/components/project/index.vue'
import { subpackagdetailLists } from '@/api/project_subpackage_budget_detail'
import { subpackagdetailLists, subpackagdetailDelete } from '@/api/project_subpackage_budget_detail'
import prodctTable from '@/components/product/index.vue'
import { subpackagebudgetAdd, subpackagebudgetEdit, subpackagebudgetDetail } from '@/api/project_subpackage_budget'
let props = defineProps({
@ -191,26 +172,6 @@ const customEvent1 = (e) => {
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 subtractji1 = (row: any, index: any) => {
@ -273,7 +234,8 @@ const handleAdd = (row: any) => {
tableData.value.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
const handleDelete = async (row: any) => {
if (row.id) await subpackagdetailDelete({ id: row.id })
// row
const index = tableData.value.indexOf(row);
tableData.value.splice(index, 1);
@ -289,16 +251,7 @@ 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)
}
budgetDetailLists(data.id)
if (data.dept_id) {
getlist1(data.org_id)
@ -325,7 +278,6 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
formData.annex = formDataannex.map((item: any) => item.uri)
if (tableData.value.length > 0) {
formData.subpackage_budget_detail = tableData.value.map((item: any) => ({
'id': item.id,

View File

@ -15,19 +15,13 @@
<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" width="55" />
<el-table-column label="预算单号" prop="subpackage_budget_code" show-overflow-tooltip />
<el-table-column label="预算单号" prop="subpackage_budget_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="预算总工作量" prop="total_num" show-overflow-tooltip />
<el-table-column label="剩余预算工作量" prop="residue_num" show-overflow-tooltip />
<el-table-column label="预算总金额" prop="total_amount" 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/edit']" type="primary" link @click="handleEdit(row)">
编辑

View File

@ -31,23 +31,20 @@
<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" width="55" />
<el-table-column label="预算单号" prop="subpackage_budget_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="预算单号" prop="subpackage_budget_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="项目编码" prop="project_code" :render-header="pager.calcWidth" />
<el-table-column label="工作类型" prop="work_type" show-overflow-tooltip />
<el-table-column label="工作内容" prop="work_content" show-overflow-tooltip />
<el-table-column label="项目特征" prop="project_features" show-overflow-tooltip />
<el-table-column label="单位" prop="unit" show-overflow-tooltip />
<el-table-column label="预算总工作量" prop="num" show-overflow-tooltip />
<el-table-column label="预算总工作量" prop="num" show-overflow-tooltip width="120" />
<el-table-column label="单价" prop="price" show-overflow-tooltip />
<el-table-column label="金额" prop="amount" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="已分包工作量" prop="has_subcontract_num" show-overflow-tooltip />
<el-table-column label="剩余预算工作量" prop="residue_num" show-overflow-tooltip />
<el-table-column label="已分包工作量" prop="has_subcontract_num" show-overflow-tooltip width="120" />
<el-table-column label="剩余预算工作量" prop="residue_num" show-overflow-tooltip width="140" />
<el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project/edit']" type="primary" link @click="handleEdit(row)">
编辑

View File

@ -1,23 +1,17 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
<div
style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<div style="display: flex; flex-direction: row-reverse; justify-content: flex-start;margin-bottom: 30px;">
<el-select class="w-[180px]" v-model="formData.dept_id" clearable placeholder="请选择部门">
<el-option v-for="(item, index) in list2" :key="index" :label="item.name" :value="item.id" />
</el-select>
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织"
@change="deptrmt">
<el-select class="w-[180px]" v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
</el-select>
</div>
<el-row>
<el-col :span="8">
<el-form-item label="项目名称" prop="project_id" @click="showDialog2 = true"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
@ -51,10 +45,7 @@
<el-input v-model="project_rate" clearable disabled placeholder="请输入项目利润率(%)" />
</el-form-item>
</el-col>
</el-row>
<br />
<el-row>
<el-table :data="tableData" :summary-method="getSummaries" show-summary>
@ -67,35 +58,21 @@
<div>{{ row.text }}</div>
</template>
</el-table-column>
<el-table-column label="预算成本" prop="cost">
<template #default="{ row, $index }">
<el-input v-model="row.cost" @input="costinput(row, $index)" /> </template>
</el-table-column>
<el-table-column label="成本占比" prop="rate" width="156">
<template #default="{ row }">
{{ row.rate }}
</template>
</el-table-column>
</el-table>
</el-row>
<el-row style="margin: 20px 0;">
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
@ -111,33 +88,15 @@
<el-col :span="8">
<el-form-item label="预算日期" prop="budget_date"
:rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
<el-date-picker v-model="formData.budget_date" clearable type="date"
value-format="YYYY-MM-DD " placeholder="选择预算日期">
<el-date-picker v-model="formData.budget_date" clearable type="date" value-format="YYYY-MM-DD "
placeholder="选择预算日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="预算清单">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
:href="item.uri" target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
@ -222,20 +181,7 @@ const custom_name = ref('')
const manage_name = ref('')
const userInfo = userStore.userInfo
const personnel = ref<any>()
//
const handleAvatarSuccess_four = (
response,
uploadFile
) => {
if (response.code == 0) {
ElMessage.error(response.msg);
return;
}
formDataannex.push(
{ uri: response.data.uri, name: response.data.name }
);
};
//
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
@ -261,10 +207,7 @@ const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined)
}
};
//
const delFileFn = (index: number) => {
formDataannex.splice(index, 1)
}
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
@ -361,6 +304,15 @@ interface SummaryMethodProps<T = Product> {
data: T[]
}
const getSummaries = (param: SummaryMethodProps) => {
updateCost();
if (formData && formData.contract_amount && project_amount.value) {
project_amount.value = Number(formData.contract_amount) - Number(project_amount.value);
project_rate.value = (Number(project_amount.value) / Number(formData.contract_amount)).toFixed(2) + '%';
}
if (project_amount.value) {
project_amount.value = Number(formData.contract_amount) - Number(project_amount.value);
project_rate.value = (Number(project_amount.value) / Number(formData.contract_amount)).toFixed(2) + '%';
}
const { columns, data } = param
const sums: string[] = []
columns.map((column, index) => {
@ -518,9 +470,7 @@ const getDetail = async (row: Record<string, any>) => {
//
const handleSubmit = async () => {
if (formDataannex.length > 0) {
formData.budget_list = formDataannex.map((item: any) => item.uri)
}
await formRef.value?.validate()

View File

@ -32,37 +32,22 @@
<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" width="55" />
<el-table-column label="预算单号" prop="total_budget_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
<el-table-column label="预算单号" prop="total_budget_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="项目编码" prop="project_code" :render-header="pager.calcWidth" />
<el-table-column label="项目经理" prop="project_manager" show-overflow-tooltip />
<el-table-column label="预算日期" prop="budget_date" show-overflow-tooltip />
<el-table-column label="合同金额" prop="contract_amount" show-overflow-tooltip />
<el-table-column label="总成本" prop="total_cost" show-overflow-tooltip />
<el-table-column label="项目利润" prop="profit" show-overflow-tooltip />
<el-table-column label="项目利润率" prop="profit_rate" show-overflow-tooltip />
<el-table-column label="材料预算成本" prop="cl_cost" show-overflow-tooltip />
<el-table-column label="分包预算成本" prop="fb_cost" show-overflow-tooltip />
<el-table-column label="人工预算成本" prop="rg_cost" show-overflow-tooltip />
<el-table-column label="费用预算成本" prop="fy_cost" show-overflow-tooltip />
<el-table-column label="机具预算成本" prop="jj_cost" show-overflow-tooltip />
<el-table-column label="项目利润率" prop="profit_rate" show-overflow-tooltip width="100" />
<el-table-column label="材料预算成本" prop="cl_cost" show-overflow-tooltip width="120" />
<el-table-column label="分包预算成本" prop="fb_cost" show-overflow-tooltip width="120" />
<el-table-column label="人工预算成本" prop="rg_cost" show-overflow-tooltip width="120" />
<el-table-column label="费用预算成本" prop="fy_cost" show-overflow-tooltip width="120" />
<el-table-column label="机具预算成本" prop="jj_cost" show-overflow-tooltip width="120" />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="预算清单" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.budget_list && row.budget_list.length > 0">
<div v-for="(item, i) in row.budget_list " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column>
<el-table-column label="操作" width="150" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_manager_apiprojectbudget/edit']" type="primary" link
@click="handleEdit(row)">
@ -76,7 +61,6 @@
@click="handledetail(row)">
详情
</el-button>
</template>
</el-table-column>
</el-table>

View File

@ -118,10 +118,7 @@ const formData: any = reactive({
"payee_account": "121",
"remark": "212",
"annex": [
{
"uri": "https:\/\/ceshi-engineering.lihaink.cn\/uploads\/files\/20240205\/20240205112036d89cc6685.jpg",
"name": "20210719150601_4401e.jpg"
}
],
"bank_account_id": 8,
"trip_apply_code": "项目出差-20240201-116911",

View File

@ -1,88 +1,110 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="85vw" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="85vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
<!-- <el-form-item label="项目名称" prop="project_name">
<el-input v-model="formData.project_name" clearable placeholder="点击选择" readonle
@click="showDialog4 = true" />
</el-form-item> -->
<el-form-item label="出差申请单号" prop="trip_apply_id">
<el-input v-model="formData.trip_apply_code" clearable placeholder="点击选择" readonle
@click="showDialog = true" />
</el-form-item>
<el-form-item label="报销类型" prop="reimbursement_type">
<el-checkbox-group v-model="formData.reimbursement_type" placeholder="报销类型">
<el-checkbox v-for="(item, index) in dictData.reimbursement_type" :key="index"
:label="item.value">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="借款单号" prop="loan_apply_id" v-if="formData.reimbursement_type.includes('1')">
<el-input v-model="formData.loan_apply_code" clearable placeholder="点击选择" readonly
@click="showDialog1 = true" />
</el-form-item>
<el-form-item label="冲抵借款金额" prop="offset_loan_amount" v-if="formData.reimbursement_type.includes('1')">
<el-input v-model="formData.offset_loan_amount" clearable placeholder="请输入冲抵借款金额" />
</el-form-item>
<el-form-item label="报销人" prop="apply_user">
<el-input v-model="formData.apply_user" clearable placeholder="请输入报销人" />
</el-form-item>
<el-form-item label="报销日期" prop="apply_date">
<!-- <el-input v-model="formData.apply_date" clearable placeholder="请输入报销日期" /> -->
<el-date-picker class="flex-1 !flex" v-model="formData.apply_date" clearable
value-format="YYYY-MM-DD " placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="收款人姓名" prop="payee_name">
<el-input v-model="formData.payee_name" clearable placeholder="请输入收款人姓名" />
</el-form-item>
<el-form-item label="收款银行" prop="payee_bank">
<el-input v-model="formData.payee_bank" clearable placeholder="请输入收款银行" />
</el-form-item>
<el-form-item label="收款账号" prop="payee_account">
<el-input v-model="formData.payee_account" clearable placeholder="请输入收款账号" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
</el-form-item>
<el-form-item label="账户编码" prop="bank_account_id">
<el-input v-model="formData.bank_account.account_sn" clearable placeholder="点击选择银行" readonly
@click="showDialog2 = true" />
</el-form-item>
<el-form-item label="开户银行" prop="bank_account_id">
<el-input v-model="formData.bank_account.deposit_bank" clearable readonly />
</el-form-item>
<el-form-item label="开户名称" prop="bank_account_id">
<el-input v-model="formData.bank_account.account_name" clearable readonly />
</el-form-item>
<el-form-item label="开户账号" prop="bank_account_id">
<el-input v-model="formData.bank_account.account" clearable readonly />
</el-form-item>
<el-row>
<el-col :span="8">
<el-form-item label="出差申请单号" prop="trip_apply_code">
<el-input v-model="formData.trip_apply_code" clearable placeholder="点击选择" readonle
@click="showDialog = true" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="报销类型" prop="reimbursement_type">
<el-checkbox-group v-model="formData.reimbursement_type" placeholder="报销类型">
<el-checkbox v-for="(item, index) in dictData.reimbursement_type" :key="index"
:label="item.value">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-col>
<el-col :span="8" v-if="formData.reimbursement_type.includes('1')">
<el-form-item label="借款单号">
<el-input v-model="formData.loan_apply_code" clearable placeholder="点击选择" readonly
@click="showDialog1 = true" />
</el-form-item>
</el-col>
<el-col :span="8" v-if="formData.reimbursement_type.includes('1')">
<el-form-item label="冲抵借款金额" prop="offset_loan_amount">
<el-input v-model="formData.offset_loan_amount" clearable placeholder="请输入冲抵借款金额" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="报销人" prop="apply_user">
<el-input v-model="formData.apply_user" clearable placeholder="请输入报销人" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="报销日期" prop="apply_date">
<el-date-picker class="flex-1 !flex" v-model="formData.apply_date" clearable
value-format="YYYY-MM-DD " placeholder="选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款人姓名" prop="payee_name">
<el-input v-model="formData.payee_name" clearable placeholder="请输入收款人姓名" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款银行" prop="payee_bank">
<el-input v-model="formData.payee_bank" clearable placeholder="请输入收款银行" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="收款账号" prop="payee_account">
<el-input v-model="formData.payee_account" clearable placeholder="请输入收款账号" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="账户编码" prop="bank_account_id">
<el-input v-model="formData.bank_account.account_sn" clearable placeholder="点击选择银行" readonly
@click="showDialog2 = true" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户银行" prop="bank_account_id">
<el-input v-model="formData.bank_account.deposit_bank" clearable readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户名称" prop="bank_account_id">
<el-input v-model="formData.bank_account.account_name" clearable readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户账号" prop="bank_account_id">
<el-input v-model="formData.bank_account.account" clearable readonly />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件">
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
</el-row>
<el-col :span="24">
<div style="margin-bottom: 30px;">报销明细</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.reimbursement_detail">
<template #empty>
暂无数据点击添加
<el-button @click="handleAdd(row)" size="small">+</el-button>
</template>
<el-table-column label="序号">
<template #default="{ row }">
<el-button @click="handleAdd(row)" size="small">+</el-button>
@ -92,8 +114,8 @@
<el-table-column label="一级科目">
<template #default="scope">
<el-input v-model="scope.row.first_level_subject" @click="openDialog1(scope)"
readonly placeholder="点击选择" />
<el-input v-model="scope.row.first_level_subject" @click="openDialog1(scope)" readonly
placeholder="点击选择" />
</template>
</el-table-column>
@ -137,6 +159,10 @@
<div style="margin-bottom: 30px;">发票明细</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.invoice_detail">
<template #empty>
暂无数据点击添加
<el-button @click="handleAdd1(row)" size="small">+</el-button>
</template>
<el-table-column label="序号">
<template #default="{ row }">
@ -250,8 +276,8 @@ import bankaccount from "@/components/bankaccount/index.vue"
import projectcostTemLists from '@/components/projectcostTemLists/index.vue'
import configs from "@/config"
import useUserStore from "@/stores/modules/user";
import { apiProjectTravelReimbursementDetailLists } from "@/api/project_travel_reimbursement_detail.ts"
import { apiProjectTravelReimbursementInvoiceDetailLists } from "@/api/project_travel_reimbursement_invoice_detail.ts"
import { apiProjectTravelReimbursementDetailLists, apiProjectTravelReimbursementDetailDelete } from "@/api/project_travel_reimbursement_detail.ts"
import { apiProjectTravelReimbursementInvoiceDetailLists, apiProjectTravelReimbursementInvoiceDetailDelete } from "@/api/project_travel_reimbursement_invoice_detail.ts"
const base_url = configs.baseUrl + configs.urlPrefix
const userStore = useUserStore();
@ -381,7 +407,7 @@ const delFileFn = (index: number) => {
const invoiceIndex = ref(0)
//
const handleAvatarSuccess_four1 = (response: any) => {
// @ts-ignore
if (!Array.isArray(formData.invoice_detail[invoiceIndex.value].annex)) formData.invoice_detail[invoiceIndex.value].annex = [];
response.code != 0 ? formData.invoice_detail[invoiceIndex.value].annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
@ -459,9 +485,9 @@ const handleAdd = (row: any) => {
formData.reimbursement_detail.splice(index + 1, 0, {});
};
const handleDelete = (row: any) => {
const handleDelete = async (row: any) => {
if (row.id) await apiProjectTravelReimbursementDetailDelete({ id: row.id })
// row
if (formData.reimbursement_detail.length <= 1) return
const index = formData.reimbursement_detail.indexOf(row);
formData.reimbursement_detail.splice(index, 1);
};
@ -482,9 +508,8 @@ const handleAdd1 = (row: any) => {
);
};
const handleDelete1 = (row: any) => {
// row
if (formData.invoice_detail.annex <= 1) return
const handleDelete1 = async (row: any) => {
if (row.id) await apiProjectTravelReimbursementInvoiceDetailDelete({ id: row.id })
const index = formData.invoice_detail.indexOf(row);
formData.invoice_detail.splice(index, 1);
};

View File

@ -30,18 +30,18 @@
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="出差申请单编号" prop="trip_reimbursement_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
<el-table-column label="出差申请单编号" prop="trip_reimbursement_code" :render-header="pager.calcWidth" />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="报销类型" prop="reimbursement_type" show-overflow-tooltip />
<el-table-column label="借款单编号" prop="loan_apply_code" show-overflow-tooltip />
<el-table-column label="借款单编号" prop="loan_apply_code" show-overflow-tooltip width="100" />
<el-table-column label="借款金额" prop="loan_amount" show-overflow-tooltip />
<el-table-column label="报销金额" prop="total_amount" show-overflow-tooltip />
<el-table-column label="冲抵借款金额" prop="offset_loan_amount" show-overflow-tooltip />
<el-table-column label="冲抵借款金额" prop="offset_loan_amount" show-overflow-tooltip width="120" />
<el-table-column label="付款金额" prop="pay_amount" show-overflow-tooltip />
<el-table-column label="报销人" prop="apply_user" show-overflow-tooltip />
<el-table-column label="报销日期" prop="apply_date" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" width="200" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_travel_reimbursement/edit']" type="primary" link
@click="handleEdit(row)">

View File

@ -1,17 +1,5 @@
<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="travel_reimbursement_id">
<el-input class="w-[280px]" v-model="queryParams.travel_reimbursement_id" clearable
placeholder="请输入差旅报销单id" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project.project_travel_reimbursement_detail/add']" type="primary" @click="handleAdd">
<template #icon>
@ -26,9 +14,9 @@
<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="trip_apply_code" show-overflow-tooltip />
<el-table-column label="差旅报销单" prop="trip_reimbursement_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="出差申请单" prop="trip_apply_code" :render-header="pager.calcWidth" />
<el-table-column label="差旅报销单" prop="trip_reimbursement_code" :render-header="pager.calcWidth" />
<el-table-column label="一级科目" prop="first_level_subject" show-overflow-tooltip />
<el-table-column label="交通" prop="traffic_fee" show-overflow-tooltip />
<el-table-column label="住宿" prop="stay_fee" show-overflow-tooltip />

View File

@ -1,7 +1,6 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit"
@close="handleClose">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="110px" :rules="formRules">
<el-form-item label="差旅报销单号" prop="travel_reimbursement_id">
<el-input v-model="formData.trip_reimbursement_code" clearable placeholder="点击选则"
@ -9,8 +8,7 @@
</el-form-item>
<el-form-item label="发票类型" prop="invoice_type">
<el-select v-model="formData.invoice_type" placeholder="请选择" class="flex-1">
<el-option :label="item.name" :value="item.value"
v-for="item in dictData.invoice_type"></el-option>
<el-option :label="item.name" :value="item.value" v-for="item in dictData.invoice_type"></el-option>
</el-select>
</el-form-item>
<el-form-item label="发票号" prop="invoice_sn">
@ -23,8 +21,7 @@
</el-form-item>
<el-form-item label="发票形式" prop="invoice_form">
<el-select v-model="formData.invoice_form" placeholder="请选择" class="flex-1">
<el-option :label="item.name" :value="item.value"
v-for="item in dictData.invoice_form"></el-option>
<el-option :label="item.name" :value="item.value" v-for="item in dictData.invoice_form"></el-option>
</el-select>
</el-form-item>
<el-form-item label="发票金额" prop="invoice_amount">
@ -34,22 +31,7 @@
<el-input v-model="tax_amount" clearable disabled placeholder="请输入发票税额" />
</el-form-item>
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
<el-form-item label="发票备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入发票备注" />
@ -115,15 +97,7 @@ let tax_amount = computed(() => {
})
// let formData.tax_rate
//
const handleAvatarSuccess_four = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
//
const delFileFn = (index: number) => {
formData.annex.splice(index, 1)
}
const customEvent = (e: any) => {
formData.travel_reimbursement_id = e.id
formData.trip_reimbursement_code = e.trip_reimbursement_code

View File

@ -10,8 +10,8 @@
<span v-if="item.lable != '附件'"> {{ item.value.length > 1 ? formData[item.value[0]][item.value[1]] :
formData[item.value[0]]
}}</span>
<span v-else> <el-link class="m-2" v-for="item in formData.annex" :href="item.uri"
target="_blank">{{ item.name }}</el-link>
<span v-else>
<annexLink :annex="formData.annex"></annexLink>
</span>
</el-descriptions-item>
</el-descriptions>
@ -20,14 +20,7 @@
:submitApi="apiproject_trip_applyApprove" :id="formData?.id" @off="handleClose">
</flowProcess>
<flowDetail v-else :approve_id="formData?.approve_id" @off="handleClose" />
<!-- import { apiproject_trip_applyApprove, apiproject_trip_applyFlows } from '@/api/flowSet'
//
const flows = ref([])
const getbidDocumentExaminationFlows = async () => {
if (formData?.approve_id) return
let res = await apiproject_trip_applyFlows()
flows.value = res
} -->
</popup>
</div>
</template>

View File

@ -1,15 +1,12 @@
<template>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="600px" @confirm="handleSubmit"
@close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<popup ref="popupRef" :title="popupTitle" :async="true" width="600px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="100px" :rules="formRules">
<el-form-item label="项目名称" prop="project_id">
<el-input v-model="formData.project_name" clearable placeholder="点击选择" readonly
@click="showDialog = true" />
</el-form-item>
<!-- <el-form-item label="申请单号" prop="trip_apply_code">
<el-input v-model="formData.trip_apply_code" disabled clearable placeholder="后台zi" />
</el-form-item> -->
<el-form-item label="出差起始地" prop="origin_address" label-width="100px">
<el-input v-model="formData.origin_address" clearable placeholder="请输入出差起始地" />
</el-form-item>
@ -17,19 +14,18 @@
<el-input v-model="formData.target_address" clearable placeholder="请输入出差目的地" />
</el-form-item>
<el-form-item label="交通工具" prop="traffic">
<!-- <el-input v-model="formData.traffic" clearable placeholder="请输入交通工具" /> -->
<el-select v-model="formData.traffic" placeholder="请选择" class="flex-1">
<el-option :label="item.name" :value="item.value" v-for="item in dictData.traffic"></el-option>
</el-select>
</el-form-item>
<el-form-item label="出差时间" prop="start_date">
<el-date-picker class="flex-1 !flex" v-model="formData.start_date" clearable
value-format="YYYY-MM-DD " placeholder="请输入出差时间">
<el-date-picker class="flex-1 !flex" v-model="formData.start_date" clearable value-format="YYYY-MM-DD "
placeholder="请输入出差时间">
</el-date-picker>
</el-form-item>
<el-form-item label="结束时间" prop="end_date">
<el-date-picker class="flex-1 !flex" v-model="formData.end_date" clearable
value-format="YYYY-MM-DD " placeholder="请输入结束时间">
<el-date-picker class="flex-1 !flex" v-model="formData.end_date" clearable value-format="YYYY-MM-DD "
placeholder="请输入结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="出差事由" prop="reason">
@ -43,22 +39,7 @@
</el-form-item>
<el-col :span="24">
<el-form-item label="附件">
<el-upload
accept="doc, docx, xls, xlsx, ppt, pptx, pdf, txt, zip, rar, tar, jpg, png, gif, jpeg, webp, wmv, avi, mpg, mpeg, 3gp, mov, mp4, flv, f4v, rmvb, mkv"
class="upload-demo" :show-file-list="false" aria-hidden="true"
:headers="{ Token: userStore.token }" :action="base_url + '/upload/file'"
:on-success="handleAvatarSuccess_four" ref="upload">
<el-button type="primary">
上传
</el-button>
</el-upload>
<div>
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri"
target="_blank">{{ item.name }}</a>
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
</div>
</div>
<uploadAnnex :formData="formData"></uploadAnnex>
</el-form-item>
</el-col>
@ -119,11 +100,6 @@ const formData = reactive({
days: "",
})
//
const handleAvatarSuccess_four = (response: any) => {
// @ts-ignore
response.code != 0 ? formData.annex.push({ uri: response.data.uri, name: response.data.name }) : ElMessage.error(response.msg);
};
const customEvent = (e) => {
formData.project_id = e.id
formData.project_name = e.name
@ -179,7 +155,6 @@ const setFormData = async (data: Record<any, any>) => {
}
}
formData.traffic = String(formData.traffic)
formData.annex = []
}
const getDetail = async (row: Record<string, any>) => {
@ -212,9 +187,6 @@ const handleClose = () => {
emit('close')
}
const delFileFn = (index: number) => {
formData.annex.splice(index, 1)
}
defineExpose({
open,

View File

@ -42,8 +42,8 @@
<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="trip_apply_code" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project_name" :render-header="pager.calcWidth" />
<el-table-column label="申请单号" prop="trip_apply_code" :render-header="pager.calcWidth" />
<el-table-column label="出差起始地" prop="origin_address" show-overflow-tooltip />
<el-table-column label="出差目的地" prop="target_address" show-overflow-tooltip />
<el-table-column label="交通工具" prop="traffic_text" show-overflow-tooltip />
@ -53,7 +53,7 @@
<el-table-column label="历时天数" prop="days" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<!-- <el-table-column label="附件" prop="annex" show-overflow-tooltip /> -->
<el-table-column label="操作" width="120" fixed="right">
<el-table-column label="操作" width="170" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project.project_trip_apply/edit']" type="primary" link
@click="handleEdit(row)">

View File

@ -5,61 +5,52 @@
<el-card class="mb-2">
<el-descriptions :column="2" border>
<el-descriptions-item label="客户名称" label-align="left" align="left"
label-class-name="my-label">{{
formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="客户名称" label-align="left" align="left" label-class-name="my-label">{{
formData.custom_name }}</el-descriptions-item>
<el-descriptions-item label="报价日期" label-align="left" align="left" label-class-name="my-label">
{{
formData.quotation_date }}</el-descriptions-item>
formData.quotation_date }}</el-descriptions-item>
<el-descriptions-item label="联系人" label-align="left" align="left" label-class-name="my-label">
{{
formData.custom_master_name }}</el-descriptions-item>
formData.custom_master_name }}</el-descriptions-item>
<el-descriptions-item label="联系电话" label-align="left" align="left" label-class-name="my-label">
{{ formData.custom_master_phone }}
</el-descriptions-item>
<el-descriptions-item label="制单人" label-align="left" align="left" label-class-name="my-label">
{{
formData.create_user
}}
formData.create_user
}}
</el-descriptions-item>
<el-descriptions-item label="发票类型" label-align="left" align="left" label-class-name="my-label">
{{
formData.invoice_type_text
}}</el-descriptions-item>
formData.invoice_type_text
}}</el-descriptions-item>
<el-descriptions-item label="订单金额" label-align="left" align="left" label-class-name="my-label">
{{
formData.amount_including_tax
formData.amount_including_tax
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="运费" label-align="left" align="left" label-class-name="my-label"> {{
formData.freight
}}</el-descriptions-item>
formData.freight
}}</el-descriptions-item>
<el-descriptions-item label="其它费用" label-align="left" align="left" label-class-name="my-label">
{{
formData.other_fee
formData.other_fee
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="合计金额" label-align="left" align="left" label-class-name="my-label">
{{
formData.total_amount }}</el-descriptions-item>
formData.total_amount }}</el-descriptions-item>
<el-descriptions-item label="客户需求" label-align="left" align="left" label-class-name="my-label">
{{
formData.customer_require
formData.customer_require
}}</el-descriptions-item>
}}</el-descriptions-item>
<el-descriptions-item label="备注" label-align="left" align="left" label-class-name="my-label"> {{
formData.remark
}}</el-descriptions-item>
formData.remark
}}</el-descriptions-item>
<el-descriptions-item label="附件" label-align="left" align="left" label-class-name="my-label">
<div v-if="formData.annex.length > 0">
<div v-for="(item, index) in formData.annex" style="margin-left: 5px;display: block;">
<el-link style="margin-left: 10px; color: #4a5dff; align-self: flex-start"
:href="item" target="_blank">文件{{ index + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无附件
</div>
<annexLink :annex="formData.annex"></annexLink>
</el-descriptions-item>
</el-descriptions>
<div class="tit">报价明细</div>

View File

@ -22,8 +22,8 @@
<el-table-column label="项目编号" prop="project_code" show-overflow-tooltip />
<el-table-column label="签订日期" prop="signing_date" show-overflow-tooltip />
<el-table-column label="合同金额" prop="contract_amount" show-overflow-tooltip />
<el-table-column label="已付款金额" prop="has_payment_amount" show-overflow-tooltip />
<el-table-column label="已收票金额" prop="has_receipt_amount" show-overflow-tooltip />
<el-table-column label="已付款金额" prop="has_payment_amount" show-overflow-tooltip width="150" />
<el-table-column label="已收票金额" prop="has_receipt_amount" show-overflow-tooltip width="150" />
<el-table-column label="已收票未付款金额" prop="has_receipt_not_payment_amount" show-overflow-tooltip
width="140" />
<el-table-column label="已付款未收票金额" prop="has_payment_not_receipt_amount" show-overflow-tooltip