9 Commits

891 changed files with 33606 additions and 1989 deletions
Split View
  1. +0
    -0
      .hbuilderx/launch.json
  2. +0
    -0
      11.txt
  3. +0
    -49
      111/App.uvue
  4. +0
    -3
      111/README.md
  5. +0
    -43
      111/manifest.json
  6. +0
    -85
      111/pages.json
  7. +0
    -354
      111/pages/home/home.uvue
  8. +0
    -88
      111/pages/index/index_1.uvue
  9. +0
    -271
      111/pages/index/login.uvue
  10. +0
    -123
      111/pages/index/wode.uvue
  11. +0
    -267
      111/pages/views/dingDanCreate.uvue
  12. +0
    -22
      111/pages/views/payment.uvue
  13. BIN
      111/static/gonggao.png
  14. BIN
      111/static/image/图像 4@2x.png
  15. BIN
      111/static/image/图像 4@3x.png
  16. BIN
      111/static/image/图层_6@2x.png
  17. BIN
      111/static/image/图层_6@3x.png
  18. BIN
      111/static/image/矩形 5315@2x.png
  19. BIN
      111/static/image/矩形 5315@3x.png
  20. BIN
      111/static/image/组 70865@2x.png
  21. BIN
      111/static/image/组 70865@3x.png
  22. BIN
      111/static/image/组 71663@2x.png
  23. BIN
      111/static/image/组 71663@3x.png
  24. BIN
      111/static/image/组 71693@2x.png
  25. BIN
      111/static/image/组 71693@3x.png
  26. BIN
      111/static/image/组 71696@2x.png
  27. BIN
      111/static/image/组 71696@3x.png
  28. BIN
      111/static/image/组 71697@2x.png
  29. BIN
      111/static/image/组 71697@3x.png
  30. BIN
      111/static/image/组 71699@2x.png
  31. BIN
      111/static/image/组 71699@3x.png
  32. BIN
      111/static/image/组 71699_1.png
  33. BIN
      111/static/image/组 71699_1@2x.png
  34. BIN
      111/static/image/组件 2 – 1@2x.png
  35. BIN
      111/static/image/组件 2 – 1@3x.png
  36. BIN
      111/static/image/组件 3 – 1@2x.png
  37. BIN
      111/static/image/组件 3 – 1@3x.png
  38. BIN
      111/static/image/组件 4 – 1@2x.png
  39. BIN
      111/static/image/组件 4 – 1@3x.png
  40. BIN
      111/static/image/组件 5 – 1@2x.png
  41. BIN
      111/static/image/组件 5 – 1@3x.png
  42. BIN
      111/static/image/联合 2.png
  43. BIN
      111/static/image/联合 2_1.png
  44. BIN
      111/static/image/路径 24@2x.png
  45. BIN
      111/static/image/路径 24@3x.png
  46. BIN
      111/static/image/路径 25@2x.png
  47. BIN
      111/static/image/路径 25@3x.png
  48. BIN
      111/static/image/路径 3909@2x.png
  49. BIN
      111/static/image/路径 3909@3x.png
  50. BIN
      111/static/image/路径 3909_1.png
  51. BIN
      111/static/image/路径 3909_1@2x.png
  52. BIN
      111/static/image/路径 3909_1@3x.png
  53. BIN
      111/static/image/路径 3917@2x.png
  54. BIN
      111/static/image/路径 3917@3x.png
  55. BIN
      111/static/image/路径 3917_1.png
  56. BIN
      111/static/image/路径 3917_1@2x.png
  57. BIN
      111/static/image/路径 3917_1@3x.png
  58. BIN
      111/static/image/路径 4016@2x.png
  59. BIN
      111/static/image/路径 4016@3x.png
  60. BIN
      111/static/image/路径 4016_1@2x.png
  61. BIN
      111/static/image/路径 4016_1@3x.png
  62. BIN
      111/static/image/路径 4150@2x.png
  63. BIN
      111/static/image/路径 4150@3x.png
  64. BIN
      111/static/image/路径 6111@2x.png
  65. BIN
      111/static/image/路径 6111@3x.png
  66. BIN
      111/static/image/路径 6112@2x.png
  67. BIN
      111/static/image/路径 6112@3x.png
  68. +0
    -676
      111/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue
  69. +0
    -8
      111/unpackage/dist/cache/.vite/deps/_metadata.json
  70. BIN
      111/unpackage/dist/dev/app-android/static/logo.png
  71. +83
    -0
      App.uvue
  72. +60
    -0
      css/header.css
  73. +0
    -0
      index.html
  74. +0
    -0
      main.uts
  75. +43
    -0
      manifest.json
  76. +95
    -0
      pages.json
  77. +317
    -0
      pages/home/home.uvue
  78. +470
    -0
      pages/index/PayPal.uvue
  79. +213
    -0
      pages/index/dingdan.uvue
  80. +0
    -0
      pages/index/index.uvue
  81. +297
    -0
      pages/index/login.uvue
  82. +124
    -0
      pages/index/wode.uvue
  83. +258
    -0
      pages/views/dingDanCreate.uvue
  84. +0
    -0
      static/iconfont.css
  85. +0
    -0
      static/iconfont.ttf
  86. BIN
      static/image/11.png
  87. BIN
      static/image/22.png
  88. BIN
      static/image/weixuanzhong.png
  89. BIN
      static/image/xuanzhong.png
  90. +0
    -0
      static/image/图像 4.png
  91. +0
    -0
      static/image/图层_6.png
  92. +0
    -0
      static/image/矩形 4533.png
  93. +0
    -0
      static/image/矩形 4533@2x.png
  94. +0
    -0
      static/image/矩形 4533@3x.png
  95. +0
    -0
      static/image/矩形 5315.png
  96. +0
    -0
      static/image/组 70865.png
  97. +0
    -0
      static/image/组 71663.png
  98. +0
    -0
      static/image/组 71666.png
  99. +0
    -0
      static/image/组 71666@2x.png
  100. +0
    -0
      static/image/组 71666@3x.png

111/.hbuilderx/launch.json → .hbuilderx/launch.json View File


111/11.txt → 11.txt View File


+ 0
- 49
111/App.uvue View File

@ -1,49 +0,0 @@
<script lang="uts">
let firstBackTime = 0
export default {
onLaunch: function () {
console.log('App Launch')
},
onShow: function () {
console.log('App Show')
},
onHide: function () {
console.log('App Hide')
},
// #ifdef APP-ANDROID
onLastPageBackPress: function () {
console.log('App LastPageBackPress')
if (firstBackTime == 0) {
uni.showToast({
title: '再按一次退出应用',
position: 'bottom',
})
firstBackTime = Date.now()
setTimeout(() => {
firstBackTime = 0
}, 2000)
} else if (Date.now() - firstBackTime < 2000) {
firstBackTime = Date.now()
uni.exit()
}
},
// #endif
onExit: function () {
console.log('App Exit')
},
}
</script>
<style>
@import "@/static/iconfont.css";
/*每个页面公共css */
.uni-row {
flex-direction: row;
}
body{
background-color: #ffffff;
}
.uni-column {
flex-direction: column;
}
</style>

+ 0
- 3
111/README.md View File

@ -1,3 +0,0 @@
# contract-front
合同小程序前端代码仓库

+ 0
- 43
111/manifest.json View File

@ -1,43 +0,0 @@
{
"name" : "111",
"appid" : "__UNI__ABF0653",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"uni-app-x" : {},
/* */
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "wx7d74b5db6c1f7328",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "3",
"app" : {
"distribute" : {
"icons" : {
"android" : {
"hdpi" : "",
"xhdpi" : "",
"xxhdpi" : "",
"xxxhdpi" : ""
}
}
}
}
}

+ 0
- 85
111/pages.json View File

@ -1,85 +0,0 @@
{
"pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/login",
"style": {
"navigationBarTitleText": "",
"navigationStyle":"custom"
}
},
{
"path": "pages/home/home",
"style": {
"navigationBarTitleText": "主页",
"navigationStyle":"custom"
},
"needLogin": true
},
{
"path": "pages/index/wode",
"style": {
"navigationBarTitleText": "我的",
"navigationStyle":"custom"
},
"needLogin": true
},
{
"path": "pages/views/dingDanCreate",
"style": {
"navigationBarTitleText": "录入订单",
"navigationStyle":"custom"
},
"needLogin": true
},
{
"path": "pages/views/payment",
"style": {
"navigationBarTitleText": "付款信息",
"navigationStyle":"custom"
},
"needLogin": true
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app x",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {},
"tabBar": {
"color": "#7A7E83",
"selectedColor": "#3cc51f",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"list": [{
"pagePath": "pages/home/home",
"iconPath": "/",
"selectedIconPath": "/static/image/路径 3909.png",
"text": "首页"
}, {
"pagePath": "",
"iconPath": "/static/image/路径 4016_1.png",
"selectedIconPath": "/static/image/路径 4016.png",
"text": "订单"
},
{
"pagePath": "pages/index/wode",
"iconPath": "/static/image/路径 3917.png",
"selectedIconPath": "/static/image/路径 24@2x.png",
"text": "我的"
}
]
},
"condition" : { //
"current": 0, //(list )
"list": [
{
"name": "", //
"path": "", //
"query": "" //onLoad
}
]
}
}

+ 0
- 354
111/pages/home/home.uvue View File

