commit 9b845f15323bd8434503b14bf5bc93e99f212a88
Author: 辉 <814457906@qq.com>
Date: Wed Jul 16 10:14:15 2025 +0800
修改
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..a2ee554
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,17 @@
+
+
\ No newline at end of file
diff --git a/api/addexam/index.js b/api/addexam/index.js
new file mode 100644
index 0000000..5fe6557
--- /dev/null
+++ b/api/addexam/index.js
@@ -0,0 +1,17 @@
+import request from "../request.js"
+
+export function getExamList() {
+ return request({
+ url: `/exam/api/exam/exam/getExamList?examType=2&userId=${uni.getStorageSync('examh5user').id}`,
+ method: 'get',
+ })
+}
+
+
+export function save(data) {
+ return request({
+ url: `/exam/api/exam/registration/save`,
+ method: 'post',
+ data
+ })
+}
\ No newline at end of file
diff --git a/api/baseurl.js b/api/baseurl.js
new file mode 100644
index 0000000..dd60519
--- /dev/null
+++ b/api/baseurl.js
@@ -0,0 +1,4 @@
+var baseurl = "http://8.131.93.145:54012";
+
+
+export default baseurl
diff --git a/api/examlist/index.js b/api/examlist/index.js
new file mode 100644
index 0000000..e332577
--- /dev/null
+++ b/api/examlist/index.js
@@ -0,0 +1,8 @@
+import request from "../request.js"
+
+export function getRegExamList() {
+ return request({
+ url: `/exam/api/exam/registration/getRegExamList?userId=${uni.getStorageSync('examh5user').id}`,
+ method: 'get',
+ })
+}
\ No newline at end of file
diff --git a/api/login/index.js b/api/login/index.js
new file mode 100644
index 0000000..ba396a4
--- /dev/null
+++ b/api/login/index.js
@@ -0,0 +1,10 @@
+import request from "../request.js"
+
+//注册
+export function login(data) {
+ return request({
+ url: `/exam/api/sys/user/login`,
+ method: 'post',
+ data
+ })
+}
\ No newline at end of file
diff --git a/api/register/index.js b/api/register/index.js
new file mode 100644
index 0000000..0338b73
--- /dev/null
+++ b/api/register/index.js
@@ -0,0 +1,10 @@
+import request from "../request.js"
+
+//注册
+export function reg(data) {
+ return request({
+ url: `/exam/api/sys/user/reg`,
+ method: 'post',
+ data
+ })
+}
\ No newline at end of file
diff --git a/api/request.js b/api/request.js
new file mode 100644
index 0000000..88db997
--- /dev/null
+++ b/api/request.js
@@ -0,0 +1,53 @@
+import baseurl from './baseurl.js'
+
+var request = function(config) {
+ return new Promise((resolve, rejected) => {
+ uni.showLoading({
+ title: ''
+ });
+ uni.request({
+ url: baseurl + config.url,
+ data: config.data,
+ method: config.method,
+ timeout: 10000,
+ header: {
+ ...config.header,
+ token: uni.getStorageSync('examh5token')
+ },
+ success(res) {
+ uni.hideLoading();
+ if (res.data.code == 0) {
+ resolve(res.data)
+ } else if (res.data.code == 401 || res.data.code == 10010002 || res.data.code ==
+ 90010001 || res.data.code == 90010002 || res.data.code == 90010005) {
+ uni.showModal({
+ title: '提示',
+ content: res.data.msg,
+ showCancel: false,
+ success: function(res) {
+ if (res.confirm) {
+ uni.clearStorageSync();
+ uni.reLaunch({
+ url: "/pages/login/login"
+ })
+ }
+ }
+ });
+ } else {
+ uni.showModal({
+ title: '提示',
+ showCancel: false,
+ content: res.data.msg,
+ success: function(res) {}
+ });
+ }
+ },
+ fail(err) {
+ uni.hideLoading();
+ rejected(err)
+ }
+ })
+ })
+}
+
+export default request
\ No newline at end of file
diff --git a/api/user/index.js b/api/user/index.js
new file mode 100644
index 0000000..5690fa2
--- /dev/null
+++ b/api/user/index.js
@@ -0,0 +1,12 @@
+import request from "../request.js"
+
+export function info(data) {
+ return request({
+ url: `/exam/api/sys/user/info`,
+ method: 'post',
+ header: {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ data
+ })
+}
\ No newline at end of file
diff --git a/components/signature/signature.vue b/components/signature/signature.vue
new file mode 100644
index 0000000..5a97667
--- /dev/null
+++ b/components/signature/signature.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/v-sign/utils.js b/components/v-sign/utils.js
new file mode 100644
index 0000000..a5a9ab7
--- /dev/null
+++ b/components/v-sign/utils.js
@@ -0,0 +1,15 @@
+/**
+ * 判断是否未数值
+ * @param {Object} val
+ */
+export function isNumber(val) {
+ return !isNaN(Number(val))
+}
+
+/**
+ * 处理大小单位
+ * @param {Object} val
+ */
+export function formatSize(val) {
+ return isNumber(val) ? `${val}rpx` : val
+}
diff --git a/components/v-sign/v-sign-action.vue b/components/v-sign/v-sign-action.vue
new file mode 100644
index 0000000..65d11d1
--- /dev/null
+++ b/components/v-sign/v-sign-action.vue
@@ -0,0 +1,162 @@
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
diff --git a/components/v-sign/v-sign-pen.vue b/components/v-sign/v-sign-pen.vue
new file mode 100644
index 0000000..9c26a66
--- /dev/null
+++ b/components/v-sign/v-sign-pen.vue
@@ -0,0 +1,211 @@
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/v-sign/v-sign.vue b/components/v-sign/v-sign.vue
new file mode 100644
index 0000000..afb3020
--- /dev/null
+++ b/components/v-sign/v-sign.vue
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/homepage.png b/homepage.png
new file mode 100644
index 0000000..9b806da
Binary files /dev/null and b/homepage.png differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c3ff205
--- /dev/null
+++ b/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..6f0124c
--- /dev/null
+++ b/main.js
@@ -0,0 +1,24 @@
+import App from './App'
+
+// #ifndef VUE3
+import Vue from 'vue'
+import uView from "uview-ui";
+Vue.use(uView);
+import './uni.promisify.adaptor'
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+ ...App
+})
+app.$mount()
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue'
+export function createApp() {
+ const app = createSSRApp(App)
+ return {
+ app
+ }
+}
+// #endif
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..f4bfbde
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,72 @@
+{
+ "name" : "exam-h5",
+ "appid" : "__UNI__254C48E",
+ "description" : "",
+ "versionName" : "1.0.0",
+ "versionCode" : "100",
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ /* 模块配置 */
+ "modules" : {},
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ /* ios打包配置 */
+ "ios" : {},
+ /* SDK配置 */
+ "sdkConfigs" : {}
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "",
+ "setting" : {
+ "urlCheck" : false
+ },
+ "usingComponents" : true
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ },
+ "uniStatistics" : {
+ "enable" : false
+ },
+ "vueVersion" : "2"
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..d6804c7
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,28 @@
+{
+ "name": "exam-h5",
+ "version": "1.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "exam-h5",
+ "version": "1.0.0",
+ "license": "ISC",
+ "dependencies": {
+ "uview-ui": "^1.8.8"
+ }
+ },
+ "node_modules/uview-ui": {
+ "version": "1.8.8",
+ "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-1.8.8.tgz",
+ "integrity": "sha512-Osal3yzXiHor0In9OPTZuXTaqTbDglMZ9RGK/MPYDoQQs+y0hrBCUD0Xp5T70C8i2lLu2X6Z11zJhmsQWMR7Jg=="
+ }
+ },
+ "dependencies": {
+ "uview-ui": {
+ "version": "1.8.8",
+ "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-1.8.8.tgz",
+ "integrity": "sha512-Osal3yzXiHor0In9OPTZuXTaqTbDglMZ9RGK/MPYDoQQs+y0hrBCUD0Xp5T70C8i2lLu2X6Z11zJhmsQWMR7Jg=="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..7bf5054
--- /dev/null
+++ b/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "exam-h5",
+ "version": "1.0.0",
+ "description": "",
+ "main": "main.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "uview-ui": "^1.8.8"
+ }
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..97e272d
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,73 @@
+{
+ "easycom": {
+ "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+ },
+ "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+ {
+ "path": "pages/login/login",
+ "style": {
+ "navigationBarTitleText": "登录",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "pages/examlist/examlist",
+ "style": {
+ "navigationBarTitleText": "",
+ "navigationStyle": "custom",
+ "onReachBottomDistance": 40, //距离底部多远时触发 单位为px
+ "enablePullDownRefresh": true //设置参数为true
+ }
+ }, {
+ "path": "pages/user/user",
+ "style": {
+ "navigationBarTitleText": "",
+ "navigationStyle": "custom",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "pages/register/register",
+ "style": {
+ "navigationBarTitleText": "注册账号",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "pages/forgotPassword/forgotPassword",
+ "style": {
+ "navigationBarTitleText": "忘记密码",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "pages/addexam/addexam",
+ "style": {
+ "navigationBarTitleText": "新增考试",
+ "enablePullDownRefresh": false
+ }
+ }
+ ],
+ "globalStyle": {
+ "navigationBarTextStyle": "white",
+ "navigationBarTitleText": "",
+ "navigationBarBackgroundColor": "#4C7BC9",
+ "backgroundColor": "#4C7BC9"
+ },
+ "uniIdRouter": {},
+ "tabBar": {
+ "color": "#7A7E83",
+ "selectedColor": "#435950",
+ "borderStyle": "black",
+ "backgroundColor": "#ffffff",
+ "list": [{
+ "pagePath": "pages/examlist/examlist",
+ "iconPath": "static/homepagew.png",
+ "selectedIconPath": "static/homepagews.png",
+ "text": "首页"
+ },
+ {
+ "pagePath": "pages/user/user",
+ "iconPath": "static/userw.png",
+ "selectedIconPath": "static/users.png",
+ "text": "我的"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/pages/addexam/addexam.scss b/pages/addexam/addexam.scss
new file mode 100644
index 0000000..09c8005
--- /dev/null
+++ b/pages/addexam/addexam.scss
@@ -0,0 +1,379 @@
+.app {
+ font-size: 34rpx;
+ padding-top: 10rpx;
+ height: 100%;
+ background: #FFFFFF;
+ padding-bottom: 200rpx;
+
+ .title {
+ height: 100rpx;
+ line-height: 100rpx;
+ font-size: 34rpx;
+ margin: 0px auto;
+ width: 100%;
+ font-weight: 600;
+ text-align: center;
+ }
+
+ .mask {
+ .Agreement {
+ width: 100%;
+ background-color: #fff;
+ text-align: center;
+ height: 1000rpx;
+ position: absolute;
+ top: 5%;
+ width: 94%;
+ left: 3%;
+ font-size: 30rpx;
+
+ .scroll-Y {
+ width: 98%;
+ margin: 0 auto;
+ height: 830rpx;
+ overflow-y: scroll;
+ text-align: left;
+ text-indent: 2em;
+ }
+
+ .cancel {
+ height: 70rpx;
+ line-height: 70rpx;
+ font-size: 32rpx;
+ background-color: #F4F5F7;
+ position: absolute;
+ border-top: 1rpx solid #000000;
+ bottom: 0;
+ right: 0;
+ width: 50%;
+ color: #000000;
+ }
+
+ .determine {
+ height: 70rpx;
+ line-height: 70rpx;
+ font-size: 32rpx;
+ width: 50%;
+ color: #F4F5F7;
+ background: #4C7BC9;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ }
+ }
+ }
+
+ .addressitem {
+ width: 97%;
+ border-bottom: 1rpx solid #D8D4D4;
+ margin-left: 3%;
+ height: 100%;
+
+ .leftaddress {
+ width: 15%;
+ height: 100%;
+ display: flex;
+ display: inline-block;
+ }
+
+ .addition {
+ color: #666666;
+ display: inline-block;
+ line-height: 50rpx;
+ font-size: 28rpx;
+ }
+ }
+
+ .money {
+ font-size: 32rpx;
+ color: #D43953;
+ position: absolute;
+ right: 5%;
+ top: 15%;
+ }
+
+ .user {
+ width: 100%;
+ padding: 10rpx;
+ line-height: 93rpx;
+ margin-bottom: 10rpx;
+
+ .timeyear{
+ .bottomtext{
+ -webkit-overflow-scrolling: touch;
+ width: 96%;
+ margin: 0 auto;
+ .items{
+ display: flex;
+ justify-content:flex-start;
+ flex-wrap: wrap;
+ text-align: center;
+ .timeitem{
+ width: 21%;
+ margin: 0 2% 20rpx;
+ height: 86rpx;
+ border-radius: 5rpx;
+ font-size: 28rpx;
+ line-height: 86rpx;
+ border: 2rpx solid #DADADA;
+ }
+ .timeitemtap{
+ width: 21%;
+ margin: 0 2% 20rpx;
+ height: 86rpx;
+ border: 2rpx solid #F44B2F;
+ border-radius: 5rpx;
+ font-size: 28rpx;
+ color: #F44B2F;
+ line-height: 86rpx;
+ }
+ }
+ }
+ .toptext{
+ -webkit-overflow-scrolling: touch;
+ padding-top: 10rpx;
+ display: flex;
+ justify-content:space-around;
+ height: 50rpx;
+ color: #000000;
+ line-height: 27rpx;
+ margin-bottom: 30rpx;
+ text-align: center;
+ .Soonerorlater{
+ width: 200rpx;
+ font-size: 36rpx;
+ height: 50rpx;
+ }
+ .Soonerorlaterclass{
+ font-size: 36rpx;
+ color: #F44B2F;
+ width: 200rpx;
+ height: 50rpx;
+ }
+ view:nth-child(2){
+ width: 4rpx;
+ height: 27rpx;
+ background: #C5C3C3;
+ border-radius: 2rpx;
+ }
+ }
+ }
+
+ .item {
+ width: 97%;
+ border-bottom: 1rpx solid #D8D4D4;
+ margin-left: 3%;
+
+ .addition {
+ color: #666666;
+ line-height: 30rpx;
+ font-size: 28rpx;
+ }
+ }
+ }
+
+ .remarks {
+ width: 94%;
+ margin: 10rpx auto;
+ padding: 3%;
+ font-size: 34rpx;
+ height: 96rpx;
+ background: #FFFFFF;
+ border-radius: 20rpx;
+ margin-top: 20rpx;
+ position: relative;
+
+ .span {
+ display: inline-block;
+ width: 20%;
+ // overflow: hidden;
+ // text-overflow: ellipsis;
+ // white-space: nowrap;
+ position: absolute;
+ top:50%;
+ transform: translateY(-50%);
+ }
+ .input-placeholder{
+ color: #C5C3C3;
+ font-size: 30rpx;
+ }
+ input {
+ position: absolute;
+ top: 50%;
+ left: 23%;
+ width: 77%;
+ transform: translateY(-50%);
+ }
+ }
+
+ .priceback {
+ width: 90%;
+ background: #FFFFFF;
+ height: 100rpx;
+ margin: 0 auto;
+
+ .queren {
+ width: 100%;
+ height: 90rpx;
+ background: #4C7BC9;
+ border-radius: 26rpx;
+ margin: 105rpx 0 0 15rpx;
+ line-height: 90rpx;
+ text-align: center;
+ color: #ffffff;
+ }
+ }
+
+ .radio-content {
+ margin: 50rpx auto;
+ width: 70%;
+ text-align: center;
+ font-size: 28rpx;
+ position: relative;
+
+ .agreement {
+ position: absolute;
+ top: 50%;
+ left: 20%;
+ transform: translateY(-50%);
+ color: #878987;
+ }
+
+ .radio-right {
+ height: 100rpx;
+ width: 100rpx;
+
+ .radio {
+ display: inline-block;
+ width: 35rpx;
+ height: 35rpx;
+ border-radius: 70%;
+ border: 2rpx solid #178ffb;
+ position: absolute;
+ top: 50%;
+ left: 5%;
+ transform: translateY(-50%);
+
+ .radio-active {
+ width: 16rpx;
+ height: 16rpx;
+ border-radius: 50%;
+ background-color: #178ffb;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ // margin: 0 auto;
+ }
+ }
+ }
+ }
+
+ .Consumablespackage .money {
+ top: 8%;
+ }
+ /* 耗材包 */
+ .Consumablespackage {
+ width: 94%;
+ margin: 10rpx auto;
+ padding: 3% 0 3% 3%;
+ font-size: 34rpx;
+ background: #FFFFFF;
+ border-radius: 20rpx;
+ margin-top: 20rpx;
+ position: relative;
+ padding-bottom: 40rpx;
+ ::v-deep .u-checkbox__label{
+ width: 100% !important;
+ }
+ .detail {
+ width: 100%;
+ line-height: 100rpx;
+ // padding: 20rpx 0 0 40rpx;
+ position: relative;
+ .itemConsumabletitle{
+ width:55%;
+ position: absolute;
+ top:50%;
+ transform: translateY(-50%);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ display: inline-block;
+ font-size: 28rpx;
+ }
+ /deep/ .u-checkbox{
+ margin: 40rpx 0 0;
+ position: relative;
+ }
+ span{
+ width: 100%;
+ display: inline-block;
+ font-size: 28rpx;
+ color: #D43953;
+ text-align: right;
+ position: absolute;
+ right:5%;
+ top:50%;
+ transform: translateY(-50%);
+ }
+ }
+ }
+
+ /* 套餐 */
+ .Package {
+ width: 97%;
+ height: 500rpx;
+ font-size: 34rpx;
+ background: #FFFFFF;
+ border-radius: 20rpx;
+ margin: 20rpx auto 40rpx;
+ position: relative;
+ .uppicture {
+ border: 1rpx dashed #818181;
+ width: 90%;
+ height: 400rpx;
+ margin: 0 auto;
+ position: relative;
+
+ image {
+ width: 100%;
+ height: 100%;
+ }
+
+ span {
+ font-size: 35rpx;
+ color: #969394;
+ }
+ }
+
+ .checkboxs{
+ margin-top: 30rpx;
+ ::v-deep .u-checkbox{
+ padding-right: 40rpx;
+ }
+ }
+ .detail {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ line-height: 31rpx;
+ font-size: 32rpx;
+ color: #666666;
+ line-height: 31rpx;
+ position: absolute;
+ left: 10%;
+ top: 60%;
+ width: 90%;
+ }
+ }
+
+ .message {
+ width: 94%;
+ background: white;
+ border-radius: 20rpx;
+ margin: 0 auto;
+ text-align: center;
+ line-height: 96rpx;
+ }
+ }
\ No newline at end of file
diff --git a/pages/addexam/addexam.vue b/pages/addexam/addexam.vue
new file mode 100644
index 0000000..23cb116
--- /dev/null
+++ b/pages/addexam/addexam.vue
@@ -0,0 +1,503 @@
+
+
+
+
+ 一、个人信息
+
+
+ 姓名:
+ {{personInfo.realName}}
+
+
+ 手机号:
+ {{personInfo.phone}}
+
+
+ 身份证号:
+ {{personInfo.userName}}
+
+
+ 性别:
+ {{personInfo.sex}}
+
+
+ 出生日期:
+ {{personInfo.birthday}}
+
+
+ 电子邮箱(用于接收考试通知):
+
+
+
+
+
+ 通讯地址:
+
+
+
+
+
+
+
+ 二、教育背景
+
+
+ 最高学历:
+
+
+
+ {{item.name}}
+
+
+
+
+
+ 毕业院校:
+
+
+
+
+
+ 专业(如适用):
+
+
+
+
+
+
+
+ 三、报考信息
+
+ 选择考试
+
+
+
+ 考试名称:
+
+ {{personInfo.title}}
+
+
+
+ 考试日期:
+
+ {{personInfo.startDate}}至{{personInfo.endDate}}
+
+
+
+ 考试时间:
+
+ {{personInfo.startTime}}至{{personInfo.endTime}}
+
+
+
+ 考试费用:
+
+ ¥{{personInfo.examFee}}
+
+
+
+ 报考类别(可选):
+
+
+
+ {{item.name}}
+
+
+
+
+
+ 培训经历(如有):
+
+
+ 机构名称:
+
+
+
+
+
+ 培训时间:
+
+ 选择时间区间
+
+
+ {{personInfo.trainStartDate+'至'}}{{personInfo.trainEndDate}}
+
+
+
+
+
+
+
+ 四、上传材料
+
+
+ 身份证正面:
+
+
+
+
+
+ 身份证反面:
+
+
+
+
+
+ 近期白底免冠证件照(1寸,JPG格式,<20KB):
+
+
+
+
+
+ 学历证明(毕业证或学信网截图):
+
+
+
+
+
+
+
+ 五、声明与签字
+
+
+ 本人确认以上信息真实有效,并同意考试机构核实相关信息。
+
+
+ 签名:
+
+
+
+
+
+ 点此签名
+
+
+
+
+
+ 日期:
+
+ {{personInfo.regTime}}
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/examlist/examlist.vue b/pages/examlist/examlist.vue
new file mode 100644
index 0000000..629821b
--- /dev/null
+++ b/pages/examlist/examlist.vue
@@ -0,0 +1,175 @@
+
+
+
+
+ 新增考试
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+ {{item.examFee}}
+
+
+ 0
+
+
+
+
+ 考试费用:{{item.examFee}}
+
+
+ 考试日期:{{item.startDate}}至{{item.endDate}}
+
+
+ 考试时间:{{item.startTime}}至{{item.endTime}}
+
+
+ 考试时长:{{item.totalTime}}分钟
+
+
+ 试卷总分:{{item.totalScore}}
+
+
+ 考试人员:{{user.name}}
+
+
+ 身份证:{{user.cardNo}}
+
+
+ 手机号:{{user.phone}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/forgotPassword/forgotPassword.scss b/pages/forgotPassword/forgotPassword.scss
new file mode 100644
index 0000000..f930172
--- /dev/null
+++ b/pages/forgotPassword/forgotPassword.scss
@@ -0,0 +1,74 @@
+ .app {
+ height: calc(100vh - 44px);
+ padding: 20rpx 0;
+
+ .item {
+ font-size: 34rpx;
+ margin: 0 auto 20rpx;
+ width: 94%;
+ height: 100rpx;
+ line-height: 100rpx;
+ background-color: #fff;
+ box-shadow: 0px 9rpx 31rpx 9rpx rgba(0, 0, 0, 0.03);
+ border-radius: 20rpx;
+ position: relative;
+
+ .lefttext {
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ left: 3%;
+ }
+
+ .righttext {
+ position: absolute;
+ top: 50%;
+ transform: translateY(-50%);
+ left: 18%;
+ height: 100rpx;
+ }
+
+ .lefttext,
+ .righttext {
+ ::v-deep .uni-input-input {
+ font-size: 34rpx;
+ }
+
+ ::v-deep .uni-input-wrapper {
+ height: 100rpx;
+ line-height: 100rpx;
+ }
+
+ ::v-deep .uni-input-placeholder {
+ line-height: 100rpx;
+ font-size: 34rpx;
+ font-weight: 400;
+ color: #C3C1C1;
+ }
+ }
+
+ .obtaincode {
+ text-align: center;
+ font-size: 36rpx;
+ color: #4C7BC9;
+ line-height: 100rpx;
+ position: absolute;
+ right: 5%;
+ top: 0%;
+ }
+ }
+
+ .loginbtn {
+ width: 80%;
+ height: 100rpx;
+ text-align: center;
+ line-height: 100rpx;
+ background: #4C7BC9;
+ border-radius: 51rpx;
+ font-size: 41rpx;
+ color: #FFFFFF;
+ position: absolute;
+ top: 60%;
+ left: 10%;
+ }
+ }
\ No newline at end of file
diff --git a/pages/forgotPassword/forgotPassword.vue b/pages/forgotPassword/forgotPassword.vue
new file mode 100644
index 0000000..2d2ba20
--- /dev/null
+++ b/pages/forgotPassword/forgotPassword.vue
@@ -0,0 +1,158 @@
+
+
+
+
+ 姓名
+
+
+
+
+
+ 身份证号
+
+
+
+
+
+ 手机号
+
+
+
+
+
+ 输入新密码
+
+
+
+
+
+ 重复新密码
+
+
+
+
+
+ 确定
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/login/login.scss b/pages/login/login.scss
new file mode 100644
index 0000000..5228cf4
--- /dev/null
+++ b/pages/login/login.scss
@@ -0,0 +1,89 @@
+ .app {
+ font-family: DengXian;
+ color: #C3C1C1;
+ font-weight: 400;
+ height:calc(100vh - 44px);
+
+ .switch {
+ text-align: center;
+ height: 100rpx;
+ color: #46ABD7;
+ position: absolute;
+ top: 70%;
+ }
+
+ .loginbtn {
+ width: 80%;
+ height: 100rpx;
+ text-align: center;
+ line-height: 100rpx;
+ background: #4C7BC9;
+ border-radius: 51rpx;
+ font-size: 41rpx;
+ color: #FFFFFF;
+ position: absolute;
+ top: 57%;
+ left: 10%;
+ }
+
+ .loginphone {
+ background-color: #fff;
+ width: 80%;
+ height: 120rpx;
+ position: absolute;
+ left: 10%;
+ top: 23%;
+
+ input {
+ font-size: 45rpx;
+ color: #000000;
+ }
+
+ ::v-deep .uni-input-placeholder {
+ padding-left: 40rpx;
+ font-size: 41rpx;
+ font-weight: 400;
+ color: #C3C1C1;
+ }
+
+ .phone {
+ padding-left: 40rpx;
+ height: 100%;
+ box-shadow: 0px 9px 31px 9px rgba(0, 0, 0, 0.03);
+ }
+ }
+
+ .logincode {
+ position: absolute;
+ left: 10%;
+
+ .obtaincode {
+ text-align: center;
+ font-size: 37rpx;
+ color: #4C7BC9;
+ line-height: 162rpx;
+ position: absolute;
+ left: 65%;
+ top: 0%;
+ }
+
+ ::v-deep .u-input__input {
+ padding-left: 20rpx;
+ color: #000000;
+ font-size: 42rpx;
+ font-weight: 400;
+ height: 100%;
+ }
+ }
+
+ .title {
+ height: 50rpx;
+ font-size: 52rpx;
+ font-weight: bold;
+ color: #000000;
+ line-height: 44rpx;
+ position: absolute;
+ top: 13%;
+ left: 13%;
+ }
+ }
\ No newline at end of file
diff --git a/pages/login/login.vue b/pages/login/login.vue
new file mode 100644
index 0000000..9081573
--- /dev/null
+++ b/pages/login/login.vue
@@ -0,0 +1,116 @@
+
+
+
+ 账号登录
+
+
+
+
+
+
+
+
+ 登录
+
+
+
+ 没有账号,请先注册
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/register/register.scss b/pages/register/register.scss
new file mode 100644
index 0000000..56c9b6d
--- /dev/null
+++ b/pages/register/register.scss
@@ -0,0 +1,162 @@
+ .app {
+ height:calc(100vh - 44px);
+ padding:20rpx 0;
+
+ .Agreement{
+ width: 100%;
+ background-color: #F4F5F7;
+ text-align: center;
+ height: 1000rpx;
+ position: absolute;
+ top:5%;
+ font-size: 30rpx;
+ .title{
+ height: 100rpx;
+ line-height: 100rpx;
+ border-bottom: 1px solid #eeeeee;
+ font-size: 34rpx;
+ margin: 0px auto;
+ width: 100%;
+ text-align: center;
+ }
+ .scroll-Y{
+ height:830rpx ;
+ overflow-y:scroll;
+ text-align: left;
+ text-indent: 2em;
+ }
+ .cancel {
+ height:70rpx;
+ line-height: 70rpx;
+ font-size: 32rpx;
+ background-color: #F4F5F7;
+ position: absolute;
+ border-top: 1rpx solid #000000;
+ bottom:0;
+ right:0;
+ width: 50%;
+ color: #000000;
+ }
+ .determine {
+ height:70rpx;
+ line-height: 70rpx;
+ font-size: 32rpx;
+ width: 50%;
+ color: #F4F5F7;
+ background: #4C7BC9;
+ position: absolute;
+ bottom:0;
+ left:0;
+ }
+ }
+ .item{
+ font-size: 34rpx;
+ margin: 0 auto 20rpx;
+ width: 94%;
+ height:100rpx;
+ line-height: 100rpx;
+ background-color: #fff;
+ box-shadow: 0px 9rpx 31rpx 9rpx rgba(0,0,0,0.03);
+ border-radius: 20rpx;
+ position: relative;
+ .lefttext{
+ position: absolute;
+ top:50%;
+ transform: translateY(-50%);
+ left:3%;
+ }
+ .righttext{
+ position: absolute;
+ top:50%;
+ transform: translateY(-50%);
+ width: 68%;
+ left:18%;
+ height:100rpx;
+ }
+ .lefttext,.righttext{
+ ::v-deep .uni-input-input{
+ font-size: 34rpx;
+ }
+ ::v-deep .uni-input-wrapper{
+ height:100rpx;
+ line-height: 100rpx;
+ }
+ ::v-deep .uni-input-placeholder {
+ line-height: 100rpx;
+ font-size: 34rpx;
+ font-weight: 400;
+ color: #C3C1C1;
+ }
+ }
+ .obtaincode {
+ text-align: center;
+ font-size: 36rpx;
+ color: #4C7BC9;
+ line-height: 100rpx;
+ position: absolute;
+ right:5%;
+ top: 0%;
+ }
+ }
+ .radio-content {
+ margin: 50rpx auto;
+ width: 70%;
+ text-align: center;
+ font-size: 28rpx;
+ position: relative;
+ .agreement {
+ position: absolute;
+ top:50%;
+ left:20%;
+ transform: translateY(-50%);
+ color: #878987;
+ }
+ .radio-right {
+ height: 100rpx;
+
+ .radio {
+ display: inline-block;
+ width: 35rpx;
+ height: 35rpx;
+ border-radius: 70%;
+ border: 2rpx solid #178ffb;
+ position: absolute;
+ top:50%;
+ left:5%;
+ transform: translateY(-50%);
+ .radio-active {
+ width: 16rpx;
+ height: 16rpx;
+ border-radius: 50%;
+ background-color: #178ffb;
+ position: absolute;
+ top:50%;
+ left:50%;
+ transform: translate(-50%,-50%);
+ }
+ }
+ }
+ }
+ .switch {
+ text-align: center;
+ line-height: 60rpx;
+ color: #46ABD7;
+ position: absolute;
+ top: 73%;
+ }
+
+ .loginbtn {
+ width: 70%;
+ height: 100rpx;
+ text-align: center;
+ line-height: 100rpx;
+ background: #4C7BC9;
+ border-radius: 51rpx;
+ font-size: 41rpx;
+ color: #FFFFFF;
+ position: absolute;
+ top: 62%;
+ left: 15%;
+ }
+
+ }
\ No newline at end of file
diff --git a/pages/register/register.vue b/pages/register/register.vue
new file mode 100644
index 0000000..d579686
--- /dev/null
+++ b/pages/register/register.vue
@@ -0,0 +1,247 @@
+
+
+
+
+ 姓名
+
+
+
+
+
+ 身份证号
+
+
+
+
+
+ 手机号
+
+
+
+
+
+ 输入密码
+
+
+
+
+
+ 重复密码
+
+
+
+
+
+ 注册
+
+
+ 已有账号,去登录
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/user/user.vue b/pages/user/user.vue
new file mode 100644
index 0000000..b2cab40
--- /dev/null
+++ b/pages/user/user.vue
@@ -0,0 +1,240 @@
+
+
+
+
+
+
+ {{Personallist.realName}}
+
+
+ {{Personallist.userName}}
+
+
+
+
+
+ 登录
+
+
+
+
+
+
+ 退出账号
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/static/autograph.png b/static/autograph.png
new file mode 100644
index 0000000..201ff68
Binary files /dev/null and b/static/autograph.png differ
diff --git a/static/homepage.png b/static/homepage.png
new file mode 100644
index 0000000..294bb46
Binary files /dev/null and b/static/homepage.png differ
diff --git a/static/homepagew.png b/static/homepagew.png
new file mode 100644
index 0000000..fff7d18
Binary files /dev/null and b/static/homepagew.png differ
diff --git a/static/homepagews.png b/static/homepagews.png
new file mode 100644
index 0000000..d7c5558
Binary files /dev/null and b/static/homepagews.png differ
diff --git a/static/jinbi.png b/static/jinbi.png
new file mode 100644
index 0000000..03eef96
Binary files /dev/null and b/static/jinbi.png differ
diff --git a/static/shezhi.png b/static/shezhi.png
new file mode 100644
index 0000000..6114ee5
Binary files /dev/null and b/static/shezhi.png differ
diff --git a/static/user2.png b/static/user2.png
new file mode 100644
index 0000000..dac4233
Binary files /dev/null and b/static/user2.png differ
diff --git a/static/users.png b/static/users.png
new file mode 100644
index 0000000..05d94fe
Binary files /dev/null and b/static/users.png differ
diff --git a/static/userw.png b/static/userw.png
new file mode 100644
index 0000000..77902b7
Binary files /dev/null and b/static/userw.png differ
diff --git a/uni.promisify.adaptor.js b/uni.promisify.adaptor.js
new file mode 100644
index 0000000..5fec4f3
--- /dev/null
+++ b/uni.promisify.adaptor.js
@@ -0,0 +1,13 @@
+uni.addInterceptor({
+ returnValue (res) {
+ if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) {
+ return res;
+ }
+ return new Promise((resolve, reject) => {
+ res.then((res) => {
+ if (!res) return resolve(res)
+ return res[0] ? reject(res[0]) : resolve(res[1])
+ });
+ });
+ },
+});
\ No newline at end of file
diff --git a/uni.scss b/uni.scss
new file mode 100644
index 0000000..236ab03
--- /dev/null
+++ b/uni.scss
@@ -0,0 +1,77 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+/* uni.scss */
+@import 'uview-ui/theme.scss';
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16px;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;