我的页面,首页来款项目

This commit is contained in:
姚亚男
2021-10-12 18:17:26 +08:00
parent 32e229fec3
commit 491caf06a3
41 changed files with 756 additions and 412 deletions
+8
View File
@@ -838,4 +838,12 @@ color: #2A2A2A;
}
.form-item .count{
background-color: #aaa;
}
.no-data{
width: 100%;
height:200px;
display: flex;
justify-content: center;
align-items: center;
color: #999;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

+2
View File
@@ -3,6 +3,7 @@ import http from './http.js'
// let baseUrl = 'https://share.hzwlsoft.com'
// let baseUrl = 'http://localhost:8080'
let baseUrl = 'http://10.0.1.9:8080'
let URL_CONFIG = '/jero-boot/'
// let baseUrl = 'http://192.168.1.110:8080'
/* 配置路径 */
@@ -14,6 +15,7 @@ let apiUrl = {
export default {
baseUrl,
URL_CONFIG,
//微信账号密码登陆--1
wxLoginByUserName(option, success, error) {
http.post1(baseUrl + apiUrl.wxLoginByUserName, option).then(res => {
+11 -8
View File
@@ -21,27 +21,30 @@ const UserApi = {
// 短信登录
codeLogin: (params) => http.post(`${URL_CONFIG}company/smsLogin`, params),
// 设置密码
setPassword: (params) => http.post(`${URL_CONFIG}company/changePassword`, params),
setPassword: (params) => http.post(`${URL_CONFIG}company/changePasswordWithToken`, params),
// 修改密码
updatePassword: (params) => http.post(`${URL_CONFIG}company/changePassword`, params),
// 扫码签到
scanCode: (params) => http.post(`${URL_CONFIG}company/changePassword`, params),
// 退出
logout: (params) => http.post(`${URL_CONFIG}sys/logout`, params),
// 短信验证码修改密码
updatePassword: (params) => http.post(`${URL_CONFIG}company/verificationChangePassword`, params),
// 个人信息
mineInfo: (params) => http.get(`${URL_CONFIG}company/payContactsManagement/queryByIdMeeting`, params),
// 编辑个人信息提交
editMineInfo: (params) => http.post(`${URL_CONFIG}company/payContactsManagement/companyEdit`, params),
// 我的资料
dataList: (params) => http.get(`${URL_CONFIG}project/payWorkingGroupDistributionRecord/listForFile`, params),
// 我的合同
contractList: (params) => http.get(`${URL_CONFIG}contract/payIncomeContract/queryCompanyPageList`, params),
// 合同详情
contractDetail: (params) => http.get(`${URL_CONFIG}contract/payIncomeContract/queryCompanyById`, params),
// 预览文件
previewFile: (params) => http.get(`${URL_CONFIG}sys/common/download/${params.fileId}`),
// 首页接口
// 来款项目分页
projectList: (params) => http.get(`${URL_CONFIG}project/payCommonProject/queryCompanyPageList`, params),
// 来款项目详情
projectDetail: (params) => http.get(`${URL_CONFIG}project/payCommonProject/queryCompanyById`, params),
// 会议活动分页
meetingList: (params) => http.get(`${URL_CONFIG}meeting/payMeeting/pageContract`, params),
// 会议活动详情
meetingDetail: (params) => http.get(`${URL_CONFIG}meeting/payMeeting/queryById`, params),
}
export default UserApi
+1 -1
View File
@@ -44,7 +44,7 @@ export function previewFile(fileId,fileName) {
}
// 截取文件类型的方法
function sliceFileTypeByFileName(fileName){
export function sliceFileTypeByFileName(fileName){
// 获取 . 的索引
let index = fileName.lastIndexOf('.')
// 截取文件类型
+60 -9
View File
@@ -10,7 +10,31 @@ for (let i = 1; i <= 12; i++) {
months.push(i)
}
Page({
Component({
/**
* 组件的属性列表
*/
properties: {
// 是否弹出显示
visible: {
type: Boolean,
value: false
},
//点击外部的遮罩层是否允许关闭
outClickCanClose: {
type: Boolean,
value: false
},
// 模式,年或者月,默认只有年
mode: {
type: String,
value: 'year'
}
},
/**
* 组件的初始数据
*/
data: {
years: years,
year: date.getFullYear(),
@@ -18,12 +42,39 @@ Page({
month: 2,
value: [9999, 1, 1],
},
bindChange: function (e) {
const val = e.detail.value
this.setData({
year: this.data.years[val[0]],
month: this.data.months[val[1]],
})
console.log(this.data)
/**
* 组件的方法列表
*/
methods: {
closePopup() {
this.triggerEvent("close", {
visible: this.data.visible
})
},
outClick(){
if (this.data.outClickCanClose){
this.triggerEvent("close", {
visible: this.data.visible
})
}
},
// 日期改变
bindChange: function (e) {
const val = e.detail.value
this.setData({
year: this.data.years[val[0]],
month: this.data.months[val[1]],
})
},
ok(e){
let value = ''
if(this.properties.mode === 'month'){
value = this.data.year + '-' + this.data.month
}else {
value = this.data.year
}
this.triggerEvent("ok", value)
}
}
})
})
+2 -2
View File
@@ -1,12 +1,12 @@
<view class="i-modal-mask {{ visible ? 'i-modal-mask-show' : '' }}" catchtap='outClick'>
<view class="box">
<view class="title">{{year}}年{{month}}月</view>
<picker-view indicator-style="height: 50px;" style="width: 100%; height: 300px;" value="{{value}}"
<picker-view indicator-style="height: 50px;" style="width: 100%; height: 300px;" value="{{value}}" bindtap="ok"
bindchange="bindChange">
<picker-view-column>
<view wx:for="{{years}}" class="item">{{item}}年</view>
</picker-view-column>
<picker-view-column>
<picker-view-column wx:if="{{mode === 'month'}}">
<view wx:for="{{months}}" class="item">{{item}}月</view>
</picker-view-column>
</picker-view>
+26 -1
View File
@@ -1,5 +1,30 @@
.box{
height: 300px;
width: 85%;
height: 360px;
background-color: #fff;
}
.i-modal-mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.7);
z-index: 1000;
transition: all 0.2s ease-in-out;
opacity: 0;
visibility: hidden;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.i-modal-mask-show {
opacity: 1;
visibility: visible;
}
.title{
width: 100%;
-26
View File
@@ -1,26 +0,0 @@
<view>
<view class="title">基本信息</view>
<view class="basic-info">
<view>
<text>合同编号</text>
<text>arff4ds8a3s6651</text>
</view>
<view>
<text>合同名称</text>
<text>找找</text>
</view>
<view>
<text>负责人</text>
<text>张三</text>
</view>
<view>
<text>合同金额</text>
<text>500元</text>
</view>
</view>
<view class="title">邮寄信息</view>
<view class="email-info">
<text>001由李四于2021年12月20日邮寄,快递号:14567</text>
<text>查看物流</text>
</view>
</view>
-34
View File
@@ -1,34 +0,0 @@
page{
box-sizing: border-box;
}
.title{
height: 40px;
padding-left: 10px;
line-height: 40px;
color: #999;
font-size: 14px;
background-color: #f5f5f5;
}
.basic-info view{
padding: 15px;
height: 40px;
display: flex;
justify-content: space-between;
align-items: center;
color: #333;
font-size: 14px;
}
.email-info text:nth-child(1){
color: #333;
font-size: 14px;
}
.email-info{
padding: 15px;
}
.email-info text:nth-child(2){
color: #069F99;
font-size: 14px;
display: block;
margin-top: 10px;
text-align: center;
}
+15 -2
View File
@@ -1,10 +1,14 @@
// pages/meeting/meeting.js
import UserApi from '../../assets/js/http/userApi'
Page({
/**
* 页面的初始数据
*/
data: {
form: {}
},
// 查看物流
track(){
},
@@ -12,7 +16,16 @@ Page({
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
console.log(options)
let id = options.id // 合同id
UserApi.contractDetail({id}).then(res=>{
console.log(res)
if(res.success){
this.setData({
form: res.result
})
}
})
},
/**
+12 -6
View File
@@ -3,24 +3,30 @@
<view class="basic-info">
<view>
<text>合同编号</text>
<text>arff4ds8a3s6651</text>
<text>{{form.contractNum}}</text>
</view>
<view>
<text>合同名称</text>
<text>找找</text>
<text>{{form.contractName}}</text>
</view>
<view>
<text>负责人</text>
<text>张三</text>
<text>{{form.principalName}}</text>
</view>
<view>
<text>合同金额</text>
<text>500元</text>
<text>{{form.contractAmount ? form.contractAmount + '元' : 0}}</text>
</view>
<view>
<text>关联项目</text>
<view class="ass-project">
<text wx:for="{{form.listProject}}" wx:key="item">{{item.chargeUse_dictText}}</text>
</view>
</view>
</view>
<view class="title">邮寄信息</view>
<view class="email-info">
<text>001由李四于2021年12月20日邮寄,快递号:14567</text>
<text>查看物流</text>
<text>{{form.contractNum}}由{{form.payMailContract.createBy}}于{{form.payMailContract.createTime}}邮寄,快递号:{{form.payMailContract.postNo}}</text>
<text bindtap="track">查看物流</text>
</view>
</view>
+19
View File
@@ -10,6 +10,7 @@ page{
background-color: #f5f5f5;
}
.basic-info view{
background-color: #FFF;
padding: 15px;
height: 40px;
display: flex;
@@ -17,6 +18,11 @@ page{
align-items: center;
color: #333;
font-size: 14px;
border-bottom: 0.5px solid #f5f5f5;
position: relative;
}
.basic-info view:last-child{
border-bottom: 0;
}
.email-info text:nth-child(1){
color: #333;
@@ -31,4 +37,17 @@ page{
display: block;
margin-top: 10px;
text-align: center;
}
.ass-project{
height: auto !important;
padding: 0 !important;
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: flex-end;
}
.ass-project text{
color: #069F99;
display: block;
line-height: 25px;
}
+13 -8
View File
@@ -18,6 +18,7 @@ Page({
},
// 获取验证码
getVerCode() {
countdown = 60
if (/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(this.data.phone)) {
UserApi.sendCode({
phone: this.data.phone
@@ -27,8 +28,8 @@ Page({
this.countDown()
} else {
wx.showToast({
title: '获取验证码失败',
icon: 'error',
title: res.message,
icon: 'none',
duration: 2000
})
}
@@ -74,9 +75,9 @@ Page({
// 请求短信登录start
UserApi.codeLogin(params).then(res => {
if (res.success) {
// 存token和userInfo
// 存临时token和userInfo
wx.setStorage({
key: 'X-Access-Token',
key: 'token-temp',
data: res.result.token
})
wx.setStorage({
@@ -89,15 +90,19 @@ Page({
url: '../setPassword/setPassword',
})
}else{
// 跳转设置密码页
// 存token和userInfo
wx.setStorage({
key: 'X-Access-Token',
data: res.result.token
})
// 跳转首页
wx.switchTab({
url: '../home/home',
})
}
} else {
wx.showToast({
title: '登录失败',
title: res.message,
icon: 'error',
duration: 2000
})
@@ -157,4 +162,4 @@ Page({
onReachBottom: function () {
}
})
})
+2 -1
View File
@@ -17,5 +17,6 @@
<view class="btn-area">
<button type="primary" formType="submit">登录</button>
</view>
<!-- <view bindtap="forget" class="forget">忘记密码?</view> -->
</form>
</view>
</view>
+7 -1
View File
@@ -5,4 +5,10 @@ page {
}
.form-box{
transform: translateY(100%);
}
}
/* .forget{
color: #999;
font-size: 14px;
text-align: right;
margin-top: 20px;
} */
+26 -48
View File
@@ -6,7 +6,9 @@ Page({
* 页面的初始数据
*/
data: {
userId: ''
userId: '',
name: '昵称',
phone: ''
},
// 个人信息
mineInfo(){
@@ -25,10 +27,19 @@ Page({
wx.scanCode({
onlyFromCamera: false,
scanType: [],
success: (result) => {},
fail: (res) => {},
complete: (res) => {},
success: (result) => {
console.log(result)
},
fail: (res) => {
console.log(result)
},
complete: (res) => {
console.log(result)
},
})
// wx.navigateTo({
// url: '../scanSign/scanSign',
// })
},
// 我的资料
mineData(){
@@ -56,6 +67,11 @@ Page({
wx.redirectTo({
url: '../login/login',
})
}else{
wx.clearStorage()
wx.redirectTo({
url: '../login/login',
})
}
})
} else if (res.cancel) {}
@@ -66,14 +82,11 @@ Page({
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
let userInfo = wx.getStorageSync('userInfo')
this.setData({
name: userInfo.name,
phone: userInfo.phone.substr(0, 3) + '-' + userInfo.phone.substr(3, 4) + '-' + userInfo.phone.substr(7, 4)
})
},
/**
@@ -81,40 +94,5 @@ Page({
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
})
+6 -24
View File
@@ -1,25 +1,14 @@
<!--pages/mine/mine.wxml-->
<view class="mine-bg">
<!-- 顶部背景图 mode="scaleToFill" 按照宽高填充,忽略图片原比例-->
<image mode="scaleToFill" src="../../assets/images/mine-bg.png"></image>
<image mode="scaleToFill" src="../../assets/images/mine-bg.png"></image>
<!-- 顶部选项栏 -->
<view class="select-box">
<view class="avator">
<image src="../../assets/images/mine.png"></image>
<image src="../../assets/images/tx.png"></image>
<view class="info">
<text>昵称</text>
<text>185-2207-4910</text>
</view>
<image src="../../assets/images/to-right.png"></image>
</view>
<view class="select">
<view class="select-item">
<text>412</text>
<text>我的项目</text>
</view>
<view class="select-item">
<text>2</text>
<text>我的会议</text>
<text>{{name}}</text>
<text>{{phone}}</text>
</view>
</view>
</view>
@@ -36,7 +25,7 @@
</view>
<view class="list-item" bindtap="upDateInfo">
<view class="item-title">
<image src="../../assets/images/follow.png"></image>
<image src="../../assets/images/xgmm.png"></image>
<text>修改密码</text>
</view>
<image src="../../assets/images/more.png"></image>
@@ -62,16 +51,9 @@
</view>
<image src="../../assets/images/more.png"></image>
</view>
<view class="list-item">
<view class="item-title">
<image src="../../assets/images/setting.png"></image>
<text>设置</text>
</view>
<image src="../../assets/images/more.png"></image>
</view>
</view>
</view>
<view class="logout">
<text bindtap="logout">退出登录</text>
</view>
</view>
</view>
+4 -4
View File
@@ -6,7 +6,7 @@ page{
height: 200pt;
}
.select-box{
transform: translateY(-100pt);
transform: translateY(-75pt);
padding: 0 15pt;
}
.select-box .avator{
@@ -48,7 +48,7 @@ page{
width: 35px;
height: 35px;
}
.select-box .select{
.select-box .select{
height: 90pt;
background-color: #fff;
border-radius: 10px;
@@ -76,7 +76,7 @@ page{
}
/* 个人信息选项栏 */
.list-info{
margin-top: -100pt;
margin-top: -65pt;
padding: 15pt;
}
.list-info .title{
@@ -122,4 +122,4 @@ page{
border-radius: 5px;
font-size: 13px;
color: #069F99;
}
}
+24 -47
View File
@@ -1,71 +1,48 @@
// pages/minedata/minedata.js
import UserApi from '../../assets/js/http/userApi'
Page({
/**
* 页面的初始数据
*/
data: {
list: [,1,1,1,1,1,1,1,1]
list: [],
pageNo: 1,
pageSize: 10
},
// 合同详情
contractDetail(){
contractDetail(e){
let id = e.currentTarget.dataset.meeting.id
wx.navigateTo({
url: '../contractDetail/contractDetail',
url: `../contractDetail/contractDetail?id=${id}`,
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
loadData(){
let params = {
pageNo: this.data.pageNo,
pageSize: this.data.pageSize
}
UserApi.contractList(params).then(res=>{
if(res.success && res.result.records && res.result.records.length){
console.log(res.result.records)
this.setData({
list: [...this.data.list, ...res.result.records]
})
}
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
this.loadData()
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
this.data.pageNo++
this.loadData()
}
})
+9 -6
View File
@@ -1,13 +1,16 @@
<!--pages/meeting/meeting.wxml-->
<view class="list-box">
<view class="list-item" wx:for="list" wx:key="item" bindtap="contractDetail">
<view class="list-box" wx:if="{{list && list.length}}">
<view class="list-item" wx:for="{{list}}" wx:key="item" bindtap="contractDetail" data-meeting="{{item}}">
<view class="list-info">
<text>合同名称</text>
<text>合同金额:5000元</text>
<text>{{item.contractName}}</text>
<text>合同金额:{{item.contractAmount ? item.contractAmount + '元' : '0'}}</text>
</view>
<view class="list-info">
<text>合同编号:002</text>
<text>负责人:张三</text>
<text>合同编号:{{item.contractNum}}</text>
<text>负责人:{{item.principalName}}</text>
</view>
</view>
</view>
<view wx:if="{{list.length === 0}}" class="no-data">
<text>暂无数据</text>
</view>
+15 -3
View File
@@ -1,4 +1,5 @@
import UserApi from '../../assets/js/http/userApi'
import { previewFile, sliceFileTypeByFileName } from '../../assets/js/preview'
Page({
/**
@@ -16,14 +17,25 @@ Page({
pageSize: this.data.pageSize
}
UserApi.dataList(params).then(res=>{
if(res.success){
if(res.success && res.result.records && res.result.records.length){
console.log(res.result.records)
this.setData({
list: res.result.records
list: [...this.data.list, ...res.result.records]
})
}
})
},
// 预览
previewFile(e) {
const fileObj = e.currentTarget.dataset.file
let fileType = sliceFileTypeByFileName(fileObj.fileName)
// 文件类型不是docx,doc,pdf时,已邮件形式发送到参会人的邮箱
if(fileType !== 'docx' && fileType !== 'doc' && fileType !== 'pdf') {
}else {
previewFile(fileObj.filId, fileObj.fileName)
}
},
/**
* 生命周期函数--监听页面显示
*/
@@ -38,4 +50,4 @@ Page({
this.data.pageNo++
this.loadData()
}
})
})
+6 -3
View File
@@ -1,8 +1,11 @@
<view class="list-box">
<view class="list-item" wx:for="list" wx:key="item">
<view class="list-box" wx:if="{{list && list.length}}">
<view class="list-item" wx:for="{{list}}" wx:key="item">
<text class="list-time">{{item.uploadTime}}</text>
<view class="list-files">
<text>{{item.fileName}}</text>
<text bindtap="previewFile" data-file="{{item}}">{{item.fileName}}</text>
</view>
</view>
</view>
<view wx:if="{{list.length === 0}}" class="no-data">
<text>暂无数据</text>
</view>
+41 -12
View File
@@ -6,12 +6,14 @@ Page({
*/
data: {
visible: false,
visibleDate: false,
index: 0,
list: [], // 项目列表
searchParams: {
pageNo: 1,
pageSize: 10,
needInvoice: 0, // 是否需要发票 0 4
pack: 0, // 是否打包 0 1
needInvoice: '', // 是否需要发票 0 4
pack: '', // 是否打包 0 1
year: '', // 运行年份
},
selects: [ // 自定义选择框参数
@@ -45,6 +47,9 @@ Page({
changeTab(e){
this.data.index = e.currentTarget.dataset.index
if(this.data.index === 0){
this.setData({
visible: true
})
this.setData({
data: [
{
@@ -57,6 +62,9 @@ Page({
]
})
}else if(this.data.index === 1){
this.setData({
visible: true
})
this.setData({
data: [
{
@@ -68,18 +76,29 @@ Page({
}
]
})
}else{
this.setData({
visibleDate: true
})
}
this.setData({
visible: true
})
},
// 关闭弹出层
// 关闭发票和打包的弹出层
close() {
this.setData({
visible: false
})
},
// 日期选中
dateOk(value){
this.data.pageNo = 1
this.setData({
"searchParams.year": value.detail,
visibleDate: false
})
this.loadData()
},
ok(e){
this.data.pageNo = 1
if(this.data.index === 0){
this.setData({
'searchParams.needInvoice': e.detail
@@ -89,8 +108,7 @@ Page({
'searchParams.pack': e.detail
})
}
// this.loadData()
console.log(this.data.searchParams)
this.loadData()
},
// 项目详情
projectDetail(){
@@ -100,8 +118,19 @@ Page({
},
loadData(){
UserApi.projectList(this.data.searchParams).then(res=>{
console.log(res)
if(res.success){
// 搜索时,把原数据清空,重新筛选
if(this.data.pageNo === 1) {
this.setData({
list: []
})
}
if(res.result.records && res.result.records.length){
this.setData({
list: [...this.data.list, ...res.result.records]
})
}
}
}).catch(err=>{
wx.showToast({
title: '加载失败',
@@ -114,13 +143,13 @@ Page({
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
// this.loadData()
this.loadData()
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
this.data.pageNo++
// this.loadData()
this.loadData()
},
})
+2 -1
View File
@@ -1,6 +1,7 @@
{
"navigationBarTitleText": "项目",
"usingComponents": {
"popup": "../../components/popup/popup"
"popup": "../../components/popup/popup",
"dateMonth": "../../components/dateMonth/dateMonth"
}
}
+11 -7
View File
@@ -7,17 +7,21 @@
</view>
</view>
<view class="list">
<view class="list-item" wx:for="{{[1,1,1,1]}}" bindtap="projectDetail" wx:key="item">
<view class="list-item" wx:for="{{list}}" bindtap="projectDetail" wx:key="item">
<view class="title">
<text>项目名称文字占位符项目名称文字占位符项目名称文字占位符</text>
<text>2021-12-12</text>
<text>{{item.chargeUse_dictText}}</text>
<text>{{item.year}}年</text>
</view>
<view class="content-text">
<text>需要发票</text>
<text>到账</text>
<text>开票</text>
<text>邮寄</text>
<text class="all">{{item.needInvoice === 0 ? '不需要发票' : '需要发票'}}</text>
<text class="{{item.inAccount === 0 ? '' : item.inAccount === 2 ? 'half' : 'all'}}">到账</text>
<text class="{{item.makeInvoice === 0 ? '' : item.makeInvoice === 2 ? 'half' : 'all'}}">开票</text>
<text class="{{item.mail === 0 ? '' : item.mail === 2 ? 'half' : 'all'}}">邮寄</text>
</view>
</view>
</view>
<view wx:if="{{list.length === 0}}" class="no-data">
<text>暂无数据</text>
</view>
<popup visible="{{visible}}" bindclose="close" outClickCanClose="true" bindok="ok" data="{{data}}"></popup>
<dateMonth visible="{{visibleDate}}" mode="year" bindok="dateOk"></dateMonth>
+6
View File
@@ -71,3 +71,9 @@ page {
justify-content: space-between;
align-items: center;
}
.half{
color: burlywood;
}
.all{
color: #069F99;
}
@@ -1,13 +1,31 @@
// pages/meeting/meeting.js
import UserApi from '../../assets/js/http/userApi'
Page({
/**
* 页面的初始数据
*/
data: {
isSigned: false, // 默认未报名
meetingId: '', // 会议id
fileId: '', // 图片id
src: null // 签名之后,保存签名的图片地址
},
// 去签到页
scanSign(){
wx.navigateTo({
url: '../writtenSign/writtenSign',
})
},
// 确定签到
sureSign(){
},
// 去报名
goSignUp(){
wx.navigateTo({
url: 'url',
})
},
/**
* 生命周期函数--监听页面加载
*/
@@ -26,7 +44,13 @@ Page({
* 生命周期函数--监听页面显示
*/
onShow: function () {
let params = {
fileId: this.data.fileId,
meetingId: this.data.meetingId
}
// UserApi.scanCode(params).then(res=>{
// })
},
/**
@@ -63,4 +87,4 @@ Page({
onShareAppMessage: function () {
}
})
})
+4
View File
@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "扫码签到",
"usingComponents": {}
}
+48
View File
@@ -0,0 +1,48 @@
<view class="basic-info">
<view>
<text>会议名称</text>
<text>会议名称会议名称</text>
</view>
<view>
<text>会议类型</text>
<text>arff4ds8a3s6651</text>
</view>
<view>
<text>召开时间</text>
<text>找找</text>
</view>
<!-- 已报名信息显示的内容start -->
<view wx:if="{{isSigned}}">
<text>参会单位</text>
<text>张三张三张三张三张三张三张三张三张三张三张三张三张三</text>
</view>
<view wx:if="{{isSigned}}">
<text>参会人</text>
<text>500元</text>
</view>
<view wx:if="{{isSigned}}">
<text>是否签到</text>
<text>500元</text>
</view>
<view wx:if="{{isSigned}}">
<text>手动签到</text>
<text style="color: #069F99;" bindtap="scanSign">签到</text>
</view>
</view>
<view class="imageBox" hidden="{{isSigned ? false : true}}">
<image src="{{src}}" ></image>
</view>
<view class="scanSign" wx:if="{{isSigned}}">
<text bindtap="sureSign">签到</text>
</view>
<!-- 已报名信息显示的内容end -->
<!-- 未报名显示的内容start -->、
<view class="warning-text" wx:if="{{!isSigned}}">
<image src="../../assets/images/warning.png"></image>
<text>很抱歉,未查询到您的报名信息</text>
</view>
<view class="scanSign" wx:if="{{!isSigned}}">
<text bindtap="goSignUp">去报名</text>
</view>
+72
View File
@@ -0,0 +1,72 @@
.basic-info .title{
height: 40px;
}
.basic-info .title text{
display: block;
border-left: 3px solid #069F99;
height: 14px;
padding-left: 10px;
border-radius: 2px;
display: flex;
justify-content: center;
align-items: center;
color: #333;
font-size: 15px;
font-weight: 500;
}
.basic-info view text:nth-child(1){
flex-shrink: 0;
margin-right: 10px;
}
.basic-info view{
background-color: #FFF;
padding: 15px;
height: 40px;
display: flex;
justify-content: space-between;
align-items: center;
color: #333;
font-size: 14px;
border-bottom: 0.5px solid #f5f5f5;
position: relative;
}
.basic-info view:last-child{
border-bottom: 0;
}
.scanSign{
padding: 0 15px;
margin: 10px 0;
}
.scanSign text{
display: flex;
justify-content: center;
align-items: center;
height: 45px;
background-color: #069F99;
border-radius: 5px;
font-size: 13px;
color: #fff;
}
.imageBox {
border: 1px solid #dedede;
margin: 10px;
height: 160px
}
.imageBox image {
width: 100%;
height: 160px
}
.warning-text{
margin-bottom: 10px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
color: #999;
font-size: 12px;
}
.warning-text image{
width: 100px;
height: 100px;
margin-bottom: 15px;
}
+21 -56
View File
@@ -6,16 +6,18 @@ Page({
* 页面的初始数据
*/
data: {
newPassword: '',
verifyPassword: '',
password: '', // token
newPassword: '', // 密码
verifyPassword: '', // 确认密码
rsaPublicKey: '',
flag: false
},
bindBlurInput(e){
},
// 登录
formSubmit(e) {
const that = this
if(!e.detail.value.newPassword){
this.data.flag = false
wx.showToast({
@@ -68,6 +70,7 @@ Page({
}
if (this.data.flag) {
let params = {
password: this.data.password,
newPassword: encrypt(this.data.rsaPublicKey, e.detail.value.newPassword),
verifyPassword: encrypt(this.data.rsaPublicKey, e.detail.value.verifyPassword),
rsaPublicKey: this.data.rsaPublicKey
@@ -76,7 +79,11 @@ Page({
UserApi.setPassword(params).then(res => {
if (res.success) {
// 成功设置密码,跳转首页
wx.navigateTo({
wx.setStorage({
key: 'X-Access-Token',
data: that.data.password
})
wx.switchTab({
url: '../home/home',
})
} else {
@@ -90,19 +97,6 @@ Page({
// 登录失败
}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
@@ -115,45 +109,16 @@ Page({
that.setData({
rsaPublicKey: res.data
})
},
fail: function(){
// 缓存中没有登录过默认app.json的登录页
}
})
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
wx.getStorage({
key: 'token-temp',
success (res) {
that.setData({
password: res.data
})
console.log(that.data.password)
}
})
}
})
})
+103 -89
View File
@@ -1,7 +1,7 @@
// pages/meeting/meeting.js
import UserApi from '../../assets/js/http/userApi'
import { encrypt } from '../../assets/js/jsencrypt/rsa'
var countdown = 60; // 倒计时秒数
// var countdown = 60; // 倒计时秒数
Page({
@@ -10,79 +10,114 @@ Page({
*/
data: {
form: {
phone: '', // 手机号
verifyCode: '', // 验证
newPassword: '', // 新密码
verifyPassword: '', // 确认密码
count: 60, // 倒计时秒
oldpassword: '', // 旧密码
password: '', // 新密
confirmpassword: '', // 确认新密码
// count: 60, // 倒计时秒
rsaPublicKey: '', // 公钥
},
showGetCaptcha: true
},
bindInputPhone(e) {
this.setData({
"form.phone": e.detail.value
})
},
// 获取验证码
getVerCode() {
if (/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(this.data.form.phone)) {
UserApi.sendCode({
phone: this.data.form.phone
}).then(res => {
// 获取成功,倒计时 start
if (res.success) {
this.countDown()
} else {
wx.showToast({
title: '获取验证码失败',
icon: 'error',
duration: 2000
})
}
})
} else {
wx.showToast({
title: '请输入正确的手机号',
icon: 'none',
duration: 2000
})
}
// showGetCaptcha: true
},
// // 获取验证码
// getVerCode() {
// if (/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(this.data.form.phone)) {
// UserApi.sendCode({
// phone: this.data.form.phone
// }).then(res => {
// // 获取成功,倒计时 start
// if (res.success) {
// this.countDown()
// } else {
// wx.showToast({
// title: '获取验证码失败',
// icon: 'error',
// duration: 2000
// })
// }
// })
// } else {
// wx.showToast({
// title: '请输入正确的手机号',
// icon: 'none',
// duration: 2000
// })
// }
// },
// 倒计时
countDown() {
if (countdown === 0) {
this.setData({
showGetCaptcha: true
})
countdown = 60;
return;
} else {
this.setData({
showGetCaptcha: false
})
countdown--;
this.setData({
count: countdown
})
}
setTimeout(() => {
this.countDown()
}, 1000)
// 倒计时 end
},
// countDown() {
// if (countdown === 0) {
// this.setData({
// showGetCaptcha: true
// })
// countdown = 60;
// return;
// } else {
// this.setData({
// showGetCaptcha: false
// })
// countdown--;
// this.setData({
// count: countdown
// })
// }
// setTimeout(() => {
// this.countDown()
// }, 1000)
// // 倒计时 end
// },
// 提交
formSubmit(e) {
if(!e.detail.value.newPassword){
if(!e.detail.value.oldpassword){
this.data.flag = false
wx.showToast({
title: '请输入密码',
title: '请输入密码',
icon: 'none'
})
return
} else {
let pattern = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{8,}$/
if(!pattern.test(e.detail.value.newPassword)){
if(!pattern.test(e.detail.value.oldpassword)){
wx.showToast({
title: '旧密码由8位数字、大小写字母和特殊符号组成!!',
icon: 'none'
})
this.data.flag = false
return
} else {
this.data.flag = true
}
}
if(!e.detail.value.password){
this.data.flag = false
wx.showToast({
title: '请输入新密码',
icon: 'none'
})
return
} else {
let pattern = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{8,}$/
if(!pattern.test(e.detail.value.password)){
wx.showToast({
title: '新密码由8位数字、大小写字母和特殊符号组成!!',
icon: 'none'
})
this.data.flag = false
return
} else {
this.data.flag = true
}
}
if(!e.detail.value.confirmpassword){
this.data.flag = false
wx.showToast({
title: '请输入确认新密码',
icon: 'none'
})
return
} else {
let pattern = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{8,}$/
if(!pattern.test(e.detail.value.confirmpassword)){
wx.showToast({
title: '密码由8位数字、大小写字母和特殊符号组成!!',
icon: 'none'
@@ -93,27 +128,7 @@ Page({
this.data.flag = true
}
}
if(!e.detail.value.verifyPassword){
this.data.flag = false
wx.showToast({
title: '请输入确认密码',
icon: 'none'
})
return
} else {
let pattern = /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/]).{8,}$/
if(!pattern.test(e.detail.value.verifyPassword)){
wx.showToast({
title: '密码由8位数字、大小写字母和特殊符号组成!!',
icon: 'none'
})
this.data.flag = false
return
} else {
this.data.flag = true
}
}
if(e.detail.value.newPassword === e.detail.value.verifyPassword) {
if(e.detail.value.password === e.detail.value.confirmpassword) {
this.data.flag = true
} else {
this.data.flag = false
@@ -125,10 +140,9 @@ Page({
}
console.log('form发生了submit事件,携带数据为:', e.detail.value)
let params = {
phone: encrypt(this.data.rsaPublicKey, e.detail.value.phone),
newPassword: encrypt(this.data.rsaPublicKey, e.detail.value.newPassword),
verifyPassword: encrypt(this.data.rsaPublicKey, e.detail.value.verifyPassword),
verifyCode: e.detail.value.verifyCode,
password: encrypt(this.data.rsaPublicKey, e.detail.value.oldpassword),
newPassword: encrypt(this.data.rsaPublicKey, e.detail.value.password),
verifyPassword: encrypt(this.data.rsaPublicKey, e.detail.value.confirmpassword),
rsaPublicKey: this.data.rsaPublicKey,
}
console.log(params)
@@ -150,7 +164,7 @@ Page({
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
@@ -172,9 +186,9 @@ Page({
rsaPublicKey: res.data
})
},
fail: function(){
fail: function(){
// 缓存中没有登录过默认app.json的登录页
}
})
}
})
})
+8 -8
View File
@@ -2,29 +2,29 @@
<view>
<form bindsubmit="formSubmit" class="form-box">
<view class="form-item">
<view class="text-label">手机号</view>
<view class="text-label">旧密码</view>
<view class="text-value">
<input name="phone" bindinput="bindInputPhone" value="{{phone}}" placeholder="请输入手机号" />
<input name="oldpassword" value="{{oldpassword}}" type="password" placeholder="请输入旧密码" />
</view>
</view>
<view class="form-item">
<!-- <view class="form-item">
<view class="text-label">验证码</view>
<view class="text-value">
<input name="verifyCode" value="{{verifyCode}}" placeholder="请输入验证码" />
</view>
<view wx:if="{{showGetCaptcha}}" class="captcha" bindtap="getVerCode">获取验证码</view>
<view wx:else="{{showGetCaptcha}}" class="captcha count">{{count}}</view>
</view>
</view> -->
<view class="form-item">
<view class="text-label">密码</view>
<view class="text-label">密码</view>
<view class="text-value">
<input name="newPassword" value="{{newPassword}}" placeholder="请输入密码" />
<input name="password" value="{{password}}" type="password" placeholder="请输入密码" />
</view>
</view>
<view class="form-item">
<view class="text-label">确认密码</view>
<view class="text-label">确认密码</view>
<view class="text-value">
<input name="verifyPassword" value="{{verifyPassword}}" placeholder="请确认密码" />
<input name="confirmpassword" value="{{confirmpassword}}" type="password" placeholder="请确认密码" />
</view>
</view>
<view class="btn-area">
+4 -1
View File
@@ -1,4 +1,7 @@
/* pages/meeting/meeting.wxss */
.form-box{
transform: translateY(110pt);
}
}
.text-label {
width: 80px !important;
}
+86
View File
@@ -0,0 +1,86 @@
import Api from '../../assets/js/http/api'
Page({
data: {
context1: null,
hasDraw:false, //默认没有画
id: '',
},
onLoad: function() {
var context1 = wx.createCanvasContext('handWriting1');
context1.setStrokeStyle("#000000") // 画笔的颜色
context1.setLineWidth(3); // 画笔的线条宽度
this.setData({
context1: context1,
})
},
touchstart1: function(e) {
var context1 = this.data.context1;
context1.moveTo(e.touches[0].x, e.touches[0].y); // 把画笔的开始点移到当前触摸点
this.setData({
// context1: context1,
hasDraw : true, //要签字了
});
},
touchmove1: function(e) {
var x = e.touches[0].x;
var y = e.touches[0].y;
var context1 = this.data.context1;
context1.setLineWidth(3);
context1.lineTo(x, y); // 移动绘制的点(关键步骤)
context1.stroke(); // 画出当前路径的边框====创建线条
context1.setLineCap('round'); // 设置线条的端点样式
context1.draw(true); // 将之前在绘图上下文中的描述(路径、变形、样式)画到 canvas 中
context1.moveTo(x, y); // 把路径移动到画布中的指定点,不创建线条
},
reSign1: function() { //重新画
var that = this;
var context1 = that.data.context1;
context1.draw(); //清空画布
that.setData({
hasDraw: false, //没有画
src: null
});
},
sign1ok: function () {
const that = this;
if(!that.data.hasDraw){
console.log("签字是空白的 没有签字")
}else{
var context1 = that.data.context1;
context1.draw(true, wx.canvasToTempFilePath({ // 把当前画布指定区域的内容导出生成指定大小的图片。在 draw() 回调里调用该方法才能保证图片导出成功
canvasId: 'handWriting1',
success(res) { // 完成签字
//得到了图片 上传到服务器
wx.uploadFile({
url: Api.baseUrl + Api.URL_CONFIG + "/sys/common/upload",
filePath: res.tempFilePath,
name: "file",
formData: {
filetype: "image",
},
success: function (result) {
let data = JSON.parse(result.data)
that.setData({
id: data.result.id
})
let pages = getCurrentPages();
let prevPage = pages[pages.length - 2];
//将数值信息赋值给上一页面id变量
prevPage.setData({
fileId: data.result.id
});
wx.navigateBack({
delta: 1,
})
},
fail: function(err){
wx.showToast({
title: '上传失败',
})
}
})
}
}))
}
},
});
@@ -1,3 +1,3 @@
{
"usingComponents": {}
}
}
+16
View File
@@ -0,0 +1,16 @@
<view>
<view class="sign">
<view class="signTitle">参会人签字</view>
<view class="paper">
<canvas class="handWriting" disable-scroll="true" bindtouchstart="touchstart1" bindtouchmove="touchmove1" canvas-id="handWriting1">
</canvas>
</view>
<view class="signBtn">
<button size="" type="primary" bindtap="sign1ok">完成签字</button>
<button size="" type="warn" bindtap="reSign1">重新签字</button>
</view>
<view class="imageBox" hidden="{{src?false:true}}">
<image src="{{src}}" ></image>
</view>
</view>
</view>
+38
View File
@@ -0,0 +1,38 @@
.paper {
border: 1px solid #dedede;
margin: 10px;
height: 160px
}
.imageBox {
border: 1px solid #dedede;
margin: 10px;
height: 160px
}
.signBtn {
display: flex;
margin-top: 20px;
}
.signTitle {
text-align: center;
font-size: 1.2em;
margin: 10px auto;
}
.handWriting {
width: 100%;
height: 100%;
}
.imageBox image {
width: 100%;
height: 160px
}
button[type='primary']{
background-color: #069F99 !important;
}
button[type='warn']{
color: #999 !important;
}