余思翰 9 月之前
父節點
當前提交
b24660c386

+ 7
- 1
oa-ui/src/settings.js 查看文件

1
+/*
2
+ * @Author: ysh
3
+ * @Date: 2024-06-21 18:51:44
4
+ * @LastEditors: 
5
+ * @LastEditTime: 2024-08-29 14:53:06
6
+ */
1
 module.exports = {
7
 module.exports = {
2
   /**
8
   /**
3
    * 侧边栏主题 深色主题theme-dark,浅色主题theme-light
9
    * 侧边栏主题 深色主题theme-dark,浅色主题theme-light
22
   /**
28
   /**
23
    * 是否固定头部
29
    * 是否固定头部
24
    */
30
    */
25
-  fixedHeader: false,
31
+  fixedHeader: true,
26
 
32
 
27
   /**
33
   /**
28
    * 是否显示logo
34
    * 是否显示logo

+ 6
- 0
oa-ui/src/store/modules/settings.js 查看文件

1
+/*
2
+ * @Author: ysh
3
+ * @Date: 2024-06-21 18:51:45
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-29 17:21:06
6
+ */
1
 import defaultSettings from '@/settings'
7
 import defaultSettings from '@/settings'
2
 
8
 
3
 const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings
9
 const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings

+ 157
- 0
oa-ui/src/views/flowable/form/business/components/paymentTable.vue 查看文件

1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-08-29 15:21:42
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-30 17:23:40
6
+-->
7
+<template>
8
+  <div style="width:100%">
9
+    <table border="1" style="width:100%">
10
+      <tr>
11
+        <td :colspan="8" style="background-color: #f8f8f9;line-height:40px"><strong>表2:合同回款计划</strong></td>
12
+      </tr>
13
+      <tr>
14
+        <td style="width: 50px;">序号</td>
15
+        <td style="min-width:350px">回款条件</td>
16
+        <td>回款比例(%)</td>
17
+        <td>回款金额(元)</td>
18
+        <td>预计时间</td>
19
+        <td>备注</td>
20
+      </tr>
21
+      <tr v-for="(payment, index) in paymentList" :key="index">
22
+        <td>
23
+          {{ index + 1 }}
24
+        </td>
25
+        <td>
26
+          <el-input v-model="payment.paymentCondition" type="textarea" clearable :autosize="{ minRows: 4 }"
27
+            :disabled="taskName != '合同拟稿'"></el-input>
28
+        </td>
29
+        <td>
30
+          <el-input-number style="width:100px" :controls="false" v-model="payment.paymentPercentage" clearable
31
+            :disabled="taskName != '合同拟稿'" @blur="calculatePaymentAmount(payment)"></el-input-number>
32
+        </td>
33
+        <td>
34
+          <el-input-number style="width:150px" :controls="false" :precision="2" v-model="payment.paymentAmount"
35
+            clearable :disabled="taskName != '合同拟稿'"></el-input-number>
36
+        </td>
37
+        <td>
38
+          <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd" type="date"
39
+            placeholder="选择日期" :disabled="taskName != '合同拟稿'">
40
+          </el-date-picker>
41
+        </td>
42
+        <td>
43
+          <el-input v-model="payment.remark" type="textarea" clearable :autosize="{ minRows: 4 }"
44
+            :disabled="taskName != '合同拟稿'"></el-input>
45
+        </td>
46
+        <td v-show="taskName == '合同拟稿'">
47
+          <div class="delete-btn" @click="deletPaymentItem(index)">
48
+            <i class="el-icon-circle-close"></i>
49
+          </div>
50
+        </td>
51
+      </tr>
52
+    </table>
53
+    <el-button icon="el-icon-plus" size="mini" @click="addPaymentList()" type="primary" plain
54
+      :disabled="taskName != '合同拟稿'"></el-button>
55
+  </div>
56
+</template>
57
+
58
+<script>
59
+import { listContractPayment, addContractPayment, delContractPayment } from "@/api/oa/contract/contractPayment";
60
+export default {
61
+  dicts: ['cmc_scale_grade', 'cmc_unit'],
62
+  props: {
63
+    contractId: {
64
+      type: String,
65
+      default: ''
66
+    },
67
+    taskName: {
68
+      type: String,
69
+      default: ''
70
+    },
71
+    amount: {
72
+      type: Number,
73
+      default: 0
74
+    }
75
+  },
76
+  data() {
77
+    return {
78
+      paymentList: [{
79
+        paymentCondition: "",
80
+        paymentPercentage: "",
81
+        paymentAmount: "",
82
+        paymentTime: undefined,
83
+        remark: "",
84
+      }],
85
+    }
86
+  },
87
+  watch: {
88
+    contractId() {
89
+      this.initTable()
90
+    },
91
+    amount() {
92
+      this.paymentList.forEach(payment => {
93
+        this.calculatePaymentAmount(payment)
94
+      })
95
+    }
96
+  },
97
+  created() {
98
+    this.initTable()
99
+  },
100
+  methods: {
101
+    initTable() {
102
+      if (!this.contractId) return
103
+      listContractPayment({ pageNum: 1, pageSize: 100, contractId: this.contractId }).then(res => {
104
+        if (res.rows.length > 0)
105
+          this.paymentList = res.rows;
106
+      });
107
+    },
108
+    deletPaymentItem(index) {
109
+      let arr = this.paymentList;
110
+      if (arr.length == 1) {
111
+        return;
112
+      }
113
+      if (index >= 0 && index < arr.length) {
114
+        arr.splice(index, 1);
115
+      }
116
+    },
117
+    addPaymentList() {
118
+      this.paymentList.push({
119
+        paymentCondition: "",
120
+        paymentPercentage: "",
121
+        paymentAmount: "",
122
+        paymentTime: undefined,
123
+        remark: "",
124
+      });
125
+    },
126
+    calculatePaymentAmount(payment) {
127
+      let amount = (payment.paymentPercentage / 100) * this.amount
128
+      this.$set(payment, 'paymentAmount', Number(amount))
129
+    },
130
+  },
131
+}
132
+</script>
133
+
134
+<style lang="scss" scoped>
135
+.delete-btn {
136
+  color: #F56C6C;
137
+  cursor: pointer;
138
+
139
+  i {
140
+    font-size: 25px;
141
+  }
142
+}
143
+
144
+table {
145
+  /*边框*/
146
+  /* border: 1px solid black; */
147
+  text-align: center;
148
+  border-collapse: collapse;
149
+  border: 1px solid #a5abb0;
150
+
151
+  /*设置背景颜色*/
152
+  /* background-color: #bfa; */
153
+  td {
154
+    padding: 5px;
155
+  }
156
+}
157
+</style>

+ 155
- 0
oa-ui/src/views/flowable/form/business/components/workTable.vue 查看文件

1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-08-29 15:21:42
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-29 16:01:51
6
+-->
7
+<template>
8
+  <div style="width:100%">
9
+    <table border="1" style="width:100%">
10
+      <tr>
11
+        <td :colspan="8" style="background-color: #f8f8f9;line-height:40px"><strong>表1:合同计划工作量</strong></td>
12
+      </tr>
13
+      <tr>
14
+        <td style="width: 50px;">序号</td>
15
+        <td style="min-width:250px">工作内容</td>
16
+        <td style="width:150px">等级或比例尺</td>
17
+        <td style="width:100px">单位</td>
18
+        <td style="width:100px">工作量</td>
19
+        <td>要求完成时间</td>
20
+        <td>备注</td>
21
+      </tr>
22
+      <tr v-for="(work, index) in workList" :key="index">
23
+        <td>
24
+          {{ index + 1 }}
25
+        </td>
26
+        <td>
27
+          <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 4 }"
28
+            :disabled="taskName != '合同拟稿'"></el-input>
29
+        </td>
30
+        <td>
31
+          <el-select v-model="work.scale" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
32
+            <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
33
+              :value="dict.label" />
34
+          </el-select>
35
+        </td>
36
+        <td>
37
+          <el-select v-model="work.unit" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
38
+            <el-option v-for="dict in dict.type.cmc_unit" :key="dict.value" :label="dict.label" :value="dict.label" />
39
+          </el-select>
40
+        </td>
41
+        <td>
42
+          <el-input-number :controls="false" style="width: 60px" v-model="work.workload" clearable
43
+            :disabled="taskName != '合同拟稿'"></el-input-number>
44
+        </td>
45
+        <td>
46
+          <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
47
+            placeholder="选择日期" :disabled="taskName != '合同拟稿'">
48
+          </el-date-picker>
49
+        </td>
50
+        <td>
51
+          <el-input v-model="work.remark" type="textarea" clearable :autosize="{ minRows: 4 }"
52
+            :disabled="taskName != '合同拟稿'"></el-input>
53
+        </td>
54
+        <td v-show="taskName == '合同拟稿'">
55
+          <div class="delete-btn" @click="deletWorkItem(index)">
56
+            <i class="el-icon-circle-close"></i>
57
+          </div>
58
+        </td>
59
+      </tr>
60
+    </table>
61
+    <el-button class="mb20" icon="el-icon-plus" size="mini" @click="addWorkList()" type="primary" plain
62
+      :disabled="taskName != '合同拟稿'">
63
+    </el-button>
64
+  </div>
65
+</template>
66
+
67
+<script>
68
+import { listContractWork, addContractWork, delContractWork } from "@/api/oa/contract/contractWork";
69
+export default {
70
+  dicts: ['cmc_scale_grade', 'cmc_unit'],
71
+  props: {
72
+    contractId: {
73
+      type: String,
74
+      default: ''
75
+    },
76
+    taskName: {
77
+      type: String,
78
+      default: ''
79
+    }
80
+  },
81
+  data() {
82
+    return {
83
+      workList: [{
84
+        content: "",
85
+        scale: "",
86
+        unit: "",
87
+        workload: "",
88
+        deadline: undefined,
89
+        remark: "",
90
+      }],
91
+    }
92
+  },
93
+  watch: {
94
+    contractId() {
95
+      this.initTable()
96
+    }
97
+  },
98
+  created() {
99
+    this.initTable()
100
+  },
101
+  methods: {
102
+    initTable() {
103
+      if(!this.contractId) return
104
+      listContractWork({ pageNum: 1, pageSize: 100, contractId: this.contractId }).then(res => {
105
+        if (res.rows.length > 0)
106
+          this.workList = res.rows;
107
+      });
108
+    },
109
+    deletWorkItem(index) {
110
+      let arr = this.workList;
111
+      if (arr.length == 1) {
112
+        return;
113
+      }
114
+      if (index >= 0 && index < arr.length) {
115
+        arr.splice(index, 1);
116
+      }
117
+    },
118
+    addWorkList() {
119
+      this.workList.push({
120
+        content: "",
121
+        scale: "",
122
+        unit: "",
123
+        workload: "",
124
+        deadline: undefined,
125
+        remark: "",
126
+      });
127
+    },
128
+  },
129
+}
130
+</script>
131
+
132
+<style lang="scss" scoped>
133
+.delete-btn {
134
+  color: #F56C6C;
135
+  cursor: pointer;
136
+
137
+  i {
138
+    font-size: 25px;
139
+  }
140
+}
141
+
142
+table {
143
+  /*边框*/
144
+  /* border: 1px solid black; */
145
+  text-align: center;
146
+  border-collapse: collapse;
147
+  border: 1px solid #a5abb0;
148
+
149
+  /*设置背景颜色*/
150
+  /* background-color: #bfa; */
151
+  td {
152
+    padding: 5px;
153
+  }
154
+}
155
+</style>

+ 64
- 171
oa-ui/src/views/flowable/form/business/contractForm.vue 查看文件

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-05-10 15:31:57
3
  * @Date: 2024-05-10 15:31:57
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-08-13 13:57:33
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-30 14:37:25
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
63
             </el-col>
63
             </el-col>
64
 
64
 
65
             <el-col :span="12" :xs="24">
65
             <el-col :span="12" :xs="24">
66
-              <el-alert title="后签合同的项目,必须选择关联项目;先签合同的项目不选关联项目" type="error">
66
+              <el-alert v-show="taskName == '合同拟稿'" title="后签合同的项目,必须选择关联项目;先签合同的项目不选关联项目" type="error">
67
               </el-alert>
67
               </el-alert>
68
               <el-form-item label="关联项目:" prop="projectIds">
68
               <el-form-item label="关联项目:" prop="projectIds">
69
                 <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
69
                 <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
70
               </el-form-item>
70
               </el-form-item>
71
               <el-table v-loading="projectloading" :data="chooseProjectList">
71
               <el-table v-loading="projectloading" :data="chooseProjectList">
72
+                <el-table-column label="序号" type="index" width="50px"></el-table-column>
72
                 <el-table-column label="项目编号" align="center" prop="projectNumber"></el-table-column>
73
                 <el-table-column label="项目编号" align="center" prop="projectNumber"></el-table-column>
73
                 <el-table-column label="项目名称" align="center" prop="projectName"></el-table-column>
74
                 <el-table-column label="项目名称" align="center" prop="projectName"></el-table-column>
74
                 <el-table-column label="项目负责人" align="center" prop="projectLeaderUser.nickName"></el-table-column>
75
                 <el-table-column label="项目负责人" align="center" prop="projectLeaderUser.nickName"></el-table-column>
75
                 <el-table-column label="承担部门" align="center" prop="undertakingDeptName"></el-table-column>
76
                 <el-table-column label="承担部门" align="center" prop="undertakingDeptName"></el-table-column>
77
+                <el-table-column label="操作" align="center">
78
+                  <template slot-scope="scope">
79
+                    <el-button type="text" icon="el-icon-view" @click="clickProjectFn(scope.row)">查看</el-button>
80
+                  </template>
81
+                </el-table-column>
76
               </el-table>
82
               </el-table>
77
             </el-col>
83
             </el-col>
78
 
84
 
92
               </el-link>
98
               </el-link>
93
             </div>
99
             </div>
94
           </el-form-item>
100
           </el-form-item>
95
-          <el-form-item label="合同计划工作量:">
96
-            <table border="1" style="width:100%">
97
-              <tr>
98
-                <td style="width: 50px;">序号</td>
99
-                <td style="min-width:160px">工作内容</td>
100
-                <td style="width:150px">等级或比例尺</td>
101
-                <td style="width:100px">单位</td>
102
-                <td style="width:100px">工作量</td>
103
-                <td>要求完成时间</td>
104
-                <td>备注</td>
105
-              </tr>
106
-              <tr v-for="(work, index) in workList" :key="index">
107
-                <td>
108
-                  {{ index + 1 }}
109
-                </td>
110
-                <td>
111
-                  <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 4 }"
112
-                    :disabled="taskName != '合同拟稿'"></el-input>
113
-                </td>
114
-                <td>
115
-                  <el-select v-model="work.scale" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
116
-                    <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
117
-                      :value="dict.label" />
118
-                  </el-select>
119
-                </td>
120
-                <td>
121
-                  <el-select v-model="work.unit" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
122
-                    <el-option v-for="dict in dict.type.cmc_unit" :key="dict.value" :label="dict.label"
123
-                      :value="dict.label" />
124
-                  </el-select>
125
-                </td>
126
-                <td>
127
-                  <el-input-number :controls="false" style="width: 60px" v-model="work.workload" clearable
128
-                    :disabled="taskName != '合同拟稿'"></el-input-number>
129
-                </td>
130
-                <td>
131
-                  <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
132
-                    placeholder="选择日期" :disabled="taskName != '合同拟稿'">
133
-                  </el-date-picker>
134
-                </td>
135
-                <td>
136
-                  <el-input v-model="work.remark" type="textarea" clearable :autosize="{ minRows: 4 }"
137
-                    :disabled="taskName != '合同拟稿'"></el-input>
138
-                </td>
139
-                <td>
140
-                  <el-button type="text" style="color:#F56C6C" size="mini" circle @click="deletWorkItem(index)"
141
-                    :disabled="taskName != '合同拟稿'">删除行</el-button>
142
-                </td>
143
-              </tr>
144
-            </table>
145
-            <el-button icon="el-icon-plus" size="mini" @click="addWorkList()" type="primary" plain
146
-              :disabled="taskName != '合同拟稿'"></el-button>
147
-          </el-form-item>
148
-          <el-form-item label="合同回款计划:">
149
-            <table border="1" style="width:100%">
150
-              <tr>
151
-                <td style="width: 50px;">序号</td>
152
-                <td style="width: 250px;">回款条件</td>
153
-                <td>回款比例(%)</td>
154
-                <td>回款金额(元)</td>
155
-                <td>预计时间</td>
156
-                <td>备注</td>
157
-              </tr>
158
-              <tr v-for="(payment, index) in paymentList" :key="index">
159
-                <td>
160
-                  {{ index + 1 }}
161
-                </td>
162
-                <td>
163
-                  <el-input v-model="payment.paymentCondition" type="textarea" clearable :autosize="{ minRows: 4 }"
164
-                    :disabled="taskName != '合同拟稿'"></el-input>
165
-                </td>
166
-                <td>
167
-                  <el-input-number style="width:100px" :controls="false" v-model="payment.paymentPercentage" clearable
168
-                    :disabled="taskName != '合同拟稿'" @change="calculatePaymentAmount(payment)"></el-input-number>
169
-                </td>
170
-                <td>
171
-                  <el-input-number style="width:150px" :controls="false" :precision="2" v-model="payment.paymentAmount"
172
-                    clearable :disabled="taskName != '合同拟稿'"></el-input-number>
173
-                </td>
174
-                <td>
175
-                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd"
176
-                    type="date" placeholder="选择日期" :disabled="taskName != '合同拟稿'">
177
-                  </el-date-picker>
178
-                </td>
179
-                <td>
180
-                  <el-input v-model="payment.remark" type="textarea" clearable :autosize="{ minRows: 4 }"
181
-                    :disabled="taskName != '合同拟稿'"></el-input>
182
-                </td>
183
-                <td>
184
-                  <el-button type="danger" icon="el-icon-minus" size="mini" circle @click="deletPaymentItem(index)"
185
-                    :disabled="taskName != '合同拟稿'"></el-button>
186
-                </td>
187
-              </tr>
188
-            </table>
189
-            <el-button icon="el-icon-plus" size="mini" @click="addPaymentList()" type="primary" plain
190
-              :disabled="taskName != '合同拟稿'"></el-button>
191
-          </el-form-item>
101
+          <!-- 表1:合同计划工作量 -->
102
+          <work-table ref="workTableRef" :contractId="taskForm.formId" :taskName="taskName"></work-table>
103
+
104
+          <p class="mb20 mt20"></p>
105
+
106
+          <!-- 表2:合同回款计划  -->
107
+          <payment-table ref="paymentRef" :contractId="taskForm.formId" :amount="form.amount"
108
+            :taskName="taskName"></payment-table>
109
+
192
           <el-form-item label="合同备注" prop="remark">
