Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

ljy121 1 anno fa
parent
commit
22380f296f

+ 1 - 1
client/.env.dev

@@ -4,7 +4,7 @@ NODE_ENV=development
 VITE_DEV=false
 
 # 请求路径
-VITE_BASE_URL='http://10.10.10.7:48080'
+VITE_BASE_URL='http://localhost:48080'
 
 # 上传路径
 VITE_UPLOAD_URL='http://10.10.10.7:48080/admin-api/infra/file/upload'

+ 7 - 137
client/src/views/OaSystem/projectCenter/projectDetail/components/fjcl/index.scss

@@ -1,146 +1,16 @@
-._ProjectDetail_xmxx {
+._ProjectDetail_fjcl {
   display: flex;
   flex-direction: column;
   flex: 1;
   height: 100%;
   >div {
-    &:first-child {
-      display: flex;
-      justify-content: space-between;
-      >ul {
-        display: flex;
-        align-items: center;
-        >li {
-          padding: 5px 15px;
-        }
-        &:first-child {
-          >li {
-            font-size: 18px;
-            padding: 5px 25px;
-            &.active,
-            &:hover {
-              font-weight: bold;
-              background-color: #E3EEFF;
-              color: #2E77E6;
-            }
-          }
-        }
-      }
+    height: 100%;
+    &.treeBox {
+      width: 360px;
+      border-right: 1px solid #D0D8E0;
     }
-    &.content {
-      flex-grow: 1;
-      height: 0px;
-      overflow-y: auto;
-      >.cardBox {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-        margin-top: 20px;
-        >div {
-          width: 420px;
-          background: url("../../../../../../assets/imgs/OA/xmcb_bg.png") no-repeat;
-          background-size: 100% 100%;
-          height: 100px;
-          display: flex;
-          flex-direction: column;
-          justify-content: center;
-          padding-left: 30px;
-          >.title {
-            font-size: 18px;
-            font-weight: bold;
-            color: #2D333C;
-          }
-          >.numberBox {
-            color: #2E77E6;
-            >span {
-              vertical-align: bottom;
-              display: inline-block;
-            }
-            >.value {
-              font-size: 40px;
-              font-weight: bold;
-            }
-            >.unit {
-              font-size: 24px;
-              margin-left: 5px;
-              padding-bottom: 8px;
-            }
-          }
-        }
-        >ul {
-          display: flex;
-          flex: 1;
-          margin-left: 40px;
-          >li {
-            flex: 1;
-            display: flex;
-            flex-direction: column;
-            justify-content: center;
-            align-items: center;
-            border-right: 1px solid #DEE0E3;
-            &:last-child {
-              border-right: 0px;
-            }
-            >.value {
-              font-size: 24px;
-              color: #2D333C;
-              font-weight: bold;
-            }
-            >.title {
-              font-size: 20px;
-              color: #626B70;
-            }
-          }
-        }
-      }
-      >.tableBox {
-        >h4 {
-          padding: 10px 0px;
-          margin-top: 10px;
-          display: flex;
-          align-items: center;
-          >.icon {
-            display: inline-block;
-            width: 15px;
-            height: 16px;
-            margin-right: 5px;
-            background: url("../../../../../../assets/imgs/OA/table_title_icon.png") no-repeat;
-            background-size: 100% 100%;
-          }
-        }
-        &.tableLineBox {
-          
-          table {
-            width: 100%;
-            border-collapse: collapse;
-            thead {
-              th {
-                background-color: #F2F4F8;
-                font-weight: 500;
-                color: #3F4855;
-              }
-            }
-            th,td {
-              border: 1px solid #E8EBF1;
-              padding: 8px 20px;
-            }
-            td.title {
-              >span {
-                color: #2E77E6;
-                font-weight: bold;
-                display: inline-block;
-                margin-right: 20px;
-              }
-            }
-            tr.subtotal {
-              td {
-                font-weight: bold;
-                font-size: 24px;
-              }
-            }
-          }
-        }
-      }
+    &.previewBox {
+      flex: 1;
     }
   }
 }

+ 76 - 67
client/src/views/OaSystem/projectCenter/projectDetail/components/fjcl/index.vue

@@ -1,78 +1,87 @@
 <template>
-  <div class="_ProjectDetail_xmxx">
-    <div class="header">
-      <ul>
-        <li class="active">主合同</li>
-      </ul>
-    </div>
-    <div class="content">
-      <div class="cardBox">
-        <div>
-          <p class="title">项目总成本</p>
-          <p class="numberBox">
-            <span class="value">85620000</span>
-            <span class="unit">元</span>
-          </p>
-        </div>
-        <ul>
-          <li>
-            <p class="value">2456.16</p>
-            <p class="title">差旅费用(元)</p>
-          </li>
-          <li>
-            <p class="value">2456.16</p>
-            <p class="title">普通报销(元)</p>
-          </li>
-          <li>
-            <p class="value">2456.16</p>
-            <p class="title">分包费用(元)</p>
-          </li>
-          <li>
-            <p class="value">2456.16</p>
-            <p class="title">外包费用(元)</p>
-          </li>
-          <li>
-            <p class="value">2456.16</p>
-            <p class="title">人力成本(元)</p>
-          </li>
-        </ul>
-      </div>
-      <div class="tableBox tableLineBox">
-        <h4><i class="icon"></i>成本明细</h4>
-        <table>
-          <thead>
-            <tr>
-              <th>序号</th>
-              <th>月份</th>
-              <th>汇总</th>
-              <th>产值进度</th>
-              <th>用款成本(元)</th>
-              <th>人力成本(元)</th>
-              <th>普通报销成本(元)</th>
-              <th>出差成本(元)</th>
-            </tr>
-          </thead>
-          <tbody>
-            <tr>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-              <td></td>
-            </tr>
-          </tbody>
-        </table>
+  <div class="_ProjectDetail_fjcl">
+    <div class="treeBox">
+      <h4>材料分类</h4>
+      <div>
+        <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick" />
       </div>
     </div>
+    <div class="previewBox"></div>
   </div>
 </template>
 <script setup lang="ts">
 import { onMounted } from 'vue'
 defineOptions({ name: 'FjclComp' })
-const tableData = ref()
+
+interface Tree {
+  label: string
+  children?: Tree[]
+}
+const defaultProps = {
+  children: 'children',
+  label: 'label'
+}
+const handleNodeClick = (data: Tree) => {
+  console.log(data)
+}
+
+const data: Tree[] = [
+  {
+    label: 'Level one 1',
+    children: [
+      {
+        label: 'Level two 1-1',
+        children: [
+          {
+            label: 'Level three 1-1-1'
+          }
+        ]
+      }
+    ]
+  },
+  {
+    label: 'Level one 2',
+    children: [
+      {
+        label: 'Level two 2-1',
+        children: [
+          {
+            label: 'Level three 2-1-1'
+          }
+        ]
+      },
+      {
+        label: 'Level two 2-2',
+        children: [
+          {
+            label: 'Level three 2-2-1'
+          }
+        ]
+      }
+    ]
+  },
+  {
+    label: 'Level one 3',
+    children: [
+      {
+        label: 'Level two 3-1',
+        children: [
+          {
+            label: 'Level three 3-1-1'
+          }
+        ]
+      },
+      {
+        label: 'Level two 3-2',
+        children: [
+          {
+            label: 'Level three 3-2-1'
+          }
+        ]
+      }
+    ]
+  }
+]
 onMounted(() => {})
 </script>
 <style lang="scss" scoped>

+ 80 - 3
client/src/views/OaSystem/projectCenter/projectDetail/components/xmxx/index.scss

@@ -12,10 +12,11 @@
         align-items: center;
         >li {
           padding: 5px 15px;
+          cursor: pointer;
         }
         &:first-child {
           >li {
-            font-size: 18px;
+            font-size: 16px;
             padding: 5px 25px;
             &.active,
             &:hover {
@@ -79,6 +80,12 @@
               background-size: 100% 100%;
             }
           }
+          &:nth-child(1) {
+            >h4 {
+              margin-top: 0px;
+              padding-top: 0px;
+            }
+          }
         }
       }
       >.xmcyBox {
@@ -111,14 +118,13 @@
                 vertical-align: top;
               }
               >.imgBox {
-                border: 1px solid #f00;
-                border-radius: 50%;
                 width: 50px;
                 height: 50px;
                 position: relative;
                 >img {
                   width: 100%;
                   height: 100%;
+                  border-radius: 50%;
                 }
                 margin-right: 8px;
                 >.icon {
@@ -185,4 +191,75 @@
       }
     }
   }
+  .subModalByRightBottom {
+    position: fixed;
+    right: 0px;
+    bottom: 15px;
+    width: 45vw;
+    border-radius: 10px;
+    background: #FFFFFF;
+    box-shadow: -8px 0px 23px 0px rgba(203,212,221,0.37);
+    opacity: 1;
+    padding-left: 0px;
+    padding-right: 0px;
+    padding-bottom: 20px;
+    >.close_icon {
+      display: block;
+      position: absolute;
+      right: 20px;
+      top: 20px;
+      width: 20px;
+      height: 20px;
+      background: url("../../../../../../assets/imgs/OA/layout/close.png") no-repeat;
+      background-size: 100% 100%;
+      cursor: pointer;
+    }
+    >ul {
+      border-bottom: 1px solid #DEE0E3;
+      padding: 0px 10px;
+      >li {
+        display: inline-block;
+        font-size: 18px;
+        margin: 0px 20px;
+        padding: 15px 0px;
+        border-bottom: 2px solid transparent;
+        cursor: pointer;
+        &.active,
+        &:hover {
+          font-weight: bold;
+          color: #2E77E6;
+          border-bottom-color: #2E77E6;
+        }
+      }
+    }
+    >.tabContent {
+      overflow-y: auto;
+      height: calc(100% - 120px);
+      >div {
+        padding: 20px 30px;
+      }
+      >.tabContentOne {
+        padding-top: 0px;
+        h4 {
+          color: #2D333C;
+          margin: 35px 0px 5px 0px;
+        }
+      }
+      :deep(.el-form-item) {
+        flex-direction: column;
+      }
+      :deep(.el-form-item__label) {
+        justify-content: flex-start;
+        color: #505A69;
+        font-size: 16px;
+      }
+      :deep(.el-form-item--default){
+        margin-bottom: 5px;
+      }
+    }
+    >.btnGroup {
+      text-align: right;
+      padding-right: 20px;
+    }
+  }
 }

