shop-info.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. <template>
  2. <view>
  3. <u-navbar title="店铺资料" title-color="#fff" back-icon-color="#fff" :background="background"
  4. :border-bottom="false"></u-navbar>
  5. <view class="bg"></view>
  6. <view class="card">
  7. <view class="title u-flex u-row-between u-col-center">
  8. <text>完善商家资料</text>
  9. <text v-if="step==2||step==3" @click="prevStep" class="u-font-24" style="color: #999">上一步</text>
  10. </view>
  11. <u-form :model="form" :label-width="labelWidth" ref="uForm">
  12. <block v-if="step==1">
  13. <view class="border">
  14. <u-form-item label="门店名称" prop="name">
  15. <u-input :border="false" placeholder="比如名杨国福麻辣烫(时尚天河2店)" v-model="form.name"></u-input>
  16. </u-form-item>
  17. </view>
  18. <view class="border">
  19. <u-form-item label="业务联系人" prop="personName">
  20. <u-input :disabled="isEdit" :border="false" placeholder="请输入业务联系人"
  21. v-model="form.personName"></u-input>
  22. </u-form-item>
  23. </view>
  24. <view class="tips">
  25. <text>*认证通过后,业务联系人将不可修改</text>
  26. </view>
  27. <view class="border">
  28. <u-form-item label="联系方式" prop="personTel">
  29. <u-input disabled placeholder="请输入联系方式" v-model="form.personTel" type="number"></u-input>
  30. </u-form-item>
  31. </view>
  32. <view class="border">
  33. <u-form-item label="邮箱" prop="email">
  34. <u-input :border="false" placeholder="请输入邮箱(非必填项)" v-model="form.email"></u-input>
  35. </u-form-item>
  36. </view>
  37. <view class="border">
  38. <u-form-item label="所在商场" prop="phone">
  39. <u-input @click="mallShow=true" :border="false" placeholder="请选择所在商场(非必填项)"
  40. v-model="mallLabel" type="select"></u-input>
  41. <u-icon class="clear" color="#999" v-if="mallLabel" name="close-circle-fill"
  42. @click.stop="clear('mallLabel')"></u-icon>
  43. </u-form-item>
  44. </view>
  45. <view class="border" v-if="form.mallId&&!$isEmpty(mallAreaList)">
  46. <u-form-item label="所在区域" prop="phone">
  47. <u-input @click="mallAreaShow=true" :border="false" placeholder="请选择所在区域"
  48. v-model="mallAreaLabel" type="select"></u-input>
  49. <u-icon class="clear" color="#999" v-if="mallAreaLabel" name="close-circle-fill"
  50. @click.stop="clear('mallAreaLabel')"></u-icon>
  51. </u-form-item>
  52. </view>
  53. <view class="border">
  54. <u-form-item label="店铺标语" prop="name">
  55. <u-input :border="false" placeholder="请输入店铺标语(非必填项)" v-model="form.slogan"></u-input>
  56. </u-form-item>
  57. </view>
  58. <view class="border">
  59. <u-form-item label-width="200" label="公司种类" left-icon="grid">
  60. <view class="flex justify-between " @click="chooseLabel">
  61. <view class="u-flex u-flex-wrap">
  62. <text v-if="form.labelKey" class="text-cut-1">{{form.labelKey}}</text>
  63. <text v-else style="color: #c0c4cc;">请选择</text>
  64. </view>
  65. <view>
  66. <u-icon name="arrow-right" color="#737373"></u-icon>
  67. </view>
  68. </view>
  69. </u-form-item>
  70. </view>
  71. <view class="border">
  72. <u-form-item label="所在地区" prop="address">
  73. <u-input :disabled="true" :border="false" placeholder="请选择所在地区" @click="regionShow=true" v-model="form.location"></u-input>
  74. </u-form-item>
  75. </view>
  76. <view class="border">
  77. <u-form-item label="具体地址" label-position="top" prop="address">
  78. <u-input :border="false" placeholder="请详细写到门店编号" v-model="form.address"></u-input>
  79. <view slot="right">
  80. <u-button @click="chooseAddress" size="mini">获取地址</u-button>
  81. </view>
  82. </u-form-item>
  83. </view>
  84. </block>
  85. <block v-else-if="step==2">
  86. <view class="border">
  87. <u-form-item label="上传店铺封面" prop="cover" label-position="top">
  88. <upload-img title="请上传店铺封面" @click="chooseImageShop" :model="form.cover"
  89. dataName="cover" ></upload-img>
  90. </u-form-item>
  91. </view>
  92. <view class="border">
  93. <u-form-item label="上传营业执照" prop="businessLicense" label-position="top">
  94. <upload-img title="请上传营业执照" @click="chooseImageAudit" :model="auditForm.businessLicense"
  95. dataName="businessLicense" ></upload-img>
  96. </u-form-item>
  97. </view>
  98. <view class="tips">
  99. <text>*认证通过后,营业执照将不可修改</text>
  100. </view>
  101. <view class="border">
  102. <view style="padding: 30rpx 0 10rpx;">
  103. <text>店铺实况</text>
  104. <text style="font-size: 24rpx;color: #999999;">(请上传门头、店内、收银台照片)</text>
  105. <mp-upload-img @click='uploadShopPics' :count="5"></mp-upload-img>
  106. </view>
  107. </view>
  108. </block>
  109. <block v-else>
  110. <view class="border">
  111. <u-form-item label="公司法人姓名" prop="legalPerson" label-position="top">
  112. <u-input :border="false" placeholder="请输入公司法人姓名(非必填项)" v-model="auditForm.legalPerson">
  113. </u-input>
  114. </u-form-item>
  115. </view>
  116. <view class="border">
  117. <u-form-item label="身份证号码" prop="personIdCard">
  118. <u-input :disabled="isEdit" :border="false" placeholder="请输入身份证号码"
  119. v-model="auditForm.idCard"></u-input>
  120. </u-form-item>
  121. </view>
  122. <view class="tips">
  123. <text>*认证通过后,身份证将不可修改</text>
  124. </view>
  125. <view class="photo border">
  126. <text>请拿出本人有效二代身份证件准备拍摄</text>
  127. <view class="box">
  128. <upload-img title="上传人像面照片" @click="chooseImageAudit" :model="auditForm.idCardFront"
  129. dataName="idCardFront" :enableImg="true"></upload-img>
  130. </view>
  131. <view class="tips">
  132. <text>*认证通过后,身份证人像面将不可修改</text>
  133. </view>
  134. <view class="box" style="margin-top: 0;">
  135. <upload-img title="上传国徽面照片" @click="chooseImageAudit" :model="auditForm.idCardContrary"
  136. dataName="idCardContrary" :enableImg="true" :bgImg="idCardContraryBgImg"></upload-img>
  137. </view>
  138. <view class="tips">
  139. <text>*认证通过后,身份证国徽面将不可修改</text>
  140. </view>
  141. <view style="margin: 30rpx 0;">
  142. <text>拍摄时确保身份证边框完整,字体清晰,亮度均匀</text>
  143. </view>
  144. </view>
  145. </block>
  146. </u-form>
  147. <view v-if="step==1||step==2" class="center flex-direction" style="margin-top: 100rpx;">
  148. <view @click="nextStep" class="btn cu-btn round" style="width:90%;height: 90rpx;font-size: 34rpx;">
  149. 下一步
  150. </view>
  151. </view>
  152. <view v-else class="center flex-direction margin-bottom-30" style="margin-top: 100rpx;">
  153. <view v-if="!isEdit" class=" margin-bottom-20 text-sm center ">
  154. <text style="color: #949494;">确认注册即代表已阅读并同意</text>
  155. <text style="color: #104DFF;" @click="protocol">《联兑通软件服务协议》</text>
  156. </view>
  157. <view @click="submit" class="btn cu-btn round" style="width:90%;height: 90rpx;font-size: 34rpx;">
  158. 提交资料
  159. </view>
  160. </view>
  161. </view>
  162. <!-- 商场 -->
  163. <u-popup border-radius="60" height="60%" mode="bottom" v-model="mallShow">
  164. <view class="fixed cu-bar search bg-white">
  165. <view class="search-form round">
  166. <text class="cuIcon-search"></text>
  167. <u-input style="width: 90%;" v-model="mallKeyWord" type="text" :adjust-position="false"
  168. placeholder="请输入关键字搜索" confirm-type="search" />
  169. </view>
  170. </view>
  171. <scroll-view v-if="!$isEmpty(mallList)" style="padding-top: 110rpx;height: 100%;" :scroll-y="true">
  172. <view @click="selectMall(item)" hover-class="hoverClass" class="text-center padding-30 solid-bottom"
  173. v-for="(item,index) in mallList" :key="index">
  174. <text>{{item.name}}</text>
  175. </view>
  176. <u-divider v-if="mallList.length>=20" height="80">只显示20条数据</u-divider>
  177. </scroll-view>
  178. <u-empty v-else name="search"></u-empty>
  179. </u-popup>
  180. <u-select v-model="mallAreaShow" label-name="name" value-name="id" mode="single-column" :list="mallAreaList"
  181. @confirm="mallAreaConfirm"></u-select>
  182. <u-picker @confirm="regionConfirm" v-model="regionShow" mode="region"></u-picker>
  183. </view>
  184. </template>
  185. <script>
  186. import mpUploadImg from "@/components/mp-uploadImg/mp-uploadImg.vue"
  187. import uploadImg from "@/components/uploadimg/uploadImg.vue"
  188. export default {
  189. components: {
  190. uploadImg,mpUploadImg
  191. },
  192. data() {
  193. return {
  194. //身份证正面背景图
  195. idCardContraryBgImg: 'https://guosen-bucket-ldt.obs.cn-south-1.myhuaweicloud.com:443/525724b4977d457eafea331f8595a675-6MM5CLdbBt1z7042ac12465719c764f2ca05a37ffee9.png',
  196. //上传图片
  197. imgList: [],
  198. title: '',
  199. background: {
  200. backgroundColor: '#D18C42',
  201. },
  202. labelWidth: 170,
  203. //商户实体
  204. form: {
  205. id: '',
  206. mallId: '',
  207. personName: '',
  208. personTel: '',
  209. locationCode:'',
  210. location:'',
  211. cover: '',
  212. name: '',
  213. labelParentIds:'',
  214. labelJson:"",
  215. labelKey:"",
  216. shopPic:"",
  217. email: '',
  218. slogan: '',
  219. longitude:'',
  220. latitude:'',
  221. address:'',
  222. auditStatus: this.$global.SHOP_AUDIT.WAITING,//待审核
  223. },
  224. auditForm:{
  225. address:"",
  226. entity:'',
  227. idCard:'',
  228. idCardFront:'',
  229. idCardContrary:'',
  230. businessLicense:'',
  231. legalPerson:"",
  232. },
  233. //商场
  234. mallShow: false,
  235. mallKeyWord: '',
  236. mallList: [],
  237. mallLabel: '',
  238. //区域
  239. mallAreaShow: false,
  240. mallAreaList: [],
  241. mallAreaLabel: '',
  242. //所在地区
  243. regionShow:false,
  244. //门店地址
  245. shopAddress: '',
  246. step: 1,
  247. //编辑还是修改
  248. isEdit: false
  249. }
  250. },
  251. watch: {
  252. mallKeyWord() {
  253. let that = this
  254. //节流函数
  255. if (this.timer) {
  256. clearTimeout(this.timer)
  257. }
  258. this.timer = setTimeout(() => {
  259. this.mallList = []
  260. that.fetchMallList()
  261. }, 500)
  262. },
  263. imgList() {
  264. if (!this.$isEmpty(this.imgList)) {
  265. this.form.shopPic = this.imgList.join(",")
  266. }
  267. }
  268. },
  269. onLoad(options) {
  270. if (this.$isEmpty(options.phone)) {
  271. this.$dialog.showModal('系统错误', false).then(() => {
  272. this.$back()
  273. })
  274. return
  275. }
  276. uni.$on('labelData',(labelData)=>{
  277. this.form.labelJson=labelData.labelJson
  278. this.form.labelKey=labelData.labelKey
  279. this.form.labelParentIds=labelData.labelParentIds
  280. this.$forceUpdate()
  281. })
  282. this.form.personTel = options.phone
  283. if (options.edit) {
  284. this.isEdit = true
  285. this.fetchShopDetail()
  286. }
  287. this.fetchMallList()
  288. },
  289. methods: {
  290. //所在地区
  291. regionConfirm(e){
  292. this.form.location=e.province.label+"-"+e.city.label+"-"+e.area.label
  293. this.form.locationCode=e.province.value+"0000,"+e.city.value+"00,"+e.area.value
  294. },
  295. //具体地址
  296. chooseAddress() {
  297. var _this = this
  298. uni.chooseLocation({
  299. success(res) {
  300. console.log(res);
  301. _this.form.address = res.address
  302. _this.form.longitude = res.longitude
  303. _this.form.latitude = res.latitude
  304. }
  305. })
  306. },
  307. //选择标签
  308. chooseLabel(){
  309. uni.navigateTo({
  310. url:"../chooseLable/chooseLable?label="+this.form.labelJson
  311. })
  312. },
  313. uploadShopPics(data) {
  314. this.imgList=data
  315. },
  316. async fetchShopDetail() {
  317. let params = {
  318. id: this.vuex_shopId
  319. }
  320. let res = await this.$api.shop.detail(params)
  321. this.$util.objectCoppy(this.form, res.data)
  322. this.mallLabel = res.data.mallName
  323. this.imgList = this.form.shopPic.split(",")
  324. this.getShopLabelByMallId()
  325. },
  326. prevStep() {
  327. if (this.step > 1 && this.step < 4) {
  328. this.step--
  329. }
  330. },
  331. nextStep() {
  332. if (this.step == 1) {
  333. if (this.$isEmpty(this.form.name)) {
  334. this.$u.toast('请输入店铺名')
  335. return
  336. }
  337. if (this.$isEmpty(this.form.personName)) {
  338. this.$u.toast('请输入业务联系人')
  339. return
  340. }
  341. if (this.$isEmpty(this.form.labelKey)) {
  342. this.$u.toast('请选择公司种类')
  343. return
  344. }
  345. if (this.$isEmpty(this.form.location)) {
  346. this.$u.toast('请选择所在地区')
  347. return
  348. }
  349. if (this.$isEmpty(this.form.address)) {
  350. this.$u.toast('请选择具体地址')
  351. return
  352. }
  353. }
  354. if (this.step == 2) {
  355. if (this.$isEmpty(this.auditForm.businessLicense)) {
  356. this.$u.toast('请上传营业执照')
  357. return
  358. }
  359. }
  360. if (this.step > 0 && this.step < 3) {
  361. this.step++
  362. }
  363. },
  364. clear(t) {
  365. if (t == 'mallAreaLabel') {
  366. this.mallAreaLabel = ''
  367. } else if (t == 'mallLabel') {
  368. this.mallLabel = ''
  369. }
  370. },
  371. async chooseImageShop(name) {
  372. let res = await this.$mpi.chooseImage()
  373. this.$api.uploadFile(res[0]).then(res => {
  374. this.form[name] = res.data.link
  375. })
  376. },
  377. async chooseImageAudit(name) {
  378. if (this.isEdit) {
  379. this.$u.toast('不可修改')
  380. return
  381. }
  382. let res = await this.$mpi.chooseImage()
  383. this.$api.uploadFile(res[0]).then(res => {
  384. this.auditForm[name] = res.data.link
  385. console.log(this.auditForm[name]);
  386. })
  387. },
  388. fetchMallList() {
  389. let params = {
  390. name: this.mallKeyWord,
  391. size: 20
  392. }
  393. this.$api.mall.list(params).then(res => {
  394. this.mallList = res.data.records
  395. })
  396. },
  397. fetchMallAreaList() {
  398. this.$api.mall.getMallAreaByMallId(this.form.mallId).then(res => {
  399. this.mallAreaList = res.data
  400. })
  401. },
  402. selectMall(item) {
  403. this.mallLabel = item.name
  404. this.form.mallId = item.id
  405. this.mallShow = false
  406. // this.fetchMallAreaList()
  407. //重新获取标签
  408. this.getShopLabelByMallId()
  409. },
  410. mallAreaConfirm(e) {
  411. this.mallAreaLabel = e[0].label
  412. this.form.mallAreaId = e[0].value
  413. },
  414. submit() {
  415. if (this.$isEmpty(this.auditForm.idCard)) {
  416. this.$u.toast('请输入身份证号码')
  417. return
  418. }
  419. if (this.$isEmpty(this.auditForm.idCardFront)) {
  420. this.$u.toast('请上传身份证正面照')
  421. return
  422. }
  423. if (this.$isEmpty(this.auditForm.idCardContrary)) {
  424. this.$u.toast('请上传身份证反面照')
  425. return
  426. }
  427. let params={
  428. shop:this.form,
  429. audit:this.auditForm
  430. }
  431. this.$api.shop.submitAudit(params).then(res=>{
  432. if (res.success == true) {
  433. uni.navigateTo({
  434. url:"/pages/login/submit-success"
  435. })
  436. }
  437. })
  438. },
  439. protocol() {
  440. uni.navigateTo({
  441. url: "/pages/webView/webView?url=" + this.$global.shopRegister
  442. })
  443. },
  444. }
  445. }
  446. </script>
  447. <style lang="scss" scoped>
  448. .clear {
  449. position: absolute;
  450. right: 50rpx;
  451. top: 50%;
  452. transform: translateY(-50%);
  453. z-index: 99;
  454. }
  455. .bg {
  456. height: 220rpx;
  457. background-image: linear-gradient(#D18C42, #C99864);
  458. border-radius: 0 0 30% 30%;
  459. }
  460. .btn {
  461. background-color: $color;
  462. color: #FFFFFF;
  463. }
  464. .border {
  465. border-bottom: 1rpx solid #F4F4F4;
  466. }
  467. .tips {
  468. color: $color;
  469. text-align: right;
  470. margin-top: 10rpx;
  471. font-size: 22rpx;
  472. }
  473. .card {
  474. box-shadow: 0 0 20rpx #bebebe;
  475. background-color: #FFFFFF;
  476. border-radius: 20rpx;
  477. position: relative;
  478. top: -180rpx;
  479. margin: 0 30rpx;
  480. padding: 40rpx;
  481. .title {
  482. margin-bottom: 30rpx;
  483. font-size: 36rpx;
  484. color: #000;
  485. font-weight: 800;
  486. }
  487. .photo {
  488. font-size: 26rpx;
  489. padding-top: 20rpx;
  490. .box {
  491. display: flex;
  492. justify-content: center;
  493. align-items: center;
  494. margin-top: 30rpx;
  495. }
  496. }
  497. }
  498. </style>