Bladeren bron

编写在线预览

余思翰 10 maanden geleden
bovenliggende
commit
d936c3f164

+ 1103
- 975
oa-back/sql/cmc_oa(小余测试数据).sql
Diff onderdrukt omdat het te groot bestand
Bestand weergeven


+ 4
- 0
oa-ui/package.json Bestand weergeven

@@ -37,6 +37,10 @@
37 37
   },
38 38
   "dependencies": {
39 39
     "@riophae/vue-treeselect": "0.4.0",
40
+    "@vue-office/docx": "^1.6.2",
41
+    "@vue-office/excel": "^1.7.8",
42
+    "@vue-office/pdf": "^2.0.2",
43
+    "@vue/composition-api": "^1.7.2",
40 44
     "axios": "0.24.0",
41 45
     "bpmn-js": "^11.1.0",
42 46
     "bpmn-js-bpmnlint": "^0.15.0",

+ 8
- 0
oa-ui/src/assets/styles/index.scss Bestand weergeven

@@ -211,4 +211,12 @@ aside {
211 211
 .auditor {
212 212
   font-family: 'auditor';
213 213
   font-size: 20px;
214
+}
215
+.preview-btn{
216
+  width: 100px;
217
+  height: 30px;
218
+  border: none;
219
+  background-color: #409EFF;
220
+  color: #fff;
221
+  border-radius: 4px;
214 222
 }

+ 51
- 0
oa-ui/src/components/preview/index.vue Bestand weergeven

@@ -0,0 +1,51 @@
1
+<template>
2
+  <div v-loading="loading">
3
+    <vue-office-docx :src="url" v-if="fileType == 'docx'" />
4
+    <vue-office-excel :src="url" v-if="fileType == 'xlsx'" />
5
+    <vue-office-pdf :src="url" v-if="fileType == 'pdf'"></vue-office-pdf>
6
+    <div v-if="fileType == 'doc' || fileType == 'xls'">
7
+      <el-empty :image-size="200" :description="'抱歉,' + fileType + '类型文件不支持在线预览,请下载到本地查看'">
8
+        <el-link type="primary" :href="url" :underline="false" target="_blank">
9
+          <span>立即下载</span>
10
+        </el-link>
11
+      </el-empty>
12
+    </div>
13
+
14
+  </div>
15
+</template>
16
+
17
+<script>
18
+import VueOfficeDocx from "@vue-office/docx";
19
+import VueOfficeExcel from "@vue-office/excel";
20
+import VueOfficePdf from "@vue-office/pdf";
21
+export default {
22
+  components: {
23
+    VueOfficeDocx,
24
+    VueOfficeExcel,
25
+    VueOfficePdf
26
+  },
27
+  data() {
28
+    return {
29
+      loading: true,
30
+      url: "",
31
+      fileType: ""
32
+    };
33
+  },
34
+  created() {
35
+    this.loading = true;
36
+    if (this.$route.query.url) {
37
+      this.url = this.$route.query.url;
38
+      this.getFileType();
39
+    }
40
+  },
41
+  methods: {
42
+    getFileType() {
43
+      let suffix = this.url.split(".").slice(-1);
44
+      this.fileType = suffix;
45
+      this.loading = false;
46
+    }
47
+  },
48
+};
49
+</script>
50
+
51
+<style lang="scss" scoped></style>

+ 5
- 2
oa-ui/src/main.js Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-03 09:23:11
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-09 14:49:27
5
+ * @LastEditTime: 2024-06-04 15:11:48
6 6
  */
7 7
 import Vue from 'vue'
8 8
 
@@ -24,7 +24,7 @@ import './assets/icons' // icon
24 24
 import './permission' // permission control
25 25
 import { getDicts } from "@/api/system/dict/data";
26 26
 import { getConfigKey } from "@/api/system/config";
27
-import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
27
+import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree, getUserName, getFileName, reviewWord } from "@/utils/ruoyi";
28 28
 // 标题组件
29 29
 import RowTitle from '@/components/RowTitle'
30 30
 
@@ -64,6 +64,9 @@ Vue.prototype.selectDictLabels = selectDictLabels
64 64
 Vue.prototype.download = download
65 65
 Vue.prototype.handleTree = handleTree
66 66
 Vue.prototype.publicData = publicData
67
+Vue.prototype.getUserName = getUserName
68
+Vue.prototype.getFileName = getFileName
69
+Vue.prototype.reviewWord = reviewWord
67 70
 // 全局组件挂载
68 71
 Vue.component('DictTag', DictTag)
69 72
 Vue.component('Pagination', Pagination)

+ 15
- 1
oa-ui/src/router/index.js Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-01-03 09:23:11
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-31 17:03:36
5
+ * @LastEditTime: 2024-06-04 09:56:16
6 6
  */
7 7
 /*
8 8
  * @Author: ysh
@@ -321,6 +321,20 @@ export const constantRoutes = [
321 321
         name: 'projectInfo',
322 322
         meta: { title: '项目详情', icon: '' }
323 323
 
324
+      }
325
+    ]
326
+  },
327
+  {
328
+    path: '/preview',
329
+    component: Layout,
330
+    hidden: true,
331
+    children: [
332
+      {
333
+        path: '',
334
+        component: () => import('@/components/preview'),
335
+        name: 'preview',
336
+        meta: { title: '在线预览', icon: '' }
337
+
324 338
       }
325 339
     ]
326 340
   }

+ 26
- 0
oa-ui/src/utils/ruoyi.js Bestand weergeven

@@ -246,4 +246,30 @@ export function setArray(arr) {
246 246
   } else {
247 247
     return [];
248 248
   }
249
+}
250
+
251
+export function getUserName(userId) {
252
+  if (userId) {
253
+    let arr = this.$store.state.user.userList.filter(item => item.userId == userId)
254
+    if (arr.length == 1) {
255
+      let name = arr[0].nickName
256
+      return name
257
+    }
258
+  }
259
+}
260
+
261
+export function getFileName(name) {
262
+  if (name) {
263
+    let arr = name.split("/");
264
+    return arr[arr.length - 1];
265
+  }
266
+}
267
+
268
+export function reviewWord(url) {
269
+  this.$router.push({
270
+    path: '/preview',
271
+    query: {
272
+      url: url
273
+    }
274
+  })
249 275
 }

+ 2
- 3
oa-ui/src/views/flowable/form/budget/budgetInfo.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-03 16:28:09
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-31 15:35:26
5
+ * @LastEditTime: 2024-06-04 16:48:47
6 6
 -->
7 7
 <template>
8 8
   <div class="main">
@@ -135,7 +135,7 @@
135 135
       </tr>
136 136
       <tr v-if="contract.contractId">
137 137
         <td colspan="3" class="head">利润</td>
138
-        <td colspan="2" class="head">{{ profit }}</td>
138
+        <td colspan="2" class="head">{{ profit.toFixed(2) }}</td>
139 139
         <td colspan="3" class="head">合同总价约</td>
140 140
         <td colspan="1" class="head">{{ contract.contractId ? contract.amount : '' }}</td>
141 141
       </tr>
@@ -234,7 +234,6 @@ export default {
234 234
             this.getProjectWorkList();
235 235
           })
236 236
           listProjectContract({ projectId: this.taskForm.formId }).then(res => {
237
-            console.log(res);
238 237
             if (res.total == 1) {
239 238
               getContract(res.rows[0].contractId).then(response => {
240 239
                 this.contract = response.data;

+ 1
- 0
oa-ui/src/views/flowable/form/budget/components/chooseMoney.vue Bestand weergeven

@@ -242,6 +242,7 @@ export default {
242 242
       if (index >= 0 && index < arr.length) {
243 243
         arr.splice(index, 1);
244 244
       }
245
+      this.getSettleSum();
245 246
     },
246 247
     /* 获取工作类别 */
247 248
     getWorkTypeList() {

+ 92
- 70
oa-ui/src/views/flowable/form/business/contractForm.vue Bestand weergeven

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-05-10 15:31:57
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-04 09:11:08
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-06-04 16:33:59
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -14,7 +14,8 @@
14 14
           <el-row :gutter="20">
15 15
             <el-col :span="12" :xs="24">
16 16
               <el-form-item label="投标项目名称:" prop="tenderId">
17
-                <el-button type="primary" size="mini" @click="tbOpen = true" v-if="taskName == '合同拟稿'">选择投标项目</el-button>
17
+                <el-button type="primary" size="mini" @click="tbOpen = true"
18
+                  v-if="taskName == '合同拟稿'">选择投标项目</el-button>
18 19
                 <!-- <el-select v-model="form.tenderId" filterable placeholder="请选择" @change="handleSelectTender"
19 20
                   :disabled="taskName != '合同拟稿'" clearable>
20 21
                   <el-option v-for="item in tenderList" :key="item.value" :label="item.projectName"
@@ -23,15 +24,15 @@
23 24
                 </el-select> -->
24 25
                 <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="2" direction="vertical">
25 26
                   <el-descriptions-item label="投标项目名称" label-class-name="my-label" :span="2">{{ chooseTender.projectName
26
-                  }}</el-descriptions-item>
27
+                    }}</el-descriptions-item>
27 28
                   <el-descriptions-item label="项目来源" label-class-name="my-label">{{ getProjectSource(chooseTender)
28
-                  }}</el-descriptions-item>
29
+                    }}</el-descriptions-item>
29 30
                   <el-descriptions-item label="招标业主" label-class-name="my-label">{{ chooseTender.partyA
30
-                  }}</el-descriptions-item>
31
+                    }}</el-descriptions-item>
31 32
                   <el-descriptions-item label="联系人" label-class-name="my-label">{{ chooseTender.aPerson
32
-                  }}</el-descriptions-item>
33
+                    }}</el-descriptions-item>
33 34
                   <el-descriptions-item label="联系电话" label-class-name="my-label">{{ chooseTender.aPhone
34
-                  }}</el-descriptions-item>
35
+                    }}</el-descriptions-item>
35 36
                 </el-descriptions>
