This commit is contained in:
zmj 2024-02-28 18:13:23 +08:00
parent 97a3bd2a8a
commit e8d26abd09
23 changed files with 2656 additions and 1876 deletions

View File

@ -1,4 +1,4 @@
NODE_ENV = 'development' NODE_ENV = 'development'
VITE_APP_BASE_URL = 'https://ceshi-engineering.lihaink.cn/' VITE_APP_BASE_URL = 'https://ceshi-engineering.lihaink.cn/'
# VITE_APP_BASE_URL = 'http://192.168.1.11:9090/' # VITE_APP_BASE_URL = 'http://192.168.1.12:9090/'

View File

@ -1,257 +1,352 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup <popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
ref="popupRef" <el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
:title="popupTitle" <el-row>
:async="true" <el-col :span="8">
width="550px" <el-form-item label="申请编号" prop="num">
@confirm="handleSubmit" <el-input v-model="formData.num" clearable placeholder="系统自动生成" disabled />
@close="handleClose" </el-form-item>
> </el-col>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules"> <el-col :span="8">
<el-form-item label="" prop="dataid"> <el-form-item label="盖章申请类型" prop="types">
<el-input v-model="formData.dataid" clearable placeholder="请输入" /> <el-select class="flex-1" v-model="formData.types" clearable placeholder="请选择盖章申请类型">
</el-form-item> <el-option v-for="(item, index) in dictData.apply_with_seal_type" :key="index"
<el-form-item label="申请编号" prop="num"> :label="item.name" :value="item.value" />
<el-input v-model="formData.num" clearable placeholder="请输入申请编号" /> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="盖章申请类型" prop="types"> </el-col>
<el-select class="flex-1" v-model="formData.types" clearable placeholder="请选择盖章申请类型"> <el-col :span="8">
<el-option <el-form-item label="文件类型" prop="filetype">
v-for="(item, index) in dictData.apply_with_seal_type" <el-select class="flex-1" v-model="formData.filetype" clearable placeholder="请选择文件类型">
:key="index" <el-option v-for="(item, index) in dictData.apply_with_seal_file_type" :key="index"
:label="item.name" :label="item.name" :value="item.value" />
:value="item.value" </el-select>
/> </el-form-item>
</el-select> </el-col>
</el-form-item> </el-row>
<el-form-item label="文件类型" prop="filetype"> <el-row>
<el-select class="flex-1" v-model="formData.filetype" clearable placeholder="请选择文件类型"> <el-col :span="8">
<el-option <el-form-item label="骑缝盖章" prop="ridingseam">
v-for="(item, index) in dictData.apply_with_seal_file_type" <el-radio-group v-model="formData.ridingseam" placeholder="请选择骑缝盖章">
:key="index" <el-radio v-for="(item, index) in dictData.isqfgz" :key="index" :label="item.value">
:label="item.name" {{ item.name }}
:value="item.value" </el-radio>
/> </el-radio-group>
</el-select> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="骑缝盖章" prop="ridingseam"> <el-col :span="8">
<el-radio-group v-model="formData.ridingseam" placeholder="请选择骑缝盖章"> <el-form-item label="印章名称" prop="name">
<el-radio <el-input v-model="formData.name" clearable placeholder="请输入印章名称" />
v-for="(item, index) in dictData.isqfgz" </el-form-item>
:key="index" </el-col>
:label="item.value" <el-col :span="8">
> <el-form-item label="盖章次数" prop="frequency">
{{ item.name }} <el-input v-model="formData.frequency" clearable placeholder="请输入盖章次数" />
</el-radio> </el-form-item>
</el-radio-group> </el-col>
</el-form-item> </el-row>
<el-form-item label="印章名称" prop="name"> <el-row>
<el-input v-model="formData.name" clearable placeholder="请输入印章名称" /> <el-col :span="8">
</el-form-item> <el-form-item label="限制次数" prop="limit">
<el-form-item label="盖章次数" prop="frequency"> <el-input v-model="formData.limit" clearable placeholder="请输入限制次数" type="number" />
<el-input v-model="formData.frequency" clearable placeholder="请输入盖章次数" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="限制次数" prop="limit"> <el-col :span="8">
<el-input v-model="formData.limit" clearable placeholder="请输入限制次数" /> <el-form-item label="组织" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
</el-form-item> <el-select class="flex-1" v-model="formData.org_id" clearable placeholder="请选择组织"
<el-form-item label="用印部门" prop="depar"> @change="deptrmt">
<el-input v-model="formData.depar" clearable placeholder="请输入用印部门" /> <el-option v-for="(item, index) in list1" :key="index" :label="item.name"
</el-form-item> :value="item.id" />
<el-form-item label="盖章人" prop="stampman"> </el-select>
<el-input v-model="formData.stampman" clearable placeholder="请输入盖章人" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="关联项目" prop="project"> <el-col :span="8">
<el-input v-model="formData.project" clearable placeholder="请输入关联项目" /> <el-form-item label="用印部门" prop="depar"
</el-form-item> :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]" label-width="100px">
<el-form-item label="项目负责人" prop="principal"> <el-select class="flex-1" v-model="formData.depar" clearable placeholder="用印部门">
<el-input v-model="formData.principal" clearable placeholder="请输入项目负责人" /> <el-option v-for="(item, index) in list2" :key="index" :label="item.name"
</el-form-item> :value="item.id" />
<el-form-item label="盖章内容" prop="content"> </el-select>
<el-input v-model="formData.content" clearable placeholder="请输入盖章内容" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="印章是否外借" prop="loan"> </el-row>
<el-input v-model="formData.loan" clearable placeholder="请输入印章是否外借" /> <el-row>
</el-form-item> <el-col :span="8">
<el-form-item label="印章借用日期" prop="borrow"> <el-form-item label="关联项目" prop="project_name">
<el-date-picker <el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
class="flex-1 !flex" @click="showDialog = true" />
v-model="formData.borrow" </el-form-item>
clearable </el-col>
type="datetime" <el-col :span="8">
value-format="YYYY-MM-DD HH:mm:ss" <el-form-item label="项目负责人" prop="principal">
placeholder="选择印章借用日期"> <el-input v-model="formData.principal" clearable placeholder="请输入项目负责人" />
</el-date-picker> </el-form-item>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="盖章内容" prop="content">
<el-input v-model="formData.content" clearable placeholder="请输入盖章内容" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="结束借用日期" prop="returndate"> <el-row>
<el-date-picker <el-col :span="8">
class="flex-1 !flex" <el-form-item label="印章是否外借" prop="loan">
v-model="formData.returndate" <el-radio-group v-model="formData.loan" placeholder="请选择骑缝盖章">
clearable <el-radio :label="1">
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" </el-radio>
placeholder="选择结束借用日期"> <el-radio :label="0">
</el-date-picker>
</el-form-item> </el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="印章借用日期" prop="borrow">
<el-date-picker class="flex-1 !flex" v-model="formData.borrow" clearable type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择印章借用日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="结束借用日期" prop="returndate">
<el-date-picker class="flex-1 !flex" v-model="formData.returndate" clearable type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择结束借用日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="申请人" prop="applicant">
<el-input v-model="formData.applicant" clearable placeholder="请输入申请人" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="申请日期" prop="date">
<el-date-picker class="flex-1 !flex" v-model="formData.date" clearable type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择申请日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-form-item label="申请人" prop="applicant"> <el-col :span="8">
<el-input v-model="formData.applicant" clearable placeholder="请输入申请人" /> <el-form-item label="盖章人" prop="stampman">
</el-form-item> <el-input v-model="formData.stampman" clearable placeholder="请输入盖章人"
<el-form-item label="申请日期" prop="date"> @click="userclick('stampman')" />
<el-date-picker </el-form-item>
class="flex-1 !flex" </el-col>
v-model="formData.date" </el-row>
clearable <el-row>
type="datetime" <el-col :span="8">
value-format="YYYY-MM-DD HH:mm:ss" <el-form-item label="实际借章日期" prop="sjborrow">
placeholder="选择申请日期"> <el-date-picker class="flex-1 !flex" v-model="formData.sjborrow" clearable type="datetime"
</el-date-picker> value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择实际借章日期">
</el-form-item> </el-date-picker>
</el-form-item>
<el-form-item label="实际借章日期" prop="sjborrow"> </el-col>
<el-date-picker <el-col :span="8">
class="flex-1 !flex" <el-form-item label="实际借章人" prop="sjborrower">
v-model="formData.sjborrow" <el-input v-model="formData.sjborrower" clearable placeholder="请输入实际借章人" />
clearable </el-form-item>
type="datetime" </el-col>
value-format="YYYY-MM-DD HH:mm:ss" <el-col :span="8">
placeholder="选择实际借章日期"> <el-form-item label="实际归还日期" prop="sjreturn">
</el-date-picker> <el-date-picker class="flex-1 !flex" v-model="formData.sjreturn" clearable type="datetime"
</el-form-item> value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择实际归还日期">
</el-date-picker>
<el-form-item label="实际借章人" prop="sjborrower"> </el-form-item>
<el-input v-model="formData.sjborrower" clearable placeholder="请输入实际借章人" /> </el-col>
</el-form-item> </el-row>
<el-form-item label="实际归还日期" prop="sjreturn"> <el-row>
<el-date-picker <el-col :span="8">
class="flex-1 !flex" <el-form-item label="实际归还人" prop="returnee">
v-model="formData.sjreturn" <el-input v-model="formData.returnee" clearable placeholder="请输入实际归还人" />
clearable </el-form-item>
type="datetime" </el-col>
value-format="YYYY-MM-DD HH:mm:ss" <el-col :span="8">
placeholder="选择实际归还日期"> <el-form-item label="附件" prop="annex">
</el-date-picker> <annexUpload :annex="formData.annex" @handleAvatarSuccess="handleAvatarSuccess_four"
</el-form-item> @delFile="delFileFn" />
</el-form-item>
<el-form-item label="实际归还人" prop="returnee"> </el-col>
<el-input v-model="formData.returnee" clearable placeholder="请输入实际归还人" /> </el-row>
</el-form-item> <el-dialog v-model="showDialog" title="选择项目" width="70%">
<el-form-item label="附件" prop="annex"> <cost_project @customEvent="customEvent"></cost_project>
<material-picker v-model="formData.annex" /> </el-dialog>
</el-form-item> <div v-if="showDialog3">
<personnelselector ref="personnel" @confirm="submituser" type="1">
</el-form> </personnelselector>
</popup> </div>
</div> </el-form>
</popup>
</div>
</template> </template>
<script lang="ts" setup name="applyWithSealEdit"> <script lang="ts" setup name="applyWithSealEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiApplyWithSealAdd, apiApplyWithSealEdit, apiApplyWithSealDetail } from '@/api/apply_with_seal' import { apiApplyWithSealAdd, apiApplyWithSealEdit, apiApplyWithSealDetail } from '@/api/apply_with_seal'
import { timeFormat } from '@/utils/util' import { deptAll } from '@/api/org/department'
import { getAll } from '@/api/org/organization'
import type { PropType } from 'vue' import type { PropType } from 'vue'
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
default: () => ({}) default: () => ({})
} }
}) })
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
const showDialog = ref(false)
const showDialog3 = ref(false)
const personnel = ref<any>()
const list1 = reactive([])
const list2 = reactive([])
// //
const popupTitle = computed(() => { const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑用章申请' : '新增用章申请' return mode.value == 'edit' ? '编辑用章申请' : '新增用章申请'
}) })
// //
const formData = reactive({ const formData = reactive({
id: '', id: '',
dataid: '', dataid: '',
num: '', num: '',
types: '', types: '',
filetype: '', filetype: '',
ridingseam: '', ridingseam: '',
name: '', name: '',
frequency: '', frequency: '',
limit: '', limit: '',
depar: '', org_id: "",
stampman: '', depar: '',
project: '', stampman: '',
principal: '', project: '',
content: '', project_name: '',
loan: '', principal: '',
borrow: '', content: '',
returndate: '', loan: '',
applicant: '', borrow: '',
date: '', returndate: '',
sjborrow: '', applicant: '',
sjborrower: '', date: '',
sjreturn: '', sjborrow: '',
returnee: '', sjborrower: '',
annex: '', sjreturn: '',
returnee: '',
annex: [],
}) })
const customEvent = (e: any) => {
formData.project = e.id
formData.project_name = e.project_name
formData.principal = e.principal
showDialog.value = false
}
const tableKey = ref('')
//
const userclick = async (key) => {
tableKey.value = key
showDialog3.value = true
await nextTick()
personnel.value.open()
}
//
const submituser = (e: any) => {
formData[tableKey.value] = e.name
// formData.project_change_visa_content[tableIndex.value][tableKey.value + '_id'] = e.id
showDialog3.value = false
}
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
}) })
const handleAvatarSuccess_four = (response: any) => {
Array.isArray(formData.annex) ? '' : 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>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
}
} }
}
} }
//
const getlist = () => {
getAll().then((res) => {
Object.assign(list1, res)
})
}
//
const deptrmt = (e: any) => {
formData.depar = ''
getlist1(e)
}
//
const getlist1 = (id: any) => {
deptAll({ 'org_id': id }).then((res) => {
list2.splice(0, list2.length, ...res)
})
}
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
const data = await apiApplyWithSealDetail({ const data = await apiApplyWithSealDetail({
id: row.id id: row.id
}) })
setFormData(data) setFormData(data)
} }
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData, } const data = { ...formData, }
mode.value == 'edit' mode.value == 'edit'
? await apiApplyWithSealEdit(data) ? await apiApplyWithSealEdit(data)
: await apiApplyWithSealAdd(data) : await apiApplyWithSealAdd(data)
popupRef.value?.close() popupRef.value?.close()
emit('success') emit('success')
} }
// //
const open = (type = 'add') => { const open = (type = 'add') => {
mode.value = type mode.value = type
popupRef.value?.open() popupRef.value?.open()
getlist()
} }
// //
const handleClose = () => { const handleClose = () => {
emit('close') emit('close')
} }
defineExpose({ defineExpose({
open, open,
setFormData, setFormData,
getDetail getDetail
}) })
</script> </script>

View File

@ -1,112 +1,90 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form <el-form class="mb-[-16px]" :model="queryParams" inline>
class="mb-[-16px]" <el-form-item label="申请编号" prop="num">
:model="queryParams" <el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入申请编号" />
inline </el-form-item>
>
<el-form-item label="申请编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入申请编号" />
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button> <el-button @click="resetParams">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.apply_with_seal/add']" type="primary" @click="handleAdd"> <el-button v-perms="['project_process_management.apply_with_seal/add']" type="primary" @click="handleAdd">
<template #icon> <template #icon>
<icon name="el-icon-Plus" /> <icon name="el-icon-Plus" />
</template> </template>
新增 新增
</el-button> </el-button>
<el-button <el-button v-perms="['project_process_management.apply_with_seal/delete']" :disabled="!selectData.length"
v-perms="['project_process_management.apply_with_seal/delete']" @click="handleDelete(selectData)">
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="" prop="dataid" show-overflow-tooltip />
<el-table-column label="申请编号" prop="num" show-overflow-tooltip />
<el-table-column label="盖章申请类型" prop="types">
<template #default="{ row }">
<dict-value :options="dictData.apply_with_seal_type" :value="row.types" />
</template>
</el-table-column>
<el-table-column label="文件类型" prop="filetype">
<template #default="{ row }">
<dict-value :options="dictData.apply_with_seal_file_type" :value="row.filetype" />
</template>
</el-table-column>
<el-table-column label="骑缝盖章" prop="ridingseam">
<template #default="{ row }">
<dict-value :options="dictData.isqfgz" :value="row.ridingseam" />
</template>
</el-table-column>
<el-table-column label="印章名称" prop="name" show-overflow-tooltip />
<el-table-column label="盖章次数" prop="frequency" show-overflow-tooltip />
<el-table-column label="限制次数" prop="limit" show-overflow-tooltip />
<el-table-column label="用印部门" prop="depar" show-overflow-tooltip />
<el-table-column label="盖章人" prop="stampman" show-overflow-tooltip />
<el-table-column label="关联项目" prop="project" show-overflow-tooltip />
<el-table-column label="项目负责人" prop="principal" show-overflow-tooltip />
<el-table-column label="盖章内容" prop="content" show-overflow-tooltip />
<el-table-column label="印章是否外借" prop="loan" show-overflow-tooltip />
<el-table-column label="印章借用日期" prop="borrow" show-overflow-tooltip />
<el-table-column label="结束借用日期" prop="returndate" show-overflow-tooltip />
<el-table-column label="申请人" prop="applicant" show-overflow-tooltip />
<el-table-column label="申请日期" prop="date" show-overflow-tooltip />
<el-table-column label="实际借章日期" prop="sjborrow" show-overflow-tooltip />
<el-table-column label="实际借章人" prop="sjborrower" show-overflow-tooltip />
<el-table-column label="实际归还日期" prop="sjreturn" show-overflow-tooltip />
<el-table-column label="实际归还人" prop="returnee" show-overflow-tooltip />
<el-table-column label="附件" prop="annex">
<template #default="{ row }">
<el-image style="width:50px;height:50px;" :src="row.annex" />
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['project_process_management.apply_with_seal/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['project_process_management.apply_with_seal/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除 删除
</el-button> </el-button>
</template> <div class="mt-4">
</el-table-column> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
</el-table> <el-table-column type="selection" width="55" />
</div> <el-table-column label="申请编号" prop="num" show-overflow-tooltip />
<div class="flex mt-4 justify-end"> <el-table-column label="盖章申请类型" prop="types">
<pagination v-model="pager" @change="getLists" /> <template #default="{ row }">
</div> <dict-value :options="dictData.apply_with_seal_type" :value="row.types" />
</el-card> </template>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> </el-table-column>
</div> <el-table-column label="文件类型" prop="filetype">
<template #default="{ row }">
<dict-value :options="dictData.apply_with_seal_file_type" :value="row.filetype" />
</template>
</el-table-column>
<el-table-column label="骑缝盖章" prop="ridingseam">
<template #default="{ row }">
<dict-value :options="dictData.isqfgz" :value="row.ridingseam" />
</template>
</el-table-column>
<el-table-column label="印章名称" prop="name" show-overflow-tooltip />
<el-table-column label="盖章次数" prop="frequency" show-overflow-tooltip />
<el-table-column label="限制次数" prop="limit" show-overflow-tooltip />
<el-table-column label="用印部门" prop="depar" show-overflow-tooltip />
<el-table-column label="盖章人" prop="stampman" show-overflow-tooltip />
<el-table-column label="关联项目" prop="project" show-overflow-tooltip />
<el-table-column label="项目负责人" prop="principal" show-overflow-tooltip />
<el-table-column label="盖章内容" prop="content" show-overflow-tooltip />
<el-table-column label="印章是否外借" prop="loan" show-overflow-tooltip />
<el-table-column label="印章借用日期" prop="borrow" show-overflow-tooltip />
<el-table-column label="结束借用日期" prop="returndate" show-overflow-tooltip />
<el-table-column label="申请人" prop="applicant" show-overflow-tooltip />
<el-table-column label="申请日期" prop="date" show-overflow-tooltip />
<el-table-column label="实际借章日期" prop="sjborrow" show-overflow-tooltip />
<el-table-column label="实际借章人" prop="sjborrower" show-overflow-tooltip />
<el-table-column label="实际归还日期" prop="sjreturn" show-overflow-tooltip />
<el-table-column label="实际归还人" prop="returnee" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project_process_management.apply_with_seal/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project_process_management.apply_with_seal/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template> </template>
<script lang="ts" setup name="applyWithSealLists"> <script lang="ts" setup name="applyWithSealLists">
import { usePaging } from '@/hooks/usePaging' import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from '@/hooks/useDictOptions'
import { apiApplyWithSealLists, apiApplyWithSealDelete } from '@/api/apply_with_seal' import { apiApplyWithSealLists, apiApplyWithSealDelete, apiApplyWithSealDetail } from '@/api/apply_with_seal'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import EditPopup from './edit.vue' import EditPopup from './edit.vue'
@ -118,7 +96,7 @@ const showEdit = ref(false)
// //
const queryParams = reactive({ const queryParams = reactive({
num: '', num: '',
}) })
// //
@ -126,7 +104,7 @@ const selectData = ref<any[]>([])
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id)
} }
// //
@ -134,30 +112,31 @@ const { dictData } = useDictData('apply_with_seal_type,apply_with_seal_file_type
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiApplyWithSealLists, fetchFun: apiApplyWithSealLists,
params: queryParams params: queryParams
}) })
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('add') editRef.value?.open('add')
} }
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
showEdit.value = true let res = await apiApplyWithSealDetail({ id: data.id })
await nextTick() showEdit.value = true
editRef.value?.open('edit') await nextTick()
editRef.value?.setFormData(data) editRef.value?.open('edit')
editRef.value?.setFormData(res)
} }
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm('确定要删除?')
await apiApplyWithSealDelete({ id }) await apiApplyWithSealDelete({ id })
getLists() getLists()
} }
getLists() getLists()