110
           <el-form-item label="合同备注" prop="remark">
193
             <el-input v-model="form.remark" :autosize="{ minRows: 4 }" type="textarea" placeholder="请输入合同备注"
111
             <el-input v-model="form.remark" :autosize="{ minRows: 4 }" type="textarea" placeholder="请输入合同备注"
194
               :disabled="taskName != '合同拟稿'" />
112
               :disabled="taskName != '合同拟稿'" />
281
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)" type="date"
199
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)" type="date"
282
                     value-format="yyyy-MM-dd" style="width:140px;" placeholder="选择日期"></el-date-picker>
200
                     value-format="yyyy-MM-dd" style="width:140px;" placeholder="选择日期"></el-date-picker>
283
                 </td>
201
                 </td>
284
-                <td>
285
-                  <el-button type="text" style="color: #F56C6C;" size="mini" @click="deletCommentItem(index)"
286
-                    :disabled="taskName != '合同拟稿'">删除行</el-button>
202
+                <td v-show="taskName == '合同拟稿'">
203
+                  <div class="delete-btn" @click="deletCommentItem(index)">
204
+                    <i class="el-icon-circle-close"></i>
205
+                  </div>
287
                 </td>
206
                 </td>
288
               </tr>
207
               </tr>
289
             </table>
208
             </table>
436
       </el-col>
355
       </el-col>
437
     </el-row>
356
     </el-row>
438
 
357
 
439
-    <el-dialog title="选择项目" :visible.sync="open" width="70%" append-to-body>
358
+    <el-dialog title="选择项目" :visible.sync="open" width="60%" append-to-body>
440
       <choose-project @chooseProject="confirmProject"></choose-project>
359
       <choose-project @chooseProject="confirmProject"></choose-project>
441
     </el-dialog>
360
     </el-dialog>
442
-    <el-dialog title="选择投标项目" :visible.sync="tbOpen" width="70%" append-to-body>
361
+    <el-dialog title="选择投标项目" :visible.sync="tbOpen" width="60%" append-to-body>
443
       <choose-tender @choose="confirmTender"></choose-tender>
362
       <choose-tender @choose="confirmTender"></choose-tender>
444
     </el-dialog>
363
     </el-dialog>
445
-    <el-dialog title="选择甲方单位" :visible.sync="partyAOpen" width="70%" append-to-body>
364
+    <el-dialog title="选择甲方单位" :visible.sync="partyAOpen" width="60%" append-to-body>
446
       <choose-party-a @confirm="confirmPartyA"></choose-party-a>
365
       <choose-party-a @confirm="confirmPartyA"></choose-party-a>
447
     </el-dialog>
366
     </el-dialog>
367
+    <el-drawer :visible.sync="drawerOpen" title="" :size="'70%'" append-to-body>
368
+      <projectInfo :needReturn="false"></projectInfo>
369
+    </el-drawer>
448
   </div>
370
   </div>
449
 </template>
371
 </template>
450
 
372
 
470
 import FileItem from './fileItem.vue';
392
 import FileItem from './fileItem.vue';
471
 import { mapGetters } from "vuex";
393
 import { mapGetters } from "vuex";
472
 import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
394
 import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