36 37
               </el-form-item>
37 38
 
@@ -87,11 +88,14 @@
87 88
 
88 89
           </el-row>
89 90
           <el-form-item label="合同文件" prop="contractDocument">
90
-            <FileUpload :disabled="taskName != '合同拟稿'" v-if="form.contractDocument == '' || form.contractDocument == null"
91
-              ref="contractFile" :limit="1" :filePathName="'承接合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']"
92
-              @input="getContractPath"></FileUpload>
91
+            <FileUpload :disabled="taskName != '合同拟稿'"
92
+              v-if="form.contractDocument == '' || form.contractDocument == null" ref="contractFile" :limit="1"
93
+              :filePathName="'承接合同/合同文件'" :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="getContractPath">
94
+            </FileUpload>
93 95
             <div v-if="form.contractDocument != '' && form.contractDocument != null">
94 96
               <file-item :document="form.contractDocument"></file-item>
97
+              <button class="preview-btn" type="primary" size="mini" plain
98
+                @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">在线预览</button>
95 99
             </div>
96 100
           </el-form-item>
97 101
           <el-divider></el-divider>
@@ -172,8 +176,8 @@
172 176
                   <el-input v-model="payment.paymentAmount" clearable :disabled="taskName != '合同拟稿'"></el-input>
173 177
                 </td>
