微信小程序联调
This commit is contained in:
@@ -524,12 +524,18 @@ export default {
|
||||
|
||||
<style>
|
||||
.reception-form-wrapper {
|
||||
/* 使用绝对定位,从tab页底部开始,高度计算:100vh - 导航栏(88rpx) - tab页(72rpx) - 底部导航栏(96rpx) */
|
||||
/* 由父组件传入 top(computedContentTop),避免不同机型写死 160rpx 导致大空白 */
|
||||
position: absolute;
|
||||
top: 160rpx; /* 导航栏(88rpx) + tab页(72rpx) = 160rpx */
|
||||
top: 0; /* top 值通过父组件的内联 style 动态设置 */
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 96rpx; /* 底部导航栏高度 */
|
||||
/* #ifndef MP-WEIXIN */
|
||||
bottom: 96rpx; /* H5 环境:底部导航栏高度 */
|
||||
/* #endif */
|
||||
/* #ifdef MP-WEIXIN */
|
||||
/* 微信小程序:本页非 tabBar,容器可延伸到视口底部 */
|
||||
bottom: 0 !important;
|
||||
/* #endif */
|
||||
background-color: #F5F5F5;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
|
||||
@@ -50,6 +50,8 @@
|
||||
<!-- 开始接待表单 -->
|
||||
<common-begin-reception
|
||||
v-if="activeTab === 'reception'"
|
||||
class="reception-form-container"
|
||||
:style="{ top: computedContentTop || contentTop }"
|
||||
:initial-data="receptionForm"
|
||||
@cancel="onReceptionCancel"
|
||||
@save-success="onReceptionSaveSuccess"
|
||||
@@ -352,38 +354,22 @@ import ServiceListFurniture from "./serviceListFurniture.vue";
|
||||
computed: {
|
||||
// 计算导航栏和内容区域的位置(使用计算属性确保响应式)
|
||||
computedNavbarTop() {
|
||||
console.log('[FurnitureReception][computedNavbarTop] 计算导航栏位置');
|
||||
const systemInfo = uni.getSystemInfoSync();
|
||||
const statusBarHeight = systemInfo.statusBarHeight || 20;
|
||||
const navbarHeight = 44;
|
||||
const statusBarHeightRpx = statusBarHeight * 2;
|
||||
const navbarHeightRpx = navbarHeight * 2;
|
||||
const totalNavbarHeight = statusBarHeightRpx + navbarHeightRpx;
|
||||
const result = totalNavbarHeight + 'rpx';
|
||||
console.log('[FurnitureReception][computedNavbarTop] 计算结果:', {
|
||||
statusBarHeight,
|
||||
navbarHeight,
|
||||
totalNavbarHeight,
|
||||
result
|
||||
});
|
||||
return result;
|
||||
const windowWidth = systemInfo.windowWidth || systemInfo.screenWidth || 375;
|
||||
const pxToRpx = 750 / windowWidth;
|
||||
const totalNavbarHeightRpx = (statusBarHeight + navbarHeight) * pxToRpx;
|
||||
return totalNavbarHeightRpx + 'rpx';
|
||||
},
|
||||
computedContentTop() {
|
||||
console.log('[FurnitureReception][computedContentTop] 计算内容区域位置');
|
||||
const systemInfo = uni.getSystemInfoSync();
|
||||
const statusBarHeight = systemInfo.statusBarHeight || 20;
|
||||
const navbarHeight = 44;
|
||||
const statusBarHeightRpx = statusBarHeight * 2;
|
||||
const navbarHeightRpx = navbarHeight * 2;
|
||||
const totalNavbarHeight = statusBarHeightRpx + navbarHeightRpx;
|
||||
const result = (totalNavbarHeight + 72) + 'rpx'; // tab栏高度72rpx
|
||||
console.log('[FurnitureReception][computedContentTop] 计算结果:', {
|
||||
statusBarHeight,
|
||||
navbarHeight,
|
||||
totalNavbarHeight,
|
||||
result
|
||||
});
|
||||
return result;
|
||||
const windowWidth = systemInfo.windowWidth || systemInfo.screenWidth || 375;
|
||||
const pxToRpx = 750 / windowWidth;
|
||||
const totalNavbarHeightRpx = (statusBarHeight + navbarHeight) * pxToRpx;
|
||||
return (totalNavbarHeightRpx + 72) + 'rpx'; // tab栏高度72rpx
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
|
||||
@@ -1,44 +1,47 @@
|
||||
<template>
|
||||
<view>
|
||||
<!-- 服务状态列表 -->
|
||||
<scroll-view
|
||||
class="service-status-list"
|
||||
scroll-y
|
||||
@scrolltolower="onServiceStatusReachBottom">
|
||||
<view class="service-status-toolbar">
|
||||
<text class="toolbar-total">共{{ serviceStatusTotal }}条</text>
|
||||
<input
|
||||
class="toolbar-input"
|
||||
v-model="serviceStatusQuery.salesName"
|
||||
placeholder="所属销售姓名"
|
||||
placeholder-style="color: #b0b0b0"
|
||||
confirm-type="search"
|
||||
@confirm="onServiceStatusSearch"
|
||||
/>
|
||||
<input
|
||||
class="toolbar-input"
|
||||
v-model="serviceStatusQuery.customerName"
|
||||
placeholder="客户姓名"
|
||||
placeholder-style="color: #b0b0b0"
|
||||
confirm-type="search"
|
||||
@confirm="onServiceStatusSearch"
|
||||
/>
|
||||
<input
|
||||
v-if="isAdmin"
|
||||
class="toolbar-input"
|
||||
v-model="serviceStatusQuery.salesPhone"
|
||||
placeholder="销售电话"
|
||||
placeholder-style="color: #b0b0b0"
|
||||
confirm-type="search"
|
||||
@confirm="onServiceStatusSearch"
|
||||
/>
|
||||
<view class="toolbar-actions">
|
||||
<view class="toolbar-btn toolbar-btn--refresh" @click="onServiceStatusRefresh">
|
||||
<uni-icons type="refresh" size="18" color="#2A68FF"></uni-icons>
|
||||
<text>刷新</text>
|
||||
</view>
|
||||
<view class="service-list-container">
|
||||
<!-- 工具条(参考「服务记录」:放在 scroll-view 外,避免顶部空白/滚动错位) -->
|
||||
<view class="service-status-toolbar">
|
||||
<text class="toolbar-total">共{{ serviceStatusTotal }}条</text>
|
||||
<input
|
||||
class="toolbar-input"
|
||||
v-model="serviceStatusQuery.salesName"
|
||||
placeholder="所属销售姓名"
|
||||
placeholder-style="color: #b0b0b0"
|
||||
confirm-type="search"
|
||||
@confirm="onServiceStatusSearch"
|
||||
/>
|
||||
<input
|
||||
class="toolbar-input"
|
||||
v-model="serviceStatusQuery.customerName"
|
||||
placeholder="客户姓名"
|
||||
placeholder-style="color: #b0b0b0"
|
||||
confirm-type="search"
|
||||
@confirm="onServiceStatusSearch"
|
||||
/>
|
||||
<input
|
||||
v-if="isAdmin"
|
||||
class="toolbar-input"
|
||||
v-model="serviceStatusQuery.salesPhone"
|
||||
placeholder="销售电话"
|
||||
placeholder-style="color: #b0b0b0"
|
||||
confirm-type="search"
|
||||
@confirm="onServiceStatusSearch"
|
||||
/>
|
||||
<view class="toolbar-actions">
|
||||
<view class="toolbar-btn toolbar-btn--refresh" @click="onServiceStatusRefresh">
|
||||
<uni-icons type="refresh" size="18" color="#2A68FF"></uni-icons>
|
||||
<text>刷新</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 服务状态列表 -->
|
||||
<scroll-view
|
||||
class="service-list"
|
||||
scroll-y
|
||||
enable-flex
|
||||
@scrolltolower="onServiceStatusReachBottom">
|
||||
<view
|
||||
class="service-card"
|
||||
v-for="(item, index) in serviceStatusList"
|
||||
@@ -1020,18 +1023,16 @@ export default {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* 最外层容器 */
|
||||
.service-status-list {
|
||||
/* 容器布局(参考「服务记录」组件):工具条固定在上,列表滚动占满剩余高度 */
|
||||
.service-list-container {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color: #F5F5F5;
|
||||
padding: 24rpx 16rpx 0 16rpx;
|
||||
/* 只保留左右 padding,让 toolbar 紧贴 tab,下方不再出现大空白 */
|
||||
padding: 0 16rpx;
|
||||
box-sizing: border-box;
|
||||
/* #ifndef MP-WEIXIN */
|
||||
height: 100%;
|
||||
/* #endif */
|
||||
/* #ifdef MP-WEIXIN */
|
||||
height: 100%;
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
.service-status-toolbar {
|
||||
@@ -1047,6 +1048,14 @@ export default {
|
||||
overflow-x: auto;
|
||||
min-height: 64rpx;
|
||||
box-sizing: border-box;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.service-list {
|
||||
flex: 1;
|
||||
background-color: transparent;
|
||||
box-sizing: border-box;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.toolbar-total {
|
||||
|
||||
@@ -2,8 +2,21 @@
|
||||
<view class="center">
|
||||
<uni-sign-in ref="signIn"></uni-sign-in>
|
||||
<view class="userInfo" @click.capture="toUserInfo">
|
||||
<cloud-image width="150rpx" height="150rpx" v-if="hasLogin&&userInfo.avatar_file&&userInfo.avatar_file.url" :src="userInfo.avatar_file.url"></cloud-image>
|
||||
|
||||
<!-- 云存储 fileID 走 cloud-image;普通网络图用 image(相对路径会拼 API 根地址,避免小程序下无法加载) -->
|
||||
<cloud-image
|
||||
v-if="showCloudAvatar"
|
||||
width="150rpx"
|
||||
height="150rpx"
|
||||
:src="resolvedAvatarUrl"
|
||||
@load-error="onRemoteAvatarFail"
|
||||
/>
|
||||
<image
|
||||
v-else-if="showHttpAvatar"
|
||||
class="user-avatar-img"
|
||||
:src="resolvedAvatarUrl"
|
||||
mode="aspectFill"
|
||||
@error="onRemoteAvatarFail"
|
||||
/>
|
||||
<view v-else class="defaultAvatarUrl">
|
||||
<uni-icons color="#ffffff" size="50" type="person-filled" />
|
||||
</view>
|
||||
@@ -122,6 +135,7 @@
|
||||
mutations
|
||||
} from '@/common/store.js'
|
||||
import { put, get } from '@/common/request.js'
|
||||
import { API_BASE_URL } from '@/common/config.js'
|
||||
import DeviceBindPopup from './components/DeviceBindPopup.vue'
|
||||
import DeviceListPopup from './components/DeviceListPopup.vue'
|
||||
import CloudImage from '@/uni_modules/uni-id-pages/components/cloud-image/cloud-image.vue'
|
||||
@@ -171,6 +185,8 @@
|
||||
confirmPassword: ''
|
||||
},
|
||||
changePwdSubmitting: false,
|
||||
/** 头像远程地址加载失败时回退默认占位(云临时链失败、域名未配置、404 等) */
|
||||
remoteAvatarFailed: false,
|
||||
ucenterList: [
|
||||
[
|
||||
// #ifdef APP-PLUS
|
||||
@@ -223,6 +239,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
resolvedAvatarUrl() {
|
||||
this.remoteAvatarFailed = false
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
// 加载用户信息
|
||||
this.loadUserInfo()
|
||||
@@ -270,6 +291,34 @@
|
||||
hasLogin(){
|
||||
return store.hasLogin || false
|
||||
},
|
||||
rawAvatarUrl() {
|
||||
const u = this.userInfo && this.userInfo.avatar_file && this.userInfo.avatar_file.url
|
||||
return typeof u === 'string' ? u.trim() : ''
|
||||
},
|
||||
/** 小程序中相对路径 /api/... 或 /uploads/... 需补全为完整 URL;云存储仍为 cloud:// */
|
||||
resolvedAvatarUrl() {
|
||||
const t = this.rawAvatarUrl
|
||||
if (!t) return ''
|
||||
if (
|
||||
t.startsWith('cloud://') ||
|
||||
t.startsWith('http://') ||
|
||||
t.startsWith('https://') ||
|
||||
t.startsWith('data:') ||
|
||||
t.startsWith('wxfile://') ||
|
||||
t.startsWith('//')
|
||||
) {
|
||||
return t.startsWith('//') ? `https:${t}` : t
|
||||
}
|
||||
const base = API_BASE_URL.replace(/\/+$/, '')
|
||||
return t.startsWith('/') ? `${base}${t}` : `${base}/${t}`
|
||||
},
|
||||
showCloudAvatar() {
|
||||
return this.hasLogin && !!this.resolvedAvatarUrl && this.resolvedAvatarUrl.startsWith('cloud://') && !this.remoteAvatarFailed
|
||||
},
|
||||
showHttpAvatar() {
|
||||
const u = this.resolvedAvatarUrl
|
||||
return this.hasLogin && !!u && !u.startsWith('cloud://') && !this.remoteAvatarFailed
|
||||
},
|
||||
// #ifdef APP-PLUS
|
||||
appVersion() {
|
||||
try {
|
||||
@@ -297,6 +346,9 @@
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onRemoteAvatarFail() {
|
||||
this.remoteAvatarFailed = true
|
||||
},
|
||||
/**
|
||||
* 加载用户信息(租户ID和登录人信息)
|
||||
*/
|
||||
@@ -854,6 +906,13 @@
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.user-avatar-img {
|
||||
width: 150rpx;
|
||||
height: 150rpx;
|
||||
border-radius: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.logo-title {
|
||||
flex: 1;
|
||||
align-items: center;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<view @click="onClick" :style="{width,height}" style="justify-content: center;">
|
||||
<image v-if="cSrc" :style="{width,height}" :src="cSrc" :mode="mode"></image>
|
||||
<view @click="onClick" :style="{width,height}" class="cloud-image-box">
|
||||
<image v-if="cSrc" :style="{width,height}" :src="cSrc" :mode="mode" @error="onImageError"></image>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@@ -8,20 +8,21 @@
|
||||
/**
|
||||
* cloud-image
|
||||
* @description 兼容普通资源和unicloud图片资源渲染的组件
|
||||
* @property {String} mode 图片裁剪、缩放的模式。默认为widthFix,支持所有image组件的mode值
|
||||
* @property {String} mode 图片裁剪、缩放的模式。默认为 aspectFill(适合头像),支持所有 image 的 mode
|
||||
* @property {String} src 资源完了链接或uniCloud云存储资源的fileid
|
||||
* @property {String} width 图片的宽,默认为:100rpx
|
||||
* @property {String} height 图片的高,默认为:100rpx
|
||||
* @event {Function} click 点击 cloud-image 触发事件
|
||||
* @event {Function} load-error 临时链接获取失败或图片加载失败
|
||||
*/
|
||||
export default {
|
||||
name: "cloud-image",
|
||||
emits:['click'],
|
||||
emits:['click', 'load-error'],
|
||||
props: {
|
||||
mode: {
|
||||
type:String,
|
||||
default () {
|
||||
return 'widthFix'
|
||||
return 'aspectFill'
|
||||
}
|
||||
},
|
||||
src: {
|
||||
@@ -46,14 +47,29 @@
|
||||
watch: {
|
||||
src:{
|
||||
handler(src) {
|
||||
if (src&&src.substring(0, 8) == "cloud://") {
|
||||
this.cSrc = ''
|
||||
if (!src || typeof src !== 'string') {
|
||||
return
|
||||
}
|
||||
const s = src.trim()
|
||||
if (!s) {
|
||||
return
|
||||
}
|
||||
if (s.substring(0, 8) === 'cloud://') {
|
||||
uniCloud.getTempFileURL({
|
||||
fileList: [src]
|
||||
}).then(res=>{
|
||||
this.cSrc = res.fileList[0].tempFileURL
|
||||
fileList: [s]
|
||||
}).then((res) => {
|
||||
const url = res && res.fileList && res.fileList[0] && res.fileList[0].tempFileURL
|
||||
if (url) {
|
||||
this.cSrc = url
|
||||
} else {
|
||||
this.$emit('load-error')
|
||||
}
|
||||
}).catch(() => {
|
||||
this.$emit('load-error')
|
||||
})
|
||||
}else{
|
||||
this.cSrc = src
|
||||
} else {
|
||||
this.cSrc = s
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
@@ -62,12 +78,25 @@
|
||||
methods:{
|
||||
onClick(){
|
||||
this.$emit('click')
|
||||
},
|
||||
onImageError() {
|
||||
this.cSrc = ''
|
||||
this.$emit('load-error')
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
cSrc:false
|
||||
cSrc: ''
|
||||
};
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.cloud-image-box {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
@@ -203,11 +203,14 @@
|
||||
|
||||
// 同步更新前端 store,保证"我的"页等能识别为已登录状态
|
||||
try {
|
||||
const avatarStr = loginData.avatar != null && loginData.avatar !== ''
|
||||
? String(loginData.avatar).trim()
|
||||
: ''
|
||||
mutations.setUserInfo({
|
||||
username: loginData.userName,
|
||||
mobile: loginData.phone,
|
||||
email: loginData.email,
|
||||
avatar_file: loginData.avatar ? { url: loginData.avatar } : undefined
|
||||
avatar_file: avatarStr ? { url: avatarStr } : undefined
|
||||
}, { cover: true })
|
||||
console.log('[Login] Store updated successfully, hasLogin:', store.hasLogin, 'userInfo:', store.userInfo)
|
||||
} catch (e) {
|
||||
|
||||
@@ -1 +1 @@
|
||||
"use strict";const o=require("./env.js"),t={local:"http://localhost:8091/",prod:"http://api01ai.huayang-star.com/"},r={development:"local",production:"prod",local:"local",prod:"prod"};const n=function(){var t;const n=null==(t=o.envConfig)?void 0:t.apiEnv;{const o=r[n.toLowerCase()];if(o)return o}const e="undefined"!=typeof process&&(null==process?void 0:process.env)?process.env.UNI_APP_API_ENV||"production":"",s=e?e.toLowerCase():"";return r[s]||"prod"}(),e=(s=t[n]||t.prod).endsWith("/")?s:`${s}/`;var s;exports.getApiEnv=function(){return n},exports.getApiUrl=function(o=""){const t=o.startsWith("/")?o:`/${o}`,r=t.startsWith("/")?t.slice(1):t;return`${e}${r}`};
|
||||
"use strict";const o=require("./env.js"),t={local:"http://localhost:8091/",prod:"http://api01ai.huayang-star.com/"},r={development:"local",production:"prod",local:"local",prod:"prod"};const e=function(){var t;const e=null==(t=o.envConfig)?void 0:t.apiEnv;{const o=r[e.toLowerCase()];if(o)return o}const n="undefined"!=typeof process&&(null==process?void 0:process.env)?process.env.UNI_APP_API_ENV||"production":"",s=n?n.toLowerCase():"";return r[s]||"prod"}(),n=(s=t[e]||t.prod).endsWith("/")?s:`${s}/`;var s;exports.API_BASE_URL=n,exports.getApiEnv=function(){return e},exports.getApiUrl=function(o=""){const t=o.startsWith("/")?o:`/${o}`,r=t.startsWith("/")?t.slice(1):t;return`${n}${r}`};
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
"use strict";const e=require("../../../../common/vendor.js"),t={name:"cloud-image",emits:["click"],props:{mode:{type:String,default:()=>"widthFix"},src:{default:()=>""},width:{type:String,default:()=>"100rpx"},height:{type:String,default:()=>"100rpx"}},watch:{src:{handler(t){t&&"cloud://"==t.substring(0,8)?e._r.getTempFileURL({fileList:[t]}).then((e=>{this.cSrc=e.fileList[0].tempFileURL})):this.cSrc=t},immediate:!0}},methods:{onClick(){this.$emit("click")}},data:()=>({cSrc:!1})};const i=e._export_sfc(t,[["render",function(t,i,c,r,n,d){return e.e({a:n.cSrc},n.cSrc?{b:c.width,c:c.height,d:n.cSrc,e:c.mode}:{},{f:e.o(((...e)=>d.onClick&&d.onClick(...e)),"93"),g:c.width,h:c.height})}]]);wx.createComponent(i);
|
||||
"use strict";const t=require("../../../../common/vendor.js"),e={name:"cloud-image",emits:["click","load-error"],props:{mode:{type:String,default:()=>"aspectFill"},src:{default:()=>""},width:{type:String,default:()=>"100rpx"},height:{type:String,default:()=>"100rpx"}},watch:{src:{handler(e){if(this.cSrc="",!e||"string"!=typeof e)return;const r=e.trim();r&&("cloud://"===r.substring(0,8)?t._r.getTempFileURL({fileList:[r]}).then((t=>{const e=t&&t.fileList&&t.fileList[0]&&t.fileList[0].tempFileURL;e?this.cSrc=e:this.$emit("load-error")})).catch((()=>{this.$emit("load-error")})):this.cSrc=r)},immediate:!0}},methods:{onClick(){this.$emit("click")},onImageError(){this.cSrc="",this.$emit("load-error")}},data:()=>({cSrc:""})};const r=t._export_sfc(e,[["render",function(e,r,i,c,o,s){return t.e({a:o.cSrc},o.cSrc?{b:i.width,c:i.height,d:o.cSrc,e:i.mode,f:t.o(((...t)=>s.onImageError&&s.onImageError(...t)),"9a")}:{},{g:t.o(((...t)=>s.onClick&&s.onClick(...t)),"93"),h:i.width,i:i.height})}],["__scopeId","data-v-11b6d0d3"]]);wx.createComponent(r);
|
||||
|
||||
@@ -1 +1 @@
|
||||
<view bindtap="{{f}}" style="{{'width:' + g + ';' + ('height:' + h) + ';' + 'justify-content:center'}}"><image wx:if="{{a}}" style="{{'width:' + b + ';' + ('height:' + c)}}" src="{{d}}" mode="{{e}}"></image></view>
|
||||
<view bindtap="{{g}}" style="{{'width:' + h + ';' + ('height:' + i)}}" class="cloud-image-box data-v-11b6d0d3"><image wx:if="{{a}}" class="data-v-11b6d0d3" style="{{'width:' + b + ';' + ('height:' + c)}}" src="{{d}}" mode="{{e}}" binderror="{{f}}"></image></view>
|
||||
@@ -0,0 +1 @@
|
||||
.cloud-image-box.data-v-11b6d0d3{display:flex;justify-content:center;align-items:center;overflow:hidden}
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
<view class="uni-content data-v-6464e2fa"><view class="login-logo data-v-6464e2fa"><image class="data-v-6464e2fa" src="{{a}}"></image></view><text class="title title-box data-v-6464e2fa">账号密码登录</text><uni-forms class="data-v-6464e2fa" u-s="{{['d']}}" u-i="6464e2fa-0" bind:__l="__l"><uni-forms-item wx:if="{{e}}" class="data-v-6464e2fa" u-s="{{['d']}}" u-i="6464e2fa-1,6464e2fa-0" bind:__l="__l" u-p="{{e}}"><uni-easyinput wx:if="{{d}}" bindblur="{{b}}" class="input-box data-v-6464e2fa" u-i="6464e2fa-2,6464e2fa-1" bind:__l="__l" bindupdateModelValue="{{c}}" u-p="{{d}}"/></uni-forms-item><uni-forms-item wx:if="{{i}}" class="data-v-6464e2fa" u-s="{{['d']}}" u-i="6464e2fa-3,6464e2fa-0" bind:__l="__l" u-p="{{i}}"><uni-easyinput wx:if="{{h}}" bindblur="{{f}}" class="input-box data-v-6464e2fa" u-i="6464e2fa-4,6464e2fa-3" bind:__l="__l" bindupdateModelValue="{{g}}" u-p="{{h}}"/></uni-forms-item></uni-forms><uni-captcha wx:if="{{j}}" class="r data-v-6464e2fa" u-r="captcha" u-i="6464e2fa-5" bind:__l="__l" bindupdateModelValue="{{l}}" u-p="{{m}}"/><uni-id-pages-agreements wx:if="{{o}}" class="r data-v-6464e2fa" u-r="agreements" u-i="6464e2fa-6" bind:__l="__l" u-p="{{o}}"></uni-id-pages-agreements><button class="uni-btn data-v-6464e2fa" type="primary" bindtap="{{p}}">登录</button><view class="link-box data-v-6464e2fa"><view wx:if="{{q}}" class="data-v-6464e2fa"><text class="forget data-v-6464e2fa">忘记了?</text><text class="link data-v-6464e2fa" bindtap="{{r}}">找回密码</text></view><text class="link data-v-6464e2fa" bindtap="{{t}}">{{s}}</text></view><uni-id-pages-fab-login class="r data-v-6464e2fa" u-r="uniFabLogin" u-i="6464e2fa-7" bind:__l="__l"></uni-id-pages-fab-login></view>
|
||||
<view class="uni-content data-v-cb74ec4b"><view class="login-logo data-v-cb74ec4b"><image class="data-v-cb74ec4b" src="{{a}}"></image></view><text class="title title-box data-v-cb74ec4b">账号密码登录</text><uni-forms class="data-v-cb74ec4b" u-s="{{['d']}}" u-i="cb74ec4b-0" bind:__l="__l"><uni-forms-item wx:if="{{e}}" class="data-v-cb74ec4b" u-s="{{['d']}}" u-i="cb74ec4b-1,cb74ec4b-0" bind:__l="__l" u-p="{{e}}"><uni-easyinput wx:if="{{d}}" bindblur="{{b}}" class="input-box data-v-cb74ec4b" u-i="cb74ec4b-2,cb74ec4b-1" bind:__l="__l" bindupdateModelValue="{{c}}" u-p="{{d}}"/></uni-forms-item><uni-forms-item wx:if="{{i}}" class="data-v-cb74ec4b" u-s="{{['d']}}" u-i="cb74ec4b-3,cb74ec4b-0" bind:__l="__l" u-p="{{i}}"><uni-easyinput wx:if="{{h}}" bindblur="{{f}}" class="input-box data-v-cb74ec4b" u-i="cb74ec4b-4,cb74ec4b-3" bind:__l="__l" bindupdateModelValue="{{g}}" u-p="{{h}}"/></uni-forms-item></uni-forms><uni-captcha wx:if="{{j}}" class="r data-v-cb74ec4b" u-r="captcha" u-i="cb74ec4b-5" bind:__l="__l" bindupdateModelValue="{{l}}" u-p="{{m}}"/><uni-id-pages-agreements wx:if="{{o}}" class="r data-v-cb74ec4b" u-r="agreements" u-i="cb74ec4b-6" bind:__l="__l" u-p="{{o}}"></uni-id-pages-agreements><button class="uni-btn data-v-cb74ec4b" type="primary" bindtap="{{p}}">登录</button><view class="link-box data-v-cb74ec4b"><view wx:if="{{q}}" class="data-v-cb74ec4b"><text class="forget data-v-cb74ec4b">忘记了?</text><text class="link data-v-cb74ec4b" bindtap="{{r}}">找回密码</text></view><text class="link data-v-cb74ec4b" bindtap="{{t}}">{{s}}</text></view><uni-id-pages-fab-login class="r data-v-cb74ec4b" u-r="uniFabLogin" u-i="cb74ec4b-7" bind:__l="__l"></uni-id-pages-fab-login></view>
|
||||
@@ -1 +1 @@
|
||||
.uni-content.data-v-6464e2fa{padding:0 60rpx}.login-logo.data-v-6464e2fa{display:none}@media screen and (min-width: 690px){.uni-content.data-v-6464e2fa{padding:0;max-width:300px;margin-left:calc(50% - 200px)}}.uni-content view.data-v-6464e2fa{box-sizing:border-box}.title.data-v-6464e2fa{display:flex;padding:18px 0;font-weight:800;flex-direction:column}.tip.data-v-6464e2fa{display:flex;color:#bdbdc0;font-size:11px;margin:6px 0}.uni-content.data-v-6464e2fa .uni-easyinput__content,.input-box.data-v-6464e2fa{height:44px;background-color:#f8f8f8!important;border-radius:0;font-size:14px;display:flex;flex:1}.link.data-v-6464e2fa{color:#04498c;cursor:pointer}.uni-content.data-v-6464e2fa .uni-forms-item__inner{padding-bottom:8px}.uni-btn.data-v-6464e2fa{text-align:center;height:40px;line-height:40px;margin:15px 0 10px;color:#fff!important;border-radius:5px;font-size:16px}.uni-body.uni_modules-uni-id-pages-pages-login-login-withoutpwd.data-v-6464e2fa{height:auto!important}@media screen and (min-width: 690px){.uni-content.data-v-6464e2fa{height:auto}}.forget.data-v-6464e2fa{font-size:12px;color:#8a8f8b}.link-box.data-v-6464e2fa{display:flex;flex-direction:row;justify-content:space-between;margin-top:20px}.link.data-v-6464e2fa{font-size:12px}
|
||||
.uni-content.data-v-cb74ec4b{padding:0 60rpx}.login-logo.data-v-cb74ec4b{display:none}@media screen and (min-width: 690px){.uni-content.data-v-cb74ec4b{padding:0;max-width:300px;margin-left:calc(50% - 200px)}}.uni-content view.data-v-cb74ec4b{box-sizing:border-box}.title.data-v-cb74ec4b{display:flex;padding:18px 0;font-weight:800;flex-direction:column}.tip.data-v-cb74ec4b{display:flex;color:#bdbdc0;font-size:11px;margin:6px 0}.uni-content.data-v-cb74ec4b .uni-easyinput__content,.input-box.data-v-cb74ec4b{height:44px;background-color:#f8f8f8!important;border-radius:0;font-size:14px;display:flex;flex:1}.link.data-v-cb74ec4b{color:#04498c;cursor:pointer}.uni-content.data-v-cb74ec4b .uni-forms-item__inner{padding-bottom:8px}.uni-btn.data-v-cb74ec4b{text-align:center;height:40px;line-height:40px;margin:15px 0 10px;color:#fff!important;border-radius:5px;font-size:16px}.uni-body.uni_modules-uni-id-pages-pages-login-login-withoutpwd.data-v-cb74ec4b{height:auto!important}@media screen and (min-width: 690px){.uni-content.data-v-cb74ec4b{height:auto}}.forget.data-v-cb74ec4b{font-size:12px;color:#8a8f8b}.link-box.data-v-cb74ec4b{display:flex;flex-direction:row;justify-content:space-between;margin-top:20px}.link.data-v-cb74ec4b{font-size:12px}
|
||||
|
||||
Reference in New Issue
Block a user