395
+import workTable from './components/workTable.vue';
396
+import paymentTable from './components/paymentTable.vue';
397
+import projectInfo from '@/views/oa/project/info'
473
 export default {
398
 export default {
474
   dicts: ['cmc_scale_grade', 'cmc_unit'],
399
   dicts: ['cmc_scale_grade', 'cmc_unit'],
475
   components: {
400
   components: {
477
     ChooseProject,
402
     ChooseProject,
478
     ChooseTender,
403
     ChooseTender,
479
     FileItem,
404
     FileItem,
480
-    ChoosePartyA
405
+    ChoosePartyA,
406
+    workTable,
407
+    paymentTable,projectInfo
481
   },
408
   },
482
   props: {
409
   props: {
483
     taskName: {
410
     taskName: {
548
       rules: {},
475
       rules: {},
549
       meetingOpen: false,
476
       meetingOpen: false,
550
       commentOpen: false,
477
       commentOpen: false,
478
+      drawerOpen: false,
551
       chooseProjectList: [],
479
       chooseProjectList: [],
552
       partyAList: [],
480
       partyAList: [],
553
       projectList: [],
481
       projectList: [],
554
       deptList: [],
482
       deptList: [],
555
       userList: [],
483
       userList: [],
556
       users: undefined,
484
       users: undefined,
557
-      workList: [{
558
-        content: "",
559
-        scale: "",
560
-        unit: "",
561
-        workload: "",
562
-        deadline: undefined,
563
-        remark: "",
564
-      }],
565
-      paymentList: [{
566
-        paymentCondition: "",
567
-        paymentPercentage: "",
568
-        paymentAmount: "",
569
-        paymentTime: undefined,
570
-        remark: "",
571
-      }],
485
+      workList: [],
486
+      paymentList: [],
572
       placeList: [{ id: '0', name: '301会议室' }, { id: '1', name: '216会议室' }],
487
       placeList: [{ id: '0', name: '301会议室' }, { id: '1', name: '216会议室' }],
573
       commentList: [
488
       commentList: [
574
         {
489
         {
688
               this.isSelect = true
603
               this.isSelect = true
689
             })
604
             })
690
           }
605
           }
691
-          listContractWork({ pageNum: 1, pageSize: 100, contractId: this.taskForm.formId }).then(res => {
692
-            if (res.rows)
693
-              this.workList = res.rows;
694
-          });
695
-          listContractPayment({ pageNum: 1, pageSize: 100, contractId: this.taskForm.formId }).then(res => {
696
-            if (res.rows)
697
-              this.paymentList = res.rows;
698
-          });
699
           listContractComment({ pageNum: 1, pageSize: 100, contractId: this.taskForm.formId }).then(res => {
606
           listContractComment({ pageNum: 1, pageSize: 100, contractId: this.taskForm.formId }).then(res => {
700
             if (res.rows && res.rows.length != 0) {
607
             if (res.rows && res.rows.length != 0) {
701
               this.commentList = res.rows;
608
               this.commentList = res.rows;
838
       }
745
       }
839
       return chooseTender.partyA.partyAName.includes(TARGET_COMPANY) ? '院内' : '院外';
746
       return chooseTender.partyA.partyAName.includes(TARGET_COMPANY) ? '院内' : '院外';
840
     },
747
     },
841
-    addWorkList() {
842
-      this.workList.push({
843
-        content: "",
844
-        scale: "",
845
-        unit: "",
846
-        workload: "",
847
-        deadline: undefined,
848
-        remark: "",
849
-      });
850
-    },
851
-    addPaymentList() {
852
-      this.paymentList.push({
853
-        paymentCondition: "",
854
-        paymentPercentage: "",
855
-        paymentAmount: "",
856
-        paymentTime: undefined,
857
-        remark: "",
858
-      });
859
-    },
860
     addCommentList() {
748
     addCommentList() {
861
       this.commentList.push({
749
       this.commentList.push({
862
         deptId: "",
750
         deptId: "",
866
         commentTime: undefined,
754
         commentTime: undefined,
867
       });
755
       });
868
     },
756
     },
869
-    deletWorkItem(index) {
870
-      let arr = this.workList;
871
-      if (arr.length == 1) {
872
-        return;
873
-      }
874
-      if (index >= 0 && index < arr.length) {
875
-        arr.splice(index, 1);
876
-      }
877
-    },
878
-    deletPaymentItem(index) {
879
-      let arr = this.paymentList;
880
-      if (arr.length == 1) {
881
-        return;
882
-      }
883
-      if (index >= 0 && index < arr.length) {
884
-        arr.splice(index, 1);
885
-      }
886
-    },
887
     setCommentDocument(val) {
757
     setCommentDocument(val) {
888
       let arr = val.split('/upload');
758
       let arr = val.split('/upload');
889
       this.clickTd.document = arr[1];
759
       this.clickTd.document = arr[1];
1104
       });
974
       });
1105
     },
975
     },
1106
     updateContractData() {
976
     updateContractData() {
977
+      this.workList = this.$refs.workTableRef.workList;
978
+      this.paymentList = this.$refs.paymentRef.paymentList;
1107
       updateContract(this.form).then(response => {
979
       updateContract(this.form).then(response => {
1108
         this.$modal.msgSuccess("修改成功");
980
         this.$modal.msgSuccess("修改成功");
1109
         this.open = false;
981
         this.open = false;
1222
         this.$set(this.form, 'partyAId', val[0].partyAId)
1094
         this.$set(this.form, 'partyAId', val[0].partyAId)
1223
       }
1095
       }
1224
     },
1096
     },
1225
-    calculatePaymentAmount(payment) {
1226
-      let amount = (payment.paymentPercentage / 100) * this.form.amount
1227
-      this.$set(payment, 'paymentAmount', Number(amount))
1228
-    },
1229
     reviewWord(url) {
1097
     reviewWord(url) {
1230
       this.$router.push({
1098
       this.$router.push({
1231
         path: '/preview',
1099
         path: '/preview',
1233
           url: url
1101
           url: url
1234
         }
1102
         }
1235
       })
1103
       })
1104
+    },
1105
+    clickProjectFn(row) {
1106
+      this.$router.replace({ query: { ...this.$route.query, projectId: row.projectId } });
1107
+      this.drawerOpen = true;
1236
     }
1108
     }
1237
   }
1109
   }
1238
 }
1110
 }
1241
 <style lang="scss" scoped>
1113
 <style lang="scss" scoped>
1242
 @import "@/assets/styles/element-reset.scss";
1114
 @import "@/assets/styles/element-reset.scss";
1243
 
1115
 
1116
+.delete-btn {
1117
+  color: #F56C6C;
1118
+  cursor: pointer;
1119
+
1120
+  i {
1121
+    font-size: 25px;
1122
+  }
1123
+}
1124
+
1244
 table {
1125
 table {
1245
   /*边框*/
1126
   /*边框*/
1246
   /* border: 1px solid black; */
1127
   /* border: 1px solid black; */
1247
   text-align: center;
1128
   text-align: center;
1248
   border-collapse: collapse;
1129
   border-collapse: collapse;
1130
+  border: 1px solid #a5abb0;
1249
 
1131
 
1250
   /*设置背景颜色*/
1132
   /*设置背景颜色*/
1251
   /* background-color: #bfa; */
1133
   /* background-color: #bfa; */
1275
 .ele-upload-list__item-content-action .el-link {
1157
 .ele-upload-list__item-content-action .el-link {
1276
   margin-right: 10px;
1158
   margin-right: 10px;
1277
 }
1159
 }
1160
+
1161
+::v-deep .el-descriptions-item__label.is-bordered-label {
1162
+  color: #5a5757;
1163
+  background: rgba($color: #a9adb3, $alpha: 0.1);
1164
+  width: 150px;
1165
+  min-width: 150px;
1166
+}
1167
+
1168
+::v-deep .el-descriptions .is-bordered .el-descriptions-item__cell {
1169
+  border: 1px solid #cdd0d3;
1170
+}
1278
 </style>
1171
 </style>

+ 127
- 108
oa-ui/src/views/flowable/form/business/subContract.vue 查看文件

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-05-10 15:31:57
3
  * @Date: 2024-05-10 15:31:57
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-08-07 09:41:32
5
+ * @LastEditTime: 2024-08-28 15:51:59
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
11
         <h2 class="text-center">分包合同评审表</h2>
11
         <h2 class="text-center">分包合同评审表</h2>
12
         <el-form ref="form" :model="form" :rules="rules" label-width="130px" :formDisabled="formDisabled">
12
         <el-form ref="form" :model="form" :rules="rules" label-width="130px" :formDisabled="formDisabled">
13
           <el-divider></el-divider>
13
           <el-divider></el-divider>
14
-          <el-form-item label="项目编号:" prop="projectId">
14
+          <el-form-item label="关联项目:" prop="projectId">
15
             <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
15
             <el-button type="primary" size="mini" @click="open = true" v-if="taskName == '合同拟稿'">选择项目</el-button>
16
             <el-table :data="chooseProjectList" border v-if="isSelect">
16
             <el-table :data="chooseProjectList" border v-if="isSelect">
17
               <el-table-column type="index" width="50" label="序号" />
17
               <el-table-column type="index" width="50" label="序号" />
43
             <el-col :span="16" :xs="24">
43
             <el-col :span="16" :xs="24">
44
               <el-form-item label="承接单位" prop="partnerId">
44
               <el-form-item label="承接单位" prop="partnerId">
45
                 <el-select allow-create v-model="form.partnerId" multiple filterable placeholder="请选择"
45
                 <el-select allow-create v-model="form.partnerId" multiple filterable placeholder="请选择"
46
-                  style="width: 84%;" disabled clearable>
46
+                  :style="taskName == '合同拟稿' ? {width: '84%' }: {width: '100%' }" disabled clearable>
47
                   <el-option v-for="item in partnerList" :key="item.value" :label="item.partnerName"
47
                   <el-option v-for="item in partnerList" :key="item.value" :label="item.partnerName"
48
                     :value="item.partnerId">
48
                     :value="item.partnerId">
49
                   </el-option>
49
                   </el-option>
83
               </el-form-item>
83
               </el-form-item>
84
             </el-col>
84
             </el-col>
85
           </el-row>
85
           </el-row>
86
-          <el-form-item label="合同计划工作量:">
87
-            <table border="1">
88
-              <tr>
89
-                <td style="width:50px;">序号</td>
90
-                <td>工作内容</td>
91
-                <td>等级或比例尺</td>
92
-                <td>单位</td>
93
-                <td>工作量</td>
94
-                <td>要求完成时间</td>
95
-                <td>备注</td>
96
-              </tr>
97
-              <tr v-for="(work, index) in workList" :key="index">
98
-                <td>
99
-                  {{ index + 1 }}
100
-                </td>
101
-                <td>
102
-                  <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"
103
-                    :disabled="taskName != '合同拟稿'"></el-input>
104
-                </td>
105
-                <td>
106
-                  <el-select v-model="work.scale" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
107
-                    <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
108
-                      :value="dict.label" />
109
-                  </el-select>
110
-                </td>
111
-                <td>
112
-                  <el-select v-model="work.unit" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
113
-                    <el-option v-for="dict in dict.type.cmc_unit" :key="dict.value" :label="dict.label"
114
-                      :value="dict.label" />
115
-                  </el-select>
116
-                </td>
117
-                <td>
118
-                  <el-input v-model="work.workload" clearable :disabled="taskName != '合同拟稿'"></el-input>
119
-                </td>
120
-                <td>
121
-                  <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
122
-                    placeholder="选择日期" :disabled="taskName != '合同拟稿'">
123
-                  </el-date-picker>
124
-                </td>
125
-                <td>
126
-                  <el-input v-model="work.remark" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"
127
-                    :disabled="taskName != '合同拟稿'"></el-input>
128
-                </td>
129
-                <td>
130
-                  <el-button type="text" style="color:#F56C6C" size="mini" circle @click="deletWorkItem(index)"
131
-                    :disabled="taskName != '合同拟稿'">删除行</el-button>
132
-                </td>
133
-              </tr>
134
-            </table>
135
-            <el-button icon="el-icon-plus" size="mini" @click="addWorkList()" type="primary" plain
136
-              :disabled="taskName != '合同拟稿'"></el-button>
137
-          </el-form-item>
138
-          <el-form-item label="合同付款计划:">
139
-            <table border="1">
140
-              <tr>
141
-                <td style="min-width:50px;">序号</td>
142
-                <td style="min-width:200px;">付款条件</td>
143
-                <td style="max-width:100px;">付款比例(%)</td>
144
-                <td style="max-width:100px;">付款金额(元)</td>
145
-                <td>预计时间</td>
146
-                <td>备注</td>
147
-              </tr>
148
-              <tr v-for="(payment, index) in paymentList" :key="index">
149
-                <td>
150
-                  {{ index + 1 }}
151
-                </td>
152
-                <td>
153
-                  <el-input v-model="payment.paymentCondition" type="textarea" clearable
154
-                    :autosize="{ minRows: 4, maxRows: 10 }" :disabled="taskName != '合同拟稿'"></el-input>
155
-                </td>
156
-                <td>
157
-                  <el-input-number :controls="false" style="width:100%" v-model="payment.paymentPercentage" clearable
158
-                    @change="calculatePaymentAmount(payment)" :disabled="taskName != '合同拟稿'"></el-input-number>
159
-                </td>
160
-                <td>
161
-                  <el-input-number :controls="false" style="width:100%" v-model="payment.paymentAmount" clearable
162
-                    :disabled="taskName != '合同拟稿'"></el-input-number>
163
-                </td>
164
-                <td>
165
-                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd"
166
-                    type="date" placeholder="选择日期" :disabled="taskName != '合同拟稿'">
167
-                  </el-date-picker>
168
-                </td>
169
-                <td>
170
-                  <el-input v-model="payment.remark" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"
171
-                    :disabled="taskName != '合同拟稿'"></el-input>
172
-                </td>
173
-                <td>
174
-                  <el-button type="text" style="color:#F56C6C" size="mini" @click="deletPaymentItem(index)"
175
-                    :disabled="taskName != '合同拟稿'">删除行</el-button>
176
-                </td>
177
-              </tr>
178
-            </table>
179
-            <el-button icon="el-icon-plus" size="mini" @click="addPaymentList()" type="primary" plain
180
-              :disabled="taskName != '合同拟稿'"></el-button>
181
-          </el-form-item>
86
+          <table border="1" style="width:100%">
87
+            <tr>
88
+              <td :colspan="8" style="background-color: #f8f8f9;line-height:40px"><strong>表1:合同计划工作量</strong></td>
89
+            </tr>
90
+            <tr>
91
+              <td style="width: 50px;">序号</td>
92
+              <td style="min-width:250px">工作内容</td>
93
+              <td style="width:150px">等级或比例尺</td>
94
+              <td style="width:100px">单位</td>
95
+              <td style="width:100px">工作量</td>
96
+              <td>要求完成时间</td>
97
+              <td>备注</td>
98
+            </tr>
99
+            <tr v-for="(work, index) in workList" :key="index">
100
+              <td>
101
+                {{ index + 1 }}
102
+              </td>
103
+              <td>
104
+                <el-input v-model="work.content" type="textarea" clearable :autosize="{ minRows: 4 }"
105
+                  :disabled="taskName != '合同拟稿'"></el-input>
106
+              </td>
107
+              <td>
108
+                <el-select v-model="work.scale" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
109
+                  <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
110
+                    :value="dict.label" />
111
+                </el-select>
112
+              </td>
113
+              <td>
114
+                <el-select v-model="work.unit" placeholder="请选择" clearable :disabled="taskName != '合同拟稿'">
115
+                  <el-option v-for="dict in dict.type.cmc_unit" :key="dict.value" :label="dict.label"
116
+                    :value="dict.label" />
117
+                </el-select>
118
+              </td>
119
+              <td>
120
+                <el-input v-model="work.workload" clearable :disabled="taskName != '合同拟稿'"></el-input>
121
+              </td>
122
+              <td>
123
+                <el-date-picker style="width: 140px" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
124
+                  placeholder="选择日期" :disabled="taskName != '合同拟稿'">
125
+                </el-date-picker>
126
+              </td>
127
+              <td>
128
+                <el-input v-model="work.remark" type="textarea" clearable :autosize="{ minRows: 4 }"
129
+                  :disabled="taskName != '合同拟稿'"></el-input>
130
+              </td>
131
+              <td v-show="taskName == '合同拟稿'">
132
+                <div class="delete-btn" @click="deletWorkItem(index)">
133
+                  <i class="el-icon-circle-close"></i>
134
+                </div>
135
+              </td>
136
+            </tr>
137
+          </table>
138
+          <el-button icon="el-icon-plus" size="mini" @click="addWorkList()" type="primary" plain
139
+            :disabled="taskName != '合同拟稿'"></el-button>
140
+
141
+          <p class="mb20 mt20"></p>
142
+
143
+          <!-- 表2:合同回款计划  -->
144
+          <table border="1" style="width:100%">
145
+            <tr>
146
+              <td :colspan="8" style="background-color: #f8f8f9;line-height:40px"><strong>表2:合同回款计划</strong></td>
147
+            </tr>
148
+            <tr>
149
+              <td style="width: 50px;">序号</td>
150
+              <td style="min-width:350px">回款条件</td>
151
+              <td>回款比例(%)</td>
152
+              <td>回款金额(元)</td>
153
+              <td>预计时间</td>
154
+              <td>备注</td>
155
+            </tr>
156
+            <tr v-for="(payment, index) in paymentList" :key="index">
157
+              <td>
158
+                {{ index + 1 }}
159
+              </td>
160
+              <td>
161
+                <el-input v-model="payment.paymentCondition" type="textarea" clearable
162
+                  :autosize="{ minRows: 4 }" :disabled="taskName != '合同拟稿'"></el-input>
163
+              </td>
164
+              <td>
165
+                <el-input-number :controls="false" style="width:100%" v-model="payment.paymentPercentage" clearable
166
+                  @change="calculatePaymentAmount(payment)" :disabled="taskName != '合同拟稿'"></el-input-number>
167
+              </td>
168
+              <td>
169
+                <el-input-number :controls="false" style="width:100%" v-model="payment.paymentAmount" clearable
170
+                  :disabled="taskName != '合同拟稿'"></el-input-number>
171
+              </td>
172
+              <td>
173
+                <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd" type="date"
174
+                  placeholder="选择日期" :disabled="taskName != '合同拟稿'">
175
+                </el-date-picker>
176
+              </td>
177
+              <td>
178
+                <el-input v-model="payment.remark" type="textarea" clearable :autosize="{ minRows: 4 }"
179
+                  :disabled="taskName != '合同拟稿'"></el-input>
180
+              </td>
181
+              <td v-show="taskName == '合同拟稿'">
182
+                <div class="delete-btn" @click="deletPaymentItem(index)">
183
+                  <i class="el-icon-circle-close"></i>
184
+                </div>
185
+              </td>
186
+            </tr>
187
+          </table>
188
+          <el-button icon="el-icon-plus" size="mini" @click="addPaymentList()" type="primary" plain
189
+            :disabled="taskName != '合同拟稿'"></el-button>
182
           <el-form-item label="合同备注" prop="remark">
190
           <el-form-item label="合同备注" prop="remark">
183
-            <el-input type="textarea" v-model="form.remark" placeholder="请输入合同备注" :disabled="taskName != '合同拟稿'" />
191
+            <el-input type="textarea" v-model="form.remark" :autosize="{ minRows: 4 }" placeholder="请输入合同备注" :disabled="taskName != '合同拟稿'" />
184
           </el-form-item>
192
           </el-form-item>
185
           <el-row>
193
           <el-row>
186
             <el-col :span="6" :xs="24" :offset="11">
194
             <el-col :span="6" :xs="24" :offset="11">
204
             </el-radio-group>
212
             </el-radio-group>
205
           </el-form-item>
213
           </el-form-item>
206
           <el-form-item label="线上会审:" v-if="commentOpen">
214
           <el-form-item label="线上会审:" v-if="commentOpen">
207
-            <table border="1">
215
+            <table border="1" style="width:100%;">
208
               <tr>
216
               <tr>
209
                 <td style="width: 50px;">序号</td>
217
                 <td style="width: 50px;">序号</td>
210
                 <td>会审部门</td>
218
                 <td>会审部门</td>
233
                   </el-select>
241
                   </el-select>
234
                 </td>
242
                 </td>
235
                 <td>
243
                 <td>
236
-                  <el-input v-model="comment.comment" type="textarea" clearable :autosize="{ minRows: 4, maxRows: 10 }"
244
+                  <el-input v-model="comment.comment" type="textarea" clearable :autosize="{ minRows: 4 }"
237
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)"></el-input>
245
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)"></el-input>
238
                 </td>
246
                 </td>
239
                 <!-- 线上会审附件 -->
247
                 <!-- 线上会审附件 -->
253
                             {{ getFileName(comment.document) }}
261
                             {{ getFileName(comment.document) }}
254
                           </span>
262
                           </span>
255
                         </el-link>
263
                         </el-link>
256
-                        <div class="ele-upload-list__item-content-action" v-if="taskName == '线上会审' && comment.userId == userId">
264
+                        <div class="ele-upload-list__item-content-action"
265
+                          v-if="taskName == '线上会审' && comment.userId == userId">
257
                           <el-link :underline="false" @click="handleFileDelete(comment, 'document')"
266
                           <el-link :underline="false" @click="handleFileDelete(comment, 'document')"
258
                             type="danger">删除</el-link>
267
                             type="danger">删除</el-link>
259
                         </div>
268
                         </div>
269
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)" type="date"
278
                     :disabled="taskName != '线上会审' || (taskName == '线上会审' && comment.userId != userId)" type="date"