+ 450 - 134
client/src/views/OaSystem/projectCenter/projectDetail/components/xmxx/index.vue

@@ -2,127 +2,217 @@
   <div class="_ProjectDetail_xmxx">
     <div class="header">
       <ul>
-        <li class="active">主项目</li>
+        <template v-if="projectDetail['children'].length > 0">
+          <li
+            :class="{ active: projectInfoIndex === 0 }"
+            @click="switchProjectInfo(projectDetail, 0)"
+            >主项目</li
+          >
+          <li
+            v-for="(item, index) in projectDetail['children']"
+            :class="{ active: projectInfoIndex === index + 1 }"
+            :key="index"
+            @click="switchProjectInfo(item, index + 1)"
+            >子项目
+          </li>
+        </template>
       </ul>
       <ul>
-        <li @click="switchHandle(0)">项目信息</li>
-        <li @click="switchHandle(1)">项目成员</li>
-        <li @click="switchHandle(2)">项目阶段</li>
+        <li :class="{ active: currentIndex === 0 }" @click="switchHandle(0)">项目信息</li>
+        <li :class="{ active: currentIndex === 1 }" @click="switchHandle(1)">项目成员</li>
+        <li :class="{ active: currentIndex === 2 }" @click="switchHandle(2)">项目阶段</li>
       </ul>
     </div>
     <div class="content">
