소스 검색

修改成果归档新增成果

余思翰 3 달 전
부모
커밋
7fdca79d80

+ 1
- 1
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/FilesAchievementController.java 파일 보기

@@ -236,7 +236,7 @@ public class FilesAchievementController extends BaseController
236 236
         else
237 237
         {
238 238
             filesAchievement.setKmlUrl(null);
239
-            return true;
239
+            return false;
240 240
         }
241 241
     }
242 242
 

+ 2
- 2
oa-back/ruoyi-admin/src/main/java/com/ruoyi/web/controller/file/FilesProjectController.java 파일 보기

@@ -170,7 +170,7 @@ public class FilesProjectController extends BaseController {
170 170
         else
171 171
         {
172 172
             cmcProject.setProjectKml(null);
173
-            return true;
173
+            return false;
174 174
         }
175 175
     }
176 176
 
@@ -195,7 +195,7 @@ public class FilesProjectController extends BaseController {
195 195
         else
196 196
         {
197 197
             cmcProject.setProjectCp(null);
198
-            return true;
198
+            return false;
199 199
         }
200 200
     }
201 201
 

+ 259
- 0
oa-ui/src/views/file/components/addAchi.vue 파일 보기

@@ -0,0 +1,259 @@
1
+<template>
2
+  <div>
3
+    <el-form :model="form" ref="achiRef" label-width="110px" :rules="rules">
4
+      <el-row :gutter="10">
5
+        <el-col :span="15">
6
+          <el-form-item label="项目编号" prop="projectNumber">
7
+            <el-input v-model="form.projectNumber" disabled placeholder="请输入项目编号" />
8
+          </el-form-item>
9
+          <el-form-item label="项目名称" prop="projectName">
10
+            <el-input v-model="form.projectName" disabled placeholder="请输入项目名称" />
11
+          </el-form-item>
12
+        </el-col>
13
+        <el-col :span="3" v-if="!isFlow">
14
+          <el-button type="primary" size="mini" @click="openProject = true">选择项目</el-button>
15
+        </el-col>
16
+        <el-col :span="6">
17
+          <el-form-item label="数据年份" prop="dataYear">
18
+            <el-input v-model="form.dataYear" placeholder="请输入数据年份" />
19
+          </el-form-item>
20
+        </el-col>
21
+      </el-row>
22
+      <el-row :gutter="20">
23
+        <el-col :span="12">
24
+          <el-form-item label="成果名称" prop="achiName">
25
+            <el-input v-model="form.achiName" placeholder="请输入成果名称" />
26
+          </el-form-item>
27
+        </el-col>
28
+        <el-col :span="12">
29
+          <el-form-item label="成果类型" prop="resultType">
30
+            <el-row :gutter="20">
31
+              <el-col :span="22">
32
+                <el-select v-model="form.resultType" placeholder="请选择成果类型" :style="{ width: '100%' }" clearable>
33
+                  <el-option v-for="dict in dict.type.cmc_achi_type" :key="dict.value" :label="dict.label"
34
+                    :value="dict.value">
35
+                  </el-option>
36
+                </el-select>
37
+              </el-col>
38
+            </el-row>
39
+          </el-form-item>
40
+        </el-col>
41
+      </el-row>
42
+      <el-row :gutter="20">
43
+        <el-col :span="12">
44
+          <el-form-item label="比例尺或等级" prop="scaleGrade">
45
+            <el-select v-model="form.scaleGrade" placeholder="请选择比例尺或等级" :style="{ width: '100%' }" clearable>
46
+              <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
47
+                :value="dict.value">
48
+              </el-option>
49
+            </el-select>
50
+          </el-form-item>
51
+        </el-col>
52
+        <el-col :span="12">
53
+          <el-form-item label="文件类型" prop="fileType">
54
+            <el-input v-model="form.fileType" placeholder="请输入文件类型" />
55
+          </el-form-item>
56
+        </el-col>
57
+      </el-row>
58
+      <el-row :gutter="20">
59
+        <el-col :span="12">
60
+          <el-form-item label="工作量" prop="workLoad">
61
+            <el-input v-model="form.workLoad" placeholder="请输入工作量" />
62
+          </el-form-item>
63
+        </el-col>
64
+        <el-col :span="12">
65
+          <el-form-item label="单位" prop="unit">
66
+            <el-input v-model="form.unit" placeholder="请输入单位" />
67
+          </el-form-item>
68
+        </el-col>
69
+      </el-row>
70
+      <el-row :gutter="20">
71
+        <el-col :span="12">
72
+          <el-form-item label="数据来源" prop="dataSource" style="width:100%;">
73
+            <el-input v-model="form.dataSource" placeholder="请输入数据来源" />
74
+          </el-form-item>
75
+        </el-col>
76
+        <el-col :span="12">
77
+          <el-form-item label="数据类型" prop="dataType">
78
+            <el-select v-model="form.dataType" placeholder="请选择数据类型" style="width:100%;">
79
+              <el-option label="原始数据" value="原始数据" />
80
+              <el-option label="成果数据" value="成果数据" />
81
+              <el-option label="过程数据" value="过程数据" />
82
+            </el-select>
83
+          </el-form-item>
84
+        </el-col>
85
+      </el-row>
86
+      <el-row :gutter="20">
87
+        <el-col :span="12">
88
+          <el-form-item label="存储地址" prop="storageAddress">
89
+            <el-select v-model="form.storageAddress" reserve-keyword remote :remote-method="remoteMethod"
90
+              placeholder="请选择" filterable allow-create clearable style="width:100%;">
91
+              <el-option v-for="item, index in storageList" :key="index" :label="item.storageAddress"
92
+                :value="item.storageAddress" />
93
+            </el-select>
94
+          </el-form-item>
95
+        </el-col>
96
+        <el-col :span="12">
97
+          <el-form-item label="KML地址" prop="kmlUrl">
98
+            <div style="display: flex;">
99
+              <div style="width:90%;">
100
+                <el-input v-model="kmlFileName" placeholder="请选择Kml文件" disabled />
101
+              </div>
102
+              <div>
103
+                <el-upload ref="uploadAchiKml" class="upload-demo" action="" :auto-upload="false"
104
+                  :on-success="successUploadAchiKml" accept=".kml" :on-change="changeUploadKml" :show-file-list="false">
105
+                  <el-button type="primary" icon="el-icon-plus"></el-button>
106
+                </el-upload>
107
+              </div>
108
+            </div>
109
+
110
+          </el-form-item>
111
+        </el-col>
112
+      </el-row>
113
+      <el-row :gutter="20">
114
+        <el-col :span="12">
115
+          <el-form-item label="生产日期" prop="productionTime">
116
+            <el-date-picker v-model="form.productionTime" type="month" placeholder="选择日期" format="yyyy-MM"
117
+              style="width:100%;" value-format="yyyy-MM" />
118
+          </el-form-item>
119
+        </el-col>
120
+        <el-col :span="12">
121
+          <el-form-item label="提交时间" prop="submitDate">
122
+            <el-date-picker v-model="form.submitDate" type="date" placeholder="选择日期" format="yyyy-MM-dd"
123
+              style="width:100%;" value-format="yyyy-MM-dd" />
124
+          </el-form-item>
125
+        </el-col>
126
+      </el-row>
127
+      <el-row :gutter="20">
128
+        <el-col :span="24">
129
+          <el-form-item label="备注" prop="remark">
130
+            <el-input v-model="form.remark" placeholder="请输入备注" type="textarea" :max="250" />
131
+          </el-form-item>
132
+        </el-col>
133
+      </el-row>
134
+    </el-form>
135
+    <div class="text-center mt20">
136
+      <el-button type="primary" @click="submitForm">确 定</el-button>
137
+      <el-button @click="$emit('cancel')">取 消</el-button>
138
+    </div>
139
+    <el-dialog title="选择项目" :visible.sync="openProject" width="70%" append-to-body>
140
+      <project-choose @chooseProject="confirmProject"></project-choose>
141
+    </el-dialog>
142
+  </div>
143
+</template>
144
+
145
+<script>
146
+import { listAchievement, uploadAchievementSheet, addAchievement, updateAchievement, delAchievement } from "@/api/file/achievement";
147
+import { listStorage } from "@/api/file/storage";
148
+import projectChoose from '@/views/flowable/form/components/chooseProject.vue';
149
+
150
+export default {
151
+  components: {
152
+    projectChoose
153
+  },
154
+  dicts: ['cmc_achi_type', 'cmc_scale_grade'],
155
+  props: {
156
+    project: {
157
+      type: Object,
158
+    },
159
+    isFlow: {
160
+      type: Boolean,
161
+      default: false,
162
+    },
163
+  },
164
+  watch: {
165
+    project: {
166
+      handler(newVal) {
167
+        if (this.isFlow) {
168
+          this.$set(this.form, 'projectId', newVal.projectId);
169
+          this.$set(this.form, 'projectNumber', newVal.projectNumber);
170
+          this.$set(this.form, 'projectName', newVal.projectName);
171
+          this.$set(this.form, 'dataYear', newVal.projectNumber.slice(0, 4));
172
+        }
173
+      },
174
+      immediate: true, // 立即生效
175
+      deep: true  //监听对象或数组的时候,要用到深度监听
176
+    },
177
+  },
178
+  data() {
179
+    return {
180
+      form: {},
181
+      submitFormData: {},
182
+      rules: {
183
+        projectNumber: [{ required: true, message: "项目编号不能为空", trigger: "blur" }],
184
+        achiName: [{ required: true, message: "成果名称不能为空", trigger: "blur" }],
185
+        dataYear: [{ required: true, message: "数据年份不能为空", trigger: "blur" }],
186
+        resultType: [{ required: true, message: "数据类型不能为空", trigger: "blur" }],
187
+        scaleGrade: [{ required: true, message: "比例尺或等级不能为空", trigger: "blur" }],
188
+      },
189
+      kmlfile: undefined,
190
+      kmlFileName: '',
191
+      storageList: [],
192
+      openProject: false,
193
+    }
194
+  },
195
+  created() {
196
+    this.getStorageList();
197
+  },
198
+  methods: {
199
+    submitForm() {
200
+      this.submitFormData = new FormData();
201
+      this.submitFormData.append('uploadKmlFile', this.kmlfile);
202
+      this.$refs["achiRef"].validate(valid => {
203
+        if (valid) {
204
+          for (let i in this.form) {
205
+            this.submitFormData.append(i, this.form[i] == null ? "" : this.form[i]);
206
+          }
207
+          addAchievement(this.submitFormData).then(response => {
208
+            this.$modal.msgSuccess("新增成功");
209
+            this.$emit('getList');
210
+            this.$emit('cancel');
211
+          });
212
+        } else {
213
+          this.$modal.msgError("请完善必填项");
214
+        }
215
+      })
216
+    },
217
+    /* kml文件上传成功处理 */
218
+    successUploadAchiKml(response, file, fileList) {
219
+      this.$refs["uploadAchiKml"].clearFiles();
220
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
221
+    },
222
+    /* kml文件改变时 */
223
+    changeUploadKml(file, fileList) {
224
+      if (fileList.length > 1) {
225
+        fileList.splice(0, 1);
226
+      }
227
+      this.kmlFileName = file.name;
228
+      this.kmlfile = file.raw;
229
+    },
230
+    /* 获取存储地址列表 */
231
+    getStorageList() {
232
+      listStorage({ pageNum: 1, pageSize: 100 }).then(response => {
233
+        this.storageList = response.rows;
234
+      })
235
+    },
236
+    remoteMethod(val) {
237
+      const storageAddress = val
238
+      listStorage({ pageNum: 1, pageSize: 100, storageAddress }).then(response => {
239
+        this.storageList = response.rows;
240
+      })
241
+    },
242
+    confirmProject(val) {
243
+      if (val.length > 1) {
244
+        this.$message.error('请选择一个项目');
245
+        return
246
+      } else if (val.length == 1) {
247
+        this.$set(this.form, 'projectNumber', val[0].projectNumber)
248
+        this.$set(this.form, 'projectName', val[0].projectName)
249
+        this.form.projectId = val[0].projectId
250
+        this.$refs.achiRef.validateField('projectNumber')
251
+        this.form.dataYear = val[0].projectNumber.substring(0, 4)
252
+      }
253
+      this.openProject = false
254
+    },
255
+  },
256
+}
257
+</script>
258
+
259
+<style lang="scss" scoped></style>

