Browse Source

初始化项目

master
主管理员 2 years ago
parent
commit
d2faee431a
95 changed files with 8580 additions and 2 deletions
  1. +2
    -0
      .gitignore
  2. +16
    -0
      .hbuilderx/launch.json
  3. +50
    -0
      App.vue
  4. +2
    -2
      README.md
  5. +13
    -0
      common/com.js
  6. +5
    -0
      common/components.js
  7. +1441
    -0
      common/uqrcode.js
  8. +147
    -0
      components/active-card/index-car-man.vue
  9. +168
    -0
      components/active-card/index-car.vue
  10. +164
    -0
      components/active-card/index-list.vue
  11. +159
    -0
      components/active-card/index.vue
  12. +61
    -0
      components/comm-navbar/comm-navbar.vue
  13. +64
    -0
      components/new-card/index.vue
  14. +76
    -0
      components/run-component/wx-b-card.vue
  15. +45
    -0
      components/run-component/wx-b-login.vue
  16. +64
    -0
      components/user-card/index.vue
  17. +26
    -0
      env.js
  18. +48
    -0
      main.js
  19. +98
    -0
      manifest.json
  20. +59
    -0
      package-lock.json
  21. +8
    -0
      package.json
  22. +183
    -0
      pages.json
  23. +489
    -0
      pages/car/course-detial.vue
  24. +269
    -0
      pages/car/index.vue
  25. +267
    -0
      pages/home/buy-course.vue
  26. +430
    -0
      pages/home/course-detial.vue
  27. +214
    -0
      pages/home/index.vue
  28. +53
    -0
      pages/home/new-detail.vue
  29. +28
    -0
      pages/home/pay-success.vue
  30. +282
    -0
      pages/my/baoming-detail.vue
  31. +125
    -0
      pages/my/canyu-detail.vue
  32. +152
    -0
      pages/my/edit-user.vue
  33. +235
    -0
      pages/my/index.vue
  34. +213
    -0
      pages/my/list-fensi.vue
  35. +168
    -0
      pages/my/list-renzhen.vue
  36. +195
    -0
      pages/my/login-kehu.vue
  37. +115
    -0
      pages/my/my-baoming.vue
  38. +172
    -0
      pages/my/my-fabujianzhi-list.vue
  39. +213
    -0
      pages/my/my-fabujianzhi.vue
  40. +183
    -0
      pages/my/my-xiansuo-new.vue
  41. +177
    -0
      pages/my/my-xiansuo-now.vue
  42. +215
    -0
      pages/my/my-xiansuo.vue
  43. +171
    -0
      pages/my/xiansuo-detail.vue
  44. +36
    -0
      pages/my/xieyi.vue
  45. +188
    -0
      pages/news/index.vue
  46. +69
    -0
      request/index.js
  47. +280
    -0
      request/request.js
  48. +91
    -0
      request/shopro.js
  49. +37
    -0
      router/router.js
  50. +0
    -0
      static/1.jpeg
  51. BIN
      static/2.png
  52. BIN
      static/3.png
  53. BIN
      static/4.png
  54. BIN
      static/5.jpg
  55. BIN
      static/6.png
  56. BIN
      static/img/add-icon.png
  57. BIN
      static/img/arrow-right.png
  58. BIN
      static/img/choose-act.png
  59. BIN
      static/img/info/code.png
  60. BIN
      static/img/info/fans.png
  61. BIN
      static/img/info/kefu.png
  62. BIN
      static/img/info/money.png
  63. BIN
      static/img/info/smrz.png
  64. BIN
      static/img/jiantou-icon.png
  65. BIN
      static/img/logon-icon.png
  66. BIN
      static/img/mima-icon.png
  67. BIN
      static/img/my/wechat-icon.png
  68. BIN
      static/img/pay-success.png
  69. BIN
      static/img/phone-icon.png
  70. BIN
      static/img/search-icon.png
  71. BIN
      static/img/tabbar/fabu-xuan.png
  72. BIN
      static/img/tabbar/fabu.png
  73. BIN
      static/img/tabbar/icon-home-active.png
  74. BIN
      static/img/tabbar/icon-home.png
  75. BIN
      static/img/tabbar/icon-my-active.png
  76. BIN
      static/img/tabbar/icon-my.png
  77. BIN
      static/img/tabbar/icon-new-active.png
  78. BIN
      static/img/tabbar/icon-new.png
  79. BIN
      static/img/tabbar/sfz.png
  80. BIN
      static/img/tabbar/zx.png
  81. BIN
      static/img/tabbar/zxq.png
  82. BIN
      static/img/time-icon.png
  83. BIN
      static/img/title-icon.png
  84. BIN
      static/img/wechat-icon.png
  85. BIN
      static/kefu.jpg
  86. BIN
      static/kefu.png
  87. BIN
      static/qrcode.jpg
  88. +1
    -0
      store/actions.js
  89. +1
    -0
      store/getters.js
  90. +16
    -0
      store/index.js
  91. +18
    -0
      store/mutations.js
  92. +6
    -0
      store/state.js
  93. +453
    -0
      styles/common.css
  94. +44
    -0
      styles/init.css
  95. +75
    -0
      uni.scss

+ 2
- 0
.gitignore View File

@ -0,0 +1,2 @@
/node_modules
/unpackage

+ 16
- 0
.hbuilderx/launch.json View File

@ -0,0 +1,16 @@
{ // launch.json configurations app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
// launchtypelocalremote, localremote
"version": "0.0",
"configurations": [{
"default" :
{
"launchtype" : "remote"
},
"mp-weixin" :
{
"launchtype" : "remote"
},
"type" : "uniCloud"
}
]
}

+ 50
- 0
App.vue View File

@ -0,0 +1,50 @@
<script>
export default {
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
// let checkIsWechatBrowser = () => {
// return (
// navigator.userAgent.toLowerCase().match(/MicroMessenger/i) ==
// "micromessenger"
// );
// };
// // #ifdef MP-WEIXIN
// uni.getSetting({
// success(res) {
// console.log("", res);
// if (!res.authSetting['scope.userInfo']) {
// //
// console.log("");
// uni.reLaunch({
// url: '/pages/help/certificate'
// })
// return
// } else {
// //
// uni.redirectTo({
// url: '/pages/home/home'
// })
// console.log("");
// }
// }
// })
// // #endif
// console.log('App Show')
},
onHide: function() {
console.log('App Hide')
},
methods:{
}
}
</script>
<style lang="scss">
/*每个页面公共css */
@import url("@/styles/common.css");
@import url("@/styles/init.css");
@import "uview-ui/index.scss";
</style>

+ 2
- 2
README.md View File

@ -1,3 +1,3 @@
# JianjianStreet-H5
# bin-yuan-uniapp
兼街公众号代码
职招聘信息公众号

+ 13
- 0
common/com.js View File

@ -0,0 +1,13 @@
export default{
displayNav(){
let iswx = navigator.userAgent.toLowerCase().indexOf('micromessenger') != -1;
//#ifdef H5
if (iswx) {
let pageNav = document.getElementsByTagName("uni-page-head");
if (pageNav && pageNav[0]) {
pageNav[0].style.display = "none";
}
}
//#endif
}
}

+ 5
- 0
common/components.js View File

@ -0,0 +1,5 @@
import Vue from 'vue'
// import Navbar from '@/components/comm-navbar/comm-navbar.vue'
// Vue.component('comm-navbar', Navbar)

+ 1441
- 0
common/uqrcode.js
File diff suppressed because it is too large
View File


+ 147
- 0
components/active-card/index-car-man.vue View File

@ -0,0 +1,147 @@
<template>
<view class="active-card">
<view class="active-title">人找车{{item.title}}</view>
<view class="active-time flex align-center">
<text>始发终点{{item.outGo}} - {{item.toGo}}</text>
</view>
<view class="active-add flex align-center">
<text>乘坐人数{{item.sum}} </text>
</view>
<view class="active-time2 flex align-center">
<text>出发时间{{item.outGoTime}}</text>
</view>
<view class="active-menu flex align-center justify-between">
<view class="menu-price">
<!-- <text class="unit"></text>
<text class="price">{{item.money}}</text> -->
<!-- <text>价格面议</text> -->
</view>
<view class="menu-btn" @click="seeDetail">{{text}}</view>
</view>
</view>
</template>
<script>
export default{
props:{
text:{
type:String,
default:'查看详情'
},
item:{
type:Object,
},
i:{
type:Number,
}
},
data(){
return{
}
},
methods:{
seeDetail(){
this.$emit('seeDetail',this.item)
}
}
}
</script>
<style lang="scss" scoped>
.active-card {
background: #ffffff;
border-radius: 12rpx;
box-shadow: 3rpx 3rpx 6rpx 5rpx rgba(0,0,0,0.16);
overflow: hidden;
padding-bottom: 10rpx;
margin-bottom: 20rpx;
.active-title {
word-wrap:break-word;
word-break:break-all;
font-size: 32rpx;
color: #000;
font-weight: 700;
margin-top: 20rpx;
line-height: 60rpx;
/* 文本不会换行显示 */
white-space: nowrap;
/* 超出盒子部分隐藏 */
overflow: hidden;
/* 文本超出的部分打点显示 */
text-overflow: ellipsis;
}
.active-time {
word-wrap:break-word;
word-break:break-all;
color: #707070;
font-size: 28rpx;
margin: 20rpx 0;
image {
width: 33rpx;
height: 33rpx;
margin-right: 27rpx;
}
/* 文本不会换行显示 */
white-space: nowrap;
/* 超出盒子部分隐藏 */
overflow: hidden;
/* 文本超出的部分打点显示 */
text-overflow: ellipsis;
}
.active-add {
color: #707070;
font-size: 28rpx;
word-wrap:break-word;
word-break:break-all;
/* 文本不会换行显示 */
white-space: nowrap;
/* 超出盒子部分隐藏 */
overflow: hidden;
/* 文本超出的部分打点显示 */
text-overflow: ellipsis;
// overflow: hidden;/**/
image {
width: 30rpx;
height: 35rpx;
margin-right: 27rpx;
}
}
.active-time2 {
color: #707070;
font-size: 28rpx;
margin: 20rpx 0;
image {
width: 33rpx;
height: 33rpx;
margin-right: 27rpx;
}
}
.active-menu {
margin-top: 21rpx;
padding: 0 10rpx;
.menu-price {
font-size: 32rpx;
.price {
color: #D33D3E;
font-size: 40rpx;
}
}
.menu-btn {
width: 213rpx;
height: 79rpx;
display: flex;
align-items: center;
justify-content: center;
//background-color: #00CCCC;
//border-radius: 40rpx;
color: #00CCCC;
font-size: 32rpx;
}
}
}
</style>

+ 168
- 0
components/active-card/index-car.vue View File

@ -0,0 +1,168 @@
<template>
<view class="active-card">
<view >
<u--image :showLoading="true" :src="item.image" ></u--image>
</view>
<view class="active-title">{{item.title}}</view>
<view class="active-time flex align-center">
<text>{{item.longTitle}}</text>
</view>
<view class="active-time2 flex align-center">
<text >
库存{{item.num}}
</text>
</view>
<view class="active-time2 flex align-center">
<text>
浏览量{{item.clickNum}}
</text>
</view>
<view class="active-time2 flex align-center">
<text>
价格{{item.price}}
</text>
</view>
<view class="active-menu flex align-center justify-between">
<view class="menu-price">
<text class="price">积分: {{item.intgerPrice}}</text>
</view>
<view class="menu-btn" @click="seeDetail">{{text}}</view>
</view>
</view>
</template>
<script>
export default{
props:{
text:{
type:String,
default:'查看详情'
},
item:{
type:Object,
},
i:{
type:Number,
}
},
data(){
return{
}
},
methods:{
seeDetail(){
this.$emit('seeDetail',this.item)
}
}
}
</script>
<style lang="scss" scoped>
.active-card {
background: #ffffff;
border-radius: 24rpx;
box-shadow: 13rpx 13rpx 16rpx 15rpx rgba(0,0,0,0.16);
overflow: hidden;
padding-bottom: 10rpx;
margin-bottom: 20rpx;
font-size: 28rpx;
padding: 16rpx 16rpx;
.active-title {
word-wrap:break-word;
word-break:break-all;
font-size: 32rpx;
color: #000;
font-weight: 700;
margin-top: 20rpx;
line-height: 60rpx;
/* 文本不会换行显示 */
white-space: nowrap;
/* 超出盒子部分隐藏 */
overflow: hidden;
/* 文本超出的部分打点显示 */
text-overflow: ellipsis;
}
.active-time {
word-wrap:break-word;
word-break:break-all;
color: #707070;
font-size: 28rpx;
margin: 20rpx 0;
image {
width: 33rpx;
height: 33rpx;
margin-right: 27rpx;
}
/* 文本不会换行显示 */
white-space: nowrap;
/* 超出盒子部分隐藏 */
overflow: hidden;
/* 文本超出的部分打点显示 */
text-overflow: ellipsis;
}
.active-add {
color: #707070;
font-size: 28rpx;
word-wrap:break-word;
word-break:break-all;
/* 文本不会换行显示 */
white-space: nowrap;
/* 超出盒子部分隐藏 */
overflow: hidden;
/* 文本超出的部分打点显示 */
text-overflow: ellipsis;
// overflow: hidden;/**/
image {
width: 30rpx;
height: 35rpx;
margin-right: 27rpx;
}
}
.active-time2 {
color: #707070;
font-size: 28rpx;
margin: 20rpx 0;
image {
width: 33rpx;
height: 33rpx;
margin-right: 27rpx;
}
}
.active-menu {
margin-top: 21rpx;
padding: 0 10rpx;
.menu-price {
font-size: 32rpx;
.price {
color: #D33D3E;
font-size: 40rpx;
}
}
.menu-btn {
width: 213rpx;
height: 79rpx;
display: flex;
align-items: center;
justify-content: center;
//background-color: #00CCCC;
//border-radius: 40rpx;
color: #00CCCC;
font-size: 32rpx;
}
}
}
</style>

+ 164
- 0
components/active-card/index-list.vue View File