View File

@ -83,8 +83,6 @@ import customDialog from '@/components/build_division/index.vue'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { buildprocesssettingsAdd, buildprocesssettingsEdit, buildprocesssettingsDetail } from '@/api/build/build_process_settings' import { buildprocesssettingsAdd, buildprocesssettingsEdit, buildprocesssettingsDetail } from '@/api/build/build_process_settings'
import { timeFormat } from '@/utils/util'
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
import type { PropType } from 'vue' import type { PropType } from 'vue'
// //
import annexUpload from "@/components/annexUpload/index.vue" import annexUpload from "@/components/annexUpload/index.vue"

View File

@ -1,121 +1,205 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup <popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
ref="popupRef" <el-form ref="formRef" :model="formData" label-width="140px" :rules="formRules">
:title="popupTitle" <el-row>
:async="true" <el-col :span="8">
width="550px" <el-form-item label="单据编号" prop="num">
@confirm="handleSubmit" <el-input v-model="formData.num" clearable placeholder="系统自动生成" disabled />
@close="handleClose" </el-form-item>
> </el-col>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules"> <el-col :span="8">
<el-form-item label="" prop="dataid"> <el-form-item label="项目名称" prop="project">
<el-input v-model="formData.dataid" clearable placeholder="请输入" /> <el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
</el-form-item> @click="showDialog = true" />
<el-form-item label="单据编号" prop="num"> </el-form-item>
<el-input v-model="formData.num" clearable placeholder="请输入单据编号" /> </el-col>
</el-form-item> <el-col :span="8">
<el-form-item label="项目名称" prop="project"> <el-form-item label="项目编号" prop="project_num">
<el-input v-model="formData.project" clearable placeholder="请输入项目名称" /> <el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" />
</el-form-item> </el-form-item>
<el-form-item label="项目编号" prop="project_num"> </el-col>
<el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" /> </el-row>
</el-form-item> <el-row>
<el-form-item label="部门负责人" prop="bm_master"> <el-col :span="8">
<el-input v-model="formData.bm_master" clearable placeholder="请输入部门负责人" />
</el-form-item>
<el-form-item label="委托单位" prop="wt_unit">
<el-input v-model="formData.wt_unit" clearable placeholder="请输入委托单位" />
</el-form-item>
<el-form-item label="项目负责人" prop="xm_master">
<el-input v-model="formData.xm_master" clearable placeholder="请输入项目负责人" />
</el-form-item>
<el-form-item label="实际开始日期" prop="start_date">
<el-input v-model="formData.start_date" clearable placeholder="请输入实际开始日期" />
</el-form-item>
<el-form-item label="实际结束日期" prop="end_date">
<el-input v-model="formData.end_date" clearable placeholder="请输入实际结束日期" />
</el-form-item>
<el-form-item label="工期(天)" prop="duration">
<el-input v-model="formData.duration" clearable placeholder="请输入工期(天)" />
</el-form-item>
<el-form-item label="工时" prop="working_hours">
<el-input v-model="formData.working_hours" clearable placeholder="请输入工时" />
</el-form-item>
<el-form-item label="累计已完成进度(%" prop="done_progress">
<el-input v-model="formData.done_progress" clearable placeholder="请输入累计已完成进度(%" />
</el-form-item>
<el-form-item label="本阶段完成进度(%)" prop="bjd_progress">
<el-input v-model="formData.bjd_progress" clearable placeholder="请输入本阶段完成进度(%)" />
</el-form-item>
<el-form-item label="登记人" prop="djr">
<el-input v-model="formData.djr" clearable placeholder="请输入登记人" />
</el-form-item>
<el-form-item label="登记时间" prop="apptime">
<el-input v-model="formData.apptime" clearable placeholder="请输入登记时间" />
</el-form-item>
<el-form-item label="形象进度描述" prop="jdms">
<el-input v-model="formData.jdms" clearable placeholder="请输入形象进度描述" />
</el-form-item>
<el-form-item label="现场照片、视频、资料" prop="datas">
<material-picker v-model="formData.datas" />
</el-form-item>
<el-form-item label="文本输入框" prop="fd_23">
<el-input v-model="formData.fd_23" clearable placeholder="请输入文本输入框" />
</el-form-item>
</el-form> <el-form-item label="部门负责人" prop="bm_master">
</popup> <el-input v-model="formData.bm_master" clearable placeholder="请选择部门负责人" @click="userclick()" />
</div> </el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="委托单位" prop="wt_unit">
<el-input v-model="formData.wt_unit" clearable placeholder="请输入委托单位" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目负责人" prop="xm_master">
<el-input v-model="formData.xm_master" clearable placeholder="请输入项目负责人" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="实际开始日期" prop="start_date">
<el-date-picker class="flex-1 !flex" v-model="formData.start_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="实际结束日期" prop="end_date">
<el-date-picker class="flex-1 !flex" v-model="formData.end_date" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工期(天)" prop="duration">
<el-input v-model="formData.duration" clearable placeholder="请输入工期(天)" type="number" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="工时" prop="working_hours">
<el-input v-model="formData.working_hours" clearable placeholder="请输入工时" type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="累计已完成进度" prop="done_progress">
<el-input v-model="formData.done_progress" clearable placeholder="请输入累计已完成进度(%"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="本阶段完成进度(%)" prop="bjd_progress">
<el-input v-model="formData.bjd_progress" clearable placeholder="请输入本阶段完成进度(%)" type="number" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="登记人" prop="djr">
<el-input v-model="formData.djr" clearable placeholder="请输入登记人" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="登记时间" prop="apptime">
<el-date-picker class="flex-1 !flex" v-model="formData.apptime" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="形象进度描述" prop="jdms">
<el-input v-model="formData.jdms" clearable placeholder="请输入形象进度描述" />
</el-form-item>
</el-col>
</el-row>
<el-col :span="8">
<el-form-item label="附件" prop="datas">
<annexUpload :annex="formData.annex" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
</el-form-item>
</el-col>
<el-form-item label="文本输入框" prop="fd_23">
<el-input v-model="formData.fd_23" clearable placeholder="请输入文本输入框" />
</el-form-item>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<cost_project @customEvent="customEvent"></cost_project>
</el-dialog>
<div v-if="showDialog3">
<personnelselector ref="personnel" @confirm="submituser" type="1">
</personnelselector>
</div>
</el-form>
</popup>
</div>
</template> </template>
<script lang="ts" setup name="jianliProjectProgressReportEdit"> <script lang="ts" setup name="jianliProjectProgressReportEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiJianliProjectProgressReportAdd, apiJianliProjectProgressReportEdit, apiJianliProjectProgressReportDetail } from '@/api/jianli_project_progress_report' import { apiJianliProjectProgressReportAdd, apiJianliProjectProgressReportEdit, } from '@/api/jianli_project_progress_report'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
default: () => ({}) default: () => ({})
} }
}) })
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
const showDialog = ref(false)
const showDialog3 = ref(false)
const personnel = ref<any>()
const handleAvatarSuccess_four = (response: any) => {
Array.isArray(formData.annex) ? '' : 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(() => { const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目进度汇报' : '新增项目进度汇报' return mode.value == 'edit' ? '编辑项目进度汇报' : '新增项目进度汇报'
}) })
// //
const formData = reactive({ const formData = reactive({
id: '', id: '',
dataid: '', dataid: '',
num: '', num: '',
project: '', project_id: '',
project_num: '', project_name: '',
bm_master: '', project_num: '',
wt_unit: '', bm_master: '',
xm_master: '', wt_unit: '',
start_date: '', xm_master: '',
end_date: '', start_date: '',
duration: '', end_date: '',
working_hours: '', duration: '',
done_progress: '', working_hours: '',
bjd_progress: '', done_progress: '',
djr: '', bjd_progress: '',
apptime: '', djr: '',
jdms: '', apptime: '',
datas: '', jdms: '',
fd_23: '', datas: '',
fd_23: '',
annex: [],
projectInfo: {}
}) })
const customEvent = (e: any) => {
formData.project_id = e.id
formData.project_name = e.project_name
formData.project_num = e.project_num
showDialog.value = false
}
//
const userclick = async () => {
showDialog3.value = true
await nextTick()
personnel.value.open()
}
//
const submituser = (e: any) => {
formData['bm_master'] = e.name
// formData.project_change_visa_content[tableIndex.value][tableKey.value + '_id'] = e.id
showDialog3.value = false
}
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
@ -125,51 +209,54 @@ const formRules = reactive<any>({
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
}
} }
} formData.project_id = formData.projectInfo.id
formData.project_name = formData.projectInfo.project_name
formData.project_num = formData.projectInfo.project_num
} }
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
const data = await apiJianliProjectProgressReportDetail({ const data = await apiJianliProjectProgressReportDetail({
id: row.id id: row.id
}) })
setFormData(data) setFormData(data)
} }
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData, } const data = { ...formData, }
mode.value == 'edit' mode.value == 'edit'
? await apiJianliProjectProgressReportEdit(data) ? await apiJianliProjectProgressReportEdit(data)
: await apiJianliProjectProgressReportAdd(data) : await apiJianliProjectProgressReportAdd(data)
popupRef.value?.close() popupRef.value?.close()
emit('success') emit('success')
} }
// //
const open = (type = 'add') => { const open = (type = 'add') => {
mode.value = type mode.value = type
popupRef.value?.open() popupRef.value?.open()
} }
// //
const handleClose = () => { const handleClose = () => {
emit('close') emit('close')
} }
defineExpose({ defineExpose({
open, open,
setFormData, setFormData,
getDetail getDetail
}) })
</script> </script>

View File

@ -1,95 +1,79 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form <el-form class="mb-[-16px]" :model="queryParams" inline>
class="mb-[-16px]" <el-form-item label="单据编号" prop="num">
:model="queryParams" <el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
inline </el-form-item>
> <el-form-item label="项目名称" prop="project">
<el-form-item label="单据编号" prop="num"> <el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" /> </el-form-item>
</el-form-item> <el-form-item label="项目编号" prop="project_num">
<el-form-item label="项目名称" prop="project"> <el-input class="w-[280px]" v-model="queryParams.project_num" clearable placeholder="请输入项目编号" />
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" /> </el-form-item>
</el-form-item>
<el-form-item label="项目编号" prop="project_num">
<el-input class="w-[280px]" v-model="queryParams.project_num" clearable placeholder="请输入项目编号" />
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button> <el-button @click="resetParams">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.jianli_project_progress_report/add']" type="primary" @click="handleAdd"> <el-button v-perms="['project_process_management.jianli_project_progress_report/add']" type="primary"
<template #icon> @click="handleAdd">
<icon name="el-icon-Plus" /> <template #icon>
</template> <icon name="el-icon-Plus" />
新增 </template>
</el-button> 新增
<el-button </el-button>
v-perms="['project_process_management.jianli_project_progress_report/delete']" <el-button v-perms="['project_process_management.jianli_project_progress_report/delete']"
:disabled="!selectData.length" :disabled="!selectData.length" @click="handleDelete(selectData)">
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="" prop="dataid" show-overflow-tooltip />
<el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project" show-overflow-tooltip />
<el-table-column label="项目编号" prop="project_num" show-overflow-tooltip />
<el-table-column label="部门负责人" prop="bm_master" show-overflow-tooltip />
<el-table-column label="委托单位" prop="wt_unit" show-overflow-tooltip />
<el-table-column label="项目负责人" prop="xm_master" show-overflow-tooltip />
<el-table-column label="实际开始日期" prop="start_date" show-overflow-tooltip />
<el-table-column label="实际结束日期" prop="end_date" show-overflow-tooltip />
<el-table-column label="工期(天)" prop="duration" show-overflow-tooltip />
<el-table-column label="工时" prop="working_hours" show-overflow-tooltip />
<el-table-column label="累计已完成进度(%" prop="done_progress" show-overflow-tooltip />
<el-table-column label="本阶段完成进度(%)" prop="bjd_progress" show-overflow-tooltip />
<el-table-column label="登记人" prop="djr" show-overflow-tooltip />
<el-table-column label="登记时间" prop="apptime" show-overflow-tooltip />
<el-table-column label="形象进度描述" prop="jdms" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['project_process_management.jianli_project_progress_report/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['project_process_management.jianli_project_progress_report/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除 删除
</el-button> </el-button>
</template> <div class="mt-4">
</el-table-column> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
</el-table> <el-table-column type="selection" width="55" />
</div> <el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<div class="flex mt-4 justify-end"> <el-table-column label="项目名称" prop="projectInfo.project_name" show-overflow-tooltip />
<pagination v-model="pager" @change="getLists" /> <el-table-column label="项目编号" prop="projectInfo.project_num" show-overflow-tooltip />
</div> <el-table-column label="部门负责人" prop="bm_master" show-overflow-tooltip />
</el-card> <el-table-column label="委托单位" prop="wt_unit" show-overflow-tooltip />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> <el-table-column label="项目负责人" prop="xm_master" show-overflow-tooltip />
</div> <el-table-column label="实际开始日期" prop="start_date" show-overflow-tooltip />
<el-table-column label="实际结束日期" prop="end_date" show-overflow-tooltip />
<el-table-column label="工期(天)" prop="duration" show-overflow-tooltip />
<el-table-column label="工时" prop="working_hours" show-overflow-tooltip />
<el-table-column label="累计已完成进度(%" prop="done_progress" show-overflow-tooltip />
<el-table-column label="本阶段完成进度(%)" prop="bjd_progress" show-overflow-tooltip />
<el-table-column label="登记人" prop="djr" show-overflow-tooltip />
<el-table-column label="登记时间" prop="apptime" show-overflow-tooltip />
<el-table-column label="形象进度描述" prop="jdms" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project_process_management.jianli_project_progress_report/edit']"
type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project_process_management.jianli_project_progress_report/delete']"
type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template> </template>
<script lang="ts" setup name="jianliProjectProgressReportLists"> <script lang="ts" setup name="jianliProjectProgressReportLists">
import { usePaging } from '@/hooks/usePaging' import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from '@/hooks/useDictOptions'
import { apiJianliProjectProgressReportLists, apiJianliProjectProgressReportDelete } from '@/api/jianli_project_progress_report' import { apiJianliProjectProgressReportLists, apiJianliProjectProgressReportDelete, apiJianliProjectProgressReportDetail } from '@/api/jianli_project_progress_report'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import EditPopup from './edit.vue' import EditPopup from './edit.vue'
@ -101,10 +85,10 @@ const showEdit = ref(false)
// //
const queryParams = reactive({ const queryParams = reactive({
num: '', num: '',
project: '', project: '',
project_num: '', project_num: '',
datas: '', datas: '',
}) })
// //
@ -112,7 +96,7 @@ const selectData = ref<any[]>([])
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id)
} }
// //
@ -120,30 +104,31 @@ const { dictData } = useDictData('')
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiJianliProjectProgressReportLists, fetchFun: apiJianliProjectProgressReportLists,
params: queryParams params: queryParams
}) })
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('add') editRef.value?.open('add')
} }
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
showEdit.value = true let res = await apiJianliProjectProgressReportDetail({ id: data.id })
await nextTick() showEdit.value = true
editRef.value?.open('edit') await nextTick()
editRef.value?.setFormData(data) editRef.value?.open('edit')
editRef.value?.setFormData(res)
} }
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm('确定要删除?')
await apiJianliProjectProgressReportDelete({ id }) await apiJianliProjectProgressReportDelete({ id })
getLists() getLists()
} }
getLists() getLists()

View File

