flat: init

This commit is contained in:
史典卓
2024-11-08 11:55:23 +08:00
commit 0e64009a8a
80 changed files with 10529 additions and 0 deletions

16
.hbuilderx/launch.json Normal file
View File

@@ -0,0 +1,16 @@
{ // launch.json 配置了启动调试时相关设置configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
// launchtype项可配置值为local或remote, local代表前端连本地云函数remote代表前端连云端云函数
"version": "0.0",
"configurations": [{
"default" :
{
"launchtype" : "local"
},
"mp-weixin" :
{
"launchtype" : "local"
},
"type" : "uniCloud"
}
]
}

26
App.vue Normal file
View File

@@ -0,0 +1,26 @@
<script setup>
import useUserStore from './stores/useUserStore';
import { onLaunch, onShow, onHide } from '@dcloudio/uni-app';
const userStore = useUserStore();
onLaunch(() => {
console.log('App Launch');
let openId = uni.getStorageSync('openId') || ''; // 同步获取 缓存信息
if (openId) {
console.log('有openid');
} else {
console.log('没有openid');
}
});
onShow(() => {
console.log('App Show');
});
onHide(() => {
console.log('App Hide');
});
</script>
<style>
/*每个页面公共css */
@import '@/common/common.css';
</style>

309
common/common.css Normal file
View File

@@ -0,0 +1,309 @@
/* 公共样式表 */
page {
height: 100%;
min-height: calc(100vh - var(--window-top) - var(--status-bar-height) - var(--window-bottom));
font-size: 28rpx;
background-color: #f4f4f4;
/* line-height: 1.8; */
color: #333333;
overflow: hidden;
}
image {
width: 100%;
height: 100%;
}
.page-body {
height: calc(100vh - var(--window-top) - var(--status-bar-height) - var(--window-bottom));
}
body,
html {
height: 100%;
width: 100%;
overflow-x: hidden;
}
/* 布局调整 */
/* 控制hover */
.opctiy_8 {
opacity: 0.8 !important;
}
.opctiy_7 {
opacity: 0.7 !important;
}
.opctiy_6 {
opacity: 0.6 !important;
}
.opctiy_5 {
opacity: 0.5 !important;
}
.opctiy_4 {
opacity: 0.4 !important;
}
.opctiy_3 {
opacity: 0.3 !important;
}
.opctiy_2 {
opacity: 0.2 !important;
}
.opctiy_1 {
opacity: 0.1 !important;
}
/* 控制文字大小 */
.fs_10 {
font-size: 20rpx !important;
}
.fs_12 {
font-size: 24rpx !important;
}
.fs_14 {
font-size: 28rpx !important;
}
.fs_16 {
font-size: 32rpx !important;
}
.fs_18 {
font-size: 36rpx !important;
}
.fs_20 {
font-size: 40rpx !important;
}
.fs_22 {
font-size: 44rpx !important;
}
.fs_24 {
font-size: 48rpx !important;
}
.fs_26 {
font-size: 52rpx !important;
}
.fs_28 {
font-size: 56rpx !important;
}
.fs_30 {
font-size: 60rpx !important;
}
.fs_32 {
font-size: 64rpx !important;
}
/* 控制字体粗细 */
.fw_blod {
font-weight: bold;
}
/* 控制字体颜色 */
.color_D16B3F {
color: #D16B3F !important;
}
.color_C7331D {
color: #C7331D !important;
}
.color_666666 {
color: #666666 !important;
}
.color_F8A52F {
color: #F8A52F !important;
}
.color_999999 {
color: #999999 !important;
}
.color_C7331D {
color: #C7331D !important;
}
.color_333333 {
color: #333333 !important;
}
.color_FFFFFF {
color: #FFFFFF !important;
}
.color_E7612E {
color: #E7612E !important;
}
.color_EF4B37 {
color: #EF4B37 !important;
}
.color_5F5F5F {
color: #5F5F5F !important;
}
.color_FB7307 {
color: #FB7307 !important;
}
.color_4873D9 {
color: #4873D9 !important;
}
.color_4E8ADE {
color: #4E8ADE !important;
}
.color_D9D9D9 {
color: #D9D9D9 !important;
}
/* 控制左右距离 */
.mar_le30 {
margin-left: 60rpx;
}
.mar_le25 {
margin-left: 50rpx;
}
.mar_le20 {
margin-left: 40rpx;
}
.mar_le15 {
margin-left: 30rpx;
}
.mar_le10 {
margin-left: 20rpx;
}
.mar_le5 {
margin-left: 10rpx;
}
.mar_ri5 {
margin-right: 10rpx;
}
.mar_ri10 {
margin-right: 20rpx;
}
.mar_ri15 {
margin-right: 30rpx;
}
.mar_ri20 {
margin-right: 40rpx;
}
.mar_ri25 {
margin-right: 50rpx;
}
.mar_top5 {
margin-top: 10rpx;
}
.mar_top10 {
margin-top: 20rpx;
}
.mar_top15 {
margin-top: 30rpx;
}
.mar_top20 {
margin-top: 40rpx;
}
.mar_top25 {
margin-top: 50rpx;
}
/* 控制字体粗细 */
.fw_blod {
font-weight: bold !important;
}
/* 控制背景色 */
.bg_e8 {
background-color: #e8e8e8 !important;
}
/* 控制背景色 */
.bg_cc {
background-color: #CCCCCC !important;
}
/* 控制背景色 */
.bg_ff {
background-color: #ffffff !important;
}
/* 弹性布局 */
.fl_box {
display: flex;
}
.fl_deri {
flex-direction: column;
}
.fl_row {
flex-direction: row;
}
.fl_justmiddle {
justify-content: center;
}
.fl_juststart {
justify-content: flex-start;
}
.fl_justbet {
justify-content: space-between;
}
.fl_justround {
justify-content: space-around;
}
.fl_justend {
justify-content: flex-end;
}
.fl_almiddle {
align-items: center;
}
.fl_alstart {
align-items: flex-start;
}
.fl_alend {
align-items: flex-end;
}