@ -0,0 +1,164 @@
<template>
<view class="active-card">
<view class="active-title">{{item.name}}</view>
<view class="active-time flex align-center">
<text>招聘时间{{item.startTime}} - {{item.endTime}}</text>
</view>
<view class="active-add flex align-center">
<text>招聘地址{{item.money}}</text>
</view>
<view class="active-add flex align-center">
<text>招聘地区{{item.vsClass}}</text>
</view>
<view class="active-add flex align-center">
<text>联系方式{{item.phone}}</text>
</view>
<view class="active-add flex align-center">
<text>联系微信{{item.wx}}</text>
</view>
<view class="active-time2 flex align-center">
<text>发布时间{{item.createTime}}</text>
</view>
<view class="active-menu flex align-center justify-between">
<view class="menu-price" >
<text class="price">{{item.money}}</text>
<text class="price">/{{item.unit}}</text>
</view>
</view>
<view class="active-add flex align-center">
<text>招聘内容{{item.value}}</text>
</view>
</view>
</template>
<script>
export default{
props:{
text:{
type:String,
default:'查看详情'
},
item:{
type:Object,
},
i:{
type:Number,
}
},
data(){
return{
}
},
methods:{
seeDetail(){
this.$emit('seeDetail',this.item)
}
}
}
</script>
<style lang="scss" scoped>
.active-card {
background: #ffffff;
border-radius: 12rpx;
box-shadow: 3rpx 3rpx 6rpx 5rpx rgba(0,0,0,0.16);
overflow: hidden;
padding-bottom: 10rpx;
margin-bottom: 20rpx;
.active-title {
word-wrap:break-word;
word-break:break-all;
font-size: 32rpx;
color: #000;
font-weight: 700;
margin-top: 20rpx;
line-height: 60rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.active-time {
word-wrap:break-word;
word-break:break-all;
color: #707070;
font-size: 28rpx;
margin: 20rpx 0;
image {
width: 33rpx;
height: 33rpx;
margin-right: 27rpx;
}
/* 文本不会换行显示 */
white-space: nowrap;
/* 超出盒子部分隐藏 */
overflow: hidden;
/* 文本超出的部分打点显示 */
text-overflow: ellipsis;
}
.active-add {
color: #707070;
font-size: 28rpx;
word-wrap:break-word;
word-break:break-all;
/* 文本不会换行显示 */
white-space: nowrap;
/* 超出盒子部分隐藏 */
overflow: hidden;
/* 文本超出的部分打点显示 */
text-overflow: ellipsis;
// overflow: hidden;/**/
image {
width: 30rpx;
height: 35rpx;
margin-right: 27rpx;
}
}
.active-time2 {
color: #707070;
font-size: 28rpx;
margin: 20rpx 0;
image {
width: 33rpx;
height: 33rpx;
margin-right: 27rpx;
}
}
.active-menu {
margin-top: 21rpx;
padding: 0 10rpx;
.menu-price {
font-size: 32rpx;
.price {
color: #D33D3E;
font-size: 34rpx;
font-weight: 500;
}
}
.menu-btn {
width: 213rpx;
height: 79rpx;
display: flex;
align-items: center;
justify-content: center;
color: #00CCCC;
font-size: 30rpx;
font-weight: 500;
}
.menu-btn::after {
content: " ";
width: 15rpx;
height: 15rpx;
border-bottom: 3rpx solid #00CCCC;
border-right: 3rpx solid #00CCCC;
transform: rotate(-45deg);
margin-left: 8rpx;
}
}
}
</style>

+ 159
- 0
components/active-card/index.vue View File

@ -0,0 +1,159 @@
<template>
<view class="active-card">
<view class="active-title">{{item.title}}</view>
<view class="active-time flex align-center">
<text>招聘时间{{item.startTime}} - {{item.endTime}}</text>
</view>
<view class="active-add flex align-center">
<text>招聘地址{{item.place}}</text>
</view>
<view class="active-time2 flex align-center">
<text>发布时间{{item.createTime}}</text>
</view>
<view class="active-menu flex align-center justify-between">
<view class="menu-price" v-if="item.money !== null">
<text class="unit"></text>
<text class="price" v-if="item.isHot !==null">急聘*</text>
<text class="price">{{item.money}}</text>
<text>/{{item.company}}</text>
</view>
<view class="menu-price" v-if="item.money == null">
<text class="unit"></text>
<text class="price" v-if="item.isHot !==null">急聘*</text>
<text class="price">面议</text>
</view>
<view class="menu-btn" @click="seeDetail">{{text}}</view>
</view>
</view>
</template>
<script>
export default{
props:{
text:{
type:String,
default:'查看详情'
},
item:{
type:Object,
},
i:{
type:Number,
}
},
data(){
return{
}
},
methods:{
seeDetail(){
this.$emit('seeDetail',this.item)
}
}
}
</script>
<style lang="scss" scoped>
.active-card {
background: #ffffff;
border-radius: 12rpx;
box-shadow: 3rpx 3rpx 6rpx 5rpx rgba(0,0,0,0.16);
overflow: hidden;
padding-bottom: 10rpx;
margin-bottom: 20rpx;
.active-title {
word-wrap:break-word;
word-break:break-all;
font-size: 32rpx;
color: #000;
font-weight: 700;
margin-top: 20rpx;
line-height: 60rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.active-time {
word-wrap:break-word;
word-break:break-all;
color: #707070;
font-size: 28rpx;
margin: 20rpx 0;
image {
width: 33rpx;
height: 33rpx;
margin-right: 27rpx;
}
/* 文本不会换行显示 */
white-space: nowrap;
/* 超出盒子部分隐藏 */
overflow: hidden;
/* 文本超出的部分打点显示 */
text-overflow: ellipsis;
}
.active-add {
color: #707070;
font-size: 28rpx;
word-wrap:break-word;
word-break:break-all;
/* 文本不会换行显示 */
white-space: nowrap;
/* 超出盒子部分隐藏 */
overflow: hidden;
/* 文本超出的部分打点显示 */
text-overflow: ellipsis;
// overflow: hidden;/**/
image {
width: 30rpx;
height: 35rpx;
margin-right: 27rpx;
}
}
.active-time2 {
color: #707070;
font-size: 28rpx;
margin: 20rpx 0;
image {
width: 33rpx;
height: 33rpx;
margin-right: 27rpx;
}
}
.active-menu {
margin-top: 21rpx;
padding: 0 10rpx;
.menu-price {
font-size: 32rpx;
.price {
color: #D33D3E;
font-size: 34rpx;
font-weight: 500;
}
}
.menu-btn {
width: 213rpx;
height: 79rpx;
display: flex;
align-items: center;
justify-content: center;
color: #00CCCC;
font-size: 30rpx;
font-weight: 500;
}
.menu-btn::after {
content: " ";
width: 15rpx;
height: 15rpx;
border-bottom: 3rpx solid #00CCCC;
border-right: 3rpx solid #00CCCC;
transform: rotate(-45deg);
margin-left: 8rpx;
}
}
}
</style>

+ 61
- 0
components/comm-navbar/comm-navbar.vue View File

@ -0,0 +1,61 @@
<template>
<view class="comm-navbar position-fixed top-0 w-100 left-0" :style="{background: backgroundColor, zIndex: zIndex}">
<!-- 状态栏 -->
<view class="statusBarHeight"></view>
<view class="navbar flex justify-center align-center">
<view class="nav-icon">
<slot></slot>
<u-icon size="40" v-if="back" class="bakc" :style="{color: textColor}" @click="handleBack" name="arrow-left"></u-icon>
</view>
<view class="nav-text" :style="{color: textColor}">{{ text }}</view>
</view>
</view>
</template>
<script>
export default {
props: {
text: {
type: String
},
textColor: {
type: String,
default: '#333'
},
backgroundColor: {
type: String,
default: 'transparent'
},
back: {
type: Boolean,
default: false
},
backNum: {
type: Number,
default: 1
},
zIndex: {
type: [Number, String],
default: 999
}
},
methods: {
handleBack () {
uni.navigateBack({
delta: this.backNum
})
}
}
}
</script>
<style lang="scss" scoped>
.comm-navbar {z-index: 999;
.statusBarHeight {width: 100%;height: var(--status-bar-height);}
.navbar {height: 80rpx;width: 100%;padding: 0 32rpx;}
.nav-text {font-size: 36rpx;}
.nav-icon {position: absolute;left: 10rpx;}
.bakc {font-size: 36rpx}
}
</style>

+ 64
- 0
components/new-card/index.vue View File

@ -0,0 +1,64 @@
<template>
<view class="new-card flex justify-between" @click="seeDetail">
<view class="new-card-l flex flex-column justify-between">
<view class="title">{{item.title}}</view>
<view>{{item.createTime}}</view>
</view>
<view class="new-card-r">
<u--image :showLoading="true" :src="item.photo" width="216rpx" height="216rpx"></u--image>
</view>
</view>
</template>
<script>
export default{
props:{
item:{
type:Object,
}
},
data(){
return{
}
},
methods:{
seeDetail(){
this.$emit('seeDetail',this.item)
}
}
}
</script>
<style lang="scss" scoped>
.new-card {
//border-bottom: 1px solid #C8C8C8;
margin-bottom: 24rpx;
background-color: #FFFFFF;
.new-card-l {
font-size: 28rpx;
color: #C8C8C8;
padding: 16rpx 16rpx;
.title {
font-size: 32rpx;
color: #000000;
line-height: 40rpx;
font-weight: 600;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
font-family: SimSun;
}
}
.new-card-r{
uni-image>img {
border-top-right-radius: 4rpx;
border-bottom-right-radius: 4rpx;
}
}
}
</style>

+ 76
- 0
components/run-component/wx-b-card.vue View File

@ -0,0 +1,76 @@
<template>
<!-- <view class="btn-box transp">
<view class="left-content">该页面部分功能需要关注公众号获取点击前往关注更有海量独家兼职信息每日放送</view>
<view class="right-box">
<view class="font-btn" @click="onclick">使用完整功能</view>
<view class="font-btn-after"></view>
</view>
</view> -->
</template>
<script>
export default{
props:{
},
data(){
return {
}
},
methods:{
onclick:() => {
window.location = "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=Mzg3NzkzMTg3NQ==#wechat_redirect"
}
}
}
</script>
<style lang="scss" scoped>
.transp{
width: 100vw;
height: 154rpx;
z-index: 99999;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
background-color: #000;
display: flex;
flex-wrap: wrap;
}
.left-content {
color: #777;
font-size: 26rpx;
width: 480rpx;
line-height: 30rpx;
padding: 25rpx;
}
.right-box{
color: #aaa;
font-size: 30rpx;
padding: 35rpx 0;
width: 220rpx;
}
.font-btn-after {
content: " ";
width: 12rpx;
height: 12rpx;
border-bottom: 3rpx solid #aaa;
border-right: 3rpx solid #aaa;
transform: rotate(-45deg);
position: absolute;
right: 25rpx;
top: 42rpx;
}
.btn-box {
position: fixed;
bottom: 0;
left: 0;
right: 0;
}
</style>

+ 45
- 0
components/run-component/wx-b-login.vue View File

@ -0,0 +1,45 @@
<template>
<view class="page">
<view class="box">
<image class="img" :src="src"></image>
正在为您拉起微信授权...
</view>
</view>
</template>
<script>
export default{
props:{
src: require('@/static/img/wechat-icon.png')
},
data(){
return {
}
},
methods:{
}
}
</script>
<style lang="scss" scoped>
.page {
width: 100vw;
background-color: #fff;
}
.box {
width: 500rpx;
height: 800rpx;
margin: 80rpx auto;
text-align: center;
}
.img{
width: 500rpx;
height: 500rpx;
}
</style>

+ 64
- 0
components/user-card/index.vue View File

@ -0,0 +1,64 @@
<template>
<view class="new-card flex justify-between">
<view style="margin: 10rpx 24rpx; display: flex;">
<image :showLoading="true" :src="item.headImage" style="width: 100rpx;height: 100rpx;border-radius: 50%;"></image>
<view style="padding: 28rpx;">
<view style="font-size: 28rpx;font-weight: 500">{{getName(item.nickName)}}</view>
<view style="font-size: 24rpx;margin-top: 20rpx;">{{item.createTime}}</view>
</view>
</view>
</view>
</template>
<script>
export default{
props:{
item:{
type:Object,
}
},
data(){
return{
}
},
methods:{
getName(str){
if(str.length > 10) {
return str.substr(0,10) + "..."
}
return str
}
}
}
</script>
<style lang="scss" scoped>
.new-card {
margin-bottom: 12rpx;
background-color: #FFFFFF;
.new-card-l {
font-size: 28rpx;
color: #C8C8C8;
padding: 16rpx 16rpx;
.title {
font-size: 32rpx;
color: #000000;
line-height: 40rpx;
font-weight: 600;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
}
.new-card-r{
uni-image>img {
border-radius: 50%;
}
}
}
</style>

+ 26
- 0
env.js View File

@ -0,0 +1,26 @@
// .env.js 文件
// 不同环境访问不同的路径
// import store from '@/common/store/index'
// const ENV_API_URL = {
// development: 'https://jobadmin.java996.icu', //开发环境
// production: 'https://jobadmin.java996.icu', //生产环境
// }
// const ENV_BASE_URL = {
// development: 'https://jobadmin.java996.icu', //开发环境
// production: 'https://jobadmin.java996.icu', //生产环境
// }
const ENV_API_URL = {
development: 'http://localhost:8091', //开发环境
production: 'http://localhost:8091', //生产环境
}
const ENV_BASE_URL = {
development: 'http://localhost:8091', //开发环境
production: 'http://localhost:8091', //生产环境
}
export const BASE_URL = ENV_BASE_URL[process.env.NODE_ENV || 'development']; //后台根域名
export const API_URL = ENV_API_URL[process.env.NODE_ENV || 'development']; //后台接口域名
export const HAS_LIVE = false; //后台是否开通直播权限,根据情况在manifest.json中,开启注释相应组件的引入。

+ 48
- 0
main.js View File

@ -0,0 +1,48 @@
import Vue from 'vue'
import App from './App'
import '@/common/components'
// import util from '@/common/utils/common'
import {
API_URL
} from './env.js'//这里是接口api
import api from '@/request/index'
import com from '@/common/com.js'
Vue.prototype.$api = api;
Vue.prototype.$API_URL = API_URL;
Vue.prototype.$com = com;
Vue.config.productionTip = false
import uView from "uview-ui";
import store from './store/index.js'
import jweixin from 'jweixin-module'
Vue.prototype.$jweixin = jweixin
Vue.prototype.$store = store
Vue.prototype.$base_img = 'https://bag.3iot.top'
// Vue.prototype.$util = util
Vue.use(uView);
Vue.prototype.$Toast = function(title) {
return uni.showToast({
title:title,
icon:'none'
})
}
//全局混入
Vue.mixin({
data() {
return {
}
},
onTabItemTap(e){
let token = uni.getStorageSync('userToken')
},
})
App.mpType = 'app'
const app = new Vue({
store,
...App
})
app.$mount()

+ 98
- 0
manifest.json View File

@ -0,0 +1,98 @@
{
"name" : "兼兼街",
"appid" : "__UNI__278B20D",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
/* 5+App */
"app-plus" : {
"usingComponents" : true,
"nvueCompiler" : "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.READ_CONTACTS\"/>",
"<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.WRITE_CONTACTS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<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.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios */
"ios" : {},
/* SDK */
"sdkConfigs" : {}
}
},
/* */
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "wx6fb4a17b28186d58",
"setting" : {
"urlCheck" : false,
"es6" : true,
"minified" : true
},
"usingComponents" : true,
"permission" : {
"scope.userLocation" : {
"desc" : "获取地理位置"
}
}
},
"h5" : {
"optimization" : {
"treeShaking" : {
"enable" : true //
}
},
"devServer" : {
"disableHostCheck" : true
},
"router" : {
"mode" : "history"
}
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
}
}

+ 59
- 0
package-lock.json View File

@ -0,0 +1,59 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
"base64-arraybuffer": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
},
"css-line-break": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
"requires": {
"utrie": "^1.0.2"
}
},
"html2canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"requires": {
"css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3"
}
},
"jweixin-module": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.6.0.tgz",
"integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w=="
},
"text-segmentation": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
"requires": {
"utrie": "^1.0.2"
}
},
"utrie": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
"requires": {
"base64-arraybuffer": "^1.0.2"
}
},
"uview-ui": {
"version": "2.0.34",
"resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.34.tgz",
"integrity": "sha512-usJHnPCtk45yLTWTXTpLX9Vuqhzjth/+4t/m+S3J5bZuahv49mVQ126rtSnuAWWVkOUtKCX4CU83gFHZj8nP5g=="
},
"weixin-js-sdk": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.0.tgz",
"integrity": "sha512-3IYQH7aalJGFJrwdT3epvTdR1MboMiH7vIZ5BRL2eYOJ12BNah7csoMkmSZzkq1+l92sSq29XdTCVjCJoK2sBQ=="
}
}
}

+ 8
- 0
package.json View File

@ -0,0 +1,8 @@
{
"dependencies": {
"html2canvas": "^1.4.1",
"jweixin-module": "^1.6.0",
"uview-ui": "^2.0.31",
"weixin-js-sdk": "^1.6.0"
}
}

+ 183
- 0
pages.json View File

@ -0,0 +1,183 @@
{
"easycom": {
"autoscan": true,
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
},
"pages": [
{
"path": "pages/home/index",
"name": "home",
"style": {
"navigationBarTitleText": "兼兼街"
}
},
{
"path": "pages/car/index",
"style": {
"navigationBarTitleText": "江华信息"
}
},
{
"path": "pages/news/index",
"style": {
"navigationBarTitleText": "大学家教",
"enablePullDownRefresh": true
}
},
{
"path": "pages/my/index",
"style": {
"navigationBarTitleText": "个人中心"
}
},
{
"path": "pages/home/course-detial",
"style": {
"navigationBarTitleText": "招聘详情"
}
},
{
"path": "pages/home/new-detail",
"style": {
"navigationBarTitleText": "详情"
}
},
{
"path": "pages/my/list-fensi",
"style": {
"navigationBarTitleText": "我的粉丝"
}
},
{
"path": "pages/my/list-renzhen",
"style": {
"navigationBarTitleText": "实名认证"
}
},
{
"path": "pages/my/my-xiansuo",
"style": {
"navigationBarTitleText": "邀请二维码",
"enablePullDownRefresh": true
}
},
{
"path": "pages/my/my-xiansuo-new",
"style": {
"navigationBarTitleText": "我要推荐"
}
},
{
"path": "pages/my/my-xiansuo-now",
"style": {
"navigationBarTitleText": "告用户书"
}
},
{
"path": "pages/my/xiansuo-detail",
"style": {
"navigationBarTitleText": "我的线索"
}
},
{
"path": "pages/my/xieyi",
"style": {
"navigationBarTitleText": "用户协议与隐私政策"
}
},
{
"path": "pages/my/my-fabujianzhi",
"style": {
"navigationBarTitleText": "我要发布"
}
},
{
"path": "pages/my/my-fabujianzhi-list",
"style": {
"navigationBarTitleText": "发布信息"
}
},
{
"path": "pages/my/edit-user",
"style": {
"navigationBarTitleText": "个人信息"
}
},
{
"path": "pages/my/login-kehu",
"style": {
"navigationBarTitleText": "登录"
}
},
{
"path": "pages/my/my-baoming",
"style": {
"navigationBarTitleText": "我的报名"
}
},
{
"path": "pages/my/baoming-detail",
"style": {
"navigationBarTitleText": "我的报名"
}
},
{
"path": "pages/my/canyu-detail",
"style": {
"navigationBarTitleText": "往期参与"
}
},
{
"path": "pages/car/course-detial",
"style": {
"navigationBarTitleText": "信息详情"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"condition" : {
"current": 0,
"list": [
{
"name": "",
"path": "pages/student-information/student-information",
"query": ""
}
]
},
"tabBar": {
"borderStyle": "white",
"color": "#4D4D4D",
"selectedColor": "#00CCCC;",
"backgroundColor": "#ffffff",
"list": [{
"pagePath": "pages/home/index",
"iconPath": "static/img/tabbar/icon-home.png",
"selectedIconPath": "static/img/tabbar/icon-home-active.png",
"text": "最新兼职"
},
{
"pagePath": "pages/car/index",
"iconPath": "static/img/tabbar/icon-new.png",
"selectedIconPath": "static/img/tabbar/icon-new-active.png",
"text": "江华信息"
}, {
"pagePath": "pages/news/index",
"iconPath": "static/img/tabbar/zxq.png",
"selectedIconPath": "static/img/tabbar/zx.png",
"text": "大学家教"
}, {
"pagePath": "pages/my/index",
"iconPath": "static/img/tabbar/icon-my.png",
"selectedIconPath": "static/img/tabbar/icon-my-active.png",
"text": "个人中心"
}]
}
}

+ 489
- 0
pages/car/course-detial.vue View File

@ -0,0 +1,489 @@
<template>
<view>
<view class="active-card">
<view>
<view class="active-title">{{dataInfo.title}}</view>
<view class="active-time">
<text>{{dataInfo.longTitle}} </text>
</view>
<view class="active-add2">
<text>库存{{dataInfo.num}} </text>
</view>
<view class="active-add">
<text>销量{{dataInfo.payNum}} </text>
</view>
</view>
<view>
<view class="hide-context" >可用{{dataInfo.intgerPrice}}积分进行兑换该商品</view>
<!-- <view style="padding: 25rpx 0;" v-if="erop == true">
<view class="active-title">联系方式</view>
<view class="active-time">
<view class="menu-price">
<text class="tips">{{dataInfo.phone}}</text>
</view>
</view>
</view> -->
</view>
</view>
<view class="contnet">
<u-parse :content="dataInfo.details"></u-parse>
</view>
<view v-if="!showp" class="btn-box">
<u-button v-if="fromPage && fromPage == 'tuijian'" text="我要推荐" @click="share" :customStyle="baomingStyle"
:hairline="false" color="#00BBFF"></u-button>
<view style="display: flex; background-color: #FFFFFF;">
<view
style="width: 266rpx; height: 72rpx; border: 1rpx solid #00BBFF; color: #00BBFF; line-height: 72rpx;text-align: center;margin: 20rpx 60rpx;"
@click="getCreteClick">立即购买({{dataInfo.price}})</view>
<view
style="width: 266rpx; height: 72rpx; border: 1rpx solid #00BBFF; background-color: #00BBFF; color: #FFFFFF; line-height: 72rpx;text-align: center;margin: 20rpx 60rpx; margin-left: auto;"
@click="wechatMoments">积分兑换({{dataInfo.intgerPrice}})</view>
</view>
</view>
<view class="share-box" v-show="shareShow" @click="shareShow=false">
<view class="jiantou">
<image src="@/static/img/jiantou-icon.png" mode=""></image>
</view>
<view class="title">
<image src="@/static/img/title-icon.png" mode=""></image>
</view>
</view>
<!-- <view v-if="showp">
<view
style="position: fixed;left: 0; top: 0;width: 100vw;height: 100vh;background-color: rgba(0, 0, 0, 0.2);">
<view
style="margin: 200rpx auto;width: 600rpx;height: 818rpx;background-color: #FFFFFF;padding: 0 32rpx;position: relative;">
<view style="font-size: 28rpx;
font-family: Microsoft YaHei, Microsoft YaHei-Bold;
font-weight: 700;
text-align: left;
color: #191919;
line-height: 120rpx;
border-bottom: 1rpx solid #e7e7e7;
position: relative;">
<text>{{dataInfo.title}}</text>
<view style="position: absolute; right: 20rpx; top: 0">
</view>
</view>
<view style="font-size: 24rpx;line-height: 60rpx;margin-top: 30rpx;">
<view class="active-time">
<text>发车时间{{dataInfo.outGoTime}}</text>
</view>
<view class="active-add">
<text>始发终点: {{dataInfo.outGo}} - {{dataInfo.toGo}}</text>
</view>
<view class="active-add">
<text>
剩余位置{{dataInfo.sum}}
</text>
</view>
</view>
<view style="position: absolute; bottom: 50rpx;display: flex;">
<image style="width: 60rpx; height: 60rpx; border-radius: 50%;" src="../../static/qrcode.jpg">
</iimage>
<view style="padding: 18rpx;font-size: 28rpx;">兼兼街</view>
</view>
<view style="position: absolute; bottom: 50rpx; right: 32rpx;">
<canvas canvas-id="qrcode" style="width: 140rpx; height: 140rpx;" />
<view style="padding: 18rpx;font-size: 24rpx;text-align: center;">国联智聘</view>
</view>
</view>
<view style="position: absolute; bottom: 0; left: 0;">
<view style="display: flex; background-color: #CCCCCC;">
<view
style="width: 266rpx; height: 72rpx; border: 1rpx solid #00BBFF; color: #00BBFF; line-height: 72rpx;text-align: center;margin: 20rpx 60rpx;"
@click="showp=false">取消</view>
<view
style="width: 266rpx; height: 72rpx; border: 1rpx solid #00BBFF; background-color: #00BBFF; color: #FFFFFF; line-height: 72rpx;text-align: center;margin: 20rpx 60rpx; margin-left: auto;"
@click="">保存海报</view>
</view>
</view>
</view>
</view> -->
</view>
</template>
<script>
import uQRCode from '@/common/uqrcode.js'
export default {
data() {
return {
shareShow: false,
fromPage: null,
dataInfo: {},
showp: false,
userInfo: {},
id: '',
erop: false,
src: '',//require('@/static/img/course-img.png'),
baomingStyle: {
fontSize: "30rpx",
fontWeight: "700",
height: "100rpx"
}
}
},
onLoad(e) {
if (e.fromPage) this.fromPage = e.fromPage;
this.id = e.id;
this.getactivityFindById(e.id);
},
onReady() {
this.$com.displayNav()
},
methods: {
getmyInfo() {
this.$api('myInfo')
.then(res => {
if (res.code == 200) {
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo', res.result)
this.qrFun('https://xinxiong.java996.icu/pages/my/login-kehu?vid=' + this.userInfo.id +
"&did=" + this.id)
} else {
this.userInfo = null
}
})
},
getCreteClick() {
let that = this;
this.$api('carClick', {
newId: this.dataInfo.id
})
.then(res => {
if (res.code == 200) {
that.erop = true;
}
if (res.code == 500) {
that.$api('create', {
id: that.dataInfo.id
})
.then(res => {
that.$jweixin.config({
debug: false, // ,apialertpclogpc
appId: 'wxdabccf5a0110cfab', //
timestamp: res.result.timestamp, //
nonceStr: res.result.noncestr, //
signature: res.result.sgture, //
jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData',
'onMenuShareTimeline', 'onMenuShareAppMessage',
'chooseWXPay'
]
});
that.$jweixin.chooseWXPay({
appId: 'wxdabccf5a0110cfab',
timestamp: res.result
.timeStamp, // jssdk 使 timestamp 使 timeStamp S
nonceStr: res.result.nonceStr, // 32
package: res.result
.packageValue, // prepay_idprepay_id=\*\*\*
signType: res.result
.signType, // V3 RSA ,V2V2
paySign: res.result.paySign, //
success: function(res) {
that.erop = true;
}
});
})
}
})
},
qrFun(text) {
this.qrShow = true
uQRCode.make({
canvasId: 'qrcode',
componentInstance: this,
text: text,
size: 65,
margin: 0,
backgroundColor: '#FFFFFF',
foregroundColor: '#000000',
fileType: 'png',
errorCorrectLevel: uQRCode.errorCorrectLevel.H,
success: res => {
console.log("ercode", text)
}
})
},
apply() {
if (!this.$store.state.userToken) {
this.$Toast('请先登录!')
setTimeout(() => {
uni.navigateTo({
url: '/pages/my/login-kehu'
})
}, 1000)
return
}
this.share(1)
uni.navigateTo({
url: `/pages/home/buy-course?id=${this.id}`
})
},
wechatMoments() {
this.$api('creteFenxian', {
url: location.href.split('#')[0]
})
.then(res => {
if (res.code == 200) {
this.$jweixin.config({
debug: false, // ,apialertpclogpc
appId: 'wxdabccf5a0110cfab', //
timestamp: res.result.timestamp, //
nonceStr: res.result.noncestr, //
signature: res.result.sgture, //
jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData',
'onMenuShareTimeline', 'onMenuShareAppMessage', 'chooseWXPay'
]
});
this.$jweixin.ready(ress => {
this.$jweixin.updateTimelineShareData({
title: this.dataInfo.title,
link: `https://xinxiong.java996.icu/pages/home/course-detial?id=${this.id}`, // JS
})
});
}
})
},
share(type) { //1
if (!type) {
this.shareShow = true;
}
this.$api('creteFenxian', {
url: location.href.split('#')[0]
})
.then(res => {
if (res.code == 200) {
this.$jweixin.config({
debug: false, // ,apialertpclogpc
appId: 'wxdabccf5a0110cfab', //
timestamp: res.result.timestamp, //
nonceStr: res.result.noncestr, //
signature: res.result.sgture, //
jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData',
'onMenuShareTimeline', 'onMenuShareAppMessage', 'chooseWXPay'
]
});
this.$jweixin.ready(ress => {
this.$jweixin.onMenuShareTimeline({
title: this.dataInfo.title,
desc: this.dataInfo.title, //
link: `http://liyuyu.xzaiyp.top/pages/home/course-detial?id=${this.id}`, // JS
success: function() {
//
}
})
this.$jweixin.onMenuShareAppMessage({
title: this.dataInfo.title,
desc: this.dataInfo.title, //
link: `http://liyuyu.xzaiyp.top/pages/home/course-detial?id=${this.id}`, // JS
success: function() {
//
}
})
})
this.$jweixin.error(err => {
// uni.showModal({
// content:'err:' + JSON.stringify(err)
// })
// config error config debug res SPA
});
// uni.navigateTo({
// url:`/pages/home/buy-course?id=${this.id}`
// })
}
})
},
getactivityFindById(id) {
uni.showLoading()
this.$api('getShopDetailsById', {
id
})
.then(res => {
uni.hideLoading()
if (res.code == 200) {
this.dataInfo = res.result;
}
})
},
poster() {
this.showp = true;
this.getmyInfo()
}
}
}
</script>
<style lang="scss" scoped>
.hide-context {
margin: 20rpx 0;
padding: 30rpx 30rpx;
outline: 0px;
width: 100%;
max-width: 100%;
box-sizing: border-box;
overflow-wrap: break-word;
display: inline-block;
vertical-align: top;
background-image: linear-gradient(#dceefc 0%, #fefeff 100%);
height: auto;
overflow: hidden;
border: 0px none;
color: #B0B0B0;
text-align: center;
font-size: 26rpx;
}
.active-card {
background: #ffffff;
padding: 20rpx 29rpx 13rpx;
border-bottom: 20rpx solid #F5F5F5;
.active-title {
font-size: 36rpx;
color: #000;
font-weight: 700;
margin-top: 20rpx;
line-height: 40rpx;
}
.active-time {
color: #707070;
font-size: 30rpx;
margin: 30rpx 0;
}
.active-add {
color: #707070;
font-size: 30rpx;
margin: 30rpx 0;
}
.active-add2 {
color: #707070;
font-size: 30rpx;
}
.menu-price {
font-weight: 700;
font-size: 40rpx;
color: #D33D3E;
.unit {
font-size: 40rpx;
}
.tips {
font-size: 30rpx;
}
}
.copy {
padding-left: 20rpx;
font-size: 26rpx;
color: #1b2bbc;
cursor: pointer;
}
.active-menu {
margin-top: 31rpx;
.menu-btn {
width: 213rpx;
height: 79rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: #ED1450;
color: #FFFFFF;
font-size: 26rpx;
border-radius: 40rpx;
}
}
}
.contnet {
padding: 20rpx 20rpx 150rpx 20rpx;
font-weight: 500;
font-size: 40rpx;
}
.btn-box {
position: fixed;
bottom: 0;
left: 0;
right: 0;
}
.share-box {
width: 100%;
height: 100vh;
position: fixed;
top: 0;
left: 0;
background-color: rgba(0, 0, 0, .8);
.jiantou {
position: absolute;
top: 140rpx;
right: 40rpx;
image {
width: 138rpx;
height: 138rpx;
}
}
.title {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
image {
width: 526rpx;
height: 212rpx;
}
}
}
</style>

+ 269
- 0
pages/car/index.vue View File

@ -0,0 +1,269 @@
<template>
<view class="home-pages">
<u-swiper
:list="swpList"
keyName="image"
indicator
height="180"
indicatorActiveColor="#FFFFFF"
indicatorMode="dot"
circular
@click="swpClick"
></u-swiper>
<view style="color: #707070;
font-size: 28rpx;">
</view>
<view class="home-content">
<u-tabs
:list="tabList"
lineWidth="70"
lineHeight="3"
lineColor= "#00CCCC"
:activeStyle="{
color: '#000000',
fontWeight: 'bold',
transform: 'scale(1.35)'
}"
:inactiveStyle="{
color: '#000000',
transform: 'scale(1)'
}"
itemStyle="padding-left: 15px; padding-right: 15px; height: 34px;"
@click="tabClick"
>
</u-tabs>
<scroll-view scroll-y="true" class="scroll-y"
<template v-if="params.labelClass == '-1'">
<card v-for="(item,i) in studyList" :item="item" :key="i" :i="i" @seeDetail="seeDetail"></card>
</template>
<template v-if="params.labelClass == '0'">
<active-card v-for="(item,i) in studyList" :item="item" :key="i" :i="i" @seeDetail="seeDetail"></active-card>
</template>
<template v-if="params.labelClass == '1'">
<activeCardMan v-for="(item,i) in studyList" :item="item" :key="i" :i="i" @seeDetail="seeDetail"></activeCardMan>
</template>
</scroll-view>
</view>
</view>
</template>
<script>
import card from '@/components/active-card/index.vue'
import activeCard from '@/components/active-card/index-car.vue'
import activeCardMan from '@/components/active-card/index-car-man.vue'
export default{
components:{
card,
activeCard,
activeCardMan
},
data(){
return{
list:[
'寒雨连江夜入吴',
'平明送客楚山孤',
'洛阳亲友如相问',
'一片冰心在玉壶'
],
params:{
pageNo:1,
labelClass:'0',
pageSize:10,
total: null,
isLock: true
},
current:0,
studyList:[],
swpList: [
],
tabList: [
{
id:'-1',
name:'招聘信息'
},
{
id:'0',
name:'兑换商城'
},
]
}
},
onLoad() {
this.studyList = [];
this.params.labelClass = "-1";
this.params.pageNo = 1;
this.params.total = null;
this.params.isLock = true;
this.getstudy();
// this.getknowledge();
this.getbannerList()
this.getJobAddressList();
},
// h5
onReady() {
this.$com.displayNav()
},
onPullDownRefresh() {
this.studyList = [];
this.params.pageNo = 1;
this.params.total = null;
this.params.isLock = true;
this.getstudy()
},
onReachBottom() {
if(this.params.isLock){
this.params.isLock = false;
if(this.params.total !== null && this.params.pageNo * this.params.pageSize >= this.params.total){
this.$Toast('没有更多数据了哦!');
setTimeout(()=>{
this.params.isLock = true;
},3000)
return
}
this.params.pageNo+=1;
this.$Toast('数据加载成功!');
this.getstudy();
}
},
methods:{
lower(){
},
getbannerList(){
this.$api('bannerListJiangHua')
.then(res=>{
if(res.code == 200){
this.swpList = res.result
}
})
},
//
getJobAddressList(){
},
getstudy(){//
uni.showLoading()
if(this.params.labelClass == "-1"){
this.$api('JobList',this.params)
.then(res=>{
uni.hideLoading();
if(res.code == 200){
if(this.params.total== null) {
this.params.total = res.result.total
}
if(this.params.pageNo>1){
uni.hideLoading();
}
this.studyList = this.studyList.concat(res.result.records);
this.params.isLock = true;
}else {
if(this.params.pageNo>1){
uni.hideLoading();
}
this.params.isLock = true;
}
})
}else{
this.$api('getJobShopList',this.params)
.then(res=>{
uni.hideLoading();
if(res.code == 200){
if(this.params.total== null) {
this.params.total = res.result.total
}
if(this.params.pageNo>1){
uni.hideLoading();
}
this.studyList = this.studyList.concat(res.result.records);
this.params.isLock = true;
}else {
if(this.params.pageNo>1){
uni.hideLoading();
}
this.params.isLock = true;
}
})
}
},
swpClick(){
},
tabClick(e){
this.params.labelClass = e.id;
this.params.pageNo =1;
this.studyList = [];
this.getstudy();
},
seeDetail(item){//
this.$api('myInfo')
.then(res=>{
if(res.code == 200){
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo',res.result)
if(this.params.labelClass=='-1'){
uni.navigateTo({
url:`/pages/home/course-detial?id=${item.id}`
})
}else{
uni.navigateTo({
url:`/pages/car/course-detial?id=${item.id}`
})
}
}else{
this.$Toast('请先登录!')
setTimeout(()=>{
uni.navigateTo({
url:'/pages/my/login-kehu'
})
},1000)
return
this.userInfo = null
}
})
},
}
}
</script>
<style lang="scss" scoped>
.home-pages {
padding: 28rpx 29rpx 0;
background-color: #F7F7F7;
.swiper{
position: relative;
height: calc(100% -7vh);
width: 100%;
height: 1800px;
}
.scroll-Y {
height: calc(300vh - 660rpx);
padding-top: 20rpx;
}
.home-content {
.active-card{
margin-top: 20rpx;;
border-radius: 0;
border: none;
border-style: none;
box-shadow: none;
}
}
}
</style>