@ -1,127 +1,267 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup <popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
ref="popupRef" <el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
: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="dataid">
<el-input v-model="formData.dataid" clearable placeholder="请输入标识" />
</el-form-item>
<el-form-item label="单据编号" prop="num">
<el-input v-model="formData.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input v-model="formData.project" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目编号" prop="project_num">
<el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" />
</el-form-item>
<el-form-item label="登记人" prop="djr">
<el-input v-model="formData.djr" clearable placeholder="请输入登记人" />
</el-form-item>
<el-form-item label="登记日期" prop="djrq">
<el-input v-model="formData.djrq" clearable placeholder="请输入登记日期" />
</el-form-item>
</el-form> <el-form-item label="单据编号" prop="num">
</popup> <el-input v-model="formData.num" clearable placeholder="系统自动生成" disabled />
</div> </el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@click="showDialog = true" />
</el-form-item>
<el-form-item label="项目编号" prop="project_num">
<el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" />
</el-form-item>
<el-form-item label="登记人" prop="djr">
<el-input v-model="formData.djr" clearable placeholder="请输入登记人" />
</el-form-item>
<el-form-item label="登记日期" prop="djrq">
<el-date-picker class="flex-1 !flex" v-model="formData.djrq" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<cost_project @customEvent="customEvent"></cost_project>
</el-dialog>
<div v-if="showDialog3">
<personnelselector ref="personnel" @confirm="submituser" type="1">
</personnelselector>
</div>
<div style="margin-bottom: 30px;">任务明细</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.project_change_visa_content">
<el-table-column label="序号" v-if="mode == 'add'" width="150px">
<template #default="{ row }">
<el-button @click="handleAdd(row)">+</el-button>
<el-button @click="handleDelete(row)">-</el-button>
</template>
</el-table-column>
<el-table-column label="所在目录" prop="level" width="200px">
<template #default="scope">
<el-input v-model="scope.row.directory" :disabled="mode != 'add'" />
</template>
</el-table-column>
<el-table-column label="单位名称" prop="unit_name" width="200px">
<template #default="{ row }">
<el-input v-model="row.unit_name" :disabled="mode != 'add'" />
</template>
</el-table-column>
<el-table-column label="时间" prop="time" width="200px">
<template #default="{ row }">
<el-date-picker class="flex-1 !flex" v-model="row.time" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期" :disabled="mode != 'add'">
</el-date-picker>
</template>
</el-table-column>
<el-table-column label="所属专业" prop="major" width="200px">
<template #default="{ row }">
<el-input v-model="row.major" :disabled="mode != 'add'" />
</template>
</el-table-column>
<el-table-column label="类别" prop="category" width="200px">
<template #default="scope">
<el-input v-model="scope.row.category" :disabled="mode != 'add'" />
</template>
</el-table-column>
<el-table-column label="审核内容" prop="review_content" width="200px">
<template #default="scope">
<el-input v-model="scope.row.review_content" :disabled="mode != 'add'" />
</template>
</el-table-column>
<el-table-column label="审核意见" prop="review_comments" width="200px">
<template #default="scope">
<el-input v-model="scope.row.review_comments" :disabled="mode != 'add'" />
</template>
</el-table-column>
<el-table-column label="审核人" prop="reviewer" width="200px">
<template #default="scope">
<el-input v-model="scope.row.reviewer" @click="userclick(scope.$index, 'reviewer')"
:disabled="mode != 'add'" placeholder="点击选择" readonly />
</template>
</el-table-column>
<el-table-column label="施工单位申报值" prop="tc_amount" width="200px">
<template #default="{ row }">
<el-input v-model="row.declared_value" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="咨询单位测算值" prop="calculated_value" width="200px">
<template #default="{ row }">
<el-input v-model="row.calculated_value" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" width="200px">
<template #default="{ row }">
<el-input v-model="row.remark" :disabled="mode != 'add'" />
</template>
</el-table-column>
</el-table>
</div>
</el-form>
</popup>
</div>
</template> </template>
<script lang="ts" setup name="projectChangeVisaEdit"> <script lang="ts" setup name="projectChangeVisaEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiProjectChangeVisaAdd, apiProjectChangeVisaEdit, apiProjectChangeVisaDetail } from '@/api/project_change_visa' import { apiProjectChangeVisaAdd, apiProjectChangeVisaEdit, } from '@/api/project_change_visa'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
default: () => ({}) default: () => ({})
} }
}) })
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
const showDialog = ref(false)
const showDialog3 = ref(false)
const personnel = ref<any>()
// //
const popupTitle = computed(() => { const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目变更签证' : '新增项目变更签证' return mode.value == 'edit' ? '编辑项目变更签证' : '新增项目变更签证'
}) })
// //
const formData = reactive({ const formData = reactive({
id: '', id: '',
dataid: '', dataid: '',
num: '', num: '',
project: '', project_id: '',
project_num: '', project_name: "",
djr: '', project_num: '',
djrq: '', projectInfo: {},
djr: '',
djrq: '',
project_change_visa_content: [
{
directory: '',
unit_name: '',
time: '',
major: '',
category: '',
review_content: '',
review_comments: '',
reviewer: '',
reviewer_id: '',
declared_value: '',
calculated_value: '',
remark: '',
}
]
}) })
const customEvent = (e: any) => {
formData.project_id = e.id
formData.project_name = e.project_name
formData.project_num = e.project_num
showDialog.value = false
}
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
}) })
const tableIndex = ref(0)
const tableKey = ref('')
//
const userclick = async (e: any, key) => {
tableIndex.value = e
tableKey.value = key
showDialog3.value = true
await nextTick()
personnel.value.open()
console.log(tableIndex.value, tableKey.value)
}
//
const submituser = (e: any) => {
formData.project_change_visa_content[tableIndex.value][tableKey.value] = e.name
formData.project_change_visa_content[tableIndex.value][tableKey.value + '_id'] = e.id
showDialog3.value = false
}
const handleAdd = () => {
formData.project_change_visa_content.push({
directory: '',
unit_name: '',
time: '',
major: '',
category: '',
review_content: '',
review_comments: '',
reviewer: '',
reviewer_id: '',
declared_value: '',
calculated_value: '',
remark: '',
})
}
const handleDelete = (row: any) => {
if (formData.project_change_visa_content.length == 1) return
const index = formData.project_change_visa_content.indexOf(row);
formData.project_change_visa_content.splice(index, 1);
}
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
}
} }
} formData.project_id = formData.projectInfo.id
formData.project_name = formData.projectInfo.project_name
formData.project_num = formData.projectInfo.project_num
} }
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
const data = await apiProjectChangeVisaDetail({ const data = await apiProjectChangeVisaDetail({
id: row.id id: row.id
}) })
setFormData(data) setFormData(data)
} }
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData, } const data = { ...formData, }
mode.value == 'edit' mode.value == 'edit'
? await apiProjectChangeVisaEdit(data) ? await apiProjectChangeVisaEdit(data)
: await apiProjectChangeVisaAdd(data) : await apiProjectChangeVisaAdd(data)
popupRef.value?.close() popupRef.value?.close()
emit('success') emit('success')
} }
// //
const open = (type = 'add') => { const open = (type = 'add') => {
mode.value = type mode.value = type
popupRef.value?.open() popupRef.value?.open()
} }
// //
const handleClose = () => { const handleClose = () => {
emit('close') emit('close')
} }
defineExpose({ defineExpose({
open, open,
setFormData, setFormData,
getDetail getDetail
}) })
</script> </script>

View File

@ -1,85 +1,88 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form <el-form class="mb-[-16px]" :model="queryParams" inline>
class="mb-[-16px]" <el-form-item label="单据编号" prop="num">
:model="queryParams" <el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
inline </el-form-item>
> <el-form-item label="项目名称" prop="project">
<el-form-item label="单据编号" prop="num"> <el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" /> </el-form-item>
</el-form-item> <el-form-item label="项目编号" prop="project_num">
<el-form-item label="项目名称" prop="project"> <el-input class="w-[280px]" v-model="queryParams.project_num" clearable placeholder="请输入项目编号" />
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" /> </el-form-item>
</el-form-item>
<el-form-item label="项目编号" prop="project_num">
<el-input class="w-[280px]" v-model="queryParams.project_num" clearable placeholder="请输入项目编号" />
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button> <el-button @click="resetParams">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_change_visa/add']" type="primary" @click="handleAdd"> <el-button v-perms="['project_process_management.project_change_visa/add']" type="primary" @click="handleAdd">
<template #icon> <template #icon>
<icon name="el-icon-Plus" /> <icon name="el-icon-Plus" />
</template> </template>
新增 新增
</el-button> </el-button>
<el-button <el-button v-perms="['project_process_management.project_change_visa/delete']" :disabled="!selectData.length"
v-perms="['project_process_management.project_change_visa/delete']" @click="handleDelete(selectData)">
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="标识" prop="dataid" show-overflow-tooltip />
<el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project" show-overflow-tooltip />
<el-table-column label="项目编号" prop="project_num" show-overflow-tooltip />
<el-table-column label="登记人" prop="djr" show-overflow-tooltip />
<el-table-column label="登记日期" prop="djrq" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['project_process_management.project_change_visa/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['project_process_management.project_change_visa/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除 删除
</el-button> </el-button>
</template> <div class="mt-4">
</el-table-column> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
</el-table> <el-table-column type="selection" width="55" />
</div> <el-table-column type="expand">
<div class="flex mt-4 justify-end"> <template #default="props">
<pagination v-model="pager" @change="getLists" /> <div m="4">
</div> <el-table :data="props.row.taskTypeInfo">
</el-card> <el-table-column label="所在目录" prop="directory" show-overflow-tooltip />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> <el-table-column label="单位名称" prop="unit_name" show-overflow-tooltip />
</div> <el-table-column label="时间" prop="time" show-overflow-tooltip />
<el-table-column label="所属专业" prop="major" show-overflow-tooltip />
<el-table-column label="类别" prop="category" show-overflow-tooltip />
<el-table-column label="审核内容" prop="review_content" show-overflow-tooltip />
<el-table-column label="审核意见" prop="review_comments" show-overflow-tooltip />
<el-table-column label="审核人" prop="reviewer" show-overflow-tooltip />
<el-table-column label="施工单位申报值" prop="declared_value" show-overflow-tooltip />
<el-table-column label="咨询单位测算值" prop="calculated_value" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table>
</div>
</template>
</el-table-column>
<el-table-column label="标识" prop="dataid" show-overflow-tooltip />
<el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="projectInfo.project_name" show-overflow-tooltip />
<el-table-column label="项目编号" prop="projectInfo.project_num" show-overflow-tooltip />
<el-table-column label="登记人" prop="djr" show-overflow-tooltip />
<el-table-column label="登记日期" prop="djrq" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project_process_management.project_change_visa/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project_process_management.project_change_visa/delete']" type="danger"
link @click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template> </template>
<script lang="ts" setup name="projectChangeVisaLists"> <script lang="ts" setup name="projectChangeVisaLists">
import { usePaging } from '@/hooks/usePaging' import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from '@/hooks/useDictOptions'
import { apiProjectChangeVisaLists, apiProjectChangeVisaDelete } from '@/api/project_change_visa' import { apiProjectChangeVisaLists, apiProjectChangeVisaDelete, apiProjectChangeVisaDetail } from '@/api/project_change_visa'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import EditPopup from './edit.vue' import EditPopup from './edit.vue'
@ -91,9 +94,9 @@ const showEdit = ref(false)
// //
const queryParams = reactive({ const queryParams = reactive({
num: '', num: '',
project: '', project: '',
project_num: '', project_num: '',
}) })
// //
@ -101,7 +104,7 @@ const selectData = ref<any[]>([])
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id)
} }
// //
@ -109,30 +112,31 @@ const { dictData } = useDictData('')
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiProjectChangeVisaLists, fetchFun: apiProjectChangeVisaLists,
params: queryParams params: queryParams
}) })
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('add') editRef.value?.open('add')
} }
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
showEdit.value = true let res = await apiProjectChangeVisaDetail({ id: data.id })
await nextTick() showEdit.value = true
editRef.value?.open('edit') await nextTick()
editRef.value?.setFormData(data) editRef.value?.open('edit')
editRef.value?.setFormData(res)
} }
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm('确定要删除?')
await apiProjectChangeVisaDelete({ id }) await apiProjectChangeVisaDelete({ id })
getLists() getLists()
} }
getLists() getLists()

View File

@ -1,57 +1,49 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup <popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
ref="popupRef" <el-form ref="formRef" :model="formData" label-width="140px" :rules="formRules">
:title="popupTitle" <el-form-item label="所在目录" prop="directory">
:async="true" <el-input v-model="formData.directory" clearable placeholder="请输入所在目录" />
width="550px" </el-form-item>
@confirm="handleSubmit" <el-form-item label="单位名称" prop="unit_name">
@close="handleClose" <el-input v-model="formData.unit_name" clearable placeholder="请输入单位名称" />
> </el-form-item>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules"> <el-form-item label="时间" prop="time">
<el-form-item label="主表标识" prop="project_change_visa_dataid"> <el-date-picker class="flex-1 !flex" v-model="formData.time" clearable type="date"
<el-input v-model="formData.project_change_visa_dataid" clearable placeholder="请输入主表标识" /> value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-form-item> </el-date-picker>
<el-form-item label="所在目录" prop="directory"> </el-form-item>
<el-input v-model="formData.directory" clearable placeholder="请输入所在目录" /> <el-form-item label="所属专业" prop="major">
</el-form-item> <el-input v-model="formData.major" clearable placeholder="请输入所属专业" />
<el-form-item label="单位名称" prop="unit_name"> </el-form-item>
<el-input v-model="formData.unit_name" clearable placeholder="请输入单位名称" /> <el-form-item label="类别" prop="category">
</el-form-item> <el-input v-model="formData.category" clearable placeholder="请输入类别" />
<el-form-item label="时间" prop="time"> </el-form-item>
<el-input v-model="formData.time" clearable placeholder="请输入时间" /> <el-form-item label="审核内容" prop="review_content">
</el-form-item> <el-input v-model="formData.review_content" clearable placeholder="请输入审核内容" />
<el-form-item label="所属专业" prop="major"> </el-form-item>
<el-input v-model="formData.major" clearable placeholder="请输入所属专业" /> <el-form-item label="审核意见" prop="review_comments">
</el-form-item> <el-input v-model="formData.review_comments" clearable placeholder="请输入审核意见" />
<el-form-item label="类别" prop="category"> </el-form-item>
<el-input v-model="formData.category" clearable placeholder="请输入类别" /> <el-form-item label="审核人" prop="reviewer">
</el-form-item> <el-input v-model="formData.reviewer" clearable placeholder="点击选择" readonly @click="userclick" />
<el-form-item label="审核内容" prop="review_content"> </el-form-item>
<el-input v-model="formData.review_content" clearable placeholder="请输入审核内容" /> <el-form-item label="施工单位申报值" prop="declared_value">
</el-form-item> <el-input v-model="formData.declared_value" clearable placeholder="请输入施工单位申报值" type="number" />
<el-form-item label="审核意见" prop="review_comments"> </el-form-item>
<el-input v-model="formData.review_comments" clearable placeholder="请输入审核意见" /> <el-form-item label="咨询单位测算值" prop="calculated_value">
</el-form-item> <el-input v-model="formData.calculated_value" clearable placeholder="请输入咨询单位测算值" type="number" />
<el-form-item label="审核人" prop="reviewer"> </el-form-item>
<el-input v-model="formData.reviewer" clearable placeholder="请输入审核人" /> <el-form-item label="备注" prop="remark">
</el-form-item> <el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" />
<el-form-item label="审核人id" prop="reviewer_id"> </el-form-item>
<el-input v-model="formData.reviewer_id" clearable placeholder="请输入审核人id" /> <div v-if="showDialog3">
</el-form-item> <personnelselector ref="personnel" @confirm="submituser" type="1">
<el-form-item label="施工单位申报值" prop="declared_value"> </personnelselector>
<el-input v-model="formData.declared_value" clearable placeholder="请输入施工单位申报值" /> </div>
</el-form-item> </el-form>
<el-form-item label="咨询单位测算值" prop="calculated_value"> </popup>
<el-input v-model="formData.calculated_value" clearable placeholder="请输入咨询单位测算值" /> </div>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
</el-form>
</popup>
</div>
</template> </template>
<script lang="ts" setup name="projectChangeVisaContentEdit"> <script lang="ts" setup name="projectChangeVisaContentEdit">
@ -61,42 +53,56 @@ import { apiProjectChangeVisaContentAdd, apiProjectChangeVisaContentEdit, apiPro
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
default: () => ({}) default: () => ({})
} }
}) })
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
const showDialog3 = ref(false)
const personnel = ref<any>()
// //
const popupTitle = computed(() => { const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目变更签证内容' : '新增项目变更签证内容' return mode.value == 'edit' ? '编辑项目变更签证内容' : '新增项目变更签证内容'
}) })
// //
const formData = reactive({ const formData = reactive({
id: '', id: '',
project_change_visa_dataid: '', project_change_visa_dataid: '',
directory: '', directory: '',
unit_name: '', unit_name: '',
time: '', time: '',
major: '', major: '',
category: '', category: '',
review_content: '', review_content: '',
review_comments: '', review_comments: '',
reviewer: '', reviewer: '',
reviewer_id: '', reviewer_id: '',
declared_value: '', declared_value: '',
calculated_value: '', calculated_value: '',
remark: '', remark: '',
}) })
const userclick = async (e: any) => {
showDialog3.value = true
await nextTick()
personnel.value.open()
}
//
const submituser = (e: any) => {
formData.reviewer = e.name
formData.reviewer_id = e.id
showDialog3.value = false
}
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
@ -105,51 +111,51 @@ const formRules = reactive<any>({
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
}
} }
}
} }
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
const data = await apiProjectChangeVisaContentDetail({ const data = await apiProjectChangeVisaContentDetail({
id: row.id id: row.id
}) })
setFormData(data) setFormData(data)
} }
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData, } const data = { ...formData, }
mode.value == 'edit' mode.value == 'edit'
? await apiProjectChangeVisaContentEdit(data) ? await apiProjectChangeVisaContentEdit(data)
: await apiProjectChangeVisaContentAdd(data) : await apiProjectChangeVisaContentAdd(data)
popupRef.value?.close() popupRef.value?.close()
emit('success') emit('success')
} }
// //
const open = (type = 'add') => { const open = (type = 'add') => {
mode.value = type mode.value = type
popupRef.value?.open() popupRef.value?.open()
} }
// //
const handleClose = () => { const handleClose = () => {
emit('close') emit('close')
} }
defineExpose({ defineExpose({
open, open,
setFormData, setFormData,
getDetail getDetail
}) })
</script> </script>

View File