76
common/globalFunction.js Normal file
View File

@@ -0,0 +1,76 @@
import useUserStore from "../stores/useUserStore";
const msg = (title, duration = 1500, mask = false, icon = 'none', image) => {
if (Boolean(title) === false) {
return;
}
uni.showToast({
title,
duration,
mask,
icon,
image
});
}
const prePage = () => {
let pages = getCurrentPages();
let prePage = pages[pages.length - 2];
return prePage.$vm;
}
const navTo = function(url, needLogin) {
if (needLogin && useUserStore().hasLogin) {
uni.navigateTo({
url: '/pages/login/login'
});
return
}
uni.navigateTo({
url
});
}
function getdeviceInfo() {
const globalData = {
statusBarHeight: 0, // 状态导航栏高度
topHeight: 0, // 距离顶部高度
navHeight: 0, // 总体高度
windowHeight: 0, // 可使用窗口高度
tabBarHight: 0, //底部导航栏高度
};
let systemInfo = uni.getSystemInfoSync()
globalData.windowHeight = systemInfo.screenHeight
// 底部导航栏
globalData.tabBarHight = systemInfo.screenHeight - systemInfo.safeArea.bottom
// 状态栏高度
globalData.statusBarHeight = systemInfo.statusBarHeight
// #ifdef MP-MP-WEIXIN
let menuButtonInfo = uni.getMenuButtonBoundingClientRect()
// 胶囊距离顶部高度
globalData.topHeight = menuButtonInfo.top
// 胶囊高度
globalData.navHeight = menuButtonInfo.height
// #endif
return {
...globalData
}
}
function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time))
}
export default {
'$api': {
msg,
prePage,
sleep
},
navTo,
getdeviceInfo
}

24
config.js Normal file
View File

@@ -0,0 +1,24 @@
export default {
baseUrl: '', // 测试
// 应用信息
appInfo: {
// 应用名称
name: "青岛市就业服务",
// 应用版本
version: "1.0.0",
// 应用logo
logo: "",
// 官方网站
site_url: "",
// 政策协议
agreements: [{
title: "隐私政策",
url: ""
},
{
title: "用户服务协议",
url: ""
}
]
}
}

20
index.html Normal file
View File

@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div id="app"><!--app-html--></div>
<script type="module" src="/main.js"></script>
</body>
</html>

18
main.js Normal file
View File

@@ -0,0 +1,18 @@
import App from './App'
import * as Pinia from 'pinia'
import globalFunction from './common/globalFunction'
import request from './utils/request'
import {
createSSRApp
} from 'vue'
export function createApp() {
const app = createSSRApp(App)
app.use(Pinia.createPinia());
app.provide('globalFunction', globalFunction);
app.provide('deviceInfo', globalFunction.getdeviceInfo());
return {
app,
Pinia
}
}

81
manifest.json Normal file
View File

@@ -0,0 +1,81 @@
{
"name": "qingdao-employment-service",
"appid": "__UNI__C939371",
"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": [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios */
"ios": {},
/* SDK */
"sdkConfigs": {}
}
},
/* */
"quickapp": {},
/* */
"mp-weixin": {
"appid": "",
"setting": {
"urlCheck": false,
"es6": true,
"postcss": true,
"minified": true
},
"usingComponents": true,
"permission": {
"scope.userLocation": {
"desc": "用于用户选择地图查看位置"
}
}
},
"mp-alipay": {
"usingComponents": true
},
"mp-baidu": {
"usingComponents": true
},
"mp-toutiao": {
"usingComponents": true
},
"uniStatistics": {
"enable": false
},
"vueVersion": "3",
"locale": "zh-Hans"
}

73
pages.json Normal file
View File

@@ -0,0 +1,73 @@
{
"pages": [ //pages数组中第一项表示应用启动页参考https://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "uni-app"
}
},
{
"path": "pages/mine/mine",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/msglog/msglog",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/careerfair/careerfair",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/login/login",
"style": {
"navigationBarTitleText": "登录",
"navigationStyle": "custom"
}
}
],
"tabBar": {
"color": "#7A7E83",
"selectedColor": "#3cc51f",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"list": [{
"pagePath": "pages/index/index",
"iconPath": "static/tabbar/post.png",
"selectedIconPath": "static/tabbar/posted.png",
"text": "职位"
},
{
"pagePath": "pages/careerfair/careerfair",
"iconPath": "static/tabbar/calendar.png",
"selectedIconPath": "static/tabbar/calendared.png",
"text": "招聘会"
},
{
"pagePath": "pages/msglog/msglog",
"iconPath": "static/tabbar/chat4.png",
"selectedIconPath": "static/tabbar/chat4.png",
"text": "消息"
},
{
"pagePath": "pages/mine/mine",
"iconPath": "static/tabbar/mine.png",
"selectedIconPath": "static/tabbar/mine.png",
"text": "我的"
}
]
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {}
}

View File

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

35
pages/index/index.vue Normal file
View File

@@ -0,0 +1,35 @@
<template>
<view class="content"></view>
</template>
<script setup>
import { reactive, inject, watch } from 'vue';
import { onLoad, onShow } from '@dcloudio/uni-app';
import useUserStore from '../../stores/useUserStore';
const { $api, navTo } = inject('globalFunction');
const userStore = useUserStore();
const state = reactive({
title: '123123123房贷首付打的手机家里好玩的很浓厚第卡后sdhiwohdijasnbdhoui1很努力',
});
onShow(() => {
console.log('onShow');
});
onLoad(() => {
console.log('onLoad');
$api.sleep(2000).then(() => {
navTo('/pages/login/login');
});
});
watch(
() => state.title,
(newValue, oldValue) => {},
{ deep: true }
);
</script>
<style lang="stylus" scoped>
.logo
width: 100px;
height: 100px;
</style>

View File