+ 234
- 0
oa-ui/src/views/file/components/modifyAchi.vue 파일 보기

@@ -0,0 +1,234 @@
1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2025-01-10 13:41:01
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-01-10 14:54:37
6
+-->
7
+<template>
8
+  <div>
9
+    <el-form :model="modifyForm" ref="achiModifyRef" label-width="110px" :rules="modifyRules">
10
+      <el-row :gutter="20">
11
+        <el-col :span="12">
12
+          <el-form-item label="项目编号">
13
+            <el-input :disabled="true" v-model="modifyForm.projectNumber" placeholder="请输入项目编号" />
14
+          </el-form-item>
15
+        </el-col>
16
+        <el-col :span="12">
17
+          <el-form-item label="成果名称" prop="achiName">
18
+            <el-input v-model="modifyForm.achiName" placeholder="请输入成果名称" />
19
+          </el-form-item>
20
+        </el-col>
21
+      </el-row>
22
+      <el-row :gutter="20">
23
+        <el-col :span="12">
24
+          <el-form-item label="数据年份" prop="dataYear">
25
+            <el-input v-model="modifyForm.dataYear" placeholder="请输入数据年份" />
26
+          </el-form-item>
27
+        </el-col>
28
+        <el-col :span="12">
29
+          <el-form-item label="成果类型" prop="resultType">
30
+            <el-row :gutter="20">
31
+              <el-col :span="22">
32
+                <el-select v-model="modifyForm.resultType" placeholder="请选择成果类型" :style="{ width: '100%' }" clearable>
33
+                  <el-option v-for="dict in dict.type.cmc_achi_type" :key="dict.value" :label="dict.label"
34
+                    :value="dict.value">
35
+                  </el-option>
36
+                </el-select>
37
+              </el-col>
38
+            </el-row>
39
+          </el-form-item>
40
+        </el-col>
41
+      </el-row>
42
+      <el-row :gutter="20">
43
+        <el-col :span="12">
44
+          <el-form-item label="比例尺或等级" prop="scaleGrade">
45
+            <el-select v-model="modifyForm.scaleGrade" placeholder="请选择比例尺或等级" :style="{ width: '100%' }" clearable>
46
+              <el-option v-for="dict in dict.type.cmc_scale_grade" :key="dict.value" :label="dict.label"
47
+                :value="dict.value">
48
+              </el-option>
49
+            </el-select>
50
+          </el-form-item>
51
+        </el-col>
52
+        <el-col :span="12">
53
+          <el-form-item label="文件类型" prop="fileType">
54
+            <el-input v-model="modifyForm.fileType" placeholder="请输入文件类型" />
55
+          </el-form-item>
56
+        </el-col>
57
+      </el-row>
58
+      <el-row :gutter="20">
59
+        <el-col :span="12">
60
+          <el-form-item label="工作量" prop="workLoad">
61
+            <el-input v-model="modifyForm.workLoad" placeholder="请输入工作量" />
62
+          </el-form-item>
63
+        </el-col>
64
+        <el-col :span="12">
65
+          <el-form-item label="单位" prop="unit">
66
+            <el-input v-model="modifyForm.unit" placeholder="请输入单位" />
67
+          </el-form-item>
68
+        </el-col>
69
+      </el-row>
70
+      <el-row :gutter="20">
71
+        <el-col :span="12">
72
+          <el-form-item label="数据来源" prop="dataSource">
73
+            <el-input v-model="modifyForm.dataSource" placeholder="请输入数据来源" />
74
+          </el-form-item>
75
+        </el-col>
76
+        <el-col :span="12">
77
+          <el-form-item label="数据类型" prop="dataType">
78
+            <el-select v-model="modifyForm.dataType" placeholder="请选择数据类型">
79
+              <el-option label="原始数据" value="原始数据" />
80
+              <el-option label="成果数据" value="成果数据" />
81
+              <el-option label="过程数据" value="过程数据" />
82
+            </el-select>
83
+          </el-form-item>
84
+        </el-col>
85
+      </el-row>
86
+      <el-row :gutter="20">
87
+        <el-col :span="12">
88
+          <el-form-item label="存储地址" prop="storageAddress">
89
+            <el-select v-model="modifyForm.storageAddress" reserve-keyword remote :remote-method="remoteMethod"
90
+              placeholder="请选择" filterable allow-create clearable style="width:100%;">
91
+              <el-option v-for="item, index in storageList" :key="index" :label="item.storageAddress"
92
+                :value="item.storageAddress" />
93
+            </el-select>
94
+          </el-form-item>
95
+        </el-col>
96
+        <el-col :span="12">
97
+          <el-form-item label="KML地址" prop="kmlUrl">
98
+            <div style="display: flex;">
99
+              <div>
100
+                <el-input v-model="kmlFileName" placeholder="请选择Kml文件" disabled />
101
+              </div>
102
+              <div>
103
+                <el-upload ref="uploadAchiKml" class="upload-demo" action="" :auto-upload="false"
104
+                  :on-success="successUploadAchiKml" accept=".kml" :on-change="changeUploadKml" :show-file-list="false">
105
+                  <el-button type="primary" icon="el-icon-plus"></el-button>
106
+                </el-upload>
107
+              </div>
108
+            </div>
109
+          </el-form-item>
110
+        </el-col>
111
+      </el-row>
112
+      <el-row :gutter="20">
113
+        <el-col :span="12">
114
+          <el-form-item label="生产日期" prop="productionTime">
115
+            <el-date-picker v-model="modifyForm.productionTime" type="month" placeholder="选择日期" format="yyyy-MM"
116
+              style="width:100%;" value-format="yyyy-MM" />
117
+          </el-form-item>
118
+        </el-col>
119
+        <el-col :span="12">
120
+          <el-form-item label="提交时间" prop="submitDate">
121
+            <el-date-picker v-model="modifyForm.submitDate" type="date" placeholder="选择日期" format="yyyy-MM-dd"
122
+              style="width:100%;" value-format="yyyy-MM-dd" />
123
+          </el-form-item>
124
+        </el-col>
125
+      </el-row>
126
+      <el-row :gutter="20">
127
+        <el-col :span="24">
128
+          <el-form-item label="备注" prop="remark">
129
+            <el-input v-model="modifyForm.remark" placeholder="请输入备注" type="textarea" :max="250" />
130
+          </el-form-item>
131
+        </el-col>
132
+      </el-row>
133
+    </el-form>
134
+    <div class="text-center mt20">
135
+      <el-button type="primary" @click="submitModifyForm">确 定</el-button>
136
+      <el-button @click="$emit('cancel')">取 消</el-button>
137
+    </div>
138
+  </div>
139
+</template>
140
+
141
+<script>
142
+import { listAchievement, uploadAchievementSheet, addAchievement, updateAchievement, delAchievement } from "@/api/file/achievement";
143
+import { listStorage } from "@/api/file/storage";
144
+export default {
145
+  dicts: ['cmc_achi_type', 'cmc_scale_grade'],
146
+  props: {
147
+    modifyForm: {
148
+      type: Object,
149
+    },
150
+    isFlow: {
151
+      type: Boolean,
152
+      default: false,
153
+    }
154
+  },
155
+  watch: {
156
+    modifyForm: {
157
+      handler(newVal) {
158
+        this.kmlFileName = ""
159
+        if (newVal.kmlUrl) {
160
+          this.kmlFileName = newVal.kmlUrl.substring(newVal.kmlUrl.lastIndexOf('/') + 1);
161
+        }
162
+      },
163
+      immediate: true, // 立即生效
164
+      deep: true  //监听对象或数组的时候,要用到深度监听
165
+    }
166
+  },
167
+  data() {
168
+    return {
169
+      kmlFileName: '',
170
+      kmlfile: undefined,
171
+      storageList: [],
172
+      modifyRules: {
173
+        projectId: [{ required: true, message: "项目编号不能为空", trigger: "change" }],
174
+        achiName: [{ required: true, message: "成果名称不能为空", trigger: "blur" }],
175
+        dataYear: [{ required: true, message: "数据年份不能为空", trigger: "blur" }],
176
+        resultType: [{ required: true, message: "数据类型不能为空", trigger: "change" }],
177
+        scaleGrade: [{ required: true, message: "比例尺或等级不能为空", trigger: "change" }],
178
+      }
179
+    }
180
+  },
181
+  created() {
182
+    this.getStorageList();
183
+  },
184
+  methods: {
185
+
186
+    /* kml文件改变时 */
187
+    changeUploadKml(file, fileList) {
188
+      if (fileList.length > 1) {
189
+        fileList.splice(0, 1);
190
+      }
191
+      this.kmlFileName = file.name;
192
+      this.kmlfile = file.raw;
193
+    },
194
+    /* kml文件上传成功处理 */
195
+    successUploadAchiKml(response, file, fileList) {
196
+      this.$refs["uploadAchiKml"].clearFiles();
197
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
198
+    },
199
+    /* 修改确定按钮 */
200
+    submitModifyForm() {
201
+      this.submitFormData = new FormData();
202
+      this.submitFormData.append('uploadKmlFile', this.kmlfile);
203
+      this.$refs["achiModifyRef"].validate(valid => {
204
+        delete this.modifyForm.params;
205
+        for (let i in this.modifyForm) {
206
+          this.submitFormData.append(i, this.modifyForm[i] == null ? "" : this.modifyForm[i]);
207
+        }
208
+        this.modifyForm.resultType = this.modifyForm.resultType.toString();
209
+        this.modifyForm.scaleGrade = this.modifyForm.scaleGrade.toString();
210
+        updateAchievement(this.submitFormData).then(response => {
211
+          this.$modal.msgSuccess("修改成功");
212
+          this.$emit('getList');
213
+          this.$emit('cancel');
214
+        });
215
+      })
216
+
217
+    },
218
+    /* 获取存储地址列表 */
219
+    getStorageList() {
220
+      listStorage({ pageNum: 1, pageSize: 100 }).then(response => {
221
+        this.storageList = response.rows;
222
+      })
223
+    },
224
+    remoteMethod(val) {
225
+      const storageAddress = val
226
+      listStorage({ pageNum: 1, pageSize: 100, storageAddress }).then(response => {
227
+        this.storageList = response.rows;
228
+      })
229
+    },
230
+  }
231
+}
232
+</script>
233
+
234
+<style lang="scss" scoped></style>

