From ef1ca3769f8af093312131b16e1d5383b92c5aed Mon Sep 17 00:00:00 2001 From: zmj <1493694146@qq.com> Date: Tue, 26 Mar 2024 18:01:39 +0800 Subject: [PATCH] add --- src/api/financial_budget_doc_detail.ts | 41 ++++ src/views/financial_budget_doc/detail.js | 84 ++++++++ src/views/financial_budget_doc/edit.vue | 189 ++++++++++++++---- src/views/financial_budget_doc/index.vue | 64 +++--- .../edit.vue | 2 +- 5 files changed, 315 insertions(+), 65 deletions(-) create mode 100644 src/api/financial_budget_doc_detail.ts create mode 100644 src/views/financial_budget_doc/detail.js diff --git a/src/api/financial_budget_doc_detail.ts b/src/api/financial_budget_doc_detail.ts new file mode 100644 index 0000000..1078e63 --- /dev/null +++ b/src/api/financial_budget_doc_detail.ts @@ -0,0 +1,41 @@ +import request from "@/utils/request"; + +// 财务管理--项目预算书列表 +export function apiFinancialBudgetDocDetailLists(params: any) { + return request.get({ + url: "/financial.financial_budget_doc_detail/lists", + params, + }); +} + +// 添加财务管理--项目预算书 +export function apiFinancialBudgetDocDetailAdd(params: any) { + return request.post({ + url: "/financial.financial_budget_doc_detail/add", + params, + }); +} + +// 编辑财务管理--项目预算书 +export function apiFinancialBudgetDocDetailEdit(params: any) { + return request.post({ + url: "/financial.financial_budget_doc_detail/edit", + params, + }); +} + +// 删除财务管理--项目预算书 +export function apiFinancialBudgetDocDetailDelete(params: any) { + return request.post({ + url: "/financial.financial_budget_doc_detail/delete", + params, + }); +} + +// 财务管理--项目预算书详情 +export function apiFinancialBudgetDocDetailDetail(params: any) { + return request.get({ + url: "/financial.financial_budget_doc_detail/detail", + params, + }); +} diff --git a/src/views/financial_budget_doc/detail.js b/src/views/financial_budget_doc/detail.js new file mode 100644 index 0000000..2a2545c --- /dev/null +++ b/src/views/financial_budget_doc/detail.js @@ -0,0 +1,84 @@ +import { apiFinancialBudgetDocDetailLists } from '@/api/financial_budget_doc_detail' + + +const detailConfig = { + title: "财务管理--项目预算书", + config: [ + { + label: "合同名称", + value: "contract_name" + }, + { + label: "合同类型", + value: "contract_type_text" + }, + { + label: "甲方签约单位", + value: "part_a" + }, + + { + label: "签订金额", + value: "money" + }, + { + label: "合同签订日期", + value: "create_date" + }, + { + label: "预算书名称", + value: "name" + }, + { + label: "下达日期", + value: "issue_date" + }, + { + label: "创建人", + value: "create_user" + }, + { + label: "创建时间", + value: "create_time" + }, + { + label: "备注", + value: "remark", + column: 1, + }, + { + label: "附件", + value: "annex", + column: 1, + }, + + ], + table: { + title: "发票明细", + tableConfig: [ + { + label: "部门", + value: 'dept_text', + + }, + { + label: "预算分成方式", + value: 'type_text' + }, + { + label: "预算分成金额", + value: 'amount', + }, + { + label: "备注", + value: 'remark', + }, + + + ], + query: 'budget_doc_id', + fetchFun: apiFinancialBudgetDocDetailLists, + } + +} +export default detailConfig; \ No newline at end of file diff --git a/src/views/financial_budget_doc/edit.vue b/src/views/financial_budget_doc/edit.vue index a92d896..4616f80 100644 --- a/src/views/financial_budget_doc/edit.vue +++ b/src/views/financial_budget_doc/edit.vue @@ -1,36 +1,112 @@ <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="合同id" prop="contract_id"> - <el-input v-model="formData.contract_id" clearable placeholder="请输入合同id" /> - </el-form-item> - <el-form-item label="预算书编号" prop="code"> - <el-input v-model="formData.code" clearable placeholder="请输入预算书编号" /> - </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="issue_date"> - <el-input v-model="formData.issue_date" 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"> - <el-input v-model="formData.annex" clearable placeholder="请输入附件" /> - </el-form-item> - <el-form-item label="创建人" prop="create_user"> - <el-input v-model="formData.create_user" clearable placeholder="请输入创建人" /> - </el-form-item> + <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="contract_name"> + <el-input v-model="formData.contract_name" clearable placeholder="点击选择合同" + @click="showDialog = true" readonly /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="合同类型"> + <el-input v-model="formData.contract_type_text" clearable placeholder="系统自动获取" disabled /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="甲方签约单位"> + <el-input v-model="formData.part_a" clearable placeholder="系统自动获取" disabled /> + </el-form-item> + </el-col> + + <el-col :span="8"> + <el-form-item label="签订金额(元)"> + <el-input v-model="formData.money" clearable placeholder="系统自动获取" disabled /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="合同签订日期"> + <el-input v-model="formData.create_date" clearable placeholder="系统自动获取" disabled /> + </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="issue_date"> + <el-date-picker class="flex-1 !flex" v-model="formData.issue_date" clearable + value-format="YYYY-MM-DD" placeholder="选择下达日期"> + </el-date-picker> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="备注" prop="remark"> + <el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" /> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="附件" prop="annex"> + <uploadAnnex :formData="formData"></uploadAnnex> + </el-form-item> + </el-col> + <createUserLable flag :formData="formData" /> + + </el-row> </el-form> + <el-col :span="24"> + <div style="margin-bottom: 30px;">发票明细</div> + <div style="margin-bottom: 30px;"> + <el-table :data="formData.detail"> + <template #empty> + 暂无数据,点击添加 + <el-button @click="handleAdd" size="small">+</el-button> + </template> + <el-table-column label="序号"> + + <template #default="{ row }"> + <el-button @click="handleAdd" size="small">+</el-button> + <el-button @click="handleDelete(row)" size="small">-</el-button> + </template> + </el-table-column> + <el-table-column label="部门"> + <template #default="{ row }"> + <el-select v-model="row.dept_id" placeholder="请选择部门"> + <el-option :label="item.name" :value="item.id" v-for="item in deptList"> + </el-option> + </el-select> + </template> + </el-table-column> + <el-table-column label="预算分成方式"> + <template #default="{ row }"> + <el-select v-model="row.type" placeholder="请选择"> + <el-option :label="item.name" :value="parseInt(item.value)" + v-for="item in dictData.budget_share_method"> + </el-option> + </el-select> + </template> + </el-table-column> + <el-table-column label="预算分成金额"> + <template #default="{ row }"> + <el-input v-model="row.amount" type="number" /> + </template> + </el-table-column> + + <el-table-column label="备注" prop="remark"> + <template #default="{ row }"> + <el-input v-model="row.remark" /> + </template> + </el-table-column> + </el-table> + </div> + </el-col> + + <el-dialog v-model="showDialog" title="选择合同" width="70%"> + <dialogTable :config="cost_approved_projects" @customEvent="customEvent"> + </dialogTable> + </el-dialog> </popup> </div> </template> @@ -39,8 +115,13 @@ import type { FormInstance } from 'element-plus' import Popup from '@/components/popup/index.vue' import { apiFinancialBudgetDocAdd, apiFinancialBudgetDocEdit, apiFinancialBudgetDocDetail } from '@/api/financial_budget_doc' +import { apiFinancialBudgetDocDetailLists, apiFinancialBudgetDocDetailDelete } from '@/api/financial_budget_doc_detail' import { timeFormat } from '@/utils/util' import type { PropType } from 'vue' +import { cost_approved_projects } from "@/components/dialogTable/dialogTableConfig"; +import { deptLists } from "@/api/org/department" + + defineProps({ dictData: { type: Object as PropType<Record<string, any[]>>, @@ -51,6 +132,8 @@ const emit = defineEmits(['success', 'close']) const formRef = shallowRef<FormInstance>() const popupRef = shallowRef<InstanceType<typeof Popup>>() const mode = ref('add') +const showDialog = ref(false) + // 弹窗标题 @@ -62,15 +145,44 @@ const popupTitle = computed(() => { const formData = reactive({ id: '', contract_id: '', + contract_name: '', code: '', name: '', issue_date: '', remark: '', annex: '', create_user: '', + create_time: '', + detail: [], + "contract_type_text": "", + "part_a": "", + "money": "", + "create_date": "", }) +const handleAdd = (row) => { + // 在 row 后面插入一行数据 + formData.detail.push({}); +}; + +const handleDelete = async (row) => { + if (row.id) await apiFinancialBudgetDocDetailDelete({ id: row.id }) + // 删除 row + const index = formData.detail.indexOf(row); + formData.detail.splice(index, 1); +}; + +const customEvent = (e) => { + formData.contract_id = e.id + formData.contract_name = e.contract_name + formData.contract_type_text = e.contract_type_text + formData.part_a = e.part_a + formData.money = e.money + formData.create_date = e.create_date + showDialog.value = false +} + // 表单验证 const formRules = reactive<any>({ contract_id: [{ @@ -114,8 +226,9 @@ const setFormData = async (data: Record<any, any>) => { formData[key] = data[key] } } - - + let res = await apiFinancialBudgetDocDetailLists({ budget_doc_id: data.id }) + formData.detail = res.lists + } const getDetail = async (row: Record<string, any>) => { @@ -129,9 +242,9 @@ const getDetail = async (row: Record<string, any>) => { // 提交按钮 const handleSubmit = async () => { await formRef.value?.validate() - const data = { ...formData, } - mode.value == 'edit' - ? await apiFinancialBudgetDocEdit(data) + const data = { ...formData, } + mode.value == 'edit' + ? await apiFinancialBudgetDocEdit(data) : await apiFinancialBudgetDocAdd(data) popupRef.value?.close() emit('success') @@ -149,7 +262,13 @@ const handleClose = () => { } +const deptList = ref([]) +const getDeptList = async () => { + let res = await deptLists() + deptList.value = res.lists +} +getDeptList() defineExpose({ open, setFormData, diff --git a/src/views/financial_budget_doc/index.vue b/src/views/financial_budget_doc/index.vue index b6bc7d9..af1569e 100644 --- a/src/views/financial_budget_doc/index.vue +++ b/src/views/financial_budget_doc/index.vue @@ -1,13 +1,10 @@ <template> <div> <el-card class="!border-none mb-4" shadow="never"> - <el-form - class="mb-[-16px]" - :model="queryParams" - inline - > - <el-form-item label="合同id" prop="contract_id"> - <el-input class="w-[280px]" v-model="queryParams.contract_id" clearable placeholder="请输入合同id" /> + <el-form class="mb-[-16px]" :model="queryParams" inline> + <el-form-item label="合同名称" prop="contract_id"> + <select-remote model="contract_id" :formData="queryParams" + :api="apiCostApprovedProjectSerch"></select-remote> </el-form-item> <el-form-item label="预算书编号" prop="code"> <el-input class="w-[280px]" v-model="queryParams.code" clearable placeholder="请输入预算书编号" /> @@ -28,38 +25,32 @@ </template> 新增 </el-button> - <el-button - v-perms="['financial.financial_budget_doc/delete']" - :disabled="!selectData.length" - @click="handleDelete(selectData)" - > + <el-button v-perms="['financial.financial_budget_doc/delete']" :disabled="!selectData.length" + @click="handleDelete(selectData)"> 删除 </el-button> <div class="mt-4"> <el-table :data="pager.lists" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" /> - <el-table-column label="合同id" prop="contract_id" show-overflow-tooltip /> + <el-table-column label="合同名称" prop="contract_name" :render-header="pager.calcWidth" /> + <el-table-column label="合同金额" prop="total_amount" width="150" /> <el-table-column label="预算书编号" prop="code" show-overflow-tooltip /> <el-table-column label="预算书名称" prop="name" show-overflow-tooltip /> <el-table-column label="下达日期" prop="issue_date" show-overflow-tooltip /> - <el-table-column label="操作" width="120" fixed="right"> + <el-table-column label="操作" fixed="right"> <template #default="{ row }"> - <el-button - v-perms="['financial.financial_budget_doc/edit']" - type="primary" - link - @click="handleEdit(row)" - > + <el-button v-perms="['financial.financial_budget_doc/edit']" type="primary" link + @click="handleEdit(row)"> 编辑 </el-button> - <el-button - v-perms="['financial.financial_budget_doc/delete']" - type="danger" - link - @click="handleDelete(row.id)" - > + <el-button v-perms="['financial.financial_budget_doc/delete']" type="danger" link + @click="handleDelete(row.id)"> 删除 </el-button> + <el-button v-perms="['financial.financial_budget_doc/detail']" link + @click="handleDetail(row.id)"> + 详情 + </el-button> </template> </el-table-column> </el-table> @@ -69,20 +60,26 @@ </div> </el-card> <edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> + <detailPage v-if="showDetail" ref="detailRef" @close="showDetail = false" :detailConfig="detailConfig" /> + </div> </template> <script lang="ts" setup name="financialBudgetDocLists"> import { usePaging } from '@/hooks/usePaging' import { useDictData } from '@/hooks/useDictOptions' -import { apiFinancialBudgetDocLists, apiFinancialBudgetDocDelete } from '@/api/financial_budget_doc' +import { apiFinancialBudgetDocLists, apiFinancialBudgetDocDelete, apiFinancialBudgetDocDetail } from '@/api/financial_budget_doc' import { timeFormat } from '@/utils/util' import feedback from '@/utils/feedback' import EditPopup from './edit.vue' +import detailConfig from './detail' +import { apiCostApprovedProjectSerch } from "@/api/cost_approved_project"; const editRef = shallowRef<InstanceType<typeof EditPopup>>() +const detailRef = ref('') // 是否显示编辑框 const showEdit = ref(false) +const showDetail = ref(false) // 查询条件 @@ -101,7 +98,7 @@ const handleSelectionChange = (val: any[]) => { } // 获取字典数据 -const { dictData } = useDictData('') +const { dictData } = useDictData('budget_share_method') // 分页相关 const { pager, getLists, resetParams, resetPage } = usePaging({ @@ -118,10 +115,11 @@ const handleAdd = async () => { // 编辑 const handleEdit = async (data: any) => { + let res = await apiFinancialBudgetDocDetail({ id: data.id }) showEdit.value = true await nextTick() editRef.value?.open('edit') - editRef.value?.setFormData(data) + editRef.value?.setFormData(res) } // 删除 @@ -131,6 +129,14 @@ const handleDelete = async (id: number | any[]) => { getLists() } +// 详情 +const handleDetail = async (id: any) => { + let res = await apiFinancialBudgetDocDetail({ id }) + showDetail.value = true + await nextTick() + detailRef.value?.open() + detailRef.value?.setFormData(res) +} getLists() </script> diff --git a/src/views/supervision_dangerous_engineering_case/edit.vue b/src/views/supervision_dangerous_engineering_case/edit.vue index 2f5dd53..2c54eb2 100644 --- a/src/views/supervision_dangerous_engineering_case/edit.vue +++ b/src/views/supervision_dangerous_engineering_case/edit.vue @@ -15,7 +15,7 @@ <el-form-item label="评审内容" prop="review_content"> <el-input v-model="formData.review_content" clearable placeholder="请输入评审内容" /> </el-form-item> - <el-form-item label="备注" prop="remark"> + <el-form-item label="备注"> <el-input v-model="formData.remark" clearable placeholder="请输入备注" type="textarea" /> </el-form-item> <createUserLable :formData="formData"></createUserLable>