@ -1,116 +1,93 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form <el-form class="mb-[-16px]" :model="queryParams" inline>
class="mb-[-16px]" <el-form-item label="所在目录" prop="directory">
:model="queryParams" <el-input class="w-[280px]" v-model="queryParams.directory" clearable placeholder="请输入所在目录" />
inline </el-form-item>
> <el-form-item label="单位名称" prop="unit_name">
<el-form-item label="主表标识" prop="project_change_visa_dataid"> <el-input class="w-[280px]" v-model="queryParams.unit_name" clearable placeholder="请输入单位名称" />
<el-input class="w-[280px]" v-model="queryParams.project_change_visa_dataid" clearable placeholder="请输入主表标识" /> </el-form-item>
</el-form-item> <el-form-item label="时间" prop="time">
<el-form-item label="所在目录" prop="directory"> <el-input class="w-[280px]" v-model="queryParams.time" clearable placeholder="请输入时间" />
<el-input class="w-[280px]" v-model="queryParams.directory" clearable placeholder="请输入所在目录" /> </el-form-item>
</el-form-item> <el-form-item label="所属专业" prop="major">
<el-form-item label="单位名称" prop="unit_name"> <el-input class="w-[280px]" v-model="queryParams.major" clearable placeholder="请输入所属专业" />
<el-input class="w-[280px]" v-model="queryParams.unit_name" clearable placeholder="请输入单位名称" /> </el-form-item>
</el-form-item> <el-form-item label="类别" prop="category">
<el-form-item label="时间" prop="time"> <el-input class="w-[280px]" v-model="queryParams.category" clearable placeholder="请输入类别" />
<el-input class="w-[280px]" v-model="queryParams.time" clearable placeholder="请输入时间" /> </el-form-item>
</el-form-item> <el-form-item label="审核内容" prop="review_content">
<el-form-item label="所属专业" prop="major"> <el-input class="w-[280px]" v-model="queryParams.review_content" clearable placeholder="请输入审核内容" />
<el-input class="w-[280px]" v-model="queryParams.major" clearable placeholder="请输入所属专业" /> </el-form-item>
</el-form-item> <el-form-item label="审核意见" prop="review_comments">
<el-form-item label="类别" prop="category"> <el-input class="w-[280px]" v-model="queryParams.review_comments" clearable placeholder="请输入审核意见" />
<el-input class="w-[280px]" v-model="queryParams.category" clearable placeholder="请输入类别" /> </el-form-item>
</el-form-item> <el-form-item label="审核人" prop="reviewer">
<el-form-item label="审核内容" prop="review_content"> <el-input class="w-[280px]" v-model="queryParams.reviewer" clearable placeholder="请输入审核人" />
<el-input class="w-[280px]" v-model="queryParams.review_content" clearable placeholder="请输入审核内容" /> </el-form-item>
</el-form-item> <el-form-item label="施工单位申报值" prop="declared_value">
<el-form-item label="审核意见" prop="review_comments"> <el-input class="w-[280px]" v-model="queryParams.declared_value" clearable placeholder="请输入施工单位申报值" />
<el-input class="w-[280px]" v-model="queryParams.review_comments" clearable placeholder="请输入审核意见" /> </el-form-item>
</el-form-item> <el-form-item label="咨询单位测算值" prop="calculated_value">
<el-form-item label="审核人" prop="reviewer"> <el-input class="w-[280px]" v-model="queryParams.calculated_value" clearable placeholder="请输入咨询单位测算值" />
<el-input class="w-[280px]" v-model="queryParams.reviewer" clearable placeholder="请输入审核人" /> </el-form-item>
</el-form-item> <el-form-item label="备注" prop="remark">
<el-form-item label="审核人id" prop="reviewer_id"> <el-input class="w-[280px]" v-model="queryParams.remark" clearable placeholder="请输入备注" />
<el-input class="w-[280px]" v-model="queryParams.reviewer_id" clearable placeholder="请输入审核人id" /> </el-form-item>
</el-form-item>
<el-form-item label="施工单位申报值" prop="declared_value">
<el-input class="w-[280px]" v-model="queryParams.declared_value" clearable placeholder="请输入施工单位申报值" />
</el-form-item>
<el-form-item label="咨询单位测算值" prop="calculated_value">
<el-input class="w-[280px]" v-model="queryParams.calculated_value" clearable placeholder="请输入咨询单位测算值" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input class="w-[280px]" v-model="queryParams.remark" clearable placeholder="请输入备注" />
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button> <el-button @click="resetParams">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_change_visa_content/add']" type="primary" @click="handleAdd"> <el-button v-perms="['project_process_management.project_change_visa_content/add']" type="primary"
<template #icon> @click="handleAdd">
<icon name="el-icon-Plus" /> <template #icon>
</template> <icon name="el-icon-Plus" />
新增 </template>
</el-button> 新增
<el-button </el-button>
v-perms="['project_process_management.project_change_visa_content/delete']" <el-button v-perms="['project_process_management.project_change_visa_content/delete']"
:disabled="!selectData.length" :disabled="!selectData.length" @click="handleDelete(selectData)">
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="主表标识" prop="project_change_visa_dataid" show-overflow-tooltip />
<el-table-column label="所在目录" prop="directory" show-overflow-tooltip />
<el-table-column label="单位名称" prop="unit_name" show-overflow-tooltip />
<el-table-column label="时间" prop="time" show-overflow-tooltip />
<el-table-column label="所属专业" prop="major" show-overflow-tooltip />
<el-table-column label="类别" prop="category" show-overflow-tooltip />
<el-table-column label="审核内容" prop="review_content" show-overflow-tooltip />
<el-table-column label="审核意见" prop="review_comments" show-overflow-tooltip />
<el-table-column label="审核人" prop="reviewer" show-overflow-tooltip />
<el-table-column label="审核人id" prop="reviewer_id" show-overflow-tooltip />
<el-table-column label="施工单位申报值" prop="declared_value" show-overflow-tooltip />
<el-table-column label="咨询单位测算值" prop="calculated_value" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['project_process_management.project_change_visa_content/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['project_process_management.project_change_visa_content/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除 删除
</el-button> </el-button>
</template> <div class="mt-4">
</el-table-column> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
</el-table> <el-table-column type="selection" width="55" />
</div> <el-table-column label="所在目录" prop="directory" show-overflow-tooltip />
<div class="flex mt-4 justify-end"> <el-table-column label="单位名称" prop="unit_name" show-overflow-tooltip />
<pagination v-model="pager" @change="getLists" /> <el-table-column label="时间" prop="time" show-overflow-tooltip />
</div> <el-table-column label="所属专业" prop="major" show-overflow-tooltip />
</el-card> <el-table-column label="类别" prop="category" show-overflow-tooltip />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> <el-table-column label="审核内容" prop="review_content" show-overflow-tooltip />
</div> <el-table-column label="审核意见" prop="review_comments" show-overflow-tooltip />
<el-table-column label="审核人" prop="reviewer" show-overflow-tooltip />
<el-table-column label="施工单位申报值" prop="declared_value" show-overflow-tooltip />
<el-table-column label="咨询单位测算值" prop="calculated_value" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project_process_management.project_change_visa_content/edit']"
type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project_process_management.project_change_visa_content/delete']"
type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template> </template>
<script lang="ts" setup name="projectChangeVisaContentLists"> <script lang="ts" setup name="projectChangeVisaContentLists">
@ -128,19 +105,19 @@ const showEdit = ref(false)
// //
const queryParams = reactive({ const queryParams = reactive({
project_change_visa_dataid: '', project_change_visa_dataid: '',
directory: '', directory: '',
unit_name: '', unit_name: '',
time: '', time: '',
major: '', major: '',
category: '', category: '',
review_content: '', review_content: '',
review_comments: '', review_comments: '',
reviewer: '', reviewer: '',
reviewer_id: '', reviewer_id: '',
declared_value: '', declared_value: '',
calculated_value: '', calculated_value: '',
remark: '', remark: '',
}) })
// //
@ -148,7 +125,7 @@ const selectData = ref<any[]>([])
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id)
} }
// //
@ -156,30 +133,30 @@ const { dictData } = useDictData('')
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiProjectChangeVisaContentLists, fetchFun: apiProjectChangeVisaContentLists,
params: queryParams params: queryParams
}) })
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('add') editRef.value?.open('add')
} }
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('edit') editRef.value?.open('edit')
editRef.value?.setFormData(data) editRef.value?.setFormData(data)
} }
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm('确定要删除?')
await apiProjectChangeVisaContentDelete({ id }) await apiProjectChangeVisaContentDelete({ id })
getLists() getLists()
} }
getLists() getLists()

View File

@ -28,7 +28,7 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="关联合同" prop="affcontract"> <el-form-item label="关联合同" prop="affcontract">
<el-input v-model="formData.affcontract" clearable placeholder="请输入关联合同" /> <el-input v-model="formData.affcontract_name" clearable placeholder="请输入关联合同" readonly />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@ -91,7 +91,88 @@
<el-dialog v-model="showDialog" title="选择项目" width="70%"> <el-dialog v-model="showDialog" title="选择项目" width="70%">
<cost_project @customEvent="customEvent"></cost_project> <cost_project @customEvent="customEvent"></cost_project>
</el-dialog> </el-dialog>
<div v-if="showDialog3">
<personnelselector ref="personnel" @confirm="submituser" type="1">
</personnelselector>
</div>
</el-form> </el-form>
<div style="margin-bottom: 30px;">任务明细</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.project_commission_detail">
<el-table-column label="序号" v-if="mode == 'add'" width="150px">
<template #default="{ row }">
<el-button @click="handleAdd(row)">+</el-button>
<el-button @click="handleDelete(row)">-</el-button>
</template>
</el-table-column>
<el-table-column label="工程师" prop="level" width="200px">
<template #default="scope">
<el-input v-model="scope.row.engineer" :disabled="mode != 'add'"
@click="userclick(scope.$index, 'engineer')" placeholder="点击选择" />
</template>
</el-table-column>
<el-table-column label="任务名称" prop="task_name" width="200px">
<template #default="{ row }">
<el-input v-model="row.task_name" :disabled="mode != 'add'" />
</template>
</el-table-column>
<el-table-column label="任务类型" prop="task_type" width="200px">
<template #default="{ row }">
<el-select class="flex-1" v-model="row.task_type" clearable placeholder="请选择任务类型"
:disabled="mode != 'add'">
<el-option v-for="(item, index) in dictData.task_type" :key="index" :label="item.name"
:value="parseInt(item.value)" />
</el-select>
<!-- {{ dictData.task_type }} -->
</template>
</el-table-column>
<el-table-column label="专业类型" prop="professional_type" width="200px">
<template #default="{ row }">
<el-select class="flex-1" v-model="row.professional_type" clearable placeholder="请选择专业类型"
:disabled="mode != 'add'">
<el-option v-for="(item, index) in dictData.major_type" :key="index" :label="item.name"
:value="item.value" />
</el-select>
</template>
<!-- {{ dictData.major_type }} -->
</el-table-column>
<el-table-column label="造价金额" prop="zj_amount" width="200px">
<template #default="scope">
<el-input v-model="scope.row.zj_amount" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="收款金额" prop="sk_amount" width="200px">
<template #default="scope">
<el-input v-model="scope.row.sk_amount" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="其他增减费用" prop="other_fee" width="200px">
<template #default="scope">
<el-input v-model="scope.row.other_fee" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="提成比例(%)" prop="tc_rate" width="200px">
<template #default="scope">
<el-input v-model="scope.row.tc_rate" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="应提成金额" prop="tc_amount" width="200px">
<template #default="{ row }">
<el-input v-model="row.tc_amount" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="本次支付金额" prop="pay_amount" width="200px">
<template #default="{ row }">
<el-input v-model="row.pay_amount" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" width="200px">
<template #default="{ row }">
<el-input v-model="row.remark" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
</el-table>
</div>
</popup> </popup>
</div> </div>
</template> </template>
@ -99,8 +180,7 @@
<script lang="ts" setup name="projectCommissionEdit"> <script lang="ts" setup name="projectCommissionEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiProjectCommissionAdd, apiProjectCommissionEdit, apiProjectCommissionDetail } from '@/api/project_commission' import { apiProjectCommissionAdd, apiProjectCommissionEdit, } from '@/api/project_commission'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
defineProps({ defineProps({
dictData: { dictData: {
@ -113,7 +193,8 @@ const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
const showDialog = ref(false) const showDialog = ref(false)
const showDialog3 = ref(false)
const personnel = ref<any>()
// //
@ -131,6 +212,8 @@ const formData = reactive({
project_num: '', project_num: '',
head: '', head: '',
affcontract: '', affcontract: '',
affcontract_name: "",
contract: {},
industry: '', industry: '',
hk: '', hk: '',
rate: '', rate: '',
@ -140,7 +223,21 @@ const formData = reactive({
djr: '', djr: '',
apptime: '', apptime: '',
remark: '', remark: '',
project_commission_detail: {} projectInfo: {},
project_commission_detail: [{
engineer: '',
engineer_id: '',
task_name: '',
task_type: '',
professional_type: '',
zj_amount: '',
sk_amount: '',
tc_rate: '',
tc_amount: '',
pay_amount: '',
remark: '',
other_fee: '',
}]
}) })
const customEvent = (e) => { const customEvent = (e) => {
@ -149,10 +246,56 @@ const customEvent = (e) => {
formData.project_name = e.project_name formData.project_name = e.project_name
formData.project_num = e.project_num formData.project_num = e.project_num
formData.head = e.principal formData.head = e.principal
formData.affcontract = e.contract.id
formData.affcontract_name = e.contract.contract_name
showDialog.value = false showDialog.value = false
} }
const handleAdd = () => {
formData.project_commission_detail.push({
engineer: '',
engineer_id: '',
task_name: '',
task_type: '',
professional_type: '',
zj_amount: '',
sk_amount: '',
tc_rate: '',
tc_amount: '',
pay_amount: '',
remark: '',
other_fee: '',
})
}
const handleDelete = (row: any) => {
if (formData.project_commission_detail.length == 1) return
const index = formData.project_commission_detail.indexOf(row);
formData.project_commission_detail.splice(index, 1);
}
const tableIndex = ref(0)
const tableKey = ref('')
//
const userclick = async (e: any, key) => {
tableIndex.value = e
tableKey.value = key
showDialog3.value = true
await nextTick()
personnel.value.open()
console.log(tableIndex.value, tableKey.value)
}
//
const submituser = (e: any) => {
formData.project_commission_detail[tableIndex.value][tableKey.value] = e.name
formData.project_commission_detail[tableIndex.value][tableKey.value + '_id'] = e.id
showDialog3.value = false
}
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
@ -167,7 +310,12 @@ const setFormData = async (data: Record<any, any>) => {
formData[key] = data[key] formData[key] = data[key]
} }
} }
formData.project_id = formData.projectInfo.id
formData.project_name = formData.projectInfo.project_name
formData.project_num = formData.projectInfo.project_num
formData.head = formData.projectInfo.principal
formData.affcontract = formData.contract.id
formData.affcontract_name = formData.contract.contract_name
} }

View File

@ -1,76 +1,106 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline> <el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="单据编号" prop="num"> <el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" /> <el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item> </el-form-item>
<el-form-item label="项目名称" prop="project"> <el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" /> <el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</el-form-item> </el-form-item>
<el-form-item label="项目编号" prop="project_num"> <el-form-item label="项目编号" prop="project_num">
<el-input class="w-[280px]" v-model="queryParams.project_num" clearable placeholder="请输入项目编号" /> <el-input class="w-[280px]" v-model="queryParams.project_num" clearable placeholder="请输入项目编号" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button> <el-button @click="resetParams">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_commission/add']" type="primary" @click="handleAdd"> <el-button v-perms="['project_commission/add']" type="primary" @click="handleAdd">
<template #icon> <template #icon>
<icon name="el-icon-Plus" /> <icon name="el-icon-Plus" />
</template> </template>
新增 新增
</el-button> </el-button>
<el-button v-perms="['project_commission/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)"> <el-button v-perms="['project_commission/delete']" :disabled="!selectData.length"
删除 @click="handleDelete(selectData)">
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<!-- <el-table-column label="" prop="dataid" show-overflow-tooltip /> -->
<el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project" show-overflow-tooltip />
<el-table-column label="项目编号" prop="project_num" show-overflow-tooltip />
<el-table-column label="项目负责人" prop="head" show-overflow-tooltip />
<el-table-column label="关联合同" prop="affcontract" show-overflow-tooltip />
<el-table-column label="行业" prop="industry" show-overflow-tooltip />
<el-table-column label="项目回款总额" prop="hk" show-overflow-tooltip />
<el-table-column label="提成比例(%" prop="rate" show-overflow-tooltip />
<el-table-column label="应提成总金额" prop="ticheng" show-overflow-tooltip />
<el-table-column label="已支付总额" prop="paid_amount" show-overflow-tooltip />
<el-table-column label="本次支付总额" prop="bczfze" show-overflow-tooltip />
<el-table-column label="登记人" prop="djr" show-overflow-tooltip />
<el-table-column label="登记日期" prop="apptime" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project_commission/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project_commission/delete']" type="danger" link @click="handleDelete(row.id)">
删除 删除
</el-button> </el-button>
</template> <div class="mt-4">
</el-table-column> <el-table :data="pager.lists" @selection-change="handleSelectionChange" row-key="id">
</el-table> <el-table-column type="selection" width="55" />
</div> <el-table-column type="expand">
<div class="flex justify-end mt-4"> <template #default="props">
<pagination v-model="pager" @change="getLists" /> <div m="4">
</div> <el-table :data="props.row.children">
</el-card> <el-table-column label="工程师" prop="engineer" show-overflow-tooltip />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> <el-table-column label="任务名称" prop="task_name" show-overflow-tooltip />
</div> <el-table-column label="任务类型" prop="task_type">
<template #default="{ row }">
<dict-value :options="dictData.task_type" :value="row.task_type" />
</template>
</el-table-column>
<el-table-column label="专业类型" prop="professional_type">
<template #default="{ row }">
<dict-value :options="dictData.major_type" :value="row.professional_type" />
</template>
</el-table-column>
<el-table-column label="造价金额" prop="zj_amount" show-overflow-tooltip />
<el-table-column label="收款金额" prop="sk_amount" show-overflow-tooltip />
<el-table-column label="提成比例(%" prop="tc_rate" show-overflow-tooltip />
<el-table-column label="应提成金额" prop="tc_amount" show-overflow-tooltip />
<el-table-column label="本次支付金额" prop="pay_amount" show-overflow-tooltip />
</el-table>
</div>
</template>
</el-table-column>
<el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="projectInfo.project_name" show-overflow-tooltip />
<el-table-column label="项目编号" prop="projectInfo.project_num" show-overflow-tooltip />
<el-table-column label="项目负责人" prop="projectInfo.principal" show-overflow-tooltip />
<el-table-column label="关联合同" prop="contract.contract_name" show-overflow-tooltip />
<el-table-column label="行业" prop="industry" show-overflow-tooltip>
<template #default="{ row }">
<dict-value :options="dictData.supervision_project_industry" :value="row.industry" />
</template>
</el-table-column>
<el-table-column label="项目回款总额" prop="hk" show-overflow-tooltip />
<el-table-column label="提成比例(%" prop="rate" show-overflow-tooltip />
<el-table-column label="应提成总金额" prop="ticheng" show-overflow-tooltip />
<el-table-column label="已支付总额" prop="paid_amount" show-overflow-tooltip />
<el-table-column label="本次支付总额" prop="bczfze" show-overflow-tooltip />
<el-table-column label="登记人" prop="djr" show-overflow-tooltip />
<el-table-column label="登记日期" prop="apptime" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project_commission/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project_commission/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template> </template>
<script lang="ts" setup name="projectCommissionLists"> <script lang="ts" setup name="projectCommissionLists">
import { usePaging } from '@/hooks/usePaging' import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from '@/hooks/useDictOptions'
import { apiProjectCommissionLists, apiProjectCommissionDelete } from '@/api/project_commission' import { apiProjectCommissionLists, apiProjectCommissionDelete, apiProjectCommissionDetail } from '@/api/project_commission'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import EditPopup from './edit.vue' import EditPopup from './edit.vue'
@ -82,9 +112,9 @@ const showEdit = ref(false)
// //
const queryParams = reactive({ const queryParams = reactive({
num: '', num: '',
project: '', project: '',
project_num: '', project_num: '',
}) })
// //
@ -92,38 +122,39 @@ const selectData = ref<any[]>([])
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id)
} }
// //
const { dictData } = useDictData('supervision_project_industry') const { dictData } = useDictData('supervision_project_industry,task_type,major_type')
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiProjectCommissionLists, fetchFun: apiProjectCommissionLists,
params: queryParams params: queryParams
}) })
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('add') editRef.value?.open('add')
} }
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
showEdit.value = true let res = await apiProjectCommissionDetail({ id: data.id })
await nextTick() showEdit.value = true
editRef.value?.open('edit') await nextTick()
editRef.value?.setFormData(data) editRef.value?.open('edit')
editRef.value?.setFormData(res)
} }
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm('确定要删除?')
await apiProjectCommissionDelete({ id }) await apiProjectCommissionDelete({ id })
getLists() getLists()
} }
getLists() getLists()

