feat: 新增店铺入驻功能,买家端可直接申请店铺入驻

master
Yer 2023-07-18 17:14:53 +08:00
commit 99079f0b3d
16 changed files with 1254 additions and 32 deletions

41
api/entry.js Normal file
View File

@ -0,0 +1,41 @@
/**
* 入驻类相关api
*/
import { http, Method } from "@/utils/request.js";
// 获取当前用户的代理入驻详情
export function getCompanyDetail(params) {
return http.request({
url: "/store/store/apply",
method: Method.GET,
params,
});
}
// 申请店铺第一步-填写企业信息
export function applyFirst(params) {
return http.request({
url: "/store/store/apply/first",
method: Method.PUT,
params,
});
}
// 申请店铺第二步-填写银行
export function applySecond(params) {
return http.request({
url: "/store/store/apply/second",
method: Method.PUT,
params,
});
}
// 申请店铺第三步-填写银行
export function applyThird(params) {
return http.request({
url: "/store/store/apply/third",
method: Method.PUT,
params,
});
}

View File

@ -483,6 +483,21 @@
}
}
},
{
"path": "entry/seller/index",
"style": {
"navigationBarTitleText": "店铺入驻",
"navigationStyle": "custom"
}
},
{
"path": "entry/seller/control",
"style": {
"navigationBarTitleText": "",
"navigationStyle": "custom"
}
},
{
"path": "article",
"style": {

View File

@ -40,7 +40,7 @@
<script>
import { addAddress, editAddress, getAddressDetail } from "@/api/address.js";
import city from "@/components/m-city/m-city.vue";
import uniMap from "./uniMap";
import uniMap from "@/components/uniMap";
import permision from "@/js_sdk/wa-permission/permission.js";
export default {
components: {

View File

@ -27,6 +27,10 @@ export default {
title: "关于我们",
type: "ABOUT",
},
STORE_REGISTER: {
title: "店铺入驻协议",
type: "STORE_REGISTER",
},
},
};
},

View File

@ -5,7 +5,7 @@
</u-navbar>
<u-empty text="暂无历史记录" style="margin-top:200rpx;" mode="history" v-if="whetherEmpty"></u-empty>
<div v-else>
<view v-for="(item, index) in trackList" :key="index">
<view v-if="item" v-for="(item, index) in trackList" :key="index">
<view class="myTracks-title" @click="navigateToStore(item)" v-if="item.storeName">{{item.storeName}}</view>
<view class="myTracks-items">

View File

@ -0,0 +1,54 @@
<template>
<div>
<u-navbar :border-bottom="false"></u-navbar>
<step1 v-if="current == 1" :companyData="companyData" @callback="next()" />
<step2 v-if="current == 2" :companyData="companyData" @callback="next()" />
<step3
v-if="current == 3"
:companyData="companyData"
@callback="finished()"
/>
</div>
</template>
<script>
import { getCompanyDetail } from "@/api/entry";
import step1 from "./step1";
import step2 from "./step2";
import step3 from "./step3";
export default {
data() {
return {
companyData: "",
current: 1,
};
},
components: {
step1,
step2,
step3,
},
mounted() {
this.init();
},
methods: {
async init(next) {
const res = await getCompanyDetail();
if (res.data.success) {
this.companyData = res.data.result;
next ? this.current++ : "";
}
},
next() {
this.init("next");
},
finished() {
uni.navigateTo({
url: "/pages/passport/entry/seller/index",
});
},
},
};
</script>
<style lang="scss" scoped></style>

View File

@ -0,0 +1,18 @@
.flag-title {
font-size: 42rpx;
font-weight: bold;
}
.submit,
.notice {
font-weight: bold;
font-size: 28rpx;
height: 92rpx;
text-align: center;
letter-spacing: 4rpx;
line-height: 92rpx;
border-radius: 20rpx;
}
.wrapper {
padding:16rpx;
}

View File

@ -0,0 +1,162 @@
<template>
<div class="wrapper">
<u-navbar :border-bottom="false"></u-navbar>
<div>
<div class="title">店铺入驻</div>
<div class="step-list">
<div
class="step-item"
:class="{ active: current == index }"
v-for="(item, index) in entrySteps"
:key="index"
>
{{ item.title }}
</div>
</div>
<div class="submit" @click="keepOn()"></div>
<div class="notice" @click="getEntryNotice"></div>
</div>
</div>
</template>
<script>
import { getCompanyDetail } from "@/api/entry";
export default {
components: {},
data() {
return {
current: 999,
entrySteps: [
{
title: "填写资质信息",
value: "APPLY",
},
{
title: "提交审核",
value: "APPLYING",
},
],
storeStatusWay: [
{
title: "申请已通过,请联系管理员",
value: "OPEN",
},
{
title: "店铺已关闭,重申请联系管理员",
value: "CLOSED",
},
{
title: "审核未通过,请修改资质信息",
value: "REFUSED",
},
],
companyData: "", //
};
},
onShow() {
this.init();
},
mounted() {},
onLoad(options) {},
methods: {
getEntryNotice() {
uni.navigateTo({
url: "/pages/mine/help/tips?type=STORE_REGISTER",
});
},
keepOn() {
if (this.companyData && this.companyData.storeDisable == "OPEN") {
uni.showToast({
title:""
})
} else {
uni.navigateTo({
url: "/pages/passport/entry/seller/control",
});
}
},
async init() {
this.entrySteps = [
{
title: "填写资质信息",
value: "APPLY",
},
{
title: "提交审核",
value: "APPLYING",
},
];
const res = await getCompanyDetail();
if (res.data.success) {
this.companyData = res.data.result;
if (this.companyData) {
this.storeStatusWay.forEach((item) => {
if (item.value == this.companyData.storeDisable) {
this.entrySteps.push(item);
}
});
this.current =
this.entrySteps.findIndex(
(item) => item.value == this.companyData.storeDisable
) || 0;
} else {
this.current = 0;
}
}
},
},
};
</script>
<style>
page {
background: #fff;
}
</style>
<style lang="scss" scoped>
@import url("./entry.scss");
.wrapper {
padding: 0 80rpx;
}
.title {
padding-top: calc(104rpx);
font-style: normal;
line-height: 1;
font-weight: 500;
font-size: 56rpx;
color: #333;
padding-left: 20rpx;
}
.step-item {
padding: 30rpx 20rpx;
font-size: 40rpx;
font-weight: bold;
color: #666;
}
.step-list {
margin: 80rpx 0;
overflow: hidden;
}
.active {
color: $light-color;
background: rgba($color: $light-color, $alpha: 0.1);
border-radius: 20rpx;
}
.submit {
color: #fff;
margin-top: 120rpx;
background: rgba($light-color, 0.8);
}
.notice {
margin-top: 40rpx;
color: #333;
background: $bg-color;
}
</style>

View File

@ -0,0 +1,392 @@
<template>
<div class="wrapper">
<u-form label-width="200" :model="form" ref="uForm">
<div class="column">
<div class="flag-title light-color">基础信息</div>
<u-form-item
required
:border-bottom="false"
prop="companyName"
label="公司名称"
><u-input
v-model="form.companyName"
:custom-style="defaultInputStyle"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="companyAddressPath"
label="公司所在地"
><u-input
type="select"
:custom-style="defaultInputStyle"
v-model="form.companyAddressPath"
disabled
@click="showPicker()"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="companyAddress"
label="公司详细地址"
><u-input
:custom-style="defaultInputStyle"
v-model="form.companyAddress"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="employeeNum"
label="员工人数"
><u-input
type="number"
:custom-style="defaultInputStyle"
v-model="form.employeeNum"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="companyPhone"
label="公司电话"
><u-input
type="number"
:custom-style="defaultInputStyle"
v-model="form.companyPhone"
/></u-form-item>
<u-form-item
:border-bottom="false"
prop="registeredCapital"
label="注册资金"
required
><u-input
type="number"
:custom-style="defaultInputStyle"
v-model="form.registeredCapital"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="linkName"
label="联系人姓名"
><u-input :custom-style="defaultInputStyle" v-model="form.linkName"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="linkPhone"
label="联系人电话"
><u-input
type="number"
:custom-style="defaultInputStyle"
v-model="form.linkPhone"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="companyEmail"
label="电子邮箱"
><u-input
:custom-style="defaultInputStyle"
v-model="form.companyEmail"
/></u-form-item>
</div>
<div class="column">
<div class="flag-title light-color">营业执照信息</div>
<u-form-item
required
:border-bottom="false"
prop="licenseNum"
label="营业执照号"
><u-input :custom-style="defaultInputStyle" v-model="form.licenseNum"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="scope"
label="法定经营范围"
><u-input :custom-style="defaultInputStyle" v-model="form.scope"
/></u-form-item>
<u-form-item
:border-bottom="false"
prop="licencePhoto"
label="营业执照电子版"
required
>
<div>
<u-upload
:file-list="licencePhotoFileList"
:header="{ accessToken: storage.getAccessToken() }"
:action="action"
width="200"
@on-uploaded="onUploaded($event, 'licencePhoto')"
:max-count="1"
:show-progress="false"
></u-upload>
<div class="tips">
请压缩图片在2M以内确保文字清晰以免上传或审核失败
</div>
</div>
</u-form-item>
</div>
<div class="column">
<div class="flag-title light-color">法人信息</div>
<u-form-item
required
:border-bottom="false"
prop="legalName"
label="法人姓名"
><u-input :custom-style="defaultInputStyle" v-model="form.legalName"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="legalId"
label="法人证件号"
><u-input :custom-style="defaultInputStyle" v-model="form.legalId"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="legalPhoto"
label="法人证件电子版"
>
<div>
<u-upload
:file-list="legalPhotoFileList"
:header="{ accessToken: storage.getAccessToken() }"
:action="action"
width="200"
@on-uploaded="onUploaded($event, 'legalPhoto')"
:max-count="1"
:show-progress="false"
></u-upload>
</div>
</u-form-item>
</div>
</u-form>
<div class="submit" @click="validatorStep1Form">/</div>
<m-city
:provinceData="list"
headTitle="区域选择"
ref="cityPicker"
@funcValue="getPickerParentValue"
pickerSize="4"
>
</m-city>
</div>
</template>
<script>
import { applyFirst } from "@/api/entry";
import city from "@/components/m-city/m-city.vue";
import storage from "@/utils/storage.js";
import { upload } from "@/api/common.js";
import * as RegExp from "@/utils/RegExp.js";
export default {
components: { "m-city": city },
data() {
return {
storage,
action: upload, //
defaultInputStyle: {
background: "#f7f7f7",
padding: "0 20rpx",
"border-radius": "10rpx",
},
legalPhotoFileList: [],
licencePhotoFileList: [],
form: {
companyName: "",
companyAddressIdPath: [],
companyAddressPath: "",
companyAddress: "",
employeeNum: "",
registeredCapital: "",
linkName: "",
linkPhone: "",
companyPhone: "",
companyEmail: "",
licenseNum: "",
scope: "",
legalPhoto: "",
licencePhoto: "",
legalName: "",
legalId: "",
},
list: [
{
id: "",
localName: "请选择",
children: [],
},
],
rules: {
//
companyName: [{ required: true, message: "请填写公司信息" }],
companyAddressPath: [{ required: true, message: "请选择公司所在地" }],
companyAddress: [{ required: true, message: "请填写公司详细地址" }],
employeeNum: [{ required: true, message: "请填写公司员工总数" }],
registeredCapital: [{ required: true, message: "请填写公司注册资金" }],
linkName: [{ required: true, message: "请填写联系人姓名" }],
linkPhone: [
{ required: true, message: "请填写联系人电话" },
{
//
validator: (rule, value, callback) => {
// truefalse
// this.$u.test.mobile()truefalse
return this.$u.test.mobile(value);
},
message: "手机号码不正确",
// blurchange
trigger: ["change", "blur"],
},
],
companyPhone: [
{ required: true, message: "请填写公司电话" },
{
//
validator: (rule, value, callback) => {
// truefalse
// this.$u.test.mobile()truefalse
return this.$u.test.mobile(value);
},
message: "请填写正确的号码",
// blurchange
trigger: ["change", "blur"],
},
],
companyEmail: [
{ required: true, message: "请填写电子邮箱" },
{
//
validator: (rule, value, callback) => {
// truefalse
// this.$u.test.mobile()truefalse
return this.$u.test.email(value);
},
message: "请填写正确的电子邮箱",
// blurchange
trigger: ["change", "blur"],
},
],
licenseNum: [
{ required: true, message: "请填写营业执照号" },
{ pattern: RegExp.licenseNum, message: "请输入正确的营业执照号" },
],
scope: [{ required: true, message: "请填写营业执照所示经营范围" }],
legalPhoto: [{ required: true, message: "请上传法人身份证照片" }],
licencePhoto: [{ required: true, message: "请上传营业执照" }],
legalName: [{ required: true, message: "请输入法人姓名" }],
legalId: [
{ required: true, message: "请输入法人证件号" },
{ pattern: RegExp.IDCard, message: "请输入正确的证件号" },
],
},
};
},
mounted() {
this.$refs.uForm.setRules(this.rules);
},
props: ["companyData"],
watch: {
companyData: {
handler(val) {
if (val) {
this.$set(this, "form", val);
//
const judgeDeepPhoto = ["legalPhoto", "licencePhoto"];
judgeDeepPhoto.forEach((key) => {
if (this.form[key]) {
this.form[key].split(",").forEach((item) => {
this[`${key}FileList`].push({ url: item });
});
}
});
}
},
deep: true,
},
},
methods: {
//
onUploaded(lists, key) {
let images = [];
lists.forEach((item) => {
images.push(item.response.result);
});
this.form[key] = images;
},
getPickerParentValue(e) {
this.form.companyAddressIdPath = [];
let name = "";
e.forEach((item, index) => {
if (item.id) {
//
this.form.companyAddressIdPath.push(item.id);
if (index == e.length - 1) {
name += item.localName;
} else {
name += item.localName + ",";
}
this.form.companyAddressPath = name;
}
});
},
//
showPicker() {
this.$refs.cityPicker.show();
},
validatorStep1Form() {
this.$refs.uForm.validate(async (valid) => {
console.log(valid);
if (valid) {
const params = { ...this.form };
params.legalPhoto = params.legalPhoto.toString();
params.licencePhoto = params.licencePhoto.toString();
params.companyAddressIdPath = params.companyAddressIdPath.toString();
delete params.complexAddress;
const res = await applyFirst(params);
if (res.data.success) {
uni.showToast({
title: "提交成功!",
icon: "none",
});
this.$emit("callback");
}
}
});
},
},
};
</script>
<style>
/* page {
background: #fff;
} */
</style>
<style lang="scss" scoped>
@import url("./entry.scss");
.column {
padding: 32rpx;
margin-bottom: 20rpx;
background: #fff;
}
.submit {
color: #fff;
margin-top: 120rpx;
background: rgba($light-color, 0.8);
}
.tips {
color: #999;
font-size: 24rpx;
line-height: 1.2;
margin-top: 10rpx;
}
</style>

View File

@ -0,0 +1,144 @@
<template>
<div class="wrapper">
<u-form label-width="250" :model="form" ref="uForm">
<div class="column">
<div class="flag-title light-color">基础信息</div>
<u-form-item
required
:border-bottom="false"
prop="settlementBankAccountName"
label="银行开户名"
><u-input
v-model="form.settlementBankAccountName"
:custom-style="defaultInputStyle"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="settlementBankAccountNum"
label="银行账号"
><u-input
:custom-style="defaultInputStyle"
v-model="form.settlementBankAccountNum"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="settlementBankBranchName"
label="开户银行支行名称"
><u-input
:custom-style="defaultInputStyle"
v-model="form.settlementBankBranchName"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="settlementBankJointName"
label="支行联行号"
><u-input
:custom-style="defaultInputStyle"
v-model="form.settlementBankJointName"
/></u-form-item>
</div>
</u-form>
<div class="submit" @click="validatorStep2Form">/</div>
</div>
</template>
<script>
import { applySecond } from "@/api/entry";
export default {
data() {
return {
defaultInputStyle: {
background: "#f7f7f7",
padding: "0 20rpx",
"border-radius": "10rpx",
},
form: {
settlementBankAccountName: "",
settlementBankAccountNum: "",
settlementBankBranchName: "",
settlementBankJointName: "",
},
rules: {
//
settlementBankAccountName: [
{ required: true, message: "请填写银行开户名称" },
],
settlementBankAccountNum: [
{ required: true, message: "请填写银行账号" },
],
settlementBankBranchName: [
{ required: true, message: "请填写开户银行支行名称" },
],
settlementBankJointName: [
{ required: true, message: "请填写支行联行号" },
],
},
};
},
mounted() {
this.$refs.uForm.setRules(this.rules);
},
props: ["companyData"],
watch: {
companyData: {
handler(val) {
this.$set(this, "form", val);
console.log(this.form)
},
deep: true,
immediate:true
},
},
methods: {
validatorStep2Form() {
this.$refs.uForm.validate(async (valid) => {
if (valid) {
const params = { ...this.form };
const res = await applySecond(params);
if (res.data.success) {
uni.showToast({
title: "提交成功!",
icon: "none",
});
this.$emit("callback");
}
}
});
},
},
};
</script>
<style>
/* page {
background: #fff;
} */
</style>
<style lang="scss" scoped>
@import url("./entry.scss");
.wrapper {
// padding: 50rpx 32rpx 16rpx 32rpx;
}
.column {
padding: 32rpx;
margin-bottom: 20rpx;
background: #fff;
}
.submit {
color: #fff;
margin-top: 120rpx;
background: rgba($light-color, 0.8);
}
.tips {
color: #999;
font-size: 24rpx;
line-height: 1.2;
margin-top: 10rpx;
}
</style>

View File

@ -0,0 +1,369 @@
<template>
<div class="wrapper">
<u-form label-width="200" :model="form" ref="uForm">
<div class="column">
<div class="flag-title light-color">基础信息</div>
<u-form-item
required
:border-bottom="false"
prop="storeName"
label="店铺名称"
><u-input v-model="form.storeName" :custom-style="defaultInputStyle"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="storeLogo"
label="店铺logo"
>
<div>
<u-upload
:file-list="storeLogoFileList"
:header="{ accessToken: storage.getAccessToken() }"
:action="action"
width="200"
@on-uploaded="onUploaded($event, 'storeLogo')"
:max-count="1"
:show-progress="false"
></u-upload>
</div>
</u-form-item>
<u-form-item
required
:border-bottom="false"
prop="goodsManagementCategory"
label="店铺经营类目"
><u-input
:custom-style="defaultInputStyle"
v-model="goodsManagementCategory"
disabled
@click="showCategory()"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="storeAddressPath"
label="店铺所在地"
>
<u-input
:custom-style="defaultInputStyle"
v-model="form.storeAddressPath"
disabled
@click="showPicker()"
/>
</u-form-item>
<u-form-item
required
:border-bottom="false"
prop="storeAddressPath"
label="店铺定位"
>
<div class="get-center" @click="clickUniMap()"></div>
<div class="tips-success" v-if="form.storeCenter"></div>
</u-form-item>
<u-form-item
required
:border-bottom="false"
prop="storeAddressDetail"
label="店铺详细地址"
><u-input
:custom-style="defaultInputStyle"
v-model="form.storeAddressDetail"
/></u-form-item>
<u-form-item
required
:border-bottom="false"
prop="storeDesc"
label="店铺简介"
><u-input
type="textarea"
:custom-style="defaultInputStyle"
v-model="form.storeDesc"
/></u-form-item>
</div>
</u-form>
<div class="submit" @click="validatorStep1Form"></div>
<m-city
:provinceData="list"
headTitle="区域选择"
ref="cityPicker"
@funcValue="getPickerParentValue"
pickerSize="4"
>
</m-city>
<u-select
v-model="enableCategory"
@confirm="confirmCategory"
:list="categoryList"
></u-select>
<uniMap v-if="mapFlag" @close="closeMap" @callback="callBackAddress" />
</div>
</template>
<script>
import { applyThird } from "@/api/entry";
import { getCategoryList } from "@/api/goods";
import city from "@/components/m-city/m-city.vue";
import storage from "@/utils/storage.js";
import { upload } from "@/api/common.js";
import uniMap from "@/components/uniMap";
import permision from "@/js_sdk/wa-permission/permission.js";
export default {
components: { "m-city": city, uniMap },
data() {
return {
storage,
mapFlag: false,
action: upload, //
defaultInputStyle: {
background: "#f7f7f7",
padding: "0 20rpx",
"border-radius": "10rpx",
},
goodsManagementCategory: "",
storeLogoFileList: [],
categoryList: [],
form: {
storeName: "",
storeLogo: "",
goodsManagementCategory: "",
storeAddressPath: "",
storeAddressDetail: "",
storeDesc: "",
},
list: [
{
id: "",
localName: "请选择",
children: [],
},
],
rules: {
//
goodsManagementCategory: [
{ required: true, message: "请选择店铺经营类目" },
],
storeName: [{ required: true, message: "请填写店铺名称" }],
storeLogo: [{ required: true, message: "请上传店铺logo" }],
storeDesc: [{ required: true, message: "请填写店铺简介" }],
storeCenter: [{ required: true, message: "请选择店铺位置" }],
storeAddressIdPath: [{ required: true, message: "请选择店铺位置" }],
storeAddressDetail: [{ required: true, message: "请输入店铺详细地址" }],
},
enableCategory: false,
};
},
mounted() {
this.$refs.uForm.setRules(this.rules);
this.fetchCategoryList();
},
props: ["companyData"],
watch: {
companyData: {
handler(val) {
this.$set(this, "form", val);
//
const judgeDeepPhoto = ["storeLogo"];
judgeDeepPhoto.forEach((key) => {
if (this.form[key]) {
this.form[key].split(",").forEach((item) => {
this[`${key}FileList`].push({ url: item });
});
}
});
},
deep: true,
immediate: true,
},
},
methods: {
callBackAddress(val) {
console.log(val);
this.form.storeAddressDetail = val.address;
this.form.storeCenter = `${val.longitude},${val.latitude}`;
},
//
closeMap() {
this.mapFlag = false;
},
// 访
clickUniMap() {
console.log("click");
// #ifdef APP-PLUS
if (plus.os.name == "iOS") {
// ios
permision.judgeIosPermission("location")
? (this.mapFlag = true)
: this.refuseMap();
} else {
//
this.requestAndroidPermission(
"android.permission.ACCESS_FINE_LOCATION"
);
}
// #endif
// #ifndef APP-PLUS
this.mapFlag = true;
// #endif
},
//
refuseMap() {
uni.showModal({
title: "温馨提示",
content: "您已拒绝定位,请开启",
confirmText: "去设置",
success(res) {
if (res.confirm) {
//
// #ifndef MP-WEIXIN
uni.getSystemInfo({
success(res) {
if (res.platform == "ios") {
//IOS
plus.runtime.openURL("app-settings://");
} else if (res.platform == "android") {
//
let main = plus.android.runtimeMainActivity();
let Intent = plus.android.importClass(
"android.content.Intent"
);
let mIntent = new Intent("android.settings.ACTION_SETTINGS");
main.startActivity(mIntent);
}
},
});
// #endif
}
},
});
},
//
async requestAndroidPermission(permisionID) {
var result = await permision.requestAndroidPermission(permisionID);
if (result == 1) {
this.mapFlag = true;
} else {
this.refuseMap();
}
},
confirmCategory(val) {
this.form.goodsManagementCategory = val[0].value;
this.goodsManagementCategory = val[0].label;
},
async fetchCategoryList() {
const res = await getCategoryList(0);
if (res.data.success) {
if (res.data.result.length) {
this.categoryList = res.data.result.map((item) => {
return { label: item.name, value: item.id };
});
if (this.form.goodsManagementCategory) {
this.goodsManagementCategory = this.categoryList.find(
(item) => this.form.goodsManagementCategory == item.value
).label;
}
}
}
},
//
onUploaded(lists, key) {
let images = [];
lists.forEach((item) => {
images.push(item.response.result);
});
this.form[key] = images;
},
getPickerParentValue(e) {
this.form.storeAddressIdPath = [];
let name = "";
e.forEach((item, index) => {
if (item.id) {
//
this.form.storeAddressIdPath.push(item.id);
if (index == e.length - 1) {
name += item.localName;
} else {
name += item.localName + ",";
}
this.form.storeAddressPath = name;
}
});
},
//
showPicker() {
this.$refs.cityPicker.show();
},
showCategory() {
this.enableCategory = true;
},
validatorStep1Form() {
this.$refs.uForm.validate(async (valid) => {
console.log(valid);
if (valid) {
const params = { ...this.form };
params.storeLogo = params.storeLogo.toString();
params.storeAddressIdPath = params.storeAddressIdPath.toString();
const res = await applyThird(params);
if (res.data.success) {
uni.showToast({
title: "提交成功!",
icon: "none",
});
this.$emit("callback");
}
}
});
},
},
};
</script>
<style>
/* page {
background: #fff;
} */
</style>
<style lang="scss" scoped>
@import url("./entry.scss");
.get-center {
padding: 12rpx 30rpx;
background: $light-color;
border-radius: 10rpx;
font-size: 24rpx;
color: #fff;
font-weight: bold;
display: inline;
}
.column {
padding: 32rpx;
margin-bottom: 20rpx;
background: #fff;
}
.submit {
color: #fff;
margin-top: 120rpx;
background: rgba($light-color, 0.8);
}
.tips {
color: #999;
font-size: 24rpx;
line-height: 1.2;
margin-top: 10rpx;
}
.tips-success {
color: $weChat-color;
font-size: 24rpx;
}
</style>

View File

@ -282,19 +282,29 @@
background: #fff !important;
}
.btn-auth {
width: 92%;
margin: 0 auto 40rpx;
border-radius: 100px;
// animation: mymove 5s infinite;
// -webkit-animation: mymove 5s infinite; /*Safari and Chrome*/
// animation-direction: alternate; /**/
// animation-timing-function: ease-in-out; /*线*/
// /* Safari Chrome */
// -webkit-animation: mymove 5s infinite;
// -webkit-animation-direction: alternate; /**/
// -webkit-animation-timing-function: ease-in-out; /*线*/
}
.btn-auth {
width: 92%;
margin: 0 auto 40rpx;
border-radius: 100px;
// animation: mymove 5s infinite;
// -webkit-animation: mymove 5s infinite; /*Safari and Chrome*/
// animation-direction: alternate; /**/
// animation-timing-function: ease-in-out; /*线*/
// /* Safari Chrome */
// -webkit-animation: mymove 5s infinite;
// -webkit-animation-direction: alternate; /**/
// -webkit-animation-timing-function: ease-in-out; /*线*/
}
.btn-callback {
text-align: center;
font-size: 30rpx;
background: #ededed;
height: 90rpx;
line-height: 90rpx;
border-radius: 100px;
width: 92%;
margin: 0 auto;
}
.btn-callback {
text-align: center;

View File

@ -81,22 +81,27 @@
<view class="interact-item" @click="navigateTo('/pages/mine/set/feedBack')">
<image src="/static/mine/feedback.png" mode=""></image>
<view>意见反馈</view>
</view>
<view class="interact-item" @click="navigateTo('/pages/mine/set/editionIntro')">
<image src="/static/mine/pointgift.png" mode=""></image>
<view>关于</view>
</view>
<view class="interact-item" @click="navigateTo('/pages/mine/set/setUp')">
<image src="/static/mine/setting.png" mode=""></image>
<view>设置</view>
</view>
<view class="interact-item" @click="navigateTo('/pages/mine/set/feedBack')">
<image src="/static/mine/feedback.png" mode=""></image>
<view>意见反馈</view>
</view>
<view class="interact-item" @click="navigateTo('/pages/mine/set/editionIntro')">
<image src="/static/mine/pointgift.png" mode=""></image>
<view>关于</view>
</view>
<view class="interact-item" @click="navigateTo('/pages/passport/entry/seller/index')">
<image src="/static/mine/feedback.png" mode=""></image>
<view>店铺入驻</view>
</view>
<view class="interact-item" @click="navigateTo('/pages/mine/set/setUp')">
<image src="/static/mine/setting.png" mode=""></image>
<view>设置</view>
</view>
</view>
</div>

View File

@ -44,4 +44,8 @@ export const URL =
/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
// 固话
export const TEL = /0\d{2,3}-\d{7,8}/
export const TEL = /0\d{2,3}-\d{7,8}/
// 营业执照号
export const licenseNum = /(^(?:(?![IOZSV])[\dA-Z]){2}\d{6}(?:(?![IOZSV])[\dA-Z]){10}$)|(^\d{15}$)/;

View File

@ -456,6 +456,10 @@ export function navigateToLogin (type = "navigateTo") {
* 微信小程序跳转到微信小程序登录页面
* H5/App跳转到普通登录页面
*/
uni[type]({
url: "/pages/passport/login",
});
return
// #ifdef MP-WEIXIN
uni[type]({
url: "/pages/passport/wechatMPLogin",