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

View File

@ -1,112 +1,90 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="申请编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入申请编号" />
</el-form-item>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="申请编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入申请编号" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.apply_with_seal/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['project_process_management.apply_with_seal/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="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-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.apply_with_seal/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project_process_management.apply_with_seal/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</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="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="操作" 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>
<script lang="ts" setup name="applyWithSealLists">
import { usePaging } from '@/hooks/usePaging'
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 feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
@ -118,7 +96,7 @@ const showEdit = ref(false)
//
const queryParams = reactive({
num: '',
num: '',
})
//
@ -126,7 +104,7 @@ const selectData = ref<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({
fetchFun: apiApplyWithSealLists,
params: queryParams
fetchFun: apiApplyWithSealLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
let res = await apiApplyWithSealDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiApplyWithSealDelete({ id })
getLists()
await feedback.confirm('确定要删除?')
await apiApplyWithSealDelete({ id })
getLists()
}
getLists()

View File

@ -83,8 +83,6 @@ import customDialog from '@/components/build_division/index.vue'
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
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 annexUpload from "@/components/annexUpload/index.vue"

View File

@ -1,121 +1,205 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="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="bm_master">
<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>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="140px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="单据编号" prop="num">
<el-input v-model="formData.num" clearable placeholder="系统自动生成" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="project">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@click="showDialog = true" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编号" prop="project_num">
<el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
</el-form>
</popup>
</div>
<el-form-item label="部门负责人" prop="bm_master">
<el-input v-model="formData.bm_master" clearable placeholder="请选择部门负责人" @click="userclick()" />
</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>
<script lang="ts" setup name="jianliProjectProgressReportEdit">
import type { FormInstance } from 'element-plus'
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 type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const 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(() => {
return mode.value == 'edit' ? '编辑项目进度汇报' : '新增项目进度汇报'
return mode.value == 'edit' ? '编辑项目进度汇报' : '新增项目进度汇报'
})
//
const formData = reactive({
id: '',
dataid: '',
num: '',
project: '',
project_num: '',
bm_master: '',
wt_unit: '',
xm_master: '',
start_date: '',
end_date: '',
duration: '',
working_hours: '',
done_progress: '',
bjd_progress: '',
djr: '',
apptime: '',
jdms: '',
datas: '',
fd_23: '',
id: '',
dataid: '',
num: '',
project_id: '',
project_name: '',
project_num: '',
bm_master: '',
wt_unit: '',
xm_master: '',
start_date: '',
end_date: '',
duration: '',
working_hours: '',
done_progress: '',
bjd_progress: '',
djr: '',
apptime: '',
jdms: '',
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>({
@ -125,51 +209,54 @@ const formRules = reactive<any>({
//
const setFormData = async (data: Record<any, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
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 data = await apiJianliProjectProgressReportDetail({
id: row.id
})
setFormData(data)
const data = await apiJianliProjectProgressReportDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiJianliProjectProgressReportEdit(data)
: await apiJianliProjectProgressReportAdd(data)
popupRef.value?.close()
emit('success')
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiJianliProjectProgressReportEdit(data)
: await apiJianliProjectProgressReportAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
open,
setFormData,
getDetail
})
</script>

View File

@ -1,95 +1,79 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</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>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</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-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.jianli_project_progress_report/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['project_process_management.jianli_project_progress_report/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="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-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.jianli_project_progress_report/add']" type="primary"
@click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project_process_management.jianli_project_progress_report/delete']"
:disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</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="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="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>
</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>
<script lang="ts" setup name="jianliProjectProgressReportLists">
import { usePaging } from '@/hooks/usePaging'
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 feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
@ -101,10 +85,10 @@ const showEdit = ref(false)
//
const queryParams = reactive({
num: '',
project: '',
project_num: '',
datas: '',
num: '',
project: '',
project_num: '',
datas: '',
})
//
@ -112,7 +96,7 @@ const selectData = ref<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({
fetchFun: apiJianliProjectProgressReportLists,
params: queryParams
fetchFun: apiJianliProjectProgressReportLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
let res = await apiJianliProjectProgressReportDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiJianliProjectProgressReportDelete({ id })
getLists()
await feedback.confirm('确定要删除?')
await apiJianliProjectProgressReportDelete({ id })
getLists()
}
getLists()

View File

@ -1,127 +1,267 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="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>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
</el-form>
</popup>
</div>
<el-form-item label="单据编号" prop="num">
<el-input v-model="formData.num" clearable placeholder="系统自动生成" disabled />
</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>
<script lang="ts" setup name="projectChangeVisaEdit">
import type { FormInstance } from 'element-plus'
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 type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const showDialog3 = ref(false)
const personnel = ref<any>()
//
const popupTitle = computed(() => {
return mode.value == 'edit' ? '编辑项目变更签证' : '新增项目变更签证'
return mode.value == 'edit' ? '编辑项目变更签证' : '新增项目变更签证'
})
//
const formData = reactive({
id: '',
dataid: '',
num: '',
project: '',
project_num: '',
djr: '',
djrq: '',
id: '',
dataid: '',
num: '',
project_id: '',
project_name: "",
project_num: '',
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 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>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
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 data = await apiProjectChangeVisaDetail({
id: row.id
})
setFormData(data)
const data = await apiProjectChangeVisaDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiProjectChangeVisaEdit(data)
: await apiProjectChangeVisaAdd(data)
popupRef.value?.close()
emit('success')
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiProjectChangeVisaEdit(data)
: await apiProjectChangeVisaAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
open,
setFormData,
getDetail
})
</script>

View File

@ -1,85 +1,88 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</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>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</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-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_change_visa/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['project_process_management.project_change_visa/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="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-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_change_visa/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project_process_management.project_change_visa/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column type="expand">
<template #default="props">
<div m="4">
<el-table :data="props.row.taskTypeInfo">
<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="施工单位申报值" 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>
<script lang="ts" setup name="projectChangeVisaLists">
import { usePaging } from '@/hooks/usePaging'
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 feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
@ -91,9 +94,9 @@ const showEdit = ref(false)
//
const queryParams = reactive({
num: '',
project: '',
project_num: '',
num: '',
project: '',
project_num: '',
})
//
@ -101,7 +104,7 @@ const selectData = ref<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({
fetchFun: apiProjectChangeVisaLists,
params: queryParams
fetchFun: apiProjectChangeVisaLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
let res = await apiProjectChangeVisaDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiProjectChangeVisaDelete({ id })
getLists()
await feedback.confirm('确定要删除?')
await apiProjectChangeVisaDelete({ id })
getLists()
}
getLists()

View File

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

View File

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

View File

@ -28,7 +28,7 @@
</el-col>
<el-col :span="8">
<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-col>
<el-col :span="8">
@ -91,7 +91,88 @@
<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>
<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>
</div>
</template>
@ -99,8 +180,7 @@
<script lang="ts" setup name="projectCommissionEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiProjectCommissionAdd, apiProjectCommissionEdit, apiProjectCommissionDetail } from '@/api/project_commission'
import { timeFormat } from '@/utils/util'
import { apiProjectCommissionAdd, apiProjectCommissionEdit, } from '@/api/project_commission'
import type { PropType } from 'vue'
defineProps({
dictData: {
@ -113,7 +193,8 @@ const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const showDialog3 = ref(false)
const personnel = ref<any>()
//
@ -131,6 +212,8 @@ const formData = reactive({
project_num: '',
head: '',
affcontract: '',
affcontract_name: "",
contract: {},
industry: '',
hk: '',
rate: '',
@ -140,7 +223,21 @@ const formData = reactive({
djr: '',
apptime: '',
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) => {
@ -149,10 +246,56 @@ const customEvent = (e) => {
formData.project_name = e.project_name
formData.project_num = e.project_num
formData.head = e.principal
formData.affcontract = e.contract.id
formData.affcontract_name = e.contract.contract_name
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>({
@ -167,7 +310,12 @@ const setFormData = async (data: Record<any, any>) => {
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>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</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>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</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-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_commission/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<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-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_commission/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project_commission/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</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>
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange" row-key="id">
<el-table-column type="selection" width="55" />
<el-table-column type="expand">
<template #default="props">
<div m="4">
<el-table :data="props.row.children">
<el-table-column label="工程师" prop="engineer" show-overflow-tooltip />
<el-table-column label="任务名称" prop="task_name" show-overflow-tooltip />
<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>
<script lang="ts" setup name="projectCommissionLists">
import { usePaging } from '@/hooks/usePaging'
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 feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
@ -82,9 +112,9 @@ const showEdit = ref(false)
//
const queryParams = reactive({
num: '',
project: '',
project_num: '',
num: '',
project: '',
project_num: '',
})
//
@ -92,38 +122,39 @@ const selectData = ref<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({
fetchFun: apiProjectCommissionLists,
params: queryParams
fetchFun: apiProjectCommissionLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
let res = await apiProjectCommissionDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiProjectCommissionDelete({ id })
getLists()
await feedback.confirm('确定要删除?')
await apiProjectCommissionDelete({ id })
getLists()
}
getLists()

View File

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

View File

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

View File

@ -1,143 +1,373 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="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-item label="进度申报造价合计" prop="sbhj">
<el-input v-model="formData.sbhj" clearable placeholder="请输入进度申报造价合计" />
</el-form-item>
<el-form-item label="进度审核造价合计" prop="shhj">
<el-input v-model="formData.shhj" clearable placeholder="请输入进度审核造价合计" />
</el-form-item>
<el-form-item label="累计应付工程款合计" prop="ljhj">
<el-input v-model="formData.ljhj" clearable placeholder="请输入累计应付工程款合计" />
</el-form-item>
<el-form-item label="附件" prop="annex">
<material-picker v-model="formData.annex" />
</el-form-item>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="80vw" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item label="单据编号" prop="num">
<el-input v-model="formData.num" clearable placeholder="系统自动生成" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="project">
<el-input v-model="formData.project_name" clearable placeholder="点击选择项目" readonly
@click="showDialog = true" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目编号" prop="project_num">
<el-input v-model="formData.project_num" clearable placeholder="请输入项目编号" />
</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="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-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="进度申报造价合计" prop="sbhj" label-width="160px">
<el-input v-model="formData.sbhj" clearable placeholder="系统自动计算" disabled type='number' />
</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>
</popup>
</div>
<el-table-column label="付款比例(%)" prop="payment_rate" width="200px">
<template #default="{ row }">
<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>
<script lang="ts" setup name="projectProgressPaymentEdit">
import type { FormInstance } from 'element-plus'
import Popup from '@/components/popup/index.vue'
import { apiProjectProgressPaymentAdd, apiProjectProgressPaymentEdit, apiProjectProgressPaymentDetail } from '@/api/project_progress_payment'
import { timeFormat } from '@/utils/util'
import type { PropType } from 'vue'
import { number } from 'echarts/core'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
//
const 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({
id: '',
dataid: '',
num: '',
project: '',
project_num: '',
djr: '',
djrq: '',
sbhj: '',
shhj: '',
ljhj: '',
annex: '',
id: '',
dataid: '',
num: '',
project_id: '',
project_name: "",
project_num: '',
djr: '',
djrq: '',
sbhj: '',
shhj: '',
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 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>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
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 data = await apiProjectProgressPaymentDetail({
id: row.id
})
setFormData(data)
const data = await apiProjectProgressPaymentDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiProjectProgressPaymentEdit(data)
: await apiProjectProgressPaymentAdd(data)
popupRef.value?.close()
emit('success')
console.log(formData, 'formdata')
// return
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiProjectProgressPaymentEdit(data)
: await apiProjectProgressPaymentAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
open,
setFormData,
getDetail
})
</script>

View File

@ -1,93 +1,101 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</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>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</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-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_progress_payment/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['project_process_management.project_progress_payment/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="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-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_progress_payment/add']" type="primary"
@click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project_process_management.project_progress_payment/delete']"
:disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column type="expand">
<template #default="props">
<div m="4">
<el-table :data="props.row.taskTypeInfo">
<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>
</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>
<script lang="ts" setup name="projectProgressPaymentLists">
import { usePaging } from '@/hooks/usePaging'
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 feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
@ -99,9 +107,9 @@ const showEdit = ref(false)
//
const queryParams = reactive({
num: '',
project: '',
project_num: '',
num: '',
project: '',
project_num: '',
})
//
@ -109,7 +117,7 @@ const selectData = ref<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({
fetchFun: apiProjectProgressPaymentLists,
params: queryParams
fetchFun: apiProjectProgressPaymentLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
let res = await apiProjectProgressPaymentDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiProjectProgressPaymentDelete({ id })
getLists()
await feedback.confirm('确定要删除?')
await apiProjectProgressPaymentDelete({ id })
getLists()
}
getLists()

View File

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

View File

@ -1,85 +1,70 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_progress_payment_detail/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button
v-perms="['project_process_management.project_progress_payment_detail/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
删除
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="" 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-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_progress_payment_detail/add']" type="primary"
@click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project_process_management.project_progress_payment_detail/delete']"
:disabled="!selectData.length" @click="handleDelete(selectData)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</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="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>
</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>
<script lang="ts" setup name="projectProgressPaymentDetailLists">
@ -105,7 +90,7 @@ const selectData = ref<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({
fetchFun: apiProjectProgressPaymentDetailLists,
params: queryParams
fetchFun: apiProjectProgressPaymentDetailLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiProjectProgressPaymentDetailDelete({ id })
getLists()
await feedback.confirm('确定要删除?')
await apiProjectProgressPaymentDetailDelete({ id })
getLists()
}
getLists()

View File

@ -1,102 +1,114 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
@confirm="handleSubmit"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="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>
<div class="edit-popup">
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
<el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
</el-form>
</popup>
</div>
<el-form-item label="单据编号" prop="num">
<el-input v-model="formData.num" clearable placeholder="系统自动生成" disabled />
</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>
<script lang="ts" setup name="projectRectificationEdit">
import type { FormInstance } from 'element-plus'
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 type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
const showDialog = ref(false)
const 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(() => {
return mode.value == 'edit' ? '编辑项目整改' : '新增项目整改'
return mode.value == 'edit' ? '编辑项目整改' : '新增项目整改'
})
//
const formData = reactive({
id: '',
dataid: '',
num: '',
project: '',
project_num: '',
wt_unit: '',
xm_master: '',
zx_type: '',
zg_master: '',
dj_person: '',
apptime: '',
problem: '',
deal_desc: '',
remark: '',
annex: '',
id: '',
dataid: '',
num: '',
project_id: '',
project_name: '',
project_num: '',
wt_unit: '',
xm_master: '',
zx_type: '',
zg_master: '',
dj_person: '',
apptime: '',
problem: '',
deal_desc: '',
remark: '',
annex: [],
projectInfo: {}
})
@ -105,55 +117,81 @@ const formData = reactive({
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>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
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 data = await apiProjectRectificationDetail({
id: row.id
})
setFormData(data)
const data = await apiProjectRectificationDetail({
id: row.id
})
setFormData(data)
}
//
const handleSubmit = async () => {
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiProjectRectificationEdit(data)
: await apiProjectRectificationAdd(data)
popupRef.value?.close()
emit('success')
await formRef.value?.validate()
const data = { ...formData, }
mode.value == 'edit'
? await apiProjectRectificationEdit(data)
: await apiProjectRectificationAdd(data)
popupRef.value?.close()
emit('success')
}
//
const open = (type = 'add') => {
mode.value = type
popupRef.value?.open()
mode.value = type
popupRef.value?.open()
}
//
const handleClose = () => {
emit('close')
emit('close')
}
defineExpose({
open,
setFormData,
getDetail
open,
setFormData,
getDetail
})
</script>

View File

@ -1,91 +1,74 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</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-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_rectification/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</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)"
>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</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-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['project_process_management.project_rectification/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['project_process_management.project_rectification/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
</div>
</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="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="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>
</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>
<script lang="ts" setup name="projectRectificationLists">
import { usePaging } from '@/hooks/usePaging'
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 feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
@ -97,9 +80,9 @@ const showEdit = ref(false)
//
const queryParams = reactive({
num: '',
project: '',
project_num: '',
num: '',
project: '',
project_num: '',
})
//
@ -107,7 +90,7 @@ const selectData = ref<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({
fetchFun: apiProjectRectificationLists,
params: queryParams
fetchFun: apiProjectRectificationLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
let res = await apiProjectRectificationDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiProjectRectificationDelete({ id })
getLists()
await feedback.confirm('确定要删除?')
await apiProjectRectificationDelete({ id })
getLists()
}
getLists()

View File

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

View File

@ -1,11 +1,7 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form
class="mb-[-16px]"
:model="queryParams"
inline
>
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="单据编号" prop="num">
<el-input class="w-[280px]" v-model="queryParams.num" clearable placeholder="请输入单据编号" />
</el-form-item>
@ -29,20 +25,16 @@
</template>
新增
</el-button>
<el-button
v-perms="['project_process_management.project_survey_signature/delete']"
:disabled="!selectData.length"
@click="handleDelete(selectData)"
>
<el-button v-perms="['project_process_management.project_survey_signature/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="projectInfo.project_name" 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="jsdw" 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="content" 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">
<template #default="{ row }">
<el-button
v-perms="['project_process_management.project_survey_signature/edit']"
type="primary"
link
@click="handleEdit(row)"
>
<el-button v-perms="['project_process_management.project_survey_signature/edit']" type="primary" link
@click="handleEdit(row)">
编辑
</el-button>
<el-button
v-perms="['project_process_management.project_survey_signature/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>
<el-button v-perms="['project_process_management.project_survey_signature/delete']" type="danger" link
@click="handleDelete(row.id)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex mt-4 justify-end">
<div class="flex justify-end mt-4">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
@ -88,7 +71,7 @@
<script lang="ts" setup name="projectSurveySignatureLists">
import { usePaging } from '@/hooks/usePaging'
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 feedback from '@/utils/feedback'
import EditPopup from './edit.vue'
@ -131,10 +114,11 @@ const handleAdd = async () => {
//
const handleEdit = async (data: any) => {
let res = await apiProjectSurveySignatureDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(data)
editRef.value?.setFormData(res)
}
//

View File

@ -1,68 +1,91 @@
<template>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</el-form-item>
<div>
<el-card class="!border-none mb-4" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="项目名称" prop="project">
<el-input class="w-[280px]" v-model="queryParams.project" clearable placeholder="请输入项目名称" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['task.task_allocation/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['task.task_allocation/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="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-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<el-button v-perms="['task.task_allocation/add']" type="primary" @click="handleAdd">
<template #icon>
<icon name="el-icon-Plus" />
</template>
新增
</el-button>
<el-button v-perms="['task.task_allocation/delete']" :disabled="!selectData.length"
@click="handleDelete(selectData)">
删除
</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>
</el-button>
<div class="mt-4">
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column type="expand">
<template #default="props">
<div m="4">
<el-table :data="props.row.taskTypeInfo">
<el-table-column label="任务名称" prop="taskTypeInfo.name" show-overflow-tooltip />
<el-table-column label="工序" prop="process" show-overflow-tooltip />
<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>
<script lang="ts" setup name="taskAllocationLists">
@ -80,7 +103,7 @@ const showEdit = ref(false)
//
const queryParams = reactive({
project: '',
project: '',
})
//
@ -88,7 +111,7 @@ const selectData = ref<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({
fetchFun: apiTaskAllocationLists,
params: queryParams
fetchFun: apiTaskAllocationLists,
params: queryParams
})
//
const handleAdd = async () => {
showEdit.value = true
await nextTick()
editRef.value?.open('add')
showEdit.value = true
await nextTick()
editRef.value?.open('add')
}
//
const handleEdit = async (data: any) => {
let res = await apiTaskAllocationDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
let res = await apiTaskAllocationDetail({ id: data.id })
showEdit.value = true
await nextTick()
editRef.value?.open('edit')
editRef.value?.setFormData(res)
}
//
const handleDelete = async (id: number | any[]) => {
await feedback.confirm('确定要删除?')
await apiTaskAllocationDelete({ id })
getLists()
await feedback.confirm('确定要删除?')
await apiTaskAllocationDelete({ id })
getLists()
}
getLists()