@@ -0,0 +1,71 @@
<template>
<view class="tab-container">
<view class="uni-margin-wrap">
<swiper
class="swiper"
:current="current"
:circular="false"
:indicator-dots="false"
:autoplay="false"
:duration="500"
>
<swiper-item @touchmove.stop="false">
<slot name="tab0"></slot>
</swiper-item>
<swiper-item @touchmove.stop="false">
<slot name="tab1"></slot>
</swiper-item>
<swiper-item @touchmove.stop="false">
<slot name="tab2"></slot>
</swiper-item>
<swiper-item @touchmove.stop="false">
<slot name="tab3"></slot>
</swiper-item>
<swiper-item @touchmove.stop="false">
<slot name="tab4"></slot>
</swiper-item>
<swiper-item @touchmove.stop="false">
<slot name="tab5"></slot>
</swiper-item>
<swiper-item @touchmove.stop="false">
<slot name="tab6"></slot>
</swiper-item>
</swiper>
</view>
</view>
</template>
<script>
export default {
name: 'tab',
data() {
return {};
},
props: {
current: {
type: Number,
default: 0,
},
},
};
</script>
<style lang="stylus">
.tab-container
width: 100%
height: 100%
display: flex
align-items: center
justify-content: center
flex-direction: row
.uni-margin-wrap
width: 100%
height: 100%
.swiper
width: 100%
height: 100%
.swiper-item
display: block;
width: 100%
height: 100%
</style>

316
pages/login/login.vue Normal file
View File