174 178
                 <td>
175
-                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd" type="date"
176
-                    placeholder="选择日期" :disabled="taskName != '合同拟稿'">
179
+                  <el-date-picker style="width: 140px" v-model="payment.paymentTime" value-format="yyyy-MM-dd"
180
+                    type="date" placeholder="选择日期" :disabled="taskName != '合同拟稿'">
177 181
                   </el-date-picker>
178 182
                 </td>
179 183
                 <td>
@@ -268,6 +272,8 @@
268 272
                           <el-link :underline="false" @click="handleFileDelete(comment, 'document')"
269 273
                             type="danger">删除</el-link>
270 274
                         </div>
275
+                        <button class="preview-btn" type="primary" size="mini" plain
276
+                          @click="reviewWord(`${baseUrl}${'/profile/upload' + comment.document}`)">在线预览</button>
271 277
                       </li>
272 278
                     </transition-group>
273 279
                   </div>
@@ -372,8 +378,8 @@
372 378
           </el-row>
373 379
           <el-divider></el-divider>
374 380
           <el-form-item label="签订日期" prop="signDate">
375
-            <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期"
376
-              :disabled="taskName != '合同签订'">
381
+            <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd"
382
+              placeholder="请选择签订日期" :disabled="taskName != '合同签订'">
377 383
             </el-date-picker>
378 384
           </el-form-item>
379 385
           <el-form-item label="签订备注" prop="signRemark">
@@ -397,6 +403,8 @@
397 403
                   <div class="ele-upload-list__item-content-action" v-if="taskName != ''">
398 404
                     <el-link :underline="false" @click="handleFileDelete(form, 'signScan')" type="danger">删除</el-link>
399 405
                   </div>
406
+                  <button class="preview-btn" type="primary" size="mini" plain
407
+                    @click="reviewWord(`${baseUrl}${'/profile/upload' + form.signScan}`)">在线预览</button>
400 408
                 </li>
401 409
               </transition-group>
402 410
             </div>
@@ -956,63 +964,68 @@ export default {
956 964
             })
