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>