index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714
  1. <template>
  2. <div>
  3. <el-alert
  4. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  5. style="margin-bottom: 10px"
  6. title="请您完成资质填报,并等待通过审核后再进入系统,在此之前您可通过系统查看资质审批进度。"
  7. type="warning"
  8. show-icon
  9. effect="dark"
  10. :closable="false"
  11. >
  12. </el-alert>
  13. <!-- <div
  14. class="common-card"
  15. v-if="infoData.stas == 'B' || infoData.stas == '0'"
  16. >
  17. <h3>审批状态</h3>
  18. <yl-step></yl-step>
  19. </div> -->
  20. <el-form
  21. :model="infoData"
  22. ref="planForm"
  23. label-width="150px"
  24. class="grid-form-class"
  25. >
  26. <div class="common-card">
  27. <h3>工商信息</h3>
  28. <div class="right-type" style="color: #3c64dc; font-weight: 800">
  29. {{ $store.state.user.username }}
  30. </div>
  31. <div class="form-body">
  32. <div class="flex-css">
  33. <el-form-item
  34. label="统一社会信用代码"
  35. prop="uscc"
  36. :rules="rules.required"
  37. >
  38. <el-input
  39. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  40. v-model="infoData.uscc"
  41. placeholder="请输入统一社会信用代码"
  42. ></el-input>
  43. <div class="content" v-else>
  44. {{ infoData.uscc }}
  45. </div>
  46. </el-form-item>
  47. <el-form-item
  48. label="法定代表人"
  49. prop="legrepName"
  50. :rules="rules.required"
  51. >
  52. <el-input
  53. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  54. v-model="infoData.legrepName"
  55. placeholder="请输入法定代表人"
  56. ></el-input>
  57. <div class="content" v-else>
  58. {{ infoData.legrepName }}
  59. </div>
  60. </el-form-item>
  61. <el-form-item
  62. label="登记状态"
  63. prop="regStas"
  64. :rules="rules.required"
  65. >
  66. <el-input
  67. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  68. v-model="infoData.regStas"
  69. placeholder="请输入登记状态"
  70. ></el-input>
  71. <div class="content" v-else>
  72. {{ infoData.regStas }}
  73. </div>
  74. </el-form-item>
  75. </div>
  76. <div class="flex-css">
  77. <el-form-item
  78. label="成立日期"
  79. prop="estbdat"
  80. :rules="rules.dateRequired"
  81. >
  82. <el-date-picker
  83. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  84. v-model="infoData.estbdat"
  85. type="date"
  86. placeholder="请选择成立日期"
  87. value-format="yyyy-MM-dd"
  88. >
  89. </el-date-picker>
  90. <div class="content" v-else>
  91. {{ infoData.estbdat }}
  92. </div>
  93. </el-form-item>
  94. <el-form-item
  95. label="国标行业"
  96. prop="natstdIndu"
  97. :rules="rules.required"
  98. >
  99. <el-input
  100. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  101. v-model="infoData.natstdIndu"
  102. placeholder="请输入国标行业"
  103. ></el-input>
  104. <div class="content" v-else>
  105. {{ infoData.natstdIndu }}
  106. </div>
  107. </el-form-item>
  108. <el-form-item
  109. label="注册资本"
  110. prop="regCapt"
  111. :rules="rules.required"
  112. >
  113. <el-input
  114. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  115. v-model="infoData.regCapt"
  116. placeholder="请输入注册资本"
  117. ></el-input>
  118. <div class="content" v-else>
  119. {{ infoData.regCapt }}
  120. </div>
  121. </el-form-item>
  122. </div>
  123. <div class="flex-css">
  124. <el-form-item
  125. label="实缴资本"
  126. prop="arrCapt"
  127. :rules="rules.required"
  128. >
  129. <el-input
  130. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  131. v-model="infoData.arrCapt"
  132. placeholder="请输入实缴资本"
  133. ></el-input>
  134. <div class="content" v-else>
  135. {{ infoData.arrCapt }}
  136. </div>
  137. </el-form-item>
  138. <el-form-item
  139. label="组织机构代码"
  140. prop="orgCode"
  141. :rules="rules.required"
  142. >
  143. <el-input
  144. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  145. v-model="infoData.orgCode"
  146. placeholder="请输入组织机构代码"
  147. ></el-input>
  148. <div class="content" v-else>
  149. {{ infoData.orgCode }}
  150. </div>
  151. </el-form-item>
  152. <el-form-item
  153. label="工商注册号"
  154. prop="bizRegno"
  155. :rules="rules.required"
  156. >
  157. <el-input
  158. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  159. v-model="infoData.bizRegno"
  160. placeholder="请输入工商注册号"
  161. ></el-input>
  162. <div class="content" v-else>
  163. {{ infoData.bizRegno }}
  164. </div>
  165. </el-form-item>
  166. </div>
  167. <div class="flex-css">
  168. <el-form-item
  169. label="纳税人识别号"
  170. prop="tin"
  171. :rules="rules.required"
  172. >
  173. <el-input
  174. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  175. v-model="infoData.tin"
  176. placeholder="请输入纳税人识别号"
  177. ></el-input>
  178. <div class="content" v-else>
  179. {{ infoData.tin }}
  180. </div>
  181. </el-form-item>
  182. <el-form-item
  183. label="企业类型"
  184. prop="entpType"
  185. :rules="rules.required"
  186. >
  187. <el-input
  188. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  189. v-model="infoData.entpType"
  190. placeholder="请输入企业类型"
  191. ></el-input>
  192. <div class="content" v-else>
  193. {{ infoData.entpType }}
  194. </div>
  195. </el-form-item>
  196. <el-form-item
  197. label="营业期限"
  198. prop="bizDdln"
  199. :rules="rules.dateRequired"
  200. >
  201. <el-date-picker
  202. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  203. v-model="infoData.bizDdln"
  204. type="datetime"
  205. placeholder="请选择营业期限"
  206. value-format="yyyy-MM-dd HH:mm:ss"
  207. >
  208. </el-date-picker>
  209. <div class="content" v-else>
  210. {{ infoData.bizDdln }}
  211. </div>
  212. </el-form-item>
  213. </div>
  214. <div class="flex-css">
  215. <el-form-item
  216. label="纳税人资质"
  217. prop="txperCert"
  218. :rules="rules.required"
  219. >
  220. <el-input
  221. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  222. v-model="infoData.txperCert"
  223. placeholder="请输入纳税人资质"
  224. ></el-input>
  225. <div class="content" v-else>
  226. {{ infoData.txperCert }}
  227. </div>
  228. </el-form-item>
  229. <el-form-item label="所属地区" prop="regn" :rules="rules.required">
  230. <el-input
  231. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  232. v-model="infoData.regn"
  233. placeholder="请输入所属地区"
  234. ></el-input>
  235. <div class="content" v-else>
  236. {{ infoData.regn }}
  237. </div>
  238. </el-form-item>
  239. <el-form-item
  240. label="登记机关"
  241. prop="regOrg"
  242. :rules="rules.required"
  243. >
  244. <el-input
  245. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  246. v-model="infoData.regOrg"
  247. placeholder="请输入登记机关"
  248. ></el-input>
  249. <div class="content" v-else>
  250. {{ infoData.regOrg }}
  251. </div>
  252. </el-form-item>
  253. </div>
  254. <div class="flex-css">
  255. <el-form-item
  256. label="注册地址"
  257. prop="regAddrName"
  258. :rules="rules.required"
  259. >
  260. <el-input
  261. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  262. v-model="infoData.regAddrName"
  263. placeholder="请输入注册地址"
  264. ></el-input>
  265. <div class="content" v-else>
  266. {{ infoData.regAddrName }}
  267. </div>
  268. </el-form-item>
  269. </div>
  270. <div class="flex-css">
  271. <el-form-item
  272. label="经营范围"
  273. prop="bizScp"
  274. :rules="rules.required"
  275. >
  276. <el-input
  277. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  278. type="textarea"
  279. v-model="infoData.bizScp"
  280. placeholder="请输入经营范围"
  281. ></el-input>
  282. <div class="content" v-else>
  283. {{ infoData.bizScp }}
  284. </div>
  285. </el-form-item>
  286. </div>
  287. </div>
  288. </div>
  289. <div class="common-card">
  290. <h3>联系人信息</h3>
  291. <div class="form-body">
  292. <div class="flex-css">
  293. <el-form-item
  294. label="联系人"
  295. prop="conerName"
  296. :rules="rules.required"
  297. >
  298. <el-input
  299. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  300. v-model="infoData.conerName"
  301. placeholder="请输入联系人"
  302. ></el-input>
  303. <div class="content" v-else>
  304. {{ infoData.conerName }}
  305. </div>
  306. </el-form-item>
  307. <el-form-item label="职务" prop="duty" :rules="rules.required">
  308. <el-input
  309. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  310. v-model="infoData.duty"
  311. placeholder="请输入职务"
  312. ></el-input>
  313. <div class="content" v-else>
  314. {{ infoData.duty }}
  315. </div>
  316. </el-form-item>
  317. </div>
  318. <div class="flex-css">
  319. <el-form-item label="联系电话" prop="tel" :rules="rules.phoneNum">
  320. <el-input
  321. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  322. v-model="infoData.tel"
  323. placeholder="请输入联系电话"
  324. ></el-input>
  325. <div class="content" v-else>
  326. {{ infoData.tel }}
  327. </div>
  328. </el-form-item>
  329. <el-form-item label="电子邮箱" prop="email" :rules="rules.email">
  330. <el-input
  331. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  332. v-model="infoData.email"
  333. placeholder="请输入电子邮箱"
  334. ></el-input>
  335. <div class="content" v-else>
  336. {{ infoData.email }}
  337. </div>
  338. </el-form-item>
  339. </div>
  340. </div>
  341. </div>
  342. </el-form>
  343. <!--列表-->
  344. <div class="common-card">
  345. <h3>经营资质</h3>
  346. <div class="right-type">
  347. <el-button
  348. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  349. class="lake-Blue"
  350. type="primary"
  351. icon="el-icon-plus"
  352. @click="handleAddOrEdit('create')"
  353. >新增
  354. </el-button>
  355. </div>
  356. <el-table
  357. v-loading="listLoading"
  358. element-loading-text="加载中"
  359. :data="infoData.quaList"
  360. fit
  361. stripe
  362. border
  363. >
  364. <template slot="empty">
  365. <img src="@/assets/nopage.png" alt />
  366. <p>暂无数据</p>
  367. </template>
  368. <el-table-column
  369. fixed
  370. type="index"
  371. label="序号"
  372. width="60"
  373. ></el-table-column>
  374. <el-table-column label="证书名称" prop="quaName" />
  375. <el-table-column label="证书编码" prop="quaCode" width="300" />
  376. <el-table-column label="发证日期" prop="issuDate" width="150" />
  377. <el-table-column label="截止日期" prop="endDate" width="150" />
  378. <el-table-column label="资质文件" prop="fileId" width="150">
  379. <template slot-scope="scope">
  380. <yl-upload
  381. :fileId="scope.row.fileId"
  382. readonly
  383. v-if="scope.row.fileId"
  384. >
  385. </yl-upload>
  386. </template>
  387. </el-table-column>
  388. <el-table-column label="备注" prop="memo" width="150" />
  389. <el-table-column
  390. label="操作"
  391. width="150"
  392. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  393. >
  394. <template slot-scope="scope">
  395. <el-button
  396. class="cyan"
  397. type="text"
  398. @click="handleAddOrEdit('update', scope.row, scope.$index)"
  399. >编辑</el-button
  400. >
  401. <el-button class="red" type="text" @click="handleDelete(scope.row)"
  402. >删除</el-button
  403. >
  404. </template>
  405. </el-table-column>
  406. </el-table>
  407. </div>
  408. <div
  409. class="foot-button"
  410. v-if="infoData.stas == 'A' || infoData.stas == 'R'"
  411. >
  412. <el-button type="success" @click="handleSave" :loading="saveLoad"
  413. >保存</el-button
  414. >
  415. <el-button type="primary" @click="handleSubmit" :loading="submitLoad"
  416. >提交</el-button
  417. >
  418. </div>
  419. <!--添加/修改-->
  420. <el-dialog
  421. v-if="dialogFormVisible"
  422. :title="textMap[dialogStatus]"
  423. :visible.sync="dialogFormVisible"
  424. width="500px"
  425. >
  426. <el-form
  427. ref="dataForm"
  428. :model="temp"
  429. label-position="right"
  430. label-width="80px"
  431. >
  432. <el-form-item label="证书名称" prop="quaName" :rules="rules.required">
  433. <el-input v-model.trim="temp.quaName" />
  434. </el-form-item>
  435. <el-form-item label="证书编码" prop="quaCode" :rules="rules.required">
  436. <el-input
  437. :disabled="temp.type === 'updt'"
  438. v-model.trim="temp.quaCode"
  439. />
  440. </el-form-item>
  441. <el-form-item
  442. label="发证日期"
  443. prop="issuDate"
  444. :rules="rules.dateRequired"
  445. >
  446. <el-date-picker
  447. v-model="temp.issuDate"
  448. type="date"
  449. :picker-options="pickerStartOptions"
  450. placeholder="选择日期"
  451. value-format="yyyy-MM-dd"
  452. @change="timeSartAble"
  453. >
  454. </el-date-picker>
  455. </el-form-item>
  456. <el-form-item
  457. label="截止日期"
  458. prop="endDate"
  459. :rules="rules.dateRequired"
  460. >
  461. <el-date-picker
  462. v-model="temp.endDate"
  463. type="date"
  464. :picker-options="pickerEndOptions"
  465. placeholder="选择日期"
  466. value-format="yyyy-MM-dd"
  467. >
  468. </el-date-picker>
  469. </el-form-item>
  470. <el-form-item
  471. label="资质文件"
  472. prop="fileId"
  473. :rules="rules.uploadRequired"
  474. >
  475. <yl-upload :fileId="temp.fileId" @getUpload="getUpload">
  476. <template v-slot:dec
  477. >只能上传pdf文件</template
  478. >
  479. </yl-upload>
  480. </el-form-item>
  481. <el-form-item label="备注" prop="memo">
  482. <el-input v-model.trim="temp.memo" />
  483. </el-form-item>
  484. </el-form>
  485. <div slot="footer" class="dialog-footer">
  486. <el-button @click="dialogFormVisible = false">取消</el-button>
  487. <el-button type="primary" @click="commitData()"> 确认 </el-button>
  488. </div>
  489. </el-dialog>
  490. </div>
  491. </template>
  492. <script>
  493. import ylStep from "@/components/yl-step";
  494. import ylUpload from "@/components/yl-upload";
  495. import {
  496. getUserSplerInfoB,
  497. saveSplerInfo,
  498. submitSplerInfo
  499. } from "@/api/qualityManagement-sup/information-filling";
  500. import rules from "@/utils/rules";
  501. export default {
  502. components: { ylUpload, ylStep },
  503. data() {
  504. return {
  505. saveLoad: false,
  506. submitLoad: false,
  507. rules,
  508. infoData: { quaList: [] },
  509. listLoading: false,
  510. planForm: {},
  511. dialogStatus: "",
  512. textMap: {
  513. update: "编辑",
  514. create: "添加"
  515. },
  516. pickerEndOptions: {
  517. disabledDate: date => {
  518. return date.getTime() < Date.now() - 24 * 60 * 60 * 1000;
  519. }
  520. },
  521. pickerStartOptions: {
  522. disabledDate: date => {
  523. return date.getTime() > Date.now() - 24 * 60 * 60 * 1000;
  524. }
  525. },
  526. dialogFormVisible: false,
  527. temp: {
  528. quaName: "",
  529. quaCode: "",
  530. issuDate: "",
  531. endDate: "",
  532. fileId: "",
  533. type: "",
  534. memo: ""
  535. }
  536. };
  537. },
  538. created() {
  539. this.getData();
  540. },
  541. methods: {
  542. //发证日期改变触发
  543. timeSartAble(tim) {},
  544. getUpload(id) {
  545. this.temp.fileId = id;
  546. if (id) {
  547. this.$refs.dataForm.clearValidate("fileId");
  548. } else {
  549. this.$refs.dataForm.validateField("fileId");
  550. }
  551. },
  552. //获取列表数据
  553. getData() {
  554. this.listLoading = true;
  555. getUserSplerInfoB()
  556. .then(response => {
  557. this.infoData = response.data;
  558. this.listLoading = false;
  559. })
  560. .catch(err => {
  561. this.listLoading = false;
  562. });
  563. },
  564. // 新增
  565. handleAddOrEdit(type, row, index) {
  566. if (type === "update") {
  567. this.temp = {
  568. index: index,
  569. quaName: row.quaName,
  570. quaCode: row.quaCode,
  571. issuDate: row.issuDate,
  572. endDate: row.endDate,
  573. fileId: row.fileId,
  574. type: "updt"
  575. };
  576. } else {
  577. this.temp = {
  578. quaName: "",
  579. quaCode: "",
  580. issuDate: "",
  581. endDate: "",
  582. fileId: "",
  583. type: "add"
  584. };
  585. }
  586. this.dialogStatus = type;
  587. this.dialogFormVisible = true;
  588. this.$nextTick(() => {
  589. this.$refs["dataForm"].clearValidate();
  590. });
  591. },
  592. //添加提交
  593. commitData() {
  594. if (this.temp.issuDate > this.temp.endDate) {
  595. this.$message({
  596. message: "发证日期不能大于截止日期",
  597. type: "warning"
  598. });
  599. return false;
  600. }
  601. if (this.temp.issuDate == this.temp.endDate) {
  602. this.$message({
  603. message: "发证日期不能等于截止日期",
  604. type: "warning"
  605. });
  606. return false;
  607. }
  608. if (this.temp.type === "add") {
  609. let flag = false;
  610. if (
  611. this.infoData &&
  612. this.infoData.quaList &&
  613. this.infoData.quaList.length > 0
  614. ) {
  615. this.infoData.quaList.forEach(item => {
  616. if (item.quaCode === this.temp.quaCode) {
  617. flag = true;
  618. }
  619. });
  620. if (flag) {
  621. this.$message({
  622. message: "证书编码不能为空且不能重复",
  623. type: "warning"
  624. });
  625. return false;
  626. }
  627. }
  628. }
  629. this.$refs["dataForm"].validate(valid => {
  630. if (valid) {
  631. if (this.temp.type === "add") {
  632. this.infoData.quaList.push(this.temp);
  633. this.$message.success("操作成功");
  634. } else {
  635. this.$set(this.infoData.quaList, this.temp.index, this.temp);
  636. this.$message.success("操作成功");
  637. }
  638. this.dialogFormVisible = false;
  639. }
  640. });
  641. },
  642. // 信息保存
  643. handleSave() {
  644. this.$refs["planForm"].validate(valid => {
  645. if (valid) {
  646. this.$confirm("确认保存", "提示", {
  647. confirmButtonText: "确定",
  648. cancelButtonText: "取消",
  649. type: "warning"
  650. })
  651. .then(() => {
  652. this.saveLoad = true;
  653. saveSplerInfo(this.infoData)
  654. .then(response => {
  655. this.$message({
  656. message: "保存成功",
  657. type: "success"
  658. });
  659. this.saveLoad = false;
  660. })
  661. .catch(() => {
  662. this.saveLoad = false;
  663. });
  664. })
  665. .catch(() => {});
  666. }
  667. });
  668. },
  669. // 整体提交
  670. handleSubmit() {
  671. this.$refs["planForm"].validate(valid => {
  672. if (valid) {
  673. this.$confirm("确认提交", "提示", {
  674. confirmButtonText: "确定",
  675. cancelButtonText: "取消",
  676. type: "warning"
  677. })
  678. .then(() => {
  679. this.submitLoad = true;
  680. submitSplerInfo(this.infoData)
  681. .then(response => {
  682. this.$message({
  683. message: "提交成功",
  684. type: "success"
  685. });
  686. this.submitLoad = false;
  687. this.getData();
  688. })
  689. .catch(() => {
  690. this.submitLoad = false;
  691. });
  692. })
  693. .catch(() => {});
  694. }
  695. });
  696. },
  697. //删除
  698. handleDelete(row, status) {
  699. const index = this.infoData.quaList.indexOf(row);
  700. this.infoData.quaList.splice(index, 1);
  701. }
  702. }
  703. };
  704. </script>
  705. <style scoped lang="scss"></style>