270
                     value-format="yyyy-MM-dd" style="width:140px;" placeholder="选择日期"></el-date-picker>
279
                     value-format="yyyy-MM-dd" style="width:140px;" placeholder="选择日期"></el-date-picker>
271
                 </td>
280
                 </td>
272
-                <td>
273
-                  <el-button type="text" style="color:#F56C6C" size="mini" circle @click="deletCommentItem(index)"
274
-                    :disabled="taskName != '合同拟稿'">删除行</el-button>
281
+                <td v-show="taskName == '合同拟稿'">
282
+                  <div class="delete-btn" @click="deletCommentItem(index)">
283
+                    <i class="el-icon-circle-close"></i>
284
+                  </div>
275
                 </td>
285
                 </td>
276
               </tr>
286
               </tr>
277
             </table>
287
             </table>
345
             </table>
355
             </table>
346
           </el-form-item>
356
           </el-form-item>
347
           <el-form-item label="分管审批意见" prop="remark">
357
           <el-form-item label="分管审批意见" prop="remark">
348
-            <el-input v-model="form.managerComment" type="textarea" placeholder="请输入分管审批意见"
358
+            <el-input v-model="form.managerComment" type="textarea" :autosize="{ minRows: 4 }" placeholder="请输入分管审批意见"
349
               :disabled="taskName != '分管审核'" />
359
               :disabled="taskName != '分管审核'" />
350
           </el-form-item>
360
           </el-form-item>
351
           <el-row>
361
           <el-row>
1050
             })
1060
             })
1051
 
1061
 
1052
           }
1062
           }
1053
-        }else{
1063
+        } else {
1054
           this.$message.error('必填项未填写完毕')
1064
           this.$message.error('必填项未填写完毕')
1055
         }
1065
         }
1056
       });
1066
       });
1259
 <style lang="scss" scoped>
1269
 <style lang="scss" scoped>
1260
 @import "@/assets/styles/element-reset.scss";
1270
 @import "@/assets/styles/element-reset.scss";
1261
 
1271
 