-      <div class="xmxxBox" v-if="currentIndex === 0">
-        <div class="tableBox">
-          <h4><i class="icon"></i>基本信息</h4>
-          <table>
-            <tr>
-              <td class="th">归属公司:</td>
-              <td>
-                <el-input v-model="projectDetail['belongCompanyname']" :disabled="!editor" />
-              </td>
-              <td class="th">立项时间:</td>
-              <td>
-                <el-date-picker
-                  style="width: 100%"
-                  :disabled="true"
-                  v-model="projectDetail['lxsj']"
-                  type="date"
-                  @change="($evt) => (projectDetail['lxsj'] = $evt)"
-                  placeholder="请选择立项时间"
-                />
-              </td>
-            </tr>
-            <tr>
-              <td class="th">销售人员:</td>
-              <td>
-                <UserOrgTree v-model="projectDetail['xsryId']" :disabled="!editor" />
-              </td>
-              <td class="th">行政区:</td>
-              <td>
-                <DistrictTree v-model="projectDetail['xzqdm']" :disabled="!editor" />
-              </td>
-            </tr>
-            <tr>
-              <td class="th">项目类别:</td>
-              <td>
-                <ProjectTypeTree v-model="projectDetail['projectTypeId']" :disabled="!editor" />
-              </td>
-              <td class="th">行业:</td>
-              <td>
-                <el-select
-                  style="width: 100%"
-                  v-model="projectDetail['hyId']"
-                  placeholder="请选择行业"
-                  :disabled="!editor"
-                >
-                  <el-option
-                    v-for="item in industryList"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value"
-                  />
-                </el-select>
-              </td>
-            </tr>
-            <tr>
-              <td class="th">预估工期(天):</td>
-              <td>
-                <el-input v-model="projectDetail['yggq']" :disabled="!editor" />
-              </td>
-              <td class="th"></td>
-              <td></td>
-            </tr>
-          </table>
-        </div>
-        <div class="tableBox">
-          <h4><i class="icon"></i>验收信息</h4>
-          <table>
-            <tr>
-              <td class="th">验收时间:</td>
-              <td>{{ detailData['yssj'] }}</td>
-              <td class="th">验收单有效性:</td>
-              <td>{{ detailData['ysdyxx'] }}</td>
-            </tr>
-          </table>
-        </div>
-        <div class="tableBox">
-          <h4><i class="icon"></i>产值信息</h4>
-          <table>
-            <tr>
-              <td class="th">是否签合同:</td>
-              <td>{{ detailData['isSign'] === 1 ? '是' : '否' }}</td>
-              <td class="th">本项目成本(万):</td>
-              <td>{{ detailData['xmcbys'] }}</td>
-            </tr>
-            <tr>
-              <td class="th">本项目产值(万):</td>
-              <td>{{ detailData['outputValue'] }}</td>
-              <td class="th">利益分成(公司/部门):</td>
-              <td>{{ detailData['shareRatio'] }}</td>
-            </tr>
-          </table>
-        </div>
-      </div>
+      <template v-if="currentIndex === 0">
+        <template v-if="projectInfoIndex === 0">
+          <div class="xmxxBox">
+            <div class="tableBox">
+              <h4 :style="{ marginTop: projectDetail['children'].length > 0 ? '15px' : '0px' }">
+                <i class="icon"></i>基本信息
+              </h4>
+              <table>
+                <tr>
+                  <td class="th">项目经理:</td>
+                  <td>
+                    <UserOrgTree v-model="projectDetail['xmjlId']" :disabled="!editor" />
+                  </td>
+                  <td class="th">责任部门</td>
+                  <td>
+                    <el-input v-model="projectDetail['zrbm']" :disabled="!editor" />
+                  </td>
+                </tr>
+                <tr>
+                  <td class="th">项目类别:</td>
+                  <td>
+                    <ProjectTypeTree v-model="projectDetail['projectTypeId']" :disabled="!editor" />
+                  </td>
+                  <td class="th">立项时间:</td>
+                  <td>
+                    <el-date-picker
+                      style="width: 100%"
+                      :disabled="true"
+                      v-model="projectDetail['lxsj']"
+                      type="date"
+                      @change="($evt) => (projectDetail['lxsj'] = $evt)"
+                      placeholder="请选择立项时间"
+                    />
+                  </td>
+                </tr>
+                <tr>
+                  <td class="th">销售人员:</td>
+                  <td>
+                    <UserOrgTree v-model="projectDetail['xsryId']" :disabled="!editor" />
+                  </td>
+                  <td class="th">行政区:</td>
+                  <td>
+                    <DistrictTree v-model="projectDetail['xzqdm']" :disabled="!editor" />
+                  </td>
+                </tr>
+                <tr>
+                  <td class="th">行业:</td>
+                  <td>
+                    <el-select
+                      style="width: 100%"
+                      v-model="projectDetail['hyId']"
+                      placeholder="请选择行业"
+                      :disabled="!editor"
+                    >
+                      <el-option
+                        v-for="item in industryList"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      />
+                    </el-select>
+                  </td>
+                  <td class="th">预估工期(天):</td>
+                  <td>
+                    <el-input v-model="projectDetail['yggq']" :disabled="!editor" />
+                  </td>
+                </tr>
+                <tr>
+                  <td class="th">归属公司:</td>
+                  <td>
+                    <el-input v-model="projectDetail['belongCompanyname']" :disabled="!editor" />
+                  </td>
+                  <td class="th"></td>
+                  <td> </td>
+                </tr>
+              </table>
+            </div>
+            <div class="tableBox">
+              <h4><i class="icon"></i>验收信息</h4>
+              <table>
+                <tr>
+                  <td class="th">验收时间:</td>
+                  <td>{{ projectDetail['yssj'] }}</td>
+                  <td class="th">验收单有效性:</td>
+                  <td>{{ projectDetail['ysdyxx'] }}</td>
+                </tr>
+              </table>
+            </div>
+            <div class="tableBox">
+              <h4><i class="icon"></i>产值信息</h4>
+              <table>
+                <tr>
+                  <td class="th">是否签合同:</td>
+                  <td>{{ projectDetail['isSign'] === 1 ? '是' : '否' }}</td>
+                  <td class="th">本项目成本(万):</td>
+                  <td>{{ projectDetail['xmcbys'] }}</td>
+                </tr>
+                <tr>
+                  <td class="th">本项目产值(万):</td>
+                  <td>{{ projectDetail['outputValue'] }}</td>
+                  <td class="th">利益分成(公司/部门):</td>
+                  <td>{{ projectDetail['shareRatio'] }}</td>
+                </tr>
+              </table>
+            </div>
+          </div>
+        </template>
+        <template v-else>
+          <div class="xmxxBox" v-if="currentIndex === 0">
+            <div class="tableBox">
+              <h4 :style="{ marginTop: projectDetail['children'].length > 0 ? '15px' : '0px' }">
+                <i class="icon"></i>基本信息
+              </h4>
+              <table>
+                <tr>
+                  <td class="th">项目经理:</td>
+                  <td>
+                    <UserOrgTree v-model="projectDetail['xmjlId']" :disabled="!editor" />
+                  </td>
+                  <td class="th">责任部门</td>
+                  <td>
+                    <el-input v-model="projectDetail['zrbm']" :disabled="!editor" />
+                  </td>
+                </tr>
+                <tr>
+                  <td class="th">项目编号:</td>
+                  <td>
+                    <el-input v-model="projectDetail['yggq']" :disabled="!editor" />
+                  </td>
+                  <td class="th">预估工期(天):</td>
+                  <td>
+                    <el-input v-model="projectDetail['yggq']" :disabled="!editor" />
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <div class="tableBox">
+              <h4><i class="icon"></i>产值信息</h4>
+              <table>
+                <tr>
+                  <td class="th">是否签合同:</td>
+                  <td>{{ projectDetail['isSign'] === 1 ? '是' : '否' }}</td>
+                  <td class="th">本项目成本(万):</td>
+                  <td>{{ projectDetail['xmcbys'] }}</td>
+                </tr>
+                <tr>
+                  <td class="th">本项目产值(万):</td>
+                  <td>{{ projectDetail['outputValue'] }}</td>
+                  <td class="th">利益分成(公司/部门):</td>
+                  <td>{{ projectDetail['shareRatio'] }}</td>
+                </tr>
+              </table>
+            </div>
+          </div>
+        </template>
+      </template>
       <div class="xmcyBox" v-else-if="currentIndex === 1">
         <ul>
           <li v-for="(item, index) in projectWorkerRelationList" :key="index">
             <div class="imgBox">
