songxy 1 anno fa
parent
commit
57800dbcd9

+ 10 - 27
client/src/components/TreeSelectV2/index.vue

@@ -1,5 +1,3 @@
-import { log } from 'console'; import { getNotifyTaskDetail } from '@/api/pay/notify'; import {
-number } from 'vue-types'; import { array } from 'vue-types';
 <template>
   <div class="treeSelectV2">
     <el-popover placement="bottom" trigger="click" :teleported="false">
@@ -35,31 +33,16 @@ import { ArrowDown } from '@element-plus/icons-vue'
 defineOptions({
   name: 'TreeSelectV2'
 })
-const $props = defineProps({
-  data: {
-    type: Array,
-    default: () => []
-  },
-  modelValue: {
-    type: [String, Number]
-  },
-  props: {
-    type: Object,
-    default: () => null
-  },
-  disabled: {
-    type: Boolean,
-    default: false
-  },
-  expend: {
-    type: Boolean,
-    default: false
-  },
-  filterMethod: {
-    type: Function,
-    default: () => null
-  }
-})
+const $props = defineProps<
+  Partial<{
+    data: any[]
+    modelValue: string | number
+    props: any
+    disabled: boolean
+    expend: boolean
+    filterMethod: any
+  }>
+>()
 const $emit = defineEmits<{
   (e: 'update:modelValue', v: any): void
 }>()

+ 42 - 0
client/src/service/contract.ts

@@ -1,6 +1,7 @@
 import request from '@/config/axios'
 import { Contract, ContractId } from '@/interface/contract'
 import { ProjectId } from '@/interface/project'
+import { listToTree } from '@/utils/tree'
 
 /**
  * 合同详情(无分包数据)
@@ -172,3 +173,44 @@ export const startContractSign = async (projectId: ProjectId) => {
     '/business'
   )
 }
+
+/**
+ * 委托方Tree数据
+ * @param contractId
+ */
+export const queryCustomerTree = async () => {
+  const contractList = await request.get(
+    {
+      url: '/customer-tree'
+    },
+    '/business'
+  )
+  return listToTree(contractList)
+}
+
+/**
+ * 受托方Tree数据
+ * @param contractId
+ */
+export const queryCompanyTree = async () => {
+  const contractList = await request.get(
+    {
+      url: '/common/company-tree'
+    },
+    '/business'
+  )
+  return listToTree(contractList)
+}
+/**
+ * 发起分开票申请流程
+ * @param contractId
+ */
+export const startContractInvoice = async (projectId: string) => {
+  return await request.get(
+    {
+      url: '/contractInvoice/process',
+      params: { projectId }
+    },
+    '/business'
+  )
+}

+ 1 - 1
client/src/views/OaSystem/projectCenter/projectDetail/components/xmcb/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="_ProjectDetail_xmxx">
     <div class="header">
-      <el-form>
+      <el-form v-if="projectTypeList.length == 1">
         <el-form-item label="项目选择:">
           <el-select
             v-model="projectId"

+ 56 - 9
client/src/views/OaSystem/projectCenter/projectDetail/components/xmht/index.vue

@@ -31,7 +31,7 @@
             <li v-if="editor === false" @click="handleEdit">编辑合同</li>
             <li v-else @click="saveContractHandle">保存合同</li>
             <li>用款申请</li>
-            <li>开票申请</li>
+            <li @click="() => startContractInvoiceMuate(contractDetail?.id)">开票申请</li>
           </ul>
           <table>
             <tr>
@@ -58,7 +58,13 @@
             <tr>
               <td class="th">委托方:</td>
               <td>
-                <el-input v-model="contractDetail['clientName']" :disabled="!editor" />
+                <TreeSelectV2
+                  :data="contractTree"
+                  :props="{ label: 'name', value: 'id' }"
+                  v-model="contractDetail['clientId']"
+                  :filter-method="filterNodeMethod"
+                  :disabled="!editor"
+                />
               </td>
               <td class="th">合同次类型:</td>
               <td>
@@ -79,11 +85,17 @@
             <tr>
               <td class="th">委托方编号:</td>
               <td>
-                <el-input v-model="contractDetail['clientId']" :disabled="!editor" />
+                <el-input v-model="contractDetail['clientNumber']" :disabled="!editor" />
               </td>
               <td class="th">受托方:</td>
               <td>