+ 22
- 22
oa-ui/src/views/file/filesProject/achievement.vue 파일 보기

@@ -3,8 +3,8 @@
3 3
  * @version: 
4 4
  * @Author: ysh
5 5
  * @Date: 2022-09-08 17:16:12
6
- * @LastEditors: wrh
7
- * @LastEditTime: 2024-12-30 17:06:44
6
+ * @LastEditors: Please set LastEditors
7
+ * @LastEditTime: 2025-01-10 15:13:48
8 8
 -->
9 9
 <template>
10 10
   <div>
@@ -92,7 +92,7 @@
92 92
     </el-row>
93 93
     <!-- 新增成果表 -->
94 94
     <el-dialog :title="addTitle" :visible.sync="addOpen" width="50%">
95
-      <el-form :model="form" ref="achiRef" label-width="110px" :rules="rules">
95
+      <!-- <el-form :model="form" ref="achiRef" label-width="110px" :rules="rules">
96 96
         <el-row :gutter="10">
97 97
           <el-col :span="15">
98 98
             <el-form-item label="项目编号" prop="projectNumber">
@@ -128,10 +128,6 @@
128 128
                     </el-option>
129 129
                   </el-select>
130 130
                 </el-col>
131
-                <el-col :span="2">
132
-                  <el-button icon="el-icon-plus" @click="handleResult">
133
-                  </el-button>
134
-                </el-col>
135 131
               </el-row>