-              <img src="" />
+              <img src="../../../../../../assets/imgs/avatar.gif" />
               <i class="icon"></i>
             </div>
             <div class="userInfo">
               <div class="titleBox">
-                <h4>泮道炬</h4>
+                <h4>{{ item['workerName'] }}</h4>
                 <span class="tag">{{ item['responsibility'] }}</span>
               </div>
-              <p class="dept">自然资源产品部</p>
+              <p class="dept">{{ item['deptName'] }}</p>
               <p class="txt">毕业院校:浙江水利水电职业技术学院</p>
               <p class="txt">学历:大专</p>
-              <p class="txt">电话:15932242593</p>
+              <p class="txt">电话:{{ item['mobile'] }}</p>
             </div>
-            <i class="del_icon"><Icon icon="ep:delete" /></i>
+
+            <el-popconfirm
+              title="确定删除该成员?"
+              width="180px"
+              @confirm="deleWorkerRelationHandle(item)"
+            >
+              <template #reference>
+                <i class="del_icon">
+                  <Icon icon="ep:delete" />
+                </i>
+              </template>
+            </el-popconfirm>
+          </li>
+          <li class="operation" @click="workerRelationBool = true">
+            <i class="icon"></i>项目成员
           </li>
-          <li class="operation" @click="addWorkerRelationHandle"> <i class="icon"></i>项目成员 </li>
         </ul>
       </div>
       <div class="xmjdBox" v-else>
@@ -140,6 +230,117 @@
         </div>
       </div>
     </div>
+    <div class="subModalByRightBottom" style="width: 30vw" v-show="workerRelationBool">
+      <ul class="tab">
+        <li>添加成员</li>
+      </ul>
+      <span class="close_icon" @click="workerRelationBool = false"></span>
+      <div class="tabContent">
+        <div class="tabContentOne" style="padding: 20px 30px">
+          <div class="formBox">
+            <el-form label-width="120px">
+              <el-row>
+                <el-col :span="24">
+                  <el-form-item label="人员选择">
+                    <UserOrgTree v-model="projectWorkerRelation['workerId']" :disabled="!editor" />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row :gutter="24">
+                <el-col :span="24">
+                  <el-form-item label="相关职责">
+                    <el-input
+                      type="textarea"
+                      v-model="projectWorkerRelation['responsibility']"
+                      rows="6"
+                    />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </div>
+        </div>
+      </div>
+      <div class="btnGroup">
+        <el-button type="default" @click="workerRelationBool = false">取消</el-button>
+        <el-button type="primary" @click="bindProjectWorkerRelation">保存</el-button>
+      </div>
+    </div>
+    <div class="subModalByRightBottom" v-show="subProjectShow">
+      <ul class="tab">
+        <li>项目信息</li>
+      </ul>
+      <span class="close_icon" @click="subProjectShow = false"></span>
+      <div class="tabContent">
+        <div class="tabContentOne">
+          <div class="formBox">
+            <el-form :model="projectChildForm" label-width="120px">
+              <h4>基本信息</h4>
+              <el-row>
+                <el-col :span="24">
+                  <el-form-item label="项目名称">
+                    <el-input v-model="projectChildForm.xmmc" />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row :gutter="24">
+                <el-col :span="12">
+                  <el-form-item label="项目经理">
+                    <UserOrgTree v-model="projectChildForm.xmjl" :disabled="!editor" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="责任部门">
+                    <el-input v-model="projectChildForm.zrbm" />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row :gutter="24">
+                <el-col :span="12">
+                  <el-form-item label="项目编号">
+                    <el-input v-model="projectChildForm.xmbh" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="预估工期(天)">
+                    <el-input v-model="projectChildForm.yggq" />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <h4>产值信息</h4>
+              <el-row :gutter="24">
+                <el-col :span="12">
+                  <el-form-item label="总合同额(元)">
+                    <el-input v-model="projectChildForm.contractAmount" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="本项目产值(元)">
+                    <el-input v-model="projectChildForm.outputValue" />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row :gutter="24">
+                <el-col :span="12">
+                  <el-form-item label="利益分成(公司/部门)">
+                    <el-input v-model="projectChildForm.shareRatio" />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="本项目成本(元)">
+                    <el-input v-model="projectChildForm.projectCost" />
+                  </el-form-item>
+                </el-col>
+              </el-row>
+            </el-form>
+          </div>
+        </div>
+      </div>
+      <div class="btnGroup">
+        <el-button type="default" @click="subProjectShow = false">取消</el-button>
+        <el-button type="primary" @click="submitProjectChild">提交</el-button>
+      </div>
+    </div>
   </div>
 </template>
 <script setup lang="ts">
@@ -154,60 +355,175 @@ defineOptions({ name: 'XmxxComp' })
 const $props = defineProps({
   detailData: {
     type: Object,
-    default: () => {
-      return {}
-    }
+    default: () => ({})
   },
   editor: {
     type: Boolean,
     default: true
   }
 })
+let _mainProjectId: string = ''
 /***
- * 根据项目ID查询项目成员
+ * 查询项目和子项目详情数据
  * **/
