Sfoglia il codice sorgente

公章,批量缴费

fz 2 anni fa
parent
commit
68d600c0e5

+ 16
- 0
src/api/officialSeal/officialSeal.js Vedi File

@@ -96,4 +96,20 @@ export function getTemplate(data) {
96 96
         method: 'get',
97 97
         params: data
98 98
     })
99
+}
100
+// 查询机构下的经办人
101
+export function selectPostUserByDeptId(data) {
102
+    return request({
103
+        url: '/deptIdentify/selectPostUserByDeptId',
104
+        method: 'get',
105
+        params: data
106
+    })
107
+}
108
+// 机构绑定经办人
109
+export function bindHandler(data) {
110
+    return request({
111
+        url: '/deptIdentify/bindHandler',
112
+        method: 'get',
113
+        params: data
114
+    })
99 115
 }

+ 10
- 1
src/api/pay/pay.js Vedi File

@@ -65,4 +65,13 @@ export function confirmPayDig(data) {
65 65
     method: 'post',
66 66
     data: data
67 67
   })
68
-}
68
+}
69
+// 查询批量缴费信息
70
+// 缴费页面缴费确认
71
+export function getPayDetail(params) {
72
+  return request({
73
+    url: '/pay/list',
74
+    method: 'get',
75
+    params: params
76
+  })
77
+}

+ 9
- 2
src/views/caseManagement/caseList.vue Vedi File

@@ -56,6 +56,8 @@
56 56
           v-hasPermi="['caseManagement:list:check']">案件批量立案审查</el-button>
57 57
         <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="operateClick(4)"
58 58
           v-hasPermi="['caseManagement:list:Batchgeneration']">批量生成裁决书</el-button>
59
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="operateClick(6)"
60
+          v-hasPermi="['caseManagement:list:pay']">批量缴费</el-button>
59 61
       </el-col>
60 62
     </el-row>
61 63
     <el-table v-loading="loading" :data="dataList" style="width: 100%">
@@ -390,9 +392,12 @@ export default {
390 392
       } else if (type == 2) {
391 393
         this.operateTitle = '批量立案审查';
392 394
         this.operateStatus = 2;
393
-      }else if(type == 4){
395
+      } else if (type == 4) {
394 396
         this.operateTitle = '批量生成裁决书';
395 397
         this.operateStatus = 4;
398
+      } else if(type == 6){
399
+        this.operateTitle = '批量缴费';
400
+        this.operateStatus = 6;
396 401
       }
397 402
     },
398 403
     // 修改开庭时间
@@ -737,4 +742,6 @@ export default {
737 742
 };
738 743
 </script>
739 744
 
740
-<style lang="scss" scoped>#formContainer {}</style>
745
+<style lang="scss" scoped>
746
+#formContainer {}
747
+</style>

+ 245
- 18
src/views/caseManagement/components/operateDialog.vue Vedi File

@@ -1,6 +1,61 @@
1 1
 <template>
2 2
     <div>
3 3
         <el-dialog :title="operateTitle" :visible="operateVisable" @close="cancel" center :distroy-on-close="true">
4
+            <el-dialog width="40%" title="缴费详情" :visible.sync="payVisible" append-to-body>
5
+                <!-- 案件总金额 -->
6
+                <h3>案件总金额:{{ form.totalFee / 100 }}</h3>
7
+                <el-descriptions :title="'订单信息' + (index + 1)" v-for="(item, index) in form.caseApplicationList"
8
+                    :key="index" border>
9
+                    <el-descriptions-item label="案件编号">{{
10
+                        item.caseNum
11
+                    }}</el-descriptions-item>
12
+                    <el-descriptions-item label="申请人">{{
13
+                        item.caseAppName
14
+                    }}</el-descriptions-item>
15
+                    <el-descriptions-item label="案件标的">{{
16
+                        item.caseSubjectAmount
17
+                    }}</el-descriptions-item>
18
+                    <el-descriptions-item label="案件应缴费用">{{
19
+                        item.feePayable
20
+                    }}</el-descriptions-item>
21
+                    <el-descriptions-item label="被申请人">{{
22
+                        item.caseResName
23
+                    }}</el-descriptions-item>
24
+                    <el-descriptions-item label="申请人仲裁诉求">{{
25
+                        item.arbitratClaims
26
+                    }}</el-descriptions-item>
27
+                </el-descriptions>
28
+                <div class="paySelectType">
29
+                    <el-radio-group v-model="paySelect" @input="changPayType">
30
+                        <el-radio :label="0">线上支付</el-radio>
31
+                        <el-radio :label="1">线下支付</el-radio>
32
+                    </el-radio-group>
33
+                </div>
34
+                <div class="payupload">
35
+                    <span>上传支付凭证:</span>
36
+                    <div class="uploadBtn">
37
+                        <el-upload class="upload-demo" ref="upload" :action="UploadUrl()" :headers="headers"
38
+                            :data="filedata" :on-remove="handleRemove" :on-change="beforeUpload" :on-success="handlSuccess"
39
+                            :file-list="fileList">
40
+                            <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
41
+                            <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
42
+                        </el-upload>
43
+                    </div>
44
+                </div>
45
+                <div class="payType" v-if="paySelect == 0">
46
+                    <span>请选择支付方式:</span>
47
+                    <i class="iconfont icon-weixinzhifu" @click="pay(0)"></i>
48
+                    <i class="iconfont icon-zhifubao" @click="pay(1)"></i>
49
+                </div>
50
+                <div class="payImg">
51
+                    <div id="qrcodeImg"></div>
52
+                </div>
53
+                <div class="payTitle">{{ payMain }}</div>
54
+                <div slot="footer" class="dialog-footer">
55
+                    <el-button @click="payCancel" class="endbutton"><span>取 消</span></el-button>
56
+                    <el-button @click="submitUpload" type="primary" class="endbutton"><span>确认缴费</span></el-button>
57
+                </div>
58
+            </el-dialog>
4 59
             <el-table v-loading="loading" :data="dataList" style="width: 100%" @selection-change="handleSelectionChange">