+ 267
- 0
pages/home/buy-course.vue View File

@ -0,0 +1,267 @@
<template>
<view class="buy-course">
<view class="course-box ">
<view class="course-box-item flex">
<u--image :showLoading="true" :src="dataInfo.photo" width="281rpx" height="178rpx"></u--image>
<view class="box-right">
<view class="active-title">{{dataInfo.title}}[{{dataInfo.money}}/小时]</view>
<view class="active-time">
<text>{{dataInfo.startTime}} - {{dataInfo.endTime}}</text>
</view>
<view class="active-add">
<text>{{dataInfo.place}}</text>
</view>
</view>
</view>
</view>
<view class="from-box">
<view class="from-title">填写报名人信息</view>
<u--form
labelPosition="left"
:model="userInfo"
ref="form1"
labelWidth="80"
:labelStyle="formLabelStyle"
>
<u-form-item
label="姓名:"
borderBottom
ref="item1"
>
<u--input
v-model="userInfo.name"
border="none"
placeholder="请输入姓名"
></u--input>
</u-form-item>
<u-form-item
label="联系电话:"
borderBottom
ref="item1"
>
<u--input
v-model="userInfo.phone"
border="none"
placeholder="请输入手机号码"
type="number"
></u--input>
</u-form-item>
</u--form>
</view>
<view class="pay-box">
<view class="pay-price flex align-center justify-between">
<view class="pay-price-tip">费用</view>
<view>
<text class="unit"></text>
<text>{{dataInfo.price}}</text>
</view>
</view>
<view class="pay-type">
<view class="pay-type-item flex justify-between align-center" v-for="item in payList" :key="item.id" @click="choosePay(item)">
<view class="flex align-center">
<image class="type-img" :src="item.src" mode=""></image>
<text class="ml-1">{{item.text}}</text>
</view>
<image class="choose-img" :src="chooseType == item.id? '../../static/img/choose-act.png' : '../../static/img/choose.png'" mode=""></image>
</view>
</view>
</view>
<view class="btn-box">
<u-button text="立即报名" @click="apply" :customStyle="baomingStyle" :hairline="false" color="#00BBFF"></u-button>
</view>
</view>
</template>
<script>
export default{
data(){
return{
chooseType: 0,
id:'',
dataInfo: {},
userInfo:{
name:'',
companyName:'',
phone:'',
companyPost:''
},
formLabelStyle:{
color: '#707070',
fontSize: '30rpx'
},
baomingStyle: {
fontSize:"30rpx",
fontWeight:"700",
height: "100rpx"
},
payList: [
{
id:0,
text:'微信支付',
src:require('@/static/img/wechat-icon.png')
},
]
}
},
// h5
onReady() {
this.$com.displayNav()
},
onLoad(e) {
this.getactivityFindById(e.id);
this.id = e.id;
},
methods:{
choosePay(item){
this.chooseType = item.id;
},
apply(){//
if(this.userInfo.phone.length != 11){
this.$Toast('请输入正确手机号!')
return
}
let params = {
activityId:this.id,
payType:this.chooseType,
...this.userInfo,
}
this.$api('saveEnroll',params)
.then(res=>{
if(res.code == 200){
this.wxPay(res.result)
}else{
this.$Toast(res.message)
}
})
},
wxPay(id){
let that = this;
that.$api('create',{id})
.then(res=>{
that.$jweixin.chooseWXPay({
appId: res.result.appId,
timestamp: res.result.timeStamp, // jssdk 使 timestamp 使 timeStamp S
nonceStr: res.result.nonceStr, // 32
package: res.result.packageValue, // prepay_idprepay_id=\*\*\*
signType: res.result.signType, // V3 RSA ,V2V2
paySign: res.result.paySign, //
success: function (res) {
//
}
});
})
},
getactivityFindById(id){
uni.showLoading()
this.$api('activityFindById',{id})
.then(res=>{
uni.hideLoading()
if(res.code == 200){
this.dataInfo = res.result;
}
})
}
}
}
</script>
<style lang="scss" scoped>
.buy-course {
.course-box {
padding: 0 26rpx;
.course-box-item {
background: #ffffff;
border-radius: 12rpx;
box-shadow: 3rpx 3rpx 6rpx 3rpx rgba(0,0,0,0.16);
padding: 33rpx 13rpx;
.box-right {
margin-left: 16rpx;
.active-title {
font-size: 30rpx;
color: #000;
line-height: 40rpx;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.active-time {
color: #707070;
font-size: 26rpx;
margin: 10rpx 0 14rpx 0;
}
.active-add {
color: #707070;
font-size: 26rpx;
}
}
}
}
.from-box {
padding: 0 26rpx;
.from-title {
font-size: 30rpx;
color: #000;
margin-top: 35rpx;
margin-bottom: 15rpx;
}
}
.pay-box {
border-top: 20rpx solid #F5F5F5;
padding: 0 26rpx;
.pay-price {
color: #D33D3E;
font-size: 40rpx;
font-weight: 700;
padding: 47rpx 0 20rpx 0;
border-bottom: 1px solid #E6E6E6;
.pay-price-tip {
color: #000000;
font-size: 30rpx;
font-weight: 400;
}
.unit {
font-size: 30rpx;
font-weight: 400;
}
}
.pay-type {
padding-top: 22rpx;
.pay-type-item {
margin-bottom: 42rpx;
.type-img {
width: 70rpx;
height: 70rpx;
}
.choose-img {
width: 46rpx;
height: 46rpx;
}
}
}
}
.btn-box {
position: fixed;
bottom: 0;
left: 0;
right: 0;
}
}
</style>

+ 430
- 0
pages/home/course-detial.vue View File

@ -0,0 +1,430 @@
<template>
<view>
<view class="active-card">
<view>
<view class="active-title">{{dataInfo.title}}</view>
<view class="active-time">
<text>招聘时间: {{dataInfo.startTime}} - {{dataInfo.endTime}}</text>
</view>
<view class="active-add">
<text>招聘地址: {{dataInfo.place}}</text>
</view>
<view class="active-menu">
<view class="menu-price">
<text class="unit"></text>
<text>{{dataInfo.money}}</text>
<text class="tips">/{{dataInfo.company}}</text>
</view>
</view>
</view>
<view>
<view class="hide-context" v-if="erop == false" @click="getCreteClick">点击查看联系方式</view>
<view style="padding: 25rpx 0;" v-if="erop == true">
<view class="active-title">联系方式</view>
<view class="active-time">
<view class="menu-price">
<text class="tips">{{dataInfo.phoneDetails}}</text>
<text class="copy">点击复制</text>
</view>
</view>
</view>
</view>
</view>
<view class="contnet">
<u-parse :content="dataInfo.details"></u-parse>
</view>
<view v-if="!showp" class="btn-box">
<u-button v-if="fromPage && fromPage == 'tuijian'" text="我要推荐" @click="share" :customStyle="baomingStyle" :hairline="false" color="#00BBFF"></u-button>
<!-- <view style="display: flex; background-color: #FFFFFF;">
<view style="width: 266rpx; height: 72rpx; border: 1rpx solid #00BBFF; color: #00BBFF; line-height: 72rpx;text-align: center;margin: 20rpx 60rpx;" @click="poster">生成海报</view>
<view style="width: 266rpx; height: 72rpx; border: 1rpx solid #00BBFF; background-color: #00BBFF; color: #FFFFFF; line-height: 72rpx;text-align: center;margin: 20rpx 60rpx; margin-left: auto;" @click="wechatMoments">分享到朋友圈</view>
</view> -->
</view>
<wx-b-card></wx-b-card>
<view class="share-box" v-show="shareShow" @click="shareShow=false">
<view class="jiantou">
<image src="@/static/img/jiantou-icon.png" mode=""></image>
</view>
<view class="title">
<image src="@/static/img/title-icon.png" mode=""></image>
</view>
</view>
<view v-if="showp">
<view style="position: fixed;left: 0; top: 0;width: 100vw;height: 100vh;background-color: rgba(0, 0, 0, 0.2);">
<view style="margin: 200rpx auto;width: 600rpx;height: 818rpx;background-color: #FFFFFF;padding: 0 32rpx;position: relative;">
<view style="font-size: 28rpx;
font-family: Microsoft YaHei, Microsoft YaHei-Bold;
font-weight: 700;
text-align: left;
color: #191919;
line-height: 120rpx;
border-bottom: 1rpx solid #e7e7e7;
position: relative;">
<text>{{dataInfo.title}}</text>
<view style="position: absolute; right: 20rpx; top: 0">
<view style="color: red;">
<text class="unit"></text>
<text>{{dataInfo.money}}</text>
<text class="tips">/{{dataInfo.company}}</text>
</view>
</view>
</view>
<view style="font-size: 24rpx;line-height: 60rpx;margin-top: 30rpx;">
<view class="active-time">
<text>时间: {{dataInfo.startTime}} - {{dataInfo.endTime}}</text>
</view>
<view class="active-add">
<text>地址: {{dataInfo.place}}</text>
</view>
<view class="active-add">
<text>注意
1.时间地点要留心
2.兼职期间要注意安全
3.提前收费不可信
4. 口头协议不可信
5.购物网站刷单工作需谨慎
</text>
</view>
</view>
<view style="position: absolute; bottom: 50rpx;display: flex;">
<image style="width: 60rpx; height: 60rpx; border-radius: 50%;" src="../../static/qrcode.jpg"></iimage>
<view style="padding: 18rpx;font-size: 28rpx;">兼兼街</view>
</view>
<view style="position: absolute; bottom: 50rpx; right: 32rpx;">
<canvas canvas-id="qrcode" style="width: 140rpx; height: 140rpx;"/>
<view style="padding: 18rpx;font-size: 24rpx;text-align: center;">国联智聘</view>
</view>
</view>
<view style="position: absolute; bottom: 0; left: 0;">
<view style="display: flex; background-color: #CCCCCC;">
<view style="width: 266rpx; height: 72rpx; border: 1rpx solid #00BBFF; color: #00BBFF; line-height: 72rpx;text-align: center;margin: 20rpx 60rpx;" @click="showp=false">取消</view>
<view style="width: 266rpx; height: 72rpx; border: 1rpx solid #00BBFF; background-color: #00BBFF; color: #FFFFFF; line-height: 72rpx;text-align: center;margin: 20rpx 60rpx; margin-left: auto;" @click="">保存海报</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import uQRCode from '@/common/uqrcode.js'
import WxBCard from '@/components/run-component/wx-b-card.vue'
export default{
components: {
WxBCard
},
data(){
return{
shareShow:false,
fromPage:null,
dataInfo:{},
showp: false,
userInfo: {},
id:'',
erop: false,
src: '', // require('@/static/img/course-img.png'),
baomingStyle: {
fontSize: "30rpx",
fontWeight: "700",
height: "100rpx"
}
}
},
onLoad(e) {
if(e.fromPage) this.fromPage = e.fromPage;
this.id = e.id;
this.getactivityFindById(e.id);
},
onReady() {
this.$com.displayNav()
},
methods:{
getmyInfo(){
this.$api('myInfo')
.then(res=>{
if(res.code == 200){
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo',res.result)
this.qrFun('https://xinxiong.java996.icu/pages/my/login-kehu?vid=' + this.userInfo.id + "&did=" + this.id)
}else{
this.userInfo = null
}
})
},
getCreteClick(){
let that = this;
this.$api('creteClick',{title: this.dataInfo.title,newId:this.dataInfo.id})
.then(res=>{
if(res.code == 200){
that.erop = true;
}else{
this.$Toast(res.message)
//
setTimeout(()=>{ //
uni.navigateTo({
url:'/pages/my/list-renzhen'
})
},2000);
}
})
},
qrFun(text) {
this.qrShow = true
uQRCode.make({
canvasId: 'qrcode',
componentInstance: this,
text: text,
size: 65,
margin: 0,
backgroundColor: '#FFFFFF',
foregroundColor: '#000000',
fileType: 'png',
errorCorrectLevel: uQRCode.errorCorrectLevel.H,
success: res => {
console.log("ercode", text)
}
})
},
apply(){
if(!this.$store.state.userToken){
this.$Toast('请先登录!')
setTimeout(()=>{
uni.navigateTo({
url:'/pages/my/login-kehu'
})
},1000)
return
}
this.share(1)
uni.navigateTo({
url:`/pages/home/buy-course?id=${this.id}`
})
},
wechatMoments() {
this.$api('creteFenxian',{url: location.href.split('#')[0]})
.then(res=>{
if (res.code == 200) {
this.$jweixin.config({
debug: false, // ,apialertpclogpc
appId: 'wxdabccf5a0110cfab', //
timestamp: res.result.timestamp, //
nonceStr: res.result.noncestr, //
signature: res.result.sgture, //
jsApiList: ['updateAppMessageShareData','updateTimelineShareData','onMenuShareTimeline','onMenuShareAppMessage','chooseWXPay']
});
this.$jweixin.ready(ress=> {
this.$jweixin.updateTimelineShareData({
title: this.dataInfo.title,
link: `https://xinxiong.java996.icu/pages/home/course-detial?id=${this.id}`, // JS
})
});
}
})
},
share(type){//1
if(!type){
this.shareShow = true;
}
this.$api('creteFenxian',{url: location.href.split('#')[0]})
.then(res=>{
if (res.code == 200) {
this.$jweixin.config({
debug: false, // ,apialertpclogpc
appId: 'wxdabccf5a0110cfab', //
timestamp: res.result.timestamp, //
nonceStr: res.result.noncestr, //
signature: res.result.sgture, //
jsApiList: ['updateAppMessageShareData','updateTimelineShareData','onMenuShareTimeline','onMenuShareAppMessage','chooseWXPay']
});
this.$jweixin.ready(ress=> {
this.$jweixin.onMenuShareTimeline({
title: this.dataInfo.title,
desc: this.dataInfo.title, //
link: `http://liyuyu.xzaiyp.top/pages/home/course-detial?id=${this.id}`, // JS
success: function () {
//
}
})
this.$jweixin.onMenuShareAppMessage({
title: this.dataInfo.title,
desc: this.dataInfo.title, //
link: `http://liyuyu.xzaiyp.top/pages/home/course-detial?id=${this.id}`, // JS
success: function () {
//
}
})
})
this.$jweixin.error(err=>{
// uni.showModal({
// content:'err:' + JSON.stringify(err)
// })
// config error config debug res SPA
});
// uni.navigateTo({
// url:`/pages/home/buy-course?id=${this.id}`
// })
}
})
},
getactivityFindById(id){
uni.showLoading()
this.$api('activityFindById',{id})
.then(res=>{
uni.hideLoading()
if(res.code == 200){
this.dataInfo = res.result;
}
})
},
poster (){
this.showp = true;
this.getmyInfo()
}
}
}
</script>
<style lang="scss" scoped>
.hide-context {
margin: 20rpx 0;
padding: 30rpx 30rpx;
outline: 0px;
width: 100%;
max-width: 100%;
box-sizing: border-box;
overflow-wrap: break-word;
display: inline-block;
vertical-align: top;
background-image: linear-gradient(#dceefc 0%, #fefeff 100%);
height: auto;
overflow: hidden;
border: 0px none;
color: #B0B0B0;
text-align: center;
font-size: 26rpx;
}
.active-card {
background: #ffffff;
padding: 20rpx 29rpx 13rpx;
border-bottom: 20rpx solid #F5F5F5;
.active-title {
font-size: 36rpx;
color: #000;
font-weight: 700;
margin-top: 20rpx;
line-height: 40rpx;
}
.active-time {
color: #707070;
font-size: 30rpx;
margin: 30rpx 0;
}
.active-add {
color: #707070;
font-size: 30rpx;
}
.menu-price {
font-weight: 700;
font-size: 40rpx;
color: #D33D3E;
.unit {
font-size: 40rpx;
}
.tips {
font-size: 30rpx;
}
}
.copy {
padding-left: 20rpx;
font-size: 26rpx;
color: #1b2bbc;
cursor: pointer;
}
.active-menu {
margin-top: 31rpx;
.menu-btn {
width: 213rpx;
height: 79rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: #ED1450;
color: #FFFFFF;
font-size: 26rpx;
border-radius: 40rpx;
}
}
}
.contnet {
padding: 20rpx 20rpx 150rpx 20rpx ;
font-weight: 500;
font-size: 40rpx;
}
.btn-box {
position: fixed;
bottom: 0;
left: 0;
right: 0;
}
.share-box {
width: 100%;
height: 100vh;
position: fixed;
top: 0;
left: 0;
background-color: rgba(0,0,0,.8);
.jiantou {
position: absolute;
top: 140rpx;
right: 40rpx;
image {
width: 138rpx;
height: 138rpx;
}
}
.title {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
image {
width: 526rpx;
height: 212rpx;
}
}
}
</style>

+ 214
- 0
pages/home/index.vue View File

@ -0,0 +1,214 @@
<template>
<view class="home-pages">
<u-swiper
:list="swpList"
keyName="image"
indicator
height="220"
indicatorActiveColor="#FFFFFF"
indicatorMode="dot"
circular
@click="swpClick"
></u-swiper>
<view class="home-content">
<u-tabs
:list="tabList"
lineWidth="70"
lineHeight="3"
lineColor= "#00CCCC"
:activeStyle="{
color: '#000000',
fontWeight: 'bold',
transform: 'scale(1.35)'
}"
:inactiveStyle="{
color: '#000000',
transform: 'scale(1)'
}"
itemStyle="padding-left: 15px; padding-right: 15px; height: 34px;"
@click="tabClick"
>
</u-tabs>
<scroll-view scroll-y="true" class="scroll-y"
<template>
<active-card v-for="(item,i) in studyList" :item="item" :key="i" :i="i" @seeDetail="seeDetail"></active-card>
</template>
</scroll-view>
</view>
</view>
</template>
<script>
import activeCard from '@/components/active-card/index.vue'
import newCard from '@/components/new-card/index.vue'
export default{
components:{
activeCard,
newCard
},
data(){
return{
params:{
pageNo:1,
labelClass:'1616491855729131521',
pageSize:10,
total: null,
isLock: true
},
current:0,
studyList:[],
swpList: [],
tabList: []
}
},
onLoad() {
this.studyList = [];
this.params.pageNo = 1;
this.params.total = null;
this.params.isLock = true;
this.getstudy();
// this.getknowledge();
this.getbannerList()
this.getJobAddressList();
},
// h5
onReady() {
this.$com.displayNav()
},
onPullDownRefresh() {
this.studyList = [];
this.params.pageNo = 1;
this.params.total = null;
this.params.isLock = true;
this.getstudy()
},
onReachBottom() {
if(this.params.isLock){
this.params.isLock = false;
if(this.params.total !== null && this.params.pageNo * this.params.pageSize >= this.params.total){
this.$Toast('没有更多数据了哦!');
setTimeout(()=>{
this.params.isLock = true;
},3000)
return
}
this.params.pageNo+=1;
//this.$Toast('');
this.getstudy();
}
},
methods:{
lower(){
},
getbannerList(){
this.$api('bannerList')
.then(res=>{
if(res.code == 200){
this.swpList = res.result
}
})
},
//
getJobAddressList(){
this.$api('IndexJobAddress').then(res=>{
if(res.code == 200){
this.tabList = res.result;
}
})
},
getstudy(){//
if(this.pageNo>1){
uni.showLoading({})
}
this.$api('JobList',this.params)
.then(res=>{
if(res.code == 200){
if(this.params.total== null) {
this.params.total = res.result.total
}
if(this.params.pageNo>1){
uni.hideLoading();
}
this.studyList = this.studyList.concat(res.result.records);
this.params.isLock = true;
}else {
if(this.params.pageNo>1){
uni.hideLoading();
}
this.params.isLock = true;
}
})
},
swpClick(){
},
tabClick(e){
this.params.labelClass = e.id;
this.params.pageNo =1;
console.log(this.params.labelClass)
this.studyList = [];
this.getstudy();
},
seeDetail(item){//
this.$api('myInfo')
.then(res=>{
if(res.code == 200){
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo',res.result)
uni.navigateTo({
url:`/pages/home/course-detial?id=${item.id}`
})
}else{
this.$Toast('请先登录!')
setTimeout(()=>{
uni.navigateTo({
url:'/pages/my/login-kehu'
})
},1000)
return
this.userInfo = null
}
})
},
newDetail(item){//
uni.navigateTo({
url:`/pages/home/new-detail?id=${item.id}`
})
}
}
}
</script>
<style lang="scss" scoped>
.home-pages {
padding: 28rpx 29rpx 0;
background-color: #F7F7F7;
.swiper{
position: relative;
height: calc(100% -7vh);
width: 100%;
height: 1800px;
}
.scroll-Y {
height: calc(300vh - 660rpx);
padding-top: 20rpx;
}
.home-content {
.active-card{
margin-top: 20rpx;;
border-radius: 0;
border: none;
border-style: none;
box-shadow: none;
}
}
}
</style>