@@ -0,0 +1,316 @@
<template>
<view class="container">
<view :style="{ height: statusBarHeight + 'px' }"></view>
<tabcontrolVue :current="tabCurrent">
<!-- tab0 -->
<template v-slot:tab0>
<view class="login-content">
<image class="logo" src="../../static/logo.png"></image>
<view class="logo-title">就业</view>
</view>
<view class="btns">
<button open-type="getUserInfo" @getuserinfo="getuserinfo" class="wxlogin">微信登录</button>
<view class="wxaddress">青岛市公共就业和人才服务中心</view>
</view>
</template>
<!-- tab1 -->
<template v-slot:tab1>
<view class="tabtwo">
<view class="tabtwo-top">
<view class="color_FFFFFF fs_30">选择您的性别1/6</view>
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="fl_box fl_justmiddle">
<view class="tabtwo-sex">
<image class="sex-img" src="../../static/icon/woman.png"></image>
<view class="mar_top5"></view>
<view class="dot"></view>
</view>
<view class="tabtwo-sex">
<image class="sex-img" src="../../static/icon/man.png"></image>
<view class="mar_top5"></view>
<view class="dot doted"></view>
</view>
</view>
<view class="nextstep" @tap="nextStep">下一步</view>
</view>
</template>
<!-- tab2 -->
<template v-slot:tab2>
<view class="tabtwo">
<view class="tabtwo-top">
<view class="color_FFFFFF fs_30">选择您的年龄断段2/6</view>
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="fl_box fl_deri fl_almiddle">
<view class="agebtn agebtned">30岁以下</view>
<view class="agebtn">31-40</view>
<view class="agebtn">41-50</view>
<view class="agebtn">51岁以上</view>
</view>
<view class="fl_box fl_justmiddle"></view>
<view class="nextstep" @tap="nextStep">下一步</view>
</view>
</template>
<!-- tab3 -->
<template v-slot:tab3>
<view class="tabtwo">
<view class="tabtwo-top">
<view class="color_FFFFFF fs_30">选择您的学历3/6</view>
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="eduction-content">
<view class="eductionbtn eductionbtned">初中及以下</view>
<view class="eductionbtn">中专/中技</view>
<view class="eductionbtn">高中</view>
<view class="eductionbtn">大专</view>
<view class="eductionbtn">本科</view>
<view class="eductionbtn">硕士</view>
<view class="eductionbtn">博士</view>
<view class="eductionbtn">MBA/EMBA</view>
<view class="eductionbtn">留学-学士</view>
<view class="eductionbtn">留学-硕士</view>
<view class="eductionbtn">留学-博士</view>
</view>
<view class="fl_box fl_justmiddle"></view>
<view class="nextstep" @tap="nextStep">下一步</view>
</view>
</template>
<!-- tab4 -->
<template v-slot:tab4>
<view class="tabtwo">
<view class="tabtwo-top">
<view class="color_FFFFFF fs_30">您期望的薪资范围4/6</view>
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="salary">
<scroll-view class="salary-content" :show-scrollbar="false" :scroll-y="true">
<view class="salary-content-item">不限</view>
<view class="salary-content-item">2k</view>
<view class="salary-content-item">5k</view>
<view class="salary-content-item">10k</view>
<view class="salary-content-item">15k</view>
</scroll-view>
<view class="center-text"></view>
<scroll-view class="salary-content" :show-scrollbar="false" :scroll-y="true">
<view class="salary-content-item">不限</view>
<view class="salary-content-item">2k</view>
<view class="salary-content-item">5k</view>
<view class="salary-content-item">10k</view>
<view class="salary-content-item">15k</view>
</scroll-view>
</view>
<view class="fl_box fl_justmiddle"></view>
<view class="nextstep" @tap="nextStep">下一步</view>
</view>
</template>
<!-- tab5 -->
<template v-slot:tab5>
<view class="tabtwo">
<view class="tabtwo-top">
<view class="color_FFFFFF fs_30">您期望的求职区域5/6</view>
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="fl_box fl_justmiddle"></view>
<view class="nextstep" @tap="nextStep">下一步</view>
</view>
</template>
<!-- tab6 -->
<template v-slot:tab6>
<view class="tabtwo">
<view class="tabtwo-top">
<view class="color_FFFFFF fs_30">您的期望岗位6/6</view>
<view class="color_D9D9D9">个人信息仅用于推送优质内容</view>
</view>
<view class="fl_box fl_justmiddle"></view>
<!-- <view class="nextstep" @tap="complate">完成</view> -->
<navigator url="/pages/index/index" open-type="reLaunch" hover-class="other-navigator-hover">
<button class="nextstep" @tap="complate">完成</button>
</navigator>
</view>
</template>
</tabcontrolVue>
</view>
</template>
<script setup>
import tabcontrolVue from './components/tabcontrol.vue';
import { reactive, inject, watch, ref } from 'vue';
const { statusBarHeight } = inject('deviceInfo');
const { $api, navTo } = inject('globalFunction');
const tabCurrent = ref(4);
const state = reactive({
sex: 1,
});
setTimeout(() => {
console.log('gg');
}, 4000);
const getuserinfo = (e) => {
console.log(e);
};
function nextStep() {
tabCurrent.value += 1;
}
function handleScroll(event) {
console.log('滚动条滚动', event.detail.scrollTop);
console.log(Math.round(event.detail.scrollTop / 75));
// this.activeIndex = Math.round(event.detail.scrollTop / 75);
}
</script>
<style lang="stylus">
.container
width: 100%;
height: 100%
background: linear-gradient(#4778EC, #002979);
position: relative;
.login-content
position: absolute;
left: 50%;
top: 40%;
transform: translate(-50%, -50%);
display: flex;
align-items: flex-end;
flex-wrap: nowrap;
.logo
width: 266rpx;
height: 182rpx;
.logo-title
font-size: 88rpx;
color: #FFFFFF;
width: 180rpx;
.btns
position: absolute;
top: 70%;
left: 50%;
transform: translate(-50%, 0)
.wxlogin
width: 562rpx;
height: 140rpx;
border-radius: 70rpx;
background-color: #13C57C;
color: #FFFFFF;
text-align: center;
line-height: 140rpx;
font-size: 70rpx;
.wxaddress
color: #BBBBBB;
margin-top: 70rpx;
text-align: center;
// 2
.tabtwo
padding: 40rpx;
display: flex;
flex-direction: column;
align-items: center;
.tabtwo-top
margin: 222rpx 0 0 0;
width: 100%;
.tabtwo-sex
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: #FFFFFF;
font-size: 40rpx;
margin: 200rpx 60rpx 0 60rpx;
.sex-img
width: 184rpx;
height: 184rpx;
.dot
width: 68rpx;
height: 68rpx;
border-radius: 50%;
background: #d1d1d6;
position: relative;
.dot:before
content: '';
width: 44rpx;
height: 44rpx;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
background: #1e4baa;
.doted
background: #13C57C;
.doted:after{
content: '';
width: 34rpx;
height: 34rpx;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 50%
background: #13C57C;
}
.agebtn
width: 630rpx;
height: 108rpx;
border-radius: 20rpx;
background: #d9d9d9;
text-align: center;
line-height: 108rpx;
font-size: 40rpx;
margin-top: 50rpx;
color: #606060;
.agebtned
background: #13C57C;
color: #FFFFFF;
.nextstep
position: absolute;
top: 80%;
left: 50%;
transform: translate(-50%, 0)
width: 630rpx;
height: 98rpx;
border-radius: 20rpx;
background: #13C57C;
text-align: center;
line-height: 98rpx;
font-size: 36rpx;
color: #FFFFFF;
.eduction-content
width: fit-content;
display: grid;
grid-template-columns: 300rpx 300rpx;
grid-gap: 20rpx;
margin-top: 50rpx;
.eductionbtn
width: 300rpx;
height: 108rpx;
border-radius: 20rpx;
background: #d9d9d9;
text-align: center;
line-height: 108rpx;
font-size: 36rpx;
color: #606060;
.eductionbtned
background: #13C57C;
color: #FFFFFF;
.salary
width: fit-content;
display: grid;
grid-template-columns: 300rpx auto 300rpx;
// grid-gap: 20rpx;
margin-top: 50rpx;
.center-text
color: #FFFFFF;
text-align: center;
line-height: 400rpx;
.salary-content
width: 300rpx;
height: 380rpx;
.salary-content-item
height: 104rpx;
line-height: 104rpx;
margin: 20rpx 10rpx 20rpx 10rpx;
border-radius: 20rpx;
background: #d9d9d9;
text-align: center;
</style>

19
pages/mine/mine.vue Normal file
View File

@@ -0,0 +1,19 @@
<template>
<view>
</view>
</template>
<script>
export default {
data() {
return {
};
}
}
</script>
<style lang="stylus">
</style>

19
pages/msglog/msglog.vue Normal file
View File

@@ -0,0 +1,19 @@
<template>
<view>
</view>
</template>
<script>
export default {
data() {
return {
};
}
}
</script>
<style lang="stylus">
</style>

BIN
static/icon/man.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
static/icon/woman.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
static/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
static/logo2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
static/tabbar/calendar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

BIN
static/tabbar/chat4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 B

BIN
static/tabbar/mine.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

BIN
static/tabbar/post.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

BIN
static/tabbar/posted.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

41
stores/useUserStore.js Normal file
View File

@@ -0,0 +1,41 @@
import {
defineStore
} from 'pinia';
import {
ref
} from 'vue'
const useUserStore = defineStore("user", () => {
// 定义状态
const hasLogin = ref(false)
const openId = ref('')
const userInfo = ref({});
const token = ref('测试token')
const login = (value) => {
hasLogin.value = true;
userInfo.value = value;
openId.value = value.wxOpenId;
token.value = value.token
uni.setStorage({
key: 'token',
data: value.token
});
}
const logOut = () => {
hasLogin = false;
}
// 导入
return {
hasLogin,
openId,
userInfo,
token,
login,
logOut
}
})
export default useUserStore;

13
uni.promisify.adaptor.js Normal file
View File

@@ -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])
});
});
},
});

76
uni.scss Normal file
View File

@@ -0,0 +1,76 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
$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;

View File

@@ -0,0 +1,8 @@
{
"hash": "6f4322a0",
"configHash": "f1ef1766",
"lockfileHash": "5d26acb0",
"browserHash": "9757e8c9",
"optimized": {},
"chunks": {}
}

View File

@@ -0,0 +1,3 @@
{
"type": "module"
}

47
unpackage/dist/dev/mp-weixin/app.js vendored Normal file
View File

