form.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. <!-- -->
  2. <template>
  3. <div class="m-container">
  4. <h2>
  5. <el-page-header @back="onCancel"
  6. :content="(payType == 'create' ? '创建账号' : '修改账号')"></el-page-header>
  7. </h2>
  8. <div class="m-core" style="overflow: hidden">
  9. <el-col :span="10">
  10. <el-form :model="form" :rules="rules" ref="accountForm" label-position="right" label-width="180px">
  11. <el-form-item label="商户号" prop="memberId">
  12. <el-input v-model="form.memberId" :disabled="payType == 'update' ? true : false" placeholder="请输入商户号"></el-input>
  13. </el-form-item>
  14. <el-form-item label="公司名称" prop="name">
  15. <el-input v-model="form.name" placeholder="请输入公司名称"></el-input>
  16. </el-form-item>
  17. <el-form-item label="公司法人" prop="legalPerson">
  18. <el-input v-model="form.legalPerson" placeholder="请输入公司法人"></el-input>
  19. </el-form-item>
  20. <el-form-item label="公司法人手机号" prop="legalMp">
  21. <el-input v-model="form.legalMp" placeholder="请输入公司法人手机号"></el-input>
  22. </el-form-item>
  23. <el-form-item label="法人身份证号" prop="legalCertId">
  24. <el-input v-model="form.legalCertId" placeholder="请输入法人身份证号"></el-input>
  25. </el-form-item>
  26. <el-form-item label="身份证有效期" prop="legalCertIdExpires">
  27. <el-date-picker
  28. v-model="form.legalCertIdExpires"
  29. :picker-options="{ firstDayOfWeek:1 }"
  30. value-format="yyyyMMdd"
  31. type="date"
  32. placeholder="请选择身份证有效期">
  33. </el-date-picker>
  34. </el-form-item>
  35. <el-form-item label="银行卡号" prop="cardNo">
  36. <el-input v-model="form.cardNo" placeholder="请输入银行卡号"></el-input>
  37. </el-form-item>
  38. <el-form-item label="所属银行" prop="bankCode">
  39. <el-select v-model="form.bankCode"
  40. placeholder="请选择所属银行">
  41. <el-option v-for="(item, index) in backList" :key="index" :label="item.title"
  42. :value="item.value"></el-option>
  43. </el-select>
  44. </el-form-item>
  45. <el-form-item label="省市" required>
  46. <el-row>
  47. <el-col :span="12">
  48. <el-form-item prop="provCode">
  49. <el-select v-model="form.provCode" style="width: 98% !important" @change="onProvChange" placeholder="请选择省份">
  50. <el-option v-for="(item, index) in cityList" :key="index" :label="item.title"
  51. :value="item.value"></el-option>
  52. </el-select>
  53. </el-form-item>
  54. </el-col>
  55. <el-col :span="12">
  56. <el-form-item prop="areaCode">
  57. <el-select v-model="form.areaCode" style="width: 100% !important" placeholder="请选择城市">
  58. <el-option v-for="(item, index) in selectListCity" :key="index" :label="item.title"
  59. :value="item.value"></el-option>
  60. </el-select>
  61. </el-form-item>
  62. </el-col>
  63. </el-row>
  64. </el-form-item>
  65. <el-form-item label="统一社会信用码" prop="socialCreditCode">
  66. <el-input v-model="form.socialCreditCode" placeholder="请输入统一社会信用码"></el-input>
  67. </el-form-item>
  68. <el-form-item label="统一社会信用码有效期" prop="socialCreditCodeExpires">
  69. <el-date-picker
  70. v-model="form.socialCreditCodeExpires"
  71. :picker-options="{ firstDayOfWeek:1 }"
  72. value-format="yyyyMMdd"
  73. type="date"
  74. placeholder="请选择统一社会信用码有效期">
  75. </el-date-picker>
  76. </el-form-item>
  77. <el-form-item label="经营范围" prop="businessScope">
  78. <!-- <el-input v-model="form.businessScope" placeholder="请输入经营范围"></el-input> -->
  79. <el-input type="textarea" :rows="3" v-model="form.businessScope" placeholder="请输入经营范围"></el-input>
  80. </el-form-item>
  81. <el-form-item label="公司地址" prop="address">
  82. <el-input v-model="form.address" placeholder="请输入公司地址"></el-input>
  83. </el-form-item>
  84. <el-form-item label="证照文件" prop="multipartFile">
  85. <!-- <el-input type="file" class="uploadFile" v-model="form.multipartFile"></el-input> -->
  86. <el-upload
  87. class="avatar-upload"
  88. ref="upload"
  89. action="/api-web/uploadFile"
  90. :on-preview="handlePreview"
  91. :on-remove="handleRemove"
  92. :on-change="handleChange"
  93. :file-list="fileList"
  94. :multiple="false"
  95. :limit="1"
  96. :auto-upload="false">
  97. <el-button slot="trigger" type="primary">选取文件</el-button>
  98. <!-- ,且不超过500kb -->
  99. <div slot="tip" style="display: inline; padding-left: 20px;" class="el-upload__tip">只能上传一个文件</div>
  100. </el-upload>
  101. <!-- <el-upload class="avatar-uploader"
  102. action="/api-web/uploadFile"
  103. :headers="headers"
  104. :show-file-list="false"
  105. :on-success="handleAvatarSuccess"
  106. :before-upload="beforeAvatarUpload">
  107. <img v-if="form.multipartFile"
  108. :src="form.coverImg"
  109. class="avatar" />
  110. <i v-else
  111. class="el-icon-plus avatar-uploader-icon"></i>
  112. </el-upload> -->
  113. </el-form-item>
  114. <el-form-item label="邮编" prop="zipCode">
  115. <el-input v-model="form.zipCode" placeholder="请输入邮编"></el-input>
  116. </el-form-item>
  117. <el-form-item>
  118. <el-button @click="onCancel">取 消</el-button>
  119. <el-button type="primary" @click="onSubmit('accountForm')">确 定</el-button>
  120. </el-form-item>
  121. </el-form>
  122. </el-col>
  123. </div>
  124. </div>
  125. </template>
  126. <script>
  127. import { cityJson } from "./cityJson";
  128. import { bankJson } from "./bankJson";
  129. import { getToken } from "@/utils/auth";
  130. import load from '@/utils/loading'
  131. import { createMember, updateMember } from './api.js'
  132. import { isvalidPhone } from '@/utils/validate'
  133. let validPhone = (rule, value, callback) => {
  134. if (!value) {
  135. callback(new Error('请输入公司法人手机号'))
  136. } else if (!isvalidPhone(value)) {
  137. callback(new Error('请输入正确的11位手机号码'))
  138. } else {
  139. callback()
  140. }
  141. }
  142. export default {
  143. name: 'ADaPayAccount',
  144. data() {
  145. const query = this.$route.query
  146. return {
  147. payType: query.type,
  148. row: query.row ? JSON.parse(query.row) : {},
  149. backList: bankJson,
  150. cityList: cityJson,
  151. selectListCity: [],
  152. headers: {
  153. Authorization: getToken()
  154. },
  155. fileList: [],
  156. files: null, // 上传对象
  157. id: null, // 编号
  158. form: {
  159. memberId: null,
  160. name: null,
  161. legalPerson: null,
  162. legalMp: null,
  163. legalCertId: null,
  164. legalCertIdExpires: null,
  165. cardNo: null,
  166. bankCode: null,
  167. provCode: null,
  168. areaCode: null,
  169. socialCreditCode: null,
  170. socialCreditCodeExpires: null,
  171. businessScope: null,
  172. address: null,
  173. multipartFile: null,
  174. zipCode: null
  175. },
  176. rules: {
  177. memberId: [{required: true, message:'请输入商户号', trigger: 'blur'}],
  178. name: [{required: true, message:'请输入公司名称', trigger: 'blur'}],
  179. legalPerson: [{required: true, message:'请输入公司法人', trigger: 'blur'}],
  180. legalMp: [{ type: 'number', required: true, validator: validPhone, trigger: 'blur' }],
  181. legalCertId: [{required: true, message:'请输入法人身份证号', trigger: 'blur'}],
  182. legalCertIdExpires: [{required: true, message:'请选择身份证有效期', trigger: 'change'}],
  183. cardNo: [{required: true, message:'请输入银行卡号', trigger: 'blur'}],
  184. bankCode: [{required: true, message:'请选择所属银行', trigger: 'change'}],
  185. provCode: [{required: true, message:'请选择省份', trigger: 'change'}],
  186. areaCode: [{required: true, message:'请选择城市', trigger: 'change'}],
  187. socialCreditCode: [{required: true, message:'请输入统一社会信用码', trigger: 'blur'}],
  188. socialCreditCodeExpires: [{required: true, message:'请选择统一社会信用码有效期', trigger: 'change'}],
  189. businessScope: [{required: true, message:'请输入经营范围', trigger: 'blur'}],
  190. address: [{required: true, message:'请输入公司地址', trigger: 'blur'}],
  191. multipartFile: [{required: true, message:'请上传证照文件', trigger: 'change'}],
  192. zipCode: [{required: true, message:'请输入邮编', trigger: 'blur'}]
  193. }
  194. };
  195. },
  196. mounted() {
  197. this.__init()
  198. },
  199. activated() {
  200. this.__init()
  201. },
  202. methods: {
  203. __init() {
  204. const query = this.$route.query
  205. this.payType = query.type
  206. this.row = query.row ? JSON.parse(query.row) : {}
  207. this.files = null
  208. this.fileList = []
  209. this.form.multipartFile = null
  210. if(this.payType == 'update') {
  211. const row = this.row
  212. this.id = row.id
  213. this.form = {
  214. memberId: row.memberId,
  215. name: row.name,
  216. legalPerson: row.legalPerson,
  217. legalMp: row.legalMp,
  218. legalCertId: row.legalCertId,
  219. legalCertIdExpires: row.legalCertIdExpires,
  220. cardNo: row.cardNo,
  221. bankCode: row.bankCode,
  222. provCode: row.provCode,
  223. areaCode: row.areaCode,
  224. socialCreditCode: row.socialCreditCode,
  225. socialCreditCodeExpires: row.socialCreditCodeExpires,
  226. businessScope: row.businessScope,
  227. address: row.address,
  228. multipartFile: row.multipartFile,
  229. zipCode: row.zipCode
  230. }
  231. this.cityList.forEach(item => {
  232. if(item.value == row.provCode) {
  233. this.selectListCity = item.cities
  234. }
  235. })
  236. } else if(this.payType == 'create') {
  237. // this.form = {
  238. // memberId: null,
  239. // name: null,
  240. // legalPerson: null,
  241. // legalMp: null,
  242. // legalCertId: null,
  243. // legalCertIdExpires: null,
  244. // cardNo: null,
  245. // bankCode: null,
  246. // provCode: null,
  247. // areaCode: null,
  248. // socialCreditCode: null,
  249. // socialCreditCodeExpires: null,
  250. // businessScope: null,
  251. // address: null,
  252. // multipartFile: null,
  253. // zipCode: null
  254. // }
  255. this.$refs["accountForm"].resetFields()
  256. }
  257. },
  258. async onSubmit (formName) {
  259. this.$refs[formName].validate(valid => {
  260. if (valid) {
  261. const form = this.form
  262. let formData = new FormData()
  263. formData.append("memberId", form.memberId)
  264. formData.append("name", form.name)
  265. formData.append("legalPerson", form.legalPerson)
  266. formData.append("legalMp", form.legalMp)
  267. formData.append("legalCertId", form.legalCertId)
  268. formData.append("legalCertIdExpires", form.legalCertIdExpires)
  269. formData.append("cardNo", form.cardNo)
  270. formData.append("bankCode", form.bankCode)
  271. formData.append("provCode", form.provCode)
  272. formData.append("areaCode", form.areaCode)
  273. formData.append("socialCreditCode", form.socialCreditCode)
  274. formData.append("socialCreditCodeExpires", form.socialCreditCodeExpires)
  275. formData.append("businessScope", form.businessScope)
  276. formData.append("address", form.address)
  277. formData.append("multipartFile", form.multipartFile)
  278. formData.append("zipCode", form.zipCode)
  279. if(this.payType == 'create') {
  280. createMember(formData).then(res => {
  281. if(res.code == 200) {
  282. this.$message.success('保存成功')
  283. this.onCancel()
  284. } else {
  285. this.$message.error(res.msg)
  286. }
  287. })
  288. } else if(this.payType == 'update') {
  289. formData.append('id', this.id)
  290. updateMember(formData).then(res => {
  291. if(res.code == 200) {
  292. this.$message.success('保存成功')
  293. this.onCancel()
  294. } else {
  295. this.$message.error(res.msg)
  296. }
  297. })
  298. }
  299. } else {
  300. return false;
  301. }
  302. });
  303. },
  304. handleChange(file) {
  305. this.files = file
  306. this.form.multipartFile = file.raw
  307. this.$refs["accountForm"].validateField('multipartFile')
  308. },
  309. handleRemove(file, fileList) {
  310. this.files = null
  311. this.form.multipartFile = null
  312. },
  313. handlePreview(file) {
  314. // console.log(file);
  315. },
  316. onProvChange(value) {
  317. this.form.areaCode = null
  318. this.cityList.forEach(item => {
  319. if(item.value == value) {
  320. this.selectListCity = item.cities
  321. }
  322. })
  323. },
  324. onCancel () {
  325. this.files = null
  326. this.fileList = []
  327. this.form.multipartFile = null
  328. this.$router.push({
  329. path: "/insideSetting/adapayManager"
  330. });
  331. }
  332. },
  333. };
  334. </script>
  335. <style lang='scss' scoped>
  336. .el-input, .el-textarea, .el-select {
  337. width: 100% !important;
  338. }
  339. .el-button--primary {
  340. background: #14928a;
  341. border-color: #14928a;
  342. color: #fff;
  343. &:hover,
  344. &:active,
  345. &:focus {
  346. background: #14928a;
  347. border-color: #14928a;
  348. color: #fff;
  349. }
  350. }
  351. /deep/.avatar-uploader {
  352. .el-upload {
  353. border: 1px dashed #d9d9d9;
  354. border-radius: 6px;
  355. cursor: pointer;
  356. position: relative;
  357. overflow: hidden;
  358. &:hover {
  359. border-color: #409EFF;
  360. }
  361. }
  362. }
  363. .uploadFile {
  364. /deep/.el-input__inner {
  365. padding: 0;
  366. height: 40px;
  367. line-height: 32px;
  368. }
  369. }
  370. .avatar-uploader-icon {
  371. font-size: 28px;
  372. color: #8c939d;
  373. width: 178px;
  374. height: 178px;
  375. line-height: 178px;
  376. text-align: center;
  377. }
  378. .avatar {
  379. width: 178px;
  380. height: 178px;
  381. display: block;
  382. }
  383. </style>