@ -1,354 +0,0 @@
<template>
<view class="container">
<!-- 顶部标题 -->
<view class="header">
<view class="header_info">
<text class="header_text" :title="title">{{title}}</text>
<text style="margin-right: 10rpx; font-size: 40rpx;">|</text>
<view @click="change_text" class="header_change">
<text >切换</text>
<uni-icons type="right" size="30" color="#c2d4de" :size="1"></uni-icons>
</view>
</view>
</view>
<view class="swiper">
<image class="swiper-image" src="/static/image/组 71699.png"></image>
</view>
<view class="order_Entry_container" @click="orderEntry">
<image class="order_Entry_image" src="/static/image/组 71699_1@3x.png"></image>
<text style="color: #115881;font-weight: bold;margin-left: 20rpx;">录入订单</text>
<uni-icons class="order_Entry_end" type="right" :size="25" color="#306e91"></uni-icons>
</view>
<view v-if="isshow" class="show_container">
<view class="isshow-header">
<uni-icons class=" isshow-header-content-icon" type="search" :size="20"></uni-icons>
<uni-easyinput :inputBorder="false" @input="handleSearch(ServiceName)" class=" isshow-header-content-input" v-model="ServiceName" placeholder="请输入服务名称" />
<text class="isshow-header-content-text" @click="searchName">搜索</text>
</view>
<view class="isshow-content" >
<text class="isshow-content-text" v-for="(item, index) in textcontent" :key="index" @click="change_city(item.name)">{{item.name}}</text>
</view>
</view>
<view v-if="isshow_1" class="show_container_1">
<image class="show_container_1_image" src="/static/image/图层_6.png"></image>
<view class="show_container_1_footer">
<text>门店已经切换为{{title}}</text>
<button @click="close_view">好的</button>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
ServiceName:'',
title:"北京汽车有限公司",
isshow:false,
isshow_1:false,
newListData:[],
allMsg : [
{ name: "myhua", id: 1 },
{ name: "mp3", id: 2 },
{ name: "hello", id: 3 },
{ name: "world", id: 4 },
{ name: "warm weather", id: 5 },
{ name: "m3", id: 6 },
{ name: "hahaha", id: 7 }
],
textcontent: [
'公告1:欢迎使用车辆合同生成系统!',
'公告2:请及时查看最新用户协议。',
'公告3:隐私政策已更新,请知悉。',
'公告1:欢迎使用车辆合同生成系统!',
'公告2:请及时查看最新用户协议。',
'公告3:隐私政策已更新,请知悉。'
],
};
},
mounted() {
this.allMsg = [
{ name: "myhua", id: 1 },
{ name: "mp3", id: 2 },
{ name: "hello", id: 3 },
{ name: "world", id: 4 },
{ name: "warm weather", id: 5 },
{ name: "m3", id: 6 },
{ name: "hahaha", id: 7 }
];
this.textcontent = this.allMsg;
},
methods: {
change_text(){
if(this.isshow){
this.isshow=false;
}else{
this.isshow=true;
console.log('111')
}
},
orderEntry(){
console.log('111');
uni.navigateTo(
{ url: '/pages/views/dingDanCreate' }
)
},
// 搜索城市名字
searchName(){
},
change_city(name){
this.title = name;
this.change_text();
this.isshow_1 = true;
},
close_view(){
this.isshow_1 = false;
},
// 模糊匹配
// 右上角搜索框--模糊查询
handleSearch(queryString) {
if(event.target.value){
let queryStringArr = event.target.value.split("");
let str = "(.*?)";
this.textcontent = [];
let regStr = str + queryStringArr.join(str) + str;
let reg = RegExp(regStr, "i"); // 以mh为例生成的正则表达式为/(.*?)m(.*?)h(.*?)/i
this.allMsg.map(item => {
if (reg.test(item.name)) {
this.textcontent.push(item);
}
});
}else {
this.textcontent=[];
this.textcontent = this.allMsg;
}
}
}
};
</script>
<style>
.container {
display: flex;
flex-direction: column;
height: 100vh;
background-color: #f5f5f5;
}
/* 头部 */
.header {
padding: 20px;
width: 100%;
height: 15%;
background-color: #044f7a;
color: #fff;
display: flex;
flex-direction: row;
align-items: center;
}
.header_info{
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
color: #e0e9ef;
}
.header_text{
width: 45%;
white-space: nowrap;/*设置不换行*/
overflow: hidden; /*设置隐藏*/
text-overflow: ellipsis; /*设置隐藏部分为省略号*/
}
.header_change{
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
}
/* 订单录入 */
.order_Entry_container{
width: 90%;
height: 8%;
background-color: #d9e5eb;
border-radius: 10rpx;
left:5%;
display: flex;
flex-direction: row;
align-items: center;
margin-top: 10%;
}
.order_Entry_image{
width: 10%;
height: 70%;
margin-left: 3%;
}
.order_Entry_end{
margin-left: auto;
margin-right: 7%;
}
/* 轮播图 */
.swiper {
height: 30%;
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
overflow: hidden;
}
.swiper-image {
width: 100%;
height: 100%;
margin: 0 auto;
}
.form {
flex: 1;
padding: 20px;
}
.submit-button {
width: 100%;
height: 40px;
background-color: #007aff;
color: #fff;
border: none;
border-radius: 4px;
font-size: 16px;
}
.footer {
display: flex;
justify-content: space-around;
padding: 10px;
background-color: #fff;
border-top: 1px solid #ccc;
}
.nav-item {
text-align: center;
}
.nav-item text {
font-size: 14px;
}
.icon-image{
width: 30%;
height: 140px;
margin: 0 auto;
margin-top: 20px;
}
/* 遮罩层 */
.show_container{
width: 60%;
height: 36%;
background-color: #ffffff;
position: absolute;
border-radius: 20rpx;
/* border: 1px solid; */
box-shadow: 0px 3rpx 0px #e4e4e4;
left:5%;
top: 13%;
z-index:999;
display: flex;
flex-direction: column;
align-items: center;
}
.isshow-header{
width: 90%;
height: 30%;
display: flex;
justify-content: center;
align-items: center;
flex-direction: row;
color: #3c7697;
}
.isshow-header-content-icon{
width: 10%;
height: 30%;
}
.isshow-header-content-input{
width: 80%;
height: 40%;
margin: 0 20rpx 0 20rpx;
border:none;
outline:none;
}
.isshow-content{
height: 70%;
display: flex;
flex-direction: column;
align-items: center;
overflow-y:scroll;
}
.isshow-content-text{
color: #414141;
height: 30rpx;
width: 100%;
line-height: 30rpx;
margin: 20rpx 0 20rpx 0;
font-size: 30rpx;
}
.isshow-content::-webkit-scrollbar {
display: none;
}
/* 提示框*/
.show_container_1{
width: 80%;
height: 40%;
background-color: #ffffff;
position: absolute;
border-radius: 20rpx;
/* border: 1px solid; */
box-shadow: 0px 3rpx 0px #e4e4e4;
left:10%;
top: 30%;
z-index:999;
display: flex;
flex-direction: column;
align-items: center;
}
.show_container_1_image{
height: 50%;
width: 50%;
top: 5%;
}
.show_container_1_footer{
height: 50%;
width: 100%;
color:#0b5583;
display: flex;
flex-direction: column;
align-items: center;
font-weight: bold;
font-size: 10rpx;
}
.show_container_1_footer text{
margin-top: 10%;
}
.show_container_1_footer button{
color:#0b5583;
height: 30%;
border-radius: 40rpx;
width: 80%;
margin-top: 5%;
border: 1px solid #0c547e;
display: flex;
justify-content: center;
align-items: center;
}
</style>

+ 0
- 88
111/pages/index/index_1.uvue View File

@ -1,88 +0,0 @@
<template>
<view class="container">
<view class="form">
<input class="input" type="text" placeholder="请输入您的账号" v-model="username" />
<input class="input" type="password" placeholder="请输入您的密码" v-model="password" />
<view class="agreement">
<checkbox-group @change="handleAgreementChange">
<label>
<checkbox value="agree" /> 阅读并同意《用户协议》和《隐私政策》
</label>
</checkbox-group>
</view>
<button class="button" @click="handleLogin">登录</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
username: '',
password: '',
agreed: false
};
},
methods: {
handleAgreementChange(e) {
this.agreed = e.detail.value.includes('agree');
},
handleLogin() {
if (!this.agreed) {
uni.showToast({
title: '请先同意用户协议和隐私政策',
icon: 'none'
});
return;
}
// 这里可以添加登录逻辑
uni.showToast({
title: '登录成功',
icon: 'success'
});
}
}
};
</script>
<style>
.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #f5f5f5;
}
.form {
width: 80%;
background-color: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
.input {
width: 100%;
height: 40px;
margin-bottom: 15px;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
}
.agreement {
margin-bottom: 15px;
}
.button {
width: 100%;
height: 40px;
background-color: #007aff;
color: #fff;
border: none;
border-radius: 4px;
font-size: 16px;
}
</style>

+ 0
- 271
111/pages/index/login.uvue View File

@ -1,271 +0,0 @@
<template>
<view class="login-container">
<!-- 顶部欢迎语 -->
<view class="login_image">
<image src="/static/image/组件 3 – 1.png" draggable ="false"></image>
</view>
<view class="welcome">
<text class="welcome-text">欢迎登陆车辆合同生成</text>
</view>
<!-- 账号输入框 -->
<view class="input-container">
<uni-easyinput prefixIcon="person" class="input" placeholder="请输入您的账号" v-model="username" :inputBorder="false" ></uni-easyinput>
<view class="underline"></view>
</view>
<!-- 密码输入框 -->
<view class="input-container">
<uni-easyinput prefixIcon="locked" class="input" type="password" placeholder="请输入您的密码" v-model="password" :inputBorder="false" ></uni-easyinput>
<view class="underline"></view>
</view>
<!-- 协议提示 -->
<view class="agreement">
<radio class = "login-agree" value="r1" :checked="checked" @click="changeCK">登录即代表同意
</radio>
<text class="link" @click="showModal">《用户协议》</text>
<text class="login-agree">与</text>
<text class="link" @click="showModal">《隐私政策》</text>
</view>
<view class = 'button_container'>
<!-- 登录按钮 -->
<button class="login-button" @click="handleLogin">登陆</button>
</view>
<mosowe-confirm-popup
v-model="popupNoCancelShow"
title="服务协议和隐私政策"
confirmText
cancelText
>
没有取消弹框
<template v-slot:footer>
<view class="mini_container">
<button class="mini-btn" type="primary" size="mini" @click="closeModal">取消</button>
<button class="mini-btn" type="primary" size="mini" @click="getConfirm">确认</button>
</view>
</template>
</mosowe-confirm-popup>
</view>
</template>
<script>
export default {
data() {
return {
username: '', // 账号
password: '', // 密码
isModalVisible: false, // 控制弹窗显示
modalTitle: '', // 弹窗标题
modalContent: '' ,// 弹窗内容
popupNoCancelShow: false,
checked:false,
};
},
methods: {
// 处理登录逻辑
handleLogin() {
if (!this.username || !this.password) {
uni.showToast({ title: '请输入账号和密码', icon: 'none' });
return;
}else{
console.log(this.checked);
if(this.checked){
uni.showToast({ title: '登录成功', icon: 'success' });
uni.switchTab({ url: '/pages/home/home' });
}else{
uni.showToast({ title: '请勾选服务协议', icon: 'none' });
}
}
},
// 显示弹窗
showModal() {
this.popupNoCancelShow = true ;
},
// 关闭弹窗
closeModal() {
this.popupNoCancelShow = false ;
},
change(e) {
console.log('当前模式:' + e.type + ',状态:' + e.show);
},
changeCK(){
if(this.checked){
this.checked = false;
}else{
this.checked = true;
}
},
// 处理选中事件
getConfirm(){
console.log("111");
if(this.checked){
this.checked = this.checked;
}else{
this.checked = true;
}
this.popupNoCancelShow = false;
}
}
};
</script>
<style>
/* 页面容器 */
.login-container {
display: flex;
flex-direction: column;
align-items: center;
background-color: #ffffff;
height: 100vh;
width: 100%;
}
.button-text {
color: #fff;
font-size: 12px;
}
/* 登录图片 */
.login_image{
width: 100%;
height: 40%;
}
.login_image image{
width: 100%;
height: 100%;
}
/* 欢迎语 */
.welcome {
height: 15%;
margin-bottom: 40rpx;
display: flex;
justify-content: end;
align-items: center;
}
.welcome-text {
font-size: 20px;
font-weight: bold;
color: #044f7a;
}
/* 输入框容器 */
.input-container {
width: 100%;
left:10%;
}
/* 输入框样式 */
.input {
width: 70%;
height: 40px;
font-size: 16px;
border: none;
outline: none;
background-color: transparent;
}
/* 下划线样式 */
.underline {
width: 100%;
height: 1px;
background-color: #f2f2f2;
margin-top: 5px;
}
/* 协议提示 */
.agreement {
font-size: 14px;
color: #666;
margin-bottom: 20px;
width: 100%;
left:10%;
display: flex;
flex-direction: row;
align-items: center;
}
.login-agree{
font-size: 20rpx;
}
.link {
color: #007aff;
text-decoration: underline;
font-size: 20rpx;
}
.button_container{
width: 100%;
height: 40%;
display: flex;
align-items: center;
}
/* 登录按钮 */
.login-button {
width: 70%;
height: 70rpx;
line-height: 70rpx;
background-color: #044f7a;
color: #fff;
border: none;
border-radius: 4px;
font-size: 16px;
position: absolute;
top:15%;
left:20%;
}
/* 弹窗样式 */
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
.modal-content {
width: 80%;
background-color: #fff;
border-radius: 8px;
padding: 20px;
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 18px;
font-weight: bold;
margin-bottom: 15px;
}
.close {
font-size: 24px;
cursor: pointer;
}
.modal-body {
font-size: 16px;
line-height: 1.5;
}
.mini_container{
display: flex;
flex-direction: row;
align-items: center;
}
/* 按钮 */
.mini-btn{
width: 30%;
margin-left: 15%;
}
</style>

+ 0
- 123
111/pages/index/wode.uvue View File

@ -1,123 +0,0 @@
<template>
<view class="container">
<!-- 用户信息 -->
<view class="user-info">
<text class="username">李晓春</text>
</view>
<!-- 功能列表 -->
<view class="menu">
<view class="menu-item" >
<image class="arrow" src="/static/arrow-right.png"></image>
<text>关于我们</text>
</view>
<view class="menu-item" >
<image class="arrow" src="/static/arrow-right.png"></image>
<text>修改密码</text>
</view>
<view class="menu-item">
<image class="arrow" src="/static/arrow-right.png"></image>
<text>服务协议</text>
</view>
<view class="menu-item" >
<image class="arrow" src="/static/arrow-right.png"></image>
<text>隐私政策</text>
</view>
<view class="menu-item" @click="logout">
<image class="arrow" src="/static/arrow-right.png"></image>
<text>退出登录</text>
</view>
</view>
</view>
</template>
<script>
export default {
methods: {
logout() {
uni.showModal({
title: '提示',
content: '确定要退出登录吗?',
success: (res) => {
if (res.confirm) {
uni.showToast({
title: '退出登录成功',
icon: 'success',
success: () => {
// 这里可以添加退出登录的逻辑,例如清除用户登录状态
setTimeout(() => {
uni.navigateTo({ url: '/pages/index/index' });
}, 1500);
}
});
}
}
});
}
}
};
</script>
<style>
.container {
display: flex;
flex-direction: column;
height: 300vh;
background-color: #f5f5f5;
}
.user-info {
padding: 20px;
height: 200px;
background-color: #007aff;
color: #fff;
text-align: center;
}
.username {
font-size: 20px;
font-weight: bold;
margin: 0 auto;
line-height: 200px;
}
.menu {
flex: 1;
padding: 20px;
background-color: #fff;
}
.menu-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px 0;
border-bottom: 1px solid #eee;
}
.menu-item text {
font-size: 16px;
}
.arrow {
width: 20px;
height: 20px;
}
.footer {
display: flex;
justify-content: space-around;
padding: 10px;
background-color: #fff;
border-top: 1px solid #ccc;
}
.nav-item {
text-align: center;
}
.nav-item text {
font-size: 14px;
}
</style>