957 965
           } else {
958 966
             this.form.contractId = this.taskForm.formId;
967
+
959 968
             addContract(this.form).then(response => {
960
-              this.$modal.msgSuccess("新增成功");
961
-              this.open = false;
962
-              this.getList();
963
-            });
964
-            for (let work of this.workList) {
965
-              work.contractId = this.form.contractId
966
-              addContractWork(work);
967
-            }
968
-            for (let payment of this.paymentList) {
969
-              payment.contractId = this.form.contractId
970
-              addContractPayment(payment);
971
-            }
972
-            for (let projectId of this.projectContractForm.projectIds) {
973
-              addProjectContract({ projectId: projectId, contractId: this.form.contractId });
974
-            }
975
-            const params = { taskId: this.taskForm.taskId };
976
-            getNextFlowNode(params).then(res => {
977
-              if (this.commentOpen == false && this.meetingOpen == false) {
978
-                getUsersManageLeader({ userId: this.$store.getters.userId }).then(res => {
979
-                  let userId = res.data.userId;
980
-                  this.$set(this.taskForm.variables, "approval", userId);
981
-                  this.$set(this.taskForm.variables, "commentType", '0');
982
-                  complete(this.taskForm).then(response => {
983
-                    this.$modal.msgSuccess(response.msg);
984
-                    this.$emit('goBack')
985
-                  });
986
-                })
987
-              }
988
-              else if (this.commentOpen == true && this.meetingOpen == false) {
989
-                let approvalList = [];
990
-                for (let comment of this.commentList) {
991
-                  comment.contractId = this.form.contractId
992
-                  addContractComment(comment);
993
-                  approvalList.push(comment.userId)
969
+              if (response.code == 200) {
970
+                this.$modal.msgSuccess("新增成功");
971
+                this.open = false;
972
+                this.getList();
973
+                for (let work of this.workList) {
974
+                  work.contractId = this.form.contractId
975
+                  addContractWork(work);
994 976
                 }
995
-                this.$set(this.taskForm.variables, "approvalList", approvalList);
996
-                this.$set(this.taskForm.variables, "commentType", '2');
997
-                complete(this.taskForm).then(response => {
998
-                  this.$modal.msgSuccess(response.msg);
999
-                  this.$emit('goBack')
1000
-                });
1001
-              }
1002
-              else if (this.commentOpen == false && this.meetingOpen == true) {
1003
-                this.meetingForm.contractId = this.form.contractId;
1004
-                let formData = new FormData();
1005
-                let jsonForm = JSON.stringify(this.meetingForm);
1006
-                formData.append("form", jsonForm);
1007
-                addContractMeeting(formData);
1008
-                this.$set(this.taskForm.variables, "approval", this.meetingForm.hostId);
1009
-                this.$set(this.taskForm.variables, "commentType", '1');
1010
-                complete(this.taskForm).then(response => {
1011
-                  this.$modal.msgSuccess(response.msg);
1012
-                  this.$emit('goBack')
1013
-                });
977
+                for (let payment of this.paymentList) {
978
+                  payment.contractId = this.form.contractId
979
+                  addContractPayment(payment);
980
+                }
981
+                for (let projectId of this.projectContractForm.projectIds) {
982
+                  addProjectContract({ projectId: projectId, contractId: this.form.contractId });
983
+                }
984
+                const params = { taskId: this.taskForm.taskId };
985
+                getNextFlowNode(params).then(res => {
986
+                  if (this.commentOpen == false && this.meetingOpen == false) {
987
+                    getUsersManageLeader({ userId: this.$store.getters.userId }).then(res => {
988
+                      let userId = res.data.userId;
989
+                      this.$set(this.taskForm.variables, "approval", userId);
990
+                      this.$set(this.taskForm.variables, "commentType", '0');
991
+                      complete(this.taskForm).then(response => {
992
+                        this.$modal.msgSuccess(response.msg);
993
+                        this.$emit('goBack')
994
+                      });
995
+                    })
996
+                  }
997
+                  else if (this.commentOpen == true && this.meetingOpen == false) {
998
+                    let approvalList = [];
999
+                    for (let comment of this.commentList) {
1000
+                      comment.contractId = this.form.contractId
1001
+                      addContractComment(comment);
1002
+                      approvalList.push(comment.userId)
1003
+                    }
1004
+                    this.$set(this.taskForm.variables, "approvalList", approvalList);
1005
+                    this.$set(this.taskForm.variables, "commentType", '2');
1006
+                    complete(this.taskForm).then(response => {
1007
+                      this.$modal.msgSuccess(response.msg);
1008
+                      this.$emit('goBack')
1009
+                    });
1010
+                  }
1011
+                  else if (this.commentOpen == false && this.meetingOpen == true) {
1012
+                    this.meetingForm.contractId = this.form.contractId;
1013
+                    let formData = new FormData();
1014
+                    let jsonForm = JSON.stringify(this.meetingForm);
1015
+                    formData.append("form", jsonForm);
1016
+                    addContractMeeting(formData);
1017
+                    this.$set(this.taskForm.variables, "approval", this.meetingForm.hostId);
1018
+                    this.$set(this.taskForm.variables, "commentType", '1');
1019
+                    complete(this.taskForm).then(response => {
1020
+                      this.$modal.msgSuccess(response.msg);
1021
+                      this.$emit('goBack')
1022
+                    });
1023
+                  }
1024
+                })
1025
+              } else {
1026
+                this.$message.error("新增失败,请确认合同编码是否唯一");
1014 1027
               }
1015
-            })
1028
+            });
1016 1029
           }
1017 1030
         }
1018 1031
       });
@@ -1053,6 +1066,14 @@ export default {
1053 1066
       this.form.tenderId = val.tenderId
1054 1067
       this.chooseTender = val
1055 1068
       this.isSelect = true
1069
+    },
1070
+    reviewWord(url) {
1071
+      this.$router.push({
1072
+        path: '/preview',
1073
+        query: {
1074
+          url: url
1075
+        }
1076
+      })
1056 1077
     }
1057 1078
   }
1058 1079
 }
@@ -1094,4 +1115,5 @@ table {
1094 1115
 
1095 1116
 .ele-upload-list__item-content-action .el-link {
1096 1117
   margin-right: 10px;
1097
-}</style>
1118
+}
1119
+</style>