View File

@ -1,44 +1,27 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup <popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
ref="popupRef" <el-form ref="formRef" :model="formData" label-width="120px" :rules="formRules">
:title="popupTitle" <!-- <el-form-item label="主表标识" prop="project_commission_dataid">
: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_commission_dataid">
<el-input v-model="formData.project_commission_dataid" clearable placeholder="请输入主表标识" /> <el-input v-model="formData.project_commission_dataid" clearable placeholder="请输入主表标识" />
</el-form-item> </el-form-item> -->
<el-form-item label="工程师" prop="engineer"> <el-form-item label="工程师" prop="engineer">
<el-input v-model="formData.engineer" clearable placeholder="请输入工程师" /> <el-input v-model="formData.engineer" clearable placeholder="请输入工程师" @click="userclick" />
</el-form-item> </el-form-item>
<el-form-item label="工程师id" prop="engineer_id"> <!-- <el-form-item label="工程师id" prop="engineer_id">
<el-input v-model="formData.engineer_id" clearable placeholder="请输入工程师id" /> <el-input v-model="formData.engineer_id" clearable placeholder="请输入工程师id" />
</el-form-item> </el-form-item> -->
<el-form-item label="任务名称" prop="task_name"> <el-form-item label="任务名称" prop="task_name">
<el-input v-model="formData.task_name" clearable placeholder="请输入任务名称" /> <el-input v-model="formData.task_name" clearable placeholder="请输入任务名称" />
</el-form-item> </el-form-item>
<el-form-item label="任务类型" prop="task_type"> <el-form-item label="任务类型" prop="task_type">
<el-select class="flex-1" v-model="formData.task_type" clearable placeholder="请选择任务类型"> <el-select class="flex-1" v-model="formData.task_type" clearable placeholder="请选择任务类型">
<el-option <el-option v-for="(item, index) in dictData.task_type" :key="index" :label="item.name" :value="item.value" />
v-for="(item, index) in dictData.task_type"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="专业类型" prop="professional_type"> <el-form-item label="专业类型" prop="professional_type">
<el-select class="flex-1" v-model="formData.professional_type" clearable placeholder="请选择专业类型"> <el-select class="flex-1" v-model="formData.professional_type" clearable placeholder="请选择专业类型">
<el-option <el-option v-for="(item, index) in dictData.major_type" :key="index" :label="item.name" :value="item.value" />
v-for="(item, index) in dictData.major_type"
:key="index"
:label="item.name"
:value="item.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="造价金额" prop="zj_amount"> <el-form-item label="造价金额" prop="zj_amount">
@ -62,7 +45,10 @@
<el-form-item label="其他增减费用" prop="other_fee"> <el-form-item label="其他增减费用" prop="other_fee">
<el-input v-model="formData.other_fee" clearable placeholder="请输入其他增减费用" /> <el-input v-model="formData.other_fee" clearable placeholder="请输入其他增减费用" />
</el-form-item> </el-form-item>
<div v-if="showDialog3">
<personnelselector ref="personnel" @confirm="submituser" type="1">
</personnelselector>
</div>
</el-form> </el-form>
</popup> </popup>
</div> </div>
@ -71,7 +57,7 @@
<script lang="ts" setup name="projectCommissionDetailEdit"> <script lang="ts" setup name="projectCommissionDetailEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiProjectCommissionDetailAdd, apiProjectCommissionDetailEdit, apiProjectCommissionDetailDetail } from '@/api/project_commission_detail' import { apiProjectCommissionDetailAdd, apiProjectCommissionDetailEdit, } from '@/api/project_commission_detail'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
defineProps({ defineProps({
@ -84,6 +70,8 @@ const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
const showDialog3 = ref(false)
const personnel = ref<any>()
// //
@ -110,6 +98,19 @@ const formData = reactive({
}) })
//
const userclick = async (e: any) => {
showDialog3.value = true
await nextTick()
personnel.value.open()
}
//
const submituser = (e: any) => {
formData.engineer = e.name
formData.engineer_id = e.id
showDialog3.value = false
}
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
@ -140,10 +141,10 @@ const getDetail = async (row: Record<string, any>) => {
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData, } const data = { ...formData, }
mode.value == 'edit' mode.value == 'edit'
? await apiProjectCommissionDetailEdit(data) ? await apiProjectCommissionDetailEdit(data)
: await apiProjectCommissionDetailAdd(data) : await apiProjectCommissionDetailAdd(data)
popupRef.value?.close() popupRef.value?.close()
emit('success') emit('success')
} }

View File

@ -1,11 +1,7 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form <el-form class="mb-[-16px]" :model="queryParams" inline>
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="工程师" prop="engineer"> <el-form-item label="工程师" prop="engineer">
<el-input class="w-[280px]" v-model="queryParams.engineer" clearable placeholder="请输入工程师" /> <el-input class="w-[280px]" v-model="queryParams.engineer" clearable placeholder="请输入工程师" />
</el-form-item> </el-form-item>
@ -20,24 +16,14 @@
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_commission_detail/add']" type="primary" @click="handleAdd"> <el-button v-perms="['project_commission_detail/delete']" :disabled="!selectData.length"
<template #icon> @click="handleDelete(selectData)">
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['project_commission_detail/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除 删除
</el-button> </el-button>
<div class="mt-4"> <div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange"> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column label="工程师" prop="engineer" show-overflow-tooltip /> <el-table-column label="工程师" prop="engineer" show-overflow-tooltip />
<el-table-column label="工程师id" prop="engineer_id" show-overflow-tooltip />
<el-table-column label="任务名称" prop="task_name" show-overflow-tooltip /> <el-table-column label="任务名称" prop="task_name" show-overflow-tooltip />
<el-table-column label="任务类型" prop="task_type"> <el-table-column label="任务类型" prop="task_type">
<template #default="{ row }"> <template #default="{ row }">
@ -57,27 +43,17 @@
<el-table-column label="操作" width="120" fixed="right"> <el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button <el-button v-perms="['project_commission_detail/edit']" type="primary" link @click="handleEdit(row)">
v-perms="['project_commission_detail/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑 编辑
</el-button> </el-button>
<el-button <el-button v-perms="['project_commission_detail/delete']" type="danger" link @click="handleDelete(row.id)">
v-perms="['project_commission_detail/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除 删除
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="flex mt-4 justify-end"> <div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" /> <pagination v-model="pager" @change="getLists" />
</div> </div>
</el-card> </el-card>
@ -88,7 +64,7 @@
<script lang="ts" setup name="projectCommissionDetailLists"> <script lang="ts" setup name="projectCommissionDetailLists">
import { usePaging } from '@/hooks/usePaging' import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from '@/hooks/useDictOptions'
import { apiProjectCommissionDetailLists, apiProjectCommissionDetailDelete } from '@/api/project_commission_detail' import { apiProjectCommissionDetailLists, apiProjectCommissionDetailDelete, apiProjectCommissionDetailDetail } from '@/api/project_commission_detail'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import EditPopup from './edit.vue' import EditPopup from './edit.vue'
@ -130,10 +106,11 @@ const handleAdd = async () => {
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
let res = await apiProjectCommissionDetailDetail({ id: data.id })
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('edit') editRef.value?.open('edit')
editRef.value?.setFormData(data) editRef.value?.setFormData(res)
} }
// //

View File

@ -1,143 +1,373 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup <popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
ref="popupRef" <el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
:title="popupTitle" <el-row>
:async="true" <el-col :span="8">
width="550px" <el-form-item label="单据编号" prop="num">
@confirm="handleSubmit" <el-input v-model="formData.num" clearable placeholder="系统自动生成" disabled />
@close="handleClose" </el-form-item>
> </el-col>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules"> <el-col :span="8">
<el-form-item label="" prop="dataid"> <el-form-item label="项目名称" prop="project">
<el-input v-model="formData.dataid" clearable placeholder="请输入" /> <el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
</el-form-item> @click="showDialog = true" />
<el-form-item label="单据编号" prop="num"> </el-form-item>
<el-input v-model="formData.num" clearable placeholder="请输入单据编号" /> </el-col>
</el-form-item> <el-col :span="8">
<el-form-item label="项目名称" prop="project"> <el-form-item label="项目编号" prop="project_num">
<el-input v-model="formData.project" clearable placeholder="请输入项目名称" /> <el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" />
</el-form-item> </el-form-item>
<el-form-item label="项目编号" prop="project_num"> </el-col>
<el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" /> </el-row>
</el-form-item> <el-row>
<el-form-item label="登记人" prop="djr"> <el-col :span="8">
<el-input v-model="formData.djr" clearable placeholder="请输入登记人" /> <el-form-item label="登记人" prop="djr">
</el-form-item> <el-input v-model="formData.djr" clearable placeholder="请输入登记人" />
<el-form-item label="登记日期" prop="djrq"> </el-form-item>
<el-input v-model="formData.djrq" clearable placeholder="请输入登记日期" /> </el-col>
</el-form-item> <el-col :span="8">
<el-form-item label="进度申报造价合计" prop="sbhj"> <el-form-item label="登记日期" prop="djrq">
<el-input v-model="formData.sbhj" clearable placeholder="请输入进度申报造价合计" /> <el-date-picker class="flex-1 !flex" v-model="formData.djrq" clearable type="date"
</el-form-item> value-format="YYYY-MM-DD" placeholder="请选择日期">
<el-form-item label="进度审核造价合计" prop="shhj"> </el-date-picker>
<el-input v-model="formData.shhj" clearable placeholder="请输入进度审核造价合计" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="累计应付工程款合计" prop="ljhj"> </el-row>
<el-input v-model="formData.ljhj" clearable placeholder="请输入累计应付工程款合计" /> <el-row>
</el-form-item> <el-col :span="8">
<el-form-item label="附件" prop="annex"> <el-form-item label="进度申报造价合计" prop="sbhj" label-width="160px">
<material-picker v-model="formData.annex" /> <el-input v-model="formData.sbhj" clearable placeholder="系统自动计算" disabled type='number' />
</el-form-item> </el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="进度审核造价合计" prop="shhj" label-width="160px">
<el-input v-model="formData.shhj" clearable placeholder="系统自动计算" disabled type='number' />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="累计应付工程款合计" prop="ljhj" label-width="160px">
<el-input v-model="formData.ljhj" clearable placeholder="系统自动计算" disabled type='number' />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="附件" prop="annex">
<annexUpload :annex="formData.annex" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
</el-form-item>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<cost_project @customEvent="customEvent"></cost_project>
</el-dialog>
</el-form>
<div style="margin-bottom: 30px;">进度明细</div>
<div style="margin-bottom: 30px;">
<el-table :data="formData.project_progress_payment_detail">
<el-table-column label="序号" v-if="mode == 'add'" width="150px">
<template #default="{ row }">
<el-button @click="handleAdd">+</el-button>
<el-button @click="handleDelete(row)">-</el-button>
</template>
</el-table-column>
<el-table-column label="所在目录" prop="level" width="200px">
<template #default="scope">
<el-input v-model="scope.row.directory" :disabled="mode != 'add'" />
</template>
</el-table-column>
<el-table-column label="单位工程名称" prop="unit_project_name" width="200px">
<template #default="{ row }">
<el-input v-model="row.unit_project_name" :disabled="mode != 'add'" />
</template>
</el-table-column>
<el-table-column label="合同工程款总额" prop="contract_total_amount" width="200px">
<template #default="{ row }">
<el-input v-model="row.contract_total_amount" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="合同付款比例(%)" prop="dcntract_payment_rate" width="200px">
<template #default="{ row }">
<el-input v-model="row.dcntract_payment_rate" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="时间" prop="time" width="200px">
<template #default="{ row }">
<el-date-picker class="flex-1 !flex" v-model="row.time" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期" :disabled="mode != 'add'">
</el-date-picker>
</template>
</el-table-column>
<el-table-column label="形象进度" prop="image_progress" width="200px">
<template #default="{ row }">
<el-input v-model="row.image_progress" :disabled="mode != 'add'" />
</template>
</el-table-column>
<el-table-column label="申报造价(土建)" prop="declared_cost_tj" width="200px">
<template #default="scope">
<el-input v-model="scope.row.declared_cost_tj" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="申报造价(安装)" prop="declared_cost_az" width="200px">
<template #default="scope">
<el-input v-model="scope.row.declared_cost_az" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="申报造价(其他)" prop="declared_cost_other" width="200px">
<template #default="scope">
<el-input v-model="scope.row.declared_cost_other" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="进度申报造价小计" prop="jdsbzj_xiaoji" width="200px">
<template #default="scope">
<el-input v-model="scope.row.jdsbzj_xiaoji" placeholder="系统自动计算" disabled />
</template>
</el-table-column>
<el-table-column label="审核造价(土建)" prop="audit_cost_tj" width="200px">
<template #default="{ row }">
<el-input v-model="row.audit_cost_tj" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="审核造价(安装)" prop="audit_cost_az" width="200px">
<template #default="{ row }">
<el-input v-model="row.audit_cost_az" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="审核造价(其他)" prop="audit_cost_other" width="200px">
<template #default="{ row }">
<el-input v-model="row.audit_cost_other" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="进度审核造价小计" prop="jdshzj_xiaoji" width="200px">
<template #default="{ row }">
<el-input v-model="row.jdshzj_xiaoji" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="审减额(元)" prop="deduction_amount" width="200px">
<template #default="{ row }">
<el-input v-model="row.deduction_amount" type="number" placeholder="系统自动计算" disabled />
</template>
</el-table-column>
<el-table-column label="完成产值比例(%)" prop="completed_rate" width="200px">
<template #default="{ row }">
<el-input v-model="row.completed_rate" :disabled="mode != 'add'" type="number" />
</template>
</el-table-column>
<el-table-column label="累计完成工程款" prop="ljwc_funds" width="200px">
<template #default="{ row }">
<el-input v-model="row.ljwc_funds" type="number" placeholder="系统自动计算" disabled />
</template>
</el-table-column>
<el-table-column label="当期应付工程款(元)" prop="current_payable_funds" width="200px">
<template #default="{ row }">
<el-input v-model="row.current_payable_funds" type="number" placeholder="系统自动计算" disabled />
</template>
</el-table-column>
</el-form> <el-table-column label="付款比例(%)" prop="payment_rate" width="200px">
</popup> <template #default="{ row }">
</div> <el-input v-model="row.payment_rate" type="number" placeholder="系统自动计算" disabled />
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" width="200px">
<template #default="{ row }">
<el-input v-model="row.remark" :disabled="mode != 'add'" />
</template>
</el-table-column>
</el-table>
</div>
</popup>
</div>
</template> </template>
<script lang="ts" setup name="projectProgressPaymentEdit"> <script lang="ts" setup name="projectProgressPaymentEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiProjectProgressPaymentAdd, apiProjectProgressPaymentEdit, apiProjectProgressPaymentDetail } from '@/api/project_progress_payment' import { apiProjectProgressPaymentAdd, apiProjectProgressPaymentEdit, apiProjectProgressPaymentDetail } from '@/api/project_progress_payment'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
import { number } from 'echarts/core'
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
default: () => ({}) default: () => ({})
} }
}) })
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
const showDialog = ref(false)
// //
const popupTitle = computed(() => { const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目进度款' : '新增项目进度款' return mode.value == 'edit' ? '编辑项目进度款' : '新增项目进度款'
}) })
const handleAvatarSuccess_four = (response: any) => {
Array.isArray(formData.annex) ? '' : 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 formData = reactive({ const formData = reactive({
id: '', id: '',
dataid: '', dataid: '',
num: '', num: '',
project: '', project_id: '',
project_num: '', project_name: "",
djr: '', project_num: '',
djrq: '', djr: '',
sbhj: '', djrq: '',
shhj: '', sbhj: '',
ljhj: '', shhj: '',
annex: '', ljhj: '',
annex: [],
projectInfo: {},
project_progress_payment_detail: [{
project_progress_payment_id: '',
directory: '',
unit_project_name: '',
time: '',
image_progress: '',
declared_cost_tj: '',
declared_cost_az: '',
declared_cost_other: '',
jdsbzj_xiaoji: '',
audit_cost_tj: '',
audit_cost_az: '',
audit_cost_other: '',
jdshzj_xiaoji: '',
deduction_amount: '',
completed_rate: '',
contract_total_amount: '',
ljwc_funds: '',
current_payable_funds: '',
payment_rate: '',
dcntract_payment_rate: '',
remark: '',
}]
}) })
//
watch(
() => formData.project_progress_payment_detail,
(value) => {
value.forEach(item => {
item.jdsbzj_xiaoji = Number(item.declared_cost_tj) + Number(item.declared_cost_az) + Number(item.declared_cost_other)
item.jdshzj_xiaoji = Number(item.audit_cost_tj) + Number(item.audit_cost_az) + Number(item.audit_cost_other)
item.payment_rate = item.dcntract_payment_rate
item.deduction_amount = jdsbzj_xiaoji - jdshzj_xiaoji
})
},
{
deep: true
}
)
const customEvent = (e: any) => {
formData.project_id = e.id
formData.project_name = e.project_name
formData.project_num = e.project_num
showDialog.value = false
}
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
}) })
const handleAdd = () => {
formData.project_progress_payment_detail.push({
project_progress_payment_id: '',
directory: '',
unit_project_name: '',
time: '',
image_progress: '',
declared_cost_tj: '',
declared_cost_az: '',
declared_cost_other: '',
jdsbzj_xiaoji: '',
audit_cost_tj: '',
audit_cost_az: '',
audit_cost_other: '',
jdshzj_xiaoji: '',
deduction_amount: '',
completed_rate: '',
contract_total_amount: '',
ljwc_funds: '',
current_payable_funds: '',
payment_rate: '',
dcntract_payment_rate: '',
remark: '',
})
}
const handleDelete = (row: any) => {
if (formData.project_progress_payment_detail.length == 1) return
const index = formData.project_progress_payment_detail.indexOf(row);
formData.project_progress_payment_detail.splice(index, 1);
}
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
}
} }
} formData.project_id = formData.projectInfo.id
formData.project_name = formData.projectInfo.project_name
formData.project_num = formData.projectInfo.project_num
} }
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
const data = await apiProjectProgressPaymentDetail({ const data = await apiProjectProgressPaymentDetail({
id: row.id id: row.id
}) })
setFormData(data) setFormData(data)
} }
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() console.log(formData, 'formdata')
const data = { ...formData, } // return
mode.value == 'edit' await formRef.value?.validate()
? await apiProjectProgressPaymentEdit(data) const data = { ...formData, }
: await apiProjectProgressPaymentAdd(data) mode.value == 'edit'
popupRef.value?.close() ? await apiProjectProgressPaymentEdit(data)
emit('success') : await apiProjectProgressPaymentAdd(data)
popupRef.value?.close()
emit('success')
} }
// //
const open = (type = 'add') => { const open = (type = 'add') => {
mode.value = type mode.value = type
popupRef.value?.open() popupRef.value?.open()
} }
// //
const handleClose = () => { const handleClose = () => {
emit('close') emit('close')
} }
defineExpose({ defineExpose({
open, open,
setFormData, setFormData,
getDetail getDetail
}) })
</script> </script>