+ 53
- 0
pages/home/new-detail.vue View File

@ -0,0 +1,53 @@
<template>
<view class="new-detail">
<view class="title">{{informData.title}}</view>
<view class="time">{{informData.createTime}}</view>
<u-parse :content="informData.context"></u-parse>
</view>
</template>
<script>
export default{
data(){
return{
informData: {}
}
},
// h5
onReady() {
this.$com.displayNav()
},
onLoad(e) {
this.getinformFindById(e.id)
},
methods:{
getinformFindById(id){
uni.showLoading()
this.$api('informFindById',{id})
.then(res=>{
uni.hideLoading()
if(res.code == 200){
this.informData = res.result;
}
})
}
}
}
</script>
<style lang="scss" scoped>
.new-detail {
padding: 38rpx 40rpx 50rpx;
.title {
font-size: 34rpx;
color: #000000;
font-weight: 700;
}
.time {
font-size: 22rpx;
color: #C8C8C8;
margin: 40rpx 0;
}
}
</style>

+ 28
- 0
pages/home/pay-success.vue View File

@ -0,0 +1,28 @@
<template>
<view class="pay-success">
<image src="../../static/img/pay-success.png" mode=""></image>
<view class="mt-2 mb-2">支付成功!</view>
<view>请到 我的-我的报名 中查看详情</view>
</view>
</template>
<script>
</script>
<style lang="scss" scoped>
.pay-success {
width: 100%;
font-size: 34rpx;
color: #20D76D;
display: flex;
flex-direction: column;
align-items: center;
padding-top: 262rpx;
image {
width: 128rpx;
height: 128rpx;
}
}
</style>

+ 282
- 0
pages/my/baoming-detail.vue View File

@ -0,0 +1,282 @@
<template>
<view class="buy-course">
<view class="course-box ">
<view class="course-box-item flex">
<u--image :showLoading="true" :src="dataInfo.photo" width="281rpx" height="178rpx"></u--image>
<view class="box-right">
<view class="active-title">{{dataInfo.title}}</view>
<view class="active-time">
<!-- <u-icon size="40" name="https://cdn.uviewui.com/uview/example/button.png"></u-icon> -->
<text>{{dataInfo.activityTime}}</text>
</view>
<view class="active-add">
<text>{{dataInfo.place}}</text>
</view>
</view>
</view>
</view>
<view class="from-box">
<view class="from-title">填写报名人信息</view>
<u--form
labelPosition="left"
:model="userInfo"
ref="form1"
labelWidth="80"
:labelStyle="formLabelStyle"
>
<u-form-item
label="姓名:"
borderBottom
ref="item1"
>
<u--input
v-model="userInfo.name"
border="none"
placeholder="请输入姓名"
></u--input>
</u-form-item>
<u-form-item
label="联系电话:"
borderBottom
ref="item1"
>
<u--input
v-model="userInfo.phone"
border="none"
placeholder="请输入手机号码"
type="number"
></u--input>
</u-form-item>
<u-form-item
label="公司名称:"
borderBottom
ref="item1"
>
<u--input
v-model="userInfo.companyName"
border="none"
placeholder="请输入公司名称"
></u--input>
</u-form-item>
<u-form-item
label="公司职务"
borderBottom
ref="item1"
>
<u--input
v-model="userInfo.companyPost"
border="none"
placeholder="请输入所在公司职务名称"
></u--input>
</u-form-item>
</u--form>
</view>
<view class="pay-box">
<view class="pay-price flex align-center justify-between">
<view class="pay-price-tip">费用</view>
<view>
<text class="unit"></text>
<text>{{dataInfo.money}}</text>
</view>
</view>
<view class="pay-type flex flex-column align-center">
<image src="../../static/img/pay-success.png" mode=""></image>
<view>支付成功</view>
</view>
</view>
</view>
</template>
<script>
export default{
data(){
return{
chooseType: 0,
dataInfo: {},
userInfo:{
name:'',
companyName:'',
phone:'',
companyPost:''
},
formLabelStyle:{
color: '#707070',
fontSize: '30rpx'
},
baomingStyle: {
fontSize:"30rpx",
fontWeight:"700",
height: "100rpx"
},
payList: [
{
id:0,
src:require('@/static/img/wechat-icon.png')
},
// {
// id:1,
// src:require('@/static/img/alipy-icon.png')
// }
]
}
},
onLoad(e) {
this.getactivityFindById('1584923974407417857')
},
// h5
onReady() {
this.$com.displayNav()
},
methods:{
choosePay(item){
this.chooseType = item.id;
},
// apply(){
// uni.redirectTo({
// url:'/pages/home/pay-success'
// })
// },
apply(){//
let params = {
activityId:'1565169118319157250',
payType:this.chooseType,
...this.userInfo,
}
this.$api('saveEnroll',params)
.then(res=>{
if(res.code == 200){
this.wxPay(res.result)
}
})
},
wxPay(id){
this.$api('recharge',{id})
.then(res=>{
this.$jweixin.invoke(
"getBrandWCPayRequest", {
appId: res.result.appId, //
timeStamp: res.result.timeStamp, //1970
nonceStr: res.result.nonceStr, //
package: res.result.packageValue, //package prepay_id=wx22104854834640694c34f15a1066605800
signType: res.result.signType, //
paySign: res.result.paySign,//
},
function(res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
uni.showToast({
title: '支付成功',
icon: 'none',
duration: 1500
})
// 使,
//res.err_msgok
}
}
);
})
},
getactivityFindById(id){
uni.showLoading()
this.$api('activityFindById',{id})
.then(res=>{
uni.hideLoading()
if(res.code == 200){
this.dataInfo = res.result;
}
})
}
}
}
</script>
<style lang="scss" scoped>
.buy-course {
.course-box {
padding: 0 26rpx;
.course-box-item {
background: #ffffff;
border-radius: 12rpx;
box-shadow: 0px 3rpx 6rpx 0px rgba(0,0,0,0.16);
padding: 33rpx 13rpx;
.box-right {
margin-left: 16rpx;
.active-title {
font-size: 30rpx;
color: #000;
line-height: 40rpx;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.active-time {
color: #707070;
font-size: 26rpx;
margin: 10rpx 0 14rpx 0;
}
.active-add {
color: #707070;
font-size: 26rpx;
}
}
}
}
.from-box {
padding: 0 26rpx;
.from-title {
font-size: 30rpx;
color: #000;
margin-top: 35rpx;
margin-bottom: 15rpx;
}
}
.pay-box {
border-top: 20rpx solid #F5F5F5;
padding: 0 26rpx;
.pay-price {
color: #D33D3E;
font-size: 40rpx;
font-weight: 700;
padding: 47rpx 0 20rpx 0;
border-bottom: 1px solid #E6E6E6;
.pay-price-tip {
color: #000000;
font-size: 30rpx;
font-weight: 400;
}
.unit {
font-size: 30rpx;
font-weight: 400;
}
}
.pay-type {
color: #20D76D;
font-size: 30rpx;
padding-top: 40rpx;
image {
width: 165rpx;
height: 165rpx;
margin-bottom: 42rpx;
}
}
}
}
</style>

+ 125
- 0
pages/my/canyu-detail.vue View File

@ -0,0 +1,125 @@
<template>
<view>
<view class="active-card">
<u--image :showLoading="true" :src="dataInfo.photo" width="100%" height="314rpx"></u--image>
<view class="active-title">{{dataInfo.title}}</view>
<view class="active-time">
<!-- <u-icon size="40" name="https://cdn.uviewui.com/uview/example/button.png"></u-icon> -->
<text>{{dataInfo.activityTime}}</text>
</view>
<view class="active-add">
<text>{{dataInfo.place}}</text>
</view>
<view class="active-menu">
<view class="menu-price">
<text class="unit"></text>
<text>{{dataInfo.money}}</text>
</view>
</view>
</view>
<view class="contnet">
<u-parse :content="dataInfo.details"></u-parse>
</view>
</view>
</template>
<script>
export default{
data(){
return{
fromPage:null,
dataInfo:{},
id:'',
src: '', //require('@/static/img/course-img.png'),
baomingStyle: {
fontSize:"30rpx",
fontWeight:"700",
height: "100rpx"
}
}
},
onLoad(e) {
this.getactivityFindById('1584923974407417857');
},
// h5
onReady() {
this.$com.displayNav()
},
methods:{
getactivityFindById(id){
uni.showLoading()
this.$api('activityFindById',{id})
.then(res=>{
uni.hideLoading()
if(res.code == 200){
this.dataInfo = res.result;
}
})
}
}
}
</script>
<style lang="scss" scoped>
.active-card {
background: #ffffff;
padding: 20rpx 29rpx 13rpx;
border-bottom: 20rpx solid #F5F5F5;
.active-title {
font-size: 30rpx;
color: #000;
font-weight: 700;
margin-top: 20rpx;
line-height: 40rpx;
}
.active-time {
color: #707070;
font-size: 26rpx;
margin: 20rpx 0;
}
.active-add {
color: #707070;
font-size: 26rpx;
}
.active-menu {
margin-top: 21rpx;
padding: 0 10rpx;
.menu-price {
font-weight: 700;
font-size: 40rpx;
color: #D33D3E;
.unit {
font-size: 30rpx;
}
}
.menu-btn {
width: 213rpx;
height: 79rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: #ED1450;
color: #FFFFFF;
font-size: 26rpx;
border-radius: 40rpx;
}
}
}
.contnet {
padding: 20rpx 20rpx 100rpx;
}
.btn-box {
position: fixed;
bottom: 0;
left: 0;
right: 0;
}
</style>

+ 152
- 0
pages/my/edit-user.vue View File

@ -0,0 +1,152 @@
<template>
<view>
<view style="margin-bottom: 50rpx;">
<view class="user-from">
<view class="user-from-line">
<view class="line-lable">头像</view>
<view class="line-value" @click="upImg">
<image class="user-img" :src="userData.headImage" mode=""></image>
</view>
</view>
<view class="user-from-line">
<view class="line-lable">名称</view>
<view class="line-value">
<u--input
placeholder="请输入名称"
v-model="userData.nickName"
border="none"
inputAlign="right"
></u--input>
</view>
</view>
<view class="user-from-line">
<view class="line-lable">手机号</view>
<view class="line-value">
<u--input
placeholder="请输入手机号"
v-model="userData.phone"
border="none"
inputAlign="right"
></u--input>
</view>
</view>
</view>
</view>
<view class="modify-but">
<u-button :custom-style="modifyStyle" shape="circle" hover-class="none" @click="submit">保存</u-button>
<u-button :custom-style="modifyStyleQuxiao" shape="circle" hover-class="none" @click="outLogin">退出登陆</u-button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
value:'',
modifyStyle: {
width: '670rpx',
height: '85rpx',
background: '#00CCCC',
color: '#fff',
fontSize: '32rpx'
},
modifyStyleQuxiao: {
width: '670rpx',
height: '85rpx',
background: '#f4f4f4',
color: '#333',
fontSize: '32rpx',
marginTop: '40rpx'
},
userData:{}
}
},
onLoad() {
},
onShow() {
this.getMyInfo()
},
// h5
onReady() {
this.$com.displayNav()
},
methods: {
upImg(){
uni.chooseImage({
count: 1, // SDK
success: (res) => {
uni.uploadFile({
url: 'https://api.chemu90.com/xcx/oss/upload', //
filePath: res.tempFilePaths[0],
name: 'file',
success: (uploadFileRes) => {
this.form.pic = JSON.parse(uploadFileRes.data).result
}
});
}
})
},
getMyInfo(){
this.$api('myInfo')
.then(res=>{
if(res.code == 200){
this.userData = res.result;
}
})
},
outLogin(){
uni.clearStorageSync();
this.$Toast('退出成功!')
setTimeout(()=>{
uni.switchTab({
url:'/pages/my/index'
})
},500)
}
}
}
</script>
<style lang="scss" scoped>
.user-from {
padding: 0 24rpx;
.user-from-line {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #f4f4f4;
height: 100rpx;
.line-lable {
font-size: 30rpx;
}
.line-value {
.user-img {
width: 70rpx;
height: 70rpx;
}
.erweima {
width: 333rpx;
height: 333rpx;
}
}
}
.heightAuto {
height: auto;
border: none;
align-items: flex-start;
padding-top: 30rpx;
}
}
.modify-but {
}
</style>

+ 235
- 0
pages/my/index.vue View File

