poolForm.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. <template>
  2. <div :class="type === '2' ? 'poolAdd poolDetail' : 'poolAdd'">
  3. <el-form
  4. ref="form"
  5. :model="form"
  6. :rules="type === '2' ? rules1 : rules"
  7. label-width="140px"
  8. class="special-el-form"
  9. >
  10. <h3>项目基础信息</h3>
  11. <el-divider></el-divider>
  12. <el-form-item label="项目名称" prop="projectName">
  13. <el-input v-model="form.projectName" placeholder="请输入项目名称" />
  14. </el-form-item>
  15. <el-form-item label="渠道" prop="channel">
  16. <div class="el-input__inner inputSimulation" @click="handleChannelItem">
  17. {{
  18. form.tProjectChannel && form.tProjectChannel.channelName
  19. ? form.tProjectChannel.channelName
  20. : "请选择渠道"
  21. }}
  22. </div>
  23. <channelItem
  24. ref="channelItem"
  25. @getChannelInfo="getChannelInfo"
  26. ></channelItem>
  27. <!-- <el-input v-model="form.channel" placeholder="请输入渠道" /> -->
  28. </el-form-item>
  29. <el-form-item label="初次接触日期" prop="contactDate">
  30. <el-date-picker
  31. clearable
  32. v-model="form.contactDate"
  33. type="date"
  34. value-format="yyyy-MM-dd"
  35. placeholder="请选择初次接触日期"
  36. >
  37. </el-date-picker>
  38. </el-form-item>
  39. <el-form-item label="所属组别">
  40. <el-select
  41. v-model="form.tProjectChannel.channelGroup"
  42. disabled
  43. placeholder="请选择所属组别"
  44. >
  45. <el-option
  46. v-for="dict in dict.type.project_group"
  47. :key="dict.value"
  48. :label="dict.label"
  49. :value="dict.value"
  50. ></el-option>
  51. </el-select>
  52. </el-form-item>
  53. <el-form-item label="所属行业" prop="industry">
  54. <el-select v-model="form.industry" placeholder="请选择所属行业">
  55. <el-option
  56. v-for="dict in dict.type.CUSTOMER_TRADE"
  57. :key="dict.value"
  58. :label="dict.label"
  59. :value="dict.value"
  60. ></el-option>
  61. </el-select>
  62. </el-form-item>
  63. <el-form-item label="投资负责人" prop="investHead">
  64. <div class="el-input__inner inputSimulation" @click="openSelectDept">
  65. {{ form.investHead ? form.investHead : "请选择投资负责人" }}
  66. </div>
  67. <selecDept
  68. ref="selecDepts"
  69. @getDeptUserInfo="getDeptUserInfo"
  70. :deptId="deptId"
  71. ></selecDept>
  72. </el-form-item>
  73. <el-form-item
  74. label="项目情况描述"
  75. prop="description"
  76. class="special-el-form-item"
  77. >
  78. <el-input
  79. rows="4"
  80. type="textarea"
  81. v-model="form.description"
  82. placeholder="请输入项目情况描述"
  83. />
  84. </el-form-item>
  85. <h3>项目公司信息</h3>
  86. <el-divider></el-divider>
  87. <el-form-item label="公司名称" prop="tProjectCompany.companyName">
  88. <el-input
  89. v-model="form.tProjectCompany.companyName"
  90. placeholder="请输入公司名称"
  91. />
  92. </el-form-item>
  93. <el-form-item label="统一社会信用代码" prop="tProjectCompany.companyCode">
  94. <el-input
  95. v-model="form.tProjectCompany.companyCode"
  96. placeholder="请输入企业统一社会信用代码"
  97. />
  98. </el-form-item>
  99. <el-form-item label="营业开始时间" prop="tProjectCompany.startTime">
  100. <el-date-picker
  101. clearable
  102. v-model="form.tProjectCompany.startTime"
  103. type="date"
  104. value-format="yyyy-MM-dd"
  105. placeholder="请选择营业开始时间"
  106. >
  107. </el-date-picker>
  108. </el-form-item>
  109. <el-form-item label="营业结束时间" prop="tProjectCompany.endTime">
  110. <el-date-picker
  111. clearable
  112. v-model="form.tProjectCompany.endTime"
  113. type="date"
  114. value-format="yyyy-MM-dd"
  115. placeholder="请选择营业结束时间"
  116. >
  117. </el-date-picker>
  118. </el-form-item>
  119. <el-form-item label="注册资本" prop="tProjectCompany.registeredCapital">
  120. <el-input
  121. v-model="form.tProjectCompany.registeredCapital"
  122. placeholder="请输入注册资本"
  123. />
  124. </el-form-item>
  125. <el-form-item label="注册地址" prop="tProjectCompany.registeredAddress">
  126. <el-input
  127. v-model="form.tProjectCompany.registeredAddress"
  128. placeholder="请输入注册地址"
  129. />
  130. </el-form-item>
  131. <el-form-item label="实缴资本" prop="tProjectCompany.paidCapital">
  132. <el-input
  133. v-model="form.tProjectCompany.paidCapital"
  134. placeholder="请输入实缴资本"
  135. />
  136. </el-form-item>
  137. <el-form-item label="办公地址" prop="tProjectCompany.businessAddress">
  138. <el-input
  139. v-model="form.tProjectCompany.businessAddress"
  140. placeholder="请输入办公地址"
  141. />
  142. </el-form-item>
  143. <el-form-item label="实控人" prop="tProjectCompany.actualBod">
  144. <el-input
  145. v-model="form.tProjectCompany.actualBod"
  146. placeholder="请输入实控人"
  147. />
  148. </el-form-item>
  149. <el-form-item label="联系电话" prop="tProjectCompany.phone">
  150. <el-input
  151. v-model="form.tProjectCompany.phone"
  152. placeholder="请输入联系电话"
  153. maxlength="11"
  154. />
  155. </el-form-item>
  156. <el-form-item label="所属类型" prop="tProjectCompany.type">
  157. <el-input
  158. v-model="form.tProjectCompany.type"
  159. placeholder="请输入所属类型"
  160. />
  161. </el-form-item>
  162. <el-form-item label="附件" prop="listFile">
  163. <fileItem :id="form.id" @getFileList="getFileList"></fileItem>
  164. </el-form-item>
  165. <h3>项目公司联系人信息</h3>
  166. <el-divider></el-divider>
  167. <el-form-item label="联系人姓名" prop="tProjectContacts.name">
  168. <el-input
  169. v-model="form.tProjectContacts.name"
  170. placeholder="请输入联系人姓名"
  171. />
  172. </el-form-item>
  173. <el-form-item label="职位" prop="tProjectContacts.position">
  174. <el-input
  175. v-model="form.tProjectContacts.position"
  176. placeholder="请输入职位"
  177. />
  178. </el-form-item>
  179. <el-form-item label="联系电话/微信" prop="tProjectContacts.contact">
  180. <el-input
  181. v-model="form.tProjectContacts.contact"
  182. placeholder="请输入联系电话/微信"
  183. />
  184. </el-form-item>
  185. <h3>项目融资信息</h3>
  186. <el-divider></el-divider>
  187. <el-form-item label="项目融资阶段" prop="financingStage">
  188. <el-input
  189. v-model="form.financingStage"
  190. placeholder="请输入项目融资阶段"
  191. />
  192. </el-form-item>
  193. <el-form-item label="预期融资金额(万元)" prop="financingMoney">
  194. <el-input
  195. v-model="form.financingMoney"
  196. placeholder="请输入预期融资金额"
  197. />
  198. </el-form-item>
  199. <el-form-item label="投前估值(万元)" prop="investValuation">
  200. <el-input v-model="form.investValuation" placeholder="请输入投前估值" />
  201. </el-form-item>
  202. <el-form-item label="预计投资金额(万元)" prop="investMoney">
  203. <el-input v-model="form.investMoney" placeholder="请输入预计投资金额" />
  204. </el-form-item>
  205. <el-form-item label="投资价值" prop="investWorth">
  206. <el-input v-model="form.investWorth" placeholder="请输入投资价值" />
  207. </el-form-item>
  208. <el-form-item
  209. label="历史融资"
  210. prop="previousFinancing"
  211. class="special-el-form-item"
  212. >
  213. <el-input
  214. rows="4"
  215. type="textarea"
  216. v-model="form.previousFinancing"
  217. placeholder="请输入历史融资"
  218. />
  219. </el-form-item>
  220. <el-form-item
  221. label="融资条件"
  222. prop="financingCondition"
  223. class="special-el-form-item"
  224. >
  225. <el-input
  226. rows="4"
  227. type="textarea"
  228. v-model="form.financingCondition"
  229. placeholder="请输入融资条件"
  230. />
  231. </el-form-item>
  232. <el-form-item
  233. label="投资亮点"
  234. prop="investSparkle"
  235. class="special-el-form-item"
  236. >
  237. <el-input
  238. rows="4"
  239. type="textarea"
  240. v-model="form.investSparkle"
  241. placeholder="请输入投资亮点"
  242. />
  243. </el-form-item>
  244. <el-form-item
  245. label="股权架构"
  246. prop="shareholding"
  247. class="special-el-form-item"
  248. >
  249. <el-input
  250. rows="4"
  251. type="textarea"
  252. v-model="form.shareholding"
  253. placeholder="请输入股权架构"
  254. />
  255. </el-form-item>
  256. <el-form-item label="备注" prop="mark" class="special-el-form-item">
  257. <el-input
  258. :readonly="type === '2' ? true : false"
  259. rows="4"
  260. type="textarea"
  261. v-model="form.mark"
  262. placeholder="请输入备注"
  263. />
  264. </el-form-item>
  265. <el-form-item class="btnList" v-if="type === '1'">
  266. <el-button @click="goBack">返 回</el-button>
  267. <el-button type="primary" @click="submitForm">提 交</el-button>
  268. </el-form-item>
  269. </el-form>
  270. </div>
  271. </template>
  272. <script>
  273. import {
  274. listPool,
  275. getPool,
  276. delPool,
  277. addPool,
  278. updatePool,
  279. } from "@/api/invest/pool";
  280. import fileItem from "./fileItem";
  281. import channelItem from "./channelItem";
  282. import selecDept from "../components/selecDept";
  283. export default {
  284. props: {
  285. id: {
  286. type: String,
  287. },
  288. type: {
  289. type: String,
  290. default: "1", //1可编辑 2不可编辑
  291. },
  292. },
  293. components: { fileItem, channelItem, selecDept },
  294. dicts: ["CUSTOMER_TRADE", "project_group"],
  295. data() {
  296. return {
  297. deptId: process.env.VUE_APP_DEPTID,
  298. title: "新增项目",
  299. baseUrl: process.env.VUE_APP_BASE_API,
  300. // 表单参数
  301. form: {
  302. id: null,
  303. projectName: null,
  304. projectGroup: null,
  305. industry: null,
  306. recordDate: null,
  307. projectCode: null,
  308. channel: null,
  309. contactDate: null,
  310. projectDate: null,
  311. decisionDate: null,
  312. tProjectCompany: {
  313. companyName: null,
  314. companyCode: null,
  315. startTime: null,
  316. endTime: null,
  317. registeredCapital: null,
  318. registeredAddress: null,
  319. paidCapital: null,
  320. businessAddress: null,
  321. actualBod: null,
  322. phone: null,
  323. type: null,
  324. },
  325. tProjectContacts: {
  326. name: null,
  327. position: null,
  328. contact: null,
  329. },
  330. tProjectChannel: {
  331. channelName: null,
  332. channelGroup: null,
  333. },
  334. description: null,
  335. projectContacts: null,
  336. investHead: null,
  337. previousFinancing: null,
  338. financingStage: null,
  339. financingCondition: null,
  340. financingMoney: null,
  341. financingDate: null,
  342. investSparkle: null,
  343. investValuation: null,
  344. investMoney: null,
  345. investType: null,
  346. investPloy: null,
  347. investWorth: null,
  348. shareholding: null,
  349. projectStage: null,
  350. projectState: null,
  351. mark: null,
  352. delFlag: null,
  353. createBy: null,
  354. createTime: null,
  355. updateBy: null,
  356. updateTime: null,
  357. listFile: null,
  358. },
  359. fileList: [],
  360. // 表单校验
  361. rules1: {},
  362. rules: {
  363. projectName: [{ required: true, trigger: "blur", message: "请输入" }],
  364. channel: [{ required: true, trigger: "blur", message: "请输入" }],
  365. contactDate: [{ required: true, trigger: "blur", message: "请输入" }],
  366. // projectGroup: [
  367. // { required: true, trigger: "change", message: "请选择" },
  368. // ],
  369. industry: [{ required: true, trigger: "change", message: "请选择" }],
  370. investHead: [{ required: true, trigger: "blur", message: "请输入" }],
  371. // description: [{ required: true, trigger: "blur", message: "请输入" }],
  372. "tProjectCompany.companyName": [
  373. { required: true, trigger: "blur", message: "请输入" },
  374. ],
  375. "tProjectCompany.companyCode": [
  376. { required: true, trigger: "blur", message: "请输入" },
  377. ],
  378. "tProjectCompany.startTime": [
  379. { required: true, trigger: "blur", message: "请选择" },
  380. ],
  381. "tProjectCompany.endTime": [
  382. { required: true, trigger: "blur", message: "请选择" },
  383. ],
  384. "tProjectCompany.registeredCapital": [
  385. { required: true, trigger: "blur", message: "请输入" },
  386. ],
  387. "tProjectCompany.registeredAddress": [
  388. { required: true, trigger: "blur", message: "请输入" },
  389. ],
  390. "tProjectCompany.paidCapital": [
  391. { required: true, trigger: "blur", message: "请输入" },
  392. ],
  393. "tProjectCompany.businessAddress": [
  394. { required: true, trigger: "blur", message: "请输入" },
  395. ],
  396. "tProjectCompany.actualBod": [
  397. { required: true, trigger: "blur", message: "请输入" },
  398. ],
  399. "tProjectCompany.phone": [
  400. { required: true, trigger: "blur", message: "请输入手机号" },
  401. {
  402. pattern: /^1[3456789]\d{9}$/,
  403. message: "请输入正确的手机号",
  404. trigger: "blur",
  405. },
  406. ],
  407. "tProjectCompany.type": [
  408. { required: true, trigger: "blur", message: "请输入" },
  409. ],
  410. // files: [{ required: true, trigger: "blur", message: "请输入" }],
  411. "tProjectContacts.name": [
  412. { required: true, trigger: "blur", message: "请输入" },
  413. ],
  414. "tProjectContacts.position": [
  415. { required: true, trigger: "blur", message: "请输入" },
  416. ],
  417. "tProjectContacts.contact": [
  418. { required: true, trigger: "blur", message: "请输入" },
  419. ],
  420. financingStage: [
  421. { required: true, trigger: "blur", message: "请输入" },
  422. ],
  423. financingMoney: [
  424. { required: true, trigger: "blur", message: "请输入" },
  425. ],
  426. investValuation: [
  427. { required: true, trigger: "blur", message: "请输入" },
  428. ],
  429. investMoney: [{ required: true, trigger: "blur", message: "请输入" }],
  430. investWorth: [{ required: true, trigger: "blur", message: "请输入" }],
  431. // previousFinancing: [{ required: true, trigger: "blur", message: "请输入" }],
  432. financingCondition: [
  433. { required: true, trigger: "blur", message: "请输入" },
  434. ],
  435. investSparkle: [{ required: true, trigger: "blur", message: "请输入" }],
  436. shareholding: [{ required: true, trigger: "blur", message: "请输入" }],
  437. // mark: [{ required: true, trigger: "blur", message: "请输入" }]
  438. },
  439. };
  440. },
  441. mounted() {
  442. console.log("000",this.deptId)
  443. if (this.id) {
  444. this.getPoolDetail(this.id);
  445. } else {
  446. this.reset();
  447. }
  448. },
  449. methods: {
  450. // 选择部门人
  451. openSelectDept() {
  452. this.$refs.selecDepts.show();
  453. },
  454. getDeptUserInfo(info) {
  455. if (info.length > 0) {
  456. this.form.investHead = info[0].nickName;
  457. this.$refs.form.clearValidate(["investHead"]);
  458. }
  459. },
  460. // 获取渠道信息
  461. getChannelInfo(info) {
  462. if (info.length > 0) {
  463. this.form.channel = info[0].id;
  464. this.form.tProjectChannel.channelName = info[0].channelName;
  465. this.form.tProjectChannel.channelGroup = info[0].channelGroup;
  466. this.$refs.form.clearValidate(["channel"]);
  467. }
  468. },
  469. handleChannelItem() {
  470. this.$refs.channelItem.showChannelItem = true;
  471. },
  472. getPoolDetail(id) {
  473. getPool(id).then((response) => {
  474. this.form = response.data;
  475. });
  476. },
  477. // 获取fileList
  478. getFileList(fileList) {
  479. this.fileList = fileList;
  480. },
  481. /** 提交按钮 */
  482. submitForm() {
  483. let that = this;
  484. this.$refs["form"].validate((valid, rules) => {
  485. if (valid) {
  486. this.form.listFile = this.fileList;
  487. if (this.form.id != null) {
  488. updatePool(this.form).then((response) => {
  489. this.$modal.msgSuccess("修改成功");
  490. setTimeout(() => {
  491. that.goBack();
  492. }, 1500);
  493. });
  494. } else {
  495. this.form.projectStage = "1";
  496. this.form.projectState = "a";
  497. addPool(this.form).then((response) => {
  498. this.$modal.msgSuccess("新增成功");
  499. setTimeout(() => {
  500. that.goBack();
  501. }, 1500);
  502. });
  503. }
  504. } else {
  505. for (var ruleName in rules) {
  506. let _rule = rules[ruleName];
  507. let message = _rule[0].message;
  508. this.$message.warning(message, 1);
  509. break;
  510. }
  511. //验证不通过回滚到不通过的第一个位置
  512. this.$nextTick(() => {
  513. let isError = document.getElementsByClassName("is-error");
  514. isError[0].scrollIntoView({
  515. block: "center",
  516. behavior: "smooth",
  517. });
  518. });
  519. }
  520. });
  521. },
  522. goBack() {
  523. this.$router.go(-1);
  524. },
  525. // 表单重置
  526. reset() {
  527. this.form = {
  528. id: null,
  529. projectName: null,
  530. projectGroup: null,
  531. industry: null,
  532. recordDate: null,
  533. projectCode: null,
  534. channel: null,
  535. contactDate: null,
  536. projectDate: null,
  537. decisionDate: null,
  538. tProjectCompany: {
  539. companyName: null,
  540. companyCode: null,
  541. startTime: null,
  542. endTime: null,
  543. registeredCapital: null,
  544. registeredAddress: null,
  545. paidCapital: null,
  546. businessAddress: null,
  547. actualBod: null,
  548. phone: null,
  549. type: null,
  550. },
  551. tProjectContacts: {
  552. name: null,
  553. position: null,
  554. contact: null,
  555. },
  556. tProjectChannel: {
  557. channelName: null,
  558. channelGroup: null,
  559. },
  560. description: null,
  561. projectContacts: null,
  562. investHead: null,
  563. previousFinancing: null,
  564. financingStage: null,
  565. financingCondition: null,
  566. financingMoney: null,
  567. financingDate: null,
  568. investSparkle: null,
  569. investValuation: null,
  570. investMoney: null,
  571. investType: null,
  572. investPloy: null,
  573. investWorth: null,
  574. shareholding: null,
  575. projectStage: null,
  576. projectState: null,
  577. mark: null,
  578. delFlag: null,
  579. createBy: null,
  580. createTime: null,
  581. updateBy: null,
  582. updateTime: null,
  583. listFile: null,
  584. };
  585. this.resetForm("form");
  586. },
  587. },
  588. };
  589. </script>
  590. <style lang="scss" scoped>
  591. .poolAdd {
  592. h2 {
  593. margin-left: 30px;
  594. }
  595. .special-el-form {
  596. h3 {
  597. width: 100%;
  598. margin-bottom: -10px;
  599. font-weight: bold;
  600. }
  601. .btnList {
  602. width: 100%;
  603. display: flex;
  604. justify-content: center;
  605. padding-bottom: 40px;
  606. }
  607. }
  608. }
  609. .poolDetail {
  610. position: relative;
  611. cursor: not-allowed;
  612. }
  613. .poolDetail::after {
  614. content: "";
  615. display: block;
  616. position: absolute;
  617. top: 0;
  618. left: 0;
  619. width: 100%;
  620. height: 120%;
  621. }
  622. </style>