View File

@ -1,93 +1,101 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form <el-form class="mb-[-16px]" :model="queryParams" inline>
class="mb-[-16px]" <el-form-item label="单据编号" prop="num">
:model="queryParams" <el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
inline </el-form-item>
> <el-form-item label="项目名称" prop="project">
<el-form-item label="单据编号" prop="num"> <el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" /> </el-form-item>
</el-form-item> <el-form-item label="项目编号" prop="project_num">
<el-form-item label="项目名称" prop="project"> <el-input class="w-[280px]" v-model="queryParams.project_num" clearable placeholder="请输入项目编号" />
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" /> </el-form-item>
</el-form-item>
<el-form-item label="项目编号" prop="project_num">
<el-input class="w-[280px]" v-model="queryParams.project_num" clearable placeholder="请输入项目编号" />
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button> <el-button @click="resetParams">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_progress_payment/add']" type="primary" @click="handleAdd"> <el-button v-perms="['project_process_management.project_progress_payment/add']" type="primary"
<template #icon> @click="handleAdd">
<icon name="el-icon-Plus" /> <template #icon>
</template> <icon name="el-icon-Plus" />
新增 </template>
</el-button> 新增
<el-button </el-button>
v-perms="['project_process_management.project_progress_payment/delete']" <el-button v-perms="['project_process_management.project_progress_payment/delete']"
:disabled="!selectData.length" :disabled="!selectData.length" @click="handleDelete(selectData)">
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="" prop="dataid" show-overflow-tooltip />
<el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project" show-overflow-tooltip />
<el-table-column label="项目编号" prop="project_num" show-overflow-tooltip />
<el-table-column label="登记人" prop="djr" show-overflow-tooltip />
<el-table-column label="登记日期" prop="djrq" show-overflow-tooltip />
<el-table-column label="进度申报造价合计" prop="sbhj" show-overflow-tooltip />
<el-table-column label="进度审核造价合计" prop="shhj" show-overflow-tooltip />
<el-table-column label="累计应付工程款合计" prop="ljhj" show-overflow-tooltip />
<el-table-column label="附件" prop="annex">
<template #default="{ row }">
<el-image style="width:50px;height:50px;" :src="row.annex" />
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['project_process_management.project_progress_payment/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['project_process_management.project_progress_payment/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除 删除
</el-button> </el-button>
</template> <div class="mt-4">
</el-table-column> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
</el-table> <el-table-column type="selection" width="55" />
</div> <el-table-column type="expand">
<div class="flex mt-4 justify-end"> <template #default="props">
<pagination v-model="pager" @change="getLists" /> <div m="4">
</div> <el-table :data="props.row.taskTypeInfo">
</el-card> <el-table-column label="所在目录" prop="directory" show-overflow-tooltip />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> <el-table-column label="单位工程名称" prop="unit_project_name" show-overflow-tooltip />
</div> <el-table-column label="时间" prop="time" show-overflow-tooltip />
<el-table-column label="形象进度" prop="image_progress" show-overflow-tooltip />
<el-table-column label="申报造价(土建)" prop="declared_cost_tj" show-overflow-tooltip />
<el-table-column label="申报造价(安装)" prop="declared_cost_az" show-overflow-tooltip />
<el-table-column label="申报造价(其他)" prop="declared_cost_other" show-overflow-tooltip />
<el-table-column label="进度申报造价小计" prop="jdsbzj_xiaoji" show-overflow-tooltip />
<el-table-column label="审核造价(土建)" prop="audit_cost_tj" show-overflow-tooltip />
<el-table-column label="审核造价(安装)" prop="audit_cost_az" show-overflow-tooltip />
<el-table-column label="审核造价(其他)" prop="audit_cost_other" show-overflow-tooltip />
<el-table-column label="进度审核造价小计" prop="jdshzj_xiaoji" show-overflow-tooltip />
<el-table-column label="审减额(元)" prop="deduction_amount" show-overflow-tooltip />
<el-table-column label="完成产值比例(%)" prop="completed_rate" show-overflow-tooltip />
<el-table-column label="合同工程款总额" prop="contract_total_amount" show-overflow-tooltip />
<el-table-column label="累计完成工程款" prop="ljwc_funds" show-overflow-tooltip />
<el-table-column label="当期应付工程款(元)" prop="current_payable_funds"
show-overflow-tooltip />
<el-table-column label="付款比例(%)" prop="payment_rate" show-overflow-tooltip />
<el-table-column label="合同付款比例(%)" prop="dcntract_payment_rate" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table>
</div>
</template>
</el-table-column>
<el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="projectInfo.project_name" show-overflow-tooltip />
<el-table-column label="项目编号" prop="projectInfo.project_num" show-overflow-tooltip />
<el-table-column label="登记人" prop="djr" show-overflow-tooltip />
<el-table-column label="登记日期" prop="djrq" show-overflow-tooltip />
<el-table-column label="进度申报造价合计" prop="sbhj" show-overflow-tooltip />
<el-table-column label="进度审核造价合计" prop="shhj" show-overflow-tooltip />
<el-table-column label="累计应付工程款合计" prop="ljhj" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project_process_management.project_progress_payment/edit']" type="primary"
link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project_process_management.project_progress_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">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template> </template>
<script lang="ts" setup name="projectProgressPaymentLists"> <script lang="ts" setup name="projectProgressPaymentLists">
import { usePaging } from '@/hooks/usePaging' import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from '@/hooks/useDictOptions'
import { apiProjectProgressPaymentLists, apiProjectProgressPaymentDelete } from '@/api/project_progress_payment' import { apiProjectProgressPaymentLists, apiProjectProgressPaymentDelete, apiProjectProgressPaymentDetail } from '@/api/project_progress_payment'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import EditPopup from './edit.vue' import EditPopup from './edit.vue'
@ -99,9 +107,9 @@ const showEdit = ref(false)
// //
const queryParams = reactive({ const queryParams = reactive({
num: '', num: '',
project: '', project: '',
project_num: '', project_num: '',
}) })
// //
@ -109,7 +117,7 @@ const selectData = ref<any[]>([])
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id)
} }
// //
@ -117,30 +125,31 @@ const { dictData } = useDictData('')
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiProjectProgressPaymentLists, fetchFun: apiProjectProgressPaymentLists,
params: queryParams params: queryParams
}) })
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('add') editRef.value?.open('add')
} }
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
showEdit.value = true let res = await apiProjectProgressPaymentDetail({ id: data.id })
await nextTick() showEdit.value = true
editRef.value?.open('edit') await nextTick()
editRef.value?.setFormData(data) editRef.value?.open('edit')
editRef.value?.setFormData(res)
} }
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm('确定要删除?')
await apiProjectProgressPaymentDelete({ id }) await apiProjectProgressPaymentDelete({ id })
getLists() getLists()
} }
getLists() getLists()

View File

@ -1,81 +1,137 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup <popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
ref="popupRef" <el-form ref="formRef" :model="formData" label-width="140px" :rules="formRules">
:title="popupTitle" <el-row>
:async="true" <el-col :span="8">
width="550px" <el-form-item label="所在目录" prop="directory">
@confirm="handleSubmit" <el-input v-model="formData.directory" clearable placeholder="请输入所在目录" />
@close="handleClose" </el-form-item>
> </el-col>
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules"> <el-col :span="8">
<el-form-item label="" prop="project_progress_payment_id"> <el-form-item label="单位工程名称" prop="unit_project_name">
<el-input v-model="formData.project_progress_payment_id" clearable placeholder="请输入" /> <el-input v-model="formData.unit_project_name" clearable placeholder="请输入单位工程名称" />
</el-form-item> </el-form-item>
<el-form-item label="所在目录" prop="directory"> </el-col>
<el-input v-model="formData.directory" clearable placeholder="请输入所在目录" /> <el-col :span="8">
</el-form-item> <el-form-item label="时间" prop="time">
<el-form-item label="单位工程名称" prop="unit_project_name"> <el-date-picker class="flex-1 !flex" v-model="formData.time" clearable type="date"
<el-input v-model="formData.unit_project_name" clearable placeholder="请输入单位工程名称" /> value-format="YYYY-MM-DD" placeholder="请选择日期" :disabled="mode != 'add'">
</el-form-item> </el-date-picker>
<el-form-item label="时间" prop="time"> </el-form-item>
<el-input v-model="formData.time" clearable placeholder="请输入时间" /> </el-col>
</el-form-item> </el-row>
<el-form-item label="形象进度" prop="image_progress"> <el-row>
<el-input v-model="formData.image_progress" clearable placeholder="请输入形象进度" /> <el-col :span="8">
</el-form-item> <el-form-item label="形象进度" prop="image_progress">
<el-form-item label="申报造价(土建)" prop="declared_cost_tj"> <el-input v-model="formData.image_progress" clearable placeholder="请输入形象进度" type="number" />
<el-input v-model="formData.declared_cost_tj" clearable placeholder="请输入申报造价(土建)" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="申报造价(安装)" prop="declared_cost_az"> <el-col :span="8">
<el-input v-model="formData.declared_cost_az" clearable placeholder="请输入申报造价(安装)" /> <el-form-item label="申报造价(土建)" prop="declared_cost_tj">
</el-form-item> <el-input v-model="formData.declared_cost_tj" clearable placeholder="请输入申报造价(土建)"
<el-form-item label="申报造价(其他)" prop="declared_cost_other"> type="number" />
<el-input v-model="formData.declared_cost_other" clearable placeholder="请输入申报造价(其他)" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="进度申报造价小计" prop="jdsbzj_xiaoji"> <el-col :span="8">
<el-input v-model="formData.jdsbzj_xiaoji" clearable placeholder="请输入进度申报造价小计" /> <el-form-item label="申报造价(安装)" prop="declared_cost_az">
</el-form-item> <el-input v-model="formData.declared_cost_az" clearable placeholder="请输入申报造价(安装)"
<el-form-item label="审核造价(土建)" prop="audit_cost_tj"> type="number" />
<el-input v-model="formData.audit_cost_tj" clearable placeholder="请输入审核造价(土建)" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="审核造价(安装)" prop="audit_cost_az"> </el-row>
<el-input v-model="formData.audit_cost_az" clearable placeholder="请输入审核造价(安装)" /> <el-row>
</el-form-item> <el-col :span="8">
<el-form-item label="审核造价(其他)" prop="audit_cost_other"> <el-form-item label="申报造价(其他)" prop="declared_cost_other">
<el-input v-model="formData.audit_cost_other" clearable placeholder="请输入审核造价(其他)" /> <el-input v-model="formData.declared_cost_other" clearable placeholder="请输入申报造价(其他)"
</el-form-item> type="number" />
<el-form-item label="进度审核造价小计" prop="jdshzj_xiaoji"> </el-form-item>
<el-input v-model="formData.jdshzj_xiaoji" clearable placeholder="请输入进度审核造价小计" /> </el-col>
</el-form-item> <el-col :span="8">
<el-form-item label="审减额(元)" prop="deduction_amount"> <el-form-item label="进度申报造价小计" prop="jdsbzj_xiaoji">
<el-input v-model="formData.deduction_amount" clearable placeholder="请输入审减额(元)" /> <el-input v-model="formData.jdsbzj_xiaoji" clearable placeholder="系统自动计算" disabled
</el-form-item> type="number" />
<el-form-item label="完成产值比例(%)" prop="completed_rate"> </el-form-item>
<el-input v-model="formData.completed_rate" clearable placeholder="请输入完成产值比例(%)" /> </el-col>
</el-form-item> <el-col :span="8">
<el-form-item label="合同工程款总额" prop="contract_total_amount"> <el-form-item label="审核造价(土建)" prop="audit_cost_tj">
<el-input v-model="formData.contract_total_amount" clearable placeholder="请输入合同工程款总额" /> <el-input v-model="formData.audit_cost_tj" clearable placeholder="请输入审核造价(土建)" type="number" />
</el-form-item> </el-form-item>
<el-form-item label="累计完成工程款" prop="ljwc_funds"> </el-col>
<el-input v-model="formData.ljwc_funds" clearable placeholder="请输入累计完成工程款" /> </el-row>
</el-form-item> <el-row>
<el-form-item label="当期应付工程款(元)" prop="current_payable_funds"> <el-col :span="8">
<el-input v-model="formData.current_payable_funds" clearable placeholder="请输入当期应付工程款(元)" /> <el-form-item label="审核造价(安装)" prop="audit_cost_az">
</el-form-item> <el-input v-model="formData.audit_cost_az" clearable placeholder="请输入审核造价(安装)" type="number" />
<el-form-item label="付款比例(%)" prop="payment_rate"> </el-form-item>
<el-input v-model="formData.payment_rate" clearable placeholder="请输入付款比例(%)" /> </el-col>
</el-form-item> <el-col :span="8">
<el-form-item label="合同付款比例(%)" prop="dcntract_payment_rate"> <el-form-item label="审核造价(其他)" prop="audit_cost_other">
<el-input v-model="formData.dcntract_payment_rate" clearable placeholder="请输入合同付款比例(%)" /> <el-input v-model="formData.audit_cost_other" clearable placeholder="请输入审核造价(其他)"
</el-form-item> type="number" />
<el-form-item label="备注" prop="remark"> </el-form-item>
<el-input v-model="formData.remark" clearable placeholder="请输入备注" /> </el-col>
</el-form-item> <el-col :span="8">
<el-form-item label="进度审核造价小计" prop="jdshzj_xiaoji">
</el-form> <el-input v-model="formData.jdshzj_xiaoji" clearable placeholder="请输入进度审核造价小计" type="number" />
</popup> </el-form-item>
</div> </el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="审减额(元)" prop="deduction_amount">
<el-input v-model="formData.deduction_amount" clearable placeholder="系统自动计算" disabled
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="完成产值比例(%)" prop="completed_rate">
<el-input v-model="formData.completed_rate" clearable placeholder="请输入完成产值比例(%)"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同工程款总额" prop="contract_total_amount">
<el-input v-model="formData.contract_total_amount" clearable placeholder="请输入合同工程款总额"
type="number" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="累计完成工程款" prop="ljwc_funds">
<el-input v-model="formData.ljwc_funds" clearable placeholder="系统自动计算" disabled type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="当期应付工程款(元)" prop="current_payable_funds">
<el-input v-model="formData.current_payable_funds" clearable placeholder="系统自动计算" disabled
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="付款比例(%)" prop="payment_rate">
<el-input v-model="formData.payment_rate" clearable placeholder="系统自动计算" disabled
type="number" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="合同付款比例(%)" prop="dcntract_payment_rate">
<el-input v-model="formData.dcntract_payment_rate" clearable placeholder="请输入合同付款比例(%)"
type="number" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" clearable placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</popup>
</div>
</template> </template>
<script lang="ts" setup name="projectProgressPaymentDetailEdit"> <script lang="ts" setup name="projectProgressPaymentDetailEdit">
@ -85,10 +141,10 @@ import { apiProjectProgressPaymentDetailAdd, apiProjectProgressPaymentDetailEdit
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
default: () => ({}) default: () => ({})
} }
}) })
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>()
@ -98,33 +154,33 @@ const mode = ref('add')
// //
const popupTitle = computed(() => { const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目进度款明细' : '新增项目进度款明细' return mode.value == 'edit' ? '编辑项目进度款明细' : '新增项目进度款明细'
}) })
// //
const formData = reactive({ const formData = reactive({
id: '', id: '',
project_progress_payment_id: '', project_progress_payment_id: '',
directory: '', directory: '',
unit_project_name: '', unit_project_name: '',
time: '', time: '',
image_progress: '', image_progress: '',
declared_cost_tj: '', declared_cost_tj: '',
declared_cost_az: '', declared_cost_az: '',
declared_cost_other: '', declared_cost_other: '',
jdsbzj_xiaoji: '', jdsbzj_xiaoji: '',
audit_cost_tj: '', audit_cost_tj: '',
audit_cost_az: '', audit_cost_az: '',
audit_cost_other: '', audit_cost_other: '',
jdshzj_xiaoji: '', jdshzj_xiaoji: '',
deduction_amount: '', deduction_amount: '',
completed_rate: '', completed_rate: '',
contract_total_amount: '', contract_total_amount: '',
ljwc_funds: '', ljwc_funds: '',
current_payable_funds: '', current_payable_funds: '',
payment_rate: '', payment_rate: '',
dcntract_payment_rate: '', dcntract_payment_rate: '',
remark: '', remark: '',
}) })
@ -137,51 +193,51 @@ const formRules = reactive<any>({
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
}
} }
}
} }
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
const data = await apiProjectProgressPaymentDetailDetail({ const data = await apiProjectProgressPaymentDetailDetail({
id: row.id id: row.id
}) })
setFormData(data) setFormData(data)
} }
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData, } const data = { ...formData, }
mode.value == 'edit' mode.value == 'edit'
? await apiProjectProgressPaymentDetailEdit(data) ? await apiProjectProgressPaymentDetailEdit(data)
: await apiProjectProgressPaymentDetailAdd(data) : await apiProjectProgressPaymentDetailAdd(data)
popupRef.value?.close() popupRef.value?.close()
emit('success') emit('success')
} }
// //
const open = (type = 'add') => { const open = (type = 'add') => {
mode.value = type mode.value = type
popupRef.value?.open() popupRef.value?.open()
} }
// //
const handleClose = () => { const handleClose = () => {
emit('close') emit('close')
} }
defineExpose({ defineExpose({
open, open,
setFormData, setFormData,
getDetail getDetail
}) })
</script> </script>