@ -0,0 +1,235 @@
<template>
<view class="my-pages">
<view class="temps-box">
<view class="head-mode" @click="toLogin">
<u--image shape="circle" :src="userInfo?userInfo.headImage : morenSrc" width="149rpx" height="149rpx" ></u--image>
<view class="head-name">{{userInfo?userInfo.nickName : '未登录'}}</view>
<view> {{userInfo?'余额:'+userInfo.price : ''}}</view>
<view>{{userInfo?'积分:'+userInfo.integerPrice : ''}}</view>
</view>
<view class="btns">
<view class="btns-context" v-for="(item,i) in cellList" :key="i" @click="toUrl(item.pages,item.name)">
<image style="width: 60rpx;height: 60rpx; padding: 40rpx 40rpx;" :src="item.src" mode=""></image>
<view style="padding: 54rpx 0;">{{item.name}}</view>
<view style="margin-left: auto; padding: 55rpx 40rpx;">
<view class="menu-after"></view>
</view>
</view>
</view>
<view class="kefu-box">
<view class="kefu">
<view class="image">
<image class="image-img" src="../../static/kefu.png" @click="previewImg('../../static/kefu.png')" mode=""></image>
</view>
</view>
<view class="kefufont"> @湖南瀚海黎明信息科技有限公司提供技术支持 </view>
</view>
</view>
</view>
</template>
<script>
export default{
data(){
return{
userInfo:null,
role:0,//2
morenSrc:require('@/static/img/logon-icon.png'),
cellList: [
{
name:'邀请二维码',
src:require('@/static/img/info/code.png'),
role:'0',
pages:'/pages/my/my-xiansuo-new'
},
{
name:'我的粉丝',
src:require('@/static/img/info/fans.png'),
role:'0',
pages:'/pages/my/list-fensi'
},
{
name:'我要发布',
src:require('@/static/img/tabbar/fabu-xuan.png'),
role:'0',
pages:'/pages/my/my-fabujianzhi'
},
{
name:'发布信息',
src:require('@/static/img/tabbar/fabu-xuan.png'),
role:'0',
pages:'/pages/my/my-fabujianzhi-list'
},
]
}
},
onShow() {
this.getmyInfo()
},
// h5
onReady() {
this.$com.displayNav()
},
methods:{
previewImg(imageUrl){
var images = [];
images.push(imageUrl);
console.log(images) // ["http://192.168.100.251:8970/6_1597822634094.png"]
uni.previewImage({ // => ["http://192.168.100.251:8970/6_1597822634094.png"]
current:0,
urls:images,
longPressActions: { //
itemList: ['保存图片'],
success: (data)=> {
console.log(data);
uni.saveImageToPhotosAlbum({ //
filePath: payUrl,
success: function () {
uni.showToast({icon:'success',title:'保存成功'})
},
fail: (err) => {
uni.showToast({icon:'none',title:'保存失败,请重新尝试'})
}
});
},
fail: (err)=> {
console.log(err.errMsg);
}
}
});
},
getmyInfo(){
this.$api('myInfo')
.then(res=>{
if(res.code == 200){
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo',res.result)
}else{
this.userInfo = null
}
})
},
toUrl(url,name){
this.$api('myInfo')
.then(res=>{
if(res.code == 200){
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo',res.result)
uni.navigateTo({
url
})
// if(name=='' || name=='' || name=='' || name==''){
// }else{
// this.$Toast(',!')
// }
}else{
this.$Toast('请先登录!')
setTimeout(()=>{
uni.navigateTo({
url:'/pages/my/login-kehu'
})
},1000)
return
this.userInfo = null
}
})
},
toLogin(){
if(!this.userInfo){
uni.navigateTo({
url:"/pages/my/login-kehu"
})
}else{
uni.navigateTo({
url:'/pages/my/edit-user'
})
}
}
}
}
</script>
<style lang="scss" scoped>
.my-pages {
background: url("@/static/2.png");
background-size: 100% 100%;
width: 100vw;
height: calc(100vh - 80rpx);
}
.temps-box {
//background-color: #00CCCC;
height: 538rpx;
.head-mode {
display: flex;
justify-items: center;
height:168rpx;
padding: 50rpx 20rpx 20rpx 20rpx;
//background-color: #00CCCC;
.head-name {
padding: 38rpx;
font-size: 40rpx;
font-weight: 600;
font-family: SimSun;
}
}
.btns {
margin-top: 15rpx;
background-color: #FFFFFF;
.btns-context {
height: 120rpx;
display:flex;
border-bottom:1px solid #F7F7F7;
}
}
.kefu-box {
position: absolute;
bottom: 50rpx;
.kefu{
width: 100vw;
display: flex;
text-align: center;
justify-items: center;
.image{
display: flex;
margin: 0 auto;
text-align: center;
justify-items: center;
}
}
.kefufont{
padding: 20rpx 0;
width: 100%;
position: absolute;
font-size: 20rpx;
text-align:center;
color: #5E5E5E;
}
.image-img {
width: 147rpx;
height: 147rpx;
}
}
.menu-after {
width: 15rpx;
height: 15rpx;
border-right: 3rpx solid #808080;
border-bottom: 3rpx solid #808080;
transform:rotate(-45deg);
}
}
</style>

+ 213
- 0
pages/my/list-fensi.vue View File

@ -0,0 +1,213 @@
<template>
<view>
<view class="home-pages">
<view style="position: absolute;top: 0; left: 0; height: 188rpx; width: 100%; z-index: 100; background-color: #FFFFFF; box-shadow: 0px 15px 10px -15px #E8E8E8;">
<view style="margin: 28rpx 24rpx; display: flex;">
<image :showLoading="true" :src="userInfo?userInfo.headImage : ''" style="width: 148rpx;height: 148rpx;border-radius: 50%;"></image>
<view style="padding: 28rpx;">
<view style="font-size: 32rpx;font-weight: 600">{{userInfo?userInfo.nickName : '点击登录'}}</view>
<view style="font-size: 30rpx;margin-top: 20rpx;">粉丝数量{{params.total}}</view>
</view>
</view>
</view>
<view class="home-content">
<user-card v-for="(item,i) in informationList" :key="i" :item="item"></user-card>
</view>
</view>
</view>
</template>
<script>
import userCard from '@/components/user-card/index.vue'
export default{
components:{
userCard
},
data(){
return{
userInfo:null,
current:1,
activiteList:[],
informationList:[],
params:{
pageNo:1,
pageSize:10,
total: null,
isLock: true
},
}
},
onShow() {
this.getmyInfo()
},
onLoad() {
this.getinformation()
// if(this.current == 0){
// this.getActivity();
// }else{
// this.getinformation()
// }
},
onPullDownRefresh() {
this.activiteList = [];
this.params.pageNo = 1;
this.params.total = null;
this.params.isLock = true;
this.getinformation()
},
onReachBottom() {
if(this.params.isLock){
this.params.isLock = false;
if(this.params.total !== null && this.params.pageNo * this.params.pageSize >= this.params.total){
this.$Toast('没有更多数据!');
setTimeout(()=>{
this.params.isLock = true;
},3000)
return
}
this.params.pageNo+=1;
this.$Toast('数据加载成功!');
this.getinformation()
}
},
onPullDownRefresh() {
this.params.pageNo = 1;
this.getinformation()
// if(this.current == 0){
// this.getActivity();
// }else{
// this.getinformation()
// }
},
// h5
onReady() {
this.$com.displayNav()
},
methods:{
getmyInfo(){
this.$api('myInfo')
.then(res=>{
if(res.code == 200){
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo',res.result)
}else{
this.userInfo = null
}
})
},
// tabClick(e){
// this.current = e.index;
// this.params.pageNo = 1;
// if(this.current == 0){
// this.getActivity(2);
// }else{
// this.getinformation(2)
// }
// },
// getActivity(type){
// uni.showLoading()
// this.$api('activity',this.params)
// .then(res=>{
// uni.hideLoading()
// if(res.code == 200){
// if(this.params.total== null) {
// this.params.total = res.result.total
// }
// if(this.params.pageNo>1){
// uni.hideLoading();
// }
// this.pages = this.pages.concat(res.result.pages);
// this.params.isLock = true;
// }else {
// if(this.params.pageNo>1){
// uni.hideLoading();
// }
// this.params.isLock = true;
// }
// })
// },
getinformation(type){
if(this.pageNo>1){
uni.showLoading({})
}
this.$api('getFans',this.params)
.then(res=>{
if(res.code == 200){
if(this.params.total== null) {
this.params.total = res.result.total
}
if(this.params.pageNo>1){
uni.hideLoading();
}
this.informationList = this.informationList.concat(res.result.records);
this.params.isLock = true;
}else {
if(this.params.pageNo>1){
uni.hideLoading();
}
this.params.isLock = true;
}
})
// uni.showLoading()
// this.$api('getFans',this.params)
// .then(res=>{
// uni.hideLoading()
// if(res.code == 200){
// this.pages = res.result.pages;
// if(type == 2){
// this.informationList = [...this.informationList,...res.result.records];
// }else{
// this.informationList = res.result.records;
// uni.stopPullDownRefresh();
// }
// }
// })
},
seeDetail(item){//
uni.navigateTo({
url:`/pages/home/course-detial?id=${item.id}`
})
},
newDetail(item){//
uni.navigateTo({
url:`/pages/home/new-detail?id=${item.id}`
})
},
lower(){
if(this.params.pageNo >= this.pages) return;
this.params.pageNo ++;
if(this.current == 0){
this.getActivity(2);
}else{
this.getinformation(2)
}
},
}
}
</script>
<style lang="scss" scoped>
.home-content {
margin-top: 20rpx;
}
.home-pages {
padding: 188rpx 29rpx 0;
background-color: #F7F7F7;
.scroll-Y {
height: calc(100vh - 200rpx);
padding-top: 20rpx;
}
}
</style>

+ 168
- 0
pages/my/list-renzhen.vue View File

@ -0,0 +1,168 @@
<template>
<view>
<view v-if="userInfo.isPay === 0">
<view class="from">
<view class="call-title">
会员权益:
</view>
<view class="call-title">
1.每天不限制查看兼职联系方式次数
</view>
<view class="call-title">
2.一经开通永久有效.
</view>
</view>
<view v-if="userInfo.isPay === 0" class="pay-btn" @click="wxPay()">
支付6.66元开通永久会员
</view>
<view v-if="userInfo.isPay === 1" class="pay-btn disabled">
您已成为会员
</view>
</view>
<view v-if="userInfo.isPay === 1" class="scuescc"></view>
</view>
</template>
<script>
import userCard from '@/components/user-card/index.vue'
export default{
components:{
userCard
},
data(){
return{
userInfo:{
name:"开通会员",
cardId:"成为VIP",
isPay: 0
},
current:1,
activiteList:[],
informationList:[],
params:{
pageNo:1,
pageSize:10,
total: null,
isLock: true
},
}
},
onShow() {
this.getmyInfo()
},
onLoad() {
},
onReady() {
this.$com.displayNav()
},
methods:{
getmyInfo(){
this.$api('myInfo')
.then(res=>{
if(res.code == 200){
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo',res.result)
}else{
this.userInfo = null
}
})
},
wxPay(){
let that = this;
that.$api('create',{name:"成为会员",card:"开通会员"})
.then(res=>{
that.$jweixin.config({
debug: false, // ,apialertpclogpc
appId: 'wx6fb4a17b28186d58', //
timestamp: res.result.timestamp, //
nonceStr: res.result.noncestr, //
signature: res.result.sgture, //
jsApiList: ['updateAppMessageShareData','updateTimelineShareData','onMenuShareTimeline','onMenuShareAppMessage','chooseWXPay']
});
that.$jweixin.chooseWXPay({
appId: 'wx6fb4a17b28186d58',
timestamp: res.result.timeStamp, // jssdk 使 timestamp 使 timeStamp S
nonceStr: res.result.nonceStr, // 32
package: res.result.packageValue, // prepay_idprepay_id=\*\*\*
signType: res.result.signType, // V3 RSA ,V2V2
paySign: res.result.paySign, //
success: function (res) {
//
uni.switchTab({
url:'/pages/my/index'
})
}
});
})
},
}
}
</script>
<style lang="scss" scoped>
.from {
margin-top: 120rpx;
margin-right: 20rpx;
margin-left: 100rpx;
}
.call-title {
font-size: 30rpx;
color: #000000;
position: relative;
line-height: 40rpx;
padding: 15rpx 0 32rpx;
&::after{
content: '';
position: absolute;
display: block;
width: 148rpx;
height: 15rpx;
border-radius: 8px;
top: 46rpx;
}
}
.from-line {
height: 128rpx;
display: flex;
.label-class{
text-align: justify;
text-align-last: justify;
line-height: 128rpx;
width: 108rpx;
padding: 0 24rpx;
}
input{
padding-left: 20rpx;
height: 128rpx;
line-height: 128rpx;
}
}
.pay-btn{
margin:160rpx auto;
width: 487rpx;
border-radius: 8rpx;
text-align: center;
height: 88rpx;
line-height: 88rpx;
background-color: #00CCCC;
font-size: 36rpx;
color: #FFFFFF;
}
.disabled {
background-color: #999;
}
.scuescc {
background: url("@/static/3.png");
background-size: 100% 100%;
width: 100vw;
height: calc(100vh - 88rpx);
}
</style>

+ 195
- 0
pages/my/login-kehu.vue View File

@ -0,0 +1,195 @@
<template>
<view>
<WxBLogin v-if="code === ''"/>
<view v-else class="login">
<!-- <view class="login"> -->
<view class="login-img flex align-center justify-center">
<image src="@/static/img/logon-icon.png" mode=""></image>
</view>
<view class="login-title">兼职尽在兼兼街</view>
<view class="btn-box">
<u-button v-if="code !== ''" text="微信授权登录" :round="true" openType="getUserInfo" @click="logionClick" :customStyle="baomingStyle" :hairline="false" color="#00CCCC"></u-button>
<u-button v-else="code === ''" text="获取登录权限" :round="true" openType="getUserInfo" @click="logionClick" :customStyle="baomingStyle" :hairline="false" color="#00CCCC"></u-button>
</view>
<view class="tips flex align-center justify-between" @click="xieyiChoose = !xieyiChoose">
<view>
注册/登录即代表同意
<text class="xieyi" @click.stop="seeXieyi">用户协议与隐私政策</text>
</view>
</view>
</view>
</view>
</template>
<script>
import WxBLogin from '@/components/run-component/wx-b-login.vue'
export default{
components: {
WxBLogin
},
data(){
return{
xieyiChoose:true,
code: '',
did: '',
vid:'',
baomingStyle: {
fontSize:"30rpx",
fontWeight:"700",
height: "100rpx",
width: "480rpx"
},
baomingStyleQuxiao:{
fontSize:"30rpx",
fontWeight:"700",
height: "100rpx",
width: "480rpx",
marginTop : "40rpx"
}
}
},
onLoad(err){
if (err.vid) {
this.$store.commit('set_ivcode', err.vid);
}
if (err.did) {
uni.setStorageSync("did", err.did);
}
this.code = this.GetQueryString('code');
if(!this.code){
this.getwx_authorize();
}
},
// h5
onReady() {
this.$com.displayNav();
},
methods:{
seeXieyi(){
uni.navigateTo({
url:'/pages/my/xieyi'
})
},
logionClick(){
let actoken ="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2OTAxNzI3NjAsInVzZXJuYW1lIjoib2ROdHc2dEJVNmMxenlnU1lmb2d4ZWdTX2xxbyJ9.btUCZf5Jhx6XZIDLqI8TVTa00edZ989sxzNXe0V0eiw";
this.$store.commit('set_userToken', actoken);
uni.switchTab({
url:'/pages/my/index'
})
let did = uni.getStorageSync("did");
if (did) {
uni.navigateTo({
url:'/pages/home/course-detial?id=' + did
})
} else {
uni.switchTab({
url:'/pages/my/index'
})
}
// if(this.code){
// //
// this.toWxLogin()
// } else {
// //code
// this.getwx_authorize();
// }
},
toWxLogin(code){
this.vid= uni.getStorageSync("ivcode");
this.$api('wxLogin',{code:this.code, vid: this.vid})
.then(res=>{
if(res.code == 200){
this.$store.commit('set_userToken',res.result.token);
this.$store.commit('set_userInfo',res.result.userInfo);
let did = uni.getStorageSync("did");
if (did) {
uni.setStorageSync("did", null);
uni.navigateTo({
url:'/pages/home/course-detial?id=' + did
})
} else {
uni.navigateTo({
url:'/pages/my/my-xiansuo-now'
})
}
}else{
this.$Toast(res.message)
}
}).catch(error=>{
uni.showModal({
content:JSON.stringify(error)
})
})
},
getwx_authorize(){
console.log("进入了这")
this.logionClick()
// let vid = uni.getStorageSync("ivcode");
// //
// let redirect_uri = encodeURIComponent('https://job.java996.icu/pages/my/login-kehu');
// //appid
// let appid = 'wx6fb4a17b28186d58';
// //
// window.location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+'&redirect_uri='+redirect_uri+'&response_type=code&scope=snsapi_userinfo&state='+vid+'&connect_redirect=1#wechat_redirect';
},
//url
GetQueryString(name) {
var url = window.location.href;
try {
var cs = url.split('?')[1]; //?
var cs_arr = cs.split('&'); //
for (var i = 0; i < cs_arr.length; i++) { //json
if (cs_arr[i].split('=')[0] == name) {
return cs_arr[i].split('=')[1];
}
}
return "";
} catch {
return "";
}
},
}
}
</script>
<style lang="scss" scoped>
.login {
background-size: 100% 100%;
height: 70vh;
padding-top: 154rpx;
.login-title {
margin-top: 40rpx;
font-size: 34rpx;
font-weight: 700;
text-align: center;
padding-bottom: 30rpx;
}
.login-img {
image {
border-radius: 50%;
width:248rpx;
height: 248rpx;
}
}
.btn-box {
margin-top: 136rpx;
}
.tips {
width: 500rpx;
position: fixed;
bottom: 52rpx;
left: 51%;
transform: translate(-50%,0);
font-size: 24rpx;
color: #707070;
.xieyi {
color: #00CCFF;
}
}
}
</style>

+ 115
- 0
pages/my/my-baoming.vue View File

@ -0,0 +1,115 @@
<template>
<view class="my-baoming">
<view class="search-box flex align-center justify-between">
<u-search placeholder="输入活动主标题进行搜索" @search="searchClick" searchIconSize="16" :showAction="false" :searchIcon="searchIcon" v-model="params.search"></u-search>
</view>
<view class="content">
<view class="course-box-item flex" @click="seeDetail(item)" v-for="(item,i) in 3" :key="i">
<!-- <u--image :showLoading="true" src="@/static/img/my/dianhua-bg.png" width="281rpx" height="256rpx"></u--image> -->
<view class="box-right">
<view class="active-title">2021 想象力大会 想象力智造 数字板块位移</view>
<view class="active-time">
<text>2021/03/22 13:30</text>
</view>
<view class="active-add">
<text>湖南省长沙市雨花区人民东路111号</text>
</view>
<view class="user-img flex justify-end">
<view class="menu-btn" @click="seeDetail">报名详情</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default{
data(){
return{
searchIcon: require('@/static/img/search-icon.png'),
params:{
pageNo:1,
pageSize:10,
search:''
}
}
},
// h5
onReady() {
this.$com.displayNav()
},
methods:{
seeDetail(){
uni.navigateTo({
url:`/pages/my/baoming-detail`
})
}
}
}
</script>
<style lang="scss">
page {
background-color: #EEEEEE;
}
</style>
<style lang="scss" scoped>
.my-baoming {
.search-box {
margin-bottom: 22rpx;
background-color: #fff;
height: 128rpx;
padding: 0 56rpx;
}
.content {
padding: 0 12rpx;
.course-box-item {
background: #ffffff;
border-radius: 12rpx;
box-shadow: 0px 3rpx 6rpx 0px rgba(0,0,0,0.16);
padding: 33rpx 13rpx;
margin-bottom:17rpx;
.box-right {
margin-left: 16rpx;
.active-title {
font-size: 30rpx;
color: #000;
line-height: 40rpx;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.active-time {
color: #707070;
font-size: 26rpx;
margin: 10rpx 0 14rpx 0;
}
.active-add {
color: #707070;
font-size: 26rpx;
}
.user-img {
.menu-btn {
width: 213rpx;
height: 79rpx;
display: flex;
align-items: center;
justify-content: center;
background-color: #ED1450;
color: #FFFFFF;
font-size: 26rpx;
border-radius: 40rpx;
}
}
}
}
}
}
</style>

+ 172
- 0
pages/my/my-fabujianzhi-list.vue View File

@ -0,0 +1,172 @@
<template>
<view class="home-pages">
<view style="color: #707070;
font-size: 28rpx;">
</view>
<view class="home-content">
<u-tabs
:list="tabList"
lineWidth="70"
lineHeight="3"
lineColor= "#00CCCC"
:activeStyle="{
color: '#000000',
fontWeight: 'bold',
transform: 'scale(1.35)'
}"
:inactiveStyle="{
color: '#000000',
transform: 'scale(1)'
}"
itemStyle="padding-left: 15px; padding-right: 15px; height: 34px;"
@click="tabClick"
>
</u-tabs>
<scroll-view scroll-y="true" class="scroll-y"
<card v-for="(item,i) in studyList" :item="item" :key="i" :i="i" @seeDetail="seeDetail"></card>
</scroll-view>
</view>
</view>
</template>
<script>
import card from '@/components/active-card/index-list.vue'
export default{
components:{
card,
},
data(){
return{
params:{
pageNo:1,
labelClass:'0',
pageSize:10,
total: null,
isLock: true
},
current:0,
studyList:[],
tabList: [
{
id:'0',
name:'未审核'
},
{
id:'1',
name:'已审核'
},
{
id:'2',
name:'已发布'
},
{
id:'3',
name:'已驳回'
}
]
}
},
onLoad() {
this.studyList = [];
this.params.labelClass = "0";
this.params.pageNo = 1;
this.params.total = null;
this.params.isLock = true;
this.queryPageListJobRelease();
},
// h5
onReady() {
this.$com.displayNav()
},
onPullDownRefresh() {
this.studyList = [];
this.params.pageNo = 1;
this.params.total = null;
this.params.isLock = true;
this.queryPageListJobRelease()
},
onReachBottom() {
if(this.params.isLock){
this.params.isLock = false;
if(this.params.total !== null && this.params.pageNo * this.params.pageSize >= this.params.total){
this.$Toast('没有更多数据了哦!');
setTimeout(()=>{
this.params.isLock = true;
},3000)
return
}
this.params.pageNo+=1;
this.$Toast('数据加载成功!');
this.queryPageListJobRelease();
}
},
methods:{
queryPageListJobRelease(){//
if(this.pageNo>1){
uni.showLoading({})
}
this.$api('queryPageListJobRelease',this.params)
.then(res=>{
if(res.code == 200){
if(this.params.total== null) {
this.params.total = res.result.total
}
if(this.params.pageNo>1){
uni.hideLoading();
}
this.studyList = this.studyList.concat(res.result.records);
this.params.isLock = true;
}else {
if(this.params.pageNo>1){
uni.hideLoading();
}
this.params.isLock = true;
}
})
},
tabClick(e){
this.params.labelClass = e.id;
this.params.pageNo =1;
this.studyList = [];
this.queryPageListJobRelease();
},
}
}
</script>
<style lang="scss" scoped>
.home-pages {
padding: 28rpx 29rpx 0;
background-color: #F7F7F7;
.swiper{
position: relative;
height: calc(100% -7vh);
width: 100%;
height: 1800px;
}
.scroll-Y {
height: calc(300vh - 660rpx);
padding-top: 20rpx;
}
.home-content {
.active-card{
margin-top: 20rpx;;
border-radius: 0;
border: none;
border-style: none;
box-shadow: none;
}
}
}
</style>