136 132
             </el-form-item>
137 133
           </el-col>
@@ -234,11 +230,12 @@
234 230
           <el-button type="primary" @click="submitForm">确 定</el-button>
235 231
           <el-button @click="cancel">取 消</el-button>
236 232
         </div>
237
-      </template>
233
+      </template> -->
234
+      <add-achi :project="form" @getList="getAchiList" @cancel="addOpen = false"></add-achi>
238 235
     </el-dialog>
239 236
     <!-- 修改成果 -->
240 237
     <el-dialog :title="addTitle" :visible.sync="modifyOpen" width="50%">
241
-      <el-form :model="modifyForm" ref="achiModifyRef" label-width="110px" :rules="modifyRules">
238
+      <!-- <el-form :model="modifyForm" ref="achiModifyRef" label-width="110px" :rules="modifyRules">
242 239
         <el-row :gutter="20">
243 240
           <el-col :span="12">
244 241
             <el-form-item label="项目编号">
@@ -367,7 +364,8 @@
367 364
           <el-button type="primary" @click="submitModifyForm">确 定</el-button>
368 365
           <el-button @click="cancel">取 消</el-button>
369 366
         </div>
370
-      </template>
367
+      </template> -->
368
+      <modify-achi :modifyForm="modifyForm" @getList="getAchiList"  @cancel="modifyOpen = false"></modify-achi>
371 369
     </el-dialog>
372 370
     <!-- 用户上传excel -->
373 371
     <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px">
@@ -375,9 +373,7 @@
375 373
         :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-change="handleFileUploadChange"
376 374
         :on-success="handleFileSuccess" :auto-upload="false" drag v-loading="uploadLoading"
377 375
         element-loading-text="正在上传,请稍等">
378
-        <el-icon class="el-icon--upload">
379
-          <upload-filled />
380
-        </el-icon>
376
+        <i class="el-icon-upload"></i>
381 377
         <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
382 378
         <template #tip>
383 379
           <div class="el-upload__tip text-center">
@@ -410,11 +406,15 @@ import { listStorage } from "@/api/file/storage";
410 406
 import { cloneDeep } from "lodash";
411 407
 import { listType } from '@/api/system/dict/type'
412 408
 import projectChoose from '@/views/flowable/form/components/chooseProject.vue';