5 60
                 <el-table-column type="selection">
6 61
                 </el-table-column>
@@ -35,9 +90,14 @@
35 90
                 :limit.sync="queryParamsData.pageSize" @pagination="getcaseApply(queryParamsData)" />
36 91
             <div slot="footer" class="dialog-footer">
37 92
                 <el-button @click="cancel" class="endbutton"><span>取 消</span></el-button>
38
-                <el-button @click="submitBatch" type="primary" class="endbutton" :disabled="dataList.length == 0"><span>确 认</span></el-button>
93
+                <el-button @click="submitPay" type="primary" class="endbutton"
94
+                    :disabled="dataList.length == 0 || batchData.length == 0"
95
+                    v-if="operateStatus == 6"><span>确认缴费</span></el-button>
96
+                <el-button @click="submitBatch" type="primary" class="endbutton"
97
+                    :disabled="dataList.length == 0 || batchData.length == 0" v-else><span>确 认</span></el-button>
39 98
             </div>
40 99
         </el-dialog>
100
+
41 101
     </div>
42 102
 </template>
43 103
 <script>
@@ -47,12 +107,16 @@ import {
47 107
     removeCaseApply,
48 108
     submitCaseApplicationCheck
49 109
 } from "@/api/caseAccess/caseEntry";
110
+import { getPayDetail,confirmPayDig } from "@/api/pay/pay";
111
+import { casePay } from "@/api/pay/pay";
112
+import QRCode from "qrcodejs2";
113
+import { getToken } from "@/utils/auth";
50 114
 import { writtenHear } from "@/api/caseManagement/caseManagement.js";
51 115
 import {
52 116
     adjudicationCaseFile,
53 117
 } from "@/api/awardManagement/awardManagement";