View File

@ -1,85 +1,70 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form <el-form class="mb-[-16px]" :model="queryParams" inline>
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button> <el-button @click="resetParams">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_progress_payment_detail/add']" type="primary" @click="handleAdd"> <el-button v-perms="['project_process_management.project_progress_payment_detail/add']" type="primary"
<template #icon> @click="handleAdd">
<icon name="el-icon-Plus" /> <template #icon>
</template> <icon name="el-icon-Plus" />
新增 </template>
</el-button> 新增
<el-button </el-button>
v-perms="['project_process_management.project_progress_payment_detail/delete']" <el-button v-perms="['project_process_management.project_progress_payment_detail/delete']"
:disabled="!selectData.length" :disabled="!selectData.length" @click="handleDelete(selectData)">
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="" prop="project_progress_payment_id" show-overflow-tooltip />
<el-table-column label="所在目录" prop="directory" show-overflow-tooltip />
<el-table-column label="单位工程名称" prop="unit_project_name" show-overflow-tooltip />
<el-table-column label="时间" prop="time" show-overflow-tooltip />
<el-table-column label="形象进度" prop="image_progress" show-overflow-tooltip />
<el-table-column label="申报造价(土建)" prop="declared_cost_tj" show-overflow-tooltip />
<el-table-column label="申报造价(安装)" prop="declared_cost_az" show-overflow-tooltip />
<el-table-column label="申报造价(其他)" prop="declared_cost_other" show-overflow-tooltip />
<el-table-column label="进度申报造价小计" prop="jdsbzj_xiaoji" show-overflow-tooltip />
<el-table-column label="审核造价(土建)" prop="audit_cost_tj" show-overflow-tooltip />
<el-table-column label="审核造价(安装)" prop="audit_cost_az" show-overflow-tooltip />
<el-table-column label="审核造价(其他)" prop="audit_cost_other" show-overflow-tooltip />
<el-table-column label="进度审核造价小计" prop="jdshzj_xiaoji" show-overflow-tooltip />
<el-table-column label="审减额(元)" prop="deduction_amount" show-overflow-tooltip />
<el-table-column label="完成产值比例(%)" prop="completed_rate" show-overflow-tooltip />
<el-table-column label="合同工程款总额" prop="contract_total_amount" show-overflow-tooltip />
<el-table-column label="累计完成工程款" prop="ljwc_funds" show-overflow-tooltip />
<el-table-column label="当期应付工程款(元)" prop="current_payable_funds" show-overflow-tooltip />
<el-table-column label="付款比例(%)" prop="payment_rate" show-overflow-tooltip />
<el-table-column label="合同付款比例(%)" prop="dcntract_payment_rate" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['project_process_management.project_progress_payment_detail/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['project_process_management.project_progress_payment_detail/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除 删除
</el-button> </el-button>
</template> <div class="mt-4">
</el-table-column> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
</el-table> <el-table-column type="selection" width="55" />
</div> <el-table-column label="所在目录" prop="directory" show-overflow-tooltip />
<div class="flex mt-4 justify-end"> <el-table-column label="单位工程名称" prop="unit_project_name" show-overflow-tooltip />
<pagination v-model="pager" @change="getLists" /> <el-table-column label="时间" prop="time" show-overflow-tooltip />
</div> <el-table-column label="形象进度" prop="image_progress" show-overflow-tooltip />
</el-card> <el-table-column label="申报造价(土建)" prop="declared_cost_tj" show-overflow-tooltip />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> <el-table-column label="申报造价(安装)" prop="declared_cost_az" show-overflow-tooltip />
</div> <el-table-column label="申报造价(其他)" prop="declared_cost_other" show-overflow-tooltip />
<el-table-column label="进度申报造价小计" prop="jdsbzj_xiaoji" show-overflow-tooltip />
<el-table-column label="审核造价(土建)" prop="audit_cost_tj" show-overflow-tooltip />
<el-table-column label="审核造价(安装)" prop="audit_cost_az" show-overflow-tooltip />
<el-table-column label="审核造价(其他)" prop="audit_cost_other" show-overflow-tooltip />
<el-table-column label="进度审核造价小计" prop="jdshzj_xiaoji" show-overflow-tooltip />
<el-table-column label="审减额(元)" prop="deduction_amount" show-overflow-tooltip />
<el-table-column label="完成产值比例(%)" prop="completed_rate" show-overflow-tooltip />
<el-table-column label="合同工程款总额" prop="contract_total_amount" show-overflow-tooltip />
<el-table-column label="累计完成工程款" prop="ljwc_funds" show-overflow-tooltip />
<el-table-column label="当期应付工程款(元)" prop="current_payable_funds" show-overflow-tooltip />
<el-table-column label="付款比例(%)" prop="payment_rate" show-overflow-tooltip />
<el-table-column label="合同付款比例(%)" prop="dcntract_payment_rate" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project_process_management.project_progress_payment_detail/edit']"
type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project_process_management.project_progress_payment_detail/delete']"
type="danger" link @click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template> </template>
<script lang="ts" setup name="projectProgressPaymentDetailLists"> <script lang="ts" setup name="projectProgressPaymentDetailLists">
@ -105,7 +90,7 @@ const selectData = ref<any[]>([])
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id)
} }
// //
@ -113,30 +98,30 @@ const { dictData } = useDictData('')
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiProjectProgressPaymentDetailLists, fetchFun: apiProjectProgressPaymentDetailLists,
params: queryParams params: queryParams
}) })
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('add') editRef.value?.open('add')
} }
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('edit') editRef.value?.open('edit')
editRef.value?.setFormData(data) editRef.value?.setFormData(data)
} }
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm('确定要删除?')
await apiProjectProgressPaymentDetailDelete({ id }) await apiProjectProgressPaymentDetailDelete({ id })
getLists() getLists()
} }
getLists() getLists()

View File

@ -1,102 +1,114 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup <popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
ref="popupRef" <el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
: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="dataid">
<el-input v-model="formData.dataid" clearable placeholder="请输入" />
</el-form-item>
<el-form-item label="单据编号" prop="num">
<el-input v-model="formData.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input v-model="formData.project" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item label="项目编号" prop="project_num">
<el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" />
</el-form-item>
<el-form-item label="委托单位" prop="wt_unit">
<el-input v-model="formData.wt_unit" clearable placeholder="请输入委托单位" />
</el-form-item>
<el-form-item label="项目负责人" prop="xm_master">
<el-input v-model="formData.xm_master" clearable placeholder="请输入项目负责人" />
</el-form-item>
<el-form-item label="咨询类型" prop="zx_type">
<el-input v-model="formData.zx_type" clearable placeholder="请输入咨询类型" />
</el-form-item>
<el-form-item label="项目整改人" prop="zg_master">
<el-input v-model="formData.zg_master" clearable placeholder="请输入项目整改人" />
</el-form-item>
<el-form-item label="登记人" prop="dj_person">
<el-input v-model="formData.dj_person" clearable placeholder="请输入登记人" />
</el-form-item>
<el-form-item label="登记日期" prop="apptime">
<el-input v-model="formData.apptime" clearable placeholder="请输入登记日期" />
</el-form-item>
<el-form-item label="存在问题" prop="problem">
<el-input v-model="formData.problem" clearable placeholder="请输入存在问题" />
</el-form-item>
<el-form-item label="修改情况" prop="deal_desc">
<el-input v-model="formData.deal_desc" 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="附件" prop="annex">
<material-picker v-model="formData.annex" />
</el-form-item>
</el-form> <el-form-item label="单据编号" prop="num">
</popup> <el-input v-model="formData.num" clearable placeholder="系统自动生成" disabled />
</div> </el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@click="showDialog = true" />
</el-form-item>
<el-form-item label="项目编号" prop="project_num">
<el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" />
</el-form-item>
<el-form-item label="委托单位" prop="wt_unit">
<el-input v-model="formData.wt_unit" clearable placeholder="请输入委托单位" />
</el-form-item>
<el-form-item label="项目负责人" prop="xm_master">
<el-input v-model="formData.xm_master" clearable placeholder="请输入项目负责人" />
</el-form-item>
<el-form-item label="咨询类型" prop="zx_type">
<el-input v-model="formData.zx_type" clearable placeholder="请输入咨询类型" />
</el-form-item>
<el-form-item label="项目整改人" prop="zg_master">
<el-input v-model="formData.zg_master" clearable placeholder="点击选择" @click="userclick('zg_master')" />
</el-form-item>
<el-form-item label="登记人" prop="dj_person">
<el-input v-model="formData.dj_person" clearable placeholder="请输入登记人" />
</el-form-item>
<el-form-item label="登记日期" prop="apptime">
<el-date-picker class="flex-1 !flex" v-model="formData.apptime" clearable type="date"
value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="存在问题" prop="problem">
<el-input v-model="formData.problem" clearable placeholder="请输入存在问题" />
</el-form-item>
<el-form-item label="修改情况" prop="deal_desc">
<el-input v-model="formData.deal_desc" 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="附件">
<annexUpload :annex="formData.annex" @handleAvatarSuccess="handleAvatarSuccess_four"
@delFile="delFileFn" />
</el-form-item>
<el-dialog v-model="showDialog" title="选择项目" width="70%">
<cost_project @customEvent="customEvent"></cost_project>
</el-dialog>
<div v-if="showDialog3">
<personnelselector ref="personnel" @confirm="submituser" type="1">
</personnelselector>
</div>
</el-form>
</popup>
</div>
</template> </template>
<script lang="ts" setup name="projectRectificationEdit"> <script lang="ts" setup name="projectRectificationEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiProjectRectificationAdd, apiProjectRectificationEdit, apiProjectRectificationDetail } from '@/api/project_rectification' import { apiProjectRectificationAdd, apiProjectRectificationEdit, } from '@/api/project_rectification'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
default: () => ({}) default: () => ({})
} }
}) })
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
const showDialog = ref(false)
const showDialog3 = ref(false)
const personnel = ref<any>()
const handleAvatarSuccess_four = (response: any) => {
Array.isArray(formData.annex) ? '' : 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(() => { const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目整改' : '新增项目整改' return mode.value == 'edit' ? '编辑项目整改' : '新增项目整改'
}) })
// //
const formData = reactive({ const formData = reactive({
id: '', id: '',
dataid: '', dataid: '',
num: '', num: '',
project: '', project_id: '',
project_num: '', project_name: '',
wt_unit: '', project_num: '',
xm_master: '', wt_unit: '',
zx_type: '', xm_master: '',
zg_master: '', zx_type: '',
dj_person: '', zg_master: '',
apptime: '', dj_person: '',
problem: '', apptime: '',
deal_desc: '', problem: '',
remark: '', deal_desc: '',
annex: '', remark: '',
annex: [],
projectInfo: {}
}) })
@ -105,55 +117,81 @@ const formData = reactive({
const formRules = reactive<any>({ const formRules = reactive<any>({
}) })
const customEvent = (e: any) => {
formData.project_id = e.id
formData.project_name = e.project_name
formData.project_num = e.project_num
showDialog.value = false
}
const tableKey = ref('')
//
const userclick = async (key) => {
tableKey.value = key
showDialog3.value = true
await nextTick()
personnel.value.open()
}
//
const submituser = (e: any) => {
formData[tableKey.value] = e.name
// formData.project_change_visa_content[tableIndex.value][tableKey.value + '_id'] = e.id
showDialog3.value = false
}
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
}
} }
} formData.project_id = formData.projectInfo.id
formData.project_name = formData.projectInfo.project_name
formData.project_num = formData.projectInfo.project_num
} }
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
const data = await apiProjectRectificationDetail({ const data = await apiProjectRectificationDetail({
id: row.id id: row.id
}) })
setFormData(data) setFormData(data)
} }
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData, } const data = { ...formData, }
mode.value == 'edit' mode.value == 'edit'
? await apiProjectRectificationEdit(data) ? await apiProjectRectificationEdit(data)
: await apiProjectRectificationAdd(data) : await apiProjectRectificationAdd(data)
popupRef.value?.close() popupRef.value?.close()
emit('success') emit('success')
} }
// //
const open = (type = 'add') => { const open = (type = 'add') => {
mode.value = type mode.value = type
popupRef.value?.open() popupRef.value?.open()
} }
// //
const handleClose = () => { const handleClose = () => {
emit('close') emit('close')
} }
defineExpose({ defineExpose({
open, open,
setFormData, setFormData,
getDetail getDetail
}) })
</script> </script>

View File

@ -1,91 +1,74 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form <el-form class="mb-[-16px]" :model="queryParams" inline>
class="mb-[-16px]" <el-form-item label="单据编号" prop="num">
:model="queryParams" <el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
inline </el-form-item>
> <el-form-item label="项目名称" prop="project">
<el-form-item label="单据编号" prop="num"> <el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" /> </el-form-item>
</el-form-item> <el-form-item label="项目编号" prop="project_num">
<el-form-item label="项目名称" prop="project"> <el-input class="w-[280px]" v-model="queryParams.project_num" clearable placeholder="请输入项目编号" />
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" /> </el-form-item>
</el-form-item> <el-form-item>
<el-form-item label="项目编号" prop="project_num"> <el-button type="primary" @click="resetPage">查询</el-button>
<el-input class="w-[280px]" v-model="queryParams.project_num" clearable placeholder="请输入项目编号" /> <el-button @click="resetParams">重置</el-button>
</el-form-item> </el-form-item>
</el-form>
<el-form-item> </el-card>
<el-button type="primary" @click="resetPage">查询</el-button> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button @click="resetParams">重置</el-button> <el-button v-perms="['project_process_management.project_rectification/add']" type="primary" @click="handleAdd">
</el-form-item> <template #icon>
</el-form> <icon name="el-icon-Plus" />
</el-card> </template>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> 新增
<el-button v-perms="['project_process_management.project_rectification/add']" type="primary" @click="handleAdd"> </el-button>
<template #icon> <el-button v-perms="['project_process_management.project_rectification/delete']" :disabled="!selectData.length"
<icon name="el-icon-Plus" /> @click="handleDelete(selectData)">
</template>
新增
</el-button>
<el-button
v-perms="['project_process_management.project_rectification/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="" prop="dataid" show-overflow-tooltip />
<el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project" show-overflow-tooltip />
<el-table-column label="项目编号" prop="project_num" show-overflow-tooltip />
<el-table-column label="委托单位" prop="wt_unit" show-overflow-tooltip />
<el-table-column label="项目负责人" prop="xm_master" show-overflow-tooltip />
<el-table-column label="咨询类型" prop="zx_type" show-overflow-tooltip />
<el-table-column label="项目整改人" prop="zg_master" show-overflow-tooltip />
<el-table-column label="登记人" prop="dj_person" show-overflow-tooltip />
<el-table-column label="登记日期" prop="apptime" show-overflow-tooltip />
<el-table-column label="存在问题" prop="problem" show-overflow-tooltip />
<el-table-column label="修改情况" prop="deal_desc" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button
v-perms="['project_process_management.project_rectification/edit']"
type="primary"
link
@click="handleEdit(row)"
>
编辑
</el-button>
<el-button
v-perms="['project_process_management.project_rectification/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
删除 删除
</el-button> </el-button>
</template> <div class="mt-4">
</el-table-column> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
</el-table> <el-table-column type="selection" width="55" />
</div> <el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<div class="flex mt-4 justify-end"> <el-table-column label="项目名称" prop="projectInfo.project_name" show-overflow-tooltip />
<pagination v-model="pager" @change="getLists" /> <el-table-column label="项目编号" prop="projectInfo.project_num" show-overflow-tooltip />
</div> <el-table-column label="委托单位" prop="wt_unit" show-overflow-tooltip />
</el-card> <el-table-column label="项目负责人" prop="xm_master" show-overflow-tooltip />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> <el-table-column label="咨询类型" prop="zx_type" show-overflow-tooltip />
</div> <el-table-column label="项目整改人" prop="zg_master" show-overflow-tooltip />
<el-table-column label="登记人" prop="dj_person" show-overflow-tooltip />
<el-table-column label="登记日期" prop="apptime" show-overflow-tooltip />
<el-table-column label="存在问题" prop="problem" show-overflow-tooltip />
<el-table-column label="修改情况" prop="deal_desc" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['project_process_management.project_rectification/edit']" type="primary"
link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['project_process_management.project_rectification/delete']" type="danger"
link @click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template> </template>
<script lang="ts" setup name="projectRectificationLists"> <script lang="ts" setup name="projectRectificationLists">
import { usePaging } from '@/hooks/usePaging' import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from '@/hooks/useDictOptions'
import { apiProjectRectificationLists, apiProjectRectificationDelete } from '@/api/project_rectification' import { apiProjectRectificationLists, apiProjectRectificationDelete, apiProjectRectificationDetail } from '@/api/project_rectification'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import EditPopup from './edit.vue' import EditPopup from './edit.vue'
@ -97,9 +80,9 @@ const showEdit = ref(false)
// //
const queryParams = reactive({ const queryParams = reactive({
num: '', num: '',
project: '', project: '',
project_num: '', project_num: '',
}) })
// //
@ -107,7 +90,7 @@ const selectData = ref<any[]>([])
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id)
} }
// //
@ -115,30 +98,31 @@ const { dictData } = useDictData('')
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiProjectRectificationLists, fetchFun: apiProjectRectificationLists,
params: queryParams params: queryParams
}) })
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('add') editRef.value?.open('add')
} }
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
showEdit.value = true let res = await apiProjectRectificationDetail({ id: data.id })
await nextTick() showEdit.value = true
editRef.value?.open('edit') await nextTick()
editRef.value?.setFormData(data) editRef.value?.open('edit')
editRef.value?.setFormData(res)
} }
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm('确定要删除?')
await apiProjectRectificationDelete({ id }) await apiProjectRectificationDelete({ id })
getLists() getLists()
} }
getLists() getLists()

View File