-const projectWorkerRelationList = shallowRef()
-const queryProjectWorkerRelation = (projectId: string): void => {
-  const urlApi = `/project-worker-relation/list?projectId=${projectId}`
-  request.get({ url: urlApi }, '/business').then((result) => {
-    projectWorkerRelationList.value = result
+const subProjectShow = ref<boolean>(false)
+const projectDetail = ref({
+  id: '',
+  children: []
+})
+function queryProjectWithChild(): void {
+  const urlApi = `/project-with-children`
+  const sendData = {
+    id: _mainProjectId
+  }
+  request.get({ url: urlApi, params: sendData }, '/business').then((resultData) => {
+    projectDetail.value = resultData
+  })
+}
+const currentIndex = ref<number>(0)
+const switchHandle: (i: number) => void = (i: number) => {
+  currentIndex.value = i
+}
+/***
+ * 添加子项目
+ * **/
+const switchSubProject = () => {
+  subProjectShow.value = true
+}
+const projectChildForm = ref({
+  xmmc: '',
+  xmbh: '',
+  xmjlId: '',
+  xmjl: '',
+  zrbmId: '',
+  zrbm: '',
+  yggq: 0,
+  contractAmount: 0,
+  projectCost: 0,
+  outputValue: 0,
+  shareRatio: 0
+})
+const addProjectChild = (): void => {
+  const urlApi = `/project/child`
+  const sendData = {
+    pid: _mainProjectId,
+    ...projectChildForm.value
+  }
+  request.post({ url: urlApi, data: sendData }, '/business').then((resultData) => {
+    if (resultData) {
+      ElMessage({
+        message: '新增子项目成功',
+        type: 'success'
+      })
+      subProjectShow.value = false
+    }
+  })
+}
+const submitProjectChild = () => {
+  addProjectChild()
+}
+/**
+ * 切换子项目信息
+ * **/
+const projectInfoIndex = ref<number>(0)
+const switchProjectInfo = (item: any, key: number): void => {
+  _mainProjectId = item.id
+  projectInfoIndex.value = key
+  initDetailAjax()
+}
+/**
+ * 项目编辑保存成操作
+ * **/
+const saveProjectHandle = (): void => {
+  const urlApi = `/project`
+  request.put({ url: urlApi, data: projectDetail.value }, '/business').then((resultData) => {
+    if (resultData) {
+      ElMessage({
+        message: '保存项目成功',
+        type: 'success'
+      })
+    }
   })
 }
 /**
  * 项目阶段/项目里程碑
  * **/
 const projectMilestoneList = shallowRef()
-const queryMilestoneList = (projectId: string): void => {
-  const urlApi = `/project-milestone/list?projectId=${projectId}`
-  request.get({ url: urlApi }, '/business').then((result) => {
-    projectWorkerRelationList.value = result
+const queryMilestoneList = (): void => {
+  const urlApi = `/project-milestone/list?projectId=${_mainProjectId}`
+  request.get({ url: urlApi }, '/business').then((resultData) => {
+    projectWorkerRelationList.value = resultData
+  })
+}
+/**
+ * 项目成员相关接口(查询、新增、删除)
+ * **/
+const projectWorkerRelation = ref<{
+  workerId: string
+  responsibility: string
+}>({
+  workerId: '',
+  responsibility: ''
+})
+const workerRelationBool = ref<boolean>(false)
+const projectWorkerRelationList = shallowRef()
+const queryProjectWorkerRelation = (): void => {
+  const urlApi = `/project-worker-relation/list?projectId=${_mainProjectId}`
+  request.get({ url: urlApi }, '/business').then((resultData) => {
+    projectWorkerRelationList.value = resultData
+  })
+}
+const bindProjectWorkerRelation = (): void => {
+  const urlApi = `/project-worker-relation/bind`
+  const sendData = {
+    ...projectWorkerRelation.value,
+    projectId: _mainProjectId
+  }
+  request.post({ url: urlApi, data: sendData }, '/business').then((resultData) => {
+    if (!resultData) {
+      ElMessage({
+        message: '添加成员成功',
+        type: 'success'
+      })
+      queryProjectWorkerRelation()
+      workerRelationBool.value = false
+    }
+  })
+}
+const deleWorkerRelationHandle = (item): void => {
+  const urlApi = `/project-worker-relation/unbind`
+  const sendData = {
+    projectId: _mainProjectId,
+    workerId: item['workerId']
+  }
+  request.post({ url: urlApi, data: sendData }, '/business').then((resultData) => {
+    if (!resultData) {
+      ElMessage({
+        message: '删除成功',
+        type: 'success'
+      })
+      queryProjectWorkerRelation()
+    }
   })
 }
-const projectDetail = reactive($props.detailData)
+const initDetailAjax = () => {
+  queryProjectWorkerRelation()
+  queryMilestoneList()
+}
 watch(
   () => $props.detailData,
   (nVal) => {
-    queryProjectWorkerRelation(nVal.id)
-    queryMilestoneList(nVal.id)
+    _mainProjectId = nVal.id
+    queryProjectWithChild()
+    initDetailAjax()
+  },
+  {
+    immediate: true
   }
 )
-const currentIndex = ref<number>(0)
-const switchHandle: (i: number) => void = (i: number) => {
-  currentIndex.value = i
-}
-
-const addProjectHandle = (): void => {
-  const urlApi = `/project`
-  request.put({ url: urlApi, data: projectDetail }, '/business').then((result) => {
-    projectWorkerRelationList.value = result
-  })
-}
-/**
- * 添加主项目成员
- * **/
-const addWorkerRelationHandle = () => {}
 defineExpose({
-  addProjectHandle
+  saveProjectHandle,
+  switchSubProject
 })
 </script>
 <style lang="scss" scoped>

+ 52 - 160
client/src/views/OaSystem/projectCenter/projectDetail/projectDetail.scss

@@ -6,7 +6,7 @@
   overflow-y: auto;
   display: flex;
   flex-direction: column;
-  >div {
+  >div:not(.subModalByRightBottom) {
     background-color: #fff;
     padding: 0px 20px 0px 20px;
     &.detailHeader {
@@ -19,19 +19,19 @@
             display: flex;
             align-items: center;
             >h2 {
-              font-size: 28px;
-              max-width: 760px;
-            }
-            >.subTitle {
-              color: #8B969C;
-              font-size: 20px;
-            }
-            .statu {
-              background-color: #05CE9E;
-              color: #fff;
-              padding: 3px 15px;
-              border-radius: 2px;
-              font-size: 18px;
+              font-size: 22px;
+              max-width: 860px;
+              >.subTitle {
+                color: #8B969C;
+                font-size: 18px;
+              }
+              >.statu {
+                background-color: #05CE9E;
+                color: #fff;
+                padding: 3px 12px;
+                border-radius: 2px;
+                font-size: 16px;
+              }
             }
           }
           >ul {
@@ -39,65 +39,21 @@
             align-items: center;
             >li {
               cursor: pointer;
-              padding: 3px 15px;
+              padding: 5px 10px;
               border-radius: 2px;
-              font-size: 18px;
-              color: #2E77E6;
+              font-size: 16px;
+              // color: #2E77E6;
+              color: #fff;
               background-color: #E3EEFF;
               margin-left: 10px;
+              background: #2E77E6;
+              border-radius: 4px 4px 4px 4px;
             }
           }
         }
         &:nth-child(2) {
           display: flex;
-          margin-bottom: 20px;
-          >p {
-            margin-right: 40px;
-            &:nth-child(1) {
-              >.title {
-                &::before {
-                  background-color: #2E77E6;
-                }
-              }
-            }
-            &:nth-child(2) {
-              >.title {
-                &::before {
-                  background-color: #F9A527;
-                }
-              }
-            }
-            &:nth-child(3) {
-              >.title {
-                &::before {
-                  background-color: #F83535;
-                }
-              }
-            }
-            >span {
-              vertical-align: middle;
-              &.title {
-                color: #626B70;
-                &::before {
-                  content: "";
-                  display: inline-block;
-                  width: 8px;
-                  height: 8px;
-                  border-radius: 50%;
-                  margin-right: 5px;
-                }
-              }
-              &.value {
-                font-weight: bold;
-                font-size: 20px;
-                color: #121518;
-                margin-left: 10px;
-              }
-            }
-          }
-        }
-        &:nth-child(3) {
-          display: flex;
+          align-items: center;
           justify-content: space-between;
           >ul {
             display: flex;
@@ -106,13 +62,13 @@
               cursor: pointer;
               display: flex;
               align-items: center;
-              font-size: 20px;
+              font-size: 16px;
               font-weight: bold;
               >i {
                 display: inline-block;
                 margin-right: 5px;
-                width: 22px;
-                height: 22px;
+                width: 20px;
+                height: 20px;
                 background-size: 100% 100%;
                 background-repeat: no-repeat;
               }
@@ -166,35 +122,46 @@
           >div {
             display: flex;
             align-items: center;
-            > p {
-              display: flex;
-              align-items: center;
-              margin-left: 40px;
-              > i {
-                display: inline-block;
-                margin-right: 5px;
-                width: 16px;
-                height: 16px;
-                background-size: 100% 100%;
-                background-repeat: no-repeat;
-              }
+            >p {
+              margin-right: 40px;
               &:nth-child(1) {
-                > i {
-                  background-image: url('../../../../assets/imgs/OA/bm_icon.png');
+                >.title {
+                  &::before {
+                    background-color: #2E77E6;
+                  }
                 }
               }
               &:nth-child(2) {
-                > i {
-                  background-image: url('../../../../assets/imgs/OA/khjl_icon.png');
+                >.title {
+                  &::before {
+                    background-color: #F9A527;
+                  }
+                }
+              }
+              &:nth-child(3) {
+                margin-right: 0px;
+                >.title {
+                  &::before {
+                    background-color: #F83535;
+                  }
                 }
               }
               >span {
                 vertical-align: middle;
-                font-size: 18px;
                 &.title {
                   color: #626B70;
+                  &::before {
+                    content: "";
+                    display: inline-block;
+                    width: 8px;
+                    height: 8px;
+                    border-radius: 50%;
+                    margin-right: 5px;
+                  }
                 }
                 &.value {
+                  font-weight: bold;
+                  font-size: 20px;
                   color: #121518;
                   margin-left: 10px;
                 }
@@ -211,79 +178,4 @@
       padding-bottom: 20px;
     }
   }
-  .subProjectModalBox {
-    position: fixed;
-    top: 200px;
-    right: 0px;
-    bottom: 15px;
-    width: 45vw;
-    border-radius: 10px;
-    background: #FFFFFF;
-    box-shadow: -8px 0px 23px 0px rgba(203,212,221,0.37);
-    opacity: 1;
-    padding-left: 0px;
-    padding-right: 0px;
-    >ul {
-      border-bottom: 1px solid #DEE0E3;
-      padding: 0px 10px;
-      >li {
-        display: inline-block;
-        font-size: 18px;
-        margin: 0px 20px;
-        padding: 15px 0px;
-        border-bottom: 2px solid transparent;
-        cursor: pointer;
-        &.active,
-        &:hover {
-          font-weight: bold;
-          color: #2E77E6;
-          border-bottom-color: #2E77E6;
-        }
-      }
-    }
-    >.tabContent {
-      overflow-y: auto;
-      height: calc(100% - 120px);
-      >div {
-        padding: 20px 30px;
-      }
-      >.tabContentOne {
-        padding-top: 0px;
-        h4 {
-          color: #2D333C;
-          margin: 35px 0px 5px 0px;
-        }
-      }
-    }
-    >.btnGroup {
-      text-align: right;
-      padding-right: 20px;
-    }
-  }
-  .subProjectModalBox {
-    >.close_icon {
-      display: block;
-      position: absolute;
-      right: 20px;
-      top: 20px;
-      width: 20px;
-      height: 20px;
-      background: url("../../../../assets/imgs/OA/layout/close.png") no-repeat;
-      background-size: 100% 100%;
-      cursor: pointer;
-    }
-    >.tabContent {
-      :deep(.el-form-item) {
-        flex-direction: column;
-      }
-      :deep(.el-form-item__label) {
-        justify-content: flex-start;
-        color: #505A69;
-        font-size: 16px;
-      }
-      :deep(.el-form-item--default){
-        margin-bottom: 5px;
-      }
-    }
-  }
 }

+ 24 - 155
client/src/views/OaSystem/projectCenter/projectDetail/projectDetail.vue

@@ -3,9 +3,11 @@
     <div class="detailHeader">
       <div>
         <div>
-          <h2>{{ projectDetail['xmmc'] }}</h2>
-          <span class="subTitle">({{ projectDetail['xmbh'] }})</span>
-          <span class="statu">进行中</span>
+          <h2>
+            {{ projectDetail['xmmc'] }}
+            <span class="subTitle">({{ projectDetail['xmbh'] }})</span>
+            <span class="statu">进行中</span>
+          </h2>
         </div>
         <ul>
           <li @click="editorProject">{{ !isEditorProject ? '编辑' : '保存' }}</li>
@@ -16,20 +18,6 @@
           <li>查看流程</li>
         </ul>
       </div>
-      <div>
-        <p>
-          <span class="title">合同额(元):</span>
-          <span class="value">{{ projectDetail['contractAmount'] }}</span>
-        </p>
-        <p>
-          <span class="title">应收款(元):</span>
-          <span class="value">11500</span>
-        </p>
-        <p>
-          <span class="title">合同余额(元):</span>
-          <span class="value">17500</span>
-        </p>
-      </div>
       <div>
         <ul>
           <li @click="switchComponent(XmxxComp, 0)" :class="currentIndex === 0 ? 'active' : ''"
@@ -48,16 +36,18 @@
             ><i class="icon"></i>附件材料</li
           >
         </ul>
-        <div>
+        <div class="projectInfo">
           <p>
-            <i class="icon"></i>
-            <span class="title">责任部门:</span>
-            <span class="value">{{ projectDetail['xmjl'] }}</span>
+            <span class="title">合同额(元):</span>
+            <span class="value">{{ projectDetail['contractAmount'] }}</span>
           </p>
           <p>
-            <i class="icon"></i>
-            <span class="title">项目经理:</span>
-            <span class="value">{{ projectDetail['zrbm'] }}</span>
+            <span class="title">应收款(元):</span>
+            <span class="value">11500</span>
+          </p>
+          <p>
+            <span class="title">合同余额(元):</span>
+            <span class="value">17500</span>
           </p>
         </div>
       </div>
@@ -70,81 +60,6 @@
         :editor="isEditorProject"
       />
     </div>
-    <div class="subProjectModalBox" v-show="subProjectShow">
-      <ul class="tab">
-        <li>项目信息</li>
-      </ul>
-      <span class="close_icon" @click="subProjectShow = false"></span>
-      <div class="tabContent">
-        <div class="tabContentOne">
-          <div class="formBox">
-            <el-form :model="projectChildForm" label-width="120px">
-              <h4>基本信息</h4>
-              <el-row>
-                <el-col :span="24">
-                  <el-form-item label="项目名称">
-                    <el-input v-model="projectChildForm.xmmc" />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-              <el-row :gutter="24">
-                <el-col :span="12">
-                  <el-form-item label="项目经理">
-                    <el-input v-model="projectChildForm.xmjl" />
-                  </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                  <el-form-item label="责任部门">
-                    <el-input v-model="projectChildForm.zrbm" />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-              <el-row :gutter="24">
-                <el-col :span="12">
-                  <el-form-item label="项目编号">
-                    <el-input v-model="projectChildForm.xmbh" />
-                  </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                  <el-form-item label="预估工期(天)">
-                    <el-input v-model="projectChildForm.yggq" />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-              <h4>产值信息</h4>
-              <el-row :gutter="24">
-                <el-col :span="12">
-                  <el-form-item label="总合同额(元)">
-                    <el-input v-model="projectChildForm.contractAmount" />
-                  </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                  <el-form-item label="本项目产值(元)">
-                    <el-input v-model="projectChildForm.outputValue" />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-              <el-row :gutter="24">
-                <el-col :span="12">
-                  <el-form-item label="利益分成(公司/部门)">
-                    <el-input v-model="projectChildForm.shareRatio" />
-                  </el-form-item>
-                </el-col>
-                <el-col :span="12">
-                  <el-form-item label="本项目成本(元)">
-                    <el-input v-model="projectChildForm.projectCost" />
-                  </el-form-item>
-                </el-col>
-              </el-row>
-            </el-form>
-          </div>
-        </div>
-      </div>
-      <div class="btnGroup">
-        <el-button type="default">取消</el-button>
-        <el-button type="primary" @click="submitProjectChild">提交</el-button>
-      </div>
-    </div>
   </div>
 </template>
 <script setup lang="ts">
@@ -153,7 +68,7 @@ import { useRoute } from 'vue-router'
 import request from '@/config/axios'
 
 defineOptions({ name: 'ProjectDetail' })
-const dynamicRef = ref<Component>()
+const dynamicRef = shallowRef<Component>()
 const XmxxComp = defineAsyncComponent(() => {
   return import('./components/xmxx/index.vue')
 })
@@ -166,21 +81,21 @@ const XmcbComp = defineAsyncComponent(() => {
 const FjclComp = defineAsyncComponent(() => {
   return import('./components/fjcl/index.vue')
 })
-const currentComponent = ref<Component>(XmxxComp)
-const currentIndex = ref<number>(0)
+const currentComponent = shallowRef<Component>(XmxxComp)
+const currentIndex = shallowRef<number>(0)
 const switchComponent: (c: Component, i: number) => void = (c: Component, i: number) => {
   currentComponent.value = c
   currentIndex.value = i
 }
-const subProjectShow = ref<boolean>(false)
 const addSubProject: () => void = () => {
-  subProjectShow.value = true
+  //@ts-ignore
+  dynamicRef.value?.switchSubProject()
 }
 
 /**
  * 项目详情后台接口
  * **/
-const projectDetail = ref({
+const projectDetail = shallowRef({
   xmmc: ''
 })
 const queryProjectDetail = async (id: any): Promise<void> => {
@@ -191,58 +106,10 @@ const queryProjectDetail = async (id: any): Promise<void> => {
   const result = await request.get({ url: urlApi, params: sendData }, '/business')
   projectDetail.value = result
 }
-const queryProjectWithChild = async (id: any): Promise<void> => {
-  const urlApi = `/project-with-children`
-  const sendData = {
-    id: id
-  }
-  const result = await request.get({ url: urlApi, params: sendData }, '/business')
-  console.log('result~~~~~~~~~~')
-  console.log(result)
-}
 const route = useRoute()
 const query = route.query
 if (query.id) {
   queryProjectDetail(query.id)
-  queryProjectWithChild(query.id)
-}
-/***
- * 添加子项目
- * **/
-const projectChildForm = ref({
-  xmmc: '',
-  xmbh: '',
-  xmjlId: '',
-  xmjl: '',
-  zrbmId: '',
-  zrbm: '',
-  yggq: 0,
-  contractAmount: 0,
-  projectCost: 0,
-  outputValue: 0,
-  shareRatio: 0
-})
-const addProjectChild = (): void => {
-  const urlApi = `/project/child`
-  const sendData = {
-    pid: query.id,
-    ...projectChildForm.value
-  }
-  request.post({ url: urlApi, data: sendData }, '/business')
-}
-/***
- * 添加项目成员
- * **/
-const addWorkerRelation = (): void => {
-  const urlApi = `/project-worker-relation/bind`
-  const sendData = {
-    projectId: '',
-    workerId: ''
-  }
-  request.post({ url: urlApi, data: sendData }, '/business')
-}
-const submitProjectChild = () => {
-  addProjectChild()
 }
 /**
  * 项目编辑
@@ -250,9 +117,11 @@ const submitProjectChild = () => {
 const isEditorProject = ref<boolean>(true)
 const editorProject: () => void = (): void => {
   isEditorProject.value = !isEditorProject.value
-  dynamicRef.value?.addProjectHandle()
+  if (isEditorProject.value) return
+  //@ts-ignore
+  dynamicRef.value.saveProjectHandle()
 }
 </script>
 <style lang="scss" scoped>
-@import url(./projectDetail.scss);
+@import './projectDetail.scss';
 </style>

+ 6 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/leave/controller/LeaveController.java

@@ -11,6 +11,8 @@ import com.zjugis.framework.workflow.model.BaseController;
 import com.zjugis.framework.workflow.utils.Select;
 import com.zjugis.framework.workflow.workflow.WorkFlow;
 import com.zjugis.module.system.api.dict.DictDataApi;
+import com.zjugis.module.system.api.user.AdminUserApi;
+import com.zjugis.module.system.api.user.dto.AdminUserRespDTO;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -38,14 +40,18 @@ public class LeaveController extends BaseController {
     private DictDataApi dictDataApi;
     @Resource
     private LeaveService leaveService;
+    @Resource
+    private AdminUserApi adminUserApi;
 
     @WorkFlow(isReceiveMaterial = true, isReceiveOpinion = true)
     @ResponseBody
     @GetMapping("/index")
     public String index(String activityTemplateId, String flowInstanceId, String userId) throws Exception {
         Map<String, Object> map = new HashMap<>();
+        AdminUserRespDTO userRespDTO = adminUserApi.getUser(userId).getCheckedData();
         List<Select> leaveTypeList = SelectConvert.INSTANCE.convertList(dictDataApi.getDictDataList(DictConstants.TYPE_LEAVE).getCheckedData());
         map.put("leaveTypeJSON", JSON.toJSONString(leaveTypeList));
+        map.put("user", userRespDTO);
         return resultPage(map);
     }
 

+ 30 - 0
zjugis-business/src/main/java/com/zjugis/business/flow/leave/event/LeaveEvent.java

@@ -192,4 +192,34 @@ public class LeaveEvent extends BaseController {
             throw new BusinessException("执行事件出错,请联系管理员!");
         }
     }
+
+    @PostMapping("/greatThan3")
+    public String greatThan3(@ParamModel Map flowInstance, @ParamModel Map flowDirectionInstance, @ParamModel Map previousActivityInstance, @ParamModel Map previousGatewayInstance, @ParamModel Map nextActivityTemplate, @ParamModel Map nextGatewayInstance) {
+        try {
+            String flowInstanceId = flowInstance.get("id").toString();
+            LeaveDO entity = leaveService.findByInstanceId(flowInstanceId);
+            if(entity != null && entity.getLeaveHours() != null
+                    && entity.getLeaveHours() > (7.5*3)){
+                return "true";
+            }
+            return "false";
+        } catch (Exception ex) {
+            return error(ex.getMessage(), ErrorCode.DEFAULT);
+        }
+    }
+
+    @PostMapping("/greatThan7")
+    public String greatThan7(@ParamModel Map flowInstance, @ParamModel Map flowDirectionInstance, @ParamModel Map previousActivityInstance, @ParamModel Map previousGatewayInstance, @ParamModel Map nextActivityTemplate, @ParamModel Map nextGatewayInstance) {
+        try {
+            String flowInstanceId = flowInstance.get("id").toString();
+            LeaveDO entity = leaveService.findByInstanceId(flowInstanceId);
+            if(entity != null && entity.getLeaveHours() != null
+                    && entity.getLeaveHours() > (7.5*7)){
+                return "true";
+            }
+            return "false";
+        } catch (Exception ex) {
+            return error(ex.getMessage(), ErrorCode.DEFAULT);
+        }
+    }
 }

+ 2 - 2
zjugis-business/src/main/resources/static/login.html

@@ -44,9 +44,9 @@
                         return;
                     }
                     var a = {};
-                    a.v = result.data.access_token;
+                    a.v = JSON.stringify(result.data.access_token);
                     var r = {};
-                    r.v = result.data.refresh_token;
+                    r.v = JSON.stringify(result.data.refresh_token);
                     // 设置到 localStorage 中
                     localStorage.setItem('ACCESS_TOKEN', JSON.stringify(a));
                     localStorage.setItem('REFRESH_TOKEN', JSON.stringify(r));

+ 8 - 8
zjugis-business/src/main/resources/templates/Leave/index.ftl

@@ -18,8 +18,8 @@ styles=[ '/flow/css/formCommon.css' ,'/timeSelector/TimeSelector.css' ]>
                     <td>
                         <div class="form-group">
                             <div class="form-item">
-                                <div class="z-comp-input" name="createReqVO$userNickname">
-                                    <input type="text" value="张三">
+                                <div class="z-comp-input z-readonly" name="createReqVO$userNickname">
+                                    <input type="text" value="${user.nickname!}">
                                 </div>
                             </div>
                         </div>
@@ -30,8 +30,8 @@ styles=[ '/flow/css/formCommon.css' ,'/timeSelector/TimeSelector.css' ]>
                     <td>
                         <div class="form-group">
                             <div class="form-item">
-                                <div class="z-comp-input" name="createReqVO$deptName">
-                                    <input type="text" value="自然资源产品部">
+                                <div class="z-comp-input z-readonly" name="createReqVO$deptName">
+                                    <input type="text" value="${user.deptName!}">
                                 </div>
                             </div>
                         </div>
@@ -57,7 +57,7 @@ styles=[ '/flow/css/formCommon.css' ,'/timeSelector/TimeSelector.css' ]>
                         <div class="form-group">
                             <div class="form-item">
                                 <div class="z-comp-input" name="createReqVO$leaveNo">
-                                    <input type="text" value="张三">
+                                    <input type="text" value="">
                                 </div>
                             </div>
                         </div>
@@ -70,10 +70,10 @@ styles=[ '/flow/css/formCommon.css' ,'/timeSelector/TimeSelector.css' ]>
                     <td>
                         <div class="form-group">
                             <div class="form-item">
-                                <div class="z-comp-inputselect" name="createReqVO$leaveType"
+                                <div class="z-comp-select" name="createReqVO$leaveType"
                                      data='${leaveTypeJSON!}'>
                                     <div class="z-inputselect-bar">
-                                        <input type="text"><i></i>
+                                        <span></span><i></i>
                                     </div>
                                 </div>
                             </div>
@@ -100,7 +100,7 @@ styles=[ '/flow/css/formCommon.css' ,'/timeSelector/TimeSelector.css' ]>
                         <div class="form-group">
                             <div class="form-item" style="margin: 10px 0;">
                                 <div class="z-comp-textarea" name="createReqVO$leaveReason">
-                                    <textarea value="个人原因"></textarea>
+                                    <textarea value=""></textarea>
                                 </div>
                             </div>
                         </div>

+ 2 - 2
zjugis-workflow/src/main/resources/static/login.html

@@ -44,9 +44,9 @@
             return;
           }
 		  var a = {};
-		  a.v = result.data.access_token;
+		  a.v = JSON.stringify(result.data.access_token);
 		  var r = {};
-		  r.v = result.data.refresh_token;
+		  r.v = JSON.stringify(result.data.refresh_token);
           // 设置到 localStorage 中
           localStorage.setItem('ACCESS_TOKEN', JSON.stringify(a));
           localStorage.setItem('REFRESH_TOKEN', JSON.stringify(r));