bussinessinfo-add.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  1. <template>
  2. <basic-container>
  3. <el-dialog title="商户进件信息" :append-to-body="true" :visible.sync="dialogFormVisible" top="1vh" @close="dialogClose" @open="openDialog">
  4. <!-- 步骤条 -->
  5. <div class="steps">
  6. <el-steps :active="active" process-status="finish" align-center>
  7. <el-step title="商户主体信息"></el-step>
  8. <el-step title="商户法人信息"></el-step>
  9. <el-step title="商户联系人信息"></el-step>
  10. </el-steps>
  11. </div>
  12. <!-- 商户主体信息 -->
  13. <el-card style="margin-top: 40px;" v-if="active==0">
  14. <div style="margin-top:10px;">
  15. <el-form :model="form1" :rules="rules1" ref="form1" label-width="120px" label-position="right" size="small">
  16. <el-form-item label="商户类型" prop="signType">
  17. <el-select v-model="form1.signType" placeholder="请输入商户类型" clearable="true">
  18. <el-option v-for="item in signTypeOptions" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item label="商户证件编号" prop="licenceNo">
  22. <el-input v-model="form1.licenceNo" placeholder="请输入商户证件编号"></el-input>
  23. </el-form-item>
  24. <el-form-item label="开户许可证编号" prop="openAccountLicenceNo">
  25. <el-input v-model="form1.openAccountLicenceNo" placeholder="请输入开户许可证编号"></el-input>
  26. </el-form-item>
  27. <el-form-item label="商户签约名称" prop="signName">
  28. <el-input v-model="form1.signName" placeholder="请输入商户签约名称"></el-input>
  29. </el-form-item>
  30. <el-form-item label="商户简称" prop="shortName">
  31. <el-input v-model="form1.shortName" placeholder="请输入商户简称"></el-input>
  32. </el-form-item>
  33. <el-row>
  34. <el-col span="8">
  35. <el-form-item label="经营地所在省" prop="province">
  36. <el-select v-model="form1.province" placeholder="请选择经营地所在省" clearable @change="loadCity">
  37. <el-option
  38. v-for="item in provinceOptions"
  39. :key="item.provinceCode"
  40. :label="item.provinceName"
  41. :value="item.provinceCode">
  42. </el-option>
  43. </el-select>
  44. </el-form-item>
  45. </el-col>
  46. <el-col span="8">
  47. <el-form-item label="经营地所在市" prop="city">
  48. <el-select v-model="form1.city" placeholder="请选择经营地所在市" clearable @change="loadDistrict">
  49. <el-option
  50. v-for="item in cityOptions"
  51. :key="item.cityCode"
  52. :label="item.cityName"
  53. :value="item.cityCode">
  54. </el-option>
  55. </el-select>
  56. </el-form-item>
  57. </el-col>
  58. <el-col span="8">
  59. <el-form-item label="经营地所在区" prop="district">
  60. <el-select v-model="form1.district" placeholder="请选择经营地所在区" clearable>
  61. <el-option
  62. v-for="item in districtOptions"
  63. :key="item.districtCode"
  64. :label="item.districtName"
  65. :value="item.districtCode">
  66. </el-option>
  67. </el-select>
  68. </el-form-item>
  69. </el-col>
  70. </el-row>
  71. <el-form-item label="经营地址" prop="address">
  72. <el-input v-model="form1.address" placeholder="请输入经营地址"></el-input>
  73. </el-form-item>
  74. <el-row>
  75. <el-col span="12">
  76. <el-form-item prop="licenceUrl" label="商户证件照片" style="width: 45%;">
  77. <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
  78. :on-success="uploadLicenceUrl">
  79. <img v-if="form1.licenceUrl" :src="form1.licenceUrl" class="avatar">
  80. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  81. </el-upload>
  82. </el-form-item>
  83. </el-col>
  84. <el-col span="12">
  85. <el-form-item prop="handLicenceUrl" label="手持营业执照在经营场所的照片" style="width: 45%;">
  86. <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
  87. :on-success="uploadHandLicenceUrl">
  88. <img v-if="form1.handLicenceUrl" :src="form1.handLicenceUrl" class="avatar">
  89. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  90. </el-upload>
  91. </el-form-item>
  92. </el-col>
  93. </el-row>
  94. <el-form-item prop="openAccountLicenceUrl" label="开户许可证照片" style="width: 45%;">
  95. <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
  96. :on-success="uploadOpenAccountLicenceUrl">
  97. <img v-if="form1.openAccountLicenceUrl" :src="form1.openAccountLicenceUrl" class="avatar">
  98. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  99. </el-upload>
  100. </el-form-item>
  101. <span style="color: red">如无开户许可证,请上传基本存款账户信息表照片</span>
  102. </el-form>
  103. </div>
  104. </el-card>
  105. <!-- 商户法人信息 -->
  106. <div style="margin-top: 40px;" v-if="active==1">
  107. <el-card style="margin-top: 10px;">
  108. <el-form ref="form2" :model="form2" :rules="rules2">
  109. <el-form-item label="法人姓名" prop="legalName">
  110. <el-input v-model="form2.legalName" placeholder="请输入法人姓名"></el-input>
  111. </el-form-item>
  112. <el-row>
  113. <el-col span="8">
  114. <el-form-item label="法人证件类型" prop="legalLicenceType">
  115. <el-select v-model="form2.legalLicenceType" placeholder="请输入法人证件类型" clearable="true">
  116. <el-option v-for="item in legalLicenceTypeOptions" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option>
  117. </el-select>
  118. </el-form-item>
  119. </el-col>
  120. <el-col span="16">
  121. <el-form-item label="法人证件号码" prop="legalLicenceNo">
  122. <el-input v-model="form2.legalLicenceNo" placeholder="请输入法人证件号码"></el-input>
  123. </el-form-item>
  124. </el-col>
  125. </el-row>
  126. <el-row>
  127. <el-col span="12">
  128. <el-form-item prop="legalLicenceFrontUrl" label="请上传法人证件正面照片" style="width: 45%;">
  129. <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
  130. :on-success="uploadLegalLicenceFrontUrl">
  131. <img v-if="form2.legalLicenceFrontUrl" :src="form2.legalLicenceFrontUrl" class="avatar">
  132. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  133. </el-upload>
  134. </el-form-item>
  135. </el-col>
  136. <el-col span="12">
  137. <el-form-item prop="legalLicenceBackUrl" label="法人证件反面照片" style="width: 45%;">
  138. <el-upload class="avatar-uploader" action="/api/putObject" :show-file-list="false"
  139. :on-success="uploadLegalLicenceBackUrl">
  140. <img v-if="form2.legalLicenceBackUrl" :src="form2.legalLicenceBackUrl" class="avatar">
  141. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  142. </el-upload>
  143. </el-form-item>
  144. </el-col>
  145. </el-row>
  146. </el-form>
  147. </el-card>
  148. </div>
  149. <!-- 商户联系人信息 -->
  150. <div style="margin-top: 40px;" v-if="active==2">
  151. <el-card style="margin-top: 10px;">
  152. <el-form ref="form3" :model="form3" :rules="rules3" label-width="120px">
  153. <el-form-item label="联系人姓名" prop="contactName">
  154. <el-input v-model="form3.contactName" placeholder="请输入联系人姓名"></el-input>
  155. </el-form-item>
  156. <el-form-item label="联系人证件号" prop="contactLicenceNo">
  157. <el-input v-model="form3.contactLicenceNo" placeholder="请输入联系人证件号码"></el-input>
  158. </el-form-item>
  159. <el-form-item label="联系人手机号" prop="contactMobile">
  160. <el-input v-model="form3.contactMobile" placeholder="请输入联系人手机号"></el-input>
  161. </el-form-item>
  162. <el-form-item label="联系人邮箱" prop="contactEmail">
  163. <el-input v-model="form3.contactEmail" placeholder="请输入联系人邮箱"></el-input>
  164. </el-form-item>
  165. </el-form>
  166. </el-card>
  167. </div>
  168. <div slot="footer" class="dialog-footer">
  169. <div v-if="curEvent === 'add'">
  170. <el-button v-if="active!=0" @click="active--">上一步</el-button>
  171. <el-button v-if="active!=2" type="primary" @click="next">保存</el-button>
  172. <el-button v-if="active==2" type="primary" @click="submit()">提交申请</el-button>
  173. </div>
  174. <div v-if="curEvent === 'edit'">
  175. <el-button v-if="active!=0" @click="active--">上一步</el-button>
  176. <el-button type="primary" @click="handelNext">下一步</el-button>
  177. <el-button type="primary" @click="next">保存</el-button>
  178. <el-button v-if="active==2" type="primary" @click="submit()">提交申请</el-button>
  179. </div>
  180. </div>
  181. </el-dialog>
  182. </basic-container>
  183. </template>
  184. <script>
  185. import {
  186. getProvinceList,
  187. getCityList,
  188. getDistrictList
  189. } from "@/api/bussinessregion/bussinessregion";
  190. import {getDictionary} from "@/api/system/dictbiz";
  191. import {add as saveBussInfo, update as updateBussInfo} from "@/api/bussiness/bussinessinfo"
  192. import {add as saveContactInfo, update as updateContactInfo} from "@/api/bussiness/bussinesscontactinfo"
  193. import {isvalidatemobile, isEmail} from "@/util/validate"
  194. export default {
  195. props:{
  196. form1:Object,
  197. form2:Object,
  198. form3:Object,
  199. curEvent: 'add'
  200. },
  201. data() {
  202. var validatemobile = (rule, value, callback) => {
  203. let isPhone = /^0\d{2,3}-?\d{7,8}$/;
  204. if (value.length == 11) {
  205. if (isPhone.test(value)) {
  206. callback(new Error('手机号码格式不正确'));
  207. } else {
  208. callback();
  209. }
  210. } else {
  211. callback(new Error('手机号码长度不为11位'));
  212. }
  213. };
  214. var validateEmail = (rule, value, callback) => {
  215. let result = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(value)
  216. if(!result){
  217. callback(new Error("邮箱为空或邮箱格式有误!"));
  218. }else{
  219. callback();
  220. }
  221. };
  222. return {
  223. form:{bussinessInfoId: null},
  224. provinceOptions:[],
  225. cityOptions:[],
  226. districtOptions:[],
  227. provinceProps: {
  228. lazy: true,
  229. label: 'provinceName',
  230. value: 'provinceCode',
  231. },
  232. cityProps: {
  233. label: 'cityName',
  234. value: 'cityCode',
  235. children: 'children'
  236. },
  237. districtProps: {
  238. label: 'cityName',
  239. value: 'cityCode',
  240. },
  241. signTypeOptions: [],
  242. legalLicenceTypeOptions: [],
  243. dialogFormVisible: false,
  244. //步骤条
  245. active: 0,
  246. //表单
  247. rules1:{
  248. signType: [
  249. { required: true, message: '请输入商户类型', trigger: 'blur' },
  250. ],
  251. licenceNo: [
  252. { required: true, message: '请输入商户证件编号', trigger: 'blur' },
  253. ],
  254. signName: [
  255. { required: true, message: '请输入商户签约名称', trigger: 'blur' },
  256. ],
  257. shortName: [
  258. { required: true, message: '请输入商户简称', trigger: 'blur' },
  259. ],
  260. province: [
  261. { required: true, message: '请选择商户实际经营地所在省', trigger: 'blur' },
  262. ],
  263. city: [
  264. { required: true, message: '请选择商户实际经营地所在市', trigger: 'blur' },
  265. ],
  266. district: [
  267. { required: true, message: '请选择商户实际经营地所在区', trigger: 'blur' },
  268. ],
  269. address: [
  270. { required: true, message: '请输入经营地址', trigger: 'blur' },
  271. ],
  272. openAccountLicenceNo: [
  273. { required: true, message: '请输入开户许可证编号', trigger: 'blur' },
  274. ],
  275. licenceUrl: [
  276. { required: false, message: '请上传商户证件照片', trigger: 'blur' },
  277. ],
  278. openAccountLicenceUrl: [
  279. { required: false, message: '请上传法人证件照正面照片', trigger: 'blur' },
  280. ],
  281. handLicenceUrl: [
  282. { required: false, message: '请上传法人证件照反面照片', trigger: 'blur' },
  283. ],
  284. },
  285. rules2:{
  286. legalName:[
  287. {required: true, message: '请输入法人姓名', trigger: 'blur' },
  288. ],
  289. legalLicenceType:[
  290. {required: true, message: '请选择法人证件类型', trigger: 'blur' },
  291. ],
  292. legalLicenceNo:[
  293. {required: true, message: '请输入法人证件号码', trigger: 'blur' },
  294. ],
  295. legalLicenceFrontUrl:[
  296. {required: false, message: '请上传法人证件正面照片', trigger: 'blur' },
  297. ],
  298. legalLicenceBackUrl:[
  299. {required: false, message: '请上传法人证件反面照片', trigger: 'blur' },
  300. ]
  301. },
  302. rules3:{
  303. contactName:[
  304. {required: true, message: '请输入联系人姓名', trigger: 'blur' },
  305. ],
  306. contactMobile: [
  307. { required: true, trigger: 'blur', validator: validatemobile, min: 11, max: 11},
  308. ],
  309. contactEmail:[
  310. {required: true, trigger: 'blur', validator: validateEmail },
  311. ]
  312. },
  313. //勋章配置
  314. medalList:[],
  315. }
  316. },
  317. created() {
  318. this.loadProvince();
  319. this.loadSignTypeList("business_sign_type");
  320. this.loadLegalLicenceTypeList("legal_licence_type");
  321. },
  322. methods: {
  323. openDialog(){
  324. if(this.curEvent == 'edit'){
  325. this.loadCity(this.form1.province);
  326. this.loadDistrict(this.form1.city);
  327. }
  328. },
  329. loadSignTypeList(code){
  330. getDictionary({"code":code}).then(res =>{
  331. this.signTypeOptions = res.data.data;
  332. })
  333. },
  334. loadLegalLicenceTypeList(code){
  335. getDictionary({"code":code}).then(res =>{
  336. this.legalLicenceTypeOptions = res.data.data;
  337. })
  338. },
  339. loadProvince(){
  340. getProvinceList().then(res =>{
  341. this.provinceOptions = res.data.data;
  342. })
  343. },
  344. loadCity(provinceCode){
  345. getCityList(provinceCode).then(res =>{
  346. this.cityOptions = res.data.data;
  347. })
  348. },
  349. loadDistrict(cityCode){
  350. getDistrictList(cityCode).then(res =>{
  351. this.districtOptions = res.data.data;
  352. })
  353. },
  354. open() {
  355. this.dialogFormVisible = true
  356. },
  357. close() {
  358. this.dialogFormVisible = false;
  359. this.active = 0;
  360. },
  361. // confirm() {
  362. // let validForm3 = this.validForm('form3');
  363. // if(validForm3){
  364. // let contactBody = {};
  365. // saveContactInfo(Object.assign(contactBody, this.form2, this.form3)).then(res =>{
  366. // this.handelNext();
  367. // })
  368. // }
  369. // },
  370. //上传商户证件照片
  371. uploadLicenceUrl(res) {
  372. this.form1.licenceUrl=res.data
  373. },
  374. //上传手持照片
  375. uploadHandLicenceUrl(res){
  376. this.form1.handLicenceUrl=res.data
  377. },
  378. //上传开户凭证图片
  379. uploadOpenAccountLicenceUrl(res){
  380. this.form1.openAccountLicenceUrl=res.data
  381. },
  382. //上传法人证件正面照片
  383. uploadLegalLicenceFrontUrl(res) {
  384. this.form2.legalLicenceFrontUrl = res.data
  385. },
  386. //上传法人证件反面照片
  387. uploadLegalLicenceBackUrl(res) {
  388. this.form2.legalLegalLicenceBackUrl = res.data
  389. },
  390. next(){
  391. switch (this.active){
  392. case 0:
  393. let validForm1 = this.validForm('form1');
  394. if(validForm1){
  395. if(this.curEvent == "add"){
  396. saveBussInfo(this.form1).then(res => {
  397. this.$message({
  398. type: "success",
  399. message: res.data.msg
  400. });
  401. this.form.bussinessInfoId = res.data.data.id;
  402. this.form2.bussinessInfoId = res.data.data.id;
  403. this.form3.bussinessInfoId = res.data.data.id;
  404. this.handelNext()
  405. });
  406. }else if(this.curEvent == "edit" && this.form1.id != null){
  407. updateBussInfo(this.form1).then(res => {
  408. this.$message({
  409. type: "success",
  410. message: res.data.msg
  411. });
  412. this.form.bussinessInfoId = res.data.data.id;
  413. this.form2.bussinessInfoId = res.data.data.id;
  414. this.form3.bussinessInfoId = res.data.data.id;
  415. this.handelNext()
  416. });
  417. }
  418. }
  419. break;
  420. case 1:
  421. let validForm2 = this.validForm('form2');
  422. if(validForm2){
  423. if(this.curEvent == "add"){
  424. this.form2.contactType = 10;
  425. saveContactInfo(this.form2).then(res => {
  426. this.$message({
  427. type: "success",
  428. message: res.data.msg
  429. });
  430. this.form2.id = res.data.data.id;
  431. this.handelNext()
  432. });
  433. }else if(this.curEvent == "edit" && this.form2.id != null){
  434. this.form2.contactType = 10;
  435. updateContactInfo(this.form2).then(res => {
  436. this.$message({
  437. type: "success",
  438. message: res.data.msg
  439. });
  440. this.form2.id = res.data.data.id;
  441. this.handelNext()
  442. });
  443. }
  444. }
  445. break;
  446. case 2:
  447. let validForm3 = this.validForm('form3');
  448. if(validForm3){
  449. if(this.curEvent == "add"){
  450. this.form3.contactType = 11;
  451. saveContactInfo(this.form3).then(res => {
  452. this.$message({
  453. type: "success",
  454. message: res.data.msg
  455. });
  456. this.form3.id = res.data.data.id;
  457. this.handelNext()
  458. });
  459. }else if(this.curEvent == "edit" && this.form3.id != null){
  460. this.form3.contactType = 11;
  461. updateContactInfo(this.form3).then(res => {
  462. this.$message({
  463. type: "success",
  464. message: res.data.msg
  465. });
  466. this.form3.id = res.data.data.id;
  467. this.handelNext()
  468. });
  469. }
  470. }
  471. break;
  472. default:
  473. break;
  474. }
  475. },
  476. validForm(formName) {
  477. let result = false;
  478. this.$refs[formName].validate((valid) => {
  479. if (!valid) {
  480. result = false;
  481. return false;
  482. }else{
  483. result = true;
  484. return true;
  485. }
  486. });
  487. return result;
  488. },
  489. handelNext(){
  490. if (this.active==2) {
  491. }else{
  492. this.active++
  493. }
  494. },
  495. submit(){
  496. this.form.bussinessInfoId = this.form1.id;
  497. this.$emit('submit', this.form)
  498. this.active = 0;
  499. },
  500. dialogClose(){
  501. this.active = 0;
  502. this.dialogFormVisible = false;
  503. this.$emit('closeDialog', null)
  504. }
  505. }
  506. }
  507. </script>
  508. <style lang="scss">
  509. .avatar-uploader .el-upload {
  510. border: 1px dashed #d9d9d9;
  511. border-radius: 6px;
  512. cursor: pointer;
  513. position: relative;
  514. overflow: hidden;
  515. }
  516. .avatar-uploader .el-upload:hover {
  517. border-color: #409EFF;
  518. }
  519. .avatar-uploader-icon {
  520. font-size: 28px;
  521. color: #8c939d;
  522. width: 178px;
  523. height: 178px;
  524. line-height: 178px;
  525. text-align: center;
  526. }
  527. .avatar {
  528. width: 178px;
  529. height: 178px;
  530. display: block;
  531. }
  532. </style>