+ 0
- 267
111/pages/views/dingDanCreate.uvue View File

@ -1,267 +0,0 @@
<template>
<view class="container">
<!-- 顶部标题 -->
<view class="header">
<view class="header_info">
<uni-icons class="header_info_icon" type="left" size="30" color="#c2d4de" :size="1" @click="toBack"></uni-icons>
<text class="header_text">录入订单</text>
</view>
</view>
<view class="content_container">
<view class="isshow-header">
<uni-icons class=" isshow-header-content-icon" type="search" :size="20"></uni-icons>
<uni-easyinput :inputBorder="false" @input="handleSearch(ServiceName)" class=" isshow-header-content-input" v-model="ServiceName" placeholder="请输入服务名称" focus=true />
<text class="isshow-header-content-text" @click="searchName">搜索</text>
</view>
</view>
<!-- 二级分类 -->
<view class="content_footer">
<!-- 分类 -->
<scroll-view show-scrollbar="false" class="content_footer_left">
<view v-for="(item,index) in product" :class="['content_footer_left_product', FirstIndex === item.id?'click_color':'']" @click="FirstLevelChange(item.id)">{{item.name}}</view>
</scroll-view>
<scroll-view show-scrollbar="false" class="content_footer_right">
<view v-for="(item,index) in product_2" class="content_footer_right_content">
<text class="text" :class="['content_footer_right_content_text', item.name === name?'select_color':'']">{{item.name}}</text>
<radio class="content_footer_right_content_radio" value="item.id" :checked="item.name == name" activeBackgroundColor="#04517b" @click="selctRadio(item.name)"></radio>
</view>
</scroll-view>
</view>
<!-- 下一步 -->
<button class="buttun" @click="toPayment">下一步</button>
</view>
</template>
<script>
export default {
data() {
return {
product:[
{
id: 1,
name: '数码',
children: [
{
id: 12,
name: '耳机',
children: [
{ id: 121, name: '漫步者' },
{ id: 122, name: '倍思' }
]
},
{
id: 13,
name: '电脑',
children: [
{ id: 131, name: '联想' },
{ id: 132, name: '小米' },
{ id: 133, name: '戴尔' }
]
}
]
},
{
id: 2,
name: '家用电器',
// 类似数码的子结构
children:[
{
id: 11,
name: '手机',
children: [
{ id: 111, name: 'iphone' },
{ id: 112, name: 'vivo' },
{ id: 113, name: 'oppo' }
]
}
]
}
],
product_2:[],
FirstIndex:0,
name:''
}
},
methods: {
toBack(){
uni.navigateBack({
delta: 1
});
},
nameClick (){
},
FirstLevelChange(id){
this.FirstIndex = id;
this.product_2 = this.product[id-1].children;
},
selctRadio(name){
console.log(name);
this.name = name;
}
},
toPayment(){
console.log(111);
uni.navigateTo(
{ url: '/pages/views/payment' }
)
}
}
</script>
<style>
.container {
display: flex;
flex-direction: column;
height: 100vh;
background-color: #f5f5f5;
position: relative;
}
/* 头部 */
.header {
width: 100%;
height: 15%;
background-color: #044f7a;
color: #fff;
display: flex;
flex-direction: row;
align-items: center;
}
.header_info{
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
color: #e0e9ef;
justify-content: center;
align-items: center;
flex: 15;
}
.header_info_icon{
margin-right: auto;
flex: 1;
}
.header_text{
flex: 14;
display: flex;
/* justify-content: center; */
left:35%;
align-items: center;
}
/* 搜索框 */
.content_container{
width: 100%;
height: 10%;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center
}
.content_footer{
width: 100%;
height: 75%;
display: flex;
flex-direction: row;
}
/* 搜索框 */
/* 遮罩层 */
.isshow-header{
width: 90%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
flex-direction: row;
color: #3c7697;
}
.isshow-header-content-icon{
width: 10%;
height: 30%;
}
.isshow-header-content-input{
width: 80%;
height: 40%;
margin: 0 20rpx 0 20rpx;
border:none;
outline:none;
}
.isshow-content{
height: 70%;
display: flex;
flex-direction: column;
align-items: center;
overflow-y:scroll;
}
.isshow-content-text{
color: #414141;
height: 30rpx;
width: 100%;
line-height: 30rpx;
margin: 20rpx 0 20rpx 0;
font-size: 30rpx;
}
.isshow-content::-webkit-scrollbar {
display: none;
}
/* 二级分类 */
.content_footer_left{
width: 20%;
}
.content_footer_left_product{
width: 100%;
height: 10%;
display: flex;
justify-content: center;
align-items: center;
font-size: 27rpx;
color: #7f7f7f;
}
.content_footer_right{
width: 80%;
display: flex;
flex-direction: column;
align-items: center;
}
.content_footer_right_content{
width: 100%;
height: 10%;
display: flex;
flex-direction: row;
/* background-color: red; */
align-items: center;
}
.content_footer_right_content_text{
margin-right: auto;
color:#242424;
margin-left: 5%;
}
.content_footer_right_content_radio{
margin-left: auto;
margin-right: 5%;
}
/* 点击颜色 */
.click_color{
background-color: #044f7a;
color: #f0fcf2;
}
.select_color{
color: #316b8b;
}
/* 按钮 */
.buttun{
width: 30%;
position: absolute;
display: flex;
justify-content: center;
align-items: center;
font-size: 25rpx;
border-radius: 30rpx;
background-color: #05507c;
bottom:5%;
right: 5%;
color: #fafcff;
}
</style>

+ 0
- 22
111/pages/views/payment.uvue View File

@ -1,22 +0,0 @@
<template>
<view>
你好
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
</style>

BIN
111/static/gonggao.png View File


BIN
111/static/image/图像 4@2x.png View File


BIN
111/static/image/图像 4@3x.png View File


BIN
111/static/image/图层_6@2x.png View File


BIN
111/static/image/图层_6@3x.png View File


BIN
111/static/image/矩形 5315@2x.png View File


BIN
111/static/image/矩形 5315@3x.png View File


BIN
111/static/image/组 70865@2x.png View File


BIN
111/static/image/组 70865@3x.png View File


BIN
111/static/image/组 71663@2x.png View File


BIN
111/static/image/组 71663@3x.png View File


BIN
111/static/image/组 71693@2x.png View File


BIN
111/static/image/组 71693@3x.png View File


BIN
111/static/image/组 71696@2x.png View File


BIN
111/static/image/组 71696@3x.png View File


BIN
111/static/image/组 71697@2x.png View File


BIN
111/static/image/组 71697@3x.png View File


BIN
111/static/image/组 71699@2x.png View File


BIN
111/static/image/组 71699@3x.png View File


BIN
111/static/image/组 71699_1.png View File


BIN
111/static/image/组 71699_1@2x.png View File


BIN
111/static/image/组件 2 – 1@2x.png View File


BIN
111/static/image/组件 2 – 1@3x.png View File


BIN
111/static/image/组件 3 – 1@2x.png View File


BIN
111/static/image/组件 3 – 1@3x.png View File


BIN
111/static/image/组件 4 – 1@2x.png View File


BIN
111/static/image/组件 4 – 1@3x.png View File


BIN
111/static/image/组件 5 – 1@2x.png View File


BIN
111/static/image/组件 5 – 1@3x.png View File


BIN
111/static/image/联合 2.png View File


BIN
111/static/image/联合 2_1.png View File


BIN
111/static/image/路径 24@2x.png View File


BIN
111/static/image/路径 24@3x.png View File


BIN
111/static/image/路径 25@2x.png View File


BIN
111/static/image/路径 25@3x.png View File


BIN
111/static/image/路径 3909@2x.png View File


BIN
111/static/image/路径 3909@3x.png View File


BIN
111/static/image/路径 3909_1.png View File


BIN
111/static/image/路径 3909_1@2x.png View File


BIN
111/static/image/路径 3909_1@3x.png View File


BIN
111/static/image/路径 3917@2x.png View File


BIN
111/static/image/路径 3917@3x.png View File


BIN
111/static/image/路径 3917_1.png View File


BIN
111/static/image/路径 3917_1@2x.png View File


BIN
111/static/image/路径 3917_1@3x.png View File


BIN
111/static/image/路径 4016@2x.png View File


BIN
111/static/image/路径 4016@3x.png View File


BIN
111/static/image/路径 4016_1@2x.png View File


BIN
111/static/image/路径 4016_1@3x.png View File


BIN
111/static/image/路径 4150@2x.png View File


BIN
111/static/image/路径 4150@3x.png View File


BIN
111/static/image/路径 6111@2x.png View File


BIN
111/static/image/路径 6111@3x.png View File


BIN
111/static/image/路径 6112@2x.png View File


BIN
111/static/image/路径 6112@3x.png View File


+ 0
- 676
111/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue View File