1272
+.delete-btn {
1273
+  color: #F56C6C;
1274
+  cursor: pointer;
1275
+
1276
+  i {
1277
+    font-size: 25px;
1278
+  }
1279
+}
1280
+
1262
 table {
1281
 table {
1263
   /*边框*/
1282
   /*边框*/
1264
   /* border: 1px solid black; */
1283
   /* border: 1px solid black; */

+ 4
- 3
oa-ui/src/views/flowable/form/components/choosePartyA.vue 查看文件

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-06-18 17:38:50
3
  * @Date: 2024-06-18 17:38:50
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-08-20 16:33:37
5
+ * @LastEditTime: 2024-08-30 11:25:29
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div>
8
   <div>
9
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
9
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
10
       <el-form-item label="单位名称" prop="partyAName">
10
       <el-form-item label="单位名称" prop="partyAName">
11
-        <el-input v-model="queryParams.partyAName" placeholder="请输入单位名称" clearable @keyup.enter.native="handleQuery" />
11
+        <el-input v-model="queryParams.partyAName" placeholder="请输入单位名称" clearable @keyup.enter.native="handleQuery()"/>
12
       </el-form-item>
12
       </el-form-item>
13
+      <el-form-item style="margin-bottom:0;display:none;"> <el-input></el-input> </el-form-item>
13
       <el-form-item>
14
       <el-form-item>
14
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
15
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
15
       </el-form-item>
16
       </el-form-item>
129
       this.loading = true;
130
       this.loading = true;
130
       if (this.projectSource == '0') {
131
       if (this.projectSource == '0') {
131
         this.queryParams.partyAName = '中国电建集团成都勘测设计研究院有限公司'
132
         this.queryParams.partyAName = '中国电建集团成都勘测设计研究院有限公司'
132
-      } else {
133
+      } else if (this.projectSource == '1') {
133
         this.queryParams.partyAName = null
134
         this.queryParams.partyAName = null
134
       }
135
       }
135
       listPartyA(this.queryParams).then(response => {
136
       listPartyA(this.queryParams).then(response => {

+ 11
- 6
oa-ui/src/views/flowable/form/finance/borrowForm.vue 查看文件

118
           <el-row :gutter="20">
118
           <el-row :gutter="20">
119
             <el-col :span="8" :xs="24">
119
             <el-col :span="8" :xs="24">
120
               <el-form-item label="申请金额" prop="applyAmount">
120
               <el-form-item label="申请金额" prop="applyAmount">
121
-                <el-input v-model="form.applyAmount" placeholder="请输入申请金额" :disabled="taskName != '借款申请'"
122
-                  @blur="VerificationAmount" />
121
+                <el-input v-model="form.applyAmount" placeholder="请输入申请金额" :disabled="taskName != '借款申请'" />
123
                 <span style="color:#E74C3C" v-if="exceed && form.borrowUsage == 0">超过预算金额:{{ getMoreAmount('0')
122
                 <span style="color:#E74C3C" v-if="exceed && form.borrowUsage == 0">超过预算金额:{{ getMoreAmount('0')
124
                   }}</span>
123
                   }}</span>
125
               </el-form-item>
124
               </el-form-item>
490
       }
489
       }
491
     },
490
     },
492
     initForm() {
491
     initForm() {
493
-      listBorrowDetail({ pageSize:999, borrowId: this.taskForm.formId }).then(res => {
492
+      listBorrowDetail({ pageSize: 999, borrowId: this.taskForm.formId }).then(res => {
494
         if (res.rows.length != 0) {
493
         if (res.rows.length != 0) {
495
           this.detailList = res.rows
494
           this.detailList = res.rows
496
         }
495
         }
599
       });
598
       });
600
     },
599
     },
601
     /** 提交按钮 */
600
     /** 提交按钮 */
602
-    submitForm() {
601
+    async submitForm() {
602
+      if (this.taskName == '借款申请') {
603
+        await this.VerificationAmount();
604
+      }
603
       this.$refs["form"].validate(valid => {
605
       this.$refs["form"].validate(valid => {
604
         if (valid) {
606
         if (valid) {
605
           if (this.form.borrowUsage == '0' && !this.form.projectId) {
607
           if (this.form.borrowUsage == '0' && !this.form.projectId) {
678
           }
680
           }
679
         }
681
         }
680
       });
682
       });
683
+
681
     },
684
     },
682
     handleComplete(taskForm) {
685
     handleComplete(taskForm) {
683
       complete(taskForm).then(response => {
686
       complete(taskForm).then(response => {
782
         sum = sum + Number(user[name1]);
785
         sum = sum + Number(user[name1]);
783
       }
786
       }
784
       this.form[name2] = sum.toFixed(2);
787
       this.form[name2] = sum.toFixed(2);
785
-      this.VerificationAmount();
786
     },
788
     },
787
     getBorrowPath(val) {
789
     getBorrowPath(val) {
788
       let arr = val.split('/upload')
790
       let arr = val.split('/upload')
822
     VerificationAmount() {
824
     VerificationAmount() {
823
       if (this.isSelect) {
825
       if (this.isSelect) {
824
         if (this.form.applyAmount > (this.totalBudget - this.hasBorrow)) {
826
         if (this.form.applyAmount > (this.totalBudget - this.hasBorrow)) {
825
-          this.$confirm('借款总额已经超过项目预算,将走《超预算或预算外支付(报销)》流程', '提示', {
827
+          return this.$confirm('借款总额已经超过项目预算,将走《超预算或预算外支付(报销)》流程', '提示', {
826
             confirmButtonText: '确定',
828
             confirmButtonText: '确定',
827
             type: 'warning'
829
             type: 'warning'
828
           }).then(() => {
830
           }).then(() => {
829
             this.exceed = true;
831
             this.exceed = true;
830
             this.$set(this.taskForm.variables, "exceed", true);
832
             this.$set(this.taskForm.variables, "exceed", true);
833
+            return '1'
834
+          }).catch(() => {
831
             return
835
             return
832
           })
836
           })
833
         } else {
837
         } else {
834
           this.exceed = false;
838
           this.exceed = false;
835
           this.$set(this.taskForm.variables, "exceed", false);
839
           this.$set(this.taskForm.variables, "exceed", false);
840
+          return
836
         }
841
         }
837
       }
842
       }
838
     },
843
     },

+ 46
- 31
oa-ui/src/views/flowable/form/projectProcess/addproject.vue 查看文件

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-03-18 11:00:04
3
  * @Date: 2024-03-18 11:00:04
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-08-20 16:34:35
5
+ * @LastEditTime: 2024-08-29 14:31:38
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="project-wrapper">
8
   <div class="project-wrapper">
9
     <!-- 项目登记 -->
9
     <!-- 项目登记 -->
10
     <h2 style="text-align: center" id="scrollToMe">项目登记</h2>
10
     <h2 style="text-align: center" id="scrollToMe">项目登记</h2>
11
     <el-form ref="projectAdd" :model="addForm" :rules="rules" label-width="130px" :disabled="disabled">
11
     <el-form ref="projectAdd" :model="addForm" :rules="rules" label-width="130px" :disabled="disabled">
12
+      <el-form-item label="项目来源:" prop="projectSource">
13
+        <el-radio-group v-model="addForm.projectSource" @change="changeProjectSource">
14
+          <el-radio label="0" border>院内</el-radio>
15
+          <el-radio label="1" border>院外</el-radio>
16
+        </el-radio-group>
17
+      </el-form-item>
12
       <el-form-item label="项目编号:" prop="projectNumber">
18
       <el-form-item label="项目编号:" prop="projectNumber">
13
         <el-input v-model="addForm.projectNumber"></el-input>
19
         <el-input v-model="addForm.projectNumber"></el-input>
14
       </el-form-item><el-form-item label="项目名称:" prop="projectName">
20
       </el-form-item><el-form-item label="项目名称:" prop="projectName">
21
         <el-radio v-model="addForm.projectLevel" label="0" border>一般项目</el-radio>
27
         <el-radio v-model="addForm.projectLevel" label="0" border>一般项目</el-radio>
22
         <el-radio v-model="addForm.projectLevel" label="1" border>重大项目</el-radio>
28
         <el-radio v-model="addForm.projectLevel" label="1" border>重大项目</el-radio>
23
       </el-form-item>
29
       </el-form-item>
24
-      <el-form-item label="项目来源:" prop="projectSource">
25
-        <el-radio-group v-model="addForm.projectSource" @change="changeProjectSource">
26
-          <el-radio label="0" border>院内</el-radio>
27
-          <el-radio label="1" border>院外</el-radio>
28
-        </el-radio-group>
29
-      </el-form-item>
30
       <el-form-item label="合同编码:">
30
       <el-form-item label="合同编码:">
31
         <el-input v-model="chooseContractInfo.contractCode">
31
         <el-input v-model="chooseContractInfo.contractCode">
32
           <el-button slot="append" @click="openContract = true">选择</el-button>
32
           <el-button slot="append" @click="openContract = true">选择</el-button>
270
       this.openContract = false;
270
       this.openContract = false;
271
     },
271
     },
272
     // 暂存
272
     // 暂存
273
-    save() {
273
+    async save() {
274
       // 新增项目数据
274
       // 新增项目数据
275
       if (this.formTotal == 0) {
275
       if (this.formTotal == 0) {
276
-        this.$refs['projectAdd'].validate((vaild) => {
277
-          if (vaild) {
278
-            this.addForm.projectId = this.taskForm.formId;
279
-            addProject(this.addForm).then(response => {
280
-              this.$modal.msgSuccess("项目登记成功");
281
-              this.getList();
282
-            });
283
-            let contractId = this.chooseContractInfo.contractId ? this.chooseContractInfo.contractId : ''
284
-            let pcobj = { projectId: this.taskForm.formId, contractId }
285
-            if (contractId != '') {
286
-              addProjectContract(pcobj).then(response => {
287
-                this.$modal.msgSuccess("合同关联成功");
288
-              })
289
-            }
290
-          } else {
291
-            let dom = document.getElementById('scrollToMe')
292
-            dom.scrollIntoView({ behavior: 'smooth' });
293
-          }
294
-        })
276
+        this.addForm.projectId = this.taskForm.formId;
277
+        await addProject(this.addForm)
278
+        this.$modal.msgSuccess("新增项目成功");
279
+        this.getList();
280
+        let contractId = this.chooseContractInfo.contractId ? this.chooseContractInfo.contractId : ''
281
+        let pcobj = { projectId: this.taskForm.formId, contractId }
282
+        if (contractId != '') {
283
+          await addProjectContract(pcobj)
284
+          this.$modal.msgSuccess("合同关联成功");
285
+        }
286
+        // setTimeout(() => {
287
+        //   this.$router.go(0);
288
+        // }, 500);
289
+        this.initProjectForm();
295
       } else {
290
       } else {
296
         // 修改项目数据
291
         // 修改项目数据
297
-        updateProject(this.addForm).then(
298
-          this.$modal.msgSuccess("保存成功")
299
-        );
292
+        await updateProject(this.addForm)
293
+        this.$modal.msgSuccess("保存成功")
300
       }
294
       }
301
     },
295
     },
302
     async confirmAddForm() {
296
     async confirmAddForm() {
307
       }
301
       }
308
       this.$set(this.taskForm.variables, "approval", approvalId);
302
       this.$set(this.taskForm.variables, "approval", approvalId);
309
       this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
303
       this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
310
-      this.save()
311
       // 获取下一个流程节点
304
       // 获取下一个流程节点
312
       this.$refs['projectAdd'].validate((vaild) => {
305
       this.$refs['projectAdd'].validate((vaild) => {
313
         if (vaild) {
306
         if (vaild) {
307
+          if (this.formTotal == 0) {
308
+            this.addForm.projectId = this.taskForm.formId;
309
+            addProject(this.addForm).then(response => {
310
+              this.$modal.msgSuccess("项目登记成功");
311
+              this.getList();
312
+            });
313
+            let contractId = this.chooseContractInfo.contractId ? this.chooseContractInfo.contractId : ''
314
+            let pcobj = { projectId: this.taskForm.formId, contractId }
315
+            if (contractId != '') {
316
+              addProjectContract(pcobj).then(response => {
317
+                this.$modal.msgSuccess("合同关联成功");
318
+              })
319
+            }
320
+          } else {
321
+            // 修改项目数据
322
+            updateProject(this.addForm).then(
323
+              this.$modal.msgSuccess("保存成功")
324
+            );
325
+          }
314
           const params = { taskId: this.taskForm.taskId };
326
           const params = { taskId: this.taskForm.taskId };
315
           getNextFlowNode(params).then(res => {
327
           getNextFlowNode(params).then(res => {
316
             complete(this.taskForm).then(response => {
328
             complete(this.taskForm).then(response => {
318
               this.$emit('goBack');
330
               this.$emit('goBack');
319
             });
331
             });
320
           })
332
           })
333
+        } else {
334
+          let dom = document.getElementById('scrollToMe')
335
+          dom.scrollIntoView({ behavior: 'smooth' });
321
         }
336
         }
322
       })
337
       })
323
 
338
 

+ 10
- 4
oa-ui/src/views/flowable/form/projectProcess/businessReview.vue 查看文件

2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-04-08 13:56:14
3
  * @Date: 2024-04-08 13:56:14
4
  * @LastEditors: Please set LastEditors
4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-07-08 17:48:47
5
+ * @LastEditTime: 2024-08-28 10:13:07
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="app-container">
8
   <div class="app-container">
29
 import { mapGetters } from 'vuex';
29
 import { mapGetters } from 'vuex';
30
 import { parseTime } from "@/utils/ruoyi";
30
 import { parseTime } from "@/utils/ruoyi";
31
 import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm } from "@/api/flowable/todo";
31
 import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm } from "@/api/flowable/todo";
32
-import { getProjectComment, addProjectComment } from "@/api/oa/project/projectComment"
32
+import { getProjectComment, addProjectComment, updateProjectComment } from "@/api/oa/project/projectComment"
33
 import { listProject, getProject, addProject, updateProject, delProject, submitProject, modifyProject } from "@/api/oa/project/project";
33
 import { listProject, getProject, addProject, updateProject, delProject, submitProject, modifyProject } from "@/api/oa/project/project";
34
 import { getUsersManageLeaderByDept } from '@/api/system/post'
34
 import { getUsersManageLeaderByDept } from '@/api/system/post'
35
 export default {
35
 export default {
61
         jyComment: [{ required: true, message: "请输入审核意见", trigger: "blur" }]
61
         jyComment: [{ required: true, message: "请输入审核意见", trigger: "blur" }]
62
       },
62
       },
63
       jyApprovalTime: "",
63
       jyApprovalTime: "",
64
-      managerList: []
64
+      managerList: [],
65
+      formTotal: 0,
65
     }
66
     }
66
   },
67
   },