54 118
 export default {
55
-    props: ["operateVisable", "operateData", "operateTitle", 'operateStatus','queryParams'],
119
+    props: ["operateVisable", "operateData", "operateTitle", 'operateStatus', 'queryParams'],
56 120
     data() {
57 121
         return {
58 122
             // 遮罩层
@@ -68,7 +132,23 @@ export default {
68 132
             // 表格数据
69 133
             dataList: [],
70 134
             batchData: [],
71
-            radio:1
135
+            radio: 1,
136
+            payVisible: false,
137
+            form: {},
138
+            paySelect: 1,//支付线上/线下
139
+            headers: {
140
+                Authorization: "Bearer " + getToken(),
141
+            },
142
+            filedata: {
143
+                annexType: 8,
144
+            },
145
+            submitForm: {
146
+                payType: 1,
147
+                payOrderList: [],
148
+                caseIds:[]
149
+            },
150
+            payMain: "",
151
+            fileList: [],
72 152
         };
73 153
     },
74 154
     watch: {
@@ -77,12 +157,98 @@ export default {
77 157
             if (val) {
78 158
                 this.getcaseApply(this.queryParamsData)
79 159
             }
160
+        },
161
+        payVisible(val) {
162
+            if (val) {
163
+                this.submitForm.payOrderList = []
164
+                this.paySelect = 1;
165
+                this.fileList = [];
166
+            }
80 167
         }
81 168
     },
82 169
     created() {
83 170
 
84 171
     },
85 172
     methods: {
173
+        UploadUrl() {
174
+            return window.location.origin + "/API/evidence/upload";
175
+        },
176
+        beforeUpload(flie, fileList) {
177
+            this.fileList = fileList;
178
+        },
179
+        handleRemove(file, fileList) {
180
+            (this.submitForm.payOrderList = []),
181
+                fileList.forEach((item) => {
182
+                    console.log(item.response.data, "item");
183
+                    this.submitForm.payOrderList.push({ annexId: item.response.data.annexId, annexName: item.response.data.annexName });
184
+                });
185
+        },
186
+        // 文件上传成功
187
+        handlSuccess(res, file) {
188
+            this.submitForm.payOrderList.push({
189
+                annexId: res.data.annexId,
190
+                annexName: res.data.annexName
191
+            });
192
+        },
193
+        //选择支付方式(线上,线下)
194
+        changPayType(data) {
195
+            if (data == 1) {
196
+                document.getElementById("qrcodeImg").innerHTML = "";
197
+                this.payMain = ""
198
+            }
199
+            this.submitForm.payType = data;
200
+        },
201
+        pay(val) {
202
+            if (this.form.totalFee == 0 || !this.form.totalFee) {
203
+                this.$message({
204
+                    message: "此案件无需缴费",
205
+                    type: "error",
206
+                });
207
+                return;
208
+            }
209
+            let payType = "";
210
+            if (val == 0) {
211
+                payType = "wxpay";
212
+                this.payMain = "请使用微信扫二维码支付";
213
+            } else if (val == 1) {
214
+                payType = "alipay";
215
+                this.payMain = "请使用支付宝扫二维码支付";
216
+            }
217
+            casePay({
218
+                totalFee: this.form.totalFee,
219
+                caseIds: this.batchData,
220
+                tradeType: "native",
221
+                platform: payType,
222
+            }).then((res) => {
223
+                this.paySrc = res.data.code_url;
224
+                this.qrcode(this.paySrc);
225
+            });
226
+        },
227
+        // 生成二维码
228
+        qrcode(url) {
229
+            // 前端根据 URL 生成微信支付二维码
230
+            document.getElementById("qrcodeImg").innerHTML = "";
231
+            return new QRCode("qrcodeImg", {
232
+                width: 200,
233
+                height: 200,
234
+                text: url,
235
+                colorDark: "#000",
236
+                colorLight: "#fff",
237
+            });
238
+        },
239
+        submitUpload() {
240
+            if (this.fileList.length < 1) {
241
+                this.$modal.msgError("请上传缴费凭证");
242
+                return
243
+            }
244
+            this.submitForm.caseIds = this.batchData;
245
+            console.log(this.submitForm,"LLLLLLLLLLLLLLLLLLLLLLLLLLLL");
246
+            confirmPayDig(this.submitForm).then(res => {
247
+                this.$modal.msgSuccess("成功");
248
+                this.payCancel();
249
+                this.getcaseApply(this.queryParamsData);
250
+            })
251
+        },
86 252
         // 选择勾选框
87 253
         handleSelectionChange(val) {
88 254
             this.batchData = [];
@@ -90,6 +256,10 @@ export default {
90 256
                 this.batchData.push(item.id)
91 257
             })
92 258
         },
259
+        payCancel() {
260
+            this.payVisible = false;
261
+            this.payMain = "";
262
+        },
93 263
         cancel() {
94 264
             this.$emit("cancelOperate");
95 265
         },
@@ -100,17 +270,29 @@ export default {
100 270
             } else if (this.operateStatus == 1) {
101 271
                 this.removeCaseApplyFn({ ids: this.batchData })
102 272
             } else if (this.operateStatus == 2) {
103
-                this.submitCaseApplicationCheckFn({ ids: this.batchData,agreeOrNotCheck:this.radio })
104
-            }else if (this.operateStatus == 3) {
273
+                this.submitCaseApplicationCheckFn({ ids: this.batchData, agreeOrNotCheck: this.radio })
274
+            } else if (this.operateStatus == 3) {
105 275
                 this.adjudicationCaseFileFn({ ids: this.batchData })
106
-            }else if (this.operateStatus == 4) {
276
+            } else if (this.operateStatus == 4) {
107 277
                 // this.adjudicationCaseFileFn({ ids: this.batchData })
108
-                this.writtenHearFn({ids: this.batchData})
109
-            }else if (this.operateStatus == 5) {
278
+                this.writtenHearFn({ ids: this.batchData })
279
+            } else if (this.operateStatus == 5) {
110 280
                 // this.adjudicationCaseFileFn({ ids: this.batchData })
111 281
                 // this.writtenHearFn({ids: this.batchData})
112 282
             }
113 283
         },
284
+        // 批量缴费弹窗
285
+        submitPay() {
286
+            this.payVisible = true;
287
+            this.getPayDetailFn({ caseIds: this.batchData })
288
+        },
289
+        // 查询缴费信息
290
+        getPayDetailFn(params) {
291
+            getPayDetail(params).then(res => {
292
+                this.form = res.data;
293
+                document.getElementById("qrcodeImg").innerHTML = "";
294
+            })
295
+        },
114 296
         // 批量提交
115 297
         submitCaseApplyFn(data) {
116 298
             submitCaseApply(data).then(res => {
@@ -128,24 +310,24 @@ export default {
128 310
             })
129 311
         },
130 312
         // 批量立案审查
131
-        submitCaseApplicationCheckFn(data){
132
-            submitCaseApplicationCheck(data).then(res=>{
313
+        submitCaseApplicationCheckFn(data) {
314
+            submitCaseApplicationCheck(data).then(res => {
133 315
                 this.$modal.msgSuccess("立案审查成功");
134 316
                 this.cancel();
135 317
                 this.$emit("getcaseApply", this.queryParams);
136 318
             })
137 319
         },
138 320
         //批量归档
139
-        adjudicationCaseFileFn(data){
140
-            adjudicationCaseFile(data).then(res=>{
321
+        adjudicationCaseFileFn(data) {
322
+            adjudicationCaseFile(data).then(res => {
141 323
                 this.$modal.msgSuccess("归档成功");
142 324
                 this.cancel();
143 325
                 this.$emit("getcaseApply", this.queryParams);
144 326
             })
145 327
         },
146 328
         // 批量生成裁决书
147
-        writtenHearFn(data){
148
-            writtenHear(data).then(res=>{
329
+        writtenHearFn(data) {
330
+            writtenHear(data).then(res => {
149 331
                 this.$modal.msgSuccess("生成成功");
150 332
                 this.cancel();
151 333
                 this.$emit("getcaseApply", this.queryParams);
@@ -160,12 +342,14 @@ export default {
160 342
                 this.queryParamsData.caseStatus = 0
161 343
             } else if (this.operateStatus == 2) {
162 344
                 this.queryParamsData.caseStatus = 1
163
-            }else if (this.operateStatus == 3) {
345
+            } else if (this.operateStatus == 3) {
164 346
                 this.queryParamsData.caseStatus = 16
165
-            }else if (this.operateStatus == 4) {
347
+            } else if (this.operateStatus == 4) {
166 348
                 this.queryParamsData.caseStatus = 9
167
-            }else if (this.operateStatus == 5) {
349
+            } else if (this.operateStatus == 5) {
168 350
                 this.queryParamsData.caseStatus = 11
351
+            } else if (this.operateStatus == 6) {
352
+                this.queryParamsData.caseStatus = 2
169 353
             }
170 354
             caseApply(val).then((response) => {
171 355
                 this.dataList = response.rows;
@@ -182,7 +366,50 @@ export default {
182 366
     display: flex;
183 367
     flex-wrap: wrap;
184 368
 }
185
-.radiobox{
369
+
370
+.radiobox {
186 371
     margin-top: 30px;
187 372
 }
373
+
374
+.paySelectType {
375
+    margin: 20px 0 20px 0;
376
+}
377
+
378
+.payupload {
379
+    display: flex;
380
+    margin-bottom: 20px;
381
+}
382
+
383
+.payImg {
384
+    width: 100%;
385
+    display: flex;
386
+    justify-content: center;
387
+}
388
+
389
+.payTitle {
390
+    margin-top: 20px;
391
+    width: 100%;
392
+    text-align: center;
393
+}
394
+.payType {
395
+  height: 80px;
396
+  line-height: 80px;
397
+  display: flex;
398
+
399
+  .icon-weixinzhifu {
400
+    font-size: 24px;
401
+    color: #27a56f;
402
+    margin-right: 15px;
403
+  }
404
+
405
+  .icon-zhifubao {
406
+    font-size: 24px;
407
+    color: #1d76cc;
408
+  }
409
+}
410
+::v-deep .el-dialog__body{
411
+    max-height: 600px;
412
+    overflow-y: scroll;
413
+
414
+}
188 415
 </style>

+ 2
- 25
src/views/caseManagement/components/payDialog.vue Vedi File

@@ -120,7 +120,6 @@ export default {
120 120
         this.$modal.msgSuccess("成功");
121 121
         this.payCancel()
122 122
         this.$emit("getcaseApply", this.queryParams);
123
-        // console.log(res,":::::::::::::::::::::::::::::::");
124 123
       })
125 124
     },
126 125
     handleRemove(file, fileList) {
@@ -145,22 +144,6 @@ export default {
145 144
         colorLight: "#fff",
146 145
       });
147 146
     },
148
-    // 查询缴费状态
149
-    // selectCaseApplicationConfirmFn(parms) {
150
-    //   selectCaseApplicationConfirm(parms).then(res => {
151
-    //     // console.log(res, this.form, "KKKKKKKKKKKKKKKKKKKK");
152
-    //     if (res && res.data && res.data.paymentStatus == 1) {
153
-    //       // clearInterval(this.timer);
154
-    //       // this.openPay = false;
155
-    //       this.payCancel()
156
-    //       this.$message({
157
-    //         message: "缴费成功",
158
-    //         type: "success",
159
-    //       });
160
-    //       this.$emit("getcaseApply", this.queryParams);
161
-    //     }
162
-    //   })
163
-    // },
164 147
     // 支付
165 148
     pay(val) {
166 149
       if (this.payForm.feePayable == 0 || !this.payForm.feePayable) {
@@ -180,18 +163,12 @@ export default {
180 163
       }
181 164
       casePay({
182 165
         totalFee: this.payForm.feePayable * 100,
183
-        caseId: this.payForm.caseId,
166
+        caseIds: [this.payForm.caseId],
184 167
         tradeType: "native",
185 168
         platform: payType,
186 169
       }).then((res) => {
187 170
         this.paySrc = res.data.code_url;
188 171
         this.qrcode(this.paySrc);
189
-        // this.timer = setInterval(() => {
190
-        //   this.selectCaseApplicationConfirmFn({ id: this.form.id })
191
-        // }, 3000);
192
-        // setTimeout(() => {
193
-        //   clearInterval(this.timer);
194
-        // }, 1000 * 60);
195 172
       });
196 173
     },
197 174
     payCancel() {
@@ -206,7 +183,7 @@ export default {
206 183
       this.paySelect = 1;
207 184
       this.fileList = [];
208 185
       this.filedata.id = this.payId;
209
-      this.submitForm.caseId = this.payId;
186
+      this.submitForm.caseIds = [this.payId];
210 187
       }
211 188
     }
212 189
   }

+ 5
- 3
src/views/deliveryRecord/smsRecord.vue Vedi File

@@ -80,11 +80,13 @@ export default {
80 80
                 this.dataList = response.rows;
81 81
                 this.dataList.forEach(item=>{
82 82
                     if(item.sendStatus == 0){
83
-                        item.sendStatus = "发送"
83
+                        item.sendStatus = "发送失败"
84 84
                     }else if(item.sendStatus == 1){
85
-                        item.sendStatus = "已发送"
85
+                        item.sendStatus = "已送达"
86
+                    }else if(item.sendStatus == 2){
87
+                        item.sendStatus = "已读取"
86 88
                     }else{
87
-                        item.sendStatus = "未发送"
89
+                        item.sendStatus = "发送失败"
88 90
                     }
89 91
                 })
90 92
                 this.total = response.total;

+ 42
- 17
src/views/officialSeal/components/addInstitution.vue Vedi File

@@ -2,15 +2,31 @@
2 2
     <div>
3 3
         <el-dialog :title="title" :visible="operateVisable" v-if="operateVisable" @close="cancel" width="600px" center
4 4
             :distroy-on-close="true">
5
+
5 6
             <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="130px" class="demo-ruleForm">
6 7
                 <el-form-item label="机构名称" prop="identifyName">
7 8
                     <el-input v-model="ruleForm.identifyName"></el-input>
8 9
                 </el-form-item>
9
-                <el-form-item label="经办人姓名" prop="operName">
10
+                <el-form-item label="机构邮箱" prop="identifyEmail">
11
+                    <el-input v-model="ruleForm.identifyEmail"></el-input>
12
+                </el-form-item>
13
+                <!-- <el-form-item label="经办人姓名" prop="operName">
10 14
                     <el-input v-model="ruleForm.operName"></el-input>
11 15
                 </el-form-item>
16
+                <el-form-item label="经办人用户名" prop="operUserName">
17
+                    <el-input v-model="ruleForm.operUserName"></el-input>
18
+                </el-form-item>
12 19
                 <el-form-item label="经办人手机号" prop="operPhone">
13 20
                     <el-input v-model="ruleForm.operPhone"></el-input>
21
+                </el-form-item> -->
22
+                <el-form-item label="机构信用代码" prop="creditCode">
23
+                    <el-input v-model="ruleForm.creditCode"></el-input>
24
+                </el-form-item>
25
+                <el-form-item label="法人姓名" prop="legalPerName">
26
+                    <el-input v-model="ruleForm.legalPerName"></el-input>
27
+                </el-form-item>
28
+                <el-form-item label="法人手机号" prop="legalPerPhone">
29
+                    <el-input v-model="ruleForm.legalPerPhone"></el-input>
14 30
                 </el-form-item>
15 31
             </el-form>
16 32
             <div slot="footer" class="dialog-footer">
@@ -24,8 +40,9 @@
24 40
 import {
25 41
     insert,
26 42
 } from "@/api/officialSeal/officialSeal.js";
43
+import { listUser } from '@/api/system/user.js'
27 44
 export default {
28
-    props: ["operateVisable","queryParams"],
45
+    props: ["operateVisable", "queryParams"],
29 46
     data() {
30 47
         return {
31 48
             title: "新增机构",
@@ -34,22 +51,38 @@ export default {
34 51
                 identifyName: [
35 52
                     { required: true, message: '请输入机构名称', trigger: 'blur' },
36 53
                 ],
37
-                operName: [
38
-                    { required: true, message: '请输入经办人姓名', trigger: 'blur' },
54
+                // operName: [
55
+                //     { required: true, message: '请输入经办人姓名', trigger: 'blur' },
56
+                // ],
57
+                // operPhone: [
58
+                //     { required: true, message: '请输入经办人手机号', trigger: 'blur' },
59
+                //     { pattern: /^[1][3,4,5,6,7,8,9][0-9]{9}$/, message: '请输入正确的手机号码', trigger: 'blur', },
60
+                // ],
61
+                creditCode: [
62
+                    { required: true, message: '请输入机构信用代码', trigger: 'blur' },
63
+                ],
64
+                legalPerName: [
65
+                    { required: true, message: '请输入法人姓名', trigger: 'blur' },
39 66
                 ],
40
-                operPhone: [
41
-                    { required: true, message: '请输入手机号', trigger: 'blur' },
67
+                legalPerPhone: [
68
+                    { required: true, message: '请输入法人手机号', trigger: 'blur' },
42 69
                     { pattern: /^[1][3,4,5,6,7,8,9][0-9]{9}$/, message: '请输入正确的手机号码', trigger: 'blur', },
43 70
                 ],
71
+                // operUserName: [
72
+                //     { required: true, message: '请输入经办人用户名', trigger: 'blur' },
73
+                // ],
74
+                identifyEmail: [
75
+                    { required: true, message: '请输入邮箱', trigger: 'blur' },
76
+                    { type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur' }
77
+                ]
44 78
             }
45 79
         };
46 80
     },
47 81
     watch: {
48 82
         operateVisable(val) {
49 83
             if (val) {
50
-               
51 84
             }
52
-        }
85
+        },
53 86
     },
54 87
     created() {
55 88
 
@@ -60,17 +93,9 @@ export default {
60 93
             insert(data).then(res => {
61 94
                 this.$modal.msgSuccess("新增成功!");
62 95
                 this.$emit("cancelFilingreview");
63
-                this.$emit('getList',this.queryParams);
96
+                this.$emit('getList', this.queryParams);
64 97
             })
65 98
         },
66
-        // // 编辑
67
-        // sealUpdateFn(data) {
68
-        //     sealUpdate(data).then(res => {
69
-        //         this.$modal.msgSuccess("修改成功!");
70
-        //         this.$emit("cancelFilingreview");
71
-        //         this.$emit('getList');
72
-        //     })
73
-        // },
74 99
         // 提交form表单
75 100
         submitForm() {
76 101
             this.$refs['ruleForm'].validate((valid) => {

+ 27
- 12
src/views/officialSeal/components/addTemplate.vue Vedi File

@@ -6,6 +6,12 @@
6 6
                 <el-form-item label="模板名称" prop="temName">
7 7
                     <el-input v-model="ruleForm.temName"></el-input>
8 8
                 </el-form-item>
9
+                <el-form-item label="模板类型" prop="temType">
10
+                    <el-select v-model="ruleForm.temType" placeholder="请选择">
11
+                        <el-option v-for="dict in dict.type.template_type" :key="dict.value" :label="dict.label"
12
+                            :value="dict.value"></el-option>
13
+                    </el-select>
14
+                </el-form-item>
9 15
                 <el-form-item label="机构名称" prop="identifyId">
10 16
                     <el-select v-model="ruleForm.identifyId" placeholder="请选择">
11 17
                         <el-option v-for="item in tempList" :key="item.id" :label="item.identifyName" :value="item.id">
@@ -15,8 +21,8 @@
15 21
             </el-form>
16 22
             <el-upload class="avatar-uploader" :before-upload="beforeUpload" :on-success="handleSuccess" ref="upload"
17 23
                 :action="UploadUrl()" :headers="headers" :data="filedata" :on-remove="handleRemove"
18
-                :on-change="handleChange" accept=".pdf,.word" :file-list="fileList" :auto-upload="false">
19
-                <el-button size="small" type="primary">点击上传</el-button>
24
+                :on-change="handleChange" accept=".doc,.docx" :file-list="fileList" :auto-upload="false">
25
+                <el-button size="small" type="primary">选择模板文件</el-button>
20 26
             </el-upload>
21 27
             <div slot="footer" class="dialog-footer">
22 28
                 <el-button @click="cancel" class="endbutton"><span>取 消</span></el-button>
@@ -31,12 +37,14 @@ import {
31 37
     deptIdentifyList,
32 38
 } from "@/api/officialSeal/officialSeal.js";
33 39
 export default {
34
-    props: ["uploadVisable", "uploadData","queryParams"],
40
+    props: ["uploadVisable", "uploadData", "queryParams"],
41
+    dicts: ["template_type"],
35 42
     data() {
36 43
         return {
37 44
             fileList: [],
38 45
             data: [],
39
-            tempList:[],
46
+            tempList: [],
47
+            isImg:false,
40 48
             headers: {
41 49
                 Authorization: "Bearer " + getToken(),
42 50
             },
@@ -47,6 +55,12 @@ export default {
47 55
                 temName: [
48 56
                     { required: true, message: '请输入模板名称', trigger: 'blur' },
49 57
                 ],
58
+                temType: [
59
+                    { required: true, message: '请输入模板名称', trigger: 'blur' },
60
+                ],
61
+                identifyId: [
62
+                    { required: true, message: '请输入模板名称', trigger: 'blur' },
63
+                ]
50 64
             }
51 65
         };
52 66
     },
@@ -72,7 +86,7 @@ export default {
72 86
             this.$emit("cancelUpload");
73 87
         },
74 88
         handleChange(file, fileList) {
75
-            // this.imageUrl = URL.createObjectURL(file.raw);
89
+            this.isImg = file.type === '.doc' || '.docx'
76 90
         },
77 91
         UploadUrl() {
78 92
             return window.location.origin + "/API/deptIdentify/insertTemplate";
@@ -82,7 +96,11 @@ export default {
82 96
                 if (valid) {
83 97
                     this.filedata.identifyId = this.ruleForm.identifyId;
84 98
                     this.filedata.temName = this.ruleForm.temName;
85
-                    this.$refs.upload.submit();
99
+                    if (this.isImg) {
100
+                        this.$refs.upload.submit();
101
+                    }else{
102
+                        this.$message.error('只能上传doc,docx格式的文件')
103
+                    }
86 104
                 }
87 105
             });
88 106
         },
@@ -90,16 +108,13 @@ export default {
90 108
             console.log(file, fileList);
91 109
         },
92 110
         beforeUpload(file) {
93
-            const isImg = file.type === '.pdf' || '.word'
94
-            if (!isImg) {
95
-                this.$message.error('只能上传pdf,word格式的文件')
96
-            }
97
-            return isImg
111
+            // debugger
112
+            // this.isImg = file.type === '.doc' || '.docx'
98 113
         },
99 114
         handleSuccess() {
100 115
             this.$message.success('上传成功');
101 116
             this.$emit("cancelUpload");
102
-            this.$emit('getList',this.queryParams);
117
+            this.$emit('getList', this.queryParams);
103 118
         }
104 119
     },
105 120
 };

+ 17
- 15
src/views/officialSeal/components/editTemplate.vue Vedi File

@@ -7,13 +7,14 @@
7 7
                     <el-input v-model="ruleForm.temName"></el-input>
8 8
                 </el-form-item>
9 9
                 <el-form-item label="当前模板">
10
-                    <span style="color: #0e5ce3;cursor:pointer" @click="openUrl(editData.temOrigPath)">{{ editData.temOrigPath }}</span>
10
+                    <span style="color: #0e5ce3;cursor:pointer" @click="openUrl(editData.temOrigPath)">{{ editData.fileName
11
+                    }}</span>
11 12
                 </el-form-item>
12 13
             </el-form>
13 14
             <el-upload class="avatar-uploader" :before-upload="beforeUpload" :on-success="handleSuccess" ref="upload"
14 15
                 :action="UploadUrl()" :headers="headers" :data="filedata" :on-remove="handleRemove"
15
-                :on-change="handleChange" accept=".pdf,.word" :file-list="fileList" :auto-upload="false">
16
-                <el-button size="small" type="primary">点击上传</el-button>
16
+                :on-change="handleChange" accept=".doc,.docx" :file-list="fileList" :auto-upload="false">
17
+                <el-button size="small" type="primary">选择模板文件</el-button>
17 18
             </el-upload>
18 19
             <div slot="footer" class="dialog-footer">
19 20
                 <el-button @click="cancel" class="endbutton"><span>取 消</span></el-button>
@@ -25,7 +26,7 @@
25 26
 <script>
26 27
 import { getToken } from "@/utils/auth";
27 28
 export default {
28
-    props: ["editVisable", "editData","queryParams"],
29
+    props: ["editVisable", "editData", "queryParams"],
29 30
     data() {
30 31
         return {
31 32
             fileList: [],
@@ -33,6 +34,7 @@ export default {
33 34
             headers: {
34 35
                 Authorization: "Bearer " + getToken(),
35 36
             },
37
+            isImg: false,
36 38
             filedata: {},
37 39
             flagBtn: false,
38 40
             ruleForm: {},
@@ -55,7 +57,7 @@ export default {
55 57
     },
56 58
     methods: {
57 59
         // 打开链接
58
-        openUrl(urlTemp){
60
+        openUrl(urlTemp) {
59 61
             let headPath = window.location.origin + "/API/";
60 62
             window.open(headPath + urlTemp);
61 63
         },
@@ -63,7 +65,8 @@ export default {
63 65
             this.$emit("cancelEdit");
64 66
         },
65 67
         handleChange(file, fileList) {
66
-            // this.imageUrl = URL.createObjectURL(file.raw);
68
+            debugger
69
+            this.isImg = (file.type === '.doc' || file.type === '.docx') ? true:false;
67 70
         },
68 71
         UploadUrl() {
69 72
             return window.location.origin + "/API/deptIdentify/updateTemplate";
@@ -73,7 +76,11 @@ export default {
73 76
                 if (valid) {
74 77
                     this.filedata.id = this.editData.id;
75 78
                     this.filedata.temName = this.ruleForm.temName;
76
-                    this.$refs.upload.submit();
79
+                    if (this.isImg) {
80
+                        this.$refs.upload.submit();
81
+                    }else{
82
+                        this.$message.error('只能上传doc,docx格式的文件')
83
+                    }
77 84
                 }
78 85
             });
79 86
         },
@@ -81,20 +88,15 @@ export default {
81 88
             console.log(file, fileList);
82 89
         },
83 90
         beforeUpload(file) {
84
-            const isImg = file.type === '.pdf' || '.word'
85
-            if (!isImg) {
86
-                this.$message.error('只能上传pdf,word格式的文件')
87
-            }
88
-            return isImg
91
+            this.isImg = file.type === '.doc' || '.docx'
89 92
         },
90 93
         handleSuccess() {
91 94
             this.$message.success('上传成功');
92 95
             this.$emit("cancelEdit");
93
-            this.$emit('getList',this.queryParams);
96
+            this.$emit('getList', this.queryParams);
94 97
         }
95 98
     },
96 99
 };
97 100
 </script>
98 101
   
99
-<style lang="scss" scoped>
100
-</style>
102
+<style lang="scss" scoped></style>

+ 24
- 8
src/views/officialSeal/components/eidtInstitution.vue Vedi File

@@ -6,11 +6,17 @@
6 6
                 <el-form-item label="机构名称" prop="identifyName">
7 7
                     <el-input v-model="editForm.identifyName"></el-input>
8 8
                 </el-form-item>
9
-                <el-form-item label="经办人姓名" prop="operName">
10
-                    <el-input v-model="editForm.operName"></el-input>
9
+                <el-form-item label="机构邮箱" prop="identifyEmail">
10
+                    <el-input v-model="editForm.identifyEmail"></el-input>
11 11
                 </el-form-item>
12
-                <el-form-item label="经办人手机号" prop="operPhone">
13
-                    <el-input v-model="editForm.operPhone"></el-input>
12
+                <el-form-item label="机构信用代码" prop="creditCode">
13
+                    <el-input v-model="editForm.creditCode"></el-input>
14
+                </el-form-item>
15
+                <el-form-item label="法人姓名" prop="legalPerName">
16
+                    <el-input v-model="editForm.legalPerName"></el-input>
17
+                </el-form-item>
18
+                <el-form-item label="法人手机号" prop="legalPerPhone">
19
+                    <el-input v-model="editForm.legalPerPhone"></el-input>
14 20
                 </el-form-item>
15 21
             </el-form>
16 22
             <div slot="footer" class="dialog-footer">
@@ -34,13 +40,23 @@ export default {
34 40
                 identifyName: [
35 41
                     { required: true, message: '请输入机构名称', trigger: 'blur' },
36 42
                 ],
37
-                operName: [
38
-                    { required: true, message: '请输入经办人姓名', trigger: 'blur' },
43
+                creditCode: [
44
+                    { required: true, message: '请输入机构信用代码', trigger: 'blur' },
45
+                ],
46
+                legalPerName: [
47
+                    { required: true, message: '请输入法人姓名', trigger: 'blur' },
39 48
                 ],
40
-                operPhone: [
41
-                    { required: true, message: '请输入手机号', trigger: 'blur' },
49
+                legalPerPhone: [
50
+                    { required: true, message: '请输入法人手机号', trigger: 'blur' },
42 51
                     { pattern: /^[1][3,4,5,6,7,8,9][0-9]{9}$/, message: '请输入正确的手机号码', trigger: 'blur', },
43 52
                 ],
53
+                // operUserName: [
54
+                //     { required: true, message: '请输入经办人用户名', trigger: 'blur' },
55
+                // ],
56
+                identifyEmail: [
57
+                    { required: true, message: '请输入邮箱', trigger: 'blur' },
58
+                    { type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur' }
59
+                ]
44 60
             }
45 61
         };
46 62
     },

+ 6
- 2
src/views/officialSeal/components/uploadSeal.vue Vedi File

@@ -83,8 +83,12 @@ export default {
83 83
             }
84 84
             return isImg
85 85
         },
86
-        handleSuccess() {
87
-            this.$message.success('上传成功')
86
+        handleSuccess(response) {
87
+            if (response.code == 200) {
88
+                this.$message.success('上传成功')
89
+            } else {
90
+                this.$message.error(response.msg);
91
+            }
88 92
         }
89 93
     },
90 94
 };

+ 81
- 16
src/views/officialSeal/officialSealList.vue Vedi File

@@ -30,21 +30,41 @@
30 30
                         v-if="scope.row.identifyStatus == '已认证'" icon="el-icon-upload2">上传公章</el-button>
31 31
                     <el-button size="mini" @click="sealManage(scope.row)" type="text"
32 32
                         v-if="scope.row.identifyStatus == '已认证'" icon="el-icon-upload2">公章管理</el-button>
33
-                    <el-button size="mini" @click="sealDelete(scope.row)" type="text" icon="el-icon-delete">删除</el-button>
34
-                    <el-button size="mini" @click="eidtSeal(scope.row)" type="text"
35
-                        v-if="scope.row.identifyStatus == '未认证'" icon="el-icon-edit">修改</el-button>
33
+                    <el-button size="mini" @click="sealDelete(scope.row)" v-if="scope.row.identifyStatus == '未认证'"
34
+                        type="text" icon="el-icon-delete">删除</el-button>
35
+                    <el-button size="mini" @click="eidtSeal(scope.row)" type="text" v-if="scope.row.identifyStatus == '未认证'"
36
+                        icon="el-icon-edit">修改</el-button>
37
+                    <el-button size="mini" @click="selectUser(scope.row)" type="text"
38
+                        v-if="scope.row.identifyStatus == '未认证'" icon="el-icon-edit">选择经办人</el-button>
36 39
                 </template>
37 40
             </el-table-column>
38 41
         </el-table>
39 42
         <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
40 43
             @pagination="getList(queryParams)" />
41
-        <addInstitution :operateVisable="operateVisable" @cancelFilingreview="cancelFilingreview" :queryParams="queryParams" @getList="getList">
44
+        <addInstitution :operateVisable="operateVisable" @cancelFilingreview="cancelFilingreview" :queryParams="queryParams"
45
+            @getList="getList">
42 46
         </addInstitution>
43
-        <uploadSeal :uploadVisable="uploadVisable" @cancelUpload="cancelUpload" :queryParams="queryParams" :uploadData="uploadData" @getList="getList">
47
+        <uploadSeal :uploadVisable="uploadVisable" @cancelUpload="cancelUpload" :queryParams="queryParams"
48
+            :uploadData="uploadData" @getList="getList">
44 49
         </uploadSeal>
45 50
         <sealManage :sealVisable="sealVisable" @cancelSeal="cancelSeal" :queryParams="queryParams" :sealData="sealData">
46 51
         </sealManage>
47
-        <eidtInstitution :editVisable="editVisable" @cancelEdit="cancelEdit" :queryParams="queryParams" @getList="getList" :editData="editData"></eidtInstitution>
52
+        <eidtInstitution :editVisable="editVisable" @cancelEdit="cancelEdit" :queryParams="queryParams" @getList="getList"
53
+            :editData="editData"></eidtInstitution>
54
+        <el-dialog title="选择经办人" :visible.sync="selectVisible" width="600px" @close="selectClose">
55
+            <el-form :model="slectFrom" :rules="rules" ref="slectFrom" label-width="80px">
56
+                <el-form-item label="经办人" prop="id">
57
+                    <el-select v-model="slectFrom.id" clearable placeholder="请选择">
58
+                        <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
59
+                        </el-option>
60
+                    </el-select>
61
+                </el-form-item>
62
+            </el-form>
63
+            <div slot="footer" class="dialog-footer">
64
+                <el-button @click="selectClose" class="endbutton"><span>取 消</span></el-button>
65
+                <el-button type="primary" @click="submitUser" class="endbutton"><span>确认</span></el-button>
66
+            </div>
67
+        </el-dialog>
48 68
     </div>
49 69
 </template>
50 70
   
@@ -53,7 +73,9 @@ import {
53 73
     deptIdentifyList,
54 74
     enableDept,
55 75
     selectDeptIndefiUrl,
56
-    deleteSeal
76
+    deleteSeal,
77
+    selectPostUserByDeptId,
78
+    bindHandler
57 79
 } from "@/api/officialSeal/officialSeal.js";
58 80
 
59 81
 import addInstitution from "./components/addInstitution";
@@ -88,25 +110,62 @@ export default {
88 110
             sealVisable: false,//公章列表弹窗
89 111
             uploadData: {},
90 112
             sealData: {},
91
-            editVisable:false,
92
-            editData:{}
113
+            editVisable: false,
114
+            editData: {},
115
+            selectVisible: false,
116
+            slectFrom: {},
117
+            userList: [],
118
+            templateId: null,
119
+            rules: {
120
+                id: [
121
+                    { required: true, message: '请选择经办人', trigger: 'blur' },
122
+                ]
123
+            }
93 124
         };
94 125
     },
95 126
     created() {
96 127
         this.getList(this.queryParams)
97 128
     },
98 129
     methods: {
130
+        // 选择经办人
131
+        selectUser(row) {
132
+            this.selectVisible = true;
133
+            this.templateId = row.id;
134
+            selectPostUserByDeptId({ id: row.id }).then(res => {
135
+                this.userList = res.data;
136
+                if (row.userId) {
137
+                    this.slectFrom.id = row.userId;
138
+                } else {
139
+                    this.slectFrom = {};
140
+                }
141
+            })
142
+        },
143
+        // 确认经办人
144
+        submitUser() {
145
+            this.$refs['slectFrom'].validate((valid) => {
146
+                if (valid) {
147
+                    bindHandler({ id: this.templateId, userId: this.slectFrom.id }).then(res => {
148
+                        this.$modal.msgSuccess("选择成功");
149
+                        this.selectVisible = false;
150
+                        this.getList(this.queryParams);
151
+                    })
152
+                }
153
+            })
154
+        },
155
+        selectClose() {
156
+            this.selectVisible = false;
157
+        },
99 158
         // 删除
100
-        sealDelete(row){
159
+        sealDelete(row) {
101 160
             this.$modal
102 161
                 .confirm("是否更改状态")
103 162
                 .then((res) => {
104
-                    this.deleteSealFn({id:row.id})
163
+                    this.deleteSealFn({ id: row.id })
105 164
                 })
106 165
         },
107 166
         // 删除接口
108
-        deleteSealFn(data){
109
-            deleteSeal(data).then(res=>{
167
+        deleteSealFn(data) {
168
+            deleteSeal(data).then(res => {
110 169
                 this.$modal.msgSuccess("删除成功!");
111 170
                 this.getList(this.queryParams);
112 171
             })
@@ -135,11 +194,11 @@ export default {
135 194
             this.operateVisable = true;
136 195
         },
137 196
         // 编辑
138
-        eidtSeal(row){
197
+        eidtSeal(row) {
139 198
             this.editVisable = true;
140 199
             this.editData = row;
141 200
         },
142
-        cancelEdit(){
201
+        cancelEdit() {
143 202
             this.editVisable = false;
144 203
         },
145 204
         // 启用认证按钮
@@ -160,6 +219,10 @@ export default {
160 219
         },
161 220
         // 认证按钮
162 221
         DeptIndefiUrl(row) {
222
+            if (!row.operName || !row.legalPerPhone) {
223
+                this.$modal.msgError("当前没有经办人 ,无法认证!!");
224
+                return
225
+            }
163 226
             this.$modal.confirm('是否认证?')
164 227
                 .then(function () {
165 228
                     selectDeptIndefiUrl({ id: row.id }).then(res => {
@@ -194,7 +257,9 @@ export default {
194 257
                 this.dataList.forEach(item => {
195 258
                     if (item.identifyStatus == 0 || item.identifyStatus == null) {
196 259
                         item.identifyStatus = '未认证'
197
-                    } else {
260
+                    } else if (item.identifyStatus == 2) {
261
+                        item.identifyStatus = '认证中'
262
+                    } else if (item.identifyStatus == 1) {
198 263
                         item.identifyStatus = '已认证'
199 264
                     }
200 265
                     if (item.isUse == 0 || item.isUse == null) {