调解系统PC端服务

addCase.vue 25KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. <template>
  2. <div>
  3. <el-dialog :title="title" :visible="addVisable" v-if="addVisable" @close="cancel" width="1000px" center
  4. :distroy-on-close="true">
  5. <el-tabs v-model="activeName">
  6. <el-tab-pane label="案件信息" name="first">
  7. </el-tab-pane>
  8. <el-tab-pane label="证据清单" name="second" v-if="tabFlag">
  9. </el-tab-pane>
  10. </el-tabs>
  11. <el-form v-if="activeName == 'first'" :disabled="caseDisabled" :model="formData" ref="ruleForm" label-width="130px" class="demo-ruleForm">
  12. <el-row>
  13. <div style="display: inline-flex">
  14. <div class="infoIcon"></div>
  15. <div class="caseInfo">案件信息:</div>
  16. </div>
  17. <el-divider></el-divider>
  18. <el-col :span="24">
  19. <el-form-item label="申请人调解请求" prop="arbitratClaims" :rules="[
  20. {
  21. required: true,
  22. message: '申请人调解请求不能为空',
  23. trigger: 'blur',
  24. },
  25. ]">
  26. <el-input v-model="formData.arbitratClaims" placeholder="请输入申请人调解诉求" type="textarea"
  27. :autosize="{ minRows: 4, maxRows: 8 }" />
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="24">
  31. <el-form-item label="事实和理由" prop="facts" :rules="[
  32. {
  33. required: true,
  34. message: '事实和理由不能为空',
  35. trigger: 'blur',
  36. },
  37. ]">
  38. <el-input v-model="formData.facts" placeholder="请输入事实和理由" type="textarea"
  39. :autosize="{ minRows: 4, maxRows: 8 }" />
  40. </el-form-item>
  41. </el-col>
  42. <!-- <el-col :span="24">
  43. <el-form-item label="申请人请求仲裁庭裁决" prop="requestRule">
  44. <el-input v-model="formData.requestRule" placeholder="请输入申请人请求仲裁庭裁决" type="textarea"
  45. :autosize="{ minRows: 4, maxRows: 8 }" />
  46. </el-form-item>
  47. </el-col> -->
  48. <!-- <el-col :span="24">
  49. <el-form-item label="案件描述" prop="caseDescribe">
  50. <el-input v-model="formData.caseDescribe" placeholder="请输入案件描述" type="textarea"
  51. :autosize="{ minRows: 4, maxRows: 8 }" />
  52. </el-form-item>
  53. </el-col> -->
  54. <el-col :span="12">
  55. <el-form-item label="案件标的" prop="caseSubjectAmount" :rules="[
  56. {
  57. required: true,
  58. message: '案件标的不能为空',
  59. trigger: 'blur',
  60. },
  61. ]">
  62. <el-input v-model="formData.caseSubjectAmount" placeholder="请输入案件标的" />
  63. </el-form-item>
  64. </el-col>
  65. <el-col :span="24">
  66. <el-form-item label="调解模板" prop="templateId" :rules="[
  67. {
  68. required: true,
  69. message: '调解模板',
  70. trigger: 'blur',
  71. },
  72. ]">
  73. <el-select placeholder="请选择调解模板" v-model="formData.templateId">
  74. <el-option v-for="item in templateList" :label="item.temName" :key="item.id"
  75. :value="item.id"></el-option>
  76. </el-select>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="12">
  80. <el-form-item label="申请人案件证据资料上传:" prop="applicantEvidence">
  81. <el-upload class="upload-demo" ref="fileupload" accept=".png,.jpg,.doc,.docx,.txt,.pdf"
  82. :action="UploadUrl()" :on-success="handlSuccess" :on-remove="handleRemove"
  83. :on-preview="handlePreview" :before-remove="beforeRemove" :data="filedata"
  84. :headers="headers" multiple :limit="50" :on-exceed="handleExceed" :file-list="fileList">
  85. <el-button size="small" type="primary">点击上传</el-button>
  86. <div slot="tip" class="el-upload__tip">
  87. 文件支持上传.jpg,png,.doc,docx,.txt,.pdf文件
  88. </div>
  89. </el-upload>
  90. </el-form-item>
  91. </el-col>
  92. <el-col :span="24" v-if="modelFlag">
  93. <el-form-item label="证据:">
  94. <div v-for="(item, index) in formData.caseAttachList" :key="index" v-if="item.annexType==2">
  95. <div style="color: blue;cursor: pointer;" @click="fileDetil(item.annexPath)">{{
  96. item.annexName }}</div>
  97. </div>
  98. </el-form-item>
  99. </el-col>
  100. <el-col :span="24" v-if="modelFlag">
  101. <el-form-item label="调解书:">
  102. <div v-for="(item, index) in formData.caseAttachList" :key="index" v-if="item.annexType==7">
  103. <div style="color: blue;cursor: pointer;" @click="fileDetil(item.annexPath)">{{
  104. item.annexName }}</div>
  105. </div>
  106. </el-form-item>
  107. </el-col>
  108. <el-col :span="24">
  109. <div style="display: inline-flex">
  110. <div class="infoIcon"></div>
  111. <div class="caseInfo">双方信息:</div>
  112. </div>
  113. <el-divider></el-divider>
  114. </el-col>
  115. <el-col :span="12">
  116. <el-form-item label="申请机构名称" prop="affiliate.applicationName" :rules="[
  117. {
  118. required: true,
  119. message: '申请机构名称不能为空',
  120. trigger: 'blur',
  121. },
  122. ]">
  123. <el-input v-model="formData.affiliate.applicationName" placeholder="请输入申请机构名称" />
  124. </el-form-item>
  125. </el-col>
  126. <el-col :span="12">
  127. <el-form-item label="统一社会信用代码" prop="affiliate.creditCode" :rules="[
  128. {
  129. required: true,
  130. message: '统一社会信用代码不能为空',
  131. trigger: 'blur',
  132. },
  133. ]">
  134. <el-input v-model="formData.affiliate.creditCode" placeholder="请输入统一社会信用代码" />
  135. </el-form-item>
  136. </el-col>
  137. <el-col :span="12">
  138. <el-form-item label="法定代表人" prop="affiliate.compLegalPerson" :rules="[
  139. {
  140. required: true,
  141. message: '法定代表人不能为空',
  142. trigger: 'blur',
  143. },
  144. ]">
  145. <el-input v-model="formData.affiliate.compLegalPerson" placeholder="请输入法定代表人" />
  146. </el-form-item>
  147. </el-col>
  148. <el-col :span="12">
  149. <el-form-item label="申请人住所" prop="affiliate.applicantHome" :rules="[
  150. {
  151. required: true,
  152. message: '申请人住所不能为空',
  153. trigger: 'blur',
  154. },
  155. ]">
  156. <el-input v-model="formData.affiliate.applicantHome" placeholder="请输入申请人住所" />
  157. </el-form-item>
  158. </el-col>
  159. <el-col :span="12">
  160. <el-form-item label="申请人联系地址" prop="affiliate.applicantAddress" :rules="[
  161. {
  162. required: true,
  163. message: '申请人联系地址不能为空',
  164. trigger: 'blur',
  165. },
  166. ]">
  167. <el-input v-model="formData.affiliate.applicantAddress" placeholder="请输入申请人联系地址" />
  168. </el-form-item>
  169. </el-col>
  170. <el-col :span="12">
  171. <el-form-item label="代理人联系电话" prop="affiliate.contactTelphoneAgent" :rules="[
  172. {
  173. required: true,
  174. message: '代理人联系电话不能为空',
  175. trigger: 'blur',
  176. },
  177. {
  178. pattern: /^[1][3,4,5,6,7,8,9][0-9]{9}$/,
  179. message: '请输入正确的手机号码',
  180. trigger: 'blur',
  181. },
  182. ]">
  183. <el-input v-model="formData.affiliate.contactTelphoneAgent" placeholder="请输入代理人联系电话" />
  184. </el-form-item>
  185. </el-col>
  186. <el-col :span="12">
  187. <el-form-item label="委托代理人姓名" prop="affiliate.nameAgent" :rules="[
  188. {
  189. required: true,
  190. message: '委托代理人姓名不能为空',
  191. trigger: 'blur',
  192. },
  193. ]">
  194. <el-input v-model="formData.affiliate.nameAgent" placeholder="请输入委托代理人姓名" />
  195. </el-form-item>
  196. </el-col>
  197. <el-col :span="12">
  198. <el-form-item label="代理人邮箱" prop="affiliate.agentEmail" :rules="[
  199. {
  200. required: true,
  201. message: '代理人邮箱不能为空',
  202. trigger: 'blur',
  203. },
  204. {
  205. pattern:
  206. /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/,
  207. message: '请输入正确的邮箱地址',
  208. trigger: 'blur',
  209. },
  210. ]">
  211. <el-input v-model="formData.affiliate.agentEmail" placeholder="请输入代理人邮箱" />
  212. </el-form-item>
  213. </el-col>
  214. <el-col :span="12">
  215. <el-form-item label="被申请人姓名" prop="affiliate.respondentName" :rules="[
  216. {
  217. required: true,
  218. message: '被申请人姓名不能为空',
  219. trigger: 'blur',
  220. },
  221. ]">
  222. <el-input v-model="formData.affiliate.respondentName" placeholder="请输入被申请人姓名" />
  223. </el-form-item>
  224. </el-col>
  225. <el-col :span="12">
  226. <el-form-item label="被申请人联系电话" prop="affiliate.respondentPhone" :rules="[
  227. {
  228. required: true,
  229. message: '被申请人联系电话不能为空',
  230. trigger: 'blur',
  231. },
  232. {
  233. pattern: /^[1][3,4,5,6,7,8,9][0-9]{9}$/,
  234. message: '请输入正确的手机号码',
  235. trigger: 'blur',
  236. },
  237. ]">
  238. <el-input v-model="formData.affiliate.respondentPhone" placeholder="请输入被申请人联系电话" />
  239. </el-form-item>
  240. </el-col>
  241. <el-col :span="12">
  242. <el-form-item label="被申请人身份证号" prop="affiliate.respondentIdentityNum" :rules="[
  243. {
  244. required: true,
  245. message: '被申请人身份证号不能为空',
  246. trigger: 'blur',
  247. },
  248. {
  249. pattern:
  250. /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
  251. message: '请输入正确的身份证号码',
  252. trigger: 'blur',
  253. },
  254. ]">
  255. <el-input v-model="formData.affiliate.respondentIdentityNum" placeholder="请输入被申请人身份证号" />
  256. </el-form-item>
  257. </el-col>
  258. <el-col :span="12">
  259. <el-form-item label="被申请人性别:" prop="affiliate.respondentSex" :rules="[
  260. {
  261. required: true,
  262. message: '请选择性别'
  263. },
  264. ]">
  265. <el-radio-group v-model="formData.affiliate.respondentSex">
  266. <el-radio :label="0">男</el-radio>
  267. <el-radio :label="1">女</el-radio>
  268. </el-radio-group>
  269. </el-form-item>
  270. </el-col>
  271. <el-col :span="12">
  272. <el-form-item label="被申请人出生年月日:" prop="affiliate.respondentBirth" :rules="[
  273. {
  274. required: true,
  275. message: '被申请人出生年月日不能为空',
  276. trigger: 'blur',
  277. },
  278. ]">
  279. <el-date-picker v-model="formData.affiliate.respondentBirth" type="date"
  280. placeholder="被申请人出生年月日">
  281. </el-date-picker>
  282. </el-form-item>
  283. </el-col>
  284. <el-col :span="12">
  285. <el-form-item label="被申请人申请人住所" prop="affiliate.respondentHome" :rules="[
  286. {
  287. required: true,
  288. message: '被申请人申请人住所不能为空',
  289. trigger: 'blur',
  290. },
  291. ]">
  292. <el-input v-model="formData.affiliate.respondentHome" placeholder="请输入被申请人申请人住所" />
  293. </el-form-item>
  294. </el-col>
  295. <el-col :span="12">
  296. <el-form-item label="被申请人邮箱" prop="affiliate.respondentEmail" :rules="[
  297. {
  298. required: true,
  299. message: '代理人邮箱不能为空',
  300. trigger: 'blur',
  301. },
  302. {
  303. pattern:
  304. /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/,
  305. message: '请输入正确的邮箱地址',
  306. trigger: 'blur',
  307. },
  308. ]">
  309. <el-input v-model="formData.affiliate.respondentEmail" placeholder="请输入被申请人邮箱" />
  310. </el-form-item>
  311. </el-col>
  312. </el-row>
  313. <el-col :span="24" v-if="modelFlag">
  314. <div style="display: inline-flex">
  315. <div class="infoIcon"></div>
  316. <div class="caseInfo">自定义规则内容</div>
  317. </div>
  318. <el-divider></el-divider>
  319. </el-col>
  320. <el-col :span="24" v-if="modelFlag">
  321. <el-form-item v-for="(item) in formData.columnValueList" :label="item.name" :key="item.id">
  322. <el-input type="textarea" v-model="item.value"></el-input>
  323. </el-form-item>
  324. </el-col>
  325. </el-form>
  326. <div v-if="activeName == 'second'">
  327. <el-card class="box-card" style="margin-bottom: 30px;">
  328. <div slot="header" class="clearfix">
  329. <span>申请人证据清单</span>
  330. </div>
  331. <div v-for="(item, index) in applicantEvidence" :key="index" class="text item"
  332. style="color: blue;cursor: pointer;" @click="toPreview(item.annexPath)">
  333. {{ item.annexName }}
  334. </div>
  335. </el-card>
  336. <el-card class="box-card">
  337. <div slot="header" class="clearfix">
  338. <span>被申请人证据清单</span>
  339. </div>
  340. <div v-for="(item, index) in respondentEvidence" :key="index" class="text item"
  341. style="color: blue;cursor: pointer;" @click="toPreview(item.annexPath)">
  342. {{ item.annexName }}
  343. </div>
  344. </el-card>
  345. </div>
  346. <div slot="footer" class="dialog-footer">
  347. <el-button @click="cancel" class="endbutton"><span>取 消</span></el-button>
  348. <el-button type="primary" @click="submitForm" class="endbutton"><span>确认</span></el-button>
  349. </div>
  350. </el-dialog>
  351. </div>
  352. </template>
  353. <script>
  354. import {
  355. caseApplicationInsert,
  356. caseApplicationSelectById,
  357. updateComfire
  358. } from "@/api/caseManagement/caseManagement.js";
  359. import {
  360. getTemplate,
  361. } from "@/api/officialSeal/officialSeal.js";
  362. import { getToken } from "@/utils/auth";
  363. export default {
  364. props: ["addVisable", "queryParams", "caseData", "caseDisabled","tabFlag","addModifyData"],
  365. dicts: ["case_built_type"],
  366. data() {
  367. return {
  368. activeName: 'first',
  369. title: "新增案件",
  370. formData: {
  371. affiliate: {
  372. respondentSex: 0
  373. },
  374. columnValueList: [],
  375. caseAttachList: []
  376. },
  377. templateList: [],
  378. modelFlag: false,
  379. fileURL: window.location.origin + "/API",
  380. fileList: [],
  381. filedata: {
  382. annexType: 2,
  383. },
  384. headers: {
  385. Authorization: "Bearer " + getToken(),
  386. },
  387. applicantEvidence: [],//申请人证据
  388. respondentEvidence: [],//被申请人证据
  389. };
  390. },
  391. watch: {
  392. caseData: {
  393. deep: true,
  394. handler(val) {
  395. this.getTemplateFn();
  396. if (val.id && !val.flag) {
  397. this.modelFlag = true;
  398. this.title = '修改案件';
  399. this.caseApplicationSelectByIdFn(val.id)
  400. } else if (!val.id && !val.flag) {
  401. this.modelFlag = false;
  402. this.title = '新增案件';
  403. this.formData = {
  404. affiliate: {
  405. respondentSex: 0
  406. },
  407. columnValueList: [],
  408. caseAttachList: []
  409. };
  410. } else if (val.id && val.flag == 1) {
  411. this.modelFlag = true;
  412. this.title = '案件详情';
  413. this.caseApplicationSelectByIdFn(val.id);
  414. }
  415. },
  416. },
  417. addVisable(val){
  418. if(val){
  419. this.activeName = 'first';
  420. }
  421. }
  422. },
  423. created() {
  424. },
  425. methods: {
  426. /** 根据案件id获取对应信息 */
  427. caseApplicationSelectByIdFn(data) {
  428. this.applicantEvidence = [];
  429. this.respondentEvidence = [];
  430. caseApplicationSelectById({ id: data }).then((res => {
  431. this.formData = res.data;
  432. console.log(this.formData)
  433. this.formData.caseAttachList.forEach(item => {
  434. if (item.annexType == 2) {
  435. this.applicantEvidence.push(item)
  436. } else if (item.annexType == 6) {
  437. this.respondentEvidence.push(item)
  438. }
  439. })
  440. }))
  441. },
  442. // 新增案件
  443. insertFn(data) {
  444. caseApplicationInsert(data).then(res => {
  445. this.$modal.msgSuccess("新增成功!");
  446. this.$emit("cancelCaseAdd");
  447. this.$emit('getList', this.queryParams);
  448. })
  449. },
  450. // 修改确定
  451. modifyData(data) {
  452. updateComfire(data).then(res => {
  453. this.$modal.msgSuccess("修改成功!");
  454. this.$emit("cancelCaseAdd");
  455. this.$emit('getList', this.queryParams);
  456. })
  457. },
  458. /** 获取裁决书模板 */
  459. getTemplateFn(data) {
  460. getTemplate(data).then(res => {
  461. console.log(res)
  462. this.templateList = res.rows;
  463. })
  464. },
  465. /** 查看证据 */
  466. fileDetil(val) {
  467. window.open(this.fileURL + val)
  468. },
  469. /** 查看证据 */
  470. toPreview(val) {
  471. window.open(this.fileURL + val)
  472. },
  473. /** 文件上传地址 */
  474. UploadUrl() {
  475. return window.location.origin + "/API/common/upload";
  476. },
  477. /**文件上传成功*/
  478. handlSuccess(res, file) {
  479. this.formData.caseAttachList.push(
  480. {
  481. annexId: res.annexId,
  482. }
  483. );
  484. },
  485. /**文件超出个数限制时的钩子*/
  486. handleExceed(files, fileList) {
  487. this.$message.warning(
  488. `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length
  489. } 个文件`
  490. );
  491. },
  492. // 删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。
  493. beforeRemove(file, fileList) {
  494. return this.$confirm(`确定移除 ${file.name}?`);
  495. },
  496. handleRemove(file, fileList) {
  497. this.caseAttachListArr = this.caseAttachListArr.filter(item => item.annexId != file.annexId)
  498. },
  499. handlePreview(file) {
  500. window.open(
  501. window.location.origin + "/API" + file.certificatePath,
  502. "_blank"
  503. );
  504. },
  505. // 提交form表单
  506. submitForm() {
  507. this.$refs['ruleForm'].validate((valid) => {
  508. if (valid) {
  509. if(this.addModifyData == 1){
  510. this.modifyData(this.formData)
  511. }else if(this.addModifyData == 2){
  512. this.insertFn(this.formData)
  513. }
  514. }
  515. });
  516. },
  517. cancel() {
  518. this.$emit("cancelCaseAdd");
  519. },
  520. },
  521. };
  522. </script>
  523. <style lang="scss" scoped>
  524. .infoIcon {
  525. width: 4px;
  526. // height: 17px;
  527. background-color: #0072ff;
  528. margin-right: 5px;
  529. }
  530. .caseInfo {
  531. font-size: 17px;
  532. font-weight: 600;
  533. }
  534. ::v-deep .el-dialog__body {
  535. height: 700px !important;
  536. overflow: auto !important;
  537. }
  538. </style>