@@ -0,0 +1,47 @@
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const common_vendor = require("./common/vendor.js");
const stores_useUserStore = require("./stores/useUserStore.js");
const common_globalFunction = require("./common/globalFunction.js");
if (!Math) {
"./pages/index/index.js";
"./pages/mine/mine.js";
"./pages/msglog/msglog.js";
"./pages/careerfair/careerfair.js";
"./pages/login/login.js";
}
const _sfc_main = {
__name: "App",
setup(__props) {
stores_useUserStore.useUserStore();
common_vendor.onLaunch(() => {
console.log("App Launch");
let openId = common_vendor.index.getStorageSync("openId") || "";
if (openId) {
console.log("有openid");
} else {
console.log("没有openid");
}
});
common_vendor.onShow(() => {
console.log("App Show");
});
common_vendor.onHide(() => {
console.log("App Hide");
});
return () => {
};
}
};
function createApp() {
const app = common_vendor.createSSRApp(_sfc_main);
app.use(common_vendor.createPinia());
app.provide("globalFunction", common_globalFunction.globalFunction);
app.provide("deviceInfo", common_globalFunction.globalFunction.getdeviceInfo());
return {
app,
Pinia: common_vendor.Pinia
};
}
createApp().app.mount("#app");
exports.createApp = createApp;

53
unpackage/dist/dev/mp-weixin/app.json vendored Normal file
View File

@@ -0,0 +1,53 @@
{
"pages": [
"pages/index/index",
"pages/mine/mine",
"pages/msglog/msglog",
"pages/careerfair/careerfair",
"pages/login/login"
],
"window": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"color": "#7A7E83",
"selectedColor": "#3cc51f",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"list": [
{
"pagePath": "pages/index/index",
"iconPath": "static/tabbar/post.png",
"selectedIconPath": "static/tabbar/posted.png",
"text": "职位"
},
{
"pagePath": "pages/careerfair/careerfair",
"iconPath": "static/tabbar/calendar.png",
"selectedIconPath": "static/tabbar/calendared.png",
"text": "招聘会"
},
{
"pagePath": "pages/msglog/msglog",
"iconPath": "static/tabbar/chat4.png",
"selectedIconPath": "static/tabbar/chat4.png",
"text": "消息"
},
{
"pagePath": "pages/mine/mine",
"iconPath": "static/tabbar/mine.png",
"selectedIconPath": "static/tabbar/mine.png",
"text": "我的"
}
]
},
"permission": {
"scope.userLocation": {
"desc": "用于用户选择地图查看位置"
}
},
"usingComponents": {}
}

238
unpackage/dist/dev/mp-weixin/app.wxss vendored Normal file
View File

@@ -0,0 +1,238 @@
/*每个页面公共css */
/* 公共样式表 */
page {
height: 100%;
min-height: calc(100vh - var(--window-top) - var(--status-bar-height) - var(--window-bottom));
font-size: 28rpx;
background-color: #f4f4f4;
/* line-height: 1.8; */
color: #333333;
overflow: hidden;
}
image {
width: 100%;
height: 100%;
}
.page-body {
height: calc(100vh - var(--window-top) - var(--status-bar-height) - var(--window-bottom));
}
body,
html {
height: 100%;
width: 100%;
overflow-x: hidden;
}
/* 布局调整 */
/* 控制hover */
.opctiy_8 {
opacity: 0.8 !important;
}
.opctiy_7 {
opacity: 0.7 !important;
}
.opctiy_6 {
opacity: 0.6 !important;
}
.opctiy_5 {
opacity: 0.5 !important;
}
.opctiy_4 {
opacity: 0.4 !important;
}
.opctiy_3 {
opacity: 0.3 !important;
}
.opctiy_2 {
opacity: 0.2 !important;
}
.opctiy_1 {
opacity: 0.1 !important;
}
/* 控制文字大小 */
.fs_10 {
font-size: 20rpx !important;
}
.fs_12 {
font-size: 24rpx !important;
}
.fs_14 {
font-size: 28rpx !important;
}
.fs_16 {
font-size: 32rpx !important;
}
.fs_18 {
font-size: 36rpx !important;
}
.fs_20 {
font-size: 40rpx !important;
}
.fs_22 {
font-size: 44rpx !important;
}
.fs_24 {
font-size: 48rpx !important;
}
.fs_26 {
font-size: 52rpx !important;
}
.fs_28 {
font-size: 56rpx !important;
}
.fs_30 {
font-size: 60rpx !important;
}
.fs_32 {
font-size: 64rpx !important;
}
/* 控制字体粗细 */
.fw_blod {
font-weight: bold;
}
/* 控制字体颜色 */
.color_D16B3F {
color: #D16B3F !important;
}
.color_C7331D {
color: #C7331D !important;
}
.color_666666 {
color: #666666 !important;
}
.color_F8A52F {
color: #F8A52F !important;
}
.color_999999 {
color: #999999 !important;
}
.color_C7331D {
color: #C7331D !important;
}
.color_333333 {
color: #333333 !important;
}
.color_FFFFFF {
color: #FFFFFF !important;
}
.color_E7612E {
color: #E7612E !important;
}
.color_EF4B37 {
color: #EF4B37 !important;
}
.color_5F5F5F {
color: #5F5F5F !important;
}
.color_FB7307 {
color: #FB7307 !important;
}
.color_4873D9 {
color: #4873D9 !important;
}
.color_4E8ADE {
color: #4E8ADE !important;
}
.color_D9D9D9 {
color: #D9D9D9 !important;
}
/* 控制左右距离 */
.mar_le30 {
margin-left: 60rpx;
}
.mar_le25 {
margin-left: 50rpx;
}
.mar_le20 {
margin-left: 40rpx;
}
.mar_le15 {
margin-left: 30rpx;
}
.mar_le10 {
margin-left: 20rpx;
}
.mar_le5 {
margin-left: 10rpx;
}
.mar_ri5 {
margin-right: 10rpx;
}
.mar_ri10 {
margin-right: 20rpx;
}
.mar_ri15 {
margin-right: 30rpx;
}
.mar_ri20 {
margin-right: 40rpx;
}
.mar_ri25 {
margin-right: 50rpx;
}
.mar_top5 {
margin-top: 10rpx;
}
.mar_top10 {
margin-top: 20rpx;
}
.mar_top15 {
margin-top: 30rpx;
}
.mar_top20 {
margin-top: 40rpx;
}
.mar_top25 {
margin-top: 50rpx;
}
/* 控制字体粗细 */
.fw_blod {
font-weight: bold !important;
}
/* 控制背景色 */
.bg_e8 {
background-color: #e8e8e8 !important;
}
/* 控制背景色 */
.bg_cc {
background-color: #CCCCCC !important;
}
/* 控制背景色 */
.bg_ff {
background-color: #ffffff !important;
}
/* 弹性布局 */
.fl_box {
display: flex;
}
.fl_deri {
flex-direction: column;
}
.fl_row {
flex-direction: row;
}
.fl_justmiddle {
justify-content: center;
}
.fl_juststart {
justify-content: flex-start;
}
.fl_justbet {
justify-content: space-between;
}
.fl_justround {
justify-content: space-around;
}
.fl_justend {
justify-content: flex-end;
}
.fl_almiddle {
align-items: center;
}
.fl_alstart {
align-items: flex-start;
}
.fl_alend {
align-items: flex-end;
}
page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px}[data-c-h="true"]{display: none !important;}