@ -1,676 +0,0 @@
<template>
<view class="uni-easyinput" :class="{ 'uni-easyinput-error': msg }" :style="boxStyle">
<view class="uni-easyinput__content" :class="inputContentClass" :style="inputContentStyle">
<uni-icons v-if="prefixIcon" class="content-clear-icon" :type="prefixIcon" color="#c0c4cc" @click="onClickIcon('prefix')" size="22"></uni-icons>
<slot name="left">
</slot>
<!-- #ifdef MP-ALIPAY -->
<textarea :enableNative="enableNative" v-if="type === 'textarea'" class="uni-easyinput__content-textarea" :class="{ 'input-padding': inputBorder }" :name="name" :value="val" :placeholder="placeholder" :placeholderStyle="placeholderStyle" :disabled="disabled" placeholder-class="uni-easyinput__placeholder-class" :maxlength="inputMaxlength" :focus="focused" :autoHeight="autoHeight" :cursor-spacing="cursorSpacing" :adjust-position="adjustPosition" @input="onInput" @blur="_Blur" @focus="_Focus" @confirm="onConfirm" @keyboardheightchange="onkeyboardheightchange"></textarea>
<input :enableNative="enableNative" v-else :type="type === 'password' ? 'text' : type" class="uni-easyinput__content-input" :style="inputStyle" :name="name" :value="val" :password="!showPassword && type === 'password'" :placeholder="placeholder" :placeholderStyle="placeholderStyle" placeholder-class="uni-easyinput__placeholder-class" :disabled="disabled" :maxlength="inputMaxlength" :focus="focused" :confirmType="confirmType" :cursor-spacing="cursorSpacing" :adjust-position="adjustPosition" @focus="_Focus" @blur="_Blur" @input="onInput" @confirm="onConfirm" @keyboardheightchange="onkeyboardheightchange" />
<!-- #endif -->
<!-- #ifndef MP-ALIPAY -->
<textarea v-if="type === 'textarea'" class="uni-easyinput__content-textarea" :class="{ 'input-padding': inputBorder }" :name="name" :value="val" :placeholder="placeholder" :placeholderStyle="placeholderStyle" :disabled="disabled" placeholder-class="uni-easyinput__placeholder-class" :maxlength="inputMaxlength" :focus="focused" :autoHeight="autoHeight" :cursor-spacing="cursorSpacing" :adjust-position="adjustPosition" @input="onInput" @blur="_Blur" @focus="_Focus" @confirm="onConfirm" @keyboardheightchange="onkeyboardheightchange"></textarea>
<input v-else :type="type === 'password' ? 'text' : type" class="uni-easyinput__content-input" :style="inputStyle" :name="name" :value="val" :password="!showPassword && type === 'password'" :placeholder="placeholder" :placeholderStyle="placeholderStyle" placeholder-class="uni-easyinput__placeholder-class" :disabled="disabled" :maxlength="inputMaxlength" :focus="focused" :confirmType="confirmType" :cursor-spacing="cursorSpacing" :adjust-position="adjustPosition" @focus="_Focus" @blur="_Blur" @input="onInput" @confirm="onConfirm" @keyboardheightchange="onkeyboardheightchange" />
<!-- #endif -->
<template v-if="type === 'password' && passwordIcon">
<!-- 开启密码时显示小眼睛 -->
<uni-icons v-if="isVal" class="content-clear-icon" :class="{ 'is-textarea-icon': type === 'textarea' }" :type="showPassword ? 'eye-slash-filled' : 'eye-filled'" :size="22" :color="focusShow ? primaryColor : '#c0c4cc'" @click="onEyes"></uni-icons>
</template>
<template v-if="suffixIcon">
<uni-icons v-if="suffixIcon" class="content-clear-icon" :type="suffixIcon" color="#c0c4cc" @click="onClickIcon('suffix')" size="22"></uni-icons>
</template>
<template v-else>
<uni-icons v-if="clearable && isVal && !disabled && type !== 'textarea'" class="content-clear-icon" :class="{ 'is-textarea-icon': type === 'textarea' }" type="clear" :size="clearSize" :color="msg ? '#dd524d' : focusShow ? primaryColor : '#c0c4cc'" @click="onClear"></uni-icons>
</template>
<slot name="right"></slot>
</view>
</view>
</template>
<script>
/**
* Easyinput 输入框
* @description 此组件可以实现表单的输入与校验包括 "text" "textarea" 类型
* @tutorial https://ext.dcloud.net.cn/plugin?id=3455
* @property {String} value 输入内容
* @property {String } type 输入框的类型默认text password/text/textarea/..
* @value text 文本输入键盘
* @value textarea 多行文本输入键盘
* @value password 密码输入键盘
* @value number 数字输入键盘注意iOS上app-vue弹出的数字键盘并非9宫格方式
* @value idcard 身份证输入键盘支付宝百度QQ小程序
* @value digit 带小数点的数字键盘 App的nvue页面微信支付宝百度头条QQ小程序支持
* @property {Boolean} clearable 是否显示右侧清空内容的图标控件点击可清空输入框内容默认true
* @property {Boolean} autoHeight 是否自动增高输入区域type为textarea时有效默认true
* @property {String } placeholder 输入框的提示文字
* @property {String } placeholderStyle placeholder的样式(内联样式字符串)"color: #ddd"
* @property {Boolean} focus 是否自动获得焦点默认false
* @property {Boolean} disabled 是否禁用默认false
* @property {Number } maxlength 最大输入长度设置为 -1 的时候不限制最大长度默认140
* @property {String } confirmType 设置键盘右下角按钮的文字仅在type="text"时生效默认done
* @property {Number } clearSize 清除图标的大小单位px默认15
* @property {String} prefixIcon 输入框头部图标
* @property {String} suffixIcon 输入框尾部图标
* @property {String} primaryColor 设置主题色默认#2979ff
* @property {Boolean} trim 是否自动去除两端的空格
* @property {Boolean} cursorSpacing 指定光标与键盘的距离单位 px
* @property {Boolean} ajust-position 当键盘弹起时是否上推内容默认值true
* @value both 去除两端空格
* @value left 去除左侧空格
* @value right 去除右侧空格
* @value start 去除左侧空格
* @value end 去除右侧空格
* @value all 去除全部空格
* @value none 不去除空格
* @property {Boolean} inputBorder 是否显示input输入框的边框默认true
* @property {Boolean} passwordIcon type=password时是否显示小眼睛图标
* @property {Object} styles 自定义颜色
* @event {Function} input 输入框内容发生变化时触发
* @event {Function} focus 输入框获得焦点时触发
* @event {Function} blur 输入框失去焦点时触发
* @event {Function} confirm 点击完成按钮时触发
* @event {Function} iconClick 点击图标时触发
* @example <uni-easyinput v-model="mobile"></uni-easyinput>
*/
function obj2strClass(obj) {
let classess = '';
for (let key in obj) {
const val = obj[key];
if (val) {
classess += `${key} `;
}
}
return classess;
}
function obj2strStyle(obj) {
let style = '';
for (let key in obj) {
const val = obj[key];
style += `${key}:${val};`;
}
return style;
}
export default {
name: 'uni-easyinput',
emits: [
'click',
'iconClick',
'update:modelValue',
'input',
'focus',
'blur',
'confirm',
'clear',
'eyes',
'change',
'keyboardheightchange'
],
model: {
prop: 'modelValue',
event: 'update:modelValue'
},
options: {
// #ifdef MP-TOUTIAO
virtualHost: false,
// #endif
// #ifndef MP-TOUTIAO
virtualHost: true
// #endif
},
inject: {
form: {
from: 'uniForm',
default: null
},
formItem: {
from: 'uniFormItem',
default: null
}
},
props: {
name: String,
value: [Number, String],
modelValue: [Number, String],
type: {
type: String,
default: 'text'
},
clearable: {
type: Boolean,
default: true
},
autoHeight: {
type: Boolean,
default: false
},
placeholder: {
type: String,
default: ' '
},
placeholderStyle: String,
focus: {
type: Boolean,
default: false
},
disabled: {
type: Boolean,
default: false
},
maxlength: {
type: [Number, String],
default: 140
},
confirmType: {
type: String,
default: 'done'
},
clearSize: {
type: [Number, String],
default: 24
},
inputBorder: {
type: Boolean,
default: true
},
prefixIcon: {
type: String,
default: ''
},
suffixIcon: {
type: String,
default: ''
},
trim: {
type: [Boolean, String],
default: false
},
cursorSpacing: {
type: Number,
default: 0
},
passwordIcon: {
type: Boolean,
default: true
},
adjustPosition: {
type: Boolean,
default: true
},
primaryColor: {
type: String,
default: '#2979ff'
},
styles: {
type: Object,
default () {
return {
color: '#333',
backgroundColor: '#fff',
disableColor: '#F7F6F6',
borderColor: '#e5e5e5'
};
}
},
errorMessage: {
type: [String, Boolean],
default: ''
},
// #ifdef MP-ALIPAY
enableNative: {
type: Boolean,
default: false
}
// #endif
},
data() {
return {
focused: false,
val: '',
showMsg: '',
border: false,
isFirstBorder: false,
showClearIcon: false,
showPassword: false,
focusShow: false,
localMsg: '',
isEnter: false // 使
};
},
computed: {
//
isVal() {
const val = this.val;
// fixed by mehaotian 00
if (val || val === 0) {
return true;
}
return false;
},
msg() {
// console.log('computed', this.form, this.formItem);
// if (this.form) {
// return this.errorMessage || this.formItem.errMsg;
// }
// TODO formItem errMsg
return this.localMsg || this.errorMessage;
},
// uniappinputmaxlength
inputMaxlength() {
return Number(this.maxlength);
},
// style
boxStyle() {
return `color:${
this.inputBorder && this.msg ? '#e43d33' : this.styles.color
};`;
},
// input
inputContentClass() {
return obj2strClass({
'is-input-border': this.inputBorder,
'is-input-error-border': this.inputBorder && this.msg,
'is-textarea': this.type === 'textarea',
'is-disabled': this.disabled,
'is-focused': this.focusShow
});
},
inputContentStyle() {
const focusColor = this.focusShow ?
this.primaryColor :
this.styles.borderColor;
const borderColor =
this.inputBorder && this.msg ? '#dd524d' : focusColor;
return obj2strStyle({
'border-color': borderColor || '#e5e5e5',
'background-color': this.disabled ?
this.styles.disableColor : this.styles.backgroundColor
});
},
// input
inputStyle() {
const paddingRight =
this.type === 'password' || this.clearable || this.prefixIcon ?
'' :
'10px';
return obj2strStyle({
'padding-right': paddingRight,
'padding-left': this.prefixIcon ? '' : '10px'
});
}
},
watch: {
value(newVal) {
// fix by mehaotian nullinputbug
if (newVal === null) {
this.val = '';
return
}
this.val = newVal;
},
modelValue(newVal) {
if (newVal === null) {
this.val = '';
return
}
this.val = newVal;
},
focus(newVal) {
this.$nextTick(() => {
this.focused = this.focus;
this.focusShow = this.focus;
});
}
},
created() {
this.init();
// TODO vue3 computed inject formItem.errMsg
if (this.form && this.formItem) {
this.$watch('formItem.errMsg', newVal => {
this.localMsg = newVal;
});
}
},
mounted() {
this.$nextTick(() => {
this.focused = this.focus;
this.focusShow = this.focus;
});
},
methods: {
/**
* 初始化变量值
*/
init() {
if (this.value || this.value === 0) {
this.val = this.value;
} else if (
this.modelValue ||
this.modelValue === 0 ||
this.modelValue === ''
) {
this.val = this.modelValue;
} else {
// fix by ht nullinput
this.val = '';
}
},
/**
* 点击图标时触发
* @param {Object} type
*/
onClickIcon(type) {
this.$emit('iconClick', type);
},
/**
* 显示隐藏内容密码框时生效
*/
onEyes() {
this.showPassword = !this.showPassword;
this.$emit('eyes', this.showPassword);
},
/**
* 输入时触发
* @param {Object} event
*/
onInput(event) {
let value = event.detail.value;
//
if (this.trim) {
if (typeof this.trim === 'boolean' && this.trim) {
value = this.trimStr(value);
}
if (typeof this.trim === 'string') {
value = this.trimStr(value, this.trim);
}
}
if (this.errMsg) this.errMsg = '';
this.val = value;
// TODO vue2
this.$emit('input', value);
// TODO  vue3
this.$emit('update:modelValue', value);
},
/**
* 外部调用方法
* 获取焦点时触发
* @param {Object} event
*/
onFocus() {
this.$nextTick(() => {
this.focused = true;
});
this.$emit('focus', null);
},
_Focus(event) {
this.focusShow = true;
this.$emit('focus', event);
},
/**
* 外部调用方法
* 失去焦点时触发
* @param {Object} event
*/
onBlur() {
this.focused = false;
this.$emit('blur', null);
},
_Blur(event) {
let value = event.detail.value;
this.focusShow = false;
this.$emit('blur', event);
// eventstring
if (this.isEnter === false) {
this.$emit('change', this.val);
}
//
if (this.form && this.formItem) {
const { validateTrigger } = this.form;
if (validateTrigger === 'blur') {
this.formItem.onFieldChange();
}
}
},
/**
* 按下键盘的发送键
* @param {Object} e
*/
onConfirm(e) {
this.$emit('confirm', this.val);
this.isEnter = true;
this.$emit('change', this.val);
this.$nextTick(() => {
this.isEnter = false;
});
},
/**
* 清理内容
* @param {Object} event
*/
onClear(event) {
this.val = '';
// TODO vue2
this.$emit('input', '');
// TODO vue2
// TODO  vue3
this.$emit('update:modelValue', '');
//
this.$emit('clear');
},
/**
* 键盘高度发生变化的时候触发此事件
* 兼容性微信小程序2.7.0+App 3.1.0+
* @param {Object} event
*/
onkeyboardheightchange(event) {
this.$emit('keyboardheightchange', event);
},
/**
* 去除空格
*/
trimStr(str, pos = 'both') {
if (pos === 'both') {
return str.trim();
} else if (pos === 'left') {
return str.trimLeft();
} else if (pos === 'right') {
return str.trimRight();
} else if (pos === 'start') {
return str.trimStart();
} else if (pos === 'end') {
return str.trimEnd();
} else if (pos === 'all') {
return str.replace(/\s+/g, '');
} else if (pos === 'none') {
return str;
}
return str;
}
}
};
</script>
<style lang="scss">
$uni-error: #e43d33;
$uni-border-1: #dcdfe6 !default;
.uni-easyinput {
/* #ifndef APP-NVUE */
width: 100%;
/* #endif */
flex: 1;
position: relative;
text-align: left;
color: #333;
font-size: 14px;
}
.uni-easyinput__content {
flex: 1;
/* #ifndef APP-NVUE */
width: 100%;
display: flex;
box-sizing: border-box;
// min-height: 36px;
/* #endif */
flex-direction: row;
align-items: center;
// border
border-color: #fff;
transition-property: border-color;
transition-duration: 0.3s;
}
.uni-easyinput__content-input {
/* #ifndef APP-NVUE */
width: auto;
/* #endif */
position: relative;
overflow: hidden;
flex: 1;
line-height: 1;
font-size: 14px;
height: 35px;
// min-height: 36px;
/*ifdef H5*/
& ::-ms-reveal {
display: none;
}
& ::-ms-clear {
display: none;
}
& ::-o-clear {
display: none;
}
/*endif*/
}
.uni-easyinput__placeholder-class {
color: #999;
font-size: 12px;
// font-weight: 200;
}
.is-textarea {
align-items: flex-start;
}
.is-textarea-icon {
margin-top: 5px;
}
.uni-easyinput__content-textarea {
position: relative;
overflow: hidden;
flex: 1;
line-height: 1.5;
font-size: 14px;
margin: 6px;
margin-left: 0;
height: 80px;
min-height: 80px;
/* #ifndef APP-NVUE */
min-height: 80px;
width: auto;
/* #endif */
}
.input-padding {
padding-left: 10px;
}
.content-clear-icon {
padding: 0 5px;
}
.label-icon {
margin-right: 5px;
margin-top: -1px;
}
//
.is-input-border {
/* #ifndef APP-NVUE */
display: flex;
box-sizing: border-box;
/* #endif */
flex-direction: row;
align-items: center;
border: 1px solid $uni-border-1;
border-radius: 4px;
/* #ifdef MP-ALIPAY */
overflow: hidden;
/* #endif */
}
.uni-error-message {
position: absolute;
bottom: -17px;
left: 0;
line-height: 12px;
color: $uni-error;
font-size: 12px;
text-align: left;
}
.uni-error-msg--boeder {
position: relative;
bottom: 0;
line-height: 22px;
}
.is-input-error-border {
border-color: $uni-error;
.uni-easyinput__placeholder-class {
color: mix(#fff, $uni-error, 50%);
}
}
.uni-easyinput--border {
margin-bottom: 0;
padding: 10px 15px;
// padding-bottom: 0;
border-top: 1px #eee solid;
}
.uni-easyinput-error {
padding-bottom: 0;
}
.is-first-border {
/* #ifndef APP-NVUE */
border: none;
/* #endif */
/* #ifdef APP-NVUE */
border-width: 0;
/* #endif */
}
.is-disabled {
background-color: #f7f6f6;
color: #d5d5d5;
.uni-easyinput__placeholder-class {
color: #d5d5d5;
font-size: 12px;
}
}
</style>

+ 0
- 8
111/unpackage/dist/cache/.vite/deps/_metadata.json View File

@ -1,8 +0,0 @@
{
"hash": "6ffcc05d",
"configHash": "c4424c2b",
"lockfileHash": "e3b0c442",
"browserHash": "4bbf14b9",
"optimized": {},
"chunks": {}
}

BIN
111/unpackage/dist/dev/app-android/static/logo.png View File

Before After
Width: 72  |  Height: 72  |  Size: 3.9 KiB

+ 83
- 0
App.uvue View File

@ -0,0 +1,83 @@
<script lang="uts">
let firstBackTime = 0
export default {
onLaunch: function () {
console.log('App Launch')
},
onShow: function () {
console.log('App Show')
},
onHide: function () {
console.log('App Hide')
},
// #ifdef APP-ANDROID
onLastPageBackPress: function () {
console.log('App LastPageBackPress')
if (firstBackTime == 0) {
uni.showToast({
title: '再按一次退出应用',
position: 'bottom',
})
firstBackTime = Date.now()
setTimeout(() => {
firstBackTime = 0
}, 2000)
} else if (Date.now() - firstBackTime < 2000) {
firstBackTime = Date.now()
uni.exit()
}
},
// #endif
onExit: function () {
console.log('App Exit')
},
}
</script>
<style>
@import "@/static/iconfont.css";
@import "css/header.css";
/*每个页面公共css */
body{
background-color: #ffffff;
}
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
@media only screen and (-webkit-min-device-pixel-ratio:2),(min-device-pixel-ratio:2){
.uni-hairline{
border-width: 0.5px !important;
}
.uni-nbfc {
background-color: transparent !important;
}
}
@media screen and (min-width: 320px) {
html {font-size: 14px;}
}
@media screen and (min-width: 360px) {
html {font-size: 16px;}
}
@media screen and (min-width: 400px) {
html {font-size: 18px;}
}
@media screen and (min-width: 440px) {
html {font-size: 20px;}
}
@media screen and (min-width: 480px) {
html {font-size: 22px;}
}
@media screen and (min-width: 640px) {
html {font-size: 28px;}
}
</style>

+ 60
- 0
css/header.css View File

@ -0,0 +1,60 @@
.container {
display: flex;
flex-direction: column;
height: 100vh;
width: 100%;
background-color: #f5f5f5;
/* position: relative; */
}
/* 头部 */
.header {
height: 15%;
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
padding: 1rem;
background-color: #044f7a;
}
.header_info{
width: 100%;
height: 100%;
display: flex;
flex-direction: row;
align-items: center;
}
.header_info_icons{
display: flex;
align-items: center;
height: 100%;
width: 100%;
margin: 0 0.5rem 0 0.5rem;
}
.header_info_icon{
display: flex;
height: 100%;
width: 10%;
width: 5%;
align-items: center;
justify-content: center;
}
.header_text{
color: #bdd1dc;
font-size: 1rem;
left : 25%;
}
.header_texts{
color: #bdd1dc;
font-size: 1rem;
}
.header_change{
display: flex;
flex-direction: row;
align-items: center;
font-size: 1rem;
color: #bdd1dc;
}

111/index.html → index.html View File


111/main.uts → main.uts View File


+ 43
- 0
manifest.json View File

@ -0,0 +1,43 @@
{
"name" : "111",
"appid" : "__UNI__ABF0653",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"uni-app-x" : {},
/* */
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "wx5b4b75c83b7485b1",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "3",
"app" : {
"distribute" : {
"icons" : {
"android" : {
"hdpi" : "",
"xhdpi" : "",
"xxhdpi" : "",
"xxxhdpi" : ""
}
}
}
}
}

+ 95
- 0
pages.json View File

@ -0,0 +1,95 @@
{
"pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/login",
"style": {
"navigationBarTitleText": "登录",
"navigationStyle":"custom"
}
},
{
"path": "pages/home/home",
"style": {
"navigationBarTitleText": "主页",
"navigationStyle":"custom"
},
"needLogin": true
},
{
"path": "pages/index/wode",
"style": {
"navigationBarTitleText": "我的",
"navigationStyle":"custom"
},
"needLogin": true
},
{
"path": "pages/views/dingDanCreate",
"style": {
"navigationBarTitleText": "录入订单",
"navigationStyle":"custom"
},
"needLogin": true
},
{
"path": "pages/index/dingdan",
"style": {
"navigationBarTitleText": "订单",
"navigationStyle":"custom"
},
"needLogin": true
},
{
"path" : "pages/index/PayPal",
"style" :
{
"navigationBarTitleText" : "",
"navigationStyle":"custom"
},
"needLogin": true
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app x",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {},
"tabBar": {
"color": "#7A7E83",
"selectedColor": "#3cc51f",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"list": [{
"pagePath": "pages/home/home",
"iconPath": "/static/image/11.png",
"selectedIconPath": "/static/image/路径 3909.png",
"text": "首页"
}, {
"pagePath": "pages/index/dingdan",
"iconPath": "/static/image/路径 4016_1.png",
"selectedIconPath": "/static/image/路径 4016.png",
"text": "订单"
},
{
"pagePath": "pages/index/wode",
"iconPath": "/static/image/路径 3917.png",
"selectedIconPath": "/static/image/路径 24.png",
"text": "我的"
}
]
},
"condition" : { //
"current": 0, //(list )
"list": [
{
"name": "", //
"path": "", //
"query": "" //onLoad
}
]
}
}

+ 317
- 0
pages/home/home.uvue View File

@ -0,0 +1,317 @@
<template>
<view class="container">
<!-- 顶部标题 -->
<view class="header">
<view class="header_info">
<text class="header_texts" :title="title">{{title}}</text>
<text class="header_info_icons">|</text>
<view @click="change_text" class="header_change">
<text >切换</text>
<uni-icons type="right" size="30" color="#c2d4de" ></uni-icons>
</view>
</view>
</view>
<view class="swiper">
<image class="swiper-image" src="/static/image/组 71699.png"></image>
</view>
<view class="order_Entry_container" @click="orderEntry">
<image class="order_Entry_image" src="/static/image/组 71699_1@3x.png"></image>
<text style="color: #115881;font-weight: bold;margin-left: 1rem;">录入订单</text>
<uni-icons class="order_Entry_end" type="right" :size="25" color="#306e91"></uni-icons>
</view>
<view v-if="isshow" class="show_container">
<view class="isshow-header">
<uni-icons class=" isshow-header-content-icon" type="search" :size="20"></uni-icons>
<uni-easyinput :inputBorder="false" @input="handleSearch" class=" isshow-header-content-input" v-model="ServiceName" placeholder="请输入服务名称" />
<text class="isshow-header-content-text" @click="searchName">搜索</text>
</view>
<view class="isshow-content" >
<text class="isshow-content-text" v-for="(item, index) in textcontent" :key="index" @click="change_city(item.name)">{{item.name}}</text>
</view>
</view>
<view v-if="isshow_1" class="show_container_1">
<image class="show_container_1_image" src="/static/image/图层_6.png"></image>
<view class="show_container_1_footer">
<text>门店已经切换为{{title}}</text>
<button class="show_container_1_footer_button" @click="close_view">好的</button>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
ServiceName:'',
title:"北京汽车有限公司",
isshow:false,
isshow_1:false,
newListData:[],
allMsg : [
{ name: "myhua", id: 1 },
{ name: "mp3", id: 2 },
{ name: "hello", id: 3 },
{ name: "world", id: 4 },
{ name: "warm weather", id: 5 },
{ name: "m3", id: 6 },
{ name: "hahaha", id: 7 }
],
textcontent: [],
};
},
mounted() {
this.allMsg = [
{ name: "myhua", id: 1 },
{ name: "mp3", id: 2 },
{ name: "hello", id: 3 },
{ name: "world", id: 4 },
{ name: "warm weather", id: 5 },
{ name: "m3", id: 6 },
{ name: "hahaha", id: 7 }
];
this.textcontent = this.allMsg;
},
methods: {
change_text(){
if(this.isshow){
this.isshow=false;
}else{
this.isshow=true;
console.log('111')
}
},
orderEntry(){
console.log('111');
uni.navigateTo(
{ url: '/pages/views/dingDanCreate' }
)
},
// 搜索城市名字
searchName(){
},
change_city(name){
this.title = name;
this.change_text();
this.isshow_1 = true;
},
close_view(){
this.isshow_1 = false;
},
// 模糊匹配
// 右上角搜索框--模糊查询
handleSearch(event) {
console.log(event);
if(event){
let queryStringArr = event.split("");
let str = "(.*?)";
this.textcontent = [];
let regStr = str + queryStringArr.join(str) + str;
let reg = RegExp(regStr, "i"); // 以mh为例生成的正则表达式为/(.*?)m(.*?)h(.*?)/i
this.allMsg.map(item => {
if (reg.test(item.name)) {
this.textcontent.push(item);
}
});
}else {
this.textcontent=[];
this.textcontent = this.allMsg;
}
}
}
};
</script>
<style>
/* 订单录入 */
.order_Entry_container{
width: 90%;
height: 8%;
background-color: #d9e5eb;
border-radius: 0.6rem;
margin-left:5%;
display: flex;
flex-direction: row;
align-items: center;
margin-top: 10%;
}
.order_Entry_image{
width: 10%;
height: 70%;
margin-left: 3%;
}
.order_Entry_end{
margin-left: auto;
margin-right: 7%;
}
/* 轮播图 */
.swiper {
height: 30%;
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
overflow: hidden;
}
.swiper-image {
width: 100%;
height: 100%;
margin: 0 auto;
}
.form {
flex: 1;
padding: 1rem;
}
.submit-button {
width: 100%;
height: 3rem;
background-color: #007aff;
color: #fff;
border: none;
border-radius: 0.3rem;
font-size: 1rem;
}
.footer {
display: flex;
justify-content: space-around;
padding: 0.8rem;
background-color: #fff;
border-top: 1rem solid #ccc;
}
.nav-item {
text-align: center;
}
.nav-item text {
font-size: 0.9rem;
}
.icon-image{
width: 30%;
height: 10rem;
margin: 0 auto;
margin-top: 1rem;
}
/* 遮罩层 */
.show_container{
width: 60%;
height: 36%;
background-color: #ffffff;
position: absolute;
border-radius: 1rem;
/* border: 1rem solid; */
box-shadow: 0rem 0.2rem 0rem #e4e4e4;
left:5%;
top: 13%;
z-index:999;
display: flex;
flex-direction: column;
align-items: center;
}
.isshow-header{
width: 90%;
height: 30%;
display: flex;
justify-content: center;
align-items: center;
flex-direction: row;
color: #3c7697;
}
.isshow-header-content-icon{
width: 10%;
height: 30%;
}
.isshow-header-content-input{
width: 80%;
height: 40%;
margin: 0 1rem 0 1rem;
border:none;
outline:none;
}
.isshow-content{
height: 70%;
display: flex;
flex-direction: column;
align-items: center;
overflow-y:scroll;
}
.isshow-content-text{
color: #414141;
height: 1.5rem;
width: 100%;
line-height: 1.5rem;
margin: 1rem 0 1rem 0;
font-size: 0.8rem;
}
.isshow-content::-webkit-scrollbar {
display: none;
}
/* 提示框*/
.show_container_1{
width: 80%;
height: 50%;
background-color: #ffffff;
position: absolute;
border-radius: 1rem;
/* border: 1rem solid; */
box-shadow: 0rem 0.2rem 0rem #e4e4e4;
left:10%;
top:25%;
z-index:999;
display: flex;
flex-direction: column;
align-items: center;
}
.show_container_1_image{
height: 40%;
width: 60%;
top: 5%;
}
.show_container_1_footer{
height: 50%;
width: 100%;
color:#0b5583;
display: flex;
flex-direction: column;
align-items: center;
font-weight: bold;
font-size: 0.7rem;
}
.show_container_1_footer text{
margin-top: 10%;
}
.show_container_1_footer_button{
background-color: #ffffff;
color:#0b5583;
height: 30%;
border-radius: 1.8rem;
width: 80%;
margin-top: 5%;
border: 0.1rem solid #0c547e;
display: flex;
justify-content: center;
align-items: center;
}
</style>