+ 213
- 0
pages/my/my-fabujianzhi.vue View File

@ -0,0 +1,213 @@
<template>
<view>
<view class="from">
<view class="from-line">
<span class="label-class">岗位名称:</span>
<view><input v-model="release.name" placeholder="请输入岗位名称"/></view>
</view>
<view class="from-line">
<span class="label-class">地址信息:</span>
<view><input v-model="release.address" placeholder="请输入岗位地址"/></view>
</view>
<view class="from-line">
<span class="label-class">招聘地区:</span>
<view><input v-model="release.vsClass" placeholder="请输入招聘地区:长沙街/江华街/深圳街/广州街等 目前开发区域可发布"/></view>
</view>
<view class="from-line">
<span class="label-class">招聘工资:</span>
<view><input v-model="release.money" placeholder="请输入招聘工资"/></view>
</view>
<view class="from-line">
<span class="label-class">工资单位:</span>
<view><input v-model="release.unit" placeholder="请输入工资单位:月/天/小时"/></view>
</view>
<view class="from-line">
<span class="label-class">开始时间:</span>
<view><input v-model="release.startTime" placeholder="请输入开始时间 年/月/日"/></view>
</view>
<view class="from-line">
<span class="label-class">结束时间:</span>
<view><input v-model="release.endTime" placeholder="请输入结束时间 年/月/日"/></view>
</view>
<view class="from-line">
<span class="label-class">联系方式:</span>
<view><input v-model="release.phone" placeholder="请输入联系方式"/></view>
</view>
<view class="from-line">
<span class="label-class">联系微信:</span>
<view><input v-model="release.wx" placeholder="请输入联系微信"/></view>
</view>
<view class="from-line-box">
<span class="label-class">招聘内容:</span>
<u--textarea height="482rpx" v-model="release.myValue" placeholder="请输入兼职信息" count confirmType="done" ></u--textarea>
</view>
</view>
<view class="pay-btn" @click="fabujianzhi()">
确认提交审核
</view>
</view>
</template>
<script>
import userCard from '@/components/user-card/index.vue'
export default{
components:{
userCard
},
data(){
return{
release:{
name:"",
address:"",
vsClass:"",
money:"",
unit:"",
startTime:"",
endTime:"",
phone:"",
wx:"",
myValue:""
}
}
},
onShow() {
this.getmyInfo()
},
onLoad() {
},
onReady() {
this.$com.displayNav()
},
methods:{
getmyInfo(){
this.$api('myInfo')
.then(res=>{
if(res.code == 200){
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo',res.result)
}else{
this.userInfo = null
}
})
},
fabujianzhi(){
let that = this;
if(that.release.name == ''){
this.$Toast("姓名不能为空");
return
}
if(that.release.address == null){
this.$Toast("招聘地址不能为空")
return
}
if(that.release.vsClass == ''){
this.$Toast("招聘区域不能为空")
return
}
if(that.release.money == null){
this.$Toast("招聘工资不能为空")
return
}
if(that.release.unit == null){
this.$Toast("招聘单位不能为空")
return
}
if(that.release.startTime == null){
this.$Toast("开始时间不能为空")
return
}
if(that.release.endTime == null){
this.$Toast("结束时间不能为空")
return
}
if(that.release.phone == null){
this.$Toast("联系方式不能为空")
return
}
if(that.release.myValue == null){
this.$Toast("招聘内容不能为空")
return
}
let params = {
name:that.release.name,
address:that.release.address,
vsClass:that.release.vsClass,
money:that.release.money,
unit:that.release.unit,
startTime:that.release.startTime,
endTime:that.release.endTime,
phone:that.release.phone,
wx:that.release.wx,
myValue:that.release.myValue,
}
that.$api('saveJobRelease',params).then(res=>{
this.$Toast(res.message);
setTimeout(()=>{
uni.navigateTo({
url:'/pages/my/my-fabujianzhi-list'
})
},1500)
});
},
}
}
</script>
<style lang="scss" scoped>
.from {
margin-top: 20rpx;
}
.from-line {
height: 138rpx;
display: flex;
.label-class{
text-align: justify;
text-align-last: justify;
line-height: 128rpx;
width: 128rpx;
padding: 0 24rpx;
}
input{
padding-left: 10rpx;
height: 128rpx;
line-height: 128rpx;
}
}
.from-line-box {
height: 328rpx;
margin-right: 50rpx;
display: flex;
.label-class{
text-align: justify;
text-align-last: justify;
line-height: 128rpx;
width: 128rpx;
padding: 0 24rpx;
}
input{
padding-left: 20rpx;
height: 228rpx;
line-height: 128rpx;
}
}
.pay-btn{
margin:190rpx auto;
width: 387rpx;
text-align: center;
border-radius: 12rpx;
height: 78rpx;
line-height: 78rpx;
background-color: #00CCCC;
color: #FFFFFF;
}
</style>

+ 183
- 0
pages/my/my-xiansuo-new.vue View File

@ -0,0 +1,183 @@
<template>
<view class="page-wapper">
<view class="a-card">
<view class="title"></view>
<view class="context">
<view class="content-around">
<view class="con-title">关注</view>
<view>关注可查看每日兼职更新超多本地兼职正在筹备</view>
</view>
<view class="content-around">
<view class="con-title">成为会员</view>
<view>成为会员即可查看海量兼职信息超多在线兼职等你来挑战更有超酷客服小姐姐等你来撩</view>
</view>
</view>
<view class="bottom-bgr">
<view style="width: 100%; height: 100%; position: relative;">
<view class="foot-font">
<p>联系微信jianjianjie_1688</p>
<p>合作联系湖南瀚海黎明信息科技</p>
</view>
<canvas canvas-id="qrcode" class="qrcode"/>
</view>
</view>
</view>
</view>
</template>
<script>
import html2canvas from 'html2canvas';
import uQRCode from '@/common/uqrcode.js'
export default{
data(){
return{
userInfo: {},
role:0,
cellList: [],
base64: ''
}
},
onShow() {
this.getmyInfo()
},
onReady() {
this.$com.displayNav()
},
methods:{
getmyInfo(){
this.$api('myInfo').then(res=>{
if(res.code == 200){
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo',res.result)
this.qrFun('https://xinxiong.java996.icu/pages/my/login-kehu?vid=' + this.userInfo.id)
}else{
this.userInfo = null
}
})
},
qrFun: function(text) {
this.qrShow = true
uQRCode.make({
canvasId: 'qrcode',
componentInstance: this,
text: text,
size: 135,
margin: 0,
backgroundColor: '#FFFFFF',
foregroundColor: '#000000',
fileType: 'png',
errorCorrectLevel: uQRCode.errorCorrectLevel.H,
success: res => {}
})
},
}
}
</script>
<style lang="scss">
.page-wapper {
width: 100vw;
height: 100vh;
background-color: #3da8ff;
background: url("@/static/6.png");
background-size: 100% 100%;
.a-card {
width: 660rpx;
height: 980rpx;
background-color: #fff;
position: absolute;
top: calc(50vh - 560rpx);
left: calc(50vw - 330rpx);
border-radius: 20rpx;
box-shadow: 20rpx 10rpx 20rpx 10rpx #345dc7;
.title {
width: 60%;
height: 150rpx;
position: absolute;
left: 140rpx;
top: 60rpx;
background: url("@/static/5.jpg");
background-size: 100% 100% ;
background-position: 40% 75%;
}
.context {
position: absolute;
left: 40rpx;
top: 248rpx;
width: 380rpx;
.content-around {
color: #999;
font-size: 24rpx;
line-height: 34rpx;
.con-title {
background-color: #3871ce;
color: #FFF;
width: 140rpx;
height: 45rpx;
line-height: 45rpx;
border-bottom-right-radius: 70rpx;
border-top-left-radius: 70rpx;
font-size: 32rpx;
font-weight: 500;
margin: 20rpx 0;
padding: 0 40rpx;
}
}
}
.bottom-bgr {
width: 100%;
height: 180rpx;
position: absolute;
left: 0;
bottom: 0;
background: url("@/static/4.png");
background-size: 160% 100% ;
background-position: 40% 75%;
.foot-font {
position: absolute;
bottom: 20rpx;
left: 40rpx;
font-size: 20rpx;
line-height: 24rpx;
color: #222;
}
.qrcode {
position: absolute;
bottom: 15rpx;
right: 20rpx;
width: 280rpx !important;
height: 280rpx !important;
}
}
}
}
//.page-wapper {
// background: linear-gradient(to bottom, #345dc7, #00FFFF, #3da8ff);
// background-size: 200% 200%;
// animation: gradient 20s ease infinite;
//}
//
//@keyframes gradient {
// 0% { background-position: 0% 0%; } /* */
// 50% { background-position: 100% 100%; } /* */
// 100% { background-position: 0% 0%; } /* */
//}
</style>

+ 177
- 0
pages/my/my-xiansuo-now.vue View File

