songxy пре 1 година
родитељ
комит
b99d01ae8a

+ 4 - 4
client/src/service/contract.ts

@@ -146,11 +146,11 @@ export const startOutsourcingApply = async (projectId: string) => {
  * 发起分包合同签订
  * @param contractId
  */
-export const startSubcontract = async (contractId: string) => {
+export const startSubcontract = async (applyId: string) => {
   return await request.get(
     {
       url: '/subcontract/process',
-      params: { contractId }
+      params: { applyId }
     },
     '/business'
   )
@@ -160,11 +160,11 @@ export const startSubcontract = async (contractId: string) => {
  * 发起外包合同签订
  * @param contractId
  */
-export const startOutsourcing = async (contractId: string) => {
+export const startOutsourcing = async (applyId: string) => {
   return await request.get(
     {
       url: '/outsourcing/process',
-      params: { contractId }
+      params: { applyId }
     },
     '/business'
   )

+ 7 - 3
client/src/views/OaSystem/marketCenter/contractSubOut/applyIndex.vue

@@ -13,7 +13,7 @@
         <span class="formSpan">项目编号:</span>
         <el-input
           v-model="queryParams.projectNumber"
-          placeholder="请输入项目名称"
+          placeholder="请输入项目编号"
           style="width: 160px"
         />
       </div>
@@ -105,10 +105,11 @@ import { useRouter } from 'vue-router'
 import { ElMessage } from 'element-plus'
 import { PageParam } from '@/interface/common'
 import { openFlow } from '@/utils/flow'
-import { getAssetURL } from '@/utils/auth'
 import request from '@/config/axios'
 
 defineOptions({ name: 'ProjectBook' })
+const route = useRoute()
+const routeName = route.name
 const contractType = {
   1: '分包合同',
   2: '外包合同'
@@ -190,7 +191,10 @@ const handleSelectionChange = (arrs) => {
 }
 const processSubmit = async (): Promise<void> => {
   let urlApi: string = ''
-  if (currentProcess.value?.applyType === null) return
+  if (currentProcess.value?.applyType === null) {
+    ElMessage.warning('该合同合同类型不能为null!')
+    return
+  }
   if (currentProcess.value?.isSign === 0) {
     ElMessage.warning('该合同不能签合同,无法发起合同签订!')
     return

+ 4 - 1
client/src/views/OaSystem/marketCenter/contractSubOut/signIndex.vue

@@ -13,7 +13,7 @@
         <span class="formSpan">项目编号:</span>
         <el-input
           v-model="queryParams.projectNumber"
-          placeholder="请输入项目名称"
+          placeholder="请输入项目编号"
           style="width: 160px"
         />
       </div>
@@ -113,6 +113,9 @@ import request from '@/config/axios'
 
 defineOptions({ name: 'ProjectBook' })
 const router = useRouter()
+const route = useRoute()
+const routeName = route.name
+
 const tableRef: any = ref(null)
 const tableHeight: any = ref(0)
 

+ 2 - 2
client/src/views/OaSystem/oaLayout/header.vue

@@ -7,11 +7,11 @@
     <div class="header-right">
       <Weather />
       <div class="hx"></div>
-      <div class="message">
+      <!-- <div class="message">
         <el-badge :value="3" class="item">
           <img src="@/assets/imgs/OA/xxts.png" alt="" />
         </el-badge>
-      </div>
+      </div> -->
       <div class="offLogin" @click="offClick">
         <img src="@/assets/imgs/OA/offLogin.png" alt="" />
       </div>

+ 1 - 1
client/src/views/OaSystem/projectCenter/projectBook/deptProject.vue

@@ -7,7 +7,7 @@
       </div>
       <div class="form">
         <span class="formSpan">项目编号:</span>
-        <el-input v-model="queryParams.xmbh" placeholder="请输入项目名称" style="width: 160px" />
+        <el-input v-model="queryParams.xmbh" placeholder="请输入项目编号" style="width: 160px" />
       </div>
       <div class="form">
         <span class="formSpan">行政区:</span>

+ 1 - 1
client/src/views/OaSystem/projectCenter/projectBook/myProject.vue

@@ -7,7 +7,7 @@
       </div>
       <div class="form">
         <span class="formSpan">项目编号:</span>
-        <el-input v-model="queryParams.xmbh" placeholder="请输入项目名称" style="width: 160px" />
+        <el-input v-model="queryParams.xmbh" placeholder="请输入项目编号" style="width: 160px" />
       </div>
       <div class="form">
         <span class="formSpan">行政区:</span>

+ 1 - 1
client/src/views/OaSystem/projectCenter/projectBook/projectBook.vue

@@ -3,7 +3,7 @@
     <div class="searchBox">
       <div class="form">
         <span class="formSpan">项目编号:</span>
-        <el-input v-model="queryParams.xmbh" placeholder="请输入项目名称" style="width: 160px" />
+        <el-input v-model="queryParams.xmbh" placeholder="请输入项目编号" style="width: 160px" />
       </div>
       <div class="form">
         <span class="formSpan">项目名称:</span>

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

@@ -50,10 +50,6 @@
             <p class="value">{{ projectCostCalculate['outsourceCost'] }}</p>
             <p class="title">外包费用(元)</p>
           </li>
-          <li>
-            <p class="value">{{ projectCostCalculate['laborCost'] }}</p>
-            <p class="title">人力成本(元)</p>
-          </li>
         </ul>
       </div>
       <div class="tableBox tableLineBox">
@@ -84,7 +80,6 @@
             </template>
           </el-table-column>
           <el-table-column prop="paymentCost" label="用款成本(元)" />
-          <el-table-column prop="laborCost" label="人力成本(元)" />
           <el-table-column prop="reimbursementCost" label="普通报销成本(元)">
             <template #default="scope">
               <span class="btn_text" @click="clickHandler(0)">{{

+ 1 - 1
client/src/views/OaSystem/projectCenter/projectDetail/components/xmht/ContractReturnedMoney.vue

@@ -66,7 +66,7 @@ const invoiceTypeFilter: (val: number | string) => string = (val: number | strin
           <td>{{ invoiceTypeFilter(item['invoiceType']) }}</td>
           <td>{{ item['returnDate'] }}</td>
           <td>
-            <span>查看流程</span>
+            <span style="text-align: center; color: #2e77e6">查看流程</span>
           </td>
         </tr>
       </tbody>

+ 243 - 474
client/src/views/OaSystem/projectCenter/projectDetail/components/xmht/index.vue

@@ -1,322 +1,277 @@
 <template>
   <div class="_ContractDetail_xmxx form-disabled-style">
     <div class="header">
-      <ul
-        class="contractTagList"
-        v-if="(mContractDetails?.length ?? 0) > 1 || (childrenContracts?.length ?? 0) > 0"
-      >
-        <template v-if="(mContractDetails?.length ?? 0) > 1">
-          <el-popover placement="bottom-start" trigger="hover">
-            <template #reference>
-              <li
-                :class="{ active: contractInfoIndex === 0 }"
-                @click="switchContractInfo(mContractDetails[mainContractIndex], 0)"
-                >主合同-{{ mainContractIndex + 1 }}
-              </li>
-            </template>
-            <template #default>
-              <ul class="contractPopover">
-                <li
-                  v-for="(item, index) in mContractDetails"
-                  :key="index"
-                  @click="switchContractInfo(item, 0, index)"
-                  >主合同-{{ index + 1 }}
-                </li>
-              </ul>
-            </template>
-          </el-popover>
-        </template>
-        <template v-else>
-          <li
-            :class="{ active: contractInfoIndex === 0 }"
-            @click="switchContractInfo(mContractDetails[0], 0)"
-            >主合同
-          </li>
-        </template>
+      <ul class="contractTagList" v-if="(mContractDetails?.length ?? 0) > 1">
         <li
-          v-for="(item, index) in childrenContracts"
-          :class="{ active: contractInfoIndex === index + 1 }"
+          v-for="(item, index) in mContractDetails"
           :key="index"
-          @click="switchContractInfo(item, index + 1)"
-        >
-          {{ contractTypeFilter[item['contractType']] }}
+          :class="{ active: contractInfoIndex === index }"
+          @click="switchContractInfo(item, index)"
+          >主合同-{{ index + 1 }}
         </li>
       </ul>
     </div>
     <div class="content">
-      <template v-if="contractInfoIndex === 0">
-        <div class="titleBox">
-          <h2 @click="processLookHandle(mContractDetail.instanceId as string)">
-            {{ mContractDetail?.name ?? '' }}
-          </h2>
-          <span v-if="mContractDetail?.amountStatus === 1" class="tag">已签</span>
-          <span v-else-if="mContractDetail?.amountStatus === 2" class="tag">未付清</span>
-          <span v-else-if="mContractDetail?.amountStatus === 3" class="tag">已付清</span>
-          <span v-else-if="mContractDetail?.amountStatus === 4" class="tag">手动设置已付清</span>
-        </div>
-        <div class="tableBox tableBox—first">
-          <h4 class="td_title"><i class="icon"></i>基本信息</h4>
-          <ul>
-            <li v-if="editor === false" @click="handleEditor">编辑合同</li>
-            <li v-else @click="saveContractHandle">保存合同</li>
-            <li
-              v-if="
-                projectPermis.projectPermisState.all || projectPermis.projectPermisState.xsLeader
-              "
-              @click="
-                startUseMoneyMuate({
-                  projectId: mContractDetail?.projectId,
-                  supplierId: mContractDetail?.clientId
-                })
-              "
-              >用款申请</li
-            >
-            <li
-              v-if="
-                projectPermis.projectPermisState.all || projectPermis.projectPermisState.xsLeader
-              "
-              @click="() => startContractInvoiceMuate(mContractDetail?.id)"
-              >开票申请</li
-            >
-          </ul>
-          <table>
+      <div class="titleBox">
+        <h2 @click="processLookHandle(mContractDetail.instanceId as string)">
+          {{ mContractDetail?.name ?? '' }}
+        </h2>
+      </div>
+      <div class="tableBox tableBox—first">
+        <h4 class="td_title"><i class="icon"></i>基本信息</h4>
+        <ul>
+          <li v-if="editor === false" @click="handleEditor">编辑合同</li>
+          <li v-else @click="saveContractHandle">保存合同</li>
+          <li
+            v-if="projectPermis.projectPermisState.all || projectPermis.projectPermisState.xsLeader"
+            @click="
+              startUseMoneyMuate({
+                projectId: mContractDetail?.projectId,
+                supplierId: mContractDetail?.clientId
+              })
+            "
+            >用款申请</li
+          >
+          <li
+            v-if="projectPermis.projectPermisState.all || projectPermis.projectPermisState.xsLeader"
+            @click="() => startContractInvoiceMuate(mContractDetail?.id)"
+            >开票申请</li
+          >
+        </ul>
+        <table>
+          <tr>
+            <td class="th">合同编号:</td>
+            <td>
+              <el-input v-model="mContractDetail.contractNumber" :disabled="!editor" />
+            </td>
+            <td class="th">合同主类型:</td>
+            <td>
+              <el-select style="width: 100%" v-model="mContractDetail.mainType" :disabled="!editor">
+                <el-option
+                  v-for="item in mainTypeList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="Number(item.value)"
+                />
+              </el-select>
+            </td>
+          </tr>
+          <tr>
+            <td class="th">委托方:</td>
+            <td>
+              <TreeSelectV2
+                :data="contractTree"
+                :props="{ label: 'name', value: 'id' }"
+                v-model="mContractDetail.clientId"
+                :filter-method="filterNodeMethod"
+                :disabled="!editor"
+              />
+            </td>
+            <td class="th">合同次类型:</td>
+            <td>
+              <el-select
+                style="width: 100%"
+                v-model="mContractDetail.secondType"
+                :disabled="!editor"
+              >
+                <el-option
+                  v-for="item in secondTypeList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="Number(item.value)"
+                />
+              </el-select>
+            </td>
+          </tr>
+          <tr>
+            <td class="th">受托方:</td>
+            <td>
+              <TreeSelectV2
+                :data="assigneeTree"
+                :props="{ label: 'name', value: 'id' }"
+                v-model="mContractDetail.assigneeId"
+                :filter-method="filterNodeMethod"
+                :disabled="!editor"
+              />
+            </td>
+            <td class="th">签订状态:</td>
+            <td>
+              <el-select style="width: 100%" v-model="mContractDetail.isSign" :disabled="!editor">
+                <el-option
+                  v-for="item in contractSignList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="Number(item.value)"
+                />
+              </el-select>
+            </td>
+          </tr>
+          <tr>
+            <td class="th">合同拿出日期:</td>
+            <td>
+              <span v-if="!editor && !mContractDetail.contractOn"></span>
+              <el-date-picker
+                v-else
+                style="width: 100%"
+                :disabled="!editor"
+                v-model="mContractDetail.contractOn"
+                type="date"
+                value-format="YYYY-MM-DD"
+                placeholder="请选择合同拿出时间"
+              />
+            </td>
+            <td class="th">合同拿回日期:</td>
+            <td>
+              <span v-if="!editor && !mContractDetail.contractOff"></span>
+              <el-date-picker
+                v-else
+                style="width: 100%"
+                :disabled="!editor"
+                v-model="mContractDetail.contractOff"
+                type="date"
+                value-format="YYYY-MM-DD"
+                placeholder="请选择合同拿回时间"
+              />
+            </td>
+          </tr>
+          <tr>
+            <td class="th">销售经理:</td>
+            <td>
+              <UserOrgTree v-model="mContractDetail.areaManagerId" :disabled="!editor" />
+            </td>
+            <td class="th">签订方式:</td>
+            <td>
+              <span v-if="!editor && !mContractDetail.signWay"></span>
+              <el-select
+                v-else
+                style="width: 100%"
+                placeholder="请选择签订方式"
+                v-model="mContractDetail.signWay"
+                :disabled="!editor"
+              >
+                <el-option
+                  v-for="item in signWayList"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="Number(item.value)"
+                />
+              </el-select>
+            </td>
+          </tr>
+          <tr>
+            <td class="th">付款条件:</td>
+            <td colspan="3" style="height: 120px">
+              <el-input
+                type="textarea"
+                :rows="5"
+                v-model="mContractDetail.paymentTerms"
+                :disabled="!editor"
+              />
+            </td>
+          </tr>
+          <h4 class="td_title"><i class="icon"></i>质保金</h4>
+          <tr>
+            <td class="th">质保金(元):</td>
+            <td>{{ mContractDetail.qualityMoney ?? 0 }} </td>
+            <td class="th">质保金状态:</td>
+            <td>
+              {{
+                mContractDetail.qualityMoney
+                  ? mContractDetail.qualityMoneyStatus == 1
+                    ? '已核销'
+                    : '未核销'
+                  : ''
+              }}
+            </td>
+          </tr>
+        </table>
+      </div>
+      <div class="tableBox tableLineBox">
+        <h4 class="td_title"><i class="icon"></i>税费与金额</h4>
+        <table>
+          <thead>
             <tr>
-              <td class="th">合同编号:</td>
-              <td>
-                <el-input v-model="mContractDetail.contractNumber" :disabled="!editor" />
-              </td>
-              <td class="th">合同主类型:</td>
-              <td>
-                <el-select
-                  style="width: 100%"
-                  v-model="mContractDetail.mainType"
-                  :disabled="!editor"
-                >
-                  <el-option
-                    v-for="item in mainTypeList"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="Number(item.value)"
-                  />
-                </el-select>
-              </td>
+              <th>税率及内容</th>
+              <th>含税金额(元)</th>
+              <th>综合税率</th>
+              <th>不含税总额(元)</th>
+              <th>软件产品</th>
             </tr>
+          </thead>
+          <tbody>
             <tr>
-              <td class="th">委托方:</td>
-              <td>
-                <TreeSelectV2
-                  :data="contractTree"
-                  :props="{ label: 'name', value: 'id' }"
-                  v-model="mContractDetail.clientId"
-                  :filter-method="filterNodeMethod"
-                  :disabled="!editor"
-                />
+              <td class="title">
+                <span>0%</span>
+                技术开发
               </td>
-              <td class="th">合同次类型:</td>
               <td>
+                <el-input v-model="mContractDetail.taxHsjeJskf" :disabled="!editor" />
+              </td>
+              <td rowspan="5">
+                <span>{{ mContractDetail.taxZhsl }}</span>
+                <!-- <el-input v-model="mContractDetail.taxZhsl" :disabled="!editor" /> -->
+              </td>
+              <td rowspan="5">
+                <span>{{ mContractDetail.taxBhsze }}</span>
+                <!-- <el-input v-model="mContractDetail.taxBhsze" :disabled="!editor" /> -->
+              </td>
+              <td rowspan="5">
                 <el-select
+                  v-model="mContractDetail.taxSoftpatent"
                   style="width: 100%"
-                  v-model="mContractDetail.secondType"
+                  placeholder=" "
                   :disabled="!editor"
                 >
                   <el-option
-                    v-for="item in secondTypeList"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="Number(item.value)"
+                    v-for="item in productSoftList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id"
                   />
                 </el-select>
               </td>
             </tr>
             <tr>
-              <td class="th">受托方:</td>
-              <td>
-                <TreeSelectV2
-                  :data="assigneeTree"
-                  :props="{ label: 'name', value: 'id' }"
-                  v-model="mContractDetail.assigneeId"
-                  :filter-method="filterNodeMethod"
-                  :disabled="!editor"
-                />
+              <td class="title">
+                <span>6%</span>
+                服务
               </td>
-              <td class="th">签订状态:</td>
               <td>
-                <el-select style="width: 100%" v-model="mContractDetail.isSign" :disabled="!editor">
-                  <el-option
-                    v-for="item in contractSignList"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="Number(item.value)"
-                  />
-                </el-select>
-              </td>
-            </tr>
-            <tr>
-              <td class="th">合同拿出日期:</td>
-              <td>
-                <span v-if="!editor && !mContractDetail.contractOn"></span>
-                <el-date-picker
-                  v-else
-                  style="width: 100%"
+                <el-input
+                  v-model="mContractDetail.taxHsjeFw"
                   :disabled="!editor"
-                  v-model="mContractDetail.contractOn"
-                  type="date"
-                  value-format="YYYY-MM-DD"
-                  placeholder="请选择合同拿出时间"
-                />
-              </td>
-              <td class="th">合同拿回日期:</td>
-              <td>
-                <span v-if="!editor && !mContractDetail.contractOff"></span>
-                <el-date-picker
-                  v-else
                   style="width: 100%"
-                  :disabled="!editor"
-                  v-model="mContractDetail.contractOff"
-                  type="date"
-                  value-format="YYYY-MM-DD"
-                  placeholder="请选择合同拿回时间"
                 />
               </td>
             </tr>
             <tr>
-              <td class="th">销售经理:</td>
-              <td>
-                <UserOrgTree v-model="mContractDetail.areaManagerId" :disabled="!editor" />
+              <td class="title">
+                <span>13%</span>
+                产品软件
               </td>
-              <td class="th">签订方式:</td>
               <td>
-                <span v-if="!editor && !mContractDetail.signWay"></span>
-                <el-select
-                  v-else
-                  style="width: 100%"
-                  placeholder="请选择签订方式"
-                  v-model="mContractDetail.signWay"
-                  :disabled="!editor"
-                >
-                  <el-option
-                    v-for="item in signWayList"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="Number(item.value)"
-                  />
-                </el-select>
+                <el-input v-model="mContractDetail.taxHsjeRjcp" :disabled="!editor" />
               </td>
             </tr>
             <tr>
-              <td class="th">付款条件:</td>
-              <td colspan="3" style="height: 120px">
-                <el-input
-                  type="textarea"
-                  :rows="5"
-                  v-model="mContractDetail.paymentTerms"
-                  :disabled="!editor"
-                />
+              <td class="title">
+                <span>13%</span>
+                硬件(平板等)
+              </td>
+              <td>
+                <el-input v-model="mContractDetail.taxHsjeYj" :disabled="!editor" />
               </td>
             </tr>
-            <h4 class="td_title"><i class="icon"></i>质保金</h4>
-            <tr>
-              <td class="th">质保金(元):</td>
-              <td>{{ mContractDetail.qualityMoney ?? 0 }} </td>
-              <td class="th">质保金状态:</td>
+            <tr class="subtotal">
+              <td> 小计</td>
               <td>
-                {{
-                  mContractDetail.qualityMoney
-                    ? mContractDetail.qualityMoneyStatus == 1
-                      ? '已核销'
-                      : '未核销'
-                    : ''
-                }}
+                <el-input v-model="mContractDetail.taxHsjeTotal" :disabled="!editor" />
               </td>
             </tr>
-          </table>
-        </div>
-        <div class="tableBox tableLineBox">
-          <h4 class="td_title"><i class="icon"></i>税费与金额</h4>
-          <table>
-            <thead>
-              <tr>
-                <th>税率及内容</th>
-                <th>含税金额(元)</th>
-                <th>综合税率</th>
-                <th>不含税总额(元)</th>
-                <th>软件产品</th>
-              </tr>
-            </thead>
-            <tbody>
-              <tr>
-                <td class="title">
-                  <span>0%</span>
-                  技术开发
-                </td>
-                <td>
-                  <el-input v-model="mContractDetail.taxHsjeJskf" :disabled="!editor" />
-                </td>
-                <td rowspan="5">
-                  <span>{{ mContractDetail.taxZhsl }}</span>
-                  <!-- <el-input v-model="mContractDetail.taxZhsl" :disabled="!editor" /> -->
-                </td>
-                <td rowspan="5">
-                  <span>{{ mContractDetail.taxBhsze }}</span>
-                  <!-- <el-input v-model="mContractDetail.taxBhsze" :disabled="!editor" /> -->
-                </td>
-                <td rowspan="5">
-                  <el-select
-                    v-model="mContractDetail.taxSoftpatent"
-                    style="width: 100%"
-                    placeholder=" "
-                    :disabled="!editor"
-                  >
-                    <el-option
-                      v-for="item in productSoftList"
-                      :key="item.id"
-                      :label="item.name"
-                      :value="item.id"
-                    />
-                  </el-select>
-                </td>
-              </tr>
-              <tr>
-                <td class="title">
-                  <span>6%</span>
-                  服务
-                </td>
-                <td>
-                  <el-input
-                    v-model="mContractDetail.taxHsjeFw"
-                    :disabled="!editor"
-                    style="width: 100%"
-                  />
-                </td>
-              </tr>
-              <tr>
-                <td class="title">
-                  <span>13%</span>
-                  产品软件
-                </td>
-                <td>
-                  <el-input v-model="mContractDetail.taxHsjeRjcp" :disabled="!editor" />
-                </td>
-              </tr>
-              <tr>
-                <td class="title">
-                  <span>13%</span>
-                  硬件(平板等)
-                </td>
-                <td>
-                  <el-input v-model="mContractDetail.taxHsjeYj" :disabled="!editor" />
-                </td>
-              </tr>
-              <tr class="subtotal">
-                <td> 小计</td>
-                <td>
-                  <el-input v-model="mContractDetail.taxHsjeTotal" :disabled="!editor" />
-                </td>
-              </tr>
-            </tbody>
-          </table>
-        </div>
-        <!-- <div class="tableBox">
+          </tbody>
+        </table>
+      </div>
+      <!-- <div class="tableBox">
           <h4 class="td_title"><i class="icon"></i>维护条款</h4>
           <table>
             <tr>
@@ -381,166 +336,13 @@
             </tr>
           </table>
         </div> -->
-        <!-- 合同里程碑 -->
-        <ContractMilestone
-          :contractId="mContractDetail?.id"
-          :contractAmount="mContractDetail?.contractAmount"
-        />
-        <!-- 回款 -->
-        <ContractReturnedMoney :contractId="mContractDetail?.id" />
-      </template>
-      <template v-else>
-        <div class="titleBox">
-          <h2>{{ cContractDetail?.name ?? '' }} </h2>
-          <span class="tag">已签</span>
-          <span class="tag">未付清</span>
-        </div>
-        <div class="tableBox tableBox—first">
-          <h4 class="td_title"><i class="icon"></i>基本信息</h4>
-          <ul>
-            <li v-if="editor === false" @click="handleEditor">编辑合同</li>
-            <li v-else @click="saveContractHandle">保存合同</li>
-            <li
-              @click="
-                startUseMoneyMuate({
-                  projectId: mContractDetail?.projectId,
-                  supplierId: cContractDetail?.clientId
-                })
-              "
-              >用款申请</li
-            >
-          </ul>
-          <table>
-            <template v-if="cContractDetail?.contractType == 2">
-              <tr>
-                <td class="th">分包理由:</td>
-                <td colspan="3">
-                  <el-input v-model="cContractDetail.subReason" :disabled="!editor" />
-                </td>
-              </tr>
-              <tr>
-                <td class="th">分包金额(元):</td>
-                <td>
-                  <el-input v-model="cContractDetail.subAmount" :disabled="!editor" />
-                </td>
-                <td class="th">供应商:</td>
-                <td>
-                  <el-input v-model="cContractDetail.applyWorkerDept" :disabled="!editor" />
-                </td>
-              </tr>
-              <tr>
-                <td class="th">合同拿出日期:</td>
-                <td>
-                  <el-date-picker
-                    style="width: 100%"
-                    :disabled="!editor"
-                    v-model="cContractDetail.contractOn"
-                    type="date"
-                    @change="($evt) => (cContractDetail.contractOn = $evt)"
-                    placeholder="请选择合同拿出时间"
-                  />
-                </td>
-                <td class="th">合同拿回日期:</td>
-                <td>
-                  <el-date-picker
-                    style="width: 100%"
-                    :disabled="!editor"
-                    v-model="cContractDetail.contractOff"
-                    type="date"
-                    @change="($evt) => (cContractDetail.contractOff = $evt)"
-                    placeholder="请选择合同拿回时间"
-                  />
-                </td>
-              </tr>
-              <tr>
-                <td class="th">是否需要签订合同:</td>
-                <td>
-                  <el-radio-group v-model="cContractDetail.isSign" :disabled="!editor">
-                    <el-radio :label="1">是</el-radio>
-                    <el-radio :label="0">否</el-radio>
-                  </el-radio-group>
-                </td>
-                <td class="th">分包费用承担:</td>
-                <td>
-                  <el-select
-                    style="width: 100%"
-                    v-model="cContractDetail.subShareWay"
-                    :disabled="!editor"
-                  >
-                    <el-option label="全部由公司承担" :value="1" />
-                    <el-option label="全部由技术部门承担" :value="2" />
-                    <el-option label="由公司和技术部门按比例承担" :value="3" />
-                  </el-select>
-                </td>
-              </tr>
-              <tr>
-                <td class="th">分包采购内容需求:</td>
-                <td colspan="3">
-                  <el-input
-                    type="textarea"
-                    :rows="4"
-                    v-model="cContractDetail.purchaseRequirements"
-                    :disabled="!editor"
-                  />
-                </td>
-              </tr>
-            </template>
-            <template v-else>
-              <tr>
-                <td class="th">外包包理由:</td>
-                <td colspan="3">
-                  <el-input v-model="cContractDetail.subReason" :disabled="!editor" />
-                </td>
-              </tr>
-              <tr>
-                <td class="th">外包金额(元):</td>
-                <td>
-                  <el-input v-model="cContractDetail.subAmount" :disabled="!editor" />
-                </td>
-                <td class="th">供应商:</td>
-                <td>
-                  <el-input v-model="cContractDetail.applyWorkerDept" :disabled="!editor" />
-                </td>
-              </tr>
-              <tr>
-                <td class="th">是否需要签订合同:</td>
-                <td>
-                  <el-radio-group v-model="cContractDetail.isSign" :disabled="!editor">
-                    <el-radio :label="1">是</el-radio>
-                    <el-radio :label="0">否</el-radio>
-                  </el-radio-group>
-                </td>
-                <td class="th">质量把控人:</td>
-                <td>
-                  <UserOrgTree v-model="cContractDetail.qualityControllerId" :disabled="!editor" />
-                </td>
-              </tr>
-              <tr>
-                <td class="th">备注:</td>
-                <td colspan="3">
-                  <el-input
-                    type="textarea"
-                    :rows="4"
-                    v-model="cContractDetail.bz"
-                    :disabled="!editor"
-                  />
-                </td>
-              </tr>
-            </template>
-            <tr>
-              <td class="th">付款条件:</td>
-              <td colspan="3" style="height: 120px">{{ cContractDetail?.paymentTerms ?? '' }}</td>
-            </tr>
-            <h4 class="td_title"><i class="icon"></i>财务信息</h4>
-            <tr>
-              <td class="th">已付款金额(元):</td>
-              <td>{{ calcInfo?.pay }}</td>
-              <td class="th">合同余额(元):</td>
-              <td>{{ calcInfo?.balance }}</td>
-            </tr>
-          </table>
-        </div>
-      </template>
+      <!-- 合同里程碑 -->
+      <ContractMilestone
+        :contractId="mContractDetail?.id"
+        :contractAmount="mContractDetail?.contractAmount"
+      />
+      <!-- 回款 -->
+      <ContractReturnedMoney :contractId="mContractDetail?.id" />
     </div>
   </div>
 </template>
@@ -566,7 +368,6 @@ import {
 } from '@/service/contract'
 import { useQuery, useMutation } from '@tanstack/vue-query'
 import { Contract } from '@/interface/contract'
-import { contractTypeFilter } from './common'
 
 defineOptions({ name: 'XmhtComp' })
 
@@ -585,7 +386,6 @@ const editor = ref<Boolean>(false)
 const mContractDetail = ref<Contract>({} as Contract)
 const cContractDetail = ref<any>()
 const mContractDetails = ref<any[]>([])
-const childrenContracts = ref<any[]>([])
 
 /***
  * 软件产品列表
@@ -609,22 +409,6 @@ const { refetch } = useQuery(
   async () => await getContractsByProject(unref(_currentProjectId)),
   {
     onSuccess: (tData: Contract[]) => {
-      for (const contract of tData) {
-        if (contract.children && contract.children.length > 0) {
-          childrenContracts.value = contract.children.filter((child) => {
-            return child?.contractType !== 4
-          })
-          for (let i = 0; i < childrenContracts.value.length; i++) {
-            const item = childrenContracts.value[i]
-            if (item['id'] === contractId) {
-              contractInfoIndex.value = i + 1
-              cContractDetail.value = item
-              break
-            }
-          }
-          break
-        }
-      }
       mContractDetails.value = tData
       mContractDetail.value = tData[0] //初始化主合同
     }
@@ -654,22 +438,13 @@ const { data: assigneeTree } = useQuery(['assigneeTree'], async () => await quer
   staleTime: Infinity
 })
 /**
- * 切换合同
+ * 切换合同
  * **/
-const mainContractIndex = ref<number>(0)
 const contractInfoIndex = ref<number>(0)
-const switchContractInfo = (item: any, key: number, mKey?: number): void => {
+const switchContractInfo = (item: any, key: number): void => {
   contractInfoIndex.value = key
-  if (key === 0) {
-    //主合同
-    mContractDetail.value = item
-    if (mKey) {
-      mainContractIndex.value = mKey
-    }
-  } else {
-    cContractDetail.value = item
-    queryContractPaymentCalcMutate(item.id)
-  }
+  mContractDetail.value = item
+  console.log(item)
 }
 
 const saveContractHandle = () => {
@@ -698,12 +473,6 @@ const { mutate: saveContract } = useMutation(putContract, {
 const handleEditor = () => {
   editor.value = !editor.value
 }
-/***
- * 查看合同流程
- */
-const { mutate: startContractFlowMuate } = useMutation(startContractInvoice, {
-  onSuccess: (data) => openFlow(router, data, '开票申请')
-})
 
 /**
  * 流程查看