+ 470
- 0
pages/index/PayPal.uvue View File

@ -0,0 +1,470 @@
<template>
<view class="containers">
<view class="header">
<view class="header_info">
<view class="header_info_icon" @click.native.stop.prevent="toBack" style="display: flex; justify-content: center; align-items: center;">
<uni-icons type="left" size="30" color="#c2d4de" > </uni-icons>
</view>
<text class="header_text">付款信息</text>
</view>
</view>
<view class="section" style="margin-top: 5%;">
<view class="form-item">
<text class="label">产品名称</text>
<l-radio :checked="paymentMethod === '全款'" label="全款" fontSize="1rem" style="transform: scale(0.7);">
<template #icon="{checked}">
<image v-show="checked" style="width:1.2rem; height:1.2rem;" src="/static/image/xuanzhong.png"></image>
<image v-show="!checked" style="width:1.2rem; height:1.2rem" src="/static/image/weixuanzhong.png"></image>
</template>
</l-radio>
</view>
<view class="form-item">
<text class="label">经销商</text>
<l-radio-group v-model="checked" @change="onChange" class="radio-group" >
<l-radio value="Beijing" label="个人" fontSize="1rem" style="margin-right: 1rem; transform: scale(0.7);">
<template #icon="{checked}">
<image v-show="checked" style="width:1.2rem; height:1.2rem;" src="/static/image/xuanzhong.png"></image>
<image v-show="!checked" style="width:1.2rem; height:1.2rem" src="/static/image/weixuanzhong.png"></image>
</template>
</l-radio>
<l-radio value="Shanghai" label="公司" fontSize="1rem" style="transform: scale(0.7);">
<template #icon="{checked}">
<image v-show="checked" style="width:1.2rem; height:1.2rem;" src="/static/image/xuanzhong.png"></image>
<image v-show="!checked" style="width:1.2rem; height:1.2rem" src="/static/image/weixuanzhong.png"></image>
</template>
</l-radio>
</l-radio-group>
</view>
</view>
<view class="idCard-box">
<view class="reverse">
<image :src="upLoadPositiveImg == ''?positiveImg:upLoadPositiveImg" @tap.prevent="uploadPositive">
</image>
</view>
<view class="reverse">
<image :src="upLoadReverseImg == ''?reverseImg:upLoadReverseImg" @tap.prevent="uploadReverse">
</image>
</view>
<view class="reverse">
<image :src="upLoadCarImg == ''?carImg:upLoadCarImg" @tap.prevent="uploadReverse">
</image>
</view>
</view>
<!-- 客户基本信息 -->
<view class="section">
<view class="con_size">
<image src="/static/image/矩形 5315.png" class='con_size_img' ></image>
客户基本信息
</view>
<view class="form-item">
<text class="label">产品名称</text>
<text class="value">{{ selectedProduct }}</text>
</view>
<view class="form-item">
<text class="label">经销商</text>
<text class="value">{{ selectedStore }}</text>
</view>
<view class="form-item">
<text class="label">客户姓名</text>
<input class="input" v-model="clientInfo.name" placeholder="请输入客户姓名" />
</view>
<view class="form-item">
<text class="label">居住地址</text>
<input class="input" v-model="clientInfo.address" placeholder="请输入居住地址" />
</view>
<view class="form-item">
<text class="label">身份证号码</text>
<input class="input" v-model="clientInfo.idNumber" placeholder="请输入身份证号码" />
</view>
<view class="form-item">
<text class="label">联系方式</text>
<input class="input" v-model="clientInfo.contact" placeholder="请输入联系方式" />
</view>
<view class="form-item">
<text class="label">销售部门</text>
<l-radio-group class="radio-group" @change="handleDepartmentChange">
<label class="radio-label" v-for="item in departments" :key="item">
<l-radio :value="item" :checked="clientInfo.department === item" >
<template #icon="{checked}">
<image v-show="checked" style="width:1.2rem; height:1.2rem;" src="/static/image/xuanzhong.png"></image>
<image v-show="!checked" style="width:1.2rem; height:1.2rem" src="/static/image/weixuanzhong.png"></image>
</template>
</l-radio>
<text style="margin-left:0.2rem;">{{ item }}</text>
</label>
</l-radio-group>
</view>
<view class="form-item">
<text class="label">促销销售顾问</text>
<input class="input" v-model="clientInfo.salesAdvisor" placeholder="请输入店铺销售顾问" />
</view>
</view>
<!-- 车辆信息 -->
<view class="section">
<view class="con_size">
<image src="/static/image/矩形 5315.png" class='con_size_img' ></image>车辆信息</view>
<view class="form-item">
<text class="label">车牌车系</text>
<picker class="picker" @change="bindCarBrandChange" :value="carBrandIndex" :range="carBrands">
<view class="picker-text">{{ carBrands[carBrandIndex] || '请选择车辆品牌 >' }}</view>
</picker>
</view>
<view class="form-item">
<text class="label">车牌号</text>
<input class="input" v-model="vehicleInfo.plateNumber" placeholder="456123351" />
</view>
</view>
<!-- 产品描述 -->
<view class="section">
<view class="con_size">
<image src="/static/image/矩形 5315.png" class='con_size_img' ></image>产品描述</view>
<view class="form-item">
<text class="label">产品名称</text>
<text class="value">{{ selectedService }}</text>
</view>
<view class="form-item">
<text class="label">服务年龄</text>
<picker class="picker" @change="bindServiceAgeChange" :value="serviceAgeIndex" :range="serviceAges">
<view class="picker-text">{{ serviceAges[serviceAgeIndex] || '请选择服务年龄 >' }}</view>
</picker>
</view>
<view class="form-item">
<text class="label">销售金额</text>
<input class="input" v-model="productInfo.salesAmount" placeholder="请输入销售金额" />
</view>
</view>
<!-- 付款信息 -->
<view class="section">
<view class="con_size">
<image src="/static/image/矩形 5315.png" class='con_size_img' ></image>付款信息</view>
<view class="form-item">
<text class="label">收款方</text>
<picker class="picker" @change="bindPayeeChange" :value="payeeIndex" :range="payees">
<view class="picker-text">{{ payees[payeeIndex] || '请选择收款方 >' }}</view>
</picker>
</view>
<view class="form-item">
<text class="label">付款时间</text>
<uni-datetime-picker class="timePiker" type="datetime" v-model="paymentInfo.paymentTime" :clear-icon="false" :border="false">
</uni-datetime-picker>
</view>
<view class="con_size">
<text class="label">上传凭证</text>
<wht-img-upload v-model="imageList" />
</view>
</view>
<view class="section">
<view class="form-button">
<button class=" button" @click="get_to" style="width: 60%;">提交去录单</button>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
selectedProduct: "自动填写所选商品服务分类",
selectedStore: "自动填写所选择的门店",
selectedService: "自动填写所选择的服务分类",
paymentMethod: '全款', // 默认选中全款
customerType: '个人' , // 默认选中个人
clientInfo: {
name: '',
address: '',
idNumber: '',
contact: '',
department: '',
salesAdvisor: ''
},
imageList:[],
vehicleInfo: {
plateNumber: '456123351'
},
productInfo: {
salesAmount: ''
},
paymentInfo: {
paymentTime: ''
},
departments: ['售前', '售后', '二网车'],
carBrands: ['品牌A', '品牌B', '品牌C'],
carBrandIndex: -1,
serviceAges: ['1年', '2年', '3年'],
serviceAgeIndex: -1,
payees: ['收款方A', '收款方B', '收款方C'],
payeeIndex: -1,
// 扫描
positiveImg: '/static/image/组件 4 – 1.png',//自己图片路径
upLoadPositiveImg: '',
// 反面身份证
reverseImg: '/static/image/组 71663.png', //自己图片路径
upLoadReverseImg: '',
// 行车驾驶证
carImg: '/static/image/组件 2 – 1.png', //自己图片路径
upLoadCarImg: '',
baidu_token:' '//百度token
}
},
methods: {
get_to(){
console.log(111);
},
toBack(){
let canNavBack = getCurrentPages()
if( canNavBack && canNavBack.length>1) {
uni.navigateBack()
} else {
history.back();
}
},
handleDepartmentChange(e) {
this.clientInfo.department = e.detail.value
},
bindCarBrandChange(e) {
this.carBrandIndex = e.detail.value
},
bindServiceAgeChange(e) {
this.serviceAgeIndex = e.detail.value
},
bindPayeeChange(e) {
this.payeeIndex = e.detail.value
},
// file文件转base64
getImageBase64(blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = () => {
const base64 = reader.result;
resolve(base64);
}
reader.onerror = error => reject(error);
});
},
// 身份证正面上传
uploadPositive() {
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success: (res) => {
this.upLoadPositiveImg = res.tempFilePaths[0]
this.getImageBase64(res.tempFiles[0]).then(res => {
this.uploadIdentify(res)
})
}
})
},
// 身份证反面上传
uploadReverse() {
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success: (res) => {
this.upLoadReverseImg = res.tempFilePaths[0]
this.getImageBase64(res.tempFiles[0]).then(res => {
this.uploadIdentify(res)
})
}
})
},
// 获取百度token
getACSS_TOKEN() {
let that = this
uni.request({
// url: '/baiduApi/oauth/2.0/token',
url: 'https://aip.baidubce.com/oauth/2.0/token',
method: 'POST',
data: {
grant_type: 'client_credentials',
client_id: '你的',
client_secret: '你的',
},
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success: res => {
this.baidu_token = res.data.access_token
}
});
},
// 上传识别
uploadIdentify(res) {
uni.request({
url: '/baiduApi/rest/2.0/ocr/v1/idcard?access_token=' + this.baidu_token,
method: 'POST',
data: {
image: res,
id_card_side: 'back' // 身份证 正反面 front:身份证含照片的一面 back:身份证带国徽的一面
},
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
success: res => {
console.log(res.data)
}
})
},
}
}
</script>
<style scoped lang="scss">
.containers {
height: 100%;
width: 100%;
background-color: #fff;
overflow-y:scroll;
}
.container::-webkit-scrollbar {
display: none;
}
.section {
// margin-bottom: 30rpx;
border-bottom: 1rpx solid #eee;
margin: 0 1rem 0 1rem;
}
.form-item {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 0.5rem 0;
border-bottom: 0.1rem solid #f2f2f2;
color: #767676;
}
.label {
font-size: 28rpx;
color: #666;
width: 200rpx;
}
.input {
flex: 1;
text-align: right;
font-size: 28rpx;
color: #737373;
}
.picker {
flex: 1;
}
.picker-text {
text-align: right;
color: #737373;
font-size: 0.8rem;
}
.radio-group {
display: flex;
flex: 1;
justify-content: flex-end;
flex-direction: row;
}
.radio-label {
padding: 0;
margin-left: 10rpx;
display: flex;
flex-direction: row;
font-size: 1rem;
transform: scale(0.7);
}
.value {
flex: 1;
text-align: right;
color: #737373;
}
.timePiker{
display: flex;
justify-content: center;
/* align-items: center; */
color: #3f3f3f;
}
.idCard-box {
margin-top: 10%;
width: 100%;
height: 50%;
display: flex;
flex-direction: row;
/* background-color: red; */
flex-wrap: wrap;
.reverse {
height: 30%;
width: 40%;
display: flex;
align-items: center;
justify-content: center;
// background-color: blue;
margin: 0 5% 0 5%;
image {
width: 100%;
height: 100%;
}
}
}
/* 表单分区样式 */
.con_size {
font-size: 1rem;
font-weight: bold;
margin: 1rem 0;
color: #000000;
display: flex;
flex-direction: row;
}
.con_size_img{
height: 100%;
width: 2%;
margin-right: 2%;
}
.form-button{
width: 100%;
height:100%;
// background-color: #000000;
display: flex;
align-items: center;
justify-content: center;
}
.button{
height: 100%;
width: 100%;
background-color: #044f7a;
color: #ffffff;
border-radius: 1rem;
}
</style>