409
+import AddAchi from '../components/addAchi.vue';
410
+import ModifyAchi from '../components/modifyAchi.vue';
413 411
 export default {
414 412
   name: "Achievement",
415 413
   dicts: ['cmc_achi_type', 'cmc_scale_grade'],
416 414
   components: {
417 415
     projectChoose,
416
+    AddAchi,
417
+    ModifyAchi,
418 418
   },
419 419
   data() {
420 420
     return {
@@ -528,15 +528,15 @@ export default {
528 528
     handleUpdate(row) {
529 529
       this.modifyForm = cloneDeep(row);
530 530
       this.modifyForm.projectNumber = this.modifyForm.projectNumber + '-' + this.modifyForm.projectName
531
-      this.kmlFileName = "";
532
-      this.kmlFileName = row.kmlUrl;
533
-      if (typeof (this.modifyForm.resultType) == "string") {
534
-        if (this.modifyForm.resultType.indexOf(',') != -1) {
535
-          this.modifyForm.resultType = this.modifyForm.resultType.split(',');
536
-        } else {
537
-          this.modifyForm.resultType = this.modifyForm.resultType.split();
538
-        }
539
-      }
531
+      // this.kmlFileName = "";
532
+      // this.kmlFileName = row.kmlUrl;
533
+      // if (typeof (this.modifyForm.resultType) == "string") {
534
+      //   if (this.modifyForm.resultType.indexOf(',') != -1) {
535
+      //     this.modifyForm.resultType = this.modifyForm.resultType.split(',');
536
+      //   } else {
537
+      //     this.modifyForm.resultType = this.modifyForm.resultType.split();
538
+      //   }
539
+      // }
540 540
       // if (typeof (this.modifyForm.scaleGrade) == "string") {
541 541
       //   if (this.modifyForm.scaleGrade.indexOf(',') != -1) {
542 542
       //     this.modifyForm.scaleGrade = this.modifyForm.scaleGrade.split(',');

+ 1
- 2
oa-ui/src/views/file/filesProject/project.vue 파일 보기

@@ -65,7 +65,7 @@
65 65
             </el-tooltip>
66 66
             <el-tooltip content="成果" placement="top">
67 67
               <el-button type="text" icon="Document" @click="handleLookAchi(scope.row)"
68
-                v-hasPermi="['file:achievement:query']" v-hasRole>
68
+                v-hasPermi="['file:achievement:query']">
69 69
               </el-button>
70 70
             </el-tooltip>
71 71
             <el-tooltip content="修改" placement="top">
@@ -764,7 +764,6 @@ export default {
764 764
           /* line  */
765 765
           if (polylines.length != 0) {
766 766
             let coords = polylines[0].getElementsByTagName('coordinates')[0].childNodes[0].nodeValue.trim();
767
-            console.log(coords);
768 767
             let points = coords.split(" ");
769 768
             let polylinesList = [];
770 769
             for (const p of points) {

+ 458
- 0
oa-ui/src/views/flowable/form/archiveFile.vue 파일 보기

@@ -0,0 +1,458 @@
1
+<!--
2
+ * @Author: ysh
3
+ * @Date: 2025-01-09 15:51:01
4
+ * @LastEditors: Please set LastEditors
5
+ * @LastEditTime: 2025-01-10 16:36:01
6
+-->
7
+<template>
8
+  <div>
9
+    <!-- <el-row :gutter="20">
10
+      <el-col :span="12">
11
+        <el-form-item label="项目范围kml">
12
+          <div style="display: flex">
13
+            <div style="width: 100%;">
14
+              <el-input v-model="kmlFileName" disabled placeholder="请选择kml文件"></el-input>
15
+            </div>
16
+            <div>
17
+              <el-upload ref="uploadProKml" class="upload-demo" :headers="upload.headers" :auto-upload="false" action=""
18
+                :on-success="successUploadProKml" accept=".kml" :on-change="handleKmlUploadChange"
19
+                :show-file-list="false">
20
+                <el-button type="primary" icon="el-icon-plus"></el-button>
21
+              </el-upload>
22
+            </div>
23
+          </div>
24
+          <div v-if="position.length != 0" class="centerBox">
25
+            <div>项目点位经纬度:</div>
26
+            <div>
27
+              <el-tag>{{ position[0] }}</el-tag>- <el-tag>{{ position[1] }}</el-tag>
28
+            </div>
29
+          </div>
30
+        </el-form-item>
31
+      </el-col>
32
+      <el-col :span="12">
33
+        <el-form-item label="项目控制点kml">
34
+          <div style="display: flex;">
35
+            <div style="width: 100%;">
36
+              <el-input v-model="cpFileName" disabled placeholder="请选择kml文件"></el-input>
37
+            </div>
38
+            <div>
39
+              <el-upload ref="uploadProCPKml" class="upload-demo" :headers="upload.headers" :auto-upload="false"
40
+                action="" :on-success="successUploadProKml" accept=".kml" :on-change="handleCpUploadChange"
41
+                :show-file-list="false">
42
+                <el-button type="primary" icon="el-icon-plus"></el-button>
43
+              </el-upload>
44
+            </div>
45
+          </div>
46
+        </el-form-item>
47
+      </el-col>
48
+    </el-row> -->
49
+    <el-form-item label="成果列表">
50
+      <el-row style="margin-bottom: 10px;">
51
+        <el-button type="primary" size="mini" icon="el-icon-plus" @click="handleAddAchievement"
52
+          v-hasPermi="['file:achievement:add']">新增成果</el-button>
53
+        <el-button type="warning" size="mini" icon="el-icon-upload" @click="uploadAchievement"
54
+          v-hasPermi="['file:achievement:add']">上传成果表</el-button>
55
+      </el-row>
56
+      <el-table :data="achiTableData" style="width: 100%" stripe v-loading="loading" :row-key="getRowKeys">
57
+        <el-table-column type="index" label="序号" width="50px" align="center" />
58
+        <el-table-column prop="projectNumber" label="项目编号" align="center" />
59
+        <el-table-column prop="achiName" label="成果名称" width="200px" align="center" />
60
+        <el-table-column prop="dataYear" label="数据年份" align="center"></el-table-column>
61
+        <el-table-column prop="resultType" label="成果类型" align="center">
62
+          <template slot-scope="scope">
63
+            {{ selectDictLabel(dict.type.cmc_achi_type, scope.row.resultType) }}
64
+          </template>
65
+        </el-table-column>
66
+        <el-table-column prop="scaleGrade" label="比例尺或等级" align="center">
67
+          <template slot-scope="scope">
68
+            {{ selectDictLabel(dict.type.cmc_scale_grade, scope.row.scaleGrade) }}
69
+          </template>
70
+        </el-table-column>
71
+        <el-table-column prop="fileType" label="文件类型" align="center" />
72
+        <el-table-column prop="workLoad" label="工作量" align="center" />
73
+        <el-table-column prop="unit" label="单位" align="center" />
74
+        <el-table-column prop="dataSource" label="数据来源" align="center" />
75
+        <el-table-column prop="dataType" label="数据类型" align="center" />
76
+        <el-table-column prop="storageAddress" label="存储地址" align="center" />
77
+        <!-- <el-table-column prop="kmlUrl" label="KML地址" align="center" /> -->
78
+        <el-table-column label="有无KML" align="center" :formatter="formatterKmlurl"></el-table-column>
79
+        <el-table-column prop="remark" label="备注" align="center" />
80
+        <el-table-column label="操作" fixed="right" align="center" width="100" class-name="small-padding fixed-width">
81
+          <template #default="scope">
82
+            <el-tooltip content="修改" placement="top">
83
+              <el-button type="text" icon="el-icon-edit-outline" @click="handleUpdate(scope.row)"
84
+                v-hasPermi="['file:achievement:edit']">
85
+              </el-button>
86
+            </el-tooltip>
87
+            <el-tooltip content="删除" placement="top">
88
+              <el-button type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
89
+                v-hasPermi="['file:achievement:remove']">
90
+              </el-button>
91
+            </el-tooltip>
92
+          </template>
93
+        </el-table-column>
94
+      </el-table>
95
+      <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
96
+        @pagination="getAchiList" />
97
+    </el-form-item>
98
+
99
+    <!-- 用户上传excel -->
100
+    <el-dialog title="导入成果列表" :visible.sync="achiUpload.open" width="400px">
101
+      <el-upload ref="uploadRef" accept=".xlsx, .xls" :headers="achiUpload.headers" :action="achiUpload.url"
102
+        :disabled="achiUpload.isUploading" :on-progress="handleFileUploadProgress" :on-change="handleFileUploadChange"
103
+        :on-success="handleFileSuccess" :auto-upload="false" drag v-loading="uploadLoading"
104
+        element-loading-text="正在上传,请稍等">
105
+        <i class="el-icon-upload"></i>
106
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
107
+        <template #tip>
108
+          <div class="el-upload__tip text-center">
109
+            <span>仅允许导入xls、xlsx格式文件。</span>
110
+            <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
111
+              @click="importTemplate">下载模板</el-link>
112
+          </div>
113
+        </template>
114
+      </el-upload>
115
+      <template #footer>
116
+        <div class="dialog-footer">
117
+          <el-button type="primary" @click="submitUpload">确 定</el-button>
118
+          <el-button @click="achiUpload.open = false">取 消</el-button>
119
+        </div>
120
+      </template>
121
+    </el-dialog>
122
+
123
+    <el-dialog title="新增成果" :visible.sync="addOpen" width="50%">
124
+      <add-achi :project="project" :isFlow="true" @getList="getAchiList" @cancel="addOpen = false"></add-achi>
125
+    </el-dialog>
126
+    <el-dialog title="修改成果" :visible.sync="modifyOpen" width="50%">
127
+      <modify-achi :modifyForm="modifyForm" :isFlow="true" :isModify="true" @getList="getAchiList"
128
+        @cancel="modifyOpen = false"></modify-achi>
129
+    </el-dialog>
130
+  </div>
131
+</template>
132
+
133
+<script>
134
+import { saveAs } from 'file-saver';
135
+import { cloneDeep } from "lodash";
136
+import { getToken } from "@/utils/auth";
137
+import { listType } from '@/api/system/dict/type'
138
+import { getProject, downloadTemplate } from "@/api/file/project";
139
+import { listAchievement, uploadAchievementSheet, addAchievement, updateAchievement, delAchievement } from "@/api/file/achievement";
140
+import addAchi from '../../file/components/addAchi.vue';
141
+import ModifyAchi from '../../file/components/modifyAchi.vue';
142
+export default {
143
+  components: { addAchi,ModifyAchi },
144
+  dicts: ['cmc_achi_type', 'cmc_scale_grade'],
145
+  props: {
146
+    project: {
147
+      type: Object,
148
+      require: true
149
+    }
150
+  },
151
+  watch: {
152
+    project: {
153
+      handler(newVal) {
154
+        this.getAchiList();
155
+      },
156
+      immediate: true, // 立即生效
157
+      deep: true  //监听对象或数组的时候,要用到深度监听
158
+    }
159
+  },
160
+  data() {
161
+    return {
162
+      loading: false,
163
+      achiTableData: [],
164
+      kmlfile: undefined,
165
+      cpfile: undefined,
166
+      kmlFileName: "",//范围kml文件的文件名
167
+      cpFileName: "", //控制点文件的文件名
168
+      position: [],
169
+      upload: {
170
+        // 是否显示弹出层(用户导入)
171
+        open: false,
172
+        // 弹出层标题(用户导入)
173
+        title: "",
174
+        // 是否禁用上传
175
+        isUploading: false,
176
+        // 是否更新已经存在的用户数据
177
+        updateSupport: 0,
178
+        // 设置上传的请求头部'Content-Type': 'multipart/form-data',
179
+        headers: { Authorization: "Bearer " + getToken() },
180
+        data: undefined,
181
+        // 上传的地址
182
+        url: process.env.VUE_APP_BASE_API + "/file/project/uploadSheet",
183
+        // kml上传地址
184
+        kmlUrl: process.env.VUE_APP_BASE_API + "/file/project/uploadProjectKmlFile",
185
+        // 控制点上传地址
186
+        cpUrl: process.env.VUE_APP_BASE_API + "/file/project/uploadCpKmlFile",
187
+      },
188
+      achiUpload: {
189
+        // 是否显示弹出层(用户导入)
190
+        open: false,
191
+        // 弹出层标题(用户导入)
192
+        title: "",
193
+        // 是否禁用上传
194
+        isUploading: false,
195
+        // 是否更新已经存在的用户数据
196
+        updateSupport: 0,
197
+        // 设置上传的请求头部'Content-Type': 'multipart/form-data', 
198
+        headers: { 'Authorization': "Bearer " + getToken() },
199
+        data: undefined,
200
+        // 上传的地址
201
+        url: process.env.VUE_APP_BASE_API + "/file/achievement/uploadSheet"
202
+      },
203
+      uploadLoading: false,
204
+      uploadFormData: undefined,
205
+      fileList: [],
206
+      queryParams: {
207
+        pageNum: 1,
208
+        pageSize: 10,
209
+        id: undefined,
210
+        projectId: undefined,
211
+        projectNumber: undefined,
212
+        achiName: undefined,
213
+        dataYear: undefined,
214
+        scaleGrade: undefined,
215
+        resultType: undefined,
216
+        fileType: undefined,
217
+        kmlUrl: undefined,
218
+        kmlLng: undefined,
219
+        kmlLat: undefined,
220
+        workLoad: undefined,
221
+        unit: undefined,
222
+        dataSource: undefined,
223
+        dataType: undefined,
224
+        storageId: undefined,
225
+        remark: undefined,
226
+      },
227
+      total: 0,
228
+      addOpen: false,
229
+      modifyOpen: false,
230
+      modifyForm: {}
231
+    };
232
+  },
233
+  created() {
234
+
235
+  },
236
+  methods: {
237
+    getAchiList() {
238
+      this.queryParams.projectId = this.project.projectId;
239
+      this.loading = true;
240
+      if (this.$store.getters.roles.includes('projectLeader') && !this.$store.getters.roles.includes('leader')) {
241
+        this.queryParams.projectLeader = this.$store.getters.userId
242
+      }
243
+      listAchievement(this.queryParams).then(res => {
244
+        this.achiTableData = res.rows;
245
+        this.total = res.total;
246
+        this.loading = false;
247
+      })
248
+    },
249
+    /* 新增成果 */
250
+    handleAddAchievement() {
251
+      this.addOpen = true
252
+    },
253
+    /* 修改成果按钮 */
254
+    handleUpdate(row) {
255
+      this.modifyForm = cloneDeep(row);
256
+      this.modifyForm.projectNumber = this.modifyForm.projectNumber + '-' + this.modifyForm.projectName;
257
+      this.modifyOpen = true;
258
+    },
259
+    /* 删除成果 */
260
+    handleDelete(row) {
261
+      const achiIds = row.id;
262
+      const achiName = row.achiName
263
+      this.$modal.confirm('是否确认成果名为"' + achiName + '"的数据项?').then(function () {
264
+        return delAchievement(achiIds);
265
+      }).then(() => {
266
+        this.getAchiList();
267
+        this.$modal.msgSuccess("删除成功");
268
+      }).catch(() => { });
269
+    },
270
+    /* 上传成果 */
271
+    uploadAchievement() {
272
+      this.achiUpload.open = true
273
+    },
274
+    /**Excel文件上传中处理 */
275
+    handleFileUploadProgress(event, file, fileList) {
276
+      this.achiUpload.isUploading = true;
277
+      this.uploadLoading = true;
278
+    },
279
+    /* Excel文件改变时 */
280
+    handleFileUploadChange(file, fileList) {
281
+      if (fileList.length > 1) {
282
+        fileList.splice(0, 1);
283
+      }
284
+      this.uploadFormData = new FormData();
285
+      this.uploadFormData.append("file", file);
286
+      this.achiUpload.data = this.uploadFormData;
287
+    },
288
+    /** Excel文件上传成功处理 */
289
+    handleFileSuccess(response, file, fileList) {
290
+      this.achiUpload.open = false;
291
+      this.achiUpload.isUploading = false;
292
+      this.uploadLoading = false;
293
+      this.fileList = [];
294
+      this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
295
+      this.$refs["uploadRef"].clearFiles();
296
+      this.getAchiList();
297
+    },
298
+    /* 下载模板 */
299
+    importTemplate() {
300
+      const path = "http://oa.sccehui.com:6200/prod-api/profile/upload/成果归档/cg-template.xlsx"
301
+      downloadTemplate(path).then(res => {
302
+        const blob = new Blob([res])
303
+        saveAs(blob, '成果表模版.xlsx');
304
+      });
305
+    },
306
+    /* Excel上传提交按钮 */
307
+    submitUpload() {
308
+      this.$refs['uploadRef'].submit();
309
+    },
310
+    // ____________项目KML________________
311
+    successUploadProKml(response, file, fileList) {
312
+      this.$refs["uploadProKml"].clearFiles();
313
+      this.$refs["uploadProCPKml"].clearFiles();
314
+      this.$alert(
315
+        "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
316
+        response.msg +
317
+        "</div>",
318
+        "导入结果",
319
+        { dangerouslyUseHTMLString: true }
320
+      );
321
+    },
322
+    /* 只上传一个文件,如果重复上传就替换 */
323
+    handleCpUploadChange(file, fileList) {
324
+      if (fileList.length > 1) {
325
+        fileList.splice(0, 1);
326
+      }
327
+      this.cpFileName = file.name;
328
+      this.cpfile = file.raw
329
+    },
330
+    async handleKmlUploadChange(file, fileList) {
331
+      if (fileList.length > 1) {
332
+        fileList.splice(0, 1);
333
+      }
334
+      this.kmlFileName = file.name;
335
+      this.kmlfile = file.raw;
336
+      let fileReader = new FileReader();
337
+      fileReader.readAsText(this.kmlfile);
338
+      fileReader.onload = async (e) => {
339
+        let result = await this.extractGoogleCoords(e.target.result)
340
+        //Do something with result object here
341
+        if (result.markers.length != 0) {
342
+          let points = result.markers[0];
343
+          this.position.push(points.lng);
344
+          this.position.push(points.lat);
345
+        } else if (result.polygons.length != 0) {
346
+          let polygonCor = result.polygons;
347
+          let center = this.calculateCenter(polygonCor);
348
+          this.position = [];
349
+          this.position.push(center.lng);
350
+          this.position.push(center.lat);
351
+        } else if (result.polylines.length != 0) {
352
+          let center = result.polylines[0];
353
+          this.position = [];
354
+          this.position.push(center[0]);
355
+          this.position.push(center[1]);
356
+        }
357
+      }
358
+    },
359
+    /* 读取kml范围的坐标 */
360
+    extractGoogleCoords(plainText) {
361
+      let parser = new DOMParser();
362
+      let xmlDoc = parser.parseFromString(plainText, "text/xml")
363
+      let googlePolygons = []
364
+      let googleMarkers = []
365
+      let googlePolylines = []
366
+      if (xmlDoc.documentElement.nodeName == "kml") {
367
+        for (const item of xmlDoc.getElementsByTagName('Placemark')) {
368
+          // let placeMarkName = item.getElementsByTagName('name')[0].childNodes[0].nodeValue.trim();
369
+          let polygons = item.getElementsByTagName('Polygon');
370
+          let polylines = item.getElementsByTagName('LineString');
371
+          let markers = item.getElementsByTagName('Point');
372
+          /** POLYGONS PARSE **/
373
+          if (polygons.length != 0) {
374
+            for (const polygon of polygons) {
375
+              let coords = polygon.getElementsByTagName('coordinates')[0].childNodes[0].nodeValue.trim();
376
+              let b = coords.replace(/[\t\f\r\n]/g, '');
377
+              let points = b.split(" ");
378
+              let googlePolygonsPaths = [];
379
+              for (const point of points) {
380
+                if (point != "") {
381
+                  let coord = point.split(",");
382
+                  googlePolygonsPaths.push({ lat: + Number(coord[1]), lng: + Number(coord[0]) });
383
+                }
384
+              }
385
+              googlePolygons = googlePolygonsPaths;
386
+            }
387
+          }
388
+
389
+          /* line  */
390
+          if (polylines.length != 0) {
391
+            let coords = polylines[0].getElementsByTagName('coordinates')[0].childNodes[0].nodeValue.trim();
392
+            let points = coords.split(" ");
393
+            let polylinesList = [];
394
+            for (const p of points) {
395
+              let coord = p.split(",");
396
+              polylinesList.push([Number(coord[0]), Number(coord[1])])
397
+            }
398
+            let midLen = parseInt(polylinesList.length / 2);
399
+            googlePolylines.push(polylinesList[midLen]);
400
+          }
401
+          if (markers.length != 0) {
402
+            for (const marker of markers) {
403
+              var coords = marker.getElementsByTagName('coordinates')[0].childNodes[0].nodeValue.trim()
404
+              let coord = coords.split(",")
405
+              googleMarkers.push({ lat: +coord[1], lng: +coord[0] })
406
+            }
407
+          }
408
+        }
409
+      } else {
410
+        this.$modal.msgError('无效的KML文件');
411
+        this.position = [];
412
+        throw "error while parsing"
413
+      }
414
+      return { markers: googleMarkers, polygons: googlePolygons, polylines: googlePolylines }
415
+    },
416
+    calculateCenter(lnglatarr) {
417
+      var total = lnglatarr.length;
418
+      var X = 0, Y = 0, Z = 0;
419
+      lnglatarr.forEach((lnglat) => {
420
+        var lng = lnglat.lng * Math.PI / 180;
421
+        var lat = lnglat.lat * Math.PI / 180;
422
+        var x, y, z;
423
+        x = Math.cos(lat) * Math.cos(lng);
424
+        y = Math.cos(lat) * Math.sin(lng);
425
+        z = Math.sin(lat);
426
+        X += x;
427
+        Y += y;
428
+        Z += z;
429
+      });
430
+      X = X / total;
431
+      Y = Y / total;
432
+      Z = Z / total;
433
+      var Lng = Math.atan2(Y, X);
434
+      var Hyp = Math.sqrt(X * X + Y * Y);
435
+      var Lat = Math.atan2(Z, Hyp);
436
+      return { lng: Lng * 180 / Math.PI, lat: Lat * 180 / Math.PI };
437
+    },
438
+    // 获取表格的row-key,
439
+    getRowKeys(row) {
440
+      return row.id;
441
+    },
442
+    formatterKmlurl(row, cloumn) {
443
+      if (row.kmlUrl == "" || row.kmlUrl == null) {
444
+        return "无";
445
+      } else {
446
+        return "有";
447
+      }
448
+    },
449
+  },
450
+};
451
+</script>
452
+
453
+<style lang="scss" scoped>
454
+.centerBox {
455
+  border: 1px dashed #bccfec;
456
+  padding: 5px;
457
+}
458
+</style>

+ 25
- 53
oa-ui/src/views/flowable/form/archiveForm.vue 파일 보기

@@ -2,7 +2,7 @@
2 2
  * @Author: ysh
3 3
  * @Date: 2024-06-21 18:51:51
4 4
  * @LastEditors: Please set LastEditors
5
- * @LastEditTime: 2024-10-08 09:32:30
5
+ * @LastEditTime: 2025-01-10 16:34:32
6 6
 -->
7 7
 <template>
8 8
   <div class="app-container">
@@ -14,26 +14,26 @@
14 14
           <el-form-item label="项目信息" prop="projectId">
15 15
             <el-button type="primary" size="mini" @click="openProject = true" v-if="taskName == '归档发起'">选择项目</el-button>
16 16
             <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="2">
17
-              <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
18
-                }}</el-descriptions-item>
19 17
               <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
20 18
                 }}</el-descriptions-item>
19
+              <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
20
+                }}</el-descriptions-item>
21 21
               <el-descriptions-item label="甲方单位" label-class-name="my-label">{{ chooseProject.partyA.partyAName
22 22
                 }}</el-descriptions-item>
23 23
               <el-descriptions-item label="合同编码" label-class-name="my-label">{{ contractCode
24 24
                 }}</el-descriptions-item>
25 25
               <el-descriptions-item label="承担部门" label-class-name="my-label">{{
26
-      chooseProject.undertakingDeptName
27
-    }}</el-descriptions-item>
26
+                chooseProject.undertakingDeptName
27
+              }}</el-descriptions-item>
28 28
               <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeaderUser
29
-      ? chooseProject.projectLeaderUser.nickName : ''
29
+                ? chooseProject.projectLeaderUser.nickName : ''
30 30
                 }}</el-descriptions-item>
31 31
               <el-descriptions-item label="技术负责人" label-class-name="my-label">{{
32
-      chooseProject.technicalDirectorUser ? chooseProject.technicalDirectorUser.nickName :
33
-        '' }}</el-descriptions-item>
32
+                chooseProject.technicalDirectorUser ? chooseProject.technicalDirectorUser.nickName :
33
+                  '' }}</el-descriptions-item>
34 34
               <el-descriptions-item label="质检审核员" label-class-name="my-label">{{
35
-      chooseProject.qualityInspectorName
36
-    }}</el-descriptions-item>
35
+                chooseProject.qualityInspectorName
36
+              }}</el-descriptions-item>
37 37
               <!-- <el-descriptions-item label="坐标经度" label-class-name="my-label">{{ chooseProject.kmlLng
38 38
               }}</el-descriptions-item>
39 39
               <el-descriptions-item label="坐标纬度" label-class-name="my-label">{{ chooseProject.kmlLat
@@ -52,55 +52,20 @@
52 52
             <el-input type="textarea" v-model="form.submitSituation" placeholder="请输入备注说明"
53 53
               :disabled="taskName != '归档发起'" :autosize="{ minRows: 4 }" />
54 54
           </el-form-item>
55
-          <!-- <el-divider></el-divider> -->
56
-          <!-- <el-form-item label="部门检查员检查" prop="produceComment">
57
-            <el-input type="textarea" v-model="form.produceComment" placeholder="请输入部门检查员检查意见"
58
-              :disabled="taskName != '部门检查'" :autosize="{ minRows: 4 }" />
59
-          </el-form-item>
60
-          <el-row>
61
-            <el-col :span="6" :xs="24" :offset="12">
62
-              <el-form-item label="签名:" label-width="120px" v-if="taskName != '归档发起'">
63
-                <span class="auditor"> {{ form.produceUser ? form.produceUser.nickName : produceUser }}
64
-                </span>
65
-              </el-form-item>
66
-            </el-col>
67
-            <el-col :span="6">
68
-              <el-form-item label="日期:" label-width="120px" v-if="taskName != '归档发起'">
69
-                <span> {{ form.produceTime ? form.produceTime : produceTime }} </span>
70
-              </el-form-item>
71
-            </el-col>
72
-          </el-row>
73
-          <el-form-item label="资料接收时间" prop="receiveTime">
74
-            <el-date-picker clearable v-model="form.receiveTime" type="date" value-format="yyyy-MM-dd"
75
-              placeholder="请选择资料接收时间" :disabled="taskName != '质检审核'">
76
-            </el-date-picker>
77
-          </el-form-item>
78
-          <el-form-item label="质量检查员审核" prop="qualityComment">
79
-            <el-input type="textarea" v-model="form.qualityComment" placeholder="请输入质量检查员审核意见"
80
-              :disabled="taskName != '质检审核'" :autosize="{ minRows: 4 }" />
81
-          </el-form-item>
82
-          <el-row>
83
-            <el-col :span="6" :xs="24" :offset="12">
84
-              <el-form-item label="签名:" label-width="120px" v-if="taskName != '归档发起' && taskName != '部门检查'">
85
-                <span class="auditor"> {{ form.qualityUser ? form.qualityUser.nickName : qualityUser }}
86
-                </span>
87
-              </el-form-item>
88
-            </el-col>
89
-            <el-col :span="6">
90
-              <el-form-item label="日期:" label-width="120px" v-if="taskName != '归档发起' && taskName != '部门检查'">
91
-                <span> {{ form.qualityTime ? form.qualityTime : qualityTime }} </span>
92
-              </el-form-item>
93
-            </el-col>
94
-          </el-row> -->
95 55
           <el-form-item label="技术质量与安全部负责人审核" prop="deptComment">
96 56
             <el-input type="textarea" v-model="form.deptComment" placeholder="请输入技术质量与安全部负责人审核意见"
97 57
               :disabled="taskName != '技术质量与安全部审核'" :autosize="{ minRows: 4 }" />
98 58
           </el-form-item>
99 59
           <auditor-row key="1" :isCurrent="taskName == '技术质量与安全部审核'" :signature="form.deptLeader"
100 60
             :signTime="form.deptTime"></auditor-row>
101
-          <el-form-item label="资料管理">
61
+          <!-- <el-form-item label="资料管理">
102 62
             <el-button type="success" size="mini" @click="gotoFile" :disabled="taskName != '成果归档'">前往资料管理系统</el-button>
103
-          </el-form-item>
63
+          </el-form-item> -->
64
+          <!-- 成果列表 -->
65
+          <archive-file :project="chooseProject"></archive-file>
66
+          <div class="mb20" style="color:#E23D28;font-size:12px;padding-left:120px;" v-if="taskName == '成果归档'">
67
+            tips:上传成果之后,请刷新页面,归档状态即可变为已归档,才能提交并结束流程。
68
+          </div>
104 69
           <el-form-item label="技术质量与安全部归档" prop="archiveComment">
105 70
             <el-input type="textarea" v-model="form.archiveComment" placeholder="请输入技术质量与安全部归档意见"
106 71
               :disabled="taskName != '成果归档'" :autosize="{ minRows: 4 }" />
@@ -158,13 +123,15 @@ import { getUserByRole } from "@/api/system/role";
158 123
 import projectChoose from '@/views/flowable/form/components/chooseProject.vue';
159 124
 import { listAchievement } from "@/api/file/achievement";
160 125
 import auditorRow from './components/auditorRow.vue';
126
+import ArchiveFile from './archiveFile.vue';
161 127
 
162 128
 export default {
163 129
   components: {
164 130
     FlowUser,
165 131
     projectChoose,
166 132
     flow,
167
-    auditorRow
133
+    auditorRow,
134
+    ArchiveFile
168 135
   },
169 136
   props: {
170 137
     taskName: {
@@ -369,6 +336,11 @@ export default {
369 336
         });
370 337
       }
371 338
     },
339
+    saves() {
340
+      let uploadKmlData = new FormData();
341
+      uploadKmlData.append("kmlfile", this.kmlfile);
342
+      uploadKmlData.append("cpfile", this.cpfile);
343
+    },
372 344
     /** 提交按钮 */
373 345
     submitForm() {
374 346
       this.$refs["form"].validate(valid => {

Loading…
취소
저장