67
   created() {
68
   created() {
78
     initForm() {
79
     initForm() {
79
       getProjectComment(this.taskForm.formId).then(res => {
80
       getProjectComment(this.taskForm.formId).then(res => {
80
         if (res.data) {
81
         if (res.data) {
82
+          this.formTotal = 1;
81
           this.form = res.data
83
           this.form = res.data
82
           if (this.form.jyUser) {
84
           if (this.form.jyUser) {
83
             this.form.jyApproverName = this.form.jyUser.nickName
85
             this.form.jyApproverName = this.form.jyUser.nickName
114
     },
116
     },
115
     confirm() {
117
     confirm() {
116
       this.form.projectId = this.taskForm.formId
118
       this.form.projectId = this.taskForm.formId
117
-      addProjectComment({ projectId: this.taskForm.formId, jyComment: this.form.jyComment })
119
+      if (this.formTotal) {
120
+        updateProjectComment(this.form)
121
+      } else {
122
+        addProjectComment({ projectId: this.taskForm.formId, jyComment: this.form.jyComment })
123
+      }
118
       const params = { taskId: this.taskForm.taskId };
124
       const params = { taskId: this.taskForm.taskId };
119
       // 获取下一个流程节点
125
       // 获取下一个流程节点
120
       getNextFlowNode(params).then(res => {
126
       getNextFlowNode(params).then(res => {

+ 396
- 0
oa-ui/src/views/oa/contract/components/edit.vue 查看文件

1
+<template>
2
+  <div class="app-container">
3
+    <el-form ref="form" :model="form" :rules="rules" label-width="130px">
4
+      <el-form-item label="投标项目名称" prop="tenderId">
5
+        <el-button type="primary" size="mini" @click="tbOpen = true">选择投标项目</el-button>
6
+        <el-button type="danger" size="mini" @click="form.tenderId = null" v-if="form.tenderId != null">删除投标项目</el-button>
7
+        <el-descriptions border v-if="form.tenderId" style="margin-top: 10px;" :column="1">
8
+          <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="3">
9
+            {{ chooseTender.projectName }}
10
+          </el-descriptions-item>
11
+          <el-descriptions-item label="项目来源" label-class-name="my-label">
12
+            {{ getProjectSource(chooseTender) }}
13
+          </el-descriptions-item>
14
+          <el-descriptions-item label="联系人" label-class-name="my-label">
15
+            {{ chooseTender.aPerson }}
16
+          </el-descriptions-item>
17
+          <el-descriptions-item label="联系电话" label-class-name="my-label">
18
+            {{ chooseTender.aPhone }}
19
+          </el-descriptions-item>
20
+        </el-descriptions>
21
+      </el-form-item>
22
+      <el-form-item label="合同名称" prop="contractName">
23
+        <el-input style="width: 100%;" v-model="form.contractName" placeholder="请输入合同名称"></el-input>
24
+      </el-form-item>
25
+      <el-form-item label="甲方单位" prop="partyAId">
26
+        <el-select v-model="form.partyAId" filterable placeholder="请选择" disabled style="width: 90%;">
27
+          <el-option v-for="item in partyAList" :key="item.value" :label="item.partyAName" :value="item.partyAId">
28
+          </el-option>
29
+        </el-select>
30
+        <el-button type="primary" @click="partyAOpen = true" size="mini">选择单位</el-button>
31
+      </el-form-item>
32
+      <el-form-item label="合同编码" prop="contractCode">
33
+        <el-input style="width: 100%;" v-model="form.contractCode" placeholder="请输入合同编码"></el-input>
34
+      </el-form-item>
35
+      <el-form-item label="合同编号" prop="contractNumber">
36
+        <el-input style="width:  100%;" v-model="form.contractNumber" placeholder="请输入合同编号"></el-input>
37
+      </el-form-item>
38
+      <el-form-item label="合同金额" prop="amount">
39
+        <el-input style="width:50%;" v-model="form.amount" placeholder="请输入合同金额">
40
+          <template slot="append">元</template>
41
+        </el-input>
42
+      </el-form-item>
43
+      <el-form-item style="text-align: left;" label="履约保证金" prop="deposit">
44
+        <el-input style="width:50%;" v-model="form.deposit" placeholder="请输入履约保证金">
45
+          <template slot="append">元</template>
46
+        </el-input>
47
+      </el-form-item>
48
+      <el-form-item label="合同文件" prop="contractDocument">
49
+        <FileUpload ref="contractFile" :limit="1" :filePathName="'承接合同/合同文件'" :isModify="true" :isShowTip="false"
50
+          :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf', 'rar', 'zip']" @input="getContractPath">
51
+        </FileUpload>
52
+        <div>
53
+          <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">
54
+            {{ getFileName(form.contractDocument) }}
55
+          </el-link>
56
+          <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.contractDocument}`"
57
+            :underline="false" target="_blank">
58
+            <span class="el-icon-download">下载文件</span>
59
+          </el-link>
60
+        </div>
61
+      </el-form-item>
62
+      <el-form-item label="关联项目:" prop="projectIds">
63
+        <el-button type="primary" size="mini" @click="open = true" icon="el-icon-plus">新增关联项目</el-button>
64
+        <el-table v-loading="projectloading" :data="connectProjectList">
65
+          <el-table-column label="序号" type="index" width="50px"></el-table-column>
66
+          <el-table-column label="项目编号" align="center" prop="projectNumber"></el-table-column>
67
+          <el-table-column label="项目名称" align="center" prop="projectName"></el-table-column>
68
+          <el-table-column label="项目负责人" align="center" prop="projectLeaderUser.nickName"></el-table-column>
69
+          <el-table-column label="承担部门" align="center" prop="undertakingDeptName"></el-table-column>
70
+          <el-table-column label="操作" align="center">
71
+            <template slot-scope="scope">
72
+              <el-button type="text" icon="el-icon-view" @click="clickProjectFn(scope.row)">查看</el-button>
73
+              <el-button type="text" style="color:#F56C6C;" icon="el-icon-delete"
74
+                @click="handleDelete(scope.$index,scope.row)">删除</el-button>
75
+            </template>
76
+          </el-table-column>
77
+        </el-table>
78
+      </el-form-item>
79
+      <el-form-item label="关联分包合同:">
80
+
81
+      </el-form-item>
82
+      <!-- 表1:工作量计划-->
83
+      <work-table ref="workTableRef" :contractId="form.contractId" :taskName="'合同拟稿'"></work-table>
84
+
85
+      <p class="mb20 mt20"></p>
86
+      <!-- 表2:回款计划 -->
87
+      <payment-table ref="paymentRef" :contractId="form.contractId" :amount="form.amount"
88
+        :taskName="'合同拟稿'"></payment-table>
89
+
90
+      <el-form-item label="合同备注" prop="remark">
91
+        <el-input v-model="form.remark" :autosize="{ minRows: 4 }" type="textarea" placeholder="请输入合同备注" />
92
+      </el-form-item>
93
+
94
+
95
+      <el-divider></el-divider>
96
+      <el-form-item label="拟稿日期" prop="draftTime">
97
+        <el-date-picker clearable v-model="form.draftTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择拟稿日期">
98
+        </el-date-picker>
99
+      </el-form-item>
100
+      <el-form-item label="分管审批日期" prop="managerTime">
101
+        <el-date-picker clearable v-model="form.managerTime" type="date" value-format="yyyy-MM-dd"
102
+          placeholder="请选择分管审批日期">
103
+        </el-date-picker>
104
+      </el-form-item>
105
+      <el-form-item label="总经理审批日期" prop="gmTime">
106
+        <el-date-picker clearable v-model="form.gmTime" type="date" value-format="yyyy-MM-dd" placeholder="请选择总经理审批日期">
107
+        </el-date-picker>
108
+      </el-form-item>
109
+      <el-form-item label="签订日期" prop="signDate">
110
+        <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期">
111
+        </el-date-picker>
112
+      </el-form-item>
113
+      <el-form-item label="评审方式">
114
+        <el-tag :type="form.commentType == '2' ? 'success' : 'warning'">
115
+          {{ getCommentType(form.commentType) }}</el-tag>
116
+      </el-form-item>
117
+      <el-form-item label="" label-width="0" v-if="form.commentType == '2'">
118
+        <table border="1" style="width:100%;">
119
+          <tr>
120
+            <td style="width: 50px;">序号</td>
121
+            <td>会审部门</td>
122
+            <td>会审人</td>
123
+            <td>会审意见</td>
124
+            <td style="width: 200px;">会审附件</td>
125
+            <td style="width: 100px;">日期</td>
126
+          </tr>
127
+          <tr v-for="(comment, index) in commentList" :key="index">
128
+            <td>
129
+              {{ index + 1 }}
130
+            </td>
131
+            <td>
132
+              {{ getDeptName(comment.deptId) }}
133
+            </td>
134
+            <td>
135
+              {{ getUserName(comment.userId) }}
136
+            </td>
137
+            <td>
138
+              {{ comment.comment }}
139
+            </td>
140
+            <td>
141
+              <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + comment.document}`)">
142
+                {{ getFileName(comment.document) }}
143
+              </el-link>
144
+            </td>
145
+            <td>
146
+              <el-date-picker v-model="comment.commentTime" type="date" value-format="yyyy-MM-dd" style="width:140px;"
147
+                placeholder="选择日期"></el-date-picker>
148
+            </td>
149
+          </tr>
150
+        </table>
151
+      </el-form-item>
152
+    </el-form>
153
+    <div slot="footer" class="dialog-footer text-center">
154
+      <el-button type="primary" @click="submitForm">修 改</el-button>
155
+      <el-button @click="$emit('cancel')">取 消</el-button>
156
+    </div>
157
+
158
+    <el-dialog title="选择项目" :visible.sync="open" width="60%" append-to-body>
159
+      <choose-project @chooseProject="confirmProject"></choose-project>
160
+    </el-dialog>
161
+    <el-dialog title="选择投标项目" :visible.sync="tbOpen" width="60%" append-to-body>
162
+      <choose-tender @choose="confirmTender"></choose-tender>
163
+    </el-dialog>
164
+    <el-drawer :visible.sync="partyAOpen" title="选择甲方单位" :size="'40%'" append-to-body>
165
+      <div class="app-container">
166
+        <choose-party-a @confirm="confirmPartyA"></choose-party-a>
167
+      </div>
168
+    </el-drawer>
169
+    <el-drawer :visible.sync="drawerOpen" title="" :size="'70%'" append-to-body>
170
+      <projectInfo :needReturn="false"></projectInfo>
171
+    </el-drawer>
172
+  </div>
173
+
174
+</template>
175
+
176
+<script>
177
+import { listContractWork, addContractWork, delContractWork } from "@/api/oa/contract/contractWork";
178
+import { listContractPayment, addContractPayment, delContractPayment } from "@/api/oa/contract/contractPayment";
179
+import { listContractComment, addContractComment, updateContractComment } from "@/api/oa/contract/contractComment";
180
+import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
181
+import { listProjectContract, addProjectContract, delProjectContract } from "@/api/oa/contract/projectContract";
182
+import { listProject, getProject } from "@/api/oa/project/project";
183
+import { listPartyA } from "@/api/oa/partyA/partyA";
184
+import chooseProject from "@/views/flowable/form/components/chooseProject.vue";
185
+import chooseTender from "@/views/flowable/form/components/chooseTender.vue";
186
+import ChoosePartyA from '@/views/flowable/form/components/choosePartyA.vue';
187
+import WorkTable from '@/views/flowable/form/business/components/workTable.vue';
188
+import paymentTable from '@/views/flowable/form/business/components/paymentTable.vue';
189
+import projectInfo from '@/views/oa/project/info'
190
+export default {
191
+  components: { chooseProject, chooseTender, ChoosePartyA, WorkTable, paymentTable, projectInfo },
192
+  props: {
193
+    form: {
194
+      type: Object
195
+    },
196
+  },
197
+  data() {
198
+    return {
199
+      baseUrl: process.env.VUE_APP_BASE_API,
200
+      open: false,
201
+      tbOpen: false,
202
+      partyAOpen: false,
203
+      drawerOpen: false,
204
+      commentList: [],
205
+      workList: [],
206
+      paymentList: [],
207
+      partyAList: [],
208
+      chooseTender: {},
209
+      rules: {
210
+        contractCode: [
211
+          { required: true, message: '请输入合同编码', trigger: 'blur' },
212
+        ],
213
+        amount: [
214
+          { required: true, message: '请输入合同金额', trigger: 'blur' },
215
+        ],
216
+      },
217
+      projectloading: false,
218
+      connectProjectList: [],
219
+      projectContractForm: {
220
+        projectIds: [],
221
+      },
222
+    }
223
+  },
224
+  watch: {
225
+    'form.contractId'() {
226
+      this.init();
227
+    }
228
+  },
229
+  created() {
230
+    this.getPartyAList();
231
+    this.init();
232
+  },
233
+  methods: {
234
+    init() {
235
+      const contractId = this.form.contractId;
236
+      this.chooseTender = this.form.tender;
237
+      const tenderId = this.form.tenderId;
238
+      listContractComment({ pageNum: 1, pageSize: 100, contractId: contractId }).then(res => {
239
+        if (res.rows && res.rows.length != 0) {
240
+          this.commentList = res.rows;
241
+        }
242
+      })
243
+      listProjectContract({ contractId: contractId }).then(res => {
244
+        if (res.rows) {
245
+          let list = []
246
+          for (let row of res.rows) {
247
+            getProject(row.projectId).then(response => {
248
+              list.push(response.data)
249
+            })
250
+          }
251
+          this.connectProjectList = list;
252
+          this.projectloading = false;
253
+        }
254
+      })
255
+    },
256
+    /** 提交按钮 */
257
+    submitForm() {
258
+      this.$refs["form"].validate(valid => {
259
+        if (valid) {
260
+          if (this.form.contractId != null) {
261
+            for (let comment of this.commentList) {
262
+              updateContractComment(comment);
263
+            }
264
+            this.updateContractData();
265
+            this.updateRelatedProject();
266
+            this.$emit('cancel')
267
+          }
268
+        }
269
+      });
270
+    },
271
+    // 查询业主单位列表
272
+    getPartyAList() {
273
+      listPartyA({
274
+        pageNum: 1,
275
+        pageSize: 99999999
276
+      }).then(response => {
277
+        this.partyAList = response.rows;
278
+      })
279
+    },
280
+    getCommentType(row) {
281
+      let name = '';
282
+      if (row == '0') {
283
+        name = '无须评审'
284
+      } else if (row == '1') {
285
+        name = '会议评审'
286
+      } else {
287
+        name = '线上评审'
288
+      }
289
+      return name
290
+    },
291
+    getProjectSource(chooseTender) {
292
+      const TARGET_COMPANY = '中国电建集团成都勘测设计研究院有限公司';
293
+      if (!chooseTender || !chooseTender.partyA || !chooseTender.partyA.partyAName) {
294
+        return '';
295
+      }
296
+      return chooseTender.partyA.partyAName.includes(TARGET_COMPANY) ? '院内' : '院外';
297
+    },
298
+    confirmProject(val) {
299
+      this.open = false
300
+      for (let v of val) {
301
+        this.projectContractForm.projectIds.push(v.projectId);
302
+        this.connectProjectList.push(v)
303
+      }
304
+    },
305
+    confirmTender(val) {
306
+      this.tbOpen = false
307
+      this.form.amount = val.quote
308
+      this.form.deposit = val.deposit
309
+      this.form.tenderId = val.tenderId
310
+      this.chooseTender = val
311
+      this.isSelect = true
312
+      this.form.partyAId = val.partyAId
313
+    },
314
+    confirmPartyA(val) {
315
+      this.partyAOpen = false
316
+      if (val && val.length > 1) {
317
+        return this.$message.error('请选择一个甲方单位')
318
+      }
319
+      if (val) {
320
+        this.getPartyAList();
321
+        this.$set(this.form, 'partyAId', val[0].partyAId)
322
+      }
323
+    },
324
+    getContractPath(val) {
325
+      let arr = val.split('/upload')
326
+      this.form.contractDocument = arr[1]
327
+      if (val == "") {
328
+        this.form.contractDocument = ""
329
+      }
330
+    },
331
+    updateContractData() {
332
+      this.workList = this.$refs.workTableRef.workList;
333
+      this.paymentList = this.$refs.paymentRef.paymentList;
334
+      updateContract(this.form).then(response => {
335
+        this.$modal.msgSuccess("修改成功");
336
+        this.open = false;
337
+        delContractWork(this.form.contractId).then(res => {
338
+          for (let work of this.workList) {
339
+            work.contractId = this.form.contractId
340
+            addContractWork(work);
341
+          }
342
+        })
343
+        delContractPayment(this.form.contractId).then(res => {
344
+          for (let payment of this.paymentList) {
345
+            payment.contractId = this.form.contractId
346
+            addContractPayment(payment);
347
+          }
348
+        })
349
+      });
350
+    },
351
+    updateRelatedProject() {
352
+      delProjectContract(this.form.contractId).then(() => {
353
+        for (let projectId of this.projectContractForm.projectIds) {
354
+          addProjectContract({ projectId: projectId, contractId: this.form.contractId });
355
+        }
356
+      })
357
+    },
358
+    clickProjectFn(row) {
359
+      this.$router.replace({ query: { ...this.$route.query, projectId: row.projectId } });
360
+      this.drawerOpen = true;
361
+    },
362
+    handleDelete(index, row) {
363
+      this.connectProjectList.splice(index, 1)
364
+      this.projectContractForm.projectIds.splice(row.contractId)
365
+    }
366
+  },
367
+}
368
+</script>
369
+
370
+<style lang="scss" scoped>
371
+@import "@/assets/styles/element-reset.scss";
372
+
373
+table {
374
+  /*边框*/
375
+  /* border: 1px solid black; */
376
+  text-align: center;
377
+  border-collapse: collapse;
378
+
379
+  /*设置背景颜色*/
380
+  /* background-color: #bfa; */
381
+  td {
382
+    padding: 5px;
383
+  }
384
+}
385
+
386
+::v-deep .el-descriptions-item__label.is-bordered-label {
387
+  color: #5a5757;
388
+  background: rgba($color: #a9adb3, $alpha: 0.1);
389
+  width: 150px;
390
+  min-width: 150px;
391
+}
392
+
393
+::v-deep .el-descriptions .is-bordered .el-descriptions-item__cell {
394
+  border: 1px solid #cdd0d3;
395
+}
396
+</style>

+ 13
- 108
oa-ui/src/views/oa/contract/index.vue 查看文件

1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2024-06-21 18:52:00
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-28 17:30:44
6
+-->
1
 <!--
7
 <!--
2
  * @Author: ysh
8
  * @Author: ysh
3
  * @Date: 2024-03-18 09:05:41
9
  * @Date: 2024-03-18 09:05:41
4
  * @LastEditors: Please set LastEditors
10
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-08-06 14:38:13
11
+ * @LastEditTime: 2024-08-28 16:13:14
6
 -->
12
 -->
7
 <template>
13
 <template>
8
   <div class="app-container">
14
   <div class="app-container">
22
     </el-form>
28
     </el-form>
23
 
29
 
24
     <el-row :gutter="10" class="mb8">
30
     <el-row :gutter="10" class="mb8">
25
-      <!-- <el-col :span="1.5">
26
-        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
27
-          v-hasPermi="['oa:contract:add']">新增</el-button>
28
-      </el-col>
29
-      <el-col :span="1.5">
30
-        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
31
-          v-hasPermi="['oa:contract:edit']">修改</el-button>
32
-      </el-col>
33
-      <el-col :span="1.5">
34
-        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
35
-          v-hasPermi="['oa:contract:remove']">删除</el-button>
36
-      </el-col> -->
37
       <el-col :span="1.5">
31
       <el-col :span="1.5">
38
         <el-button type="success" plain icon="el-icon-plus" size="mini" @click="handleRegister"
32
         <el-button type="success" plain icon="el-icon-plus" size="mini" @click="handleRegister"
39
           v-hasPermi="['oa:contract:add']">登记承接合同</el-button>
33
           v-hasPermi="['oa:contract:add']">登记承接合同</el-button>
98
             v-hasPermi="['oa:contract:query']">查看</el-button>
92
             v-hasPermi="['oa:contract:query']">查看</el-button>
99
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
93
           <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
100
             v-hasPermi="['oa:contract:edit']">修改</el-button>
94
             v-hasPermi="['oa:contract:edit']">修改</el-button>
101
-          <!-- <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
102
-            v-hasPermi="['oa:contract:remove']">删除</el-button> -->
103
         </template>
95
         </template>
104
       </el-table-column>
96
       </el-table-column>
105
     </el-table>
97
     </el-table>
108
       @pagination="getList" />
100
       @pagination="getList" />
109
 
101
 
110
     <!-- 添加或修改cmc合同评审对话框 -->
102
     <!-- 添加或修改cmc合同评审对话框 -->
111
-    <el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
112
-      <el-form ref="form" :model="form" :rules="rules" label-width="130px">
113
-        <el-form-item label="合同名称" prop="contractName">
114
-          {{ form.contractName }}
115
-        </el-form-item>
116
-        <el-form-item label="合同编号" prop="contractNumber">
117
-          {{ form.contractNumber }}
118
-        </el-form-item>
119
-        <el-form-item label="拟稿日期" prop="draftTime">
120
-          <el-date-picker clearable v-model="form.draftTime" type="date" value-format="yyyy-MM-dd"
121
-            placeholder="请选择拟稿日期">
122
-          </el-date-picker>
123
-        </el-form-item>
124
-        <el-form-item label="分管审批日期" prop="managerTime">
125
-          <el-date-picker clearable v-model="form.managerTime" type="date" value-format="yyyy-MM-dd"
126
-            placeholder="请选择分管审批日期">
127
-          </el-date-picker>
128
-        </el-form-item>
129
-        <el-form-item label="总经理审批日期" prop="gmTime">
130
-          <el-date-picker clearable v-model="form.gmTime" type="date" value-format="yyyy-MM-dd"
131
-            placeholder="请选择总经理审批日期">
132
-          </el-date-picker>
133
-        </el-form-item>
134
-        <el-form-item label="签订日期" prop="signDate">
135
-          <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期">
136
-          </el-date-picker>
137
-        </el-form-item>
138
-        <el-form-item label="评审方式">
139
-          <el-tag :type="form.commentType == '2' ? 'success' : 'warning'">
140
-            {{ getCommentType(form.commentType) }}</el-tag>
141
-        </el-form-item>
142
-        <el-form-item label="" label-width="0" v-if="form.commentType == '2'">
143
-          <table border="1" style="width:100%;">
144
-            <tr>
145
-              <td style="width: 50px;">序号</td>
146
-              <td>会审部门</td>
147
-              <td>会审人</td>
148
-              <td>会审意见</td>
149
-              <td style="width: 200px;">会审附件</td>
150
-              <!-- <td style="width: 90px;">签名</td> -->
151
-              <td style="width: 100px;">日期</td>
152
-            </tr>
153
-            <tr v-for="(comment, index) in commentList" :key="index">
154
-              <td>
155
-                {{ index + 1 }}
156
-              </td>
157
-              <td>
158
-                {{ getDeptName(comment.deptId) }}
159
-              </td>
160
-              <td>
161
-                {{ getUserName(comment.userId) }}
162
-              </td>
163
-              <td>
164
-                {{ comment.comment }}
165
-              </td>
166
-              <td>
167
-                <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + comment.document}`)">
168
-                  {{ getFileName(comment.document) }}
169
-                </el-link>
170
-              </td>
171
-              <!-- <td>
172
-                <span class="auditor">{{ comment.commentUser ? comment.commentUser.nickName : '' }}</span>
173
-              </td> -->
174
-              <td>
175
-                <el-date-picker v-model="comment.commentTime" type="date" value-format="yyyy-MM-dd" style="width:140px;"
176
-                  placeholder="选择日期"></el-date-picker>
177
-              </td>
178
-            </tr>
179
-          </table>
180
-        </el-form-item>
181
-      </el-form>
182
-      <div slot="footer" class="dialog-footer text-center">
183
-        <el-button type="primary" @click="submitForm">确 定</el-button>
184
-        <el-button @click="cancel">取 消</el-button>
185
-      </div>
103
+    <el-dialog :title="title" :visible.sync="open" width="60%" append-to-body>
104
+      <contract-edit :form="form" @cancel="open = false"></contract-edit>
186
     </el-dialog>
105
     </el-dialog>
187
     <!-- 查看详情 -->
106
     <!-- 查看详情 -->
188
-    <el-dialog :title="title" :visible.sync="openInfo" width="80%" append-to-body>
189
-      <!-- <contract-info :form="form"></contract-info> -->
107
+    <el-dialog :title="title" :visible.sync="openInfo" width="70%" append-to-body>
190
       <contract-form :taskForm="taskForm" :taskName="''" :flowDisabled="false"></contract-form>
108
       <contract-form :taskForm="taskForm" :taskName="''" :flowDisabled="false"></contract-form>
191
     </el-dialog>
109
     </el-dialog>
192
   </div>
110
   </div>
201
 import { todoList, getNextFlowNodeByStart } from "@/api/flowable/todo";
119
 import { todoList, getNextFlowNodeByStart } from "@/api/flowable/todo";
202
 import { Snowflake } from '@/utils/snowFlake.js'
120
 import { Snowflake } from '@/utils/snowFlake.js'
203
 import { listContractComment, addContractComment, updateContractComment } from "@/api/oa/contract/contractComment";
121
 import { listContractComment, addContractComment, updateContractComment } from "@/api/oa/contract/contractComment";
122
+import contractEdit from './components/edit.vue'
204
 export default {
123
 export default {
205
-  components: { contractInfo, ContractForm },
124
+  components: { contractInfo, ContractForm, contractEdit },
206
   name: "Contract",
125
   name: "Contract",
207
   data() {
126
   data() {
208
     return {
127
     return {
334
       getContract(contractId).then(response => {
253
       getContract(contractId).then(response => {
335
         this.form = response.data;
254
         this.form = response.data;
336
         this.open = true;
255
         this.open = true;
337
-        this.title = "修改承接合同评审_日期";
256
+        this.title = "修改承接合同评审";
338
         listContractComment({ pageNum: 1, pageSize: 100, contractId: contractId }).then(res => {
257
         listContractComment({ pageNum: 1, pageSize: 100, contractId: contractId }).then(res => {
339
           if (res.rows && res.rows.length != 0) {
258
           if (res.rows && res.rows.length != 0) {
340
             this.commentList = res.rows;
259
             this.commentList = res.rows;
456
   }
375
   }
457
 };
376
 };
458
 </script>
377
 </script>
459
-<style lang="scss" scoped>
460
-table {
461
-  /*边框*/
462
-  /* border: 1px solid black; */
463
-  text-align: center;
464
-  border-collapse: collapse;
465
-
466
-  /*设置背景颜色*/
467
-  /* background-color: #bfa; */
468
-  td {
469
-    padding: 5px;
470
-  }
471
-}
472
-</style>

+ 3
- 2
oa-ui/src/views/oa/project/index.vue 查看文件

1
 <!--
1
 <!--
2
  * @Author: ysh
2
  * @Author: ysh
3
  * @Date: 2024-02-27 14:49:15
3
  * @Date: 2024-02-27 14:49:15
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-08-20 17:09:10
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-08-30 15:34:36
6
 -->
6
 -->
7
 <template>
7
 <template>
8
   <div class="project-wrapper">
8
   <div class="project-wrapper">
252
 import { Snowflake } from '@/utils/snowFlake.js'
252
 import { Snowflake } from '@/utils/snowFlake.js'
253
 
253
 
254
 export default {
254
 export default {
255
+  name:'Project',
255
   computed: {
256
   computed: {
256
     ...mapGetters(['deptId', 'userId'])
257
     ...mapGetters(['deptId', 'userId'])
257
   },
258
   },

+ 11
- 3
oa-ui/src/views/oa/project/info.vue 查看文件

1
 <template>
1
 <template>
2
   <div class="app-container">
2
   <div class="app-container">
3
     <div class="header">
3
     <div class="header">
4
-      <el-button icon="el-icon-d-arrow-left" plain type="primary" class="back" @click="goBack">返回</el-button>
4
+      <el-button icon="el-icon-d-arrow-left" plain type="primary" class="back" @click="goBack" v-show="needReturn">返回</el-button>
5
       <el-button type="success" plain @click="printOpen = true" class="print" icon="el-icon-printer">打印任务通知单</el-button>
5
       <el-button type="success" plain @click="printOpen = true" class="print" icon="el-icon-printer">打印任务通知单</el-button>
6
       <h1>{{ '【' + project.projectNumber + '】' + project.projectName }}</h1>
6
       <h1>{{ '【' + project.projectNumber + '】' + project.projectName }}</h1>
7
       <el-button icon="el-icon-search" type="primary" class="records" @click="clickRecords">流转记录</el-button>
7
       <el-button icon="el-icon-search" type="primary" class="records" @click="clickRecords">流转记录</el-button>
138
                   <el-table-column label="单位" prop="unit" />
138
                   <el-table-column label="单位" prop="unit" />
139
                   <el-table-column label="工作量" prop="workload" />
139
                   <el-table-column label="工作量" prop="workload" />
140
                   <el-table-column label="要求完成时间" prop="deadline" />
140
                   <el-table-column label="要求完成时间" prop="deadline" />
141
+                  <el-table-column label="备注" prop="remark" />
141
                 </el-table>
142
                 </el-table>
142
               </div>
143
               </div>
143
             </el-descriptions-item>
144
             </el-descriptions-item>
499
       </div>
500
       </div>
500
     </el-dialog>
501
     </el-dialog>
501
     <el-dialog title="打印预览" :visible.sync="printOpen" width="1000px" append-to-body>
502
     <el-dialog title="打印预览" :visible.sync="printOpen" width="1000px" append-to-body>
502
-      <project-print :project="project" :workList="workList" :projectComment="projectComment" @cancel="printOpen = false"></project-print>
503
+      <project-print :project="project" :workList="workList" :projectComment="projectComment"
504
+        @cancel="printOpen = false"></project-print>
503
     </el-dialog>
505
     </el-dialog>
504
     <el-drawer title="流程图" :visible.sync="drawerOpen" direction="rtl">
506
     <el-drawer title="流程图" :visible.sync="drawerOpen" direction="rtl">
505
       <div class="app-container">
507
       <div class="app-container">
543
 
545
 
544
 export default {
546
 export default {
545
   components: { budgetInfo, SafeTab, TechnicalTab, PlanTab, SettleData, BorrowData, BudgetTab, achiData, choosePeople, flow, RowDetail, projectPrint },
547
   components: { budgetInfo, SafeTab, TechnicalTab, PlanTab, SettleData, BorrowData, BudgetTab, achiData, choosePeople, flow, RowDetail, projectPrint },
548
+  props: {
549
+    needReturn: {
550
+      type: Boolean,
551
+      default: true
552
+    }
553
+  },
546
   created() {
554
   created() {
547
     this.getUserList();
555
     this.getUserList();
548
     this.getDeviceList();
556
     this.getDeviceList();
609
           if (this.project.projectLeader == this.$store.state.user.id) {
617
           if (this.project.projectLeader == this.$store.state.user.id) {
610
             this.isProjectLeader = true;
618
             this.isProjectLeader = true;
611
           }
619
           }
612
-          let deptArr =  [];
620
+          let deptArr = [];
613
           if (this.project.undertakingDept && this.project.undertakingDept.trim() !== '') {
621
           if (this.project.undertakingDept && this.project.undertakingDept.trim() !== '') {
614
             deptArr = (this.project.undertakingDept.split(',')).map(Number)
622
             deptArr = (this.project.undertakingDept.split(',')).map(Number)
615
           }
623
           }

+ 33
- 3
oa-ui/src/views/oa/staff/index.vue 查看文件

130
             </template>
130
             </template>
131
           </el-table-column>
131
           </el-table-column>
132
           <el-table-column label="合同签订" align="center" key="contractSign" prop="contractSign" v-if="columns[7].visible"
132
           <el-table-column label="合同签订" align="center" key="contractSign" prop="contractSign" v-if="columns[7].visible"
133
-            :show-overflow-tooltip="true" sortable>
133
+            :show-overflow-tooltip="true" sortable :sort-method="sortContractSign">
134
             <template slot-scope="scope">
134
             <template slot-scope="scope">
135
               <span>{{ parseTime(scope.row.contractSign, '{y}-{m}-{d}') }}</span>
135
               <span>{{ parseTime(scope.row.contractSign, '{y}-{m}-{d}') }}</span>
136
             </template>
136
             </template>
137
           </el-table-column>
137
           </el-table-column>
138
           <el-table-column label="合同期满" align="center" key="contractExpire" prop="contractExpire"
138
           <el-table-column label="合同期满" align="center" key="contractExpire" prop="contractExpire"
139
-            v-if="columns[8].visible" :show-overflow-tooltip="true" sortable>
139
+            v-if="columns[8].visible" :show-overflow-tooltip="true" sortable :sort-method="sortContractExpire">
140
             <template slot-scope="scope">
140
             <template slot-scope="scope">
141
               <span>{{ parseTime(scope.row.contractExpire, '{y}-{m}-{d}') }}</span>
141
               <span>{{ parseTime(scope.row.contractExpire, '{y}-{m}-{d}') }}</span>
142
             </template>
142
             </template>
230
             </el-form-item>
230
             </el-form-item>
231
             <el-form-item label="入职年月" prop="entryDate">
231
             <el-form-item label="入职年月" prop="entryDate">
232
               <el-date-picker v-model="form.entryDate" type="date" placeholder="请输入入职年月" style="width:100%;"
232
               <el-date-picker v-model="form.entryDate" type="date" placeholder="请输入入职年月" style="width:100%;"
233
-                format="yyyy-MM-dd" />
233
+              value-format="yyyy-MM-dd" />
234
             </el-form-item>
234
             </el-form-item>
235
             <el-form-item label="合同签订" prop="contractSign">
235
             <el-form-item label="合同签订" prop="contractSign">
236
               <el-date-picker v-model="form.contractSign" type="date" placeholder="请输入合同签订" style="width:100%;"
236
               <el-date-picker v-model="form.contractSign" type="date" placeholder="请输入合同签订" style="width:100%;"
852
       let res = Number(a.status) - Number(b.status)
852
       let res = Number(a.status) - Number(b.status)
853
       return res
853
       return res
854
     },
854
     },
855
+    sortContractSign(a, b) {
856
+      a = a.contractSign;
857
+      b = b.contractSign;
858
+      if (!a && b) return 1; // 如果a为空且b不为空,则a排在b前面  
859
+      if (a && !b) return -1; // 如果a不为空且b为空,则b排在a前面  
860
+      if (!a && !b) return 0; // 如果a和b都为空,则它们相等,排序位置不变  
861
+      // 将字符串转换为日期对象进行比较  
862
+      const dateA = new Date(a);
863
+      const dateB = new Date(b);
864
+      // 如果日期有效,则比较日期;如果无效,则将它们视为大于有效日期  
865
+      if (isNaN(dateA.getTime())) return 1; // a不是有效日期,则b(假设为有效日期)应该排在a前面  
866
+      if (isNaN(dateB.getTime())) return -1; // b不是有效日期,则a(假设为有效日期)应该排在b前面  
867
+      // 比较两个日期  
868
+      return dateA - dateB;
869
+    },
870
+    sortContractExpire(a, b) {
871
+      a = a.contractExpire;
872
+      b = b.contractExpire;
873
+      if (!a && b) return -1; // 如果a为空且b不为空,则a排在b前面  
874
+      if (a && !b) return 1; // 如果a不为空且b为空,则b排在a前面  
875
+      if (!a && !b) return 0; // 如果a和b都为空,则它们相等,排序位置不变  
876
+      // 将字符串转换为日期对象进行比较  
877
+      const dateA = new Date(a);
878
+      const dateB = new Date(b);
879
+      // 如果日期有效,则比较日期;如果无效,则将它们视为大于有效日期  
880
+      if (isNaN(dateA.getTime())) return 1; // a不是有效日期,则b(假设为有效日期)应该排在a前面  
881
+      if (isNaN(dateB.getTime())) return -1; // b不是有效日期,则a(假设为有效日期)应该排在b前面  
882
+      // 比较两个日期  
883
+      return dateA - dateB;
884
+    },
855
     sortGraduateSchool(a, b) {
885
     sortGraduateSchool(a, b) {
856
 
886
 
857
     },
887
     },

Loading…
取消
儲存