Candice 2 days ago
parent 25278226b5
commit 7b8ca76c3f

@ -0,0 +1,203 @@
<template>
<view class="enterPage">
<view class="head">
<view class="headBox">
<text>单个扫描</text>
<image class="down22" src="@/PDA/static/down22.png" mode="aspectFill"></image>
</view>
<button class="scanBtn">
<uni-icons type="camera-filled" color="#FFFFFF" size="30"></uni-icons>
点击打开摄像头扫码
</button>
</view>
<view class="card">
<view class="cardHead">
<view class="">
<text class="title1">标签列表数量-</text>
<text class="title1">产品总数-</text>
</view>
<view class="">
<text>类型/产品名称</text>
<text>流水号/单品数量</text>
</view>
</view>
<view class="cardBody">
<view class="" v-if="lists.length === 0">
<image class="scanImg" src="@/PDA/static/scanImg.png" mode="aspectFill"></image>
</view>
<view class="" v-else>
<scroll-view scroll-y="true" style="height: 800rpx">
<view class="proList">
<view class="proItem" v-for="item in 20">
<view class="itemLeft">
<view class="left1">
<text></text>
</view>
<view class="proName">
<text>MV-ID5016M智能读码器</text>
</view>
<view class="left2">
<text class="pname">CS0000000001</text>
<text>1</text>
</view>
</view>
<view class="itemRight">
<uni-icons type="trash" size="30" color="#FFFFFF"></uni-icons>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
<view class="bottom">
<view class="" style="height: 180rpx;"></view>
<view class="btnBox">
<button>确认入库</button>
</view>
</view>
</view>
</template>
<script setup>
import {ref} from 'vue'
const lists = ref([''])
</script>
<style lang="scss" scoped>
.enterPage{
width: 100%;
min-height: 100vh;
}
.head{
position: sticky;
top: 0;
left: 0;
background: #f5f5f5;
z-index: 50;
padding-bottom: 26rpx;
.headBox{
width: 100%;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 7rpx 0rpx rgba(0,0,0,0.05);
padding: 26rpx;
@include fontStyle(28rpx,#000000,left,bold,38rpx);
position: relative;
.down22{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 46rpx;
height: 46rpx;
}
}
.scanBtn{
width: 380rpx;
height: 92rpx;
background: $pda-btn-bg1;
border-radius: 18rpx 18rpx 18rpx 18rpx;
font-weight: 500;
font-size: 28rpx;
color: $pda-btn-color;
@include flexBox();
margin-top: 36rpx;
}
}
.card{
margin: 0 26rpx 26rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 9rpx 0rpx rgba(0,0,0,0.1);
border-radius: 18rpx 18rpx 18rpx 18rpx;
.cardHead{
box-sizing: border-box;
padding: 0 26rpx;
@include fontStyle(28rpx,#666666,left,400,38rpx);
&>view{
@include flexBox(between,center);
padding: 26rpx 0;
border-bottom: 2rpx solid rgba(0,0,0,0.1);
}
.title1{
@include fontStyle(28rpx,#333333,left,bold,38rpx);
}
}
.cardBody{
width: 100%;
text-align: center;
box-sizing: border-box;
padding: 20rpx;
.scanImg{
width: 410rpx;
height: 410rpx;
display: block;
margin: 40rpx auto;
}
.proList{
.proItem{
margin: 26rpx 0;
background: #F6F6F6;
border-radius: 18rpx 18rpx 18rpx 18rpx;
@include flexBox(between,stretch);
.itemLeft{
flex: 1;
box-sizing: border-box;
padding: 16rpx 0;
@include flexBox(start,center);
&>view{
padding: 0 10rpx;
}
.left1{
height: 100%;
border-right: 2rpx solid rgba(0,0,0,0.3);
@include flexBox();
@include fontStyle(28rpx,#000000,left,500,38rpx);
}
.proName{
border-right: 2rpx solid rgba(0,0,0,0.3);
@include fontStyle(28rpx,#000000,left,400,38rpx);
}
.left2{
@include flexBox(start,center,column);
@include fontStyle(26rpx,#000000,center,400,38rpx);
.pname{
border-bottom: 2rpx solid rgba(0,0,0,0.3) ;
}
}
}
.itemRight{
width: 72rpx;
background: #E51D1D;
border-radius: 0rpx 18rpx 18rpx 0rpx;
@include flexBox();
}
}
}
}
}
.bottom{
.btnBox{
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 180rpx;
background: #FFFFFF;
box-shadow: 0rpx -4rpx 9rpx 0rpx rgba(0,0,0,0.05);
border-radius: 0rpx 0rpx 0rpx 0rpx;
button{
width: 544rpx;
height: 92rpx;
background: $pda-btn-bg;
border-radius: 63rpx 63rpx 63rpx 63rpx;
font-weight: 500;
font-size: 32rpx;
color: $pda-btn-color;
@include flexBox();
margin-top: 36rpx;
}
}
}
</style>

@ -0,0 +1,237 @@
<template>
<view class="indexPage">
<image class="indexBG" src="@/PDA/static/indexBG.png" mode="widthFix"></image>
<view class="indexTitle">
<text class="title">高效协同</text>
<text class="title">出入库标签管理</text>
<text>数据驱动的全流程出入库体系</text>
</view>
<view class="userBox">
<view class="userItem">
<text class="name">广州力仁数字科技有限公司</text>
<text>14715599530</text>
</view>
<view class="userRight">
<image class="logout" src="@/PDA/static/logout.png" mode="aspectFill"></image>
<text>退出登录</text>
</view>
</view>
<view class="card">
<view class="cardHead">
<text>出库管理</text>
</view>
<view class="cardBody">
<view class="itemBox">
<view class="item" @click="$util.redirectTo('./enter/enter')">
<image class="itemIcon" src="@/PDA/static/index/c1.png" mode="aspectFill"></image>
<view class="itemBottom">
<image class="cardFoot" src="@/PDA/static/index/cardFoot.png" mode="aspectFill"></image>
<text class="fucName">扫码入库</text>
</view>
</view>
</view>
<view class="itemBox">
<view class="item">
<image class="itemIcon" src="@/PDA/static/index/c2.png" mode="aspectFill"></image>
<view class="itemBottom">
<image class="cardFoot" src="@/PDA/static/index/cardFoot.png" mode="aspectFill"></image>
<text class="fucName">入库记录</text>
</view>
</view>
</view>
<view class="itemBox">
<view class="item">
<image class="itemIcon" src="@/PDA/static/index/c3.png" mode="aspectFill"></image>
<view class="itemBottom">
<image class="cardFoot" src="@/PDA/static/index/cardFoot.png" mode="aspectFill"></image>
<text class="fucName">扫码出库</text>
</view>
</view>
</view>
<view class="itemBox">
<view class="item">
<image class="itemIcon" src="@/PDA/static/index/c4.png" mode="aspectFill"></image>
<view class="itemBottom">
<image class="cardFoot" src="@/PDA/static/index/cardFoot.png" mode="aspectFill"></image>
<text class="fucName">出库记录</text>
</view>
</view>
</view>
<view class="itemBox">
<view class="item">
<image class="itemIcon" src="@/PDA/static/index/c5.png" mode="aspectFill"></image>
<view class="itemBottom">
<image class="cardFoot" src="@/PDA/static/index/cardFoot.png" mode="aspectFill"></image>
<text class="fucName">扫码退货</text>
</view>
</view>
</view>
<view class="itemBox">
<view class="item">
<image class="itemIcon" src="@/PDA/static/index/c6.png" mode="aspectFill"></image>
<view class="itemBottom">
<image class="cardFoot" src="@/PDA/static/index/cardFoot.png" mode="aspectFill"></image>
<text class="fucName">退货记录</text>
</view>
</view>
</view>
<view class="itemBox">
<view class="item">
<image class="itemIcon" src="@/PDA/static/index/c7.png" mode="aspectFill"></image>
<view class="itemBottom">
<image class="cardFoot" src="@/PDA/static/index/cardFoot.png" mode="aspectFill"></image>
<text class="fucName">虚拟垛标</text>
</view>
</view>
</view>
</view>
</view>
<view class="card">
<view class="cardHead">
<text>标签管理</text>
</view>
<view class="cardBody">
<view class="itemBox">
<view class="item">
<image class="itemIcon" src="@/PDA/static/index/c8.png" mode="aspectFill"></image>
<view class="itemBottom">
<image class="cardFoot" src="@/PDA/static/index/cardFoot.png" mode="aspectFill"></image>
<text class="fucName">关联标签</text>
</view>
</view>
</view>
<view class="itemBox">
<view class="item">
<image class="itemIcon" src="@/PDA/static/index/c9.png" mode="aspectFill"></image>
<view class="itemBottom">
<image class="cardFoot" src="@/PDA/static/index/cardFoot.png" mode="aspectFill"></image>
<text class="fucName">标签替换</text>
</view>
</view>
</view>
<view class="itemBox">
<view class="item">
<image class="itemIcon" src="@/PDA/static/index/c10.png" mode="aspectFill"></image>
<view class="itemBottom">
<image class="cardFoot" src="@/PDA/static/index/cardFoot.png" mode="aspectFill"></image>
<text class="fucName">流转查询</text>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script setup>
</script>
<style lang="scss" scoped>
.indexPage{
width: 100%;
position: relative;
min-height: 100vh;
.indexBG{
width: 100%;
height: auto;
}
.indexTitle{
position: absolute;
top: 14%;
left: 0;
width: 62%;
box-sizing: border-box;
padding: 26rpx;
@include flexBox(start,start,column);
@include fontStyle(28rpx,#FFFFFF,left,400,42rpx);
.title{
@include fontStyle(52rpx,#FFFFFF,left,800,68rpx);
}
}
}
.userBox{
position: relative;
z-index: 6;
margin: -220rpx 26rpx 26rpx;
background: linear-gradient( 180deg, #1878FE 0%, #60ADFF 100%);
box-shadow: 0rpx 4rpx 7rpx 0rpx rgba(0,0,0,0.08);
border-radius: 18rpx 18rpx 18rpx 18rpx;
box-sizing: border-box;
padding: 26rpx;
@include flexBox(between,start);
.userItem{
flex: 1;
@include fontStyle(28rpx,#FFFFFF,left,400,40rpx);
.name{
@include fontStyle(34rpx,#FFFFFF,left,bold,42rpx);
padding-bottom: 10rpx;
display: block;
}
}
.userRight{
@include flexBox();
@include fontStyle(28rpx,#FFFFFF,right,400,40rpx);
.logout{
width: 28rpx;
height: 28rpx;
margin-right: 10rpx;
}
}
}
.card{
margin: 46rpx 26rpx;
.cardHead{
@include fontStyle(32rpx,#000000,left,bold,52rpx);
}
.cardBody{
@include flexBox(start,center);
flex-wrap: wrap;
.itemBox{
width: 25%;
.item{
width: 154rpx;
margin: 0 auto;
background: linear-gradient( 180deg, #E2F9FF 0%, #FFFFFF 68%);
box-shadow: 0rpx 4rpx 7rpx 0rpx rgba(0,0,0,0.08);
border-radius: 18rpx;
margin-top: 26rpx;
.itemIcon{
width: 154rpx;
height: 128rpx;
border-radius: 18rpx;
}
.itemBottom{
position: relative;
height: 80rpx;
@include flexBox();
.cardFoot{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 80rpx;
border-radius: 0 0 18rpx 18rpx;
}
.fucName{
position: relative;
z-index: 2;
@include fontStyle(28rpx,#FFFFFF,center,bold,50rpx);
}
}
}
}
}
}
</style>

@ -0,0 +1,232 @@
<template>
<view class="loginPage">
<view class="header-top" :style="{'top':tops+'px'}">
<view class="header-title" :style="{'height': height+'px'}">
<view class="box-bg" :style="{ width: `calc(100vw - ${widths}px - 14px)` }">
<text></text>
</view>
</view>
</view>
<image class="loginBG" src="@/PDA/static/loginBG.png" mode="widthFix"></image>
<image class="loginHead" src="@/PDA/static/loginHead.png" mode="widthFix"></image>
<view class="card">
<view class="cardBody">
<view class="inputBox">
<uni-easyinput :inputBorder="false" prefixIcon="person" v-model="account"
placeholder="请输入您的账号"></uni-easyinput>
</view>
<view class="inputBox">
<uni-easyinput :inputBorder="false" prefixIcon="locked" type="password" v-model="password"
placeholder="请输入您的密码"></uni-easyinput>
</view>
<view class="box">
<view class="rememberBox">
<checkbox-group @change="changeRemember">
<label>
<checkbox :value="isSelect.toString()" :checked="isSelect" color="#000000"
style="transform:scale(0.7)" />
<text>记住密码</text>
</label>
</checkbox-group>
</view>
</view>
</view>
<button class="loginBtn" @click="goLogin"></button>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue';
import { onLoad, useGlobal } from '../../common/js/uniHelper.js';
const { $http, $util } = useGlobal()
const tops = ref('');
const height = ref('');
const widths = ref('');
const account = ref('');
const password = ref('');
const isSelect = ref(false);
// onLoadVue3 setuponLoad
onLoad(() => {
//
const pwd = uni.getStorageSync('pdaPWD');
if (pwd) {
account.value = pwd.account; // ref.value
password.value = pwd.password;
isSelect.value = true;
}
//
uni.getSystemInfo({
success: (e) => {
tops.value = e.statusBarHeight;
const custom = uni.getMenuButtonBoundingClientRect();
widths.value = custom.width;
height.value = custom.height + (custom.top - e.statusBarHeight) * 2;
}
});
});
// setupmethods
const goLogin = async () => {
uni.reLaunch({
url: "/PDA/pages/index"
});
return;
const result = await $http.sendPda({
url: 'user/login',
data: {
account: account.value,
password: password.value,
}
});
if (result.code === 1) {
if (isSelect.value) {
uni.setStorageSync('pdaPWD', {
account: account.value,
password: password.value
});
}
uni.setStorageSync('pdatoken', result.data.token);
uni.reLaunch({
url: "/PDA/pages/index"
});
} else if (result.code === 0) {
$util.showToast({ // 使$util
title: result.msg
});
}
};
//
const changeRemember = () => {
isSelect.value = !isSelect.value;
if (!isSelect.value) {
uni.removeStorageSync('pdaPWD');
}
};
</script>
<style lang="scss" scoped>
.loginPage {
width: 100%;
min-height: 100vh;
box-sizing: border-box;
position: relative;
background: #FFFFFF;
}
.loginBG {
width: 100%;
height: auto;
}
.loginHead {
position: absolute;
top: 18%;
left: 50%;
transform: translate(-50%,0);
width: 580rpx;
height: auto;
margin-bottom: 40rpx;
}
.header-top {
position: absolute;
width: 100%;
.header-title {
display: flex;
justify-content: flex-start;
align-items: center;
.box-bg {
text-align: right;
box-sizing: border-box;
padding-right: 26rpx;
color: #FFFFFF;
font-weight: 500;
font-size: 32rpx;
}
}
}
::v-deep .uni-easyinput__content-input {
width: 100%;
height: 90rpx; //
line-height: 90rpx; // 使
border-radius: 80rpx;
}
::v-deep .uni-easyinput__content {
background-color: #f3f8ff !important;
border-radius: 80rpx !important;
}
.card {
margin: -140rpx 100rpx 0;
.cardBody {
.inputBox {
margin: 40rpx 0;
}
}
}
.box {
display: flex;
justify-content: space-between;
align-items: center;
.rememberBox {
text {
font-weight: 400 !important;
font-size: 26rpx !important;
color: #000000 !important;
line-height: 36rpx;
}
label {
display: inline-flex;
align-items: center;
justify-content: flex-start;
}
}
.forgetPWD {
text-align: right;
text {
font-weight: 400;
font-size: 25rpx;
color: #999999;
line-height: 60rpx;
}
}
}
.loginBtn {
margin-top: 100rpx;
width: 543rpx;
height: 91rpx;
background: $pda-btn-bg;
border-radius: 82rpx 82rpx 82rpx 82rpx;
display: flex;
justify-content: center;
align-items: center;
font-weight: 500;
font-size: 34rpx;
color: $pda-btn-color;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 927 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

@ -9,8 +9,10 @@ $tab-btn-bg: #EF970F;
$tab-btn-color: #FFFFFF;
/* pda端 */
$pda-btn-bg: #687EF4;
$pda-btn-bg: linear-gradient( 90deg, #1878FE 0%, #60ADFF 100%);
$pda-btn-color: #FFFFFF;
$pda-btn-bg1: #0079FE;
$pda-btn-color1: #FFFFFF;
/* 品牌方端 */
$brand-btn-bg: #F0720A;

@ -0,0 +1,18 @@
import { getCurrentInstance } from 'vue'
// 导入Uniapp生命周期函数
import { onLoad, onShow, onHide, onPageScroll } from '@dcloudio/uni-app'
// 导出生命周期函数(直接转发,保持原功能)
export { onLoad, onShow, onHide, onPageScroll }
// 导出全局属性访问工具(复用之前的逻辑)
export const useGlobal = () => {
const instance = getCurrentInstance()
if (!instance) {
throw new Error('useGlobal 必须在组件 setup 或生命周期中调用')
}
return {
$http: instance.appContext.config.globalProperties.$http,
$util: instance.appContext.config.globalProperties.$util
}
}

@ -57,6 +57,34 @@
}
}
]
},
{
"root": "PDA",
"pages": [{
"path" : "pages/index",
"style" :
{
"navigationBarTitleText" : "",
"navigationStyle": "custom"
}
},
{
"path" : "pages/login",
"style" :
{
"navigationBarTitleText" : "",
"navigationStyle": "custom"
}
},
{
"path" : "pages/enter/enter",
"style" :
{
"navigationBarTitleText" : "扫码入库"
}
}
]
}
],

Loading…
Cancel
Save