+ 213
- 0
pages/index/dingdan.uvue View File

@ -0,0 +1,213 @@
<template>
<view class="container">
<!-- 搜索栏 -->
<view class="search-box">
<input
v-model="searchKey"
placeholder="请输入客户姓名/客户手机号"
class="search-input"
/>
<button @tap="handleSearch" class="search-btn">搜索</button>
</view>
<!-- 订单状态筛选 -->
<view class="filter-tabs">
<text
v-for="tab in tabs"
:key="tab"
:class="['tab-item', activeTab === tab ? 'active' : '']"
@tap="activeTab = tab"
>
{{ tab }}
</text>
</view>
<!-- 订单列表 -->
<scroll-view scroll-y class="order-list">
<view
v-for="(order, index) in filteredOrders"
:key="index"
class="order-item"
>
<view class="order-header">
<text class="order-no">{{ order.orderNo }}</text>
<text class="copy-btn" @tap="copyOrderNo(order.orderNo)">复制</text>
</view>
<view class="order-info">
<text>客户姓名:{{ order.customerName }}</text>
<text>联系方式:{{ order.phone }}</text>
<text>服务名称:{{ order.serviceName }}</text>
<text>订单时间:{{ order.orderTime }}</text>
<text>销售人员:{{ order.salesman }}</text>
<text>门店名称:{{ order.store }}</text>
</view>
<button class="download-btn" @tap="downloadPDF(order)">PDF下载</button>
</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
searchKey: '', // 搜索关键词
activeTab: '全部', // 当前激活的标签
tabs: ['全部', '已生效', '已失效'],
orders: [/* 从接口获取的数据 */]
}
},
computed: {
// 过滤后的订单列表
filteredOrders() {
return this.orders.filter(order => {
const matchStatus = this.activeTab === '全部' ||
order.status === this.activeTab
const matchSearch = order.customerName.includes(this.searchKey) ||
order.phone.includes(this.searchKey)
return matchStatus && matchSearch
})
}
},
methods: {
// 搜索处理
handleSearch() {
// 实际调用接口获取数据
console.log('搜索关键词:', this.searchKey)
},
// 复制订单号
copyOrderNo(orderNo) {
uni.setClipboardData({
data: orderNo,
success: () => {
uni.showToast({ title: '复制成功' })
}
})
},
// PDF下载
async downloadPDF(order) {
uni.showLoading({ title: '下载中...' })
try {
// 1. 调用下载接口
const { tempFilePath } = await uni.downloadFile({
url: 'https://your-api.com/download',
header: { 'order-id': order.id }
})
// 2. 保存到本地
await uni.saveFile({
tempFilePath,
success: (res) => {
uni.showToast({ title: '下载成功' })
console.log('文件路径:', res.savedFilePath)
}
})
// 3. 打开文档(可选)
uni.openDocument({
filePath: tempFilePath,
showMenu: true
})
} catch (err) {
uni.showToast({ title: '下载失败', icon: 'none' })
} finally {
uni.hideLoading()
}
}
}
}
</script>
<style lang="scss" scoped>
.container {
padding: 20rpx;
background-color: #f5f5f5;
}
.search-box {
display: flex;
margin-bottom: 30rpx;
.search-input {
flex: 1;
background: #fff;
padding: 20rpx;
border-radius: 8rpx;
}
.search-btn {
width: 140rpx;
margin-left: 20rpx;
background: #007AFF;
color: white;
}
}
.filter-tabs {
display: flex;
margin-bottom: 30rpx;
.tab-item {
flex: 1;
text-align: center;
padding: 20rpx;
color: #666;
border-bottom: 4rpx solid transparent;
&.active {
color: #007AFF;
border-bottom-color: #007AFF;
}
}
}
.order-list {
width: 100%;
height: 40%;
height: calc(100vh - 300rpx);
}
.order-item {
background: white;
border-radius: 12rpx;
margin-bottom: 20rpx;
padding: 20rpx;
.order-header {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 20rpx;
border-bottom: 1rpx solid #eee;
.order-no {
color: #333;
font-size: 28rpx;
}
.copy-btn {
color: #007AFF;
font-size: 24rpx;
}
}
.order-info {
padding: 20rpx 0;
text {
display: block;
color: #666;
font-size: 24rpx;
line-height: 1.8;
}
}
.download-btn {
width: 100%;
height: 100%;
background-color: red;
color: #333;
font-size: 26rpx;
margin-top: 20rpx;
}
}
</style>