@ -0,0 +1,177 @@
<template>
<view class="page-wapper">
<view class="a-card">
<view class="title"></view>
<view class="context">
<view class="content-around">
<view class="con-title">致用户书</view>
<p>欢迎登陆和使用 @兼兼街 本地化兼职信息服务平台您可以在这里查看到每日最新的兼职信息更新最新的哦 : ( </p>
<p>本台分设长沙街超多本地兼职正在筹备值得一提的是西安街和广州街是新上花旦福利更多哦</p>
<p>当然如果您在找兼职的过程中存在什么疑惑遇到了什么问题请您第一时间联系我们的客服都是可爱又温柔的小姐级哦</p>
<p>最后一步请您关注我们的公众号或者微信搜索 兼兼街看完点关注回家不迷路更多精彩我们来日方长</p>
</view>
</view>
<view class="bottom-bgr">
<view style="width: 100%; height: 100%; position: relative;">
<view class="foot-font">
<p>联系微信jianjianjie_1688</p>
<p>合作联系湖南瀚海黎明信息科技</p>
</view>
<view class="qrcode">
<view class="cool-button" @click="onclick()">👉去关注</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import html2canvas from 'html2canvas';
import uQRCode from '@/common/uqrcode.js'
export default{
data(){
return{
userInfo: {},
role:0,
cellList: [],
base64: ''
}
},
onShow() {
},
onReady() {
this.$com.displayNav()
},
methods:{
onclick:() => {
window.location = "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzkzMzI2NDc1Ng==#wechat_redirect"
}
}
}
</script>
<style lang="scss">
.page-wapper {
width: 100vw;
height: 100vh;
background-color: #3da8ff;
.a-card {
width: 600rpx;
height: 880rpx;
background-color: #fff;
position: absolute;
top: calc(50vh - 484rpx);
left: calc(50vw - 300rpx);
border-radius: 20rpx;
box-shadow: 20rpx 10rpx 20rpx 10rpx #345dc7;
.title {
width: 36%;
height: 80rpx;
position: absolute;
left: 200rpx;
top: 60rpx;
// background: url("@/static/5.jpg");
background-size: 100% 100% ;
background-position: 40% 75%;
}
.context {
position: absolute;
left: 40rpx;
top: 178rpx;
width: 480rpx;
p {
text-indent: 2em;
}
.content-around {
color: #999;
font-size: 24rpx;
line-height: 34rpx;
.con-title {
background-color: #3871ce;
color: #FFF;
width: 120rpx;
height: 45rpx;
line-height: 45rpx;
border-bottom-right-radius: 70rpx;
border-top-left-radius: 70rpx;
box-shadow: 10rpx 5rpx 20rpx 10rpx rgba(0, 0, 0, .1);
font-size: 30rpx;
font-weight: 500;
margin: 20rpx 0;
padding: 0 40rpx;
}
}
}
.bottom-bgr {
width: 100%;
height: 180rpx;
position: absolute;
left: 0;
bottom: 0;
background: url("@/static/4.png");
background-size: 160% 100% ;
background-position: 40% 75%;
.foot-font {
position: absolute;
bottom: 20rpx;
left: 40rpx;
font-size: 20rpx;
line-height: 24rpx;
color: #222;
}
.qrcode {
position: absolute;
bottom: 20rpx;
right: -200rpx;
width: 400rpx !important;
}
}
.cool-button {
font-weight: 900;
font-size: 40rpx;
color: white;
background-color: rgba(1, 1, 1, .0);
border: none;
text-align: left;
text-decoration: none;
display: inline-block;
margin: 4px 2px;
cursor: pointer;
transition-duration: 0.4s;
}
.cool-button:active {
transform: translateX(30rpx);
}
}
}
.page-wapper {
background: linear-gradient(to bottom, #345dc7, #00FFFF, #3da8ff);
background-size: 200% 200%;
animation: gradient 20s ease infinite;
}
@keyframes gradient {
0% { background-position: 0% 0%; } /* 背景位置从左上角开始 */
50% { background-position: 100% 100%; } /* 背景位置变化到右下角 */
100% { background-position: 0% 0%; } /* 背景位置回到左上角 */
}
</style>

+ 215
- 0
pages/my/my-xiansuo.vue View File

@ -0,0 +1,215 @@
<template>
<view class="my-pages" @click="toImg" >
<view class="top-box">
<view class="head">
<u--image shape="circle" :src="userInfo?userInfo.headImage:''" width="169rpx" height="169rpx"></u--image>
<view style="padding: 56rpx; font-size: 45rpx; font-weight: bold;">{{userInfo?userInfo.nickName : '�����¼����'}}</view>
</view>
</view>
<view class="contnet-box" id="poster">
<view class="cell-box" id="poster">
<view class="cell-item flex justify-between align-center">
<view class="flex align-center">
<canvas canvas-id="qrcode" class="qrcode"/>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import html2canvas from 'html2canvas';
import uQRCode from '@/common/uqrcode.js'
export default{
data(){
return{
userInfo:null,
role:0,
cellList: [],
base64: ''
}
},
onShow() {
this.getmyInfo()
},
onReady() {
this.$com.displayNav()
},
methods:{
getmyInfo(){
this.$api('myInfo')
.then(res=>{
if(res.code == 200){
this.role = res.result.role;
this.userInfo = res.result;
this.$store.commit('set_userInfo',res.result)
this.qrFun('https://xinxiong.java996.icu/pages/my/login-kehu?vid=' + this.userInfo.id)
}else{
this.userInfo = null
}
})
},
toUrl(url,name){
if(name==''){
uni.navigateTo({
url
})
}else{
this.$Toast('')
}
},
toLogin(){
if(!this.userInfo){
uni.navigateTo({
url:"/pages/my/login-kehu"
})
}else{
uni.navigateTo({
url:'/pages/my/edit-user'
})
}
},
qrFun: function(text) {
this.qrShow = true
uQRCode.make({
canvasId: 'qrcode',
componentInstance: this,
text: text,
size: 300,
margin: 0,
backgroundColor: '#FFFFFF',
foregroundColor: '#000000',
fileType: 'png',
errorCorrectLevel: uQRCode.errorCorrectLevel.H,
success: res => {}
})
},
saveHeadImgFile(base64) {
const bitmap = new plus.nativeObj.Bitmap("test");
bitmap.loadBase64Data(base64, function() {
const url = "_doc/" + new Date().getTime() + ".png"; // urlΪʱʽ
console.log('saveHeadImgFile', url)
bitmap.save(url, {
overwrite: true, // Ƿ񸲸
// quality: 'quality' // ͼƬ
}, (i) => {
uni.saveImageToPhotosAlbum({
filePath: url,
success: function() {
uni.showToast({
title: 'ͼƬ����ɹ�',
icon: 'none'
})
bitmap.clear()
}
});
}, (e) => {
uni.showToast({
title: 'ͼƬ����ʧ��',
icon: 'none'
})
bitmap.clear()
});
}, (e) => {
uni.showToast({
title: 'ͼƬ����ʧ��',
icon: 'none'
})
bitmap.clear()
});
},
toImg() {
// ͼƬ̨һӿڣҪͼƬתbase64ԼӿڣͲдˡ
let dom = document.querySelector('#poster'); // ȡdomԪ
html2canvas(dom, {
width: dom.clientWidth, //dom ԭʼ
height: dom.clientHeight,
scrollY: 0,// html2canvasĬϻͼڵҳҪscrollYscrollXΪ0
scrollX: 0,
useCORS: true,//ֿ֧򣬵ûʲô
}).then((canvas) => {
this.base64 = canvas.toDataURL('image/png', 1);
console.log(this.base64)
this.saveHeadImgFile(this.base64);
uni.showToast({
icon: 'success',
title: '�����',
});
// this.$http.post("/api/upload/image_by_base64", {
// image: this.base64
// }).then(res => {
// if (res.status == 200) {
// this.downImg = res.data.data;
// uni.showToast({
// icon: 'success',
// mask: true,
// title: '',
// });
// }
// })
});
},
}
}
</script>
<style lang="scss" scoped>
.qrcode {
width: 600rpx;
height: 600rpx;
margin: 50rpx auto;
}
.head {
display: flex;
justify-items: center;
height: 168rpx;
padding: 60rpx 20rpx 20rpx 40rpx;
background-color: #00CCCC;
}
.my-pages {
.top-box {
height: 372rpx;
background-color: #00CCCC;
background-size: 100% 100%;
}
.contnet-box {
height: 907rpx;
background: #ffffff;
border-radius: 79rpx 79rpx 0px 0px;
box-shadow: 0px 3rpx 6rpx 0px rgba(0,0,0,0.16);
margin: -80rpx 26rpx 0;
position: relative;
.user-box {
font-size: 32rpx;
color: #000000;
font-weight: 700;
position: absolute;
left: 50%;
top: -100rpx;
transform: translate(-50% , 0);
.user-name {
text-align: center;
margin-top: 20rpx;
}
}
.cell-box {
padding: 20rpx 34rpx 34rpx;
}
}
}
</style>

+ 171
- 0
pages/my/xiansuo-detail.vue View File

@ -0,0 +1,171 @@
<template>
<view class="my-xiansuo">
<view class="course-box-item flex">
<u--image :showLoading="true" :src="saleData.photo" width="281rpx" height="256rpx"></u--image>
<view class="box-right">
<view class="active-title">{{saleData.title}}</view>
<view class="active-time">
<text>{{saleData.activityTime}}</text>
</view>
<view class="active-add">
<text>{{saleData.place}}</text>
</view>
<view class="user-img flex align-center">
<u--image class="user-img-sing" v-for="(val,i) in saleData.members" :key="i" :showLoading="true" shape="circle" :src="val.headImage" width="51rpx" height="51rpx"></u--image>
<view class="duode flex align-center justify-center">···</view>
</view>
</view>
</view>
<view class="liulan">
<view class="liulan-title flex align-center justify-between">
<text>浏览总数</text>
<text class="num">{{saleData.members.length}}</text>
</view>
<view class="user-from">
<view class="from-line flex align-center" v-for="(val,i) in saleData.members" :key="i">
<view class="dot"></view>
<view class="line-r flex align-center">
<u--image class="mr-2" :showLoading="true" shape="circle" :src="val.headImage" width="88rpx" height="88rpx"></u--image>
<view class="name-time">
<view>{{val.nickName}}</view>
<view class="time">{{val.createTime}}</view>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default{
data(){
return{
activityId: '',
saleData:{}
}
},
onLoad(e) {
this.activityId = e.id;
this.getsaleClueById(e.id)
},
// h5
onReady() {
this.$com.displayNav()
},
methods:{
getsaleClueById(activityId){
this.$api('saleClueById',{activityId})
.then(res=>{
if(res.code == 200){
this.saleData = res.result;
}
})
}
}
}
</script>
<style lang="scss" scoped>
.my-xiansuo {
padding: 17rpx 19rpx 0 13rpx;
.course-box-item {
background: #ffffff;
border-radius: 12rpx;
box-shadow: 0px 3rpx 6rpx 0px rgba(0,0,0,0.16);
padding: 33rpx 13rpx;
.box-right {
margin-left: 16rpx;
.active-title {
font-size: 30rpx;
color: #000;
line-height: 40rpx;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.active-time {
color: #707070;
font-size: 26rpx;
margin: 10rpx 0 14rpx 0;
}
.active-add {
color: #707070;
font-size: 26rpx;
}
.user-img {
margin-top: 26rpx;
.user-img-sing {
margin-right: 10rpx;
&:nth-child(6){
margin-right: 0;
}
}
.duode {
width: 51rpx;
height: 51rpx;
border-radius: 50%;
background-color: #C6C6C6;
color: #ffffff;
font-size: 44rpx;
}
}
}
}
.liulan {
background: #ffffff;
border-radius: 12rpx;
box-shadow: 0px 3rpx 6rpx 0px rgba(0,0,0,0.16);
padding: 0 25rpx 88rpx;
margin-top: 12rpx;
.liulan-title {
font-size: 30rpx;
color: #000000;
border-bottom: 1px solid #E6E6E6;
padding: 33rpx 0 19rpx;
.num{
color: #D33D3E;
}
}
.user-from {
.from-line {
border-bottom: 1px solid #ECECEC;
padding: 20rpx 0 8rpx 0;
.dot {
width: 10rpx;
height: 10rpx;
border-radius: 50%;
background-color: #ED1450;
margin-right: 13rpx;
}
.line-r {
.name-time {
font-size: 24rpx;
color: #3B3B3B;
}
.time {
font-size: 20rpx;
color: #929292;
margin-top: 13rpx;
}
}
}
}
}
}
</style>

+ 36
- 0
pages/my/xieyi.vue View File

@ -0,0 +1,36 @@
<template>
<view class="xieyi-page">
<u-parse :content="dataInfo.value"></u-parse>
</view>
</template>
<script>
export default{
data(){
return{
dataInfo:{}
}
},
onLoad() {
this.getfindAgree()
},
// h5
onReady() {
this.$com.displayNav()
},
methods:{
getfindAgree(){
this.$api('findAgree')
.then(res=>{
this.dataInfo = res.result;
})
}
}
}
</script>
<style lang="scss" scoped>
.xieyi-page {
padding: 10rpx 20rpx;
}
</style>

+ 188
- 0
pages/news/index.vue View File

@ -0,0 +1,188 @@
<template>
<view class="home-pages">
<view class="home-content">
<u-tabs
:list="tabList"
lineWidth="70"
lineHeight="3"
lineColor= "#00CCCC"
:activeStyle="{
color: '#000000',
fontWeight: 'bold',
transform: 'scale(1.35)'
}"
:inactiveStyle="{
color: '#000000',
transform: 'scale(1)'
}"
itemStyle="padding-left: 15px; padding-right: 15px; height: 34px;"
@click="tabClick"
>
</u-tabs>
<scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="lower">
<template v-if="current == 0">
<active-card v-for="(item,i) in studyList" :item="item" :key="i" :i="i" @seeDetail="seeDetail"></active-card>
</template>
<template v-if="current == 1">
<new-card v-for="(item,i) in informationList" :key="i" :item="item" @seeDetail="newDetail"></new-card>
</template>
</scroll-view>
</view>
</view>
</template>
<script>
import activeCard from '@/components/active-card/index.vue'
import newCard from '@/components/new-card/index.vue'
export default{
components:{
activeCard,
newCard
},
data(){
return{
current:0,
studyList:[],
activiteList:[],
informationList:[],
tabList: [
{
name: '家教街'
},
{
name: '校园墙'
}
],
params:{
pageNo:1,
pageSize:10,
total: null,
isLock: true
},
}
},
onLoad() {
if(this.current == 0){
this.getActivity();
}else{
this.getinformation()
}
},
onPullDownRefresh() {
this.activiteList = [];
this.params.pageNo = 1;
this.params.total = null;
this.params.isLock = true;
this.getActivity();
},
onReachBottom() {
if(this.params.isLock){
this.params.isLock = false;
if(this.params.total !== null && this.params.pageNo * this.params.pageSize >= this.params.total){
this.$Toast('没有更多数据!');
setTimeout(()=>{
this.params.isLock = true;
},3000)
return
}
this.params.pageNo+=1;
this.$Toast('数据加载成功!');
this.getActivity();
}
},
onPullDownRefresh() {
this.params.pageNo = 1;
if(this.current == 0){
this.getActivity();
}else{
this.getinformation()
}
},
// h5
onReady() {
this.$com.displayNav()
},
methods:{
tabClick(e){
this.current = e.index;
this.params.pageNo = 1;
if(this.current == 0){
this.getActivity(2);
}else{
this.getinformation(2)
}
},
getActivity(type){
uni.showLoading()
this.$api('JobList',this.params)
.then(res=>{
uni.hideLoading()
if(res.code == 200){
if(this.params.total== null) {
this.params.total = res.result.total
}
if(this.params.pageNo>1){
uni.hideLoading();
}
this.studyList = this.studyList.concat(res.result.records);
this.params.isLock = true;
}else {
if(this.params.pageNo>1){
uni.hideLoading();
}
this.params.isLock = true;
}
})
},
getinformation(type){
uni.showLoading()
this.$api('information',this.params)
.then(res=>{
uni.hideLoading()
if(res.code == 200){
this.pages = res.result.pages;
if(type == 2){
this.informationList = [...this.informationList,...res.result.records];
}else{
this.informationList = res.result.records;
uni.stopPullDownRefresh();
}
}
})
},
seeDetail(item){//
uni.navigateTo({
url:`/pages/home/course-detial?id=${item.id}`
})
},
newDetail(item){//
uni.navigateTo({
url:`/pages/home/new-detail?id=${item.id}`
})
},
lower(){
if(this.params.pageNo >= this.pages) return;
this.params.pageNo ++;
if(this.current == 0){
this.getActivity(2);
}else{
this.getinformation(2)
}
},
}
}
</script>
<style lang="scss" scoped>
.home-pages {
padding: 18rpx 29rpx 0;
background-color: #F7F7F7;
.scroll-Y {
height: calc(100vh - 210rpx);
padding-top: 20rpx;
}
}
</style>

+ 69
- 0
request/index.js View File

@ -0,0 +1,69 @@
import Request from './request'
import apiList from './shopro'
// import store from '@/common/store/index.js'
export default function api(url, data = {}) {
const request = new Request();
let api = getApiObj(url);
request.interceptor.request((config, cancel) => { /* 请求之前拦截器 */
if (api.auth) {
let userToken = uni.getStorageSync('userToken');
if (!userToken) {
// store.commit('LOGIN_TIP', true)
// store.commit('OUT_LOGIN');
throw('暂未登录,已阻止此次API请求~');
}
}
if (uni.getStorageSync('userToken')) {
config.header['X-Access-Token'] = uni.getStorageSync('userToken');
}
return config
});
request.interceptor.response((response) => { /* 请求之后拦截器 */
// if (response.data.code === 0) { // 服务端返回的状态码不等于200,则reject()
// uni.showToast({
// title: response.data.msg || '请求出错,稍后重试',
// icon: 'none',
// duration: 1000,
// mask: true
// });
// }
if (response.data.status === 7001) { // 服务端返回的状态码不等于200,则reject()
uni.clearStorageSync()
uni.showToast({
title: '登录过期,请重新登录'
})
uni.reLaunch({
url: '/pages/login/login'
})
// store.commit('LOGIN_TIP', true)
}
// if (response.config.custom.verification) { // 演示自定义参数的作用
// return response.data
// }
return response
}, (response) => { // 预留可以日志上报
return response
})
let option = {
url: api.url,
data,
method: api.method
}
if (api.headers!=null){
option.header = api.headers
}
return request.request(option)
}
function getApiObj(url) {
let apiArray = url.split(".");
let api = apiList;
apiArray.forEach(v => {
api = api[v];
});
return api;
}

+ 280
- 0
request/request.js View File

@ -0,0 +1,280 @@
import {
API_URL
} from '@/env'
export default class Request {
config = {
baseUrl: API_URL,
header: {
'content-type': 'application/x-www-form-urlencoded',
'platform': uni.getStorageSync('platform'),
},
method: 'GET',
dataType: 'json',
// #ifndef MP-ALIPAY || APP-PLUS
responseType: 'text',
// #endif
custom: {},
// #ifdef MP-ALIPAY
timeout: 30000,
// #endif
// #ifdef APP-PLUS
sslVerify: true
// #endif
}
static posUrl(url) { /* 判断url是否为绝对路径 */
return /(http|https):\/\/([\w.]+\/?)\S*/.test(url)
}
static addQueryString(params) {
let paramsData = ''
Object.keys(params).forEach(function(key) {
paramsData += key + '=' + encodeURIComponent(params[key]) + '&'
})
return paramsData.substring(0, paramsData.length - 1)
}
/**
* @property {Function} request 请求拦截器
* @property {Function} response 响应拦截器
* @type {{request: Request.interceptor.request, response: Request.interceptor.response}}
*/
interceptor = {
/**
* @param {Request~requestCallback} cb - 请求之前拦截,接收一个函数config, cancel=> {return config}第一个参数为全局config,第二个参数为函数调用则取消本次请求
*/
request: (cb) => {
if (cb) {
this.requestBeforeFun = cb
}
},
/**
* @param {Request~responseCallback} cb 响应拦截器对响应数据做点什么
* @param {Request~responseErrCallback} ecb 响应拦截器对响应错误做点什么
*/
response: (cb, ecb) => {
if (cb && ecb) {
this.requestComFun = cb
this.requestComFail = ecb
}
}
}
requestBeforeFun(config) {
return config
}
requestComFun(response) {
return response
}
requestComFail(response) {
return response
}
/**
* 自定义验证器如果返回true 则进入响应拦截器的响应成功函数(resolve)否则进入响应拦截器的响应错误函数(reject)
* @param { Number } statusCode - 请求响应体statusCode只读
* @return { Boolean } 如果为true, resolve, 否则 reject
*/
validateStatus(statusCode) {
return statusCode === 200
}
/**
* @Function
* @param {Request~setConfigCallback} f - 设置全局默认配置
*/
setConfig(f) {
this.config = f(this.config)
}
/**
* @Function
* @param {Object} options - 请求配置项
* @prop {String} options.url - 请求路径
* @prop {Object} options.data - 请求参数
* @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型
* @prop {Object} [options.dataType = config.dataType] - 如果设为 json会尝试对返回的数据做一次 JSON.parse
* @prop {Object} [options.header = config.header] - 请求header
* @prop {Object} [options.method = config.method] - 请求方法
* @returns {Promise<unknown>}
*/
async request(options = {}) {
options.baseUrl = this.config.baseUrl
options.dataType = options.dataType || this.config.dataType
// #ifndef MP-ALIPAY || APP-PLUS
options.responseType = options.responseType || this.config.responseType
// #endif
// #ifdef MP-ALIPAY
options.timeout = options.timeout || this.config.timeout
// #endif
options.url = options.url || ''
options.data = options.data || {}
options.params = options.params || {}
options.header = options.header || this.config.header
options.method = options.method || this.config.method
options.custom = { ...this.config.custom,
...(options.custom || {})
}
// #ifdef APP-PLUS
options.sslVerify = options.sslVerify === undefined ? this.config.sslVerify : options.sslVerify
// #endif
// uni.showToast({
// icon: "loading",
// image: "/static/imgs//logo/logo.gif"
// })
return new Promise((resolve, reject) => {
let next = true
let handleRe = {}
options.complete = (response) => {
response.config = handleRe
if (this.validateStatus(response.statusCode)) { // 成功
response = this.requestComFun(response)
resolve(response.data)
} else if (401 === response.statusCode) {
response = this.requestComFun(response)
resolve(response.data)
} else if (500 === response.statusCode) {
resolve(response.data)
} else {
response = this.requestComFail(response)
reject(response)
}
}
const cancel = (t = 'handle cancel', config = options) => {
const err = {
errMsg: t,
config: config
}
reject(err)
next = false
}
handleRe = { ...this.requestBeforeFun(options, cancel)
}
const _config = { ...handleRe
}
if (!next) return
delete _config.custom
let mergeUrl = Request.posUrl(_config.url) ? _config.url : (_config.baseUrl + _config.url)
if (JSON.stringify(_config.params) !== '{}') {
const paramsH = Request.addQueryString(_config.params);
mergeUrl += mergeUrl.indexOf('?') === -1 ? `?${paramsH}` : `&${paramsH}`
}
_config.url = mergeUrl
uni.request(_config)
})
}
get(url, options = {}) {
return this.request({
url,
method: 'GET',
...options
})
}
post(url, data, options = {}) {
return this.request({
url,
data,
method: 'POST',
...options
})
}
upload(url, {
// #ifdef APP-PLUS
files,
// #endif
// #ifdef MP-ALIPAY
fileType,
// #endif
filePath,
name,
header,
formData,
custom
}) {
return new Promise((resolve, reject) => {
let next = true
let handleRe = {}
const globalHeader = { ...this.config.header
}
delete globalHeader['content-type']
const pubConfig = {
baseUrl: this.config.baseUrl,
url,
// #ifdef APP-PLUS
files,
// #endif
// #ifdef MP-ALIPAY
fileType,
// #endif
filePath,
method: 'UPLOAD',
name,
header: header || globalHeader,
formData,
custom: { ...this.config.custom,
...(custom || {})
},
complete: (response) => {
response.config = handleRe
if (response.statusCode === 200) { // 成功
response = this.requestComFun(response)
resolve(response)
} else {
response = this.requestComFail(response)
reject(response)
}
}
}
const cancel = (t = 'handle cancel', config = pubConfig) => {
const err = {
errMsg: t,
config: config
}
reject(err)
next = false
}
handleRe = { ...this.requestBeforeFun(pubConfig, cancel)
}
const _config = { ...handleRe
}
if (!next) return
delete _config.custom
_config.url = Request.posUrl(_config.url) ? _config.url : (_config.baseUrl + _config.url)
uni.uploadFile(_config)
})
}
}
/**
* setConfig回调
* @return {Object} - 返回操作后的config
* @callback Request~setConfigCallback
* @param {Object} config - 全局默认config
*/
/**
* 请求拦截器回调
* @return {Object} - 返回操作后的config
* @callback Request~requestCallback
* @param {Object} config - 全局config
* @param {Function} [cancel] - 取消请求钩子调用会取消本次请求
*/
/**
* 响应拦截器回调
* @return {Object} - 返回操作后的response
* @callback Request~responseCallback
* @param {Object} response - 请求结果 response
*/
/**
* 响应错误拦截器回调
* @return {Object} - 返回操作后的response
* @callback Request~responseErrCallback
* @param {Object} response - 请求结果 response
*/

+ 91
- 0
request/shopro.js View File

@ -0,0 +1,91 @@
/**
* 接口列表文件
*/
export default {
//首页兼职地区分类
IndexJobAddress: {url:'/job-dev/job/index/address',auth:false,method:'GET'},
//首页兼职信息
JobList: {url:'/job-dev/job/index/list',auth:false,method:'GET'},
// 登录
loginAccount: {url:'/job-dev/binYuan/login/account',auth:false,method:'POST'},
// gerenxinxi
myInfo: {url:'/job-dev/binYuan/my/info',auth:false,method:'GET'},
// 查看我的客户
myCustomer: {url:'/job-dev/binYuan/my/myCustomer',auth:false,method:'GET'},
//添加 修改 客户
operateCustomer: {url:'/job-dev/binYuan/my/operateCustomer',auth:false,method:'POST'},
//查看客户信息
customerMassage: {url:'/job-dev/binYuan/my/customerMassage',auth:false,method:'GET'},
//分享到公用池
openCustomer: {url:'/job-dev/binYuan/my/openCustomer',auth:false,method:'GET'},
//查看客户服务记录
customerRecord: {url:'/job-dev/binYuan/my/customerRecord',auth:false,method:'GET'},
//查看共用资源
findOpen: {url:'/job-dev/binYuan/my/findOpen',auth:false,method:'GET'},
//添加为我的用户
openAddCustomer: {url:'/job-dev/binYuan/my/openAddCustomer',auth:false,method:'POST'},
//我的线索列表
saleClue: {url:'/job-dev/binYuan/my/saleClue',auth:false,method:'GET'},
//我要推荐
savePush: {url:'/job-dev/binYuan/my/savePush',auth:false,method:'POST'},
//查看最新活动
activity: {url:'/job-dev/binYuan/index/activity',auth:false,method:'GET'},
//查看课程
study: {url:'/job-dev/binYuan/index/study',auth:false,method:'GET'},
//查看课程或活动详情
activityFindById: {url:'/job-dev/binYuan/index/activityFindById',auth:false,method:'GET'},
//查看知识库
knowledge: {url:'/job-dev/binYuan/index/knowledge',auth:false,method:'GET'},
//查看知识库
informFindById: {url:'/job-dev/binYuan/index/informFindById',auth:false,method:'GET'},
//查看资讯
information: {url:'/job-dev/binYuan/index/information',auth:false,method:'GET'},
//banner
bannerList: {url:'/job-dev/binYuan/index/bannerList',auth:false,method:'GET'},
bannerListJiangHua: {url:'/job-dev/binYuan/index/bannerListJiangHua',auth:false,method:'GET'},
//添加报名信息
saveEnroll: {url:'/job-dev/binYuan/index/saveEnroll',auth:false,method:'POST'},
//协议
findAgree: {url:'/job-dev/binYuan/index/findAgree',auth:false,method:'GET'},
//添加服务记录
saveService: {url:'/job-dev/binYuan/my/saveService',auth:false,method:'POST'},
//联系我们
contactUs: {url:'/job-dev/binYuan/my/contactUs',auth:false,method:'GET'},
//根据活动表示查看线索-
saleClueById: {url:'/job-dev/binYuan/my/saleClueById',auth:false,method:'GET'},
//联系我们增加留言
contactAdd: {url:'/job-dev/binYuan/my/contactAdd',auth:false,method:'GET'},
//用户-微信公众号授权登录
wxLogin: {url:'/job-dev/binYuan/login/wxLogin',auth:false,method:'POST'},
//微信支付
create: {url:'/job-dev/job/pay/create',auth:false,method:'GET'},
//creteFenxian
creteFenxian: {url:'/job-dev/binYuan/pay/creteFenXian',auth:false,method:'POST'},
//
getFans: {url:'/job-dev/job/index/fans',auth:false,method:'GET'},
creteClick: {url:'/job-dev/job/index/click',auth:false,method:'GET'},
carClick: {url:'/job-dev/job/index/carClick',auth:false,method:'GET'},
getCarList: {url:'/job-dev/job/index/carList',auth:false,method:'GET'},
getCarById: {url:'/job-dev/job/index/carById',auth:false,method:'GET'},
//获取发布信息列表
queryPageListJobRelease: {url:'/job-dev/binYuan/index/jobReleaseList',auth:false,method:'GET'},
//增加发布信息
saveJobRelease: {url:'/job-dev/binYuan/index/saveJobRelease',auth:false,method:'POST'},
//修改发布信息
editJobRelease: {url:'/job-dev/binYuan/index/editJobRelease',auth:false,method:'POST'},
//获取商城商品信息
getJobShopList: {url:'/job-dev/job/shop/getShopList',auth:false,method:'GET'},
//获取商品详情信息
getShopDetailsById: {url:'/job-dev/job/shop/getShopDetailsById',auth:false,method:'GET'},
};

+ 37
- 0
router/router.js View File

@ -0,0 +1,37 @@
import Vue from 'vue'
import Router from 'uni-simple-router'
import store from '../store'
Vue.use(Router)
//初始化
const router = new Router({
APP: {
animation: {
animationType: 'pop-in',
animationDuration: 300
}
},
encodeURI: false,
routes: ROUTES //路由表
});
//全局路由前置守卫
// router.beforeEach((to, from, next) => {
// // 有两个个判断条件,一个是token,还有一个路由元信息
// let userInfo = Boolean(uni.getStorageSync('userInfo'));
// let token = uni.getStorageSync('userToken');
// // 权限控制
// if(!token){
// uni.reLaunch({
// url: '/pages/login/login'
// });
// }
// next()
// // if (to.meta && to.meta.auth && !userInfo) {
// // store.commit('LOGIN_TIP', true)
// // } else {
// // }
// })
// 全局路由后置守卫
router.afterEach((to, from) => {})
export default router;

+ 0
- 0
static/1.jpeg View File


BIN
static/2.png View File

Before After
Width: 750  |  Height: 1334  |  Size: 54 KiB

BIN
static/3.png View File

Before After
Width: 750  |  Height: 1334  |  Size: 182 KiB

BIN
static/4.png View File

Before After
Width: 4746  |  Height: 1020  |  Size: 40 KiB

BIN
static/5.jpg View File

Before After
Width: 617  |  Height: 220  |  Size: 32 KiB

BIN
static/6.png View File

Before After
Width: 2362  |  Height: 3543  |  Size: 5.6 MiB

BIN
static/img/add-icon.png View File

Before After
Width: 200  |  Height: 200  |  Size: 4.2 KiB

BIN
static/img/arrow-right.png View File

Before After
Width: 48  |  Height: 48  |  Size: 413 B

BIN
static/img/choose-act.png View File

Before After
Width: 91  |  Height: 91  |  Size: 4.2 KiB

BIN
static/img/info/code.png View File

Before After
Width: 200  |  Height: 200  |  Size: 4.8 KiB

BIN
static/img/info/fans.png View File

Before After
Width: 200  |  Height: 200  |  Size: 6.5 KiB

BIN
static/img/info/kefu.png View File

Before After
Width: 200  |  Height: 200  |  Size: 7.6 KiB

BIN
static/img/info/money.png View File

Before After
Width: 200  |  Height: 200  |  Size: 3.7 KiB

BIN
static/img/info/smrz.png View File

Before After
Width: 228  |  Height: 200  |  Size: 7.5 KiB

BIN
static/img/jiantou-icon.png View File

Before After
Width: 277  |  Height: 267  |  Size: 14 KiB

BIN
static/img/logon-icon.png View File

Before After
Width: 1125  |  Height: 1123  |  Size: 95 KiB

BIN
static/img/mima-icon.png View File

Before After
Width: 200  |  Height: 200  |  Size: 3.0 KiB

BIN
static/img/my/wechat-icon.png View File

Before After
Width: 139  |  Height: 139  |  Size: 5.8 KiB

BIN
static/img/pay-success.png View File

Before After
Width: 256  |  Height: 256  |  Size: 13 KiB

BIN
static/img/phone-icon.png View File

Before After
Width: 200  |  Height: 200  |  Size: 3.6 KiB

BIN
static/img/search-icon.png View File

Before After
Width: 54  |  Height: 54  |  Size: 2.1 KiB

BIN
static/img/tabbar/fabu-xuan.png View File

Before After
Width: 200  |  Height: 200  |  Size: 7.1 KiB

BIN
static/img/tabbar/fabu.png View File

Before After
Width: 200  |  Height: 200  |  Size: 7.4 KiB

BIN
static/img/tabbar/icon-home-active.png View File

Before After
Width: 200  |  Height: 200  |  Size: 7.7 KiB

BIN
static/img/tabbar/icon-home.png View File

Before After
Width: 200  |  Height: 200  |  Size: 8.2 KiB

BIN
static/img/tabbar/icon-my-active.png View File

Before After
Width: 200  |  Height: 200  |  Size: 5.3 KiB

BIN
static/img/tabbar/icon-my.png View File

Before After
Width: 200  |  Height: 200  |  Size: 5.4 KiB

BIN
static/img/tabbar/icon-new-active.png View File

Before After
Width: 200  |  Height: 200  |  Size: 8.4 KiB

BIN
static/img/tabbar/icon-new.png View File

Before After
Width: 200  |  Height: 200  |  Size: 8.7 KiB

BIN
static/img/tabbar/sfz.png View File

Before After
Width: 201  |  Height: 200  |  Size: 6.1 KiB

BIN
static/img/tabbar/zx.png View File

Before After
Width: 200  |  Height: 200  |  Size: 9.1 KiB

BIN
static/img/tabbar/zxq.png View File

Before After
Width: 200  |  Height: 200  |  Size: 9.5 KiB

BIN
static/img/time-icon.png View File

Before After
Width: 200  |  Height: 200  |  Size: 4.1 KiB

BIN
static/img/title-icon.png View File

Before After
Width: 1052  |  Height: 424  |  Size: 51 KiB

BIN
static/img/wechat-icon.png View File

Before After
Width: 139  |  Height: 139  |  Size: 5.8 KiB

BIN
static/kefu.jpg View File

Before After
Width: 936  |  Height: 1280  |  Size: 169 KiB

BIN
static/kefu.png View File

Before After
Width: 146  |  Height: 146  |  Size: 18 KiB

BIN
static/qrcode.jpg View File

Before After
Width: 258  |  Height: 258  |  Size: 26 KiB

+ 1
- 0
store/actions.js View File

@ -0,0 +1 @@
export default {}

+ 1
- 0
store/getters.js View File

@ -0,0 +1 @@
export default {}

+ 16
- 0
store/index.js View File

@ -0,0 +1,16 @@
import Vue from "vue"
import Vuex from "vuex"
import state from './state.js'
import actions from './actions.js'
import getters from './getters.js'
import mutations from './mutations.js'
Vue.use(Vuex)
export default new Vuex.Store({
state,
actions,
getters,
mutations,
modules:{
}
})

+ 18
- 0
store/mutations.js View File

@ -0,0 +1,18 @@
export default {
'set_userToken' (state, userToken) {//存储 userToken
state.userToken = userToken
uni.setStorageSync('userToken', userToken)
},
'set_userInfo' (state, userInfo) {//存储 userToken
state.userInfo = JSON.stringify(userInfo)
uni.setStorageSync('userInfo', JSON.stringify(userInfo))
},
'set_geographyStatus' (state, flag) {
state.geographyStatus = flag
uni.setStorageSync('geographyStatus', flag)
},
'set_ivcode' (state, ivcode) {
state.ivcode = ivcode
uni.setStorageSync('ivcode', ivcode)
}
}

+ 6
- 0
store/state.js View File

@ -0,0 +1,6 @@
export default {
userToken: uni.getStorageSync('userToken') || '',
userInfo: uni.getStorageSync('userInfo') || '',
ivcode: uni.getStorageSync('ivcode') || '',
geographyStatus: uni.getStorageSync('geographyStatus') || '',
}

+ 453
- 0
styles/common.css View File

@ -0,0 +1,453 @@
/* 1. 页面背景色 */
.page{
background-color: #EDEDED;
/* #ifndef APP-PLUS-NVUE */
min-height: 100%;
height: auto;
/* #endif */
/* #ifdef APP-PLUS-NVUE */
flex: 1;
/* #endif */
}
/* 2. 主背景色(原谅绿) */
.main-bg-color{
background-color: #F6F7F8 !important;
}
/* 3. 主文字色(原谅绿) */
.main-text-color{
color: #333333;
}
/* 4. 主边框颜色(原谅绿) */
.border-main{
border-color: #08C060 !important;
}
/* 防止图片闪一下 */
image{will-change: transform;width: 100%; }
/* scroll-view 横向 */
.scroll-row{ width: 100%;white-space: nowrap; }
.scroll-row-item{ display: inline-block; }
/* 图标 */
.iconfont{
font-family:iconfont;
}
.view,.text{
font-size:24rpx;
line-height:1.8;
color:#0E151D;
}
/* 宽度 */
.w-100{ width: 750rpx; }
.h-100 {height: 100%;}
.min-h-100 {min-height: 100vh;}
/* flex 布局 */
.flex{
/* #ifndef APP-PLUS-NVUE */
display:flex;
/* #endif */
flex-direction:row;
}
.flex-row{ flex-direction:row!important; }
.flex-column{ flex-direction:column!important; }
.flex-row-reverse{ flex-direction:row-reverse!important; }
.flex-column-reverse{ flex-direction:column-reverse!important; }
.flex-wrap{ flex-wrap:wrap;}
.flex-nowrap{ flex-wrap:nowrap;}
.justify-start{justify-content:flex-start;}
.justify-end{justify-content:flex-end;}
.justify-between{justify-content:space-between;}
.justify-center{justify-content:center;}
.align-center{ align-items: center; }
.align-stretch{ align-items: stretch; }
.align-start{ align-items: flex-start; }
.align-end{ align-items: flex-end; }
/* #ifndef APP-PLUS-NVUE */
.content-start {align-content: flex-start;}
.content-end {align-content: flex-end;}
.content-center {align-content: center;}
.content-between {align-content: space-between;}
.content-around {align-content: space-around;}
.content-stretch {align-content: stretch;}
/* #endif */
.flex-1{ flex: 1 !important; }
.flex-2{ flex: 2 !important; }
.flex-3{ flex: 3 !important; }
.flex-4{ flex: 4 !important; }
.flex-5{ flex: 5 !important; }
.flex-6{ flex: 6 !important; }
.flex-7{ flex: 7 !important; }
.flex-8{ flex: 8 !important; }
.flex-9{ flex: 9 !important; }
/* #ifndef APP-PLUS-NVUE */
.flex-shrink{ flex-shrink: 0; }
/* #endif */
.container {
padding-right: 20rpx;
padding-left: 20rpx;
}
/* -- 内外边距 -- */
.m-0 { margin: 0; }
/* #ifndef APP-PLUS-NVUE */
.m-auto{ margin: auto; }
/* #endif */
.m-1 { margin: 10rpx; }
.m-2 { margin: 20rpx; }
.m-3 { margin: 30rpx; }
.m-4 { margin: 40rpx; }
.m-5 { margin: 50rpx; }
.mt-0 { margin-top: 0; }
/* #ifndef APP-PLUS-NVUE */
.mt-auto { margin-top: auto; }
/* #endif */
.mt-1 { margin-top: 10rpx; }
.mt-2 { margin-top: 20rpx; }
.mt-3 { margin-top: 30rpx; }
.mt-4 { margin-top: 40rpx; }
.mt-5 { margin-top: 50rpx; }
.mb-0 { margin-bottom: 0; }
/* #ifndef APP-PLUS-NVUE */
.mb-auto { margin-bottom: auto; }
/* #endif */
.mb-1 { margin-bottom: 10rpx; }
.mb-2 { margin-bottom: 20rpx; }
.mb-3 { margin-bottom: 30rpx; }
.mb-4 { margin-bottom: 40rpx; }
.mb-5 { margin-bottom: 50rpx; }
.ml-0 { margin-left: 0; }
/* #ifndef APP-PLUS-NVUE */
.ml-auto { margin-left: auto; }
/* #endif */
.ml-1 { margin-left: 10rpx; }
.ml-2 { margin-left: 20rpx; }
.ml-3 { margin-left: 30rpx; }
.ml-4 { margin-left: 40rpx; }
.ml-5 { margin-left: 50rpx; }
.mr-0 { margin-right: 0; }
/* #ifndef APP-PLUS-NVUE */
.mr-auto { margin-right: auto; }
/* #endif */
.mr-1 { margin-right: 10rpx; }
.mr-2 { margin-right: 20rpx; }
.mr-3 { margin-right: 30rpx; }
.mr-4 { margin-right: 40rpx; }
.mr-5 { margin-right: 50rpx; }
.my-0 { margin-top: 0; margin-bottom: 0; }
/* #ifndef APP-PLUS-NVUE */
.my-auto { margin-top: auto; margin-bottom: auto; }
/* #endif */
.my-1 { margin-top: 10rpx; margin-bottom: 10rpx; }
.my-2 { margin-top: 20rpx; margin-bottom: 20rpx; }
.my-3 { margin-top: 30rpx; margin-bottom: 30rpx; }
.my-4 { margin-top: 40rpx; margin-bottom: 40rpx; }
.my-5 { margin-top: 50rpx; margin-bottom: 50rpx; }
.mx-0 { margin-left: 0; margin-right: 0; }
/* #ifndef APP-PLUS-NVUE */
.mx-auto { margin-left: auto; margin-right: auto; }
/* #endif */
.mx-1 { margin-left: 10rpx; margin-right: 10rpx;}
.mx-2 { margin-left: 20rpx; margin-right: 20rpx;}
.mx-3 { margin-left: 30rpx; margin-right: 30rpx;}
.mx-4 { margin-left: 40rpx; margin-right: 40rpx;}
.mx-5 { margin-left: 50rpx; margin-right: 50rpx;}
.p-0 { padding: 0; }
.p { padding: 5rpx; }
.p-1 { padding: 10rpx; }
.p-2 { padding: 20rpx; }
.p-3 { padding: 30rpx; }
.p-4 { padding: 40rpx; }
.p-5 { padding: 50rpx; }
.pt-0 { padding-top: 0; }
.pt { padding-top: 5rpx; }
.pt-1 { padding-top: 10rpx; }
.pt-2 { padding-top: 20rpx; }
.pt-3 { padding-top: 30rpx; }
.pt-4 { padding-top: 40rpx; }
.pt-5 { padding-top: 50rpx; }
.pb-0 { padding-bottom: 0; }
.pb-1 { padding-bottom: 10rpx; }
.pb { padding-bottom: 5rpx; }
.pb-2 { padding-bottom: 20rpx; }
.pb-3 { padding-bottom: 30rpx; }
.pb-4 { padding-bottom: 40rpx; }
.pb-5 { padding-bottom: 50rpx; }
.pl-0 { padding-left: 0; }
.pl { padding-left: 5rpx; }
.pl-1 { padding-left: 10rpx; }
.pl-2 { padding-left: 20rpx; }
.pl-3 { padding-left: 30rpx; }
.pl-4 { padding-left: 40rpx; }
.pl-5 { padding-left: 50rpx; }
.pr-0 { padding-right: 0; }
.pr { padding-right: 5rpx; }
.pr-1 { padding-right: 10rpx; }
.pr-2 { padding-right: 20rpx; }
.pr-3 { padding-right: 30rpx; }
.pr-4 { padding-right: 40rpx; }
.pr-5 { padding-right: 50rpx; }
.py-0 { padding-top: 0; padding-bottom: 0; }
.py { padding-top: 5rpx; padding-bottom: 5rpx; }
.py-1 { padding-top: 10rpx; padding-bottom: 10rpx; }
.py-2 { padding-top: 20rpx; padding-bottom: 20rpx; }
.py-3 { padding-top: 30rpx; padding-bottom: 30rpx; }
.py-4 { padding-top: 40rpx; padding-bottom: 40rpx; }
.py-5 { padding-top: 50rpx; padding-bottom: 50rpx; }
.px-0 { padding-left: 0; padding-right: 0; }
.px-1 { padding-left: 10rpx; padding-right: 10rpx;}
.px { padding-left: 5rpx; padding-right: 5rpx;}
.px-2 { padding-left: 20rpx; padding-right: 20rpx;}
.px-3 { padding-left: 30rpx; padding-right: 30rpx;}
.px-4 { padding-left: 40rpx; padding-right: 40rpx;}
.px-5 { padding-left: 50rpx; padding-right: 50rpx;}
/* 文字大小 */
.font-lg { font-size: 40rpx;}
.font-38 { font-size: 38rpx;}
.font-36 { font-size: 36rpx;}
.font-md { font-size: 35rpx;}
.font-34 { font-size: 34rpx;}
.font-32 {font-size: 32rpx}
.font { font-size: 30upx;}
.font-main {font-size: 28rpx;}
.font-26 {font-size: 26rpx}
.font-sm { font-size: 25upx;}
.font-24 {font-size: 24rpx}
.font-22 {font-size: 22rpx}
.font-small { font-size: 20upx;}
.font-10 {font-size: 24rpx; transform:scale(0.81);}
.h1{font-size:80upx; line-height:1.8;}
.h2{font-size:60upx; line-height:1.8;}
.h3{font-size:45upx; line-height:1.8;}
.h4{font-size:32upx; line-height:1.8;}
.h5{font-size:30upx; line-height:1.8;}
.h6{font-size:28upx; line-height:1.8;}
/* 文字缩进 */
/* #ifndef APP-PLUS-NVUE */
.text-indent{text-indent:2;}
/* #endif */
/* 文字划线 */
.text-through{text-decoration:line-through;}
/* 文字对齐 */
.text-left { text-align: left;}
.text-right { text-align: right;}
.text-center { text-align: center;}
/* 文字换行溢出处理 */
.text-ellipsis {
/* #ifndef APP-PLUS-NVUE */
overflow: hidden;text-overflow: ellipsis;white-space: nowrap;
/* #endif */
/* #ifdef APP-PLUS-NVUE */
lines: 1;
/* #endif */
}
/* 文字粗细和斜体 */
.font-weight-light {font-weight: 300;} /*细*/
.font-weight-lighter {font-weight: 100;}/*更细*/
.font-weight-normal { font-weight: 500;} /*正常*/
.font-weight-bold { font-weight: 700;} /*粗*/
.font-weight-bolder { font-weight: bold;} /*更粗*/
.font-italic { font-style: italic;} /*斜体*/
/* 文字颜色 */
.text-red {color: #FF0000}
.text-white {color: #ffffff;}
.text-primary {color: #007bff;}
.text-hover-primary { color: #0056b3;}
.text-secondary {color: #6c757d;}
.text-hover-secondary { color: #494f54;}
.text-success {color: #28a745;}
.text-hover-success{color: #19692c;}
.text-info { color: #17a2b8;}
.text-hover-info {color: #0f6674;}
.text-warning {color: #ffc107;}
.text-hover-warning { color: #ba8b00;}
.text-danger { color: #dc3545;}
.text-hover-danger { color: #a71d2a;}
.text-light { color: #f8f9fa;}
.text-hover-light { color: #cbd3da;}
.text-dark { color: #343a40;}
.text-hover-dark{ color: #121416;}
.text-body { color: #212529;}
.text-muted { color: #999999;}
.text-EE8414 {color: #EE8414;}
.text-FE6347 {color:#FE6347}
.text-blue {color: #0175FF}
.text-black {color: #000}
.text-light-muted { color: #A9A5A0;}
.text-light-black { color: rgba(0, 0, 0, 0.5);}
.text-light-white { color: rgba(255, 255, 255, 0.5);}
/* 背景颜色 */
.bg-primary { background-color: #007bff;}
.bg-hover-primary:hover{ background-color: #0062cc !important;}
.bg-secondary { background-color: #6c757d;}
.bg-hover-secondary:hover{ background-color: #545b62 !important;}
.bg-success { background-color: #28a745;}
.bg-hover-success { background-color: #1e7e34 !important;}
.bg-info { background-color: #17a2b8;}
.bg-hover-info { background-color: #117a8b !important;}
.bg-warning { background-color: #ffc107;}
.bg-FFE9E5 {background-color:#FFE9E5 !important;}
.bg-hover-warning { background-color: #d39e00 !important;}
.bg-hover-f1f1f1 {background-color: #f1f1f1 !important;}
.bg-hover-dc563e {background-color: #ef5d43 !important;}
.bg-danger { background-color: #dc3545;}
.bg-FE6347 {background-color: #FE6347 !important;}
.bg-hover-danger{ background-color: #bd2130 !important;}
.bg-light { background-color: #f8f9fa;}
.bg-hover-light{ background-color: #dae0e5 !important;}
.bg-dark { background-color: #343a40;}
.bg-hover-dark { background-color: #1d2124 !important;}
.bg-white { background-color: #ffffff;}
.bg-hover-main {background-color: #F6F7F8 !important;}
.bg-transparent { background-color: transparent;}
/* 边框 */
.border { border-width: 1rpx;border-style: solid;border-color: #dee2e6;}
.border-top {
border-top-width: 1rpx;
border-top-style: solid;
border-top-color: #dee2e6;
}
.border-right {
border-right-width: 1rpx;
border-right-style: solid;
border-right-color: #dee2e6;
}
.border-bottom {
border-bottom-width: 1rpx;
border-bottom-style: solid;
border-bottom-color: #dee2e6;
}
.border-bottom-ee {
border-bottom-width: 1rpx;
border-bottom-style: solid;
border-bottom-color: #EEEEEE;
}
.border-bottom-dashed {
border-bottom-width: 2rpx;
border-bottom-style: dashed;
border-bottom-color: #F2F2F2;
}
.border-top-dashed {
border-top-width: 2rpx;
border-top-style: dashed;
border-top-color: #F2F2F2;
}
.border-left {
border-left-width: 1rpx;
border-left-style: solid;
border-left-color: #dee2e6;
}
.border-0 { border-width: 0!important;}
.border-top-0 { border-top-width: 0!important;}
.border-right-0 {border-right-width: 0!important;}
.border-bottom-0 {border-bottom-width: 0!important;}
.border-left-0 {border-left-width: 0!important;}
.border-primary { border-color: #007bff;}
.border-secondary {border-color: #6c757d;}
.border-light-secondary {border-color: #E9E8E5;}
.border-success {border-color: #28a745;}
.border-info {border-color: #17a2b8;}
.border-warning {border-color: #ffc107;}
.border-danger {border-color: #dc3545;}
.border-light {border-color: #f8f9fa;}
.border-dark {border-color: #343a40;}
.border-white {border-color: #FFFFFF;}
/* 圆角 */
.rounded { border-radius: 8rpx;}
.rounded-top {
border-top-left-radius: 8rpx;
border-top-right-radius: 8rpx;
}
.rounded-right {
border-top-right-radius: 8rpx;
border-bottom-right-radius: 8rpx;
}
.rounded-bottom {
border-bottom-right-radius: 8rpx;
border-bottom-left-radius: 8rpx;
}
.rounded-left {
border-top-left-radius: 8rpx;
border-bottom-left-radius: 8rpx;
}
.rounded-circle { border-radius: 100rpx;}
.rounded-0 { border-radius: 0;}
/* 显示 */
/* #ifndef APP-PLUS-NVUE */
.d-none{ display: none; }
.d-inline-block{ display: inline-block; }
.d-block{ display: block; }
/* #endif */
/* 内容溢出 */
.overflow-hidden { overflow: hidden;}
/* 定位 */
.position-relative { position: relative;}
.position-absolute { position: absolute;}
.position-fixed { position: fixed;}
/* 定位 - 固定顶部 */
.fixed-top {
position: fixed !important;
top: 0;
right: 0;
left: 0;
z-index: 1030;
}
/* 定位 - 固定底部 */
.fixed-bottom {
position: fixed;
right: 0;
bottom: 0;
left: 0;
z-index: 1030;
}
.top-0 { top: 0; }
.left-0 { left: 0; }
.right-0 { right: 0; }
.bottom-0 { bottom: 0; }
/* 阴影 */
/* #ifndef APP-PLUS-NVUE */
.shadow { box-shadow: 0 2upx 12upx rgba(0, 0, 0, 0.15);}
.shadow-lg { box-shadow: 0upx 40upx 100upx 0upx rgba(0, 0, 0, 0.175);}
.shadow-none { box-shadow: none !important;}
.shadow-sm {
box-shadow: 0 2upx 4upx rgba(114, 130, 138, 0.2)!important;
}
.shadow {
box-shadow: 0 8upx 16upx rgba(114, 130, 138, 0.2)!important;
}
.shadow-md {
box-shadow: 0 12upx 20upx rgba(114, 130, 138, 0.2)!important;
}
.shadow-lg {
box-shadow: 0 16upx 48upx rgba(114, 130, 138, 0.2)!important;
}
.shadow-qm {
box-shadow: 10rpx 10rpx 10rpx rgba(0, 0, 0, 0.02), 10rpx -10rpx 10rpx rgba(0, 0, 0, 0.02), -10rpx 10rpx 10rpx rgba(0, 0, 0, 0.02), -10rpx -10rpx 10rpx rgba(0, 0, 0, 0.02) !important;
}
/* #endif */
.user-msg-r{
width: 150rpx;
height: 60rpx;
background: #F0F0F7;
border-radius: 30rpx;
text-align: center;
line-height: 60rpx;
font-weight: bold;
font-size: 30rpx;
color: #0175FF;
margin-top: 13rpx;
}

+ 44
- 0
styles/init.css View File

@ -0,0 +1,44 @@
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
font-family: PingFang SC;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}

+ 75
- 0
uni.scss View File

@ -0,0 +1,75 @@
/**
* 这里是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:24rpx;
$uni-font-size-base:28rpx;
$uni-font-size-lg:32rpx;
/* 图片尺寸 */
$uni-img-size-sm:40rpx;
$uni-img-size-base:52rpx;
$uni-img-size-lg:80rpx;
/* Border Radius */
$uni-border-radius-sm: 4rpx;
$uni-border-radius-base: 6rpx;
$uni-border-radius-lg: 12rpx;
$uni-border-radius-circle: 50%;
/* 水平间距 */
$uni-spacing-row-sm: 10px;
$uni-spacing-row-base: 20rpx;
$uni-spacing-row-lg: 30rpx;
/* 垂直间距 */
$uni-spacing-col-sm: 8rpx;
$uni-spacing-col-base: 16rpx;
$uni-spacing-col-lg: 24rpx;
/* 透明度 */
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
/* 文章场景相关 */
$uni-theme-color: #0175FF;
$uni-text-color: #FF0000;
@import 'uview-ui/theme.scss';

Loading…
Cancel
Save