+ 3
- 3
oa-ui/src/views/flowable/form/inProgress/settleData.vue Bestand weergeven

@@ -1,8 +1,8 @@
1 1
 <!--
2 2
  * @Author: ysh
3 3
  * @Date: 2024-05-10 14:45:03
4
- * @LastEditors: wrh
5
- * @LastEditTime: 2024-06-03 15:18:06
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2024-06-04 11:33:23
6 6
 -->
7 7
 <template>
8 8
   <div class="mt20">
@@ -35,7 +35,7 @@
35 35
     </el-table>
36 36
     <el-dialog title="结算明细" :visible.sync="open" append-to-body width="65%">
37 37
       <settle-print :form="clickRow" :chooseProject="chooseProject" :workList="workList"
38
-        :settleList="summaryList"></settle-print>
38
+        :settleList="summaryList" @cancel="open = false"></settle-print>
39 39
     </el-dialog>
40 40
   </div>
41 41
 </template>

+ 1
- 1
oa-ui/src/views/flowable/form/projectProcess/addproject.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-18 11:00:04
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-03 17:15:38
5
+ * @LastEditTime: 2024-06-04 16:55:40
6 6
 -->
7 7
 <template>
8 8
   <div class="project-wrapper">

+ 3
- 1
oa-ui/src/views/flowable/form/projectProcess/arrangeProject.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-03-19 09:24:06
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-31 16:26:38
5
+ * @LastEditTime: 2024-06-04 17:38:50
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -65,6 +65,7 @@
65 65
                 <span class="el-icon-document"> {{ getFileName(form.organizeDocument) }} </span>
66 66
               </el-link>
67 67
             </div>
68
+            <!-- <button class="preview-btn" type="primary" size="mini" plain @click="reviewWord(`${baseUrl}${'/profile/upload' + form.contractDocument}`)">在线预览</button> -->
68 69
           </el-form-item>
69 70
         </el-col>
70 71
       </el-row>