111/pages/index/index.uvue → pages/index/index.uvue View File


+ 297
- 0
pages/index/login.uvue View File

@ -0,0 +1,297 @@
<template>
<view class="login-container">
<!-- 顶部欢迎语 -->
<view class="login_image">
<image class="login_image_img" src="/static/image/组件 3 – 1.png" ></image>
</view>
<view class="welcome">
<text class="welcome-text">欢迎登陆车辆合同生成</text>
</view>
<!-- 账号输入框 -->
<view class="input-container">
<uni-easyinput prefixIcon="person" class="input" placeholder="请输入您的账号" v-model="username" :inputBorder='false' :clearable='false' >
</uni-easyinput>
<view class="underline"></view>
</view>
<!-- 密码输入框 -->
<view class="input-container">
<uni-easyinput prefixIcon="locked" class="input" type="password" placeholder="请输入您的密码" v-model="password" :inputBorder='false' :passwordIcon="false" :clearable='false'></uni-easyinput>
<view class="underline"></view>
</view>
<!-- 协议提示 -->
<view class="agreement">
<radio class = "login-agree" value="r1" :checked="checked" @click="changeCK">登录即代表同意
</radio>
<text class="link" @click="showModal">《用户协议》</text>
<text class="login-agree">与</text>
<text class="link" @click="showModal">《隐私政策》</text>
</view>
<view class = 'button_container'>
<!-- 登录按钮 -->
<button class="login-button" @click="handleLogin">登陆</button>
</view>
<mosowe-confirm-popup
v-model="popupNoCancelShow"
title="服务协议和隐私政策"
confirmText
cancelText
>
没有取消弹框
<template v-slot:footer>
<view class="mini_container">
<button class="mini-btn" type="primary" size="mini" @click="closeModal">取消</button>
<button class="mini-btn" type="primary" size="mini" @click="getConfirm">确认</button>
</view>
</template>
</mosowe-confirm-popup>
</view>
</template>
<script>
export default {
data() {
return {
username: '', // 账号
password: '', // 密码
isModalVisible: false, // 控制弹窗显示
modalTitle: '', // 弹窗标题
modalContent: '' ,// 弹窗内容
popupNoCancelShow: false,
checked:false,
};
},
onLoad() {
uni.request(
{
url: 'https://gpt.aiym.run/contract/miniapp/product/categories' ,
method:'GET',
header:{
"Content-Type": "application/json",
"X-Access-Token":'11'
},
success:(res)=>{
console.log(res.data)
}
}
);
},
methods: {
// 处理登录逻辑
handleLogin() {
if (!this.username || !this.password) {
uni.showToast({ title: '请输入账号和密码', icon: 'none' });
return;
}else{
console.log(this.checked);
if(this.checked){
uni.showToast({ title: '登录成功', icon: 'success' });
uni.switchTab({ url: '/pages/home/home' });
}else{
uni.showToast({ title: '请勾选服务协议', icon: 'none' });
}
}
},
// 显示弹窗
showModal() {
this.popupNoCancelShow = true ;
},
// 关闭弹窗
closeModal() {
this.popupNoCancelShow = false ;
},
change(e) {
console.log('当前模式:' + e.type + ',状态:' + e.show);
},
changeCK(){
if(this.checked){
this.checked = false;
}else{
this.checked = true;
}
},
// 处理选中事件
getConfirm(){
console.log("111");
if(this.checked){
this.checked = this.checked;
}else{
this.checked = true;
}
this.popupNoCancelShow = false;
}
}
};
</script>
<style>
/* 页面容器 */
.login-container {
display: flex;
flex-direction: column;
align-items: center;
background-color: #ffffff;
height: 100vh;
width: 100%;
}
.button-text {
color: #fff;
font-size: 12rem;
}
/* 登录图片 */
.login_image{
width: 100%;
height: 40%;
}
.login_image_img{
width: 100%;
height: 100%;
}
/* 欢迎语 */
.welcome {
height: 15%;
margin-bottom: 10%;
display: flex;
justify-content: end;
align-items: center;
}
.welcome-text {
font-size: 1.3rem;
font-weight: bold;
color: #044f7a;
}
/* 输入框容器 */
.input-container {
width: 70%;
height: 7%;
/* background-color: #007aff; */
display: flex;
flex-direction: column;
align-items: center;
}
/* 输入框样式 */
.input {
width: 100%;
height: 99%;
font-size: 1rem;
border: none;
outline: none;
background-color: transparent;
/* z-index: 99; */
}
/* 下划线样式 */
.underline {
width: 100%;
height: 0.1%;
background-color: #f2f2f2;
}
/* 协议提示 */
.agreement {
font-size: 1rem;
color: #666;
margin-bottom: 1.2rem;
width: 90%;
left:10%;
display: flex;
flex-direction: row;
align-items: center;
}
.login-agree{
font-size: 0.6rem;
transform: scale(0.9);
}
.link {
color: #007aff;
text-decoration: underline;
font-size: 0.6rem;
}
.button_container{
width: 100%;
height: 40%;
display: flex;
align-items: center;
}
/* 登录按钮 */
.login-button {
width: 70%;
height: 10%;
line-height: 10%;
background-color: #044f7a;
color: #fff;
border: none;
border-radius: 4rem;
font-size: 1rem;
position: absolute;
top:15%;
left:15%;
display: flex;
justify-content: center;
align-items: center;
}
/* 弹窗样式 */
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
}
.modal-content {
width: 80%;
background-color: #fff;
border-radius: 0.5rem;
padding: 1.5rem;
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
font-size: 1rem;
font-weight: bold;
margin-bottom: 1rem;
}
.close {
font-size: 1.5rem;
cursor: pointer;
}
.modal-body {
font-size: 1rem;
line-height: 1.5;
}
.mini_container{
display: flex;
flex-direction: row;
align-items: center;
}
/* 按钮 */
.mini-btn{
width: 30%;
margin-left: 15%;
}
</style>