@ -1,109 +1,150 @@
<template> <template>
<div class="edit-popup"> <div class="edit-popup">
<popup <popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
ref="popupRef" <el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
:title="popupTitle" <el-form-item label="单据编号" prop="num">
:async="true" <el-input v-model="formData.num" clearable placeholder="系统自动生成" disabled />
width="550px" </el-form-item>
@confirm="handleSubmit" <el-form-item label="项目名称" prop="project">
@close="handleClose" <el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
> @click="showDialog = true" />
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules"> </el-form-item>
<el-form-item label="" prop="dataid"> <el-form-item label="项目编号" prop="project_num">
<el-input v-model="formData.dataid" clearable placeholder="请输入" /> <el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" />
</el-form-item> </el-form-item>
<el-form-item label="单据编号" prop="num"> <el-form-item label="委托单位" prop="wt_unit">
<el-input v-model="formData.num" clearable placeholder="请输入单据编号" /> <el-input v-model="formData.wt_unit" clearable placeholder="请输入委托单位" />
</el-form-item> </el-form-item>
<el-form-item label="项目名称" prop="project"> <el-form-item label="建设单位" prop="jsdw">
<el-input v-model="formData.project" clearable placeholder="请输入项目名称" /> <el-input v-model="formData.jsdw" clearable placeholder="请输入建设单位" />
</el-form-item> </el-form-item>
<el-form-item label="项目编号" prop="project_num"> <el-form-item label="部门负责人" prop="bmfz">
<el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" /> <el-input v-model="formData.bmfz" clearable placeholder="点击选择" @click="userclick('bmfz')" />
</el-form-item> </el-form-item>
<el-form-item label="委托单位" prop="wt_unit"> <el-form-item label="项目负责人" prop="xmfz">
<el-input v-model="formData.wt_unit" clearable placeholder="请输入委托单位" /> <el-input v-model="formData.xmfz" clearable placeholder="请输入项目负责人" />
</el-form-item> </el-form-item>
<el-form-item label="建设单位" prop="jsdw"> <el-form-item label="踏勘日期" prop="riqi">
<el-input v-model="formData.jsdw" clearable placeholder="请输入建设单位" /> <el-date-picker class="flex-1 !flex" v-model="formData.riqi" clearable type="date"
</el-form-item> value-format="YYYY-MM-DD" placeholder="请选择日期">
<el-form-item label="部门负责人" prop="bmfz"> </el-date-picker>
<el-input v-model="formData.bmfz" clearable placeholder="请输入部门负责人" /> </el-form-item>
</el-form-item> <el-form-item label="踏勘人员" prop="people">
<el-form-item label="项目负责人" prop="xmfz"> <el-input v-model="formData.people" clearable placeholder="点击选择" @click="userclick('people')" />
<el-input v-model="formData.xmfz" clearable placeholder="请输入项目负责人" /> </el-form-item>
</el-form-item> <el-form-item label="登记人" prop="djr">
<el-form-item label="踏勘日期" prop="riqi"> <el-input v-model="formData.djr" clearable placeholder="请输入登记人" />
<el-input v-model="formData.riqi" clearable placeholder="请输入踏勘日期" /> </el-form-item>
</el-form-item> <el-form-item label="登记日期" prop="apptime">
<el-form-item label="踏勘人员" prop="people"> <el-date-picker class="flex-1 !flex" v-model="formData.apptime" clearable type="date"
<el-input v-model="formData.people" clearable placeholder="请输入踏勘人员" /> value-format="YYYY-MM-DD" placeholder="请选择日期">
</el-form-item> </el-date-picker>
<el-form-item label="登记人" prop="djr"> </el-form-item>
<el-input v-model="formData.djr" clearable placeholder="请输入登记人" /> <el-form-item label="踏勘内容" prop="content">
</el-form-item> <el-input v-model="formData.content" clearable placeholder="请输入踏勘内容" />
<el-form-item label="登记日期" prop="apptime"> </el-form-item>
<el-input v-model="formData.apptime" clearable placeholder="请输入登记日期" /> <el-form-item label="核实结果" prop="result">
</el-form-item> <el-input v-model="formData.result" clearable placeholder="请输入核实结果" />
<el-form-item label="踏勘内容" prop="content"> </el-form-item>
<el-input v-model="formData.content" clearable placeholder="请输入踏勘内容" /> <el-form-item label="备注" prop="remark">
</el-form-item> <el-input v-model="formData.remark" clearable placeholder="请输入" />
<el-form-item label="核实结果" prop="result"> </el-form-item>
<el-input v-model="formData.result" clearable placeholder="请输入核实结果" /> <el-form-item label="附件">
</el-form-item> <annexUpload :annex="formData.annex" @handleAvatarSuccess="handleAvatarSuccess_four"
<el-form-item label="" prop="remark"> @delFile="delFileFn" />
<el-input v-model="formData.remark" clearable placeholder="请输入" /> </el-form-item>
</el-form-item>
</el-form> <el-dialog v-model="showDialog" title="选择项目" width="70%">
</popup> <cost_project @customEvent="customEvent"></cost_project>
</div> </el-dialog>
<div v-if="showDialog3">
<personnelselector ref="personnel" @confirm="submituser" type="1">
</personnelselector>
</div>
</el-form>
</popup>
</div>
</template> </template>
<script lang="ts" setup name="projectSurveySignatureEdit"> <script lang="ts" setup name="projectSurveySignatureEdit">
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import { apiProjectSurveySignatureAdd, apiProjectSurveySignatureEdit, apiProjectSurveySignatureDetail } from '@/api/project_survey_signature' import { apiProjectSurveySignatureAdd, apiProjectSurveySignatureEdit, } from '@/api/project_survey_signature'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue' import type { PropType } from 'vue'
defineProps({ defineProps({
dictData: { dictData: {
type: Object as PropType<Record<string, any[]>>, type: Object as PropType<Record<string, any[]>>,
default: () => ({}) default: () => ({})
} }
}) })
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>() const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>() const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add') const mode = ref('add')
const showDialog = ref(false)
const showDialog3 = ref(false)
const personnel = ref<any>()
const handleAvatarSuccess_four = (response: any) => {
Array.isArray(formData.annex) ? '' : 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(() => { const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目踏勘会签' : '新增项目踏勘会签' return mode.value == 'edit' ? '编辑项目踏勘会签' : '新增项目踏勘会签'
}) })
// //
const formData = reactive({ const formData = reactive({
id: '', id: '',
dataid: '', dataid: '',
num: '', num: '',
project: '', project_id: '',
project_num: '', project_name: '',
wt_unit: '', project_num: '',
jsdw: '', wt_unit: '',
bmfz: '', jsdw: '',
xmfz: '', bmfz: '',
riqi: '', xmfz: '',
people: '', riqi: '',
djr: '', people: '',
apptime: '', djr: '',
content: '', apptime: '',
result: '', projectInfo: {},
remark: '', content: '',
result: '',
remark: '',
annex: [],
}) })
const customEvent = (e: any) => {
formData.project_id = e.id
formData.project_name = e.project_name
formData.project_num = e.project_num
showDialog.value = false
}
const tableKey = ref('')
//
const userclick = async (key) => {
tableKey.value = key
showDialog3.value = true
await nextTick()
personnel.value.open()
}
//
const submituser = (e: any) => {
formData[tableKey.value] = e.name
// formData.project_change_visa_content[tableIndex.value][tableKey.value + '_id'] = e.id
showDialog3.value = false
}
// //
const formRules = reactive<any>({ const formRules = reactive<any>({
@ -113,51 +154,53 @@ const formRules = reactive<any>({
// //
const setFormData = async (data: Record<any, any>) => { const setFormData = async (data: Record<any, any>) => {
for (const key in formData) { for (const key in formData) {
if (data[key] != null && data[key] != undefined) { if (data[key] != null && data[key] != undefined) {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
}
} }
} formData.project_id = formData.projectInfo.id
formData.project_name = formData.projectInfo.project_name
formData.project_num = formData.projectInfo.project_num
} }
const getDetail = async (row: Record<string, any>) => { const getDetail = async (row: Record<string, any>) => {
const data = await apiProjectSurveySignatureDetail({ const data = await apiProjectSurveySignatureDetail({
id: row.id id: row.id
}) })
setFormData(data) setFormData(data)
} }
// //
const handleSubmit = async () => { const handleSubmit = async () => {
await formRef.value?.validate() await formRef.value?.validate()
const data = { ...formData, } const data = { ...formData, }
mode.value == 'edit' mode.value == 'edit'
? await apiProjectSurveySignatureEdit(data) ? await apiProjectSurveySignatureEdit(data)
: await apiProjectSurveySignatureAdd(data) : await apiProjectSurveySignatureAdd(data)
popupRef.value?.close() popupRef.value?.close()
emit('success') emit('success')
} }
// //
const open = (type = 'add') => { const open = (type = 'add') => {
mode.value = type mode.value = type
popupRef.value?.open() popupRef.value?.open()
} }
// //
const handleClose = () => { const handleClose = () => {
emit('close') emit('close')
} }
defineExpose({ defineExpose({
open, open,
setFormData, setFormData,
getDetail getDetail
}) })
</script> </script>

View File

@ -1,11 +1,7 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form <el-form class="mb-[-16px]" :model="queryParams" inline>
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="单据编号" prop="num"> <el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" /> <el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item> </el-form-item>
@ -29,20 +25,16 @@
</template> </template>
新增 新增
</el-button> </el-button>
<el-button <el-button v-perms="['project_process_management.project_survey_signature/delete']" :disabled="!selectData.length"
v-perms="['project_process_management.project_survey_signature/delete']" @click="handleDelete(selectData)">
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除 删除
</el-button> </el-button>
<div class="mt-4"> <div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange"> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column label="" prop="dataid" show-overflow-tooltip />
<el-table-column label="单据编号" prop="num" show-overflow-tooltip /> <el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="project" show-overflow-tooltip /> <el-table-column label="项目名称" prop="projectInfo.project_name" show-overflow-tooltip />
<el-table-column label="项目编号" prop="project_num" show-overflow-tooltip /> <el-table-column label="项目编号" prop="projectInfo.project_num" show-overflow-tooltip />
<el-table-column label="委托单位" prop="wt_unit" show-overflow-tooltip /> <el-table-column label="委托单位" prop="wt_unit" show-overflow-tooltip />
<el-table-column label="建设单位" prop="jsdw" show-overflow-tooltip /> <el-table-column label="建设单位" prop="jsdw" show-overflow-tooltip />
<el-table-column label="部门负责人" prop="bmfz" show-overflow-tooltip /> <el-table-column label="部门负责人" prop="bmfz" show-overflow-tooltip />
@ -53,31 +45,22 @@
<el-table-column label="登记日期" prop="apptime" show-overflow-tooltip /> <el-table-column label="登记日期" prop="apptime" show-overflow-tooltip />
<el-table-column label="踏勘内容" prop="content" show-overflow-tooltip /> <el-table-column label="踏勘内容" prop="content" show-overflow-tooltip />
<el-table-column label="核实结果" prop="result" show-overflow-tooltip /> <el-table-column label="核实结果" prop="result" show-overflow-tooltip />
<el-table-column label="" prop="remark" 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="120" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button <el-button v-perms="['project_process_management.project_survey_signature/edit']" type="primary" link
v-perms="['project_process_management.project_survey_signature/edit']" @click="handleEdit(row)">
type="primary"
link
@click="handleEdit(row)"
>
编辑 编辑
</el-button> </el-button>
<el-button <el-button v-perms="['project_process_management.project_survey_signature/delete']" type="danger" link
v-perms="['project_process_management.project_survey_signature/delete']" @click="handleDelete(row.id)">
type="danger"
link
@click="handleDelete(row.id)"
>
删除 删除
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
<div class="flex mt-4 justify-end"> <div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" /> <pagination v-model="pager" @change="getLists" />
</div> </div>
</el-card> </el-card>
@ -88,7 +71,7 @@
<script lang="ts" setup name="projectSurveySignatureLists"> <script lang="ts" setup name="projectSurveySignatureLists">
import { usePaging } from '@/hooks/usePaging' import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions' import { useDictData } from '@/hooks/useDictOptions'
import { apiProjectSurveySignatureLists, apiProjectSurveySignatureDelete } from '@/api/project_survey_signature' import { apiProjectSurveySignatureLists, apiProjectSurveySignatureDelete, apiProjectSurveySignatureDetail } from '@/api/project_survey_signature'
import { timeFormat } from '@/utils/util' import { timeFormat } from '@/utils/util'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import EditPopup from './edit.vue' import EditPopup from './edit.vue'
@ -131,10 +114,11 @@ const handleAdd = async () => {
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
let res = await apiProjectSurveySignatureDetail({ id: data.id })
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('edit') editRef.value?.open('edit')
editRef.value?.setFormData(data) editRef.value?.setFormData(res)
} }
// //

View File

@ -1,68 +1,91 @@
<template> <template>
<div> <div>
<el-card class="!border-none mb-4" shadow="never"> <el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline> <el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="项目名称" prop="project"> <el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" /> <el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button> <el-button @click="resetParams">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never"> <el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['task.task_allocation/add']" type="primary" @click="handleAdd"> <el-button v-perms="['task.task_allocation/add']" type="primary" @click="handleAdd">
<template #icon> <template #icon>
<icon name="el-icon-Plus" /> <icon name="el-icon-Plus" />
</template> </template>
新增 新增
</el-button> </el-button>
<el-button v-perms="['task.task_allocation/delete']" :disabled="!selectData.length" <el-button v-perms="['task.task_allocation/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)"> @click="handleDelete(selectData)">
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<!-- <el-table-column label="" prop="dataid" show-overflow-tooltip /> -->
<el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="projectInfo.project_name" show-overflow-tooltip />
<el-table-column label="项目编号" prop="projectInfo.project_num" show-overflow-tooltip />
<el-table-column label="项目负责人" prop="projectInfo.principal" show-overflow-tooltip />
<el-table-column label="登记日期" prop="apptime" show-overflow-tooltip />
<!-- <el-table-column label="附件" prop="annex" show-overflow-tooltip>
<template #default="{ row }">
<div v-if="row.annex && row.annex.length > 0">
<div v-for="(item, i) in row.annex " :key='i'>
<el-link :href="item" target="_blank">文件{{ i + 1 }}查看</el-link>
</div>
</div>
<div v-else>
暂无文件
</div>
</template>
</el-table-column> -->
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['task.task_allocation/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['task.task_allocation/delete']" type="danger" link @click="handleDelete(row.id)">
删除 删除
</el-button> </el-button>
</template> <div class="mt-4">
</el-table-column> <el-table :data="pager.lists" @selection-change="handleSelectionChange">
</el-table> <el-table-column type="selection" width="55" />
</div> <el-table-column type="expand">
<div class="flex justify-end mt-4"> <template #default="props">
<pagination v-model="pager" @change="getLists" /> <div m="4">
</div> <el-table :data="props.row.taskTypeInfo">
</el-card> <el-table-column label="任务名称" prop="taskTypeInfo.name" show-overflow-tooltip />
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> <el-table-column label="工序" prop="process" show-overflow-tooltip />
</div> <el-table-column label="任务类型" prop="task_type_id">
<template #default="{ row }">
<dict-value :options="dictData.task_type" :value="row.task_type_id" />
</template>
</el-table-column>
<el-table-column label="专业类型" prop="professional_type">
<template #default="{ row }">
<dict-value :options="dictData.major_type" :value="row.professional_type" />
</template>
</el-table-column>
<el-table-column label="工程师" prop="engineer" show-overflow-tooltip />
<el-table-column label="任务级次" prop="level" show-overflow-tooltip />
<el-table-column label="一级审核人" prop="first_reviewer" show-overflow-tooltip />
<el-table-column label="二级审核人" prop="secondary_reviewer" show-overflow-tooltip />
<el-table-column label="三级审核人" prop="third_level_reviewer" show-overflow-tooltip />
<el-table-column label="中标金额(元)" prop="bid_winning_amount" show-overflow-tooltip />
<el-table-column label="送审造价(元)" prop="cost" show-overflow-tooltip />
<el-table-column label="第三方核定金额(元)" prop="approved_amount" show-overflow-tooltip />
<el-table-column label="施工单位" prop="construction_unit" show-overflow-tooltip />
<el-table-column label="施工单位id" prop="construction_unit_id" show-overflow-tooltip />
<el-table-column label="联系人" prop="contact" show-overflow-tooltip />
<el-table-column label="联系电话" prop="contact_phone" show-overflow-tooltip />
<el-table-column label="天数" prop="days" show-overflow-tooltip />
<el-table-column label="开始日期" prop="start_date" show-overflow-tooltip />
<el-table-column label="结束日期" prop="end_date" show-overflow-tooltip />
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
</el-table>
</div>
</template>
</el-table-column>
<el-table-column label="单据编号" prop="num" show-overflow-tooltip />
<el-table-column label="项目名称" prop="projectInfo.project_name" show-overflow-tooltip />
<el-table-column label="项目编号" prop="projectInfo.project_num" show-overflow-tooltip />
<el-table-column label="项目负责人" prop="projectInfo.principal" show-overflow-tooltip />
<el-table-column label="登记日期" prop="apptime" show-overflow-tooltip />
<el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }">
<el-button v-perms="['task.task_allocation/edit']" type="primary" link @click="handleEdit(row)">
编辑
</el-button>
<el-button v-perms="['task.task_allocation/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</template> </template>
<script lang="ts" setup name="taskAllocationLists"> <script lang="ts" setup name="taskAllocationLists">
@ -80,7 +103,7 @@ const showEdit = ref(false)
// //
const queryParams = reactive({ const queryParams = reactive({
project: '', project: '',
}) })
// //
@ -88,7 +111,7 @@ const selectData = ref<any[]>([])
// //
const handleSelectionChange = (val: any[]) => { const handleSelectionChange = (val: any[]) => {
selectData.value = val.map(({ id }) => id) selectData.value = val.map(({ id }) => id)
} }
// //
@ -96,31 +119,31 @@ const { dictData } = useDictData('task_type,major_type')
// //
const { pager, getLists, resetParams, resetPage } = usePaging({ const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiTaskAllocationLists, fetchFun: apiTaskAllocationLists,
params: queryParams params: queryParams
}) })
// //
const handleAdd = async () => { const handleAdd = async () => {
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('add') editRef.value?.open('add')
} }
// //
const handleEdit = async (data: any) => { const handleEdit = async (data: any) => {
let res = await apiTaskAllocationDetail({ id: data.id }) let res = await apiTaskAllocationDetail({ id: data.id })
showEdit.value = true showEdit.value = true
await nextTick() await nextTick()
editRef.value?.open('edit') editRef.value?.open('edit')
editRef.value?.setFormData(res) editRef.value?.setFormData(res)
} }
// //
const handleDelete = async (id: number | any[]) => { const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?') await feedback.confirm('确定要删除?')
await apiTaskAllocationDelete({ id }) await apiTaskAllocationDelete({ id })
getLists() getLists()
} }
getLists() getLists()