@@ -146,6 +147,7 @@ export default {
146 147
     initForm() {
147 148
       getProject(this.taskForm.formId).then(res => {
148 149
         this.form = res.data;
150
+        console.log( this.form);
149 151
         if (this.form.undertakingDept != null && this.form.undertakingDept != "" && this.form.undertakingDept != undefined) {
150 152
           this.form.deptId = this.form.undertakingDeptName.split(',')
151 153
         }

+ 3
- 3
oa-ui/src/views/flowable/form/projectProcess/inProgress.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-04-15 09:35:41
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-06-03 17:12:50
5
+ * @LastEditTime: 2024-06-04 16:58:07
6 6
 -->
7 7
 <template>
8 8
   <div>
@@ -97,13 +97,13 @@
97 97
       <div class="headers">
98 98
         项目借款
99 99
         <div class="line"></div>
100
-        <borrow-data :taskForm="taskForm"></borrow-data>
100
+        <borrow-data :taskForm="taskForm" :taskName="taskName"></borrow-data>
101 101
       </div>
102 102
 
103 103
       <div class="headers">
104 104
         成果汇交
105 105
         <div class="line"></div>
106
-        <achi-data :taskForm="taskForm"></achi-data>
106
+        <achi-data :taskForm="taskForm" :taskName="taskName"></achi-data>
107 107
       </div>
108 108
       <div class="headers">
109 109
         产值结算(内部)

+ 83
- 100
oa-ui/src/views/oa/contract/index.vue Bestand weergeven

@@ -2,34 +2,21 @@
2 2
   <div class="app-container">
3 3
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
4 4
       <el-form-item label="合同编号" prop="contractNumber">
5
-        <el-input
6
-          v-model="queryParams.contractNumber"
7
-          placeholder="请输入合同编号"
8
-          clearable
9
-          @keyup.enter.native="handleQuery"
10
-        />
5
+        <el-input v-model="queryParams.contractNumber" placeholder="请输入合同编号" clearable
6
+          @keyup.enter.native="handleQuery" />
11 7
       </el-form-item>
12 8
       <el-form-item label="拟稿人" prop="drafter">
13
-        <el-input
14
-          v-model="queryParams.drafter"
15
-          placeholder="请输入拟稿人"
16
-          clearable
17
-          @keyup.enter.native="handleQuery"
18
-        />
9
+        <el-select v-model="queryParams.drafter" filterable>
10
+          <el-option v-for="item of $store.state.user.userList" :label="item.nickName" :value="item.userId"></el-option>
11
+        </el-select>
19 12
       </el-form-item>
20 13
       <el-form-item label="拟稿日期" prop="draftTime">
21
-        <el-date-picker clearable
22
-          v-model="queryParams.draftTime"
23
-          type="date"
24
-          value-format="yyyy-MM-dd"
14
+        <el-date-picker clearable v-model="queryParams.draftTime" type="date" value-format="yyyy-MM-dd"
25 15
           placeholder="请选择拟稿日期">
26 16
         </el-date-picker>
27 17
       </el-form-item>
28 18
       <el-form-item label="签订日期" prop="signDate">
29
-        <el-date-picker clearable
30
-          v-model="queryParams.signDate"
31
-          type="date"
32
-          value-format="yyyy-MM-dd"
19
+        <el-date-picker clearable v-model="queryParams.signDate" type="date" value-format="yyyy-MM-dd"
33 20
           placeholder="请选择签订日期">
34 21
         </el-date-picker>
35 22
       </el-form-item>
@@ -39,105 +26,86 @@
39 26
       </el-form-item>
40 27
     </el-form>
41 28
 
42
-    <el-row :gutter="10" class="mb8">
29
+    <!-- <el-row :gutter="10" class="mb8">
43 30
       <el-col :span="1.5">
44
-        <el-button
45
-          type="primary"
46
-          plain
47
-          icon="el-icon-plus"
48
-          size="mini"
49
-          @click="handleAdd"
50
-          v-hasPermi="['oa:contract:add']"
51
-        >新增</el-button>
31
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
32
+          v-hasPermi="['oa:contract:add']">新增</el-button>
52 33
       </el-col>
53 34
       <el-col :span="1.5">
54
-        <el-button
55
-          type="success"
56
-          plain
57
-          icon="el-icon-edit"
58
-          size="mini"
59
-          :disabled="single"
60
-          @click="handleUpdate"
61
-          v-hasPermi="['oa:contract:edit']"
62
-        >修改</el-button>
35
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
36
+          v-hasPermi="['oa:contract:edit']">修改</el-button>
63 37
       </el-col>
64 38
       <el-col :span="1.5">
65
-        <el-button
66
-          type="danger"
67
-          plain
68
-          icon="el-icon-delete"
69
-          size="mini"
70
-          :disabled="multiple"
71
-          @click="handleDelete"
72
-          v-hasPermi="['oa:contract:remove']"
73
-        >删除</el-button>
39
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
40
+          v-hasPermi="['oa:contract:remove']">删除</el-button>
74 41
       </el-col>
75 42
       <el-col :span="1.5">
76
-        <el-button
77
-          type="warning"
78
-          plain
79
-          icon="el-icon-download"
80
-          size="mini"
81
-          @click="handleExport"
82
-          v-hasPermi="['oa:contract:export']"
83
-        >导出</el-button>
43
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
44
+          v-hasPermi="['oa:contract:export']">导出</el-button>
84 45
       </el-col>
85 46
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
86
-    </el-row>
47
+    </el-row> -->
87 48
 
88 49
     <el-table v-loading="loading" :data="contractList" @selection-change="handleSelectionChange">
89 50
       <el-table-column type="selection" width="55" align="center" />
90
-      <el-table-column label="合同id" align="center" prop="contractId" />
51
+      <!-- <el-table-column label="合同id" align="center" prop="contractId" /> -->
91 52
       <el-table-column label="合同编号" align="center" prop="contractNumber" />
92 53
       <el-table-column label="合同金额" align="center" prop="amount" />
93 54
       <el-table-column label="履约保证金" align="center" prop="deposit" />
94
-      <el-table-column label="合同文件" align="center" prop="contractDocument" />
95
-      <el-table-column label="拟稿人" align="center" prop="drafter" />
55
+      <el-table-column label="合同文件" align="center" prop="contractDocument" show-overflow-tooltip>
56
+        <template slot-scope="scope">
57
+          <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.contractDocument}`)">
58
+            {{ getFileName(scope.row.contractDocument) }}
59
+          </el-link>
60
+        </template>
61
+      </el-table-column>
62
+      <el-table-column label="拟稿人" align="center" prop="drafter">
63
+        <template slot-scope="scope">
64
+          {{ getUserName(scope.row.drafter) }}
65
+        </template>
66
+      </el-table-column>
96 67
       <el-table-column label="拟稿日期" align="center" prop="draftTime" width="180">
97 68
         <template slot-scope="scope">
98 69
           <span>{{ parseTime(scope.row.draftTime, '{y}-{m}-{d}') }}</span>
99 70
         </template>
100 71
       </el-table-column>
101
-      <el-table-column label="合同备注" align="center" prop="remark" />
102 72
       <el-table-column label="签订日期" align="center" prop="signDate" width="180">
103 73
         <template slot-scope="scope">
104 74
           <span>{{ parseTime(scope.row.signDate, '{y}-{m}-{d}') }}</span>
105 75
         </template>
106 76
       </el-table-column>
107 77
       <el-table-column label="签订备注" align="center" prop="signRemark" />
108
-      <el-table-column label="签订扫描件" align="center" prop="signScan" />
109
-      <el-table-column label="评审方式" align="center" prop="commentType" />
78
+      <el-table-column label="签订扫描件" align="center" prop="signScan" show-overflow-tooltip>
79
+        <template slot-scope="scope">
80
+          <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + scope.row.signScan}`)">
81
+            {{ getFileName(scope.row.signScan) }}
82
+          </el-link>
83
+        </template>
84
+      </el-table-column>
85
+      <el-table-column label="评审方式" align="center" prop="commentType">
86
+        <template slot-scope="scope">
87
+          {{ getCommentType(scope.row.commentType) }}
88
+        </template>
89
+      </el-table-column>
90
+      <el-table-column label="合同备注" align="center" prop="remark" />
110 91
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
111 92
         <template slot-scope="scope">
112
-          <el-button
113
-            size="mini"
114
-            type="text"
115
-            icon="el-icon-edit"
116
-            @click="handleUpdate(scope.row)"
117
-            v-hasPermi="['oa:contract:edit']"
118
-          >修改</el-button>
119
-          <el-button
120
-            size="mini"
121
-            type="text"
122
-            icon="el-icon-delete"
123
-            @click="handleDelete(scope.row)"
124
-            v-hasPermi="['oa:contract:remove']"
125
-          >删除</el-button>
93
+          <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
94
+            v-hasPermi="['oa:contract:query']">查看</el-button>
95
+          <!-- <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
96
+            v-hasPermi="['oa:contract:edit']">修改</el-button>
97
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
98
+            v-hasPermi="['oa:contract:remove']">删除</el-button> -->
126 99
         </template>
127 100
       </el-table-column>
128 101
     </el-table>
129
-    
130
-    <pagination
131
-      v-show="total>0"
132
-      :total="total"
133
-      :page.sync="queryParams.pageNum"
134
-      :limit.sync="queryParams.pageSize"
135
-      @pagination="getList"
136
-    />
102
+
103
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
104
+      @pagination="getList" />
137 105
 
138 106
     <!-- 添加或修改cmc合同评审对话框 -->
139
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
140
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
107
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
108
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
141 109
         <el-form-item label="合同编号" prop="contractNumber">
142 110
           <el-input v-model="form.contractNumber" placeholder="请输入合同编号" />
143 111
         </el-form-item>
@@ -154,10 +122,7 @@
154 122
           <el-input v-model="form.drafter" placeholder="请输入拟稿人" />
155 123
         </el-form-item>
156 124
         <el-form-item label="拟稿日期" prop="draftTime">
157
-          <el-date-picker clearable
158
-            v-model="form.draftTime"
159
-            type="date"
160
-            value-format="yyyy-MM-dd"
125
+          <el-date-picker clearable v-model="form.draftTime" type="date" value-format="yyyy-MM-dd"
161 126
             placeholder="请选择拟稿日期">
162 127
           </el-date-picker>
163 128
         </el-form-item>
@@ -165,11 +130,7 @@
165 130
           <el-input v-model="form.remark" placeholder="请输入合同备注" />
166 131
         </el-form-item>
167 132
         <el-form-item label="签订日期" prop="signDate">
168
-          <el-date-picker clearable
169
-            v-model="form.signDate"
170
-            type="date"
171
-            value-format="yyyy-MM-dd"
172
-            placeholder="请选择签订日期">
133
+          <el-date-picker clearable v-model="form.signDate" type="date" value-format="yyyy-MM-dd" placeholder="请选择签订日期">
173 134
           </el-date-picker>
174 135
         </el-form-item>
175 136
         <el-form-item label="签订备注" prop="signRemark">
@@ -184,16 +145,20 @@
184 145
         <el-button @click="cancel">取 消</el-button>
185 146
       </div>
186 147
     </el-dialog>
148
+    <!-- 查看详情 -->
149
+    <el-dialog :title="title" :visible.sync="openInfo" width="600px" append-to-body>
150
+
151
+    </el-dialog>
187 152
   </div>
188 153
 </template>
189 154
 
190 155
 <script>
191 156
 import { listContract, getContract, delContract, addContract, updateContract } from "@/api/oa/contract/contract";
192
-
193 157
 export default {
194 158
   name: "Contract",
195 159
   data() {
196 160
     return {
161
+      baseUrl: process.env.VUE_APP_BASE_API,
197 162
       // 遮罩层
198 163
       loading: true,
199 164
       // 选中数组
@@ -212,6 +177,7 @@ export default {
212 177
       title: "",
213 178
       // 是否显示弹出层
214 179
       open: false,
180
+      openInfo:false,
215 181
       // 查询参数
216 182
       queryParams: {
217 183
         pageNum: 1,
@@ -231,7 +197,8 @@ export default {
231 197
       form: {},
232 198
       // 表单校验
233 199
       rules: {
234
-      }
200
+      },
201
+      project:{}
235 202
     };
236 203
   },
237 204
   created() {
@@ -252,6 +219,17 @@ export default {
252 219
       this.open = false;
253 220
       this.reset();
254 221
     },
222
+    getCommentType(row){
223
+      let name = '';
224
+      if(row == '0'){
225
+        name = '无须评审'
226
+      }else if(row == '1'){
227
+        name = '会议评审'
228
+      }else{
229
+        name = '线上评审'
230
+      }
231
+      return name
232
+    },
255 233
     // 表单重置
256 234
     reset() {
257 235
       this.form = {
@@ -283,7 +261,7 @@ export default {
283 261
     // 多选框选中数据
284 262
     handleSelectionChange(selection) {
285 263
       this.ids = selection.map(item => item.contractId)
286
-      this.single = selection.length!==1
264
+      this.single = selection.length !== 1
287 265
       this.multiple = !selection.length
288 266
     },
289 267
     /** 新增按钮操作 */
@@ -292,6 +270,11 @@ export default {
292 270
       this.open = true;
293 271
       this.title = "添加cmc合同评审";
294 272
     },
273
+    handleView(row){
274
+      this.openInfo = true;
275
+      this.title = "合同详情";
276
+      this.form = row
277
+    },
295 278
     /** 修改按钮操作 */
296 279
     handleUpdate(row) {
297 280
       this.reset();
@@ -325,12 +308,12 @@ export default {
325 308
     /** 删除按钮操作 */
326 309
     handleDelete(row) {
327 310
       const contractIds = row.contractId || this.ids;
328
-      this.$modal.confirm('是否确认删除cmc合同评审编号为"' + contractIds + '"的数据项?').then(function() {
311
+      this.$modal.confirm('是否确认删除cmc合同评审编号为"' + contractIds + '"的数据项?').then(function () {
329 312
         return delContract(contractIds);
330 313
       }).then(() => {
331 314
         this.getList();
332 315
         this.$modal.msgSuccess("删除成功");
333
-      }).catch(() => {});
316
+      }).catch(() => { });
334 317
     },
335 318
     /** 导出按钮操作 */
336 319
     handleExport() {

+ 2
- 2
oa-ui/src/views/oa/project/index.vue Bestand weergeven

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-02-27 14:49:15
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-05-30 18:13:12
5
+ * @LastEditTime: 2024-06-04 15:49:07
6 6
 -->
7 7
 <template>
8 8
   <div class="project-wrapper">
@@ -295,7 +295,7 @@ export default {
295 295
     // 查询项目列表
296 296
     getList() {
297 297
       this.loading = true
298
-      if(this.deptId > 104){
298
+      if(this.deptId > 107){
299 299
         this.queryParams.undertakingDept = this.deptId
300 300
       }
301 301
       listProject(this.queryParams).then(response => {

+ 11
- 0
oa-ui/src/views/oa/project/info.vue Bestand weergeven

@@ -116,6 +116,8 @@
116 116
                 target="_blank">
117 117
                 <span class="el-icon-document"> {{ getFileName(project.taskDocument) }} </span>
118 118
               </el-link>
119
+              <el-button class="ml20" type="primary" size="mini" plain @click="reviewWord(`${baseUrl}${'/profile/upload' + project.taskDocument}`)">在线预览</el-button>
120
+              <!-- <vue-office-docx style="width:80%;height:100vh" :src="`${baseUrl}${'/profile/upload' + project.taskDocument}`" @rendered="rendered" /> -->
119 121
             </el-descriptions-item>
120 122
             <el-descriptions-item :span="3">
121 123
               <template slot="label">
@@ -202,6 +204,7 @@
202 204
                 :underline="false" target="_blank">
203 205
                 <span class="el-icon-document"> {{ getFileName(project.organizeDocument) }} </span>
204 206
               </el-link>
207
+              <el-button class="ml20" type="primary" size="mini" plain @click="reviewWord(`${baseUrl}${'/profile/upload' + project.organizeDocument}`)">在线预览</el-button>
205 208
             </el-descriptions-item>
206 209
           </el-descriptions>
207 210
         </div>
@@ -579,6 +582,14 @@ export default {
579 582
       this.$tab.closeOpenPage(obj);
580 583
       this.$router.push({ path: '/project' });
581 584
     },
585
+    reviewWord(url){
586
+      this.$router.push({
587
+        path:'/preview',
588
+        query:{
589
+          url:url
590
+        }
591
+      })
592
+    }
582 593
   },
583 594
 }
584 595
 </script>

+ 1
- 1
oa-ui/src/views/oa/tender/index.vue Bestand weergeven

@@ -89,7 +89,7 @@
89 89
       <!-- <el-table-column label="标书检查人" align="center" prop="tenderChecker" /> -->
90 90
       <!-- <el-table-column label="标书打印装订人" align="center" prop="tenderPrinter" /> -->
91 91
       <!-- <el-table-column label="标书文件" align="center" prop="tenderDocument" /> -->
92
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
92
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="120px">
93 93
         <template slot-scope="scope">
94 94
           <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)"
95 95
             v-hasPermi="['oa:tender:query']">查看</el-button>

Laden…
Annuleren
Opslaan