-                <el-input v-model="contractDetail['assigneeName']" :disabled="!editor" />
+                <TreeSelectV2
+                  :data="assigneeTree"
+                  :props="{ label: 'name', value: 'id' }"
+                  v-model="contractDetail['assigneeId']"
+                  :filter-method="filterNodeMethod"
+                  :disabled="!editor"
+                />
               </td>
             </tr>
             <tr>
@@ -113,7 +125,7 @@
             <tr>
               <td class="th">销售经理:</td>
               <td>
-                <UserOrgTree v-model="contractDetail['customerContactId']" :disabled="!editor" />
+                <UserOrgTree v-model="contractDetail['areaManager']" :disabled="!editor" />
               </td>
               <td class="th"></td>
               <td></td>
@@ -222,14 +234,15 @@
       </template>
       <template v-else>
         <div class="titleBox">
-          <h2>江山市自然资源业务数字化管理系统云服务器租赁合同</h2>
+          <h2>{{ contractDetail?.name ?? '' }} </h2>
           <span class="tag">已签</span>
           <span class="tag">未付清</span>
         </div>
         <div class="tableBox tableBox—first">
           <h4><i class="icon"></i>基本信息</h4>
           <ul>
-            <li>编辑合同</li>
+            <li v-if="editor === false" @click="handleEdit">编辑合同</li>
+            <li v-else @click="saveContractHandle">保存合同</li>
             <li>用款申请</li>
           </ul>
           <table>
@@ -258,7 +271,13 @@
             <tr>
               <td class="th">委托方:</td>
               <td>
-                <el-input v-model="contractDetail['clientId']" :disabled="!editor" />
+                <TreeSelectV2
+                  :data="contractTree"
+                  :props="{ label: 'name', value: 'id' }"
+                  v-model="contractDetail['clientId']"
+                  :filter-method="filterNodeMethod"
+                  :disabled="!editor"
+                />
               </td>
               <td class="th">申请人:</td>
               <td>
@@ -326,11 +345,19 @@
 </template>
 <script setup lang="ts">
 import { useRoute } from 'vue-router'
+import { filterNodeMethod } from '@/utils/tree'
+import TreeSelectV2 from '@/components/TreeSelectV2/index.vue'
 import UserOrgTree from '@/views/OaSystem/components/UserOrgTree/index.vue'
 import ContractMilestone from '@/views/OaSystem/projectCenter/projectDetail/components/xmht/ContractMilestone.vue'
 import ContractReturnedMoney from '@/views/OaSystem/projectCenter/projectDetail/components/xmht/ContractReturnedMoney.vue'
 import ContractSharing from '@/views/OaSystem/projectCenter/projectDetail/components/xmht/ContractSharing.vue'
-import { getContractsByProject, putContract } from '@/service/contract'
+import {
+  getContractsByProject,
+  putContract,
+  startContractInvoice,
+  queryCustomerTree,
+  queryCompanyTree
+} from '@/service/contract'
 import { useQuery, useMutation } from '@tanstack/vue-query'
 import { Contract } from '@/interface/contract'
 import { ref } from 'vue'
@@ -399,12 +426,25 @@ const handleEdit = () => {
   editor.value = true
 }
 
+/***
+ * 查询委托方数据
+ * **/
+const { data: contractTree } = useQuery(['contractTree'], async () => await queryCustomerTree(), {
+  staleTime: Infinity
+})
+/***
+ * 查询受托方数据
+ * **/
+const { data: assigneeTree } = useQuery(['assigneeTree'], async () => await queryCompanyTree(), {
+  staleTime: Infinity
+})
 /**
  * 切换子项目信息
  * **/
 const contractInfoIndex = ref<number>(0)
 const switchContractInfo = (item: any, key: number): void => {
   contractInfoIndex.value = key
+  contractDetail.value = item
 }
 
 /***
@@ -436,6 +476,13 @@ const { mutate: saveContract } = useMutation(putContract, {
   }
 })
 const saveContractHandle = () => saveContract(contractDetail.value)
+
+/**
+ * 发起开票申请流程
+ */
+const { mutate: startContractInvoiceMuate } = useMutation(startContractInvoice, {
+  onSuccess: (data) => openFlow(router, data, '开票申请')
+})
 </script>
 <style lang="scss" scoped>
 @import './index.scss';