+ 124
- 0
pages/index/wode.uvue View File

@ -0,0 +1,124 @@
<template>
<view class="container">
<!-- 用户信息 -->
<view class="user-info">
<text class="username">李晓春</text>
</view>
<!-- 功能列表 -->
<view class="menu">
<view class="menu-item" >
<image class="arrow" src="/static/arrow-right.png"></image>
<text>关于我们</text>
</view>
<view class="menu-item" >
<image class="arrow" src="/static/arrow-right.png"></image>
<text>修改密码</text>
</view>
<view class="menu-item">
<image class="arrow" src="/static/arrow-right.png"></image>
<text>服务协议</text>
</view>
<view class="menu-item" >
<image class="arrow" src="/static/arrow-right.png"></image>
<text>隐私政策</text>
</view>
<view class="menu-item" @click="logout">
<image class="arrow" src="/static/arrow-right.png"></image>
<text>退出登录</text>
</view>
</view>
</view>
</template>
<script>
export default {
methods: {
logout() {
uni.showModal({
title: '提示',
content: '确定要退出登录吗?',
success: (res) => {
if (res.confirm) {
uni.showToast({
title: '退出登录成功',
icon: 'success',
success: () => {
// 这里可以添加退出登录的逻辑,例如清除用户登录状态
setTimeout(() => {
uni.navigateTo({ url: '/pages/index/index' });
}, 1500);
}
});
}
}
});
}
}
};
</script>
<style>
.container {
display: flex;
flex-direction: column;
height: 300vh;
background-color: #f5f5f5;
}
.user-info {
padding: 20px;
height: 200px;
background-color: #007aff;
color: #fff;
text-align: center;
}
.username {
font-size: 20px;
font-weight: bold;
margin: 0 auto;
line-height: 200px;
}
.menu {
flex: 1;
padding: 20px;
background-color: #fff;
}
.menu-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px 0;
border-bottom: 1px solid #eee;
}
.menu-item text {
font-size: 16px;
}
.arrow {
width: 20px;
height: 20px;
}
.footer {
display: flex;
justify-content: space-around;
padding: 10px;
background-color: #fff;
border-top: 1px solid #ccc;
}
.nav-item {
text-align: center;
}
.nav-item text {
font-size: 14px;
}
</style>

+ 258
- 0
pages/views/dingDanCreate.uvue View File

@ -0,0 +1,258 @@
<template>
<view class="container">
<!-- 顶部标题 -->
<view class="header">
<view class="header_info" >
<view class="header_info_icon" @click.native.stop.prevent="toBack" style="display: flex; justify-content: center; align-items: center;">
<uni-icons type="left" size="30" color="#c2d4de" > </uni-icons>
</view>
<text class="header_text">录入订单</text>
</view>
</view>
<view class="content_container">
<view class="isshow-header">
<uni-icons class=" isshow-header-content-icon" type="search" :size="20"></uni-icons>
<uni-easyinput :inputBorder="false" class=" isshow-header-content-input" v-model="ServiceName" placeholder="请输入服务名称" :focus="firstFocus" />
<text class="isshow-header-content-text" @click="searchName">搜索</text>
</view>
</view>
<!-- 二级分类 -->
<view class="content_footer">
<!-- 分类 -->
<scroll-view show-scrollbar="false" class="content_footer_left">
<view v-for="(item,index) in product" :class="['content_footer_left_product', FirstIndex === item.id?'click_color':'']" @click="FirstLevelChange(item.id)">{{item.name}}</view>
</scroll-view>
<scroll-view show-scrollbar="false" class="content_footer_right">
<view v-for="(item,index) in product_2" class="content_footer_right_content">
<text class="text" :class="['content_footer_right_content_text', item.name === name?'select_color':'']">{{item.name}}</text>
<radio class="content_footer_right_content_radio" value="item.id" :checked="item.name == name" activeBackgroundColor="#04517b" @click="selctRadio(item.name)"></radio>
</view>
</scroll-view>
</view>
<!-- 下一步 -->
<view class="buttun" @click="toNext">下一步</view>
</view>
</template>
<script>
export default {
data() {
return {
firstFocus:true,
ServiceName:'',
product:[
{
id: 1,
name: '数码',
children: [
{
id: 12,
name: '耳机',
children: [
{ id: 121, name: '漫步者' },
{ id: 122, name: '倍思' }
]
},
{
id: 13,
name: '电脑',
children: [
{ id: 131, name: '联想' },
{ id: 132, name: '小米' },
{ id: 133, name: '戴尔' }
]
}
]
},
{
id: 2,
name: '家用电器',
// 类似数码的子结构
children:[
{
id: 11,
name: '手机',
children: [
{ id: 111, name: 'iphone' },
{ id: 112, name: 'vivo' },
{ id: 113, name: 'oppo' }
]
}
]
}
],
product_2:[],
FirstIndex:0,
name:''
}
},
onLoad() {
uni.request(
{
url: 'https://gpt.aiym.run/contract/miniapp/product/categories' ,
method:'GET',
header:{
"Content-Type": "application/json",
"X-Access-Token":'11'
},
success:(res)=>{
console.log(res.data.result)
}
}
);
},
methods: {
toBack(){
let canNavBack = getCurrentPages()
if( canNavBack && canNavBack.length>1) {
uni.navigateBack()
} else {
history.back();
}
},
toNext(){
console.log(111);
uni.navigateTo(
{ url: '/pages/index/PayPal' }
)
},
nameClick (){
},
FirstLevelChange(id){
this.FirstIndex = id;
this.product_2 = this.product[id-1].children;
},
selctRadio(name){
console.log(name);
this.name = name;
}
},
searchName(){
console.log('1');
}
}
</script>
<style>
/* 搜索框 */
.content_container{
width: 100%;
height: 10%;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center
}
.content_footer{
width: 100%;
height: 75%;
display: flex;
flex-direction: row;
}
/* 搜索框 */
/* 遮罩层 */
.isshow-header{
width: 90%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
flex-direction: row;
color: #3c7697;
}
.isshow-header-content-icon{
width: 10%;
height: 30%;
}
.isshow-header-content-input{
width: 80%;
height: 40%;
margin: 0 1rem 0 1rem;
border:none;
outline:none;
}
.isshow-content{
height: 70%;
display: flex;
flex-direction: column;
align-items: center;
overflow-y:scroll;
}
.isshow-content-text{
color: #414141;
height: 1.5rem;
width: 100%;
line-height: 1,5rem;
margin: 1rem 0 1rem 0;
font-size: 1.5rem;
}
.isshow-content::-webkit-scrollbar {
display: none;
}
/* 二级分类 */
.content_footer_left{
width: 20%;
}
.content_footer_left_product{
width: 100%;
height: 10%;
display: flex;
justify-content: center;
align-items: center;
font-size: 1rem;
color: #7f7f7f;
}
.content_footer_right{
width: 80%;
display: flex;
flex-direction: column;
align-items: center;
}
.content_footer_right_content{
width: 100%;
height: 10%;
display: flex;
flex-direction: row;
/* background-color: red; */
align-items: center;
}
.content_footer_right_content_text{
margin-right: auto;
color:#242424;
margin-left: 5%;
font-size: 1rem;
}
.content_footer_right_content_radio{
margin-left: auto;
margin-right: 5%;
}
/* 点击颜色 */
.click_color{
background-color: #044f7a;
color: #f0fcf2;
}
.select_color{
color: #316b8b;
}
/* 按钮 */
.buttun{
width: 30%;
height: 5%;
position: absolute;
display: flex;
justify-content: center;
align-items: center;
font-size: 1.3rem;
border-radius: 1.5rem;
background-color: #05507c;
bottom:5%;
right: 5%;
color: #fafcff;
z-index: 99999;
}
</style>

111/static/iconfont.css → static/iconfont.css View File


111/static/iconfont.ttf → static/iconfont.ttf View File


BIN
static/image/11.png View File

Before After
Width: 34  |  Height: 31  |  Size: 846 B

BIN
static/image/22.png View File

Before After
Width: 448  |  Height: 138  |  Size: 6.9 KiB

BIN
static/image/weixuanzhong.png View File

Before After
Width: 92  |  Height: 86  |  Size: 4.3 KiB

BIN
static/image/xuanzhong.png View File

Before After
Width: 87  |  Height: 87  |  Size: 6.4 KiB

111/static/image/图像 4.png → static/image/图像 4.png View File


111/static/image/图层_6.png → static/image/图层_6.png View File


111/static/image/矩形 4533.png → static/image/矩形 4533.png View File


111/static/image/矩形 4533@2x.png → static/image/矩形 4533@2x.png View File


111/static/image/矩形 4533@3x.png → static/image/矩形 4533@3x.png View File


111/static/image/矩形 5315.png → static/image/矩形 5315.png View File


111/static/image/组 70865.png → static/image/组 70865.png View File


111/static/image/组 71663.png → static/image/组 71663.png View File


111/static/image/组 71666.png → static/image/组 71666.png View File


111/static/image/组 71666@2x.png → static/image/组 71666@2x.png View File


111/static/image/组 71666@3x.png → static/image/组 71666@3x.png View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save