View File

@@ -0,0 +1,7 @@
"use strict";
const _imports_0 = "/static/logo.png";
const _imports_1 = "/static/icon/woman.png";
const _imports_2 = "/static/icon/man.png";
exports._imports_0 = _imports_0;
exports._imports_1 = _imports_1;
exports._imports_2 = _imports_2;

View File

@@ -0,0 +1,61 @@
"use strict";
const common_vendor = require("./vendor.js");
const stores_useUserStore = require("../stores/useUserStore.js");
const msg = (title, duration = 1500, mask = false, icon = "none", image) => {
if (Boolean(title) === false) {
return;
}
common_vendor.index.showToast({
title,
duration,
mask,
icon,
image
});
};
const prePage = () => {
let pages = getCurrentPages();
let prePage2 = pages[pages.length - 2];
return prePage2.$vm;
};
const navTo = function(url, needLogin) {
if (needLogin && stores_useUserStore.useUserStore().hasLogin) {
common_vendor.index.navigateTo({
url: "/pages/login/login"
});
return;
}
common_vendor.index.navigateTo({
url
});
};
function getdeviceInfo() {
const globalData = {
statusBarHeight: 0,
// 状态导航栏高度
topHeight: 0,
// 距离顶部高度
navHeight: 0,
// 总体高度
windowHeight: 0,
// 可使用窗口高度
tabBarHight: 0
//底部导航栏高度
};
let systemInfo = common_vendor.index.getSystemInfoSync();
globalData.windowHeight = systemInfo.screenHeight;
globalData.tabBarHight = systemInfo.screenHeight - systemInfo.safeArea.bottom;
globalData.statusBarHeight = systemInfo.statusBarHeight;
return {
...globalData
};
}
const globalFunction = {
"$api": {
msg,
prePage
},
navTo,
getdeviceInfo
};
exports.globalFunction = globalFunction;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,29 @@
"use strict";
const common_vendor = require("../common/vendor.js");
const _sfc_main = {
name: "tab",
data() {
return {};
},
props: {
current: {
type: Number,
default: 0
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_vendor.o(($event) => false),
b: common_vendor.o(($event) => false),
c: common_vendor.o(($event) => false),
d: common_vendor.o(($event) => false),
e: common_vendor.o(($event) => false),
f: common_vendor.o(($event) => false),
g: common_vendor.o(($event) => false),
h: common_vendor.o(($event) => false),
i: $props.current
};
}
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createComponent(Component);

View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@@ -0,0 +1 @@
<view class="tab-container"><view class="uni-margin-wrap"><swiper class="swiper" current="{{i}}" circular="{{false}}" indicator-dots="{{true}}" autoplay="{{false}}" interval="{{200}}" duration="{{2000}}"><swiper-item catchtouchmove="{{a}}"><slot name="tab0"></slot></swiper-item><swiper-item catchtouchmove="{{b}}"><slot name="tab1"></slot></swiper-item><swiper-item catchtouchmove="{{c}}"><slot name="tab2"></slot></swiper-item><swiper-item catchtouchmove="{{d}}"><slot name="tab3"></slot></swiper-item><swiper-item catchtouchmove="{{e}}"><slot name="tab4"></slot></swiper-item><swiper-item catchtouchmove="{{f}}"><slot name="tab5"></slot></swiper-item><swiper-item catchtouchmove="{{g}}"><slot name="tab6"></slot></swiper-item><swiper-item catchtouchmove="{{h}}"><slot name="tab7"></slot></swiper-item></swiper></view></view>

View File

@@ -0,0 +1,21 @@
.tab-container {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: row;
}
.uni-margin-wrap {
width: 100%;
height: 100%;
}
.swiper {
width: 100%;
height: 100%;
}
.swiper-item {
display: block;
width: 100%;
height: 100%;
}

View File

@@ -0,0 +1 @@
"use strict";

View File

@@ -0,0 +1,13 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
data() {
return {};
},
methods: {}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createPage(MiniProgramPage);

View File

@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "",
"usingComponents": {}
}

View File

@@ -0,0 +1 @@
<view></view>

View File

@@ -0,0 +1,31 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const stores_useUserStore = require("../../stores/useUserStore.js");
const _sfc_main = {
__name: "index",
setup(__props) {
const { $api, navTo } = common_vendor.inject("globalFunction");
stores_useUserStore.useUserStore();
const state = common_vendor.reactive({
title: "123123123房贷首付打的手机家里好玩的很浓厚第卡后sdhiwohdijasnbdhoui1很努力"
});
common_vendor.onShow(() => {
console.log("onShow");
});
common_vendor.onLoad(() => {
console.log("onLoad");
navTo("/pages/login/login");
});
common_vendor.watch(
() => state.title,
(newValue, oldValue) => {
},
{ deep: true }
);
return (_ctx, _cache) => {
return {};
};
}
};
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-1cf27b2a"]]);
wx.createPage(MiniProgramPage);

View File

@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "uni-app",
"usingComponents": {}
}

View File

@@ -0,0 +1 @@
<view class="content data-v-1cf27b2a"></view>

View File

@@ -0,0 +1,4 @@
.logo.data-v-1cf27b2a {
width: 100px;
height: 100px;
}

View File

@@ -0,0 +1,29 @@
"use strict";
const common_vendor = require("../../../common/vendor.js");
const _sfc_main = {
name: "tab",
data() {
return {};
},
props: {
current: {
type: Number,
default: 0
}
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {
a: common_vendor.o(($event) => false),
b: common_vendor.o(($event) => false),
c: common_vendor.o(($event) => false),
d: common_vendor.o(($event) => false),
e: common_vendor.o(($event) => false),
f: common_vendor.o(($event) => false),
g: common_vendor.o(($event) => false),
h: common_vendor.o(($event) => false),
i: $props.current
};
}
const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createComponent(Component);

View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@@ -0,0 +1 @@
<view class="tab-container"><view class="uni-margin-wrap"><swiper class="swiper" current="{{i}}" circular="{{false}}" indicator-dots="{{false}}" autoplay="{{false}}" duration="{{500}}"><swiper-item catchtouchmove="{{a}}"><slot name="tab0"></slot></swiper-item><swiper-item catchtouchmove="{{b}}"><slot name="tab1"></slot></swiper-item><swiper-item catchtouchmove="{{c}}"><slot name="tab2"></slot></swiper-item><swiper-item catchtouchmove="{{d}}"><slot name="tab3"></slot></swiper-item><swiper-item catchtouchmove="{{e}}"><slot name="tab4"></slot></swiper-item><swiper-item catchtouchmove="{{f}}"><slot name="tab5"></slot></swiper-item><swiper-item catchtouchmove="{{g}}"><slot name="tab6"></slot></swiper-item><swiper-item catchtouchmove="{{h}}"><slot name="tab7"></slot></swiper-item></swiper></view></view>

View File

@@ -0,0 +1,21 @@
.tab-container {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: row;
}
.uni-margin-wrap {
width: 100%;
height: 100%;
}
.swiper {
width: 100%;
height: 100%;
}
.swiper-item {
display: block;
width: 100%;
height: 100%;
}

View File

@@ -0,0 +1,42 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const common_assets = require("../../common/assets.js");
if (!Math) {
tabcontrolVue();
}
const tabcontrolVue = () => "./components/tabcontrol.js";
const _sfc_main = {
__name: "login",
setup(__props) {
const { statusBarHeight } = common_vendor.inject("deviceInfo");
const tabCurrent = common_vendor.ref(1);
common_vendor.reactive({
sex: 1
});
setTimeout(() => {
console.log("gg");
}, 4e3);
const getuserinfo = (e) => {
console.log(e);
};
function nextStep() {
tabCurrent.value += 1;
}
return (_ctx, _cache) => {
return {
a: common_vendor.unref(statusBarHeight) + "px",
b: common_assets._imports_0,
c: common_vendor.o(getuserinfo),
d: common_assets._imports_1,
e: common_assets._imports_2,
f: common_vendor.o(nextStep),
g: common_vendor.o(nextStep),
h: common_vendor.o(nextStep),
i: common_vendor.p({
current: tabCurrent.value
})
};
};
}
};
wx.createPage(_sfc_main);

View File

@@ -0,0 +1,7 @@
{
"navigationBarTitleText": "登录",
"navigationStyle": "custom",
"usingComponents": {
"tabcontrol-vue": "./components/tabcontrol"
}
}

View File

@@ -0,0 +1 @@
<view class="container"><view style="{{'height:' + a}}"></view><tabcontrol-vue wx:if="{{i}}" u-s="{{['tab0','tab1','tab2','tab3']}}" u-i="665c1f0a-0" bind:__l="__l" u-p="{{i}}"><view slot="tab0"><view class="login-content"><image class="logo" src="{{b}}"></image><view class="logo-title">就业</view></view><view class="btns"><button open-type="getUserInfo" bindgetuserinfo="{{c}}" class="wxlogin">微信登录</button><view class="wxaddress">青岛市公共就业和人才服务中心</view></view></view><view class="tabtwo" slot="tab1"><view class="tabtwo-top"><view class="color_FFFFFF fs_30">选择您的性别1/6</view><view class="color_D9D9D9">个人信息仅用于推送优质内容</view></view><view class="fl_box fl_justmiddle"><view class="tabtwo-sex"><image class="sex-img" src="{{d}}"></image><view class="mar_top5">女</view><view class="dot"></view></view><view class="tabtwo-sex"><image class="sex-img" src="{{e}}"></image><view class="mar_top5">男</view><view class="dot doted"></view></view></view><view class="nextstep" bindtap="{{f}}">下一步</view></view><view class="tabtwo" slot="tab2"><view class="tabtwo-top"><view class="color_FFFFFF fs_30">选择您的年龄断段2/6</view><view class="color_D9D9D9">个人信息仅用于推送优质内容</view></view><view class="fl_box fl_deri"><view class="agebtn agebtned">30岁以下</view><view class="agebtn">31-40岁</view><view class="agebtn">41-50岁</view><view class="agebtn">51岁以上</view></view><view class="fl_box fl_justmiddle"></view><view class="nextstep" bindtap="{{g}}">下一步</view></view><view class="tabtwo" slot="tab3"><view class="tabtwo-top"><view class="color_FFFFFF fs_30">选择您的学历3/6</view><view class="color_D9D9D9">个人信息仅用于推送优质内容</view></view><view class="eduction-content"><view class="eductionbtn eductionbtned">30岁以下</view><view class="eductionbtn">31-40岁</view><view class="eductionbtn">41-50岁</view><view class="eductionbtn">51岁以上</view></view><view class="fl_box fl_justmiddle"></view><view class="nextstep" bindtap="{{h}}">下一步</view></view></tabcontrol-vue></view>

View File

@@ -0,0 +1,128 @@
.container {
width: 100%;
height: 100%;
background: linear-gradient(#4778ec, #002979);
position: relative;
}
.login-content {
position: absolute;
left: 50%;
top: 40%;
transform: translate(-50%, -50%);
display: flex;
align-items: flex-end;
flex-wrap: nowrap;
}
.login-content .logo {
width: 266rpx;
height: 182rpx;
}
.login-content .logo-title {
font-size: 88rpx;
color: #fff;
width: 180rpx;
}
.btns {
position: absolute;
top: 70%;
left: 50%;
transform: translate(-50%, 0);
}
.btns .wxlogin {
width: 562rpx;
height: 140rpx;
border-radius: 70rpx;
background-color: #13c57c;
color: #fff;
text-align: center;
line-height: 140rpx;
font-size: 70rpx;
}
.btns .wxaddress {
color: #bbb;
margin-top: 70rpx;
text-align: center;
}
.tabtwo {
padding: 40rpx;
}
.tabtwo-top {
margin: 222rpx 0 0 0;
}
.tabtwo-sex {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
color: #fff;
font-size: 40rpx;
margin: 200rpx 60rpx 0 60rpx;
}
.tabtwo-sex .sex-img {
width: 184rpx;
height: 184rpx;
}
.dot {
width: 68rpx;
height: 68rpx;
border-radius: 50%;
background: #d1d1d6;
position: relative;
}
.dot:before {
content: '';
width: 44rpx;
height: 44rpx;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
background: #1e4baa;
}
.doted {
background: #13c57c;
}
.doted:after {
content: '';
width: 34rpx;
height: 34rpx;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
background: #13c57c;
}
.agebtn {
width: 630rpx;
height: 108rpx;
border-radius: 20rpx;
background: #d9d9d9;
text-align: center;
line-height: 108rpx;
font-size: 40rpx;
margin-top: 50rpx;
color: #606060;
}
.agebtned {
background: #13c57c;
color: #fff;
}
.nextstep {
position: absolute;
top: 80%;
left: 50%;
transform: translate(-50%, 0);
width: 630rpx;
height: 98rpx;
border-radius: 20rpx;
background: #13c57c;
text-align: center;
line-height: 98rpx;
font-size: 40rpx;
color: #fff;
}
.eduction-content {
display: grid;
}

View File

@@ -0,0 +1,12 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
data() {
return {};
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createPage(MiniProgramPage);

View File

@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "",
"usingComponents": {}
}

View File

@@ -0,0 +1 @@
<view></view>

View File

View File

@@ -0,0 +1,12 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = {
data() {
return {};
}
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
return {};
}
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
wx.createPage(MiniProgramPage);

View File

@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "",
"usingComponents": {}
}

View File

@@ -0,0 +1 @@
<view></view>

View File

View File

@@ -0,0 +1,30 @@
{
"description": "项目配置文件。",
"packOptions": {
"ignore": [],
"include": []
},
"setting": {
"urlCheck": false,
"es6": true,
"postcss": true,
"minified": true,
"newFeature": true,
"bigPackageSizeSupport": true,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"condition": true
},
"compileType": "miniprogram",
"libVersion": "3.6.3",
"appid": "touristappid",
"projectname": "qingdao-employment-service",
"condition": {},
"editorSetting": {
"tabIndent": "insertSpaces",
"tabSize": 2
}
}

View File

@@ -0,0 +1,8 @@
{
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"projectname": "qingdao-employment-service",
"setting": {
"compileHotReLoad": true,
"autoAudits": false
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 662 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

View File

@@ -0,0 +1,30 @@
"use strict";
const common_vendor = require("../common/vendor.js");
const useUserStore = common_vendor.defineStore("user", () => {
const hasLogin = common_vendor.ref(false);
const openId = common_vendor.ref("");
const userInfo = common_vendor.ref({});
const token = common_vendor.ref("测试token");
const login = (value) => {
hasLogin.value = true;
userInfo.value = value;
openId.value = value.wxOpenId;
token.value = value.token;
common_vendor.index.setStorage({
key: "token",
data: value.token
});
};
const logOut = () => {
hasLogin = false;
};
return {
hasLogin,
openId,
userInfo,
token,
login,
logOut
};
});
exports.useUserStore = useUserStore;

View File

@@ -0,0 +1,3 @@
"use strict";
require("../common/vendor.js");
require("../stores/useUserStore.js");

66
utils/request.js Normal file
View File

@@ -0,0 +1,66 @@
import config from "@/config.js"
import useUserStore from '@/stores/useUserStore';
const request = ({
url,
method = 'GET',
data = {},
load = false,
header = {}
} = {}) => {
return new Promise((resolve, reject) => {
if (load) {
uni.showLoading({
title: '请稍候',
mask: true
});
}
console.log(useUserStore())
let Authorization = ''
if (useUserStore().token) {
Authorization = `${useUserStore().userInfo.token}${useUserStore().token}`
}
uni.request({
url: config.baseUrl + url,
method,
data: data,
header: {
'Authorization': Authorization || '',
...header
},
success: resData => {
// 响应拦截
if (resData.statusCode === 200) {
const {
code,
data,
message
} = resData.data
if (code === 200) {
resolve(data)
return
}
uni.showToast({
title: message,
icon: 'none'
})
}
if (resData.data?.code === 401 || resData.data?.code === 402) {
store.commit('logout')
uni.clearStorageSync('userInfo')
}
const err = new Error('请求出现异常,请联系工作人员')
err.error = resData
reject(err)
},
fail: err => reject(err),
complete() {
if (load) {
uni.hideLoading();
}
}
})
})
}
export default request