no message
This commit is contained in:
commit
eedce9ecb6
31
.eslintrc.js
Normal file
31
.eslintrc.js
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Eslint config file
|
||||
* Documentation: https://eslint.org/docs/user-guide/configuring/
|
||||
* Install the Eslint extension before using this feature.
|
||||
*/
|
||||
module.exports = {
|
||||
env: {
|
||||
es6: true,
|
||||
browser: true,
|
||||
node: true,
|
||||
},
|
||||
ecmaFeatures: {
|
||||
modules: true,
|
||||
},
|
||||
parserOptions: {
|
||||
ecmaVersion: 2018,
|
||||
sourceType: 'module',
|
||||
},
|
||||
globals: {
|
||||
wx: true,
|
||||
App: true,
|
||||
Page: true,
|
||||
getCurrentPages: true,
|
||||
getApp: true,
|
||||
Component: true,
|
||||
requirePlugin: true,
|
||||
requireMiniProgram: true,
|
||||
},
|
||||
// extends: 'eslint:recommended',
|
||||
rules: {},
|
||||
}
|
317
app.js
Normal file
317
app.js
Normal file
@ -0,0 +1,317 @@
|
||||
//app.js
|
||||
var miucms = require('./utils/miucms.js');
|
||||
// var script = require('./utils/script');
|
||||
// console.log(script());
|
||||
var initial_url = 'https://api.gter.net/xiaoapp_offer.init.json';
|
||||
var __ = require('./utils/miucms.js');
|
||||
import util from './utils/util'
|
||||
|
||||
// 保存原始的Page构造器
|
||||
const originPage = Page;
|
||||
|
||||
// 重写Page构造器
|
||||
Page = function (pageConfig) {
|
||||
// 添加全局的onShow逻辑
|
||||
const originOnLoad = pageConfig.onLoad;
|
||||
pageConfig.onLoad = function () {
|
||||
util.statistics({})
|
||||
if (originOnLoad) originOnLoad.apply(this, arguments);
|
||||
};
|
||||
|
||||
const originOnShare = pageConfig.onShareAppMessage;
|
||||
if (originOnShare) {
|
||||
pageConfig.onShareAppMessage = function (e) {
|
||||
util.statistics({
|
||||
name: "share"
|
||||
})
|
||||
return originOnShare.apply(this, [e]);
|
||||
};
|
||||
}
|
||||
|
||||
// 调用原始的Page函数
|
||||
return originPage(pageConfig);
|
||||
};
|
||||
|
||||
App({
|
||||
randomString(n) {
|
||||
let str = 'abcdefghijklmnopqrstuvwxyz9876543210';
|
||||
let tmp = '',
|
||||
i = 0,
|
||||
l = str.length;
|
||||
for (i = 0; i < n; i++) {
|
||||
tmp += str.charAt(Math.floor(Math.random() * l));
|
||||
}
|
||||
return tmp;
|
||||
},
|
||||
|
||||
onLaunch: function (options) {
|
||||
util.statistics({
|
||||
data: {
|
||||
scene: options.scene
|
||||
},
|
||||
path: options.path,
|
||||
query: options.query,
|
||||
name: "onLaunch"
|
||||
})
|
||||
|
||||
const accountInfo = wx.getAccountInfoSync();
|
||||
const envVersion = accountInfo.miniProgram.envVersion;
|
||||
this.globalData['envVersion'] = envVersion
|
||||
this.globalData.options = options;
|
||||
if (wx.getUserProfile) {
|
||||
this.globalData.canIUseGetUserProfile = true;
|
||||
}
|
||||
|
||||
var Authorization = wx.getStorageSync('Authorization');
|
||||
|
||||
if (!Authorization) {
|
||||
Authorization = this.randomString(32);
|
||||
wx.setStorageSync('Authorization', Authorization)
|
||||
wx.setStorageSync('session', Authorization)
|
||||
}
|
||||
|
||||
try {
|
||||
var systemInfo = wx.getSystemInfoSync();
|
||||
this.computeNavigateBarHeight(systemInfo);
|
||||
} catch (e) {
|
||||
// 获取系统信息失败
|
||||
this.globalData.screen_data = {
|
||||
windowHeight: 812,
|
||||
totalTopHeight: 68,
|
||||
statusBarHeight: 20,
|
||||
titleBarHeight: 48,
|
||||
title: '',
|
||||
index: false
|
||||
}
|
||||
}
|
||||
__.initial(this)
|
||||
},
|
||||
|
||||
computeNavigateBarHeight: function () {
|
||||
|
||||
var systemInfo = wx.getSystemInfoSync();
|
||||
if (wx.getSystemInfoSync) {
|
||||
var data = wx.getMenuButtonBoundingClientRect()
|
||||
let totalTopHeight = data.bottom;
|
||||
let windowHeight = systemInfo.windowHeight,
|
||||
statusBarHeight = data.top,
|
||||
windowWidth = systemInfo.windowWidth
|
||||
let platform = systemInfo.platform
|
||||
this.globalData.platform = platform
|
||||
if (platform == 'windows' || platform == 'mac') this.globalData.isPC = true
|
||||
|
||||
this.globalData.screen_data = {
|
||||
windowHeight: windowHeight,
|
||||
windowWidth,
|
||||
totalTopHeight: totalTopHeight + 6,
|
||||
statusBarHeight: statusBarHeight,
|
||||
titleBarHeight: data.height,
|
||||
titleWidth: data.widthinitial,
|
||||
bottomLift: systemInfo.screenHeight - systemInfo.safeArea.bottom,
|
||||
isIos: systemInfo.platform === 'ios' ? true : false,
|
||||
}
|
||||
} else {
|
||||
// 兼容低版本
|
||||
this.globalData.screen_data = {
|
||||
windowHeight: systemInfo.windowHeight,
|
||||
totalTopHeight: systemInfo.statusBarHeight + 48,
|
||||
statusBarHeight: systemInfo.statusBarHeight,
|
||||
titleBarHeight: 48,
|
||||
title: '',
|
||||
index: false
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
onShow: function (options) {
|
||||
// 检查小程序更新问题
|
||||
/* 版本自动更新代码开始 */
|
||||
const updateManager = wx.getUpdateManager()
|
||||
updateManager.onCheckForUpdate(function (res) {
|
||||
// console.log("新版本信息的回调", res.hasUpdate) // 请求完新版本信息的回调 true说明有更新
|
||||
})
|
||||
updateManager.onUpdateReady(function () {
|
||||
wx.showModal({
|
||||
title: '更新检测', // 此处可自定义提示标题
|
||||
content: '检测到新版本,是否重启小程序?', // 此处可自定义提示消息内容
|
||||
success: function (res) {
|
||||
if (res.confirm) {
|
||||
// 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
|
||||
updateManager.applyUpdate()
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
updateManager.onUpdateFailed(function () {
|
||||
// 新的版本下载失败
|
||||
wx.showModal({
|
||||
title: '更新提示',
|
||||
content: '新版本下载失败',
|
||||
showCancel: false
|
||||
})
|
||||
})
|
||||
/* 版本自动更新代码结束 */
|
||||
|
||||
this.globalData.scene = options.scene
|
||||
|
||||
this.globalData.options = options;
|
||||
__.request('https://offer.gter.net/miniprogram/share/overall').then(res => {
|
||||
if (res.data) {
|
||||
this.globalData.shareConfig = res.data;
|
||||
}
|
||||
}).catch(res => {})
|
||||
|
||||
// 判断socket从后台打开 并且已经断开链接了,需要重启
|
||||
if (this.globalData.isHideState && this.globalData.socketTask && this.globalData.socketTask['readyState'] != 1) {
|
||||
miucms.useSocket()
|
||||
}
|
||||
this.globalData.isHideState = false
|
||||
},
|
||||
onHide: function () {
|
||||
this.globalData.isHideState = true
|
||||
},
|
||||
onError: function () {
|
||||
// 这里回调错误信息
|
||||
// console.log('onError')
|
||||
},
|
||||
// get: function () {
|
||||
// return this.globalData.config;
|
||||
// },
|
||||
return_data: function (res) {
|
||||
var json = res.data;
|
||||
if (typeof json != 'object') {
|
||||
if (json != null) {
|
||||
json = json.replace("\ufeff", "");
|
||||
var jj = JSON.parse(json);
|
||||
res.data = jj;
|
||||
}
|
||||
}
|
||||
var data = res.data;
|
||||
return data;
|
||||
},
|
||||
// 判断微信提醒弹窗请求
|
||||
judgeWechatAlertsPop() {
|
||||
return new Promise((resolve, reject) => {
|
||||
util.wxpost("/miniprogram/user/getPopup").then(res => {
|
||||
// res.data.iswechatmessagepush = 0
|
||||
let iswechatmessagepush = res.data.iswechatmessagepush
|
||||
this.globalData.iswechatmessagepush = iswechatmessagepush
|
||||
resolve(res.data)
|
||||
}).finally(() => {
|
||||
this.globalData.iswechatmessagepushState = false
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
watch: function (method) {
|
||||
var obj = this.globalData;
|
||||
let setSate = obj['setSate']
|
||||
Object.defineProperty(this.globalData, "setSate", { //这里的 globalData对应 上面 globalData
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
set: function (value) { //动态赋值,传递对象,为 globalData 中对应变量赋值
|
||||
setSate = value
|
||||
method(value);
|
||||
},
|
||||
get: function () { //获取全局变量值,直接返回全部
|
||||
return setSate;
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
globalData: {
|
||||
setSate: false,
|
||||
baseURL: "https://offer.gter.net",
|
||||
token: null,
|
||||
title: null,
|
||||
session: null,
|
||||
code: null,
|
||||
user: {},
|
||||
userInfo: {},
|
||||
options: {},
|
||||
config: {
|
||||
follow: {
|
||||
init: "https://offer.gter.net/miniprogram/follow/init",
|
||||
lists: "https://offer.gter.net/miniprogram/follow/lists",
|
||||
professionSearch: "https://offer.gter.net/miniprogram/follow/professionSearch",
|
||||
schoolSearch: "https://offer.gter.net/miniprogram/follow/schoolSearch",
|
||||
},
|
||||
interviewExperience: {
|
||||
details: "https://offer.gter.net/miniprogram/interviewExperience/details",
|
||||
lists: "https://offer.gter.net/miniprogram/interviewExperience/lists"
|
||||
},
|
||||
offer: {
|
||||
details: "https://offer.gter.net/miniprogram/offer/details",
|
||||
lists: "https://offer.gter.net/miniprogram/offer/lists"
|
||||
},
|
||||
thread: {
|
||||
lists: "https://offer.gter.net/miniprogram/thread/lists",
|
||||
reply: "https://offer.gter.net/miniprogram/thread/reply"
|
||||
},
|
||||
vote: {
|
||||
commentList: "https://offer.gter.net/miniprogram/vote/commentList",
|
||||
commentPost: "https://offer.gter.net/miniprogram/vote/commentPost",
|
||||
create: "https://offer.gter.net/miniprogram/vote/create",
|
||||
delete: "https://offer.gter.net/miniprogram/vote/delete",
|
||||
details: "https://offer.gter.net/miniprogram/vote/details",
|
||||
lists: "https://offer.gter.net/miniprogram/vote/lists",
|
||||
operation: "https://offer.gter.net/miniprogram/vote/operation",
|
||||
unvote: "https://offer.gter.net/miniprogram/vote/unvote"
|
||||
}
|
||||
},
|
||||
source: '',
|
||||
header: {
|
||||
'content-type': 'application/json',
|
||||
'Accept': 'application/json, text/plain',
|
||||
'Cookie': '_miucms_session_gter=' + wx.getStorageSync('_miucms_session')
|
||||
},
|
||||
new_reply: false,
|
||||
// 寄托租房独有字段
|
||||
choose: {},
|
||||
kw: '',
|
||||
status: 0,
|
||||
screen_data: {},
|
||||
canGetData: false, //是否可以开始获取数据
|
||||
StudentapartmentNew: null,
|
||||
isUserAuthorization: 0, //用户点击授权:0:未知,1:未授权,2:已授权
|
||||
follow_data: {},
|
||||
ischangeFollow: false, //是否有更新关注列表
|
||||
shareConfig: {},
|
||||
canIUseGetUserProfile: false,
|
||||
|
||||
// 优惠券的隐藏与否
|
||||
iscoupon: false,
|
||||
isgetinit: false,
|
||||
mysquareAsk: {},
|
||||
favUpdateList: [],
|
||||
isPC: false,
|
||||
platform: {},
|
||||
initializeLoginState: false, // 初始化登录状态
|
||||
iswechatmessagepush: null,
|
||||
iswechatmessagepushState: -1,
|
||||
|
||||
socketTask: null, // 全局的 socket 值
|
||||
isHideState: true, // 判断是否 隐藏了 在 onshow 为 true 是代表小程序后台打开
|
||||
|
||||
messageData: [], // 全局的私信信息
|
||||
messageSendData: [], // 全局的 发送新消息的返回
|
||||
unreadMessageCount: 0, // 未读消息数量
|
||||
onMessage: res => {
|
||||
// console.log("res拿到的信息", res);
|
||||
},
|
||||
|
||||
postList: [], // 一级页面的 发布 列表
|
||||
navigation: [], // 一级页面的 导航栏 列表
|
||||
|
||||
voteAmend: {}, // 新投票列表的详情和列表交互数据
|
||||
|
||||
signInState: 0, // 签到状态
|
||||
getSignInState: false, // 获取完签到状态
|
||||
popup: undefined, // 全局弹窗数据 undefined 是还没获取到 null 是没有弹窗 {} 是数据
|
||||
offerkaipingadvertisement: {}, // 开屏广告 数据
|
||||
offerkaipingadvertisementState: false, // 开屏广告 状态
|
||||
}
|
||||
})
|
26
app.json
Normal file
26
app.json
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"entryPagePath": "pages/projectLibrary/projectLibrary",
|
||||
"pages": [
|
||||
"pages/index/index",
|
||||
"pages/logs/logs",
|
||||
"pages/projectLibrary/projectLibrary",
|
||||
"pages/projectSchoolHomepage/projectSchoolHomepage",
|
||||
"pages/projectSubjectList/projectSubjectList",
|
||||
"pages/projectComparison/projectComparison",
|
||||
"pages/projectList/projectList",
|
||||
"pages/projectMy/projectMy",
|
||||
"pages/projectDetails/projectDetails",
|
||||
"pages/search/search",
|
||||
"pages/webview/webview"
|
||||
],
|
||||
"window": {
|
||||
"navigationBarTextStyle": "black",
|
||||
"navigationBarTitleText": "项目库",
|
||||
"navigationBarBackgroundColor": "#ffffff",
|
||||
"navigationStyle": "custom"
|
||||
},
|
||||
"style": "v2",
|
||||
"componentFramework": "glass-easel",
|
||||
"sitemapLocation": "sitemap.json",
|
||||
"lazyCodeLoading": "requiredComponents"
|
||||
}
|
95
app.wxss
Normal file
95
app.wxss
Normal file
@ -0,0 +1,95 @@
|
||||
/**app.wxss**/
|
||||
.container {
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
font-size: 14px;
|
||||
color: #383734;
|
||||
padding-bottom: 70px;
|
||||
}
|
||||
|
||||
.item-bottom-item {
|
||||
margin-left: 24rpx;
|
||||
font-size: 18rpx;
|
||||
color: #aaa;
|
||||
line-height: 36rpx;
|
||||
}
|
||||
|
||||
.item-bottom-icon {
|
||||
width: 22rpx;
|
||||
height: 22rpx;
|
||||
margin-right: 7.5rpx;
|
||||
}
|
||||
|
||||
.empty {
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
color: #7F7F7F;
|
||||
font-size: 23rpx;
|
||||
margin: 36rpx 0rpx 0;
|
||||
border-radius: 30rpx;
|
||||
}
|
||||
|
||||
.empty .dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
}
|
||||
|
||||
.empty .dot:not(:last-of-type) {
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
|
||||
.empty .empty-icom {
|
||||
width: 153rpx;
|
||||
height: 180rpx;
|
||||
margin-top: 12rpx;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
/* 公共的 css 样式 */
|
||||
.flexflex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flexcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flexjcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.flexacenter {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flex1 {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.flexcolumn {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* 文字一行显示 */
|
||||
.one-line-display {
|
||||
word-break: keep-all;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
/* 字体 Arial-Black 只有0到9 */
|
||||
@font-face {
|
||||
font-family: 'Arial';
|
||||
src: url('data:font/woff2;charset=utf-8;base64,d09GMgABAAAAAAZgAA0AAAAADaAAAAYJAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GYACCUhEICokAhzkLIgABNgIkAz4EIAWKHAdQG9ALyB6DbXspPUlSlJMzOcfLINz0PiEUs040E3cqnlJRCLaNig/SuTsyE+F5/q925/1pQFJZNksgko4vG2BxJw2oHaSAi8t/0YLr92v19p/GQ6brItMZOp1SoJQn53vnCRWJ4qXQRSyRvDRKppGaNXpksc4e5EEpZrzAOwEgAPhW1JEAwJWbizn7sQlAASgDoBCEGiECUABR/YRMAQPMjmkBYBjaj5xgj07CUHKZiCKUnUAEUDMN8JCIcWQUWKzdzD6yjdSQXKI8LLD4fgCoMYsAaJ4qVYKAcCJKkEjTy0lIUABWO7v/A7CaZt3/P+aVgHCrSAMQKz3AML34ZAjQikQtcdDLEP9AoCSpZJK/iVZrgI2vB9IHqDaJeIWyLvJMggqIVvaHqNYr5VWayOkalRWqKgoFejsREfRuj1aqyRj+XDne5/PF+zDsiWKc3+S/xQ/zyccHAmS4XzbOK7gVQV4vRwcCCXpd4DbfThnq5SyZLyAfyoshVonXG60WaumP5RPlgK9dK5u3lzK/38T7gOQA6VzKzlxCXkJFC0qxnJJRCoa2ClpKxUGVPcWQGw+G6S3VNe6JtgiZ/sHd3l7EqDMe3aJpnzVgiA80VU95hX28iYrbt1NUgr+7nwxNMAwTH2ZwRzimpMT4mQHHMCNTC0rBzIZwJPRleyYKcukPb1IzJ+AXOhN63VdQUgqAATA6Y8/uPybiPssaRrSccdBYUthziCG+7vJtk5V5oXsfFxnzWka3Lzd9TTnLhfTOyab6+0/XtJzhbUkX0Pl3HcxzwVU+bF/ahPqRl7s/3d91LP6cMuzwdq55Y9sIfmznHpb0sEiLWSPMZsuuH3zkhf1S4J15zLlBoxZ8vjTVw8X2KC5F5a9uSM8muzXHf1X97zvDMdfZjjOcNzaMnmYfMvLV70EXzzxLm7GjzphZrcp6rOmRsa4Sq92Zk9w0rqyhukEf3c/Wu0dUVG9jkgnNKt2zqMZ8Pj9yT8c9Oj7y4ugLUC/3ne41ufrtHlVHVO12Rys9N2kCQ409N/VS6ymupLGV7fMbqixZ9vD47CFDhue40zq4RoiTmyHymzujmZoL7dWGb83X6aN7bQyZ29t2QlU2MHXM+0+e3XekMxcZ1RMjcutuPhc9cn7D7XRJyaiE6P5ud2nO0Lj4/IFgjvtW6ueNdywbeNL4qd0BPZnVxH7x6T2DF4a5IaP5oQ7xuXs2FI5Kule73P11fJv4xUkditsW7s/Pth6a5rjVtPTl16zBvhFDS7a1iA5PT43qnZQSEp6WHhKamhp8xFzkCQ8pKM00FwoR4bklsHVmNFdzYb3aWFpb6hj1r42hc3vZTqrK+qeNff+RUtUstUo5qyyPbYrp5/YI2QZT3kev81y7fc52AAAIgALne9W8DHXHrxK5BFvs++P/8xow10FIUACAgOTydxSIAf+ELvOAEELVDXzUXot7AJgJOFgNrcEI9aEHmCAFOFuf/gLUQPC7Ahqt0QCAItZEGyAvlK1ximDmTuIqkJCnPVKCYkJalSxAEXmuI0ORnygmL1VODsKXTwpSSwEyBRASZVIdKar0RlrHpKNImexHRrncR7EyRbxRkFN0ffTUlyOAwrgeNlZskFnhVixejlxu+X2AMy6L42TbOkKObDkKueU2oEd6vtyIzGCi606sZtppp5lG2ftbaYzVjYsLCxtWgJXPTbBRMSOyL9m9rZnLJrD6mpIxKiTBhHCbLOb13x8rh5291BLOwshzSqDGbiwLGzPkIEiFLAlZMADZxDcyC5llYz9Fsj+yApmhuZDZGH6ZMK+vx2a9RmE9k2nDOW1sRE52zoVaz4sacTHgaPQ4cPNpMO/TXfCXY7Zu1mqzaw3726097lBdJJtjB5OXZj3eg9PjMU7mGzm97y4ZiRm/Nas7FzNefyArv7YgHYidPVTUJTMfHhI5Hmb9YhphwcZkAazUz2zEYnKzIx48VWDKzlcwj1ObaxxkNoVbVWuaN27edDSJN9I0+hWsgF9/dQlQ3BT/jSL4vBogAYWmZxCsjLLKKa+CiipVNEjjcLlznc3EnxbjzykEAAAA') format('woff2'),
|
||||
url('data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAkgAA0AAAAADaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAJBAAAABoAAAAcd1dlsUdERUYAAAjoAAAAHAAAAB4AJwAWT1MvMgAAAaQAAABUAAAAYHFijQxjbWFwAAACLAAAAFkAAAFSEG0f1Gdhc3AAAAjgAAAACAAAAAj//wADZ2x5ZgAAAqwAAAPyAAAEgIog5d9oZWFkAAABMAAAADIAAAA2Bf+JX2hoZWEAAAFkAAAAIAAAACQN/AIRaG10eAAAAfgAAAAxAAAAPkNcBa9sb2NhAAACiAAAACIAAAAiCLgHuG1heHAAAAGEAAAAIAAAACACJQBnbmFtZQAABqAAAAH6AAAFHLRG6/Zwb3N0AAAInAAAAEIAAABQAfpVn3jaY2BkYGBgYmCoeLggKp7f5isDNwcDCFy4OT8EQf9/zqrNepmBkYEDpJaBAQBXDgw6AAB42mNgZGDgOPe3jYGBjYGB4V81qzYDUAQF8AMAa0kEGgABAAAAEAA2AAMAAAAAAAIABgAvADcAAAHUAAAAAAAAeNpjYGF5wjiBgZWBgXUWqzEDA0MThGbczpDGJMTBysTNxcLEyMTExMLAwNQuwIAAvv5+/gwKQLiddRfjJkZljnNMVQoMDPPvX4crUWBgBABqBw1heNpjY4AAplVAvJqBgTWMIQSIlwOxGRB7ALEWEDsDcRgQR0Pl3ZlWM9UyMAAA/tsJTAAAAHjaY2BgYGaAYBkGRgYQ8AHyGMF8FgYDIM0BhExAWoHBkmH7//9glgGI9f/x/yv/w6G6wICRjQHOZQTpYWJABYwQq5ABCysbOwcnFzcPL8PQAHz4pQGSugxpAAAAAAAAFAAUABQAFABMAGYAmADgAQABOgF+AZ4B7gIyAkACQAAAeNpVk31MU1cYxs97722bmAi9/UAwglygWMQS6Nd1aIoGrVyplQ5akjKocvmoY2LBoR0tCNvE0IgLfszEYUzczMKyxUTiYMo2l7C5YdAtZrhlZC7ZApq54XQhGbaHnXszN3dz/zjnj/O8z/N73xdRiHwMUiBEIxVCRSzHGjiWY1A8k74W36RAT1Amcw0hClUtzSkoxW2kQasR0qoRZ86gVqToySErd00uZVCnWMwOsKlzs7OUVWAC68lPwlv1efgR/vCjXwTbBjgp1jlq8kWx0U/9DOfBLXT0+t65hNvwsQPtHkgbxvemqsevQ85XU8QSoHeJpXlSbxm5EFdJoGIdwNPzuKHh6sDXs5sVtxdN9Deuunxwl47HkPzGTrLEyZt0hPLArjEQP1bJj8rgoCzmDNDrlCoixDHxJ8X6b8Ew0iCWu0UWB1N77t+8M99/9lakcj0VvQwl3x+OOUoD9VHu/c+a62909/153LuFl2uUEQ40qVFALgZ7jiWTkVRTVkjqSZCdVQBrDBlgMdvl0iptytOjEu7iQ4XALsJqQME9XpPg6YtPfTl3yginUxvdz+/d4y+s0mdpK1oqnGV+RrN1bGL6fOBMsX6V6URTz6+H6i732yOBcENTKBWyFU3O0opqqS9rEVLky5yWE0ccS34Lm81yaQC0OrGSmgVxbAyfxWHQwE66PR7BE/h3yg1T2CLnKSV5lIorKIt0lXRe5SDekV5HMSQK9b8oBONf9PVEW/aWw5tnQDOAE5ODtwb9GTCU3Ory7gvVbuDzivAFxRV8dSYzEy9MHsOLMX5vrNkkNvf2vNaZrufNUp8o5CM1k4jnVchILCgKQFb/p7IEMYdi5QkD0P3Hj5nHLepyXuSNWuFM4wQk9z8encEL58ANxos3+hK2cHXFS6FK734mZPY6G8oebN+G790ZfBh5EwRIhgFo8wzFEwePdL4SfbVbzl5D2CGSfbmcXUk8KGluJWi5GubCW8FuoViHXyy8eTexjmT67ejbXzz+GGNohlnQSznof3ciHeUhGxEki2Cz8nZ5JoiYPBKUNBI2q/3ZJPQzZxB2rdv4wZEfIRfS1q/1H+xoPPFD9P5CTxisgZ1Of52wvTblgEt4uWOHq43WWUp8obEO/0/vib5NG58bb2/9NFjUOv167wh4XLUvCK5AbaJkd6Rr1+5omHDetjTHLD3lrJV7ydt5CTCyWSXcjEbiTAyC7EUv+2qCU2oXX88bdQTz5/iP2KPRGVh2Dl/C312c7KMmwz5Py75KXzsIFq9TFB6UOyF1+vjDyGk8SrZ9P37DM0TTBHNnRMaMgOqiWKaQHibEpAnlqC4YwTvoYRz8G/rMVH8AAHja3VK9btswED5Rjo0iRdEp6BQcOhaQERvI4KJLftAtSxFkLMBIjERbtgSSTqA8Sx8gU7dO3fMCfYC+Q7ds+UizrtugQJEhQyWQ993x48fjHYnoJd1SQqvvS1JHnNC2eBuxoIE4izilXfEp4h443yLeoufiLuI+bae7EQ8oT39gV9J7BtFpUPA4oR3xOmJBL8T7iFN6Jz5G3APna8Rb9Ep8j7hPO2k/4gHdpm/omDSVGA7jmhQVxBgSvgTKqaGWOjKBVSHKdAqrYE+wtsBwWG9D5AieAfazDIqewTSiCf4RZRHt0xDRA6rx84a2DZ6CVbCXIZsV03Mk2J/h6cDz2blwTgHeHNbQDLGGLh6V4xV2aNy3AvZqHex52OEzKsOpLuS1qpEOu/IQ8bVa+VNahlwtOF7tp77FPehYl9rpa1VwIZ3kvGk7o8vK8Wml+KRZNK5rFR81pm2MdLpZ8GgyGWWY9od8UNcc2JaNsspcqgJBo2V9w9qyZGdkoebSzLi5+LviVaXziuey43MFoVJbpwwy0gvOlXESdro02hY693yLtH9Vn+kQs8S9Zgj7s/mwljmcD6FGy7Bq4KpyWUuAh/XPfuvnpiL/qbK+QMYbh/Fa/F8SOwsNsus2j9GIMe1hQRnrCzIejvc2pbIHUlmU+k9e4VO8mXtMfhL+AAB42mNgYgCDf20M1QzYgAADAyMTAxMDM4MwgwiDKIMYgziDBIMkgxSDNIMMIzMDI1t6TmVBhiFbbmZKSn4JAM6AB+wAAAAAAAH//wACeNpjYGRgYOABYjEgZmJgBEJ+IGYB8xgABEMAPnjaY2BgYGQAgqtL1DlA9IWb80NgNABD5QbiAAA=') format('woff'),
|
||||
url('Arial-Black.ttf') format('truetype');
|
||||
font-weight: 900;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
}
|
103
common/common.js
Normal file
103
common/common.js
Normal file
@ -0,0 +1,103 @@
|
||||
function phonecall(e) {
|
||||
let phone = e.currentTarget.dataset.tel;
|
||||
wx.makePhoneCall({
|
||||
phoneNumber: phone
|
||||
})
|
||||
}
|
||||
function pay(that){
|
||||
wx.requestPayment({
|
||||
'timeStamp': that.data.pay_info.result.timestamp,
|
||||
'nonceStr': that.data.pay_info.result.noncestr,
|
||||
'package': that.data.pay_info.result.package,
|
||||
'signType': that.data.pay_info.result.signtype,
|
||||
'paySign': that.data.pay_info.result.sign,
|
||||
'success': function (res) {
|
||||
// 支付成功
|
||||
that.data.wish_box.show_reminder = true;
|
||||
that.setData({
|
||||
wish_box: that.data.wish_box
|
||||
})
|
||||
setTimeout(function () {
|
||||
that.data.wish_box.show_reminder = false;
|
||||
that.setData({
|
||||
wish_box: that.data.wish_box
|
||||
})
|
||||
wx.navigateTo({
|
||||
url: '../make_a_wish/index?uniqid=' + that.data.wish_box.uniqid + '&token=' + that.data.wish_box.token
|
||||
})
|
||||
}, 2000)
|
||||
},
|
||||
'fail': function (res) {
|
||||
}
|
||||
})
|
||||
}
|
||||
function get_wish_status(that, config,app,source,sourceid) {
|
||||
|
||||
wx.request({
|
||||
url: config.wish.init,
|
||||
data: {
|
||||
session: wx.getStorageSync('session'),
|
||||
source: source,
|
||||
sourceid: sourceid
|
||||
},
|
||||
method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
|
||||
header: app.globalData.header,
|
||||
success: function (res) {
|
||||
var data = app.return_data(res);
|
||||
// istype = 1 and status = 1 已支付 直接走提交步骤
|
||||
|
||||
// istype = 0 and status = 1 赠送的,无需支付 直接走提交步骤
|
||||
|
||||
// status = 0 调用支付 pay_info 支付参数,支付成功后 直接走提交步骤
|
||||
if (data.istype == 0 && data.status == 1) {
|
||||
that.data.wish_box.box = 'free';
|
||||
} else if (data.istype == 1 && data.status == 0) {
|
||||
that.data.wish_box.box = 'charge';
|
||||
that.data.pay_info = data.pay_info;
|
||||
} else if (data.istype == 1 && data.status == 1) {
|
||||
that.data.wish_box.box = 'paid';
|
||||
}
|
||||
|
||||
that.data.wish_box.istype = data.istype;
|
||||
that.data.wish_box.money = data.money;
|
||||
that.data.wish_box.status = data.status;
|
||||
that.data.wish_box.token = data.token;
|
||||
that.data.wish_box.uniqid = data.uniqid;
|
||||
that.setData({
|
||||
wish_box: that.data.wish_box
|
||||
})
|
||||
if (that.data.wish_box.box == 'paid') {
|
||||
// 已经支付过了,直接跳走
|
||||
wx.navigateTo({
|
||||
url: '../make_a_wish/index?uniqid=' + that.data.wish_box.uniqid + '&token=' + that.data.wish_box.token
|
||||
})
|
||||
}
|
||||
that.data.wish_box.show = true;
|
||||
that.setData({
|
||||
wish_box: that.data.wish_box
|
||||
})
|
||||
},
|
||||
fail: function (res) {
|
||||
|
||||
},
|
||||
complete: function () {
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
function to_wish(that){
|
||||
that.get_wish_status
|
||||
}
|
||||
function close_wish_box(that){
|
||||
that.data.wish_box.show = false;
|
||||
that.setData({
|
||||
wish_box: that.data.wish_box
|
||||
})
|
||||
}
|
||||
module.exports = {
|
||||
phonecall: phonecall,
|
||||
pay:pay,
|
||||
to_wish: to_wish,
|
||||
get_wish_status: get_wish_status,
|
||||
close_wish_box: close_wish_box
|
||||
}
|
1303
common/common.less
Normal file
1303
common/common.less
Normal file
File diff suppressed because it is too large
Load Diff
691
common/common.wxml
Normal file
691
common/common.wxml
Normal file
@ -0,0 +1,691 @@
|
||||
<wxs module="filter" src="/utils/time.wxs"></wxs>
|
||||
|
||||
<!--内容列表 -->
|
||||
<template name="project_hot_list">
|
||||
<view>
|
||||
<view class='hot-list' wx:for="{{ list }}" wx:key="index">
|
||||
<view class='l'>
|
||||
<view class='name'>{{ item.name }}</view>
|
||||
<view class='num'>{{ item.offer_num }}个Offer</view>
|
||||
</view>
|
||||
<view class='r'>
|
||||
<form class='submit-form' report-submit='true' data-index="{{ index }}" data-types="project" data-obj="{{ item }}" bindsubmit="follow_project">
|
||||
<view class='focus' wx:if="{{ item.isfollow }}">已关注</view>
|
||||
<view class='notfocus' wx:if="{{ !item.isfollow }}">
|
||||
<image src="../../../img/plus.png"></image> 关注
|
||||
</view>
|
||||
<button form-type="submit" hover-class="none" type="default" size="mini"></button>
|
||||
</form>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<template name="school_hot_list">
|
||||
<view>
|
||||
<view class='hot-list' wx:for="{{ list }}" wx:key="index">
|
||||
<view class='l'>
|
||||
<view class='name'>{{ item.name }}</view>
|
||||
<view class='num'>{{ item.offer_num }}个Offer</view>
|
||||
</view>
|
||||
<view class='r'>
|
||||
|
||||
<form class='submit-form' report-submit='true' data-index="{{ index }}" data-types="school" data-obj="{{ item }}" bindsubmit="follow_project">
|
||||
<view class='focus' wx:if="{{ item.isfollow }}">已关注</view>
|
||||
<view class='notfocus' wx:if="{{ !item.isfollow }}">
|
||||
<image src="../../../img/plus.png"></image> 关注
|
||||
</view>
|
||||
<button form-type="submit" hover-class="none" type="default" size="mini"></button>
|
||||
</form>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<template name="offer_list">
|
||||
<navigator class='item' url='../../index/offer_details/index?id={{ item.id }}'>
|
||||
<view class='school'>{{ item.schoolname }}</view>
|
||||
<view class='project'>{{ item.professional }}</view>
|
||||
<view class='footer'>
|
||||
<view class='l'>
|
||||
<text>{{ item.year }}</text>
|
||||
<view class='divide'>|</view>
|
||||
<text>{{ item.semester }}</text>
|
||||
<view class='divide'>|</view>
|
||||
<text>{{ item.apply_results }}</text>
|
||||
<view class='divide' wx:if="{{ item.gpa }}">|</view>
|
||||
<text>{{ item.gpa }}</text>
|
||||
<view class='divide' wx:if="{{ item.schoolgrade }}">|</view>
|
||||
<text>{{ item.schoolgrade }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class='bottom'>
|
||||
<image src='{{item.avatar}}' class='avatar'></image> {{ item.username }}
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<template name="message_alert">
|
||||
<view class='alert-comfirm-box' bindtap="close_show_message">
|
||||
<view class='reminder_box'>
|
||||
<view class="tips">{{ message }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<template name="NavBar-holder">
|
||||
<view>
|
||||
<view class="NavBar-holder" style="height:{{screen_data.totalTopHeight}}px"></view>
|
||||
<view class="NavBar">
|
||||
<view class="NavBar-statusBar" style="height:{{screen_data.statusBarHeight}}px"></view>
|
||||
<view class="NavBar-titlebar" style="height:{{screen_data.titleBarHeight}}px">
|
||||
<view class="NavBar-content">
|
||||
<view class="NavBar-left NavBar-left-more" wx:if="{{ !screen_data.index }}">
|
||||
<view bindtap="navigategoBack" class='Btn'>
|
||||
<image class="NavBar-BackIcon" src="../../../img/Back.svg"></image>
|
||||
</view>
|
||||
<view bindtap="backHome" class='Btn'>
|
||||
<image class="NavBar-HomeIcon backToHome" src="../../../img/Home.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="NavBar-left NavBar-left-more" wx:else>
|
||||
</view>
|
||||
<view class="NavBar-content-title">{{ screen_data.title }}</view>
|
||||
</view>
|
||||
<view class="capsule-holder"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<!-- 页面 右下角的绿色 发布及提问按钮 -->
|
||||
<template name="topublishArticle">
|
||||
<view class="topublishArticle">
|
||||
<view class="bj" wx:if="{{ topublishArticleState }}" bindtap="triggerState"></view>
|
||||
<view hover-class="hover" id="topublish" class="topublish-btn">
|
||||
<view class="buttonEject" wx:if="{{ topublishArticleState }}">
|
||||
<view class="buttonEject-item" bindtap="topublishArticle" data-type="{{'ask'}}">
|
||||
<i class="buttonEjectIcon"></i>
|
||||
<text>我要提问</text>
|
||||
</view>
|
||||
<view class="buttonEject-item" bindtap="topublishArticle" data-type="{{'article'}}">
|
||||
<i class="buttonEjectIcon"></i>
|
||||
<text>发布文章</text>
|
||||
</view>
|
||||
</view>
|
||||
<image lazy-load="true" src="https://app.gter.net/image/miniApp/offer/add-green.png" class="img {{topublishArticleState ? 'rotate': ''}}" bindtap="triggerState"></image>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<!-- 鸭头空 -->
|
||||
<template name="duckHeadEmpty">
|
||||
<view class="empty flexcolumn flexcenter shadow" style="height: calc(100vh - {{ 775 + bottomLift }}rpx);">
|
||||
<view class="dot-box flexacenter">
|
||||
<image class="dot" wx:for="{{ 3 }}" wx:key="index" mode="widthFix" src="/img/u1829.svg"></image>
|
||||
<image class="dot" wx:for="{{ 3 }}" wx:key="index" mode="widthFix" src="/img/u1832.svg"></image>
|
||||
</view>
|
||||
<image class="empty-icom" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/u1828.svg"></image>
|
||||
<view class="summary-list-no-hint">{{ hintText }}</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<!-- 投票 item 的 HTML 首页 个人主页 -->
|
||||
<template name="vote-item">
|
||||
<navigator class="vote-item-box" url="/pages/voteDetails/voteDetails?uniqid={{ item.uniqid }}&islist={{ islist || false }}" hover-class="none">
|
||||
<!-- <navigator class="vote-item-box" url="/pages/vote/voteDetails/voteDetails?id={{ item.id }}&islist={{ islist || false }}" hover-class="none"> -->
|
||||
<view wx:if="{{ isShowLabel }}" class="item-label flexcenter">投票</view>
|
||||
<view class="vote-item-title flexacenter9">
|
||||
<view wx:if="{{ item.status == 0 }}" class="vote-item-title-state">已结束</view>
|
||||
<view wx:else class="vote-item-title-state vote-item-title-state-underway">进行中</view>
|
||||
<view class="vote-item-title-text flex1">{{ item.title }}</view>
|
||||
</view>
|
||||
<view class="vote-item-message one-line-display" wx:if="{{ item.message }}">{{ item.message }}</view>
|
||||
<view class="vote-item-list {{ (item.isvote == 1 || item.status == 0) ? 'vote-item-list-already' : '' }} ">
|
||||
<block wx:for="{{ item.option }}" wx:for-item="s" wx:key="index">
|
||||
<view wx:if="{{ index <= 2}}" class="vote-item-list-item flexflex">
|
||||
<view class="vote-item-list-top flexacenter">
|
||||
<image wx:if="{{ s.selected == 1 }}" class="vote-tick" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/vote-tick.svg"></image>
|
||||
<view wx:else class="vote-item-list-index">{{ index + 1 }}</view>
|
||||
<view class="vote-item-list-value flex1 one-line-display">{{ s.value }}</view>
|
||||
</view>
|
||||
<view class="vote-item-list-bottom flexacenter">
|
||||
<view class="length" style="width:{{ pages =='myvote' || item.isvote || item.status==0 ? s.percentage + '%' : '0%'}}"></view>
|
||||
{{ s.count }}
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<view class="vote-item-bottom flexacenter">
|
||||
<view class="vote-item-bottom-left flexacenter">
|
||||
<image class="vote-item-bottom-avatar" src="{{ item.avatar }}"></image>
|
||||
<view class="vote-item-bottom-time">{{ item.status == 0 ? '投票已结束' : '还有 ' + (item.time || ' ') +'结束' }}</view>
|
||||
<view style="color: #D7D7D7; margin: 0 15rpx;">|</view>
|
||||
<view class="vote-item-bottom-number">{{ item.votes }}人参与</view>
|
||||
</view>
|
||||
<view wx:if="{{ isShowEmoji }}" class="vote-item-bottom-right" style="display: flex;margin-left: 15rpx;">
|
||||
<view class="emoji-item" wx:for="{{ items }}" wx:key="index">
|
||||
<rich-text class="emoji-item-icon" nodes="&#x{{ item }};" />
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else class="vote-item-bottom-right flexacenter">
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/eye-icon.svg"></image>
|
||||
{{ item.views || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" style="width: 20rpx;" src="https://app.gter.net/image/miniApp/offer/expression-icon.png"></image>
|
||||
{{ item.ripostes || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="/img/discuss-icon.png"></image>
|
||||
{{ item.comments || 0 }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 面经 item 的 HTML 首页 个人主页 -->
|
||||
<template name="mj-item">
|
||||
<navigator class="mj-item-box" url="/pages/mjDetails/mjDetails?id={{ item.id }}&uniqid={{ item.uniqid }}" hover-class="none">
|
||||
<!-- <navigator class="mj-item-box" url="/pages/mj/mj_details/index?id={{ item.id }}&uniqid={{ item.uniqid }}" hover-class="none"> -->
|
||||
<view wx:if="{{ isShowLabel }}" class="item-label flexcenter">面经</view>
|
||||
<view class="mj-item-school flexacenter">
|
||||
<image class="mj-item-school-icon" src="{{ item.schoolimage }}"></image>
|
||||
<view class="mj-item-school-name flex1">{{ item.school}}</view>
|
||||
</view>
|
||||
<view class="mj-item-info">
|
||||
<view class="mj-item-info-item flexacenter" wx:if="{{ item.profession || item.professional }}">
|
||||
<view class="mj-item-info-key">专业</view>
|
||||
<view class="mj-item-info-value">{{ item.profession || item.professional }}</view>
|
||||
</view>
|
||||
<view class="mj-item-info-item flexacenter" wx:if="{{ item.project }}">
|
||||
<view class="mj-item-info-key">项目</view>
|
||||
<view class="mj-item-info-value">{{ item.project }}</view>
|
||||
</view>
|
||||
<view class="mj-item-info-item flexacenter" wx:if="{{ item.timestamp || item.interviewtime }}">
|
||||
<view class="mj-item-info-key">面试</view>
|
||||
<view class="mj-item-info-value mj-item-info-timestamp-value">{{ filter.getDateTime(item.timestamp || item.interviewtime) }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mj-item-course" wx:if="{{ item.message }}">{{ item.message }}</view>
|
||||
<view class="mj-item-bottom flexacenter">
|
||||
<view class="mj-item-bottom-left flexacenter">
|
||||
<image catch:tap="goPersonalHomepage" data-uid="{{ item.uid }}" data-uin="{{ item.uin }}" class="mj-item-bottom-avatar" mode="widthFix" src="{{ item.avatar }}"></image>
|
||||
{{ item.releasetimeText || item.timeFormat }}
|
||||
</view>
|
||||
<view wx:if="{{ isShowEmoji }}" class="mj-item-bottom-right" style="display: flex;margin-left: 15rpx;">
|
||||
<view class="emoji-item" wx:for="{{ items }}" wx:key="index">
|
||||
<rich-text class="emoji-item-icon" nodes="&#x{{ item }};" />
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else class="mj-item-bottom-right flexacenter">
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/eye-icon.svg"></image>
|
||||
{{ item.views || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" style="width: 20rpx;" src="https://app.gter.net/image/miniApp/offer/expression-icon.png"></image>
|
||||
{{ item.ripostes || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="/img/discuss-icon.png"></image>
|
||||
{{ item.commentnum || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/bi-icon.png"></image>
|
||||
{{ item.reward || 0 }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 总结 item 的 HTML 首页 个人主页 -->
|
||||
<template name="summary-item">
|
||||
<navigator class="summary-item flexflex" url="/pages/summaryDetails/summaryDetails?id={{ item.id }}" hover-class="none">
|
||||
<view wx:if="{{ isShowLabel }}" class="item-label flexcenter">申请总结</view>
|
||||
<view class="summary-item-right flexcolumn">
|
||||
<view class="summary-item-box">
|
||||
<view class="summary-item-title">{{ item.subject }}</view>
|
||||
<view class="summary-item-text one-line-display" wx:if="{{ item.content }}">{{ item.content }}</view>
|
||||
<view class="summary-offer-box flexcolumn {{ item.offer.length > 2 && 'summary-offer-box-three' }}">
|
||||
<view class="summary-item-total flexflex">共 <view style="font-weight: 700;font-size: 24rpx;margin: 0 8rpx;color: #000;">{{ item.offer.length }}</view> 个Offer</view>
|
||||
<block wx:for="{{ item.offer }}" wx:for-item="it" wx:for-index="i" wx:key="i">
|
||||
<block wx:if="{{ item.offer.length > 3 && item.state }}">
|
||||
<view class="summary-offer-item flexacenter">
|
||||
<image class="summary-offer-avatar" mode="widthFix" src="{{ it.schoolimage }}"></image>
|
||||
<view class="summary-offer-content">
|
||||
<view class="summary-offer-content-name" style="max-width: 558rpx;overflow: hidden;">{{ it.schoolname }}</view>
|
||||
<view class="summary-offer-content-brief flexacenter">
|
||||
<view style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap; word-break: break-all; overflow-wrap: break-word; max-width: 346rpx;">
|
||||
<block wx:if="{{ it.professionalzhong }}">
|
||||
<text>{{ it.professionaltou }}</text>
|
||||
<text style="color: #509CE3;">{{ it.professionalzhong }}</text>
|
||||
<text>{{ it.professionalend }}</text>
|
||||
</block>
|
||||
<block wx:else>{{ it.professional }}</block>
|
||||
</view>
|
||||
<view class="line-between"></view>
|
||||
{{ it.degree }}
|
||||
<view class="line-between"></view>
|
||||
{{ it.semester }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<block wx:else>
|
||||
<view class="summary-offer-item flexacenter" wx:if="{{ i < 3 }}">
|
||||
<image class="summary-offer-avatar" mode="widthFix" src="{{ it.schoolimage }}"></image>
|
||||
<view class="summary-offer-content">
|
||||
<view class="summary-offer-content-name" style="max-width: 558rpx;overflow: hidden;">{{ it.schoolname }}</view>
|
||||
<view class="summary-offer-content-brief flexacenter">
|
||||
<view style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap; word-break: break-all; overflow-wrap: break-word; max-width: 346rpx;">
|
||||
<block wx:if="{{ it.professionalzhong }}">
|
||||
<text>{{ it.professionaltou }}</text>
|
||||
<text style="color: #509CE3;">{{ it.professionalzhong }}</text>
|
||||
<text>{{ it.professionalend }}</text>
|
||||
</block>
|
||||
<block wx:else>{{ it.professional }}</block>
|
||||
</view>
|
||||
<view class="line-between"></view>
|
||||
{{ it.degree }}
|
||||
<view class="line-between"></view>
|
||||
{{ it.semester }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<view class="summary-offer-bottom flexacenter">
|
||||
<view class="summary-offer-bottom-left flexacenter">
|
||||
<image class="summary-offer-bottom-avatar" src="{{ item.avatar }}"></image>
|
||||
{{ item.timestampText }}
|
||||
</view>
|
||||
<view wx:if="{{ isShowEmoji }}" class="summary-offer-bottom-rigth" style="display: flex;margin-left: 15rpx;">
|
||||
<view class="emoji-item" wx:for="{{ items }}" wx:key="index">
|
||||
<rich-text class="emoji-item-icon" nodes="&#x{{ item }};" />
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else class="summary-offer-bottom-rigth flexacenter">
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/eye-icon.svg"></image>
|
||||
{{ item.viewnum || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" style="width: 20rpx;" src="https://app.gter.net/image/miniApp/offer/expression-icon.png"></image>
|
||||
{{ item.ripostes || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="/img/discuss-icon.png"></image>
|
||||
{{ item.commentnum || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/bi-icon.png"></image>
|
||||
{{ item.reward || 0 }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- offer item 的 HTML 首页 个人主页 -->
|
||||
<template name="victory-offer-item">
|
||||
<navigator class="victory-offer-item flexflex" url="/pages/victoryDetails/victoryDetails?id={{ item.id || item.uniqid }}" hover-class="none">
|
||||
<view wx:if="{{ isShowLabel }}" class="item-label flexcenter">Offer捷报</view>
|
||||
<view class="victory-offer-right">
|
||||
<view class="victory-offer-box flexflex">
|
||||
<view class="victory-offer-info-box flexcolumn">
|
||||
<view class="victory-offer-info-header flexacenter">
|
||||
<image class="victory-offer-info-avatar" src="{{ item.schoolimage }}"></image>
|
||||
<view class="victory-offer-info-name">{{ item.schoolname }}</view>
|
||||
</view>
|
||||
<view class="victory-offer-info-item flexflex" wx:if="{{item.professional}}">
|
||||
<view class="victory-offer-info-major">专业</view>
|
||||
<view class="victory-offer-info-value flex1" wx:if="{{item.professionalzhong}}">
|
||||
<text>{{ item.professionaltou }}</text>
|
||||
<text style="color: #509CE3;">{{ item.professionalzhong }}</text>
|
||||
<text>{{ item.professionalend }}</text>
|
||||
</view>
|
||||
<view class="victory-offer-info-value flex1 " wx:else>{{ item.professional }}</view>
|
||||
</view>
|
||||
<view class="victory-offer-info-item flexflex" wx:if="{{item.project}}">
|
||||
<view class="victory-offer-info-major">项目</view>
|
||||
<view class="victory-offer-info-value flex1" wx:if="{{item.projecttzhong}}">
|
||||
<text>{{ item.projecttou }}</text>
|
||||
<text style="color: #509CE3;">{{ item.projecttzhong }}</text>
|
||||
<text>{{ item.projecttend }}</text>
|
||||
</view>
|
||||
<view class="victory-offer-info-value flex1" wx:else>{{ item.project }}</view>
|
||||
</view>
|
||||
<view class="victory-offer-info-item flexacenter" style="align-items: center;font-size: 27rpx;">
|
||||
{{ item.semester }}
|
||||
<view class="line-between"></view>
|
||||
{{ item.degree }}
|
||||
<view class="line-between"></view>
|
||||
<view class="victory-offer-info-item-results flexacenter results{{ item.apply_resultstatus }}">{{ item.apply_results }}</view>
|
||||
</view>
|
||||
<view class="victory-offer-info-xiaobox " wx:if="{{ item.message }}">
|
||||
<view class="victory-offer-info-content one-line-display" wx:if="{{ item.message }}">{{ item.message }}</view>
|
||||
</view>
|
||||
<view class="victory-offer-bottom flexacenter">
|
||||
<view class="victory-offer-bottom-left flexacenter">
|
||||
<image class="victory-offer-bottom-avatar" src="{{ item.avatar }}"></image>
|
||||
{{ item.timestamp }}
|
||||
</view>
|
||||
<view wx:if="{{ isShowEmoji }}" class="numerical-box" style="display: flex;margin-left: 15rpx;">
|
||||
<view class="emoji-item" wx:for="{{ items }}" wx:key="index">
|
||||
<rich-text class="emoji-item-icon" nodes="&#x{{ item }};" />
|
||||
</view>
|
||||
</view>
|
||||
<!-- 数值 -->
|
||||
<view wx:else class="numerical-box flexacenter">
|
||||
<view class="item-bottom-item flexcenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/u884.png"></image>
|
||||
{{ item.view || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexcenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" style="width: 20rpx;" src="https://app.gter.net/image/miniApp/offer/expression-icon.png"></image>
|
||||
{{ item.ripostes || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexcenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="/img/discuss-icon.png"></image>
|
||||
{{ item.comments || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexcenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/bi-icon.png"></image>
|
||||
{{ item.reward || 0 }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 问答 item 的 HTML 个人主页 足迹 -->
|
||||
<template name="questions-answers-item">
|
||||
<navigator url="/pages/questionsDetails/questionsDetails?uniqid={{ item.uniqid }}" class="questions-answers-item">
|
||||
<view class="item-label flexcenter">问答</view>
|
||||
<view class="questions-answers-title">
|
||||
<view class="flexcenter questions-answers-icon">
|
||||
<image class="questions-answers-img" src="https://app.gter.net/image/miniApp/offer/u3370.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
{{ item.title }}
|
||||
</view>
|
||||
<view wx:if="{{ item.content }}" class="questions-answers-text one-line-display">{{ item.content }}</view>
|
||||
<view class="questions-answers-bottom flexacenter">
|
||||
<view class="questions-answers-bottom-left flexacenter">
|
||||
<image class="questions-answers-bottom-avatar" src="{{ item.avatar }}"></image>
|
||||
共{{ item.answers }}个回答
|
||||
</view>
|
||||
<view class="questions-answers-bottom-right flexacenter">
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/eye-icon.svg"></image>
|
||||
{{ item.viewnum || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="/img/discuss-icon.png"></image>
|
||||
{{ item.commentnum || 0 }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 问答 item 的 HTML 首页 -->
|
||||
<template name="questions-and-answers">
|
||||
<navigator class="questions-and-answers" url="/pages/questionsDetails/questionsDetails?uniqid={{ item.uniqid }}&answerid={{ item.answerid }}">
|
||||
<view wx:if="{{ isShowLabel }}" class="item-label flexcenter">问答</view>
|
||||
<view class="title">{{ item.title }}</view>
|
||||
<view class="answers-box flexflex" wx:if="{{ item.content }}">
|
||||
<view class="icon flexcenter">答</view>
|
||||
<view class="text">{{ item.content || '' }}</view>
|
||||
</view>
|
||||
<view class="bottom flexacenter">
|
||||
<view class="left flexacenter">
|
||||
<image class="avatar" src="{{ item.avatar }}"></image>
|
||||
{{ item.publicationdate || '' }}
|
||||
</view>
|
||||
<view class="right flexacenter">
|
||||
<!-- <view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/eye-icon.svg"></image>
|
||||
{{ item.viewnum || 0 }}
|
||||
</view> -->
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" style="width: 20rpx;" src="https://app.gter.net/image/miniApp/offer/expression-icon.png"></image>
|
||||
{{ item.ripostes || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="/img/discuss-icon.png"></image>
|
||||
{{ item.commentnum || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/bi-icon.png"></image>
|
||||
{{ item.reward || 0 }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 回答 item 的 HTML 首页 个人主页 足迹 -->
|
||||
<template name="answers-item">
|
||||
<!-- <navigator url="/pagesSquare/pages/answerDetails/answerDetails?answerid={{ item.answerid }}" class="answers-item"> -->
|
||||
<navigator url="/pages/questionsDetails/questionsDetails?uniqid={{ item.uniqid }}&answerid={{ item.answerid }}" class="answers-item">
|
||||
<view class="item-label flexcenter">回答</view>
|
||||
<view class="answers-title">{{ item.title }}</view>
|
||||
<view class="answers-content flexacenter">
|
||||
<view class="answers-label flexcenter">答</view>
|
||||
<view wx:if="{{ item.content }}" class="answers-text one-line-display flex1">{{ item.content }}</view>
|
||||
</view>
|
||||
<view class="answers-bottom flexacenter">
|
||||
<view class="answers-bottom-left flexacenter">
|
||||
<image class="answers-bottom-avatar" src="{{ item.avatar }}"></image>
|
||||
共{{ item.answers }}个回答
|
||||
</view>
|
||||
<view class="answers-bottom-right flexacenter">
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/eye-icon.svg"></image>
|
||||
{{ item.viewnum || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" style="width: 20rpx;" src="https://app.gter.net/image/miniApp/offer/expression-icon.png"></image>
|
||||
{{ item.riposte || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="/img/discuss-icon.png"></image>
|
||||
{{ item.commentnum || 0 }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 招生官 item 的 HTML 足迹 -->
|
||||
<template name="admission-officer-item">
|
||||
<navigator class="admission-officer-item">
|
||||
<view class="item-label flexcenter">招生官</view>
|
||||
<view class="admission-officer-title">{{ item.title }}</view>
|
||||
<view class="admission-officer-text one-line-display">{{ item.description }}</view>
|
||||
<view class="admission-officer-bottom flexacenter">
|
||||
<view class="admission-officer-bottom-left flexacenter">
|
||||
<image class="admission-officer-bottom-avatar" src="{{ item.avatar }}"></image>
|
||||
{{ item.pubdate }}
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 找飞友 item 的 HTML 首页 个人主页 足迹 -->
|
||||
<template name="find-flyer-item">
|
||||
<navigator class="find-flyer-item" url="/pagesSquare/pages/lookingforfeiyou/lookingforfeiyou?id={{ item.id }}">
|
||||
<view class="item-label flexcenter">找飞友</view>
|
||||
<view class="find-flyer-header flexacenter">
|
||||
{{ item.departurecityname }}
|
||||
<image class="find-flyer-header-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/u2147.svg"></image>{{ item.destinationcityname }}
|
||||
</view>
|
||||
<view class="find-flyer-message flexacenter">
|
||||
<image class="find-flyer-message-icon" mode="widthFix" src="/img/rili.svg"></image>
|
||||
<block wx:if="{{ item.istickets == 1 }}">{{ item.flightdeparturetimeString }}</block>
|
||||
<block wx:else>{{item.startscheduleString}} ~ {{ item.latestscheduleString }}</block>
|
||||
<view class="line"></view>
|
||||
{{ item.istickets == 1 ? '已' : '未' }}购机票
|
||||
<view class="line"></view>
|
||||
{{ sex[item.sex] }}
|
||||
</view>
|
||||
<view class="find-flyer-text flexacenter" wx:if="{{ item.message }}">
|
||||
<text class="one-line-display flex1"> {{ item.message }}</text>
|
||||
</view>
|
||||
<view class="find-flyer-bottom flexacenter">
|
||||
<view class="find-flyer-bottom-left flexacenter">
|
||||
<image class="find-flyer-bottom-avatar" src="{{ item.avatar }}"></image>
|
||||
{{ item.relativedate }}
|
||||
</view>
|
||||
<view wx:if="{{ isShowEmoji }}" class="find-flyer-bottom-right" style="display: flex;margin-left: 15rpx;">
|
||||
<view class="emoji-item" wx:for="{{ items }}" wx:key="index">
|
||||
<rich-text class="emoji-item-icon" nodes="&#x{{ item }};" />
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else class="find-flyer-bottom-right flexacenter">
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/eye-icon.svg"></image>
|
||||
{{ item.views || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" style="width: 20rpx;" src="https://app.gter.net/image/miniApp/offer/expression-icon.png"></image>
|
||||
{{ item.ripostes || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="/img/discuss-icon.png"></image>
|
||||
{{ item.comments || 0 }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 租房 item 的 HTML 足迹 -->
|
||||
<template name="renting-item">
|
||||
<navigator path="/pages/show/show?uniqid={{ item.uniqid }}" target="miniProgram" class="renting-item" app-id="wxcf0a799771cf2ae6">
|
||||
<view class="item-label flexcenter">香港租房</view>
|
||||
<view class="renting-item-title">{{ item.subject }}</view>
|
||||
<view class="renting-item-content flexflex">
|
||||
<view class="renting-item-content-left flex1 flexflex">
|
||||
<view class="renting-item-type flexflex">
|
||||
<view class="renting-item-type-item flexcenter" wx:for="{{ item.tabList }}" wx:key="index">{{ item }}</view>
|
||||
</view>
|
||||
<view class="renting-item-site flexacenter">
|
||||
<block wx:if="{{ item.intermediary == 6 }}">
|
||||
<view class="renting-item-site-item flexacenter" wx:for="{{ item.location }}" wx:key="index">
|
||||
<image class="renting-item-site-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/orientation.png"></image>
|
||||
{{ item }}
|
||||
</view>
|
||||
</block>
|
||||
<view wx:else class="renting-item-site-item flexacenter">
|
||||
<image class="renting-item-site-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/orientation.png"></image>
|
||||
{{ item.location }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="renting-item-price-section flexacenter">
|
||||
<view class="renting-item-unit">HK$</view>
|
||||
<view class="renting-item-price">{{ item.rent }}</view>
|
||||
<text class="renting-item-text">/月</text>
|
||||
<view class="renting-item-rentalduration">[ 租期{{ item.rentalduration }} ]</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="renting-item-content-right flexacenter">
|
||||
<view wx:if="{{ item.isvideo == 1 }}" class="renting-item-video flexflex">
|
||||
<view class="renting-item-mask"></view>
|
||||
<image class="renting-item-image" mode="widthFix" lazy-load src="{{ item.imageurl }}"></image>
|
||||
<image class="renting-item-video-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/videoplay.png"></image>
|
||||
</view>
|
||||
<image wx:else class="renting-item-image" mode="widthFix" lazy-load src="{{ item.imageurl }}"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="renting-item-bottom flexacenter">
|
||||
<image class="renting-item-avatar flexacenter" mode="widthFix" src="{{ item.avatar }}"></image>
|
||||
{{ item.timeFormat }} <text class="line">|</text> {{ item.intermediary_text }}
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 论坛帖子 item 的 HTML 足迹 -->
|
||||
<template name="thread-item">
|
||||
<navigator class="thread-item" url="/pages/webview/webview?url=https://bbs.gter.net/thread-{{ item.tid }}-1-1.html">
|
||||
<view class="item-label flexcenter">论坛帖子</view>
|
||||
<view class="thread-title">{{ item.subject }}</view>
|
||||
<view class="thread-text one-line-display" wx:if="{{ item.message }}">{{ item.message }}</view>
|
||||
<view class="thread-bottom flexacenter">
|
||||
<view class="thread-bottom-left flexacenter">
|
||||
<image class="thread-bottom-avatar" src="{{ item.avatar }}"></image>
|
||||
{{ item.timeFormat }}
|
||||
</view>
|
||||
<view wx:if="{{ isShowEmoji }}" class="thread-bottom-right" style="display: flex;margin-left: 15rpx;">
|
||||
<view class="emoji-item" wx:for="{{ items }}" wx:key="index">
|
||||
<rich-text class="emoji-item-icon" nodes="&#x{{ item }};" />
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else class="thread-bottom-right flexacenter">
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/eye-icon.svg"></image>
|
||||
{{ item.views || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" style="width: 20rpx;" src="https://app.gter.net/image/miniApp/offer/expression-icon.png"></image>
|
||||
{{ item.ripostes || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexacenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="/img/discuss-icon.png"></image>
|
||||
{{ item.replies || 0 }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 专题帖子 item 的 HTML 足迹 -->
|
||||
<template name="appmsgalbum-item">
|
||||
<navigator class="thread-item" url="/pages/webview/webview?url={{ item.url }}">
|
||||
<view class="item-label flexcenter">{{ item.album }}</view>
|
||||
<view class="thread-title">{{ item.title }}</view>
|
||||
<view class="thread-text one-line-display" wx:if="{{ item.description }}">{{ item.description }}</view>
|
||||
<view class="thread-bottom flexacenter">
|
||||
<view class="thread-bottom-left flexacenter">
|
||||
<image class="thread-bottom-avatar" src="{{ item.cover_img }}"></image>
|
||||
{{ item.timeFormat }}
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</template>
|
||||
|
||||
<!-- 表情包弹窗列表 页面 -->
|
||||
<template name="emoji-list">
|
||||
<view class="emoji-popup-mask flexcolumn" bind:tap="clickEmoji">
|
||||
<view class="emoji-popup-box" catch:tap="return">
|
||||
<view class="emoji-popup-item" wx:for="{{ optionEmoji }}" wx:key="index">
|
||||
<view class="emoji-popup-name flexacenter">
|
||||
<image class="emoji-popup-name-icon" mode="widthFix" src="{{ item.bicon }}"></image>{{ item.name }}
|
||||
</view>
|
||||
<text class="emoji-popup-icon" wx:key="index">{{ item }}</text>
|
||||
|
||||
<view class="emoji-popup-list">
|
||||
|
||||
|
||||
<icon class="emoji-popup-icon icon-{{item.item}}" wx:for="{{ item.list }}" wx:key="index" bind:tap="selectEmoji" data-item="{{ item }}"></icon>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="emoji-popup-bottom flexacenter" catch:tap="return">
|
||||
<view class="emoji-popup-bottom-item flexcenter {{ index == emojiItem && 'pitch' }}" wx:for="{{ optionEmoji }}" wx:key="index" bind:tap="selectEmojiPage" data-index="{{ index }}">
|
||||
<image class="emoji-popup-bottom-icon" mode="widthFix" src="{{ item.bicon }}"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
1098
common/common.wxss
Normal file
1098
common/common.wxss
Normal file
File diff suppressed because it is too large
Load Diff
200
component/goLogin/goLogin.js
Normal file
200
component/goLogin/goLogin.js
Normal file
@ -0,0 +1,200 @@
|
||||
// template/goLogin/goLogin.js
|
||||
var app = getApp();
|
||||
var miucms = require('../../utils/miucms.js');
|
||||
import util from "../../utils/util"
|
||||
|
||||
Component({
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
islogin: Boolean
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
canIUseGetUserProfile: false,
|
||||
isAgreement: false
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
pageLifetimes: {
|
||||
show() {
|
||||
const self = this
|
||||
getApp().watch(self.watchBack.bind(self));
|
||||
}
|
||||
},
|
||||
lifetimes: {
|
||||
attached: function () {
|
||||
this.attachedIn()
|
||||
},
|
||||
},
|
||||
attached: function () {
|
||||
this.attachedIn()
|
||||
},
|
||||
methods: {
|
||||
watchBack(value) {
|
||||
if (value) {
|
||||
this.triggerEvent('userClickLogin', {
|
||||
data: {
|
||||
regdatastep: 'success'
|
||||
}
|
||||
})
|
||||
this.bindIsAccredit()
|
||||
}
|
||||
},
|
||||
|
||||
attachedIn() {
|
||||
let that = this;
|
||||
this.setData({
|
||||
canIUseGetUserProfile: app.globalData.canIUseGetUserProfile
|
||||
})
|
||||
},
|
||||
hidealert() {
|
||||
|
||||
},
|
||||
getuserInfo(e) {
|
||||
if (!this.data.isAgreement) {
|
||||
wx.showToast({
|
||||
title: '请阅读并勾选同意',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
let that = this;
|
||||
if (this.data.canIUseGetUserProfile) {
|
||||
wx.getUserProfile({
|
||||
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
|
||||
success: (res1) => {
|
||||
app.globalData.getUserInfoData = res1
|
||||
miucms.getUserInfo(res1).then(res => {
|
||||
this.triggerEvent('userClickLogin', {
|
||||
data: res.data
|
||||
})
|
||||
}).catch(res => {
|
||||
console.log(res)
|
||||
})
|
||||
}
|
||||
})
|
||||
return false;
|
||||
}
|
||||
if (e.detail.errMsg == 'getUserInfo:ok') {
|
||||
//用户同意授权
|
||||
miucms.getUserInfo(e.detail).then(res => {
|
||||
this.triggerEvent('userClickLogin', {
|
||||
data: res.data
|
||||
})
|
||||
}).catch(res => {
|
||||
console.log(res)
|
||||
})
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
agreement() {
|
||||
this.setData({
|
||||
isAgreement: !this.data.isAgreement
|
||||
})
|
||||
},
|
||||
|
||||
godetail(e) {
|
||||
let {
|
||||
link
|
||||
} = e.currentTarget.dataset
|
||||
|
||||
console.log("link", link);
|
||||
wx.navigateTo({
|
||||
url: '/pages/webview/webview?url=' + link,
|
||||
})
|
||||
},
|
||||
|
||||
bindIsAccredit() {
|
||||
this.setData({
|
||||
islogin: true
|
||||
})
|
||||
this.triggerEvent("popClose")
|
||||
// this.triggerEvent('closeUserClickLogin', {})
|
||||
},
|
||||
|
||||
handScroll() {
|
||||
return
|
||||
},
|
||||
|
||||
isloginState: false,
|
||||
go() {
|
||||
if (!this.data.isAgreement) {
|
||||
wx.showToast({
|
||||
title: '请阅读并勾选同意',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (this.isloginState) return
|
||||
wx.login({
|
||||
success: res => {
|
||||
miucms.request("https://passport.gter.net/api/user/authorityInit", {
|
||||
code: res.code
|
||||
}).then(res => {
|
||||
console.log("res", res);
|
||||
|
||||
if (res.code != 200) {
|
||||
wx.showToast({
|
||||
icon: "none",
|
||||
title: res.message,
|
||||
})
|
||||
return
|
||||
}
|
||||
this.isloginState = false
|
||||
let data = res.data
|
||||
if (data.user) app.globalData.user = data.user
|
||||
|
||||
// if (data.step == "success") {
|
||||
if (data.status == 3) {
|
||||
app.globalData.setSate = true
|
||||
this.triggerEvent('userClickLogin', {
|
||||
data: res.data
|
||||
})
|
||||
this.setData({
|
||||
isaccredit: !this.data.isaccredit
|
||||
})
|
||||
// } else if (data.step == "mobile") {
|
||||
} else if (data.status == 1 || data.status == 2) {
|
||||
let token = data.token
|
||||
wx.navigateTo({
|
||||
url: '/pagesSquare/pages/PCAuthorization/PCAuthorization?token=' + token + "&status=" + data.status,
|
||||
})
|
||||
} else if (data.status == 4) {
|
||||
let token = data.token
|
||||
wx.navigateTo({
|
||||
url: "/pages/setAvatarNickname/setAvatarNickname?token=" + token
|
||||
})
|
||||
} else {
|
||||
// 这个是所有情况的默认
|
||||
app.globalData.user = data.user
|
||||
this.triggerEvent('userClickLogin', {
|
||||
data: res.data
|
||||
})
|
||||
this.setData({
|
||||
isaccredit: !this.data.isaccredit
|
||||
})
|
||||
}
|
||||
|
||||
util.bindingUser(data.user)
|
||||
}).finally(() => {
|
||||
this.isloginState = false
|
||||
})
|
||||
},
|
||||
fail: err => {
|
||||
this.isloginState = false
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
})
|
4
component/goLogin/goLogin.json
Normal file
4
component/goLogin/goLogin.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {}
|
||||
}
|
40
component/goLogin/goLogin.wxml
Normal file
40
component/goLogin/goLogin.wxml
Normal file
@ -0,0 +1,40 @@
|
||||
<!-- <view>
|
||||
<view class='go_login' wx:if="{{ !islogin }}">
|
||||
<view class="bg" catchtap="hidealert"></view>
|
||||
<view class="inner">
|
||||
<view class="text">需要授权登录哦~</view>
|
||||
|
||||
<button wx:if="{{canIUseGetUserProfile}}" class="btn" bindtap="getuserInfo"><image src="/img/wechart.png"></image>
|
||||
微信登录</button>
|
||||
<button wx:else class="btn" open-type="getUserInfo" bindgetuserinfo="getuserInfo">
|
||||
<image src="/img/wechart.png"></image>
|
||||
微信登录</button>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
<view class="nowUserAccredit" wx:if="{{ !islogin }}">
|
||||
<view class="bg" bindtap="bindIsAccredit" catchtouchmove="handScroll"></view>
|
||||
<view class="bottom">
|
||||
<view class="title">请阅读并勾选同意</view>
|
||||
|
||||
<!-- 用户发布协议开始 -->
|
||||
<view class="protocol" catchtap="agreement">
|
||||
<image class="image" src="https://app.gter.net/image/miniApp/project/u2506-u.png" wx:if="{{ isAgreement }}"></image>
|
||||
<image class="image" src="https://app.gter.net/image/miniApp/project/u2506.svg" wx:else=""></image>
|
||||
|
||||
<text class="text">已阅读并同意</text>
|
||||
<view catchtap="godetail" data-link="https://app.gter.net/alonepage/userprotocol" class="navigator">用户使用协议
|
||||
</view>
|
||||
和
|
||||
<view catchtap="godetail" data-link="https://app.gter.net/alonepage/userprivacyclause" class="navigator">用户隐私条款
|
||||
</view>
|
||||
</view>
|
||||
<!-- 用户发布协议结束 -->
|
||||
|
||||
<!-- <button class="btn" wx:if="{{ canIUseGetUserProfile }}" catchtap="getuserInfo">进入</button> -->
|
||||
<!-- <button class="btn" wx:else open-type="getUserInfo" bindgetuserinfo="getuserInfo">进入</button> -->
|
||||
<view class="btn" catchtap="go">进入</view>
|
||||
|
||||
</view>
|
||||
</view>
|
121
component/goLogin/goLogin.wxss
Normal file
121
component/goLogin/goLogin.wxss
Normal file
@ -0,0 +1,121 @@
|
||||
/* template/goLogin/goLogin.wxss */
|
||||
.go_login{
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index:90;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background: rgba(0,0,0,0.5);
|
||||
}
|
||||
.btn{
|
||||
width: 300rpx;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
background: #50AB42;
|
||||
border-radius: 40rpx;
|
||||
color: #fff;
|
||||
font-size: 28rpx;
|
||||
letter-spacing: 1px;
|
||||
margin: 30rpx auto;
|
||||
}
|
||||
.btn image{
|
||||
display: inline-block;
|
||||
width: 46rpx;
|
||||
height: 46rpx;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.inner{
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 300px;
|
||||
width: 100vw;
|
||||
background: #fff;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column
|
||||
}
|
||||
.text{
|
||||
font-size: 30rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* components/nowUserAccredit/nowUserAccredit.wxss */
|
||||
.nowUserAccredit{
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
min-height: 100vh;
|
||||
width: 100vw;
|
||||
/* background-color: black; */
|
||||
/* : 0.4; */
|
||||
z-index: 5000;
|
||||
display: flex;
|
||||
|
||||
}
|
||||
|
||||
.nowUserAccredit .bg {
|
||||
flex: 1;
|
||||
background-color: #000000;
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.nowUserAccredit .protocol {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 28rpx;
|
||||
line-height: 28rpx;
|
||||
padding: 10rpx 0;
|
||||
}
|
||||
|
||||
.nowUserAccredit .protocol .image {
|
||||
width: 25rpx;
|
||||
height: 25rpx;
|
||||
}
|
||||
|
||||
.nowUserAccredit .protocol .text {
|
||||
margin: 0 7rpx 0 15rpx;
|
||||
}
|
||||
|
||||
.nowUserAccredit .protocol .navigator {
|
||||
color: #3cdda9;
|
||||
padding: 0 5rpx;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.nowUserAccredit .btn {
|
||||
width: 100%;
|
||||
background-color: #323232;
|
||||
height: 105rpx;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
line-height: 105rpx;
|
||||
border-radius: 50rpx;
|
||||
margin-top: 45rpx;
|
||||
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.nowUserAccredit .bottom {
|
||||
width: 750rpx;
|
||||
box-sizing: border-box;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
background-color: #fff;
|
||||
padding: 80rpx 50rpx 68rpx;
|
||||
border-radius: 50rpx 50rpx 0 0;
|
||||
}
|
||||
|
||||
.nowUserAccredit .bottom .title{
|
||||
margin-bottom: 80rpx;
|
||||
font-size: 34rpx;
|
||||
line-height: 34rpx;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
|
347
component/headerNav/headerNav.js
Normal file
347
component/headerNav/headerNav.js
Normal file
@ -0,0 +1,347 @@
|
||||
// template/headerNav/index.js
|
||||
import util from '../../utils/util'
|
||||
var app = getApp()
|
||||
Component({
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
showTab: String, // 需要显示的 列表按钮 offerlist summarylist mjlist
|
||||
notShowIndex: Boolean,
|
||||
isIndexPage: Boolean,
|
||||
haveSearch: Boolean,
|
||||
customBack: Boolean,
|
||||
needback: Boolean,
|
||||
bgcolor: String,
|
||||
searchBtnShow: {
|
||||
value: false,
|
||||
type: Boolean
|
||||
},
|
||||
isToggleState: {
|
||||
value: false,
|
||||
type: Boolean
|
||||
},
|
||||
isUser: Boolean,
|
||||
isUserAlone: Boolean,
|
||||
islogin: {
|
||||
type: Boolean,
|
||||
value: true
|
||||
},
|
||||
user: {
|
||||
type: Object,
|
||||
value: {},
|
||||
observer: function (newVal, oldVal) {
|
||||
let {
|
||||
initializeLoginState,
|
||||
iswechatmessagepush,
|
||||
popup,
|
||||
offerkaipingadvertisement,
|
||||
offerkaipingadvertisementState,
|
||||
} = app.globalData
|
||||
|
||||
if (!offerkaipingadvertisementState) {
|
||||
let data = offerkaipingadvertisement || {}
|
||||
if (Date.now() < data.deadline * 1000) {
|
||||
this.setData({
|
||||
openDate: data
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (newVal && newVal['uid'] > 0 && iswechatmessagepush == null) {
|
||||
if (app.globalData.iswechatmessagepushState >= 0) return
|
||||
app.globalData.iswechatmessagepushState = 0
|
||||
app.judgeWechatAlertsPop().then(res => {
|
||||
let iswechatmessagepush = res.iswechatmessagepush
|
||||
let capsulePopState = false
|
||||
if (iswechatmessagepush == 0 && app.globalData['ishongkonganswer'] === 0) {
|
||||
capsulePopState = true
|
||||
} else {
|
||||
capsulePopState = false
|
||||
}
|
||||
this.setData({
|
||||
capsulePopState
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
if (iswechatmessagepush == 0 && app.globalData['ishongkonganswer'] === 0) {
|
||||
this.setData({
|
||||
capsulePopState: true
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
isNewVersions: { // 是否是新版本
|
||||
type: Boolean,
|
||||
value: false
|
||||
},
|
||||
isNeedSign: { // 是否需要签到按钮
|
||||
type: Boolean,
|
||||
value: false
|
||||
},
|
||||
isMessageCenter: { // 是否显示未读信息
|
||||
type: Boolean,
|
||||
value: false
|
||||
},
|
||||
isNeedUnread: { // 是否需要未读数
|
||||
type: Boolean,
|
||||
value: false,
|
||||
},
|
||||
newHeadOperate: Boolean, // 是否是 新的 二级页面 顶部 返回按钮
|
||||
iswhitecolor: { // 是否显示白色图标
|
||||
type: Boolean,
|
||||
value: false,
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
// templateHeader:'templateHeadersss',
|
||||
screen_data: {
|
||||
windowHeight: 0,
|
||||
totalTopHeight: 0,
|
||||
statusBarHeight: 0,
|
||||
titleBarHeight: 0,
|
||||
},
|
||||
// isIndexPage:false,
|
||||
isTabPage: false,
|
||||
capsulePopState: false, // 微信提醒弹窗状态
|
||||
// reminderState: false, // 不再提醒的状态
|
||||
socketTimer: null, // 轮询的定时器
|
||||
messageCount: 0, // 未读消息
|
||||
showTabObj: {
|
||||
offerlist: "Offer列表",
|
||||
summarylist: "总结列表",
|
||||
mjlist: "面经列表",
|
||||
votelist: "投票列表",
|
||||
questionslist: "问答列表",
|
||||
treelist: "笔记列表",
|
||||
},
|
||||
rentPopState: false,
|
||||
|
||||
openDate: {}, // 开屏广告数据
|
||||
},
|
||||
|
||||
pageLifetimes: {
|
||||
show: function () { // 页面被展示
|
||||
setTimeout(() => {
|
||||
this.pollPopup()
|
||||
}, 200)
|
||||
if (this.data.isMessageCenter || this.data.isNeedUnread) this.sendSocketMessageCount()
|
||||
},
|
||||
hide: function () { // 页面被隐藏
|
||||
clearTimeout(this.data.socketTimer)
|
||||
}
|
||||
},
|
||||
|
||||
lifetimes: {
|
||||
attached: function () {
|
||||
this.attachedIn()
|
||||
},
|
||||
detached: function () {
|
||||
// 在组件实例被从页面节点树移除时执行
|
||||
clearTimeout(this.data.socketTimer)
|
||||
},
|
||||
|
||||
},
|
||||
|
||||
attached: function () {
|
||||
this.attachedIn()
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
pollPopup() {
|
||||
const popup = app.globalData.popup
|
||||
if (popup === undefined) setTimeout(() => this.pollPopup(), 1000);
|
||||
else {
|
||||
if (popup != null && !popup['state']) {
|
||||
app.globalData.popup['state'] = 1
|
||||
this.setData({
|
||||
rentPopState: true,
|
||||
popup,
|
||||
})
|
||||
this.socketPopupOver()
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// 只是弹窗后发生 回执
|
||||
socketPopupOver() {
|
||||
if (app.globalData.socketTask && app.globalData.socketTask.readyState == 1) {
|
||||
app.globalData.socketTask.send({
|
||||
data: JSON.stringify({
|
||||
type: 'popupOver'
|
||||
})
|
||||
})
|
||||
} else setTimeout(() => this.socketPopupOver(), 1000);
|
||||
},
|
||||
|
||||
// 发送 获取问答信息
|
||||
sendSocketMessageCount() {
|
||||
// 主动发一个 获取 未读消息
|
||||
if (app.globalData.socketTask && app.globalData.socketTask.readyState == 1) {
|
||||
app.globalData.socketTask.send({
|
||||
data: JSON.stringify({
|
||||
type: 'messageCount'
|
||||
})
|
||||
})
|
||||
// 发送后等 0.5s 后再去全局拿数据
|
||||
setTimeout(() => this.getSocketMessageCount(), 500)
|
||||
} else setTimeout(() => this.sendSocketMessageCount(), 1000);
|
||||
},
|
||||
|
||||
// 轮询获取未读信息
|
||||
getSocketMessageCount() {
|
||||
// 先在全局获取数据
|
||||
if (app.globalData.unreadMessageCount != 0) {
|
||||
this.setData({
|
||||
messageCount: app.globalData.unreadMessageCount
|
||||
})
|
||||
app.globalData.unreadMessageCount = 0
|
||||
}
|
||||
// 再开启一个定时器
|
||||
this.data.socketTimer = setTimeout(() => this.getSocketMessageCount(), 3000);
|
||||
},
|
||||
|
||||
attachedIn() {
|
||||
this.getwindowHeight();
|
||||
},
|
||||
getwindowHeight() {
|
||||
if (app.globalData.screen_data.totalTopHeight > 30) {
|
||||
this.setData({
|
||||
screen_data: app.globalData.screen_data
|
||||
})
|
||||
} else {
|
||||
try {
|
||||
app.computeNavigateBarHeight();
|
||||
} catch (e) {
|
||||
// 获取系统信息失败
|
||||
|
||||
} finally {
|
||||
if (app.globalData.screen_data.totalTopHeight > 30) {
|
||||
this.setData({
|
||||
screen_data: app.globalData.screen_data
|
||||
})
|
||||
}
|
||||
|
||||
this.setData({
|
||||
screen_data: {
|
||||
bottomLift: 34,
|
||||
statusBarHeight: 48,
|
||||
titleBarHeight: 32,
|
||||
totalTopHeight: 86,
|
||||
windowHeight: 812,
|
||||
windowWidth: 375,
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
backHome() {
|
||||
wx.reLaunch({
|
||||
url: `/pages/projectLibrary/projectLibrary`,
|
||||
})
|
||||
},
|
||||
navigategoBack() {
|
||||
if (this.properties.needback) {
|
||||
this.triggerEvent('back', {}, {})
|
||||
return false
|
||||
}
|
||||
|
||||
var pages = getCurrentPages();
|
||||
|
||||
if (this.properties.customBack) {
|
||||
this.triggerEvent('back', {}, {})
|
||||
return false;
|
||||
}
|
||||
if (pages.length == 1) {
|
||||
wx.reLaunch({
|
||||
url: `/pages/projectLibrary/projectLibrary`
|
||||
});
|
||||
} else {
|
||||
wx.navigateBack({
|
||||
changed: true
|
||||
}); //返回上一页
|
||||
}
|
||||
},
|
||||
// 点击跳转搜索页面
|
||||
toSearchBtn() {
|
||||
wx.navigateTo({
|
||||
url: '/pagesSquare/pages/searchall/searchall',
|
||||
})
|
||||
},
|
||||
// 点击切换账号方法过几天就能删除了
|
||||
toggle() {
|
||||
this.triggerEvent("toggle")
|
||||
},
|
||||
// 跳转我的页面
|
||||
toUserPage() {
|
||||
wx.nextTick(() => {
|
||||
this.setData({
|
||||
messageCount: 0
|
||||
})
|
||||
})
|
||||
if (!this.data.islogin) {
|
||||
this.triggerEvent("openLogin")
|
||||
this.triggerEvent("handleUnlockState") // offer详细和总结详细的
|
||||
return
|
||||
}
|
||||
wx.navigateTo({
|
||||
url: "/pages/user/user",
|
||||
})
|
||||
},
|
||||
|
||||
// 用户点击登录
|
||||
userClickLogin(e) {
|
||||
this.setData({
|
||||
islogin: true,
|
||||
})
|
||||
},
|
||||
|
||||
// 跳转消息中心
|
||||
goMessage() {
|
||||
if (!this.data.islogin) {
|
||||
this.triggerEvent("openLogin")
|
||||
return
|
||||
}
|
||||
clearTimeout(this.data.socketTimer)
|
||||
wx.navigateTo({
|
||||
url: '/pagesLoginRequired/pages/messageCenter/messageCenter',
|
||||
})
|
||||
wx.nextTick(() => {
|
||||
this.setData({
|
||||
messageCount: 0
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 头部 跳转 中转
|
||||
skipTransfer(e) {
|
||||
const key = e.currentTarget.dataset.key
|
||||
const pages = getCurrentPages();
|
||||
if (key == 'back' && pages.length > 1) {
|
||||
wx.navigateBack()
|
||||
return
|
||||
}
|
||||
|
||||
let url = ''
|
||||
if (key == 'index' || key == 'back') url = '/pages/projectLibrary/projectLibrary'
|
||||
if (key == 'offerlist') url = '/pages/victoryList/victoryList'
|
||||
if (key == 'summarylist') url = '/pages/summaryList/summaryList'
|
||||
if (key == 'mjlist') url = '/pages/mjList/mjList'
|
||||
if (key == 'votelist') url = '/pages/voteList/voteList'
|
||||
if (key == 'questionslist') url = '/pages/questionsList/questionsList'
|
||||
if (key == 'treelist') url = '/pages/treeList/treeList'
|
||||
wx.redirectTo({
|
||||
url,
|
||||
})
|
||||
},
|
||||
|
||||
}
|
||||
})
|
8
component/headerNav/headerNav.json
Normal file
8
component/headerNav/headerNav.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {
|
||||
"wechat-alerts-pop": "/component/wechatAlertsPop/wechatAlertsPop",
|
||||
"rent-pop": "/component/rent-pop/rent-pop",
|
||||
"open-ad": "/component/open-ad/open-ad"
|
||||
}
|
||||
}
|
105
component/headerNav/headerNav.wxml
Normal file
105
component/headerNav/headerNav.wxml
Normal file
@ -0,0 +1,105 @@
|
||||
<!--template/headerNav/index.wxml-->
|
||||
|
||||
<view>
|
||||
<view class="NavBar-holder" style="height:{{screen_data.totalTopHeight}}px"></view>
|
||||
|
||||
<new-features></new-features>
|
||||
<!-- bgcolor 为头部组件的背景颜色, 需传值 -->
|
||||
<view class="NavBar" style="height:{{screen_data.totalTopHeight}}px;background-color: {{ bgcolor }};">
|
||||
<view class="NavBar-statusBar" style="height:{{screen_data.statusBarHeight}}px"></view>
|
||||
<view class="NavBar-titlebar" style="height:{{screen_data.titleBarHeight}}px">
|
||||
<view class="NavBar-content">
|
||||
|
||||
<!-- 这个段代码从我看来是 废的 -->
|
||||
<view class='NavBar-left NavBar-left-more' style="width:{{screen_data.titleWidth}}px" wx:if="{{ isIndexPage=='isIndexPage' }}">
|
||||
<navigator url='../search/search' class='Btn search-btn' hover-class='hover' style='top:{{ screen_data.statusBarHeight }}px'>
|
||||
<image class='searchbtn' src="../../img/searchbtn-3.png" />
|
||||
</navigator>
|
||||
<navigator url='../user/user' hover-class='hover' class='Btn'>
|
||||
<image class="NavBar-HomeIcon user" hover-class='hover' src="../../img/userblack.png"></image>
|
||||
</navigator>
|
||||
</view>
|
||||
|
||||
<view wx:if="{{ newHeadOperate }}" class="NavBar-left left-operate-box">
|
||||
<view class="left-operate-item" bind:tap="skipTransfer" data-key="back">
|
||||
<image class="left-operate-icon" src="https://app.gter.net/image/miniApp/offer/arrow-return.svg" mode="widthFix"></image>
|
||||
返回
|
||||
</view>
|
||||
<view class="left-operate-item" bind:tap="skipTransfer" data-key="index">
|
||||
<image class="left-operate-icon" src="https://app.gter.net/image/miniApp/offer/home-page.png" mode="widthFix"></image>
|
||||
首页
|
||||
</view>
|
||||
<view wx:if="{{ showTab }}" class="left-operate-item" bind:tap="skipTransfer" data-key="{{ showTab }}">
|
||||
<image class="left-operate-icon" src="https://app.gter.net/image/miniApp/offer/offer-top.png" mode="widthFix"></image>
|
||||
{{ showTabObj[showTab]}}
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else class="NavBar-left NavBar-left-more">
|
||||
<!-- 切换账号 -->
|
||||
<view wx:if="{{ isToggleState }}" class="toggle" bindtap="toggle">
|
||||
<image class="toggle-icon" src="https://app.gter.net/image/miniApp/offer/u122.svg"></image>
|
||||
<text>切换账号</text>
|
||||
</view>
|
||||
<view class="searchBtn" wx:if="{{ searchBtnShow }}" bindtap="toSearchBtn">
|
||||
<image class="searchBtnImg" mode="heightFix" src="https://app.gter.net/image/miniApp/project/u277.svg"></image>
|
||||
</view>
|
||||
|
||||
<block wx:if="{{ !isIndexPage }}">
|
||||
<view bindtap="navigategoBack" class='Btn'>
|
||||
<image wx:if="{{ iswhitecolor }}" class="NavBar-BackIcon" src="https://app.gter.net/image/miniApp/project/back-f.svg" mode="heightFix"></image>
|
||||
<image wx:else class="NavBar-BackIcon" src="https://app.gter.net/image/miniApp/project/Back.svg" mode="heightFix"></image>
|
||||
</view>
|
||||
<!-- <view bindtap="backHome" wx:if="{{ !notShowIndex && !isNewVersions }}" class='Btn'>
|
||||
<image class="NavBar-HomeIcon backToHome" src="../../img/indexblack.png"></image>
|
||||
</view> -->
|
||||
|
||||
<!-- 新的 -->
|
||||
<view bindtap="backHome" wx:if="{{ !notShowIndex }}" class='Btn'>
|
||||
<image wx:if="{{ iswhitecolor }}" class="home-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/project/home-white.png"></image>
|
||||
<image wx:else class="home-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/project/home.png"></image>
|
||||
</view>
|
||||
|
||||
<view class="Btn search-btn" wx:if="{{ isUser }}" bindtap="toUserPage">
|
||||
<image wx:if="{{ user.avatar }}" class='headPortrait' src="{{ user.avatar }}" />
|
||||
<image wx:else class='headPortrait' src="https://app.gter.net/image/miniApp/project/defaultAvatar.png" />
|
||||
</view>
|
||||
|
||||
<navigator url='../search/search' class='Btn search-btn' hover-class='hover' wx:if="{{ haveSearch }}">
|
||||
<image class='searchbtn' src="../../img/searchbtn-3.png" />
|
||||
</navigator>
|
||||
</block>
|
||||
|
||||
<!-- 消息中心 -->
|
||||
<view wx:if="{{ isMessageCenter }}" class="message-center" bind:tap="goMessage">
|
||||
<image wx:if="{{ iswhitecolor }}" class="message-center-icon" src="https://app.gter.net/image/miniApp/offer/message-center-c.svg" mode="widthFix"></image>
|
||||
<image wx:else class="message-center-icon" src="https://app.gter.net/image/miniApp/offer/message-center.svg" mode="widthFix"></image>
|
||||
<view class="red {{ messageCount <= 9 && 'circle' }}" wx:if="{{ messageCount != 0 }}">{{ messageCount }}</view>
|
||||
</view>
|
||||
|
||||
<block wx:if="{{ isUserAlone }}">
|
||||
<view bindtap="toUserPage" class='Btn search-btn' hover-class='none' style="padding: 0 15rpx;margin-left: 7rpx;position: relative;">
|
||||
<image wx:if="{{ user.avatar }}" class='headPortrait' src="{{ user.avatar }}" />
|
||||
<image wx:else class='headPortrait' src="https://app.gter.net/image/miniApp/project/defaultAvatar.png" />
|
||||
<view class="red {{ messageCount <= 9 && 'circle' }}" wx:if="{{ messageCount != 0 }}">{{ messageCount }}</view>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<navigator wx:if="{{ isNeedSign }}" class="sign-btn" url="/pages/signIn/signIn" hover-class="none">签到领币</navigator>
|
||||
</view>
|
||||
<!-- <view class="NavBar-content-title" style="padding-left:{{!notShowIndex && haveSearch ? 0 :11}}px"> -->
|
||||
<view class="NavBar-content-title">
|
||||
<slot></slot>
|
||||
</view>
|
||||
|
||||
<!-- 顶部标题偏右的修改 直接复制 NavBar-left 的 view 就行 -->
|
||||
<view class="NavBar-left NavBar-left-more"></view>
|
||||
|
||||
</view>
|
||||
<!-- <view class="capsule-holder"></view> -->
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<wechat-alerts-pop capsulePopState="{{ capsulePopState }}"></wechat-alerts-pop>
|
||||
<rent-pop popup="{{ popup }}"></rent-pop>
|
||||
<open-ad openDate="{{ openDate }}"></open-ad>
|
||||
</view>
|
254
component/headerNav/headerNav.wxss
Normal file
254
component/headerNav/headerNav.wxss
Normal file
@ -0,0 +1,254 @@
|
||||
/* template/headerNav/index.wxss */
|
||||
.NavBar {
|
||||
position: fixed;
|
||||
/* position: sticky; */
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
z-index: 99;
|
||||
/* border-bottom: 1px solid #f2f2f2; */
|
||||
transition: all .2s;
|
||||
}
|
||||
|
||||
.NavBar-statusBar {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.NavBar-titlebar {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.capsule-holder {
|
||||
width: 100px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.NavBar-SearchBar {
|
||||
flex: 1;
|
||||
padding: 0 16px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.NavBar-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.NavBar-left {
|
||||
/* width: 55px; */
|
||||
height: 32px;
|
||||
border-radius: 32px;
|
||||
/* border: solid 1px #f6f6f6; */
|
||||
text-align: center;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.NavBar-content-title {
|
||||
font-size: 17px;
|
||||
font-weight: 600;
|
||||
/* flex: 1; */
|
||||
text-align: center;
|
||||
line-height: 32px;
|
||||
height: 32px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
/* padding-left: 11px; */
|
||||
}
|
||||
|
||||
.backToHome {
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
.search-btn {
|
||||
padding: 5px
|
||||
}
|
||||
|
||||
.search-btn image {
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
.NavBar-HomeIcon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.NavBar-left-area {
|
||||
width: 87px;
|
||||
}
|
||||
|
||||
.NavBar-left-more {
|
||||
/* width: 87px; */
|
||||
height: 32px;
|
||||
display: flex;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.NavBar-left-more .backToHome {
|
||||
/* flex: 1; */
|
||||
}
|
||||
|
||||
.NavBar-BackIcon {
|
||||
/* flex: 1; */
|
||||
width: 12px;
|
||||
height: 18px;
|
||||
padding: 1px 0;
|
||||
box-sizing: border-box;
|
||||
/* border-right: solid 1px #d2d2d2; */
|
||||
}
|
||||
|
||||
.Btn {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
max-width: 44px;
|
||||
height: 32px;
|
||||
padding: 1px 0;
|
||||
text-align: left;
|
||||
box-sizing: border-box;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.Btn .user {
|
||||
width: 20px;
|
||||
height: 21px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.navigator-hover {
|
||||
background-color: #fff;
|
||||
opacity: 1
|
||||
}
|
||||
|
||||
.hover {
|
||||
background: #fff;
|
||||
opacity: 1
|
||||
}
|
||||
|
||||
.searchBtn {
|
||||
display: flex;
|
||||
flex: 1;
|
||||
max-width: 44px;
|
||||
height: 32px;
|
||||
padding: 1px 0;
|
||||
text-align: left;
|
||||
box-sizing: border-box;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.searchBtn .searchBtnImg {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
}
|
||||
|
||||
.search-btn .headPortrait {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.toggle {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 24rpx;
|
||||
padding-left: 22rpx;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.toggle .toggle-icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
border-radius: 50%;
|
||||
margin-right: 9rpx;
|
||||
}
|
||||
|
||||
.home-icon {
|
||||
width: 57rpx;
|
||||
height: 57rpx;
|
||||
}
|
||||
|
||||
.sign-btn {
|
||||
/* margin-left: 10rpx; */
|
||||
font-size: 25rpx;
|
||||
padding: 0 15rpx;
|
||||
}
|
||||
|
||||
.message-center {
|
||||
padding: 0 15rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.message-center .message-center-icon {
|
||||
width: 37.5rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
|
||||
.search-btn .red,
|
||||
.message-center .red {
|
||||
font-size: 18rpx;
|
||||
color: #FFFFFF;
|
||||
padding: 0 7rpx;
|
||||
height: 24rpx;
|
||||
line-height: 24rpx;
|
||||
border-radius: 12rpx;
|
||||
background-color: #f95d5d;
|
||||
position: absolute;
|
||||
top: -10rpx;
|
||||
right: 0;
|
||||
box-sizing: border-box;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.search-btn .red.circle,
|
||||
.message-center .red.circle {
|
||||
border-radius: 50%;
|
||||
width: 24rpx;
|
||||
}
|
||||
|
||||
.search-btn .red {
|
||||
top: 0rpx;
|
||||
right: 15rpx;
|
||||
}
|
||||
|
||||
.left-operate-box {
|
||||
height: 57rpx;
|
||||
background-color: rgba(255, 255, 255, 0);
|
||||
border: 1rpx solid rgba(215, 215, 215, 1);
|
||||
border-radius: 66rpx;
|
||||
margin-left: 15rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.left-operate-box .left-operate-item {
|
||||
font-size: 24rpx;
|
||||
line-height: 37.5rpx;
|
||||
color: #333;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 19rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.left-operate-box .left-operate-item:not(:last-of-type) {
|
||||
border-right: 1rpx solid #d7d7d7;
|
||||
}
|
||||
|
||||
.left-operate-box .left-operate-item .left-operate-icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-right: 9rpx;
|
||||
}
|
26
component/helperPop/helperPop.js
Normal file
26
component/helperPop/helperPop.js
Normal file
@ -0,0 +1,26 @@
|
||||
// template/helper-pop/helper-pop.js
|
||||
Component({
|
||||
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
type: String
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
close() {
|
||||
this.triggerEvent('close', {})
|
||||
}
|
||||
}
|
||||
})
|
4
component/helperPop/helperPop.json
Normal file
4
component/helperPop/helperPop.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {}
|
||||
}
|
20
component/helperPop/helperPop.wxml
Normal file
20
component/helperPop/helperPop.wxml
Normal file
@ -0,0 +1,20 @@
|
||||
<!--template/helper-pop/helper-pop.wxml-->
|
||||
<view class="helper-pop flexflex" bindtap="close" catchtouchmove="return">
|
||||
<view class="helper-box flexacenter" catchtap="return false">
|
||||
<image class="cross-grey" catchtap="close" src="https://app.gter.net/image/miniApp/offer/cross-grey.png"></image>
|
||||
<!-- <image class="helper-text helper-text1" mode="heightFix" src="https://app.gter.net/image/miniApp/offer/assistantbackground.png"></image> -->
|
||||
<image class="helper-text helper-text1" mode="heightFix" src="https://app.gter.net/image/miniApp/offer/apply-for-name.png"></image>
|
||||
<view class="helper-box-box flexflex">
|
||||
<view class="helper-QRcode-box flexcenter">
|
||||
<image class="left-top helper-QRcode-box-icon" src="https://app.gter.net/image/miniApp/offer/yellow-border.svg"></image>
|
||||
<image class="left-bottom helper-QRcode-box-icon" src="https://app.gter.net/image/miniApp/offer/yellow-border.svg"></image>
|
||||
<image class="right-top helper-QRcode-box-icon" src="https://app.gter.net/image/miniApp/offer/yellow-border.svg"></image>
|
||||
<image class="right-bottom helper-QRcode-box-icon" src="https://app.gter.net/image/miniApp/offer/yellow-border.svg"></image>
|
||||
<image class="helper-QRcode-img" mode="widthFix" src="https://u.gter.net/assistantwxqrcode.png" show-menu-by-longpress="true"></image>
|
||||
</view>
|
||||
<text class="helper-box-text">长按识别二维码</text>
|
||||
</view>
|
||||
<image class="helper-bottom" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/helper-bottom-yellow.svg"></image>
|
||||
<image class="helper-bottom" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/helper-bottom-blue.svg"></image>
|
||||
</view>
|
||||
</view>
|
182
component/helperPop/helperPop.wxss
Normal file
182
component/helperPop/helperPop.wxss
Normal file
@ -0,0 +1,182 @@
|
||||
/* template/helper-pop/helper-pop.wxss */
|
||||
/* 公共的 css 样式 */
|
||||
.flexflex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flexcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flexjcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.flexacenter {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flex1 {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
@keyframes slidebj {
|
||||
0% {
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
100% {
|
||||
background-color: rgba(0, 0, 0, 0.717647058823529);
|
||||
}
|
||||
}
|
||||
|
||||
.helper-pop {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.717647058823529);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1004;
|
||||
align-items: flex-end;
|
||||
box-sizing: border-box;
|
||||
animation: slidebj 0.5s forwards;
|
||||
}
|
||||
|
||||
@keyframes slideUp {
|
||||
0% {
|
||||
top: 100%;
|
||||
}
|
||||
|
||||
100% {
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.helper-pop .helper-box {
|
||||
animation: slideUp 0.5s forwards;
|
||||
|
||||
box-sizing: border-box;
|
||||
flex-direction: column;
|
||||
width: 750rpx;
|
||||
height: 891rpx;
|
||||
background: -webkit-linear-gradient(270.192914353533deg, rgba(193, 206, 250, 1) 0%, rgba(226, 237, 251, 1) 28%, rgba(255, 255, 255, 1) 60%);
|
||||
background: -moz-linear-gradient(179.807085646467deg, rgba(193, 206, 250, 1) 0%, rgba(226, 237, 251, 1) 28%, rgba(255, 255, 255, 1) 60%);
|
||||
background: linear-gradient(179.807085646467deg, rgba(193, 206, 250, 1) 0%, rgba(226, 237, 251, 1) 28%, rgba(255, 255, 255, 1) 60%);
|
||||
border: none;
|
||||
border-radius: 30rpx;
|
||||
border-bottom-right-radius: 0px;
|
||||
border-bottom-left-radius: 0px;
|
||||
-moz-box-shadow: 0px 0px 22.5rpx rgba(0, 0, 0, 0.101960784313725);
|
||||
-webkit-box-shadow: 0px 0px 22.5rpx rgba(0, 0, 0, 0.101960784313725);
|
||||
box-shadow: 0px 0px 22.5rpx rgba(0, 0, 0, 0.101960784313725);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .cross-grey {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
position: absolute;
|
||||
top: 20rpx;
|
||||
right: 20rpx;
|
||||
padding: 10rpx;
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .helper-text {
|
||||
box-sizing: border-box;
|
||||
/* width: 384rpx; */
|
||||
/* height: 110rpx; */
|
||||
/* height: 150rpx; */
|
||||
height: 155rpx;
|
||||
margin: 88rpx auto 45rpx;
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .helper-text1 {
|
||||
/* width: 424rpx; */
|
||||
}
|
||||
|
||||
|
||||
.helper-pop .helper-box .helper-box-box {
|
||||
position: absolute;
|
||||
bottom: 121.5rpx;
|
||||
box-sizing: border-box;
|
||||
width: 420rpx;
|
||||
background: -webkit-linear-gradient(310.572423002443deg, rgba(101, 137, 242, 1) 0%, rgba(116, 177, 240, 1) 100%);
|
||||
background: -moz-linear-gradient(139.427576997557deg, rgba(101, 137, 242, 1) 0%, rgba(116, 177, 240, 1) 100%);
|
||||
background: linear-gradient(139.427576997557deg, rgba(101, 137, 242, 1) 0%, rgba(116, 177, 240, 1) 100%);
|
||||
border: none;
|
||||
border-radius: 30rpx;
|
||||
-moz-box-shadow: 0px 0px 22.5rpx rgba(0, 0, 0, 0.176470588235294);
|
||||
-webkit-box-shadow: 0px 0px 22.5rpx rgba(0, 0, 0, 0.176470588235294);
|
||||
box-shadow: 0px 0px 22.5rpx rgba(0, 0, 0, 0.176470588235294);
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding-top: 30rpx;
|
||||
padding-bottom: 30rpx;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .helper-box-box .helper-box-text {
|
||||
box-sizing: border-box;
|
||||
font-size: 24rpx;
|
||||
color: #FFFFFF;
|
||||
text-align: center;
|
||||
line-height: 42rpx;
|
||||
margin-top: 30rpx;
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .helper-QRcode-box {
|
||||
box-sizing: border-box;
|
||||
width: 360rpx;
|
||||
height: 360rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border-radius: 9rpx;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .helper-QRcode-box .helper-QRcode-box-icon {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .helper-QRcode-box .left-top {
|
||||
top: 0;
|
||||
left: 0;
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
|
||||
.helper-QRcode-box .left-bottom {
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .helper-QRcode-box .right-top {
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .helper-QRcode-box .right-bottom {
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .helper-QRcode-box .helper-QRcode-img {
|
||||
width: 330rpx;
|
||||
height: 330rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.helper-pop .helper-box .helper-bottom {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 226rpx;
|
||||
}
|
208
component/indexSidebar/indexSidebar.js
Normal file
208
component/indexSidebar/indexSidebar.js
Normal file
@ -0,0 +1,208 @@
|
||||
// template/indexSidebar/indexSidebar.js
|
||||
const util = require('../../utils/util')
|
||||
const common = require('../../utils/commonMethod')
|
||||
const app = getApp()
|
||||
Component({
|
||||
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
isInitFinish: {
|
||||
type: Boolean,
|
||||
observer(res) {
|
||||
if (res) {
|
||||
this.openSidebarTwoHide()
|
||||
const ishongkongoffer = app.globalData.user.ishongkongoffer
|
||||
this.setData({
|
||||
gtergreenonionqrcode: app.globalData.gtergreenonionqrcode
|
||||
})
|
||||
if (this.data.ishongkongoffer == 0) {
|
||||
this.setData({
|
||||
ishongkongoffer,
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
value: false,
|
||||
},
|
||||
sidebarType: {
|
||||
type: String,
|
||||
value: "offer",
|
||||
},
|
||||
islogin: {
|
||||
type: Boolean,
|
||||
value: true
|
||||
},
|
||||
followschool: {
|
||||
type: Number,
|
||||
observer(res) {
|
||||
if (res) this.judgeIsHK(res)
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
helperPopState: false, // offer捷报右侧-申请小助手弹窗的状态
|
||||
isSidebarShowState: true, // 侧边栏的展开状态 相反的是 收起
|
||||
sidebarState: 1, // 侧边栏有三种内容状态 1 只有申请助手 2 申请 + offer按钮 3 申请 + offer按钮 + 置顶
|
||||
|
||||
sidebarTimer: null, // 侧边栏的定时器
|
||||
btnText: {
|
||||
offer: "Offer\n捷报",
|
||||
summary: "申请\n总结",
|
||||
mj: "发布\n面经",
|
||||
vote: "创建\n投票",
|
||||
questions: "我要\n提问",
|
||||
find: "我要\n发布",
|
||||
note: "发布\n笔记",
|
||||
},
|
||||
|
||||
opinionState: false, // 意见反馈 弹窗显示状态
|
||||
|
||||
ishongkongoffer: 0, // 是否报告 香港 offer
|
||||
|
||||
gtergreenonionqrcode: "", // 群 二维码
|
||||
groupState: false, // 群 弹窗显示状态
|
||||
},
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
// 判断显示
|
||||
judgeIsHK(value) {
|
||||
if (this.data.isInitFinish) {
|
||||
const arr = [308, 309, 310, 311, 312, 313, 314, 315, 316, 453, 1662, 2971, 2972]
|
||||
value = Number(value)
|
||||
let ishongkongoffer = 0
|
||||
if (arr.includes(value)) ishongkongoffer = 1
|
||||
|
||||
this.setData({
|
||||
ishongkongoffer,
|
||||
})
|
||||
} else setTimeout(() => this.judgeIsHK(value), 1000)
|
||||
},
|
||||
// 开启两秒后收起
|
||||
openSidebarTwoHide() {
|
||||
clearTimeout(this.data.sidebarTimer)
|
||||
if (!this.data.isSidebarShowState) {
|
||||
this.setData({
|
||||
isSidebarShowState: true
|
||||
})
|
||||
}
|
||||
this.data.sidebarTimer = setTimeout(() => {
|
||||
this.setData({
|
||||
isSidebarShowState: false
|
||||
})
|
||||
}, 2000);
|
||||
},
|
||||
|
||||
// 专门处理侧边栏的事件 隐藏消失
|
||||
sidebarShowHide(e) {
|
||||
clearTimeout(this.data.sidebarTimer)
|
||||
|
||||
if (!this.data.isSidebarShowState) {
|
||||
this.openSidebarTwoHide()
|
||||
return
|
||||
}
|
||||
|
||||
const type = e.currentTarget.dataset.type
|
||||
|
||||
if (type == 'group') {
|
||||
// const url = "https://form.gter.net/D8i0iS5uXCWG#/qr"
|
||||
// common.goPage(`/pages/webview/webview?url=${url}`)
|
||||
this.setData({
|
||||
groupState: true,
|
||||
})
|
||||
util.statistics({
|
||||
name: "side-group"
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (type == 'gx') {
|
||||
wx.navigateToMiniProgram({
|
||||
appId: "wxcf0a799771cf2ae6",
|
||||
page: "/pages/index/index"
|
||||
})
|
||||
|
||||
util.statistics({
|
||||
name: "side-gx"
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (type == 'top') {
|
||||
wx.pageScrollTo({
|
||||
scrollTop: 0
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (type == 'issue') {
|
||||
if (!this.data.islogin) {
|
||||
this.triggerEvent("openLogin")
|
||||
return
|
||||
}
|
||||
|
||||
const type = this.data.sidebarType || ''
|
||||
|
||||
if (type == 'questions') {
|
||||
this.triggerEvent('openSelectTheme')
|
||||
return
|
||||
}
|
||||
let url = '/pagesLoginRequired/pages/postOffer/postOffer'
|
||||
if (type == 'summary') url = '/pages/summaryPost/summaryPost'
|
||||
else if (type == 'mj') url = '/pagesSquare/pages/mjIssue/mjIssue'
|
||||
else if (type == 'vote') url = '/pagesSquare/pages/voteCcreate/voteCcreate'
|
||||
else if (type == 'find') url = '/pagesSquare/pages/publish/publish'
|
||||
else if (type == 'note') url = '/pages/treeIssue/treeIssue'
|
||||
|
||||
wx.navigateTo({
|
||||
url
|
||||
})
|
||||
}
|
||||
|
||||
if (type == 'apply') {
|
||||
this.setData({
|
||||
helperPopState: true
|
||||
})
|
||||
// 调用统计代码
|
||||
util.statistical({
|
||||
type: "documentassistant"
|
||||
}).then(res => {})
|
||||
}
|
||||
|
||||
if (type == 'xg') {
|
||||
this.setData({
|
||||
opinionState: true,
|
||||
})
|
||||
}
|
||||
|
||||
this.openSidebarTwoHide()
|
||||
},
|
||||
|
||||
// 关闭 申请小助手的弹窗
|
||||
closeHelperPopState() {
|
||||
this.setData({
|
||||
// sidebarState: 1,
|
||||
helperPopState: false
|
||||
})
|
||||
},
|
||||
|
||||
closeOpinion() {
|
||||
this.setData({
|
||||
opinionState: false,
|
||||
})
|
||||
},
|
||||
|
||||
closeGroup() {
|
||||
this.setData({
|
||||
groupState: false,
|
||||
})
|
||||
},
|
||||
}
|
||||
})
|
6
component/indexSidebar/indexSidebar.json
Normal file
6
component/indexSidebar/indexSidebar.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {
|
||||
"helper-pop": "/component/helperPop/helperPop"
|
||||
}
|
||||
}
|
326
component/indexSidebar/indexSidebar.less
Normal file
326
component/indexSidebar/indexSidebar.less
Normal file
@ -0,0 +1,326 @@
|
||||
.flexflex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flexcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flexjcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.flexacenter {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flex1 {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.sidebar-box {
|
||||
position: fixed;
|
||||
right: 15rpx;
|
||||
bottom: 200rpx;
|
||||
width: 72rpx;
|
||||
background-color: rgb(246, 246, 246);
|
||||
border-radius: 18rpx;
|
||||
box-shadow: rgba(0, 0, 0, 0.24) 0 0 12rpx;
|
||||
transition: all .3s;
|
||||
|
||||
&.sidebar-hide-box {
|
||||
right: 0;
|
||||
transform: translateX(50%);
|
||||
}
|
||||
|
||||
.sidebar-item {
|
||||
&:not(:last-of-type) {
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
}
|
||||
|
||||
&.toTop {
|
||||
width: 100%;
|
||||
padding-top: 30rpx;
|
||||
padding-bottom: 24rpx;
|
||||
|
||||
.toTop-icon {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
}
|
||||
}
|
||||
|
||||
&.offerBtn {
|
||||
flex-direction: column;
|
||||
padding-top: 31.5rpx;
|
||||
padding-bottom: 19.5rpx;
|
||||
|
||||
.offerBtn-icon {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
border-radius: 50%;
|
||||
background-color: #fff;
|
||||
box-shadow: 0px 0px 10rpx rgba(0, 0, 0, 0.349019607843137);
|
||||
margin-bottom: 7.5rpx;
|
||||
|
||||
.offerBtn-img {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
|
||||
.zufang-img {
|
||||
width: 33rpx;
|
||||
height: 33rpx;
|
||||
}
|
||||
|
||||
.wx-img {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.offerBtn-text {
|
||||
text-align: center;
|
||||
color: rgba(51, 51, 51, 1);
|
||||
font-size: 21rpx;
|
||||
white-space: break-spaces;
|
||||
}
|
||||
}
|
||||
|
||||
&.applyFor {
|
||||
flex-direction: column;
|
||||
padding-top: 31.5rpx;
|
||||
padding-bottom: 28.5rpx;
|
||||
|
||||
.applyFor-icon {
|
||||
width: 63rpx;
|
||||
height: 63rpx;
|
||||
}
|
||||
|
||||
.applyFor-text {
|
||||
text-align: center;
|
||||
color: rgba(51, 51, 51, 1);
|
||||
font-size: 21rpx;
|
||||
|
||||
.applyFor-text-text {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slideUp {
|
||||
0% {
|
||||
top: 100%;
|
||||
}
|
||||
|
||||
100% {
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.opinion-box {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.705882352941177);
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
animation: slidebj 0.5s forwards;
|
||||
|
||||
.box {
|
||||
width: 100vw;
|
||||
height: 960rpx;
|
||||
background: linear-gradient(180deg, rgba(245, 246, 242, 1) 1%, rgba(255, 246, 223, 1) 35%, rgba(242, 175, 28, 1) 100%);
|
||||
border: none;
|
||||
border-radius: 30rpx 30rpx 0 0;
|
||||
box-shadow: 0 0 22.5rpx rgba(0, 0, 0, 0.101960784313725);
|
||||
padding: 45rpx 48rpx 0;
|
||||
animation: slideUp 0.5s forwards;
|
||||
|
||||
position: relative;
|
||||
|
||||
.sun {
|
||||
width: 180rpx;
|
||||
height: 159rpx;
|
||||
position: absolute;
|
||||
top: 30rpx;
|
||||
right: 30rpx;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-style: normal;
|
||||
font-size: 54rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.hint {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 28rpx;
|
||||
color: #555555;
|
||||
line-height: 45rpx;
|
||||
white-space: pre;
|
||||
margin-bottom: 42rpx;
|
||||
}
|
||||
|
||||
.case {
|
||||
width: 654rpx;
|
||||
height: 603rpx;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border-radius: 30rpx;
|
||||
box-shadow: 0 0 22.5rpx rgba(0, 0, 0, 0.101960784313725);
|
||||
flex-direction: column;
|
||||
|
||||
.QRcode {
|
||||
width: 360rpx;
|
||||
height: 360rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 9rpx;
|
||||
margin-bottom: 24rpx;
|
||||
|
||||
.img {
|
||||
width: 327rpx;
|
||||
height: 327rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.prompt {
|
||||
font-size: 24rpx;
|
||||
letter-spacing: 1.5rpx;
|
||||
color: #555555;
|
||||
text-align: center;
|
||||
line-height: 42rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.huddle-box {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.705882352941177);
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
animation: slidebj 0.5s forwards;
|
||||
|
||||
.box {
|
||||
width: 100vw;
|
||||
height: 1078.5rpx;
|
||||
border-radius: 45rpx 45rpx 0 0;
|
||||
box-shadow: 0 0 22.5rpx rgba(0, 0, 0, 0.101960784313725);
|
||||
animation: slideUp 0.5s forwards;
|
||||
background: linear-gradient(0.079688098148992deg, rgba(51, 50, 117, 1) 0%, rgba(66, 0, 128, 1) 100%);
|
||||
position: relative;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding-top: 48rpx;
|
||||
z-index: 1;
|
||||
|
||||
.code {
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
.bj {
|
||||
width: 750rpx;
|
||||
height: 1078.5rpx;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.bj-bottom {
|
||||
width: 189rpx;
|
||||
height: 201rpx;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.top {
|
||||
width: 298.5rpx;
|
||||
height: 54rpx;
|
||||
margin-bottom: 19.5rpx;
|
||||
}
|
||||
|
||||
.title {
|
||||
width: 466.5rpx;
|
||||
height: 129rpx;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 30rpx;
|
||||
color: #FFFFFF;
|
||||
text-align: center;
|
||||
line-height: 45rpx;
|
||||
margin-bottom: 37.5rpx;
|
||||
|
||||
}
|
||||
|
||||
.case {
|
||||
width: 540rpx;
|
||||
height: 600rpx;
|
||||
background: linear-gradient(180deg, rgba(242, 242, 242, 1) 0%, rgba(235, 235, 235, 1) 100%);
|
||||
border-radius: 22.5rpx;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding-top: 75rpx;
|
||||
margin: 0 auto;
|
||||
|
||||
.QRcode {
|
||||
width: 360rpx;
|
||||
height: 360rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border-color: rgba(242, 242, 242, 1);
|
||||
border-radius: 15rpx;
|
||||
box-shadow: 0 0 7.5rpx rgba(0, 0, 0, 0.184313725490196);
|
||||
margin-bottom: 39rpx;
|
||||
|
||||
.img {
|
||||
width: 327rpx;
|
||||
height: 327rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.hint {
|
||||
.img {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
|
||||
&.img-left {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
|
||||
.hint-text {
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
text-align: center;
|
||||
line-height: 42rpx;
|
||||
margin: 0 22.5rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
83
component/indexSidebar/indexSidebar.wxml
Normal file
83
component/indexSidebar/indexSidebar.wxml
Normal file
@ -0,0 +1,83 @@
|
||||
<!--template/indexSidebar/indexSidebar.wxml-->
|
||||
<view class="sidebar-box {{ !isSidebarShowState ? 'sidebar-hide-box' : '' }}">
|
||||
<view class="sidebar-item toTop flexcenter" wx:if="{{ sidebarState == 3 }}" bind:tap="sidebarShowHide" data-type="top">
|
||||
<image class="toTop-icon" src="https://app.gter.net/image/miniApp/offer/toTop-icon.png" mode="widthFix"></image>
|
||||
</view>
|
||||
<view class="sidebar-item offerBtn flexcenter" wx:if="{{ sidebarState >= 2 && btnText[sidebarType] }}" bind:tap="sidebarShowHide" data-type="issue">
|
||||
<view class="offerBtn-icon flexcenter">
|
||||
<image class="offerBtn-img" src="https://app.gter.net/image/miniApp/project/u1434.png" mode="widthFix"></image>
|
||||
</view>
|
||||
<view class="offerBtn-text">{{ btnText[sidebarType] }}</view>
|
||||
</view>
|
||||
<view wx:if="{{ sidebarType != 'find' && sidebarType != 'note' && sidebarType != 'xg' }}" class="sidebar-item applyFor flexcenter" data-type="top" bind:tap="sidebarShowHide" data-type="apply">
|
||||
<image class="applyFor-icon" src="https://app.gter.net/image/miniApp/offer/applyFor-icon.svg" mode="widthFix"></image>
|
||||
<view class="applyFor-text">
|
||||
<text class="applyFor-text-text">申请</text>
|
||||
<text class="applyFor-text-text">小助手</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="sidebar-item offerBtn flexcenter" wx:if="{{ sidebarType == 'xg' }}" bind:tap="sidebarShowHide" data-type="xg">
|
||||
<view class="offerBtn-icon flexcenter">
|
||||
<image class="offerBtn-img" src="https://app.gter.net/image/miniApp/offer/opinion-icon.png" mode="widthFix"></image>
|
||||
</view>
|
||||
<view class="offerBtn-text">意见</view>
|
||||
<view class="offerBtn-text">反馈</view>
|
||||
</view>
|
||||
|
||||
<view wx:if="{{ sidebarType == 'xg' }}" class="sidebar-item offerBtn flexcenter" bind:tap="sidebarShowHide" data-type="group">
|
||||
<view class="offerBtn-icon flexcenter">
|
||||
<image class="wx-img" src="https://app.gter.net/image/miniApp/offer/wx-icon.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
<view class="offerBtn-text">进群</view>
|
||||
<view class="offerBtn-text">抱团</view>
|
||||
</view>
|
||||
|
||||
<!-- 不在 找飞友 笔记出现 -->
|
||||
<view class="sidebar-item offerBtn flexcenter" wx:if="{{ sidebarType != 'find' && sidebarType != 'note' && ishongkongoffer }}" bind:tap="sidebarShowHide" data-type="gx">
|
||||
<view class="offerBtn-icon flexcenter">
|
||||
<image class="zufang-img" src="https://app.gter.net/image/miniApp/offer/renting-icon.png" mode="widthFix"></image>
|
||||
</view>
|
||||
<view class="offerBtn-text">港校</view>
|
||||
<view class="offerBtn-text">租房</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
<helper-pop wx:if="{{ helperPopState }}" bindclose="closeHelperPopState"></helper-pop>
|
||||
|
||||
<view wx:if="{{ opinionState }}" class="opinion-box" bindtap="closeOpinion" catch:touchmove="return">
|
||||
<view class="box" catch:tap="return">
|
||||
<image class="sun" src="https://app.gter.net/image/miniApp/offer/sun-icon.png"></image>
|
||||
<view class="title">意见反馈</view>
|
||||
<view class="hint">项目库正在火热公测中!发现有错误的地方\n告诉我呀!有建议也欢迎来聊聊~</view>
|
||||
<view class="case flexcenter">
|
||||
<view class="QRcode flexcenter">
|
||||
<image class="img" src="https://app.gter.net/image/miniApp/offer/brother-onion.png" mode="widthFix" show-menu-by-longpress></image>
|
||||
</view>
|
||||
<view class="prompt">长按识别二维码</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="huddle-box" wx:if="{{ groupState }}" bindtap="closeGroup" catch:touchmove="return">
|
||||
<view class="box flexflex" catch:tap="return">
|
||||
<!-- <image class="code" src="https://app.gter.net/image/miniApp/offer/group-code.jpg" mode="widthFix"></image> -->
|
||||
<image class="bj" src="https://app.gter.net/image/miniApp/offer/group-bj.svg"></image>
|
||||
<image class="bj-bottom" src="https://app.gter.net/image/miniApp/offer/group-bottom.png"></image>
|
||||
<image class="top" src="https://app.gter.net/image/miniApp/offer/group-top.png" mode="widthFix"></image>
|
||||
<image class="title" src="https://app.gter.net/image/miniApp/offer/group-title.png" mode="widthFix"></image>
|
||||
<view class="text">抱团 / 信息共享 / 互助申学</view>
|
||||
<view class="case flexflex">
|
||||
<view class="QRcode flexcenter">
|
||||
<image class="img" src="{{ gtergreenonionqrcode }}" mode="widthFix" show-menu-by-longpress></image>
|
||||
</view>
|
||||
|
||||
<view class="hint flexcenter">
|
||||
<image class="img img-left" src="https://app.gter.net/image/miniApp/offer/group-arrows.png" mode="widthFix"></image>
|
||||
<text class="hint-text">添加寄托葱哥进群</text>
|
||||
<image class="img" src="https://app.gter.net/image/miniApp/offer/group-arrows.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
276
component/indexSidebar/indexSidebar.wxss
Normal file
276
component/indexSidebar/indexSidebar.wxss
Normal file
@ -0,0 +1,276 @@
|
||||
.flexflex {
|
||||
display: flex;
|
||||
}
|
||||
.flexcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.flexjcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.flexacenter {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.flex1 {
|
||||
flex: 1;
|
||||
}
|
||||
.sidebar-box {
|
||||
position: fixed;
|
||||
right: 15rpx;
|
||||
bottom: 200rpx;
|
||||
width: 72rpx;
|
||||
background-color: #f6f6f6;
|
||||
border-radius: 18rpx;
|
||||
box-shadow: rgba(0, 0, 0, 0.24) 0 0 12rpx;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.sidebar-box.sidebar-hide-box {
|
||||
right: 0;
|
||||
transform: translateX(50%);
|
||||
}
|
||||
.sidebar-box .sidebar-item:not(:last-of-type) {
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
}
|
||||
.sidebar-box .sidebar-item.toTop {
|
||||
width: 100%;
|
||||
padding-top: 30rpx;
|
||||
padding-bottom: 24rpx;
|
||||
}
|
||||
.sidebar-box .sidebar-item.toTop .toTop-icon {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
}
|
||||
.sidebar-box .sidebar-item.offerBtn {
|
||||
flex-direction: column;
|
||||
padding-top: 31.5rpx;
|
||||
padding-bottom: 19.5rpx;
|
||||
}
|
||||
.sidebar-box .sidebar-item.offerBtn .offerBtn-icon {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
border-radius: 50%;
|
||||
background-color: #fff;
|
||||
box-shadow: 0px 0px 10rpx rgba(0, 0, 0, 0.34901961);
|
||||
margin-bottom: 7.5rpx;
|
||||
}
|
||||
.sidebar-box .sidebar-item.offerBtn .offerBtn-icon .offerBtn-img {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
.sidebar-box .sidebar-item.offerBtn .offerBtn-icon .zufang-img {
|
||||
width: 33rpx;
|
||||
height: 33rpx;
|
||||
}
|
||||
.sidebar-box .sidebar-item.offerBtn .offerBtn-icon .wx-img {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
}
|
||||
.sidebar-box .sidebar-item.offerBtn .offerBtn-text {
|
||||
text-align: center;
|
||||
color: #333333;
|
||||
font-size: 21rpx;
|
||||
white-space: break-spaces;
|
||||
}
|
||||
.sidebar-box .sidebar-item.applyFor {
|
||||
flex-direction: column;
|
||||
padding-top: 31.5rpx;
|
||||
padding-bottom: 28.5rpx;
|
||||
}
|
||||
.sidebar-box .sidebar-item.applyFor .applyFor-icon {
|
||||
width: 63rpx;
|
||||
height: 63rpx;
|
||||
}
|
||||
.sidebar-box .sidebar-item.applyFor .applyFor-text {
|
||||
text-align: center;
|
||||
color: #333333;
|
||||
font-size: 21rpx;
|
||||
}
|
||||
.sidebar-box .sidebar-item.applyFor .applyFor-text .applyFor-text-text {
|
||||
display: block;
|
||||
}
|
||||
@keyframes slideUp {
|
||||
0% {
|
||||
top: 100%;
|
||||
}
|
||||
100% {
|
||||
top: 0;
|
||||
}
|
||||
}
|
||||
.opinion-box {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.70588235);
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
animation: slidebj 0.5s forwards;
|
||||
}
|
||||
.opinion-box .box {
|
||||
width: 100vw;
|
||||
height: 960rpx;
|
||||
background: linear-gradient(180deg, #f5f6f2 1%, #fff6df 35%, #f2af1c 100%);
|
||||
border: none;
|
||||
border-radius: 30rpx 30rpx 0 0;
|
||||
box-shadow: 0 0 22.5rpx rgba(0, 0, 0, 0.10196078);
|
||||
padding: 45rpx 48rpx 0;
|
||||
animation: slideUp 0.5s forwards;
|
||||
position: relative;
|
||||
}
|
||||
.opinion-box .box .sun {
|
||||
width: 180rpx;
|
||||
height: 159rpx;
|
||||
position: absolute;
|
||||
top: 30rpx;
|
||||
right: 30rpx;
|
||||
}
|
||||
.opinion-box .box .title {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-style: normal;
|
||||
font-size: 54rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.opinion-box .box .hint {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 28rpx;
|
||||
color: #555555;
|
||||
line-height: 45rpx;
|
||||
white-space: pre;
|
||||
margin-bottom: 42rpx;
|
||||
}
|
||||
.opinion-box .box .case {
|
||||
width: 654rpx;
|
||||
height: 603rpx;
|
||||
background-color: #f6f6f6;
|
||||
border-radius: 30rpx;
|
||||
box-shadow: 0 0 22.5rpx rgba(0, 0, 0, 0.10196078);
|
||||
flex-direction: column;
|
||||
}
|
||||
.opinion-box .box .case .QRcode {
|
||||
width: 360rpx;
|
||||
height: 360rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 9rpx;
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
.opinion-box .box .case .QRcode .img {
|
||||
width: 327rpx;
|
||||
height: 327rpx;
|
||||
}
|
||||
.opinion-box .box .case .prompt {
|
||||
font-size: 24rpx;
|
||||
letter-spacing: 1.5rpx;
|
||||
color: #555555;
|
||||
text-align: center;
|
||||
line-height: 42rpx;
|
||||
}
|
||||
.huddle-box {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.70588235);
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
animation: slidebj 0.5s forwards;
|
||||
}
|
||||
.huddle-box .box {
|
||||
width: 100vw;
|
||||
height: 1078.5rpx;
|
||||
border-radius: 45rpx 45rpx 0 0;
|
||||
box-shadow: 0 0 22.5rpx rgba(0, 0, 0, 0.10196078);
|
||||
animation: slideUp 0.5s forwards;
|
||||
background: linear-gradient(0.0796881deg, #333275 0%, #420080 100%);
|
||||
position: relative;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding-top: 48rpx;
|
||||
z-index: 1;
|
||||
}
|
||||
.huddle-box .box .code {
|
||||
width: 100vw;
|
||||
}
|
||||
.huddle-box .box .bj {
|
||||
width: 750rpx;
|
||||
height: 1078.5rpx;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
z-index: -1;
|
||||
}
|
||||
.huddle-box .box .bj-bottom {
|
||||
width: 189rpx;
|
||||
height: 201rpx;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
.huddle-box .box .top {
|
||||
width: 298.5rpx;
|
||||
height: 54rpx;
|
||||
margin-bottom: 19.5rpx;
|
||||
}
|
||||
.huddle-box .box .title {
|
||||
width: 466.5rpx;
|
||||
height: 129rpx;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
.huddle-box .box .text {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 30rpx;
|
||||
color: #FFFFFF;
|
||||
text-align: center;
|
||||
line-height: 45rpx;
|
||||
margin-bottom: 37.5rpx;
|
||||
}
|
||||
.huddle-box .box .case {
|
||||
width: 540rpx;
|
||||
height: 600rpx;
|
||||
background: linear-gradient(180deg, #f2f2f2 0%, #ebebeb 100%);
|
||||
border-radius: 22.5rpx;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding-top: 75rpx;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.huddle-box .box .case .QRcode {
|
||||
width: 360rpx;
|
||||
height: 360rpx;
|
||||
background-color: #ffffff;
|
||||
border-color: #f2f2f2;
|
||||
border-radius: 15rpx;
|
||||
box-shadow: 0 0 7.5rpx rgba(0, 0, 0, 0.18431373);
|
||||
margin-bottom: 39rpx;
|
||||
}
|
||||
.huddle-box .box .case .QRcode .img {
|
||||
width: 327rpx;
|
||||
height: 327rpx;
|
||||
}
|
||||
.huddle-box .box .case .hint .img {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
}
|
||||
.huddle-box .box .case .hint .img.img-left {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
.huddle-box .box .case .hint .hint-text {
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
text-align: center;
|
||||
line-height: 42rpx;
|
||||
margin: 0 22.5rpx;
|
||||
}
|
92
component/open-ad/open-ad.js
Normal file
92
component/open-ad/open-ad.js
Normal file
@ -0,0 +1,92 @@
|
||||
// template/open-ad/open-ad.js
|
||||
const app = getApp()
|
||||
Component({
|
||||
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
openDate: {
|
||||
type: Object,
|
||||
observer: function (res) {
|
||||
if (res && res.image && !this.data.load) {
|
||||
this.data.load = true
|
||||
wx.setStorage({
|
||||
key: "openAdTimer",
|
||||
data: Date.now()
|
||||
})
|
||||
this.downloadImg(res.image)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
num: 5,
|
||||
state: false,
|
||||
timer: null,
|
||||
url: "",
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
downloadImg(url) {
|
||||
wx.downloadFile({
|
||||
url,
|
||||
success: (res) => {
|
||||
if (res.statusCode === 200) {
|
||||
this.setData({
|
||||
url: res.tempFilePath
|
||||
})
|
||||
this.startstart()
|
||||
}
|
||||
},
|
||||
complete: () => {
|
||||
this.data.load = false
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
startstart() {
|
||||
app.globalData.offerkaipingadvertisementState = true
|
||||
this.setData({
|
||||
state: true,
|
||||
})
|
||||
|
||||
this.data.timer = setInterval(() => {
|
||||
this.setData({
|
||||
num: this.data.num - 1
|
||||
})
|
||||
if (this.data.num <= 0) {
|
||||
this.setData({
|
||||
state: false,
|
||||
})
|
||||
clearInterval(this.data.timer)
|
||||
}
|
||||
}, 1000)
|
||||
},
|
||||
|
||||
skip() {
|
||||
let url = this.data.openDate['url']
|
||||
if (url.indexOf('http') == 0) url = `/pages/webview/webview?url=${url}`
|
||||
else url = url
|
||||
wx.navigateTo({
|
||||
url
|
||||
})
|
||||
},
|
||||
|
||||
jumpOver() {
|
||||
this.setData({
|
||||
state: false,
|
||||
})
|
||||
clearInterval(this.data.timer)
|
||||
},
|
||||
|
||||
|
||||
}
|
||||
})
|
4
component/open-ad/open-ad.json
Normal file
4
component/open-ad/open-ad.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {}
|
||||
}
|
73
component/open-ad/open-ad.less
Normal file
73
component/open-ad/open-ad.less
Normal file
@ -0,0 +1,73 @@
|
||||
/* template/open-ad/open-ad.wxss */
|
||||
.pop {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 9999999;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
.btn {
|
||||
position: absolute;
|
||||
// top: 180rpx;
|
||||
// right: 20rpx;
|
||||
top: 80rpx;
|
||||
left: 20rpx;
|
||||
width: 130rpx;
|
||||
height: 45rpx;
|
||||
line-height: 45rpx;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
border-radius: 40rpx;
|
||||
color: #FFFFFF;
|
||||
font-size: 26rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.num {
|
||||
width: 45rpx;
|
||||
height: 45rpx;
|
||||
border-radius: 50%;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.text {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.img {
|
||||
width: 80vw;
|
||||
max-height: 100vh;
|
||||
}
|
||||
|
||||
.skip {
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
bottom: 300rpx;
|
||||
width: 45vw;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
border-radius: 40vh;
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
font-size: 32rpx;
|
||||
|
||||
.icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-left: 15rpx;
|
||||
}
|
||||
}
|
||||
}
|
12
component/open-ad/open-ad.wxml
Normal file
12
component/open-ad/open-ad.wxml
Normal file
@ -0,0 +1,12 @@
|
||||
<!--template/open-ad/open-ad.wxml-->
|
||||
<view class="pop" wx:if="{{ state }}">
|
||||
<view class="btn" bind:tap="jumpOver">
|
||||
<view class="num">{{ num }}</view>
|
||||
<view class="text">跳过</view>
|
||||
</view>
|
||||
<image class="img" show-menu-by-longpress src="{{ url }}" mode="widthFix"></image>
|
||||
<view class="skip" wx:if="{{ openDate.url }}" bind:tap="skip">
|
||||
<view class="text">点击查看详情</view>
|
||||
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/right-double-arrow.png"></image>
|
||||
</view>
|
||||
</view>
|
65
component/open-ad/open-ad.wxss
Normal file
65
component/open-ad/open-ad.wxss
Normal file
@ -0,0 +1,65 @@
|
||||
/* template/open-ad/open-ad.wxss */
|
||||
.pop {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
z-index: 9999999;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.pop .btn {
|
||||
position: absolute;
|
||||
top: 80rpx;
|
||||
left: 20rpx;
|
||||
width: 130rpx;
|
||||
height: 45rpx;
|
||||
line-height: 45rpx;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
border-radius: 40rpx;
|
||||
color: #FFFFFF;
|
||||
font-size: 26rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.pop .btn .num {
|
||||
width: 45rpx;
|
||||
height: 45rpx;
|
||||
border-radius: 50%;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.pop .btn .text {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
.pop .img {
|
||||
width: 80vw;
|
||||
max-height: 100vh;
|
||||
}
|
||||
.pop .skip {
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
bottom: 300rpx;
|
||||
width: 45vw;
|
||||
height: 80rpx;
|
||||
line-height: 80rpx;
|
||||
border-radius: 40vh;
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: rgba(255, 255, 255, 0.8);
|
||||
font-size: 32rpx;
|
||||
}
|
||||
.pop .skip .icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-left: 15rpx;
|
||||
}
|
301
component/perfectInformation/perfectInformation.js
Normal file
301
component/perfectInformation/perfectInformation.js
Normal file
@ -0,0 +1,301 @@
|
||||
import util from '../../utils/util'
|
||||
Component({
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
baseURl: "https://passport.gter.net",
|
||||
tab: 'usertype',
|
||||
// tab: 'cooperationCcontact',
|
||||
topTitle: '请完善个人信息后再继续操作',
|
||||
info: {},
|
||||
nickname: "",
|
||||
token: "",
|
||||
startyear: [],
|
||||
tabListUse: [],
|
||||
tabList: [
|
||||
[
|
||||
"regstage",
|
||||
"applyentryseasonyear",
|
||||
"applyentryseason",
|
||||
"planningstudycountry",
|
||||
"feelinterest",
|
||||
],
|
||||
["regregion", "startyear"],
|
||||
["regidentity", "cooperationCcontact"],
|
||||
], // 完善个人信息的 流程 数据
|
||||
submitList: ['planningstudycountry', 'feelinterest', 'startyear', 'cooperationCcontact'], // 最后一步的 tab
|
||||
nextStepList: ['planningstudycountry', 'feelinterest', 'startyear', 'cooperationCcontact'], // 切换下一步的 tab 数据
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
init() {
|
||||
let that = this
|
||||
util.wxpost("/miniprogram/Userdata").then(res => {
|
||||
if (res.data.code = 200) {
|
||||
// res.data.config[0].feelinterest = [{
|
||||
// id: 1,
|
||||
// value: '哈哈'
|
||||
// }]
|
||||
let data = res.data
|
||||
that.setData({
|
||||
config: data.config[0],
|
||||
info: data.info,
|
||||
nickname: data.nickname,
|
||||
token: data.token
|
||||
})
|
||||
let planningstudycountry = that.data.config.planningstudycountry
|
||||
let feelinterest = that.data.config.feelinterest
|
||||
for (let i = 0; i < planningstudycountry.length; i++) {
|
||||
planningstudycountry[i]['state'] = 0
|
||||
}
|
||||
if (feelinterest.length == 0) {
|
||||
let index1 = that.data.submitList.indexOf("feelinterest")
|
||||
let index2 = that.data.nextStepList.indexOf("feelinterest")
|
||||
that.data.submitList.splice(index1, 1)
|
||||
that.data.nextStepList.splice(index1, 1)
|
||||
let index = that.data.tabList[0].indexOf('feelinterest')
|
||||
that.data.tabList[0].splice(index, 1)
|
||||
} else {
|
||||
let index1 = that.data.submitList.indexOf("planningstudycountry")
|
||||
let index2 = that.data.nextStepList.indexOf("planningstudycountry")
|
||||
that.data.submitList.splice(index1, 1)
|
||||
that.data.nextStepList.splice(index2, 1)
|
||||
for (let i = 0; i < feelinterest.length; i++) {
|
||||
feelinterest[i]["state"] = 0
|
||||
}
|
||||
that.data.feelinterest = feelinterest
|
||||
}
|
||||
that.setData({
|
||||
planningstudycountry,
|
||||
feelinterest,
|
||||
startyear: that.data.config.startyear.slice(12)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 分流程
|
||||
flow(e) {
|
||||
let index = e.currentTarget.dataset.index
|
||||
let value = e.currentTarget.dataset.value
|
||||
let that = this
|
||||
if (index == 1) {
|
||||
this.setData({
|
||||
tabListUse: this.data.tabList[0]
|
||||
})
|
||||
} else if (index == 5) {
|
||||
this.setData({
|
||||
tabListUse: this.data.tabList[2]
|
||||
})
|
||||
} else {
|
||||
this.setData({
|
||||
tabListUse: this.data.tabList[1]
|
||||
})
|
||||
}
|
||||
|
||||
this.collect('usertype', value).then(res => {
|
||||
if (res.code == 200) {
|
||||
that.setData({
|
||||
tab: this.data.tabListUse[0]
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
this.data.info['usertype'] = value
|
||||
|
||||
},
|
||||
// 单项
|
||||
selectInfo(e) {
|
||||
let {
|
||||
key,
|
||||
value,
|
||||
step
|
||||
} = e.currentTarget.dataset
|
||||
if (value) {
|
||||
// this.data.info[key] = value
|
||||
let index = 'info.' + key
|
||||
this.setData({
|
||||
[index]: value
|
||||
})
|
||||
}
|
||||
|
||||
if (
|
||||
(key == "startyear" && value.length == 0) ||
|
||||
(key == "regidentity" && value.length == 0)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
if (
|
||||
(this.data.tab == "planningstudycountry" &&
|
||||
this.data.info.planningstudycountry.length == 0) ||
|
||||
(this.data.tab == "feelinterest" && this.data.info.feelinterest.length == 0)
|
||||
) {
|
||||
wx.showToast({
|
||||
title: '请选择选项',
|
||||
icon: 'error',
|
||||
})
|
||||
return;
|
||||
}
|
||||
|
||||
// 提交数据 并且 切换数据
|
||||
this.collect(key, value).then(res => {
|
||||
if (res.code == 200) {
|
||||
if (this.data.info[key] == undefined || this.data.info[key].length != 0) {
|
||||
for (let i = 0; i < this.data.tabListUse.length; i++) {
|
||||
if (this.data.tab === this.data.tabListUse[i]) {
|
||||
this.setData({
|
||||
tab: this.data.tabListUse[i + 1]
|
||||
})
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (this.data.submitList.indexOf(key) != -1) {
|
||||
this.skip()
|
||||
}
|
||||
|
||||
// 判断 是否需要修改头部的 title
|
||||
if (this.data.nextStepList.indexOf(this.data.tab) != -1) {
|
||||
this.amendTopTitle()
|
||||
}
|
||||
|
||||
} else {
|
||||
// this.$swal("请选择选项", "", "info");
|
||||
wx.showToast({
|
||||
title: '请选择选项',
|
||||
icon: 'error'
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
},
|
||||
// 1.多项
|
||||
multipleChoice(e) {
|
||||
let {
|
||||
key,
|
||||
value,
|
||||
} = e.currentTarget.dataset
|
||||
let keyList = e.currentTarget.dataset.keylist
|
||||
|
||||
// 判断是否已经选中
|
||||
if (!value.state) {
|
||||
this.data.info[key].push(value);
|
||||
} else {
|
||||
for (let i = 0; i < this.data.info[key].length; i++) {
|
||||
if (this.data.info[key][i].id == value.id) {
|
||||
this.data.info[key].splice(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (keyList) {
|
||||
for (let i = 0; i < this.data[keyList].length; i++) {
|
||||
if (this.data[keyList][i].value == value.value) {
|
||||
this.data[keyList][i]["state"] = this.data[keyList][i].state ? 0 : 1
|
||||
this.setData({
|
||||
[keyList]: this.data[keyList]
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
this.setData({
|
||||
info: this.data.info
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
bindPickerChange(e) {
|
||||
this.setData({
|
||||
'info.startyear': this.data.config.startyear[e.detail.value * 1 + 12].id
|
||||
})
|
||||
},
|
||||
|
||||
// 提交数据
|
||||
submit() {},
|
||||
|
||||
bindInput(e) {
|
||||
let value = e.detail.value
|
||||
let key = e.target.dataset.key
|
||||
let index = 'info.' + key
|
||||
this.setData({
|
||||
[index]: value
|
||||
})
|
||||
},
|
||||
|
||||
// 提示选项没选
|
||||
promptOption() {
|
||||
wx.showToast({
|
||||
title: '请选择对应的选项',
|
||||
icon: 'none'
|
||||
})
|
||||
},
|
||||
|
||||
// 点击跳转页面
|
||||
skip() {
|
||||
util.wxpost("/miniprogram/userdata/success", {
|
||||
token: this.data.token
|
||||
}).then(res => {
|
||||
console.log(res);
|
||||
})
|
||||
wx.setNavigationBarColor({
|
||||
backgroundColor: '#ffffff',
|
||||
frontColor: '#000000',
|
||||
})
|
||||
wx.showToast({
|
||||
title: '已完成,感谢操作!',
|
||||
icon: 'none',
|
||||
})
|
||||
this.triggerEvent("revampInformationState")
|
||||
},
|
||||
|
||||
// 判断是否是最后一步 需要修改 头部 topTitle
|
||||
amendTopTitle() {
|
||||
this.setData({
|
||||
topTitle: '感谢你的操作,这是最后一步'
|
||||
})
|
||||
},
|
||||
|
||||
//
|
||||
collect(step, value) {
|
||||
return new Promise((resolve, reject) => {
|
||||
util.wxpost("/miniprogram/Userdata/collect", {
|
||||
token: this.data.token,
|
||||
step: step,
|
||||
value: value
|
||||
}).then(res => {
|
||||
resolve(res)
|
||||
}).catch(res => {
|
||||
reject(res)
|
||||
})
|
||||
})
|
||||
},
|
||||
copy() {
|
||||
util.copy(this.data.config.cooperation.email, "复制成功")
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
|
||||
// 生命周期
|
||||
lifetimes: {
|
||||
attached() {
|
||||
this.init()
|
||||
wx.setNavigationBarColor({
|
||||
backgroundColor: '#ffffff',
|
||||
frontColor: '#ffffff',
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
4
component/perfectInformation/perfectInformation.json
Normal file
4
component/perfectInformation/perfectInformation.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {}
|
||||
}
|
137
component/perfectInformation/perfectInformation.wxml
Normal file
137
component/perfectInformation/perfectInformation.wxml
Normal file
@ -0,0 +1,137 @@
|
||||
<view class="mask">
|
||||
<view class="main">
|
||||
<view class="reminder">{{ topTitle }}</view>
|
||||
<view class="daBox">
|
||||
<!-- 您目前的状态? -->
|
||||
<view wx:if="{{tab == 'usertype'}}">
|
||||
<view class="Title">您目前的状态?</view>
|
||||
<!-- 目前的状态? -->
|
||||
<view class="box">
|
||||
<view class="twoLines">
|
||||
<view class="twoLines-item" wx:for="{{ config.usertype }}" wx:key="id" bindtap="flow" data-index="{{ item.id }}" data-value="{{ item.value }}">
|
||||
<i class="icon" style="background-image: url('{{ item.icon }}');"></i>
|
||||
<text>{{ item.value }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 所处阶段 -->
|
||||
<view wx:elif="{{tab == 'regstage'}}">
|
||||
<template is="twoLinesIcon" data="{{ data:config.regstage ,title:'所处阶段',key:'regstage' }}"></template>
|
||||
</view>
|
||||
|
||||
<!-- 申请入学年份 -->
|
||||
<view wx:elif="{{ tab == 'applyentryseasonyear'}}">
|
||||
<view class="Title">申请入学年份</view>
|
||||
<view class="applyentryseasonyear-box">
|
||||
<view class="applyentryseasonyear-item" wx:for="{{config.applyentryseasonyear}}" wx:key="id" bindtap="selectInfo" data-key="applyentryseasonyear" data-value="{{ item.id }}">
|
||||
{{ item.id }}<text class="nian">年</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 申请入学季节 -->
|
||||
<view wx:elif="{{ tab == 'applyentryseason'}}">
|
||||
<template is="twoLinesIcon" data="{{ data:config.applyentryseason,title:'申请入学季节',key:'applyentryseason'}}"></template>
|
||||
</view>
|
||||
|
||||
<!-- 计划留学国家/地区 -->
|
||||
<view wx:elif="{{ tab == 'planningstudycountry'}}">
|
||||
<template is="threeLines" data="{{ data:planningstudycountry,title:'计划留学国家/地区',key:'planningstudycountry' }}"></template>
|
||||
<view wx:if="{{ info.planningstudycountry.length > 0 }}" class="OK" bindtap="selectInfo" data-key="planningstudycountry" data-value="{{ info.planningstudycountry }}">OK</view>
|
||||
<view wx:else class="OK" bindtap="promptOption">OK</view>
|
||||
</view>
|
||||
|
||||
<!-- 选择你感觉兴趣的 -->
|
||||
<view wx:elif="{{ tab == 'feelinterest'}}">
|
||||
<template is="threeLines" data="{{ data:feelinterest, title:'选择你感觉兴趣的', key:'feelinterest'}}"></template>
|
||||
<view wx:if="{{ info.feelinterest.length > 0 }}" class="OK" bindtap="selectInfo" data-key="feelinterest" data-value="{{ info.feelinterest }}">OK</view>
|
||||
<view wx:else class="OK" bindtap="promptOption">OK</view>
|
||||
</view>
|
||||
|
||||
<!-- 留学国家/地区 -->
|
||||
<view wx:elif="{{ tab == 'regregion'}}">
|
||||
<view class="Title">留学国家/地区</view>
|
||||
<view class="threeLines">
|
||||
<view class="threeLines-item {{ item.state == 1 ? 'greenPitchOn' : ''}}" wx:for="{{ config.regregion }}" wx:key="id" bindtap="selectInfo" data-key="{{ 'regregion' }}" data-value="{{ item.value }}">
|
||||
{{ item.value }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 入学年份 -->
|
||||
<view wx:elif="{{ tab == 'startyear'}}">
|
||||
<view class="Title">入学年份</view>
|
||||
<view class="year-box">
|
||||
<view class="enrollmentYearline"></view>
|
||||
<view class="enrollmentYearline" style="left: 423.75rpx;"></view>
|
||||
<view class="year-item" wx:for="{{ config.startyear }}" wx:key="id" wx:if="{{index < 12}}" bindtap="selectInfo" data-key="{{'startyear'}}" data-value="{{ item.id }}">
|
||||
{{ item.id }}<text class="nian">年</text>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 其它 -->
|
||||
<view class="other">
|
||||
<label for="other">其它:</label>
|
||||
<picker class="otherPicker" bindchange="bindPickerChange" value="{{index}}" range="{{startyear}}" range-key="value">
|
||||
<input class="otherInput" id="other" model:value="{{info.startyear}}" disabled placeholder="请选择" />
|
||||
</picker>
|
||||
<view wx:if="{{info.startyear > 0}}" class="otherOK greenBj" bindtap="selectInfo" data-value="{{ info.startyear }}" data-key="startyear">OK</view>
|
||||
<view wx:else class="otherOK">OK</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 你是? -->
|
||||
<view wx:elif="{{ tab == 'regidentity'}}">
|
||||
<template is="twoLines" data="{{data:config.regidentity,title:'您是?',key:'regidentity'}}"></template>
|
||||
<!-- 其它 -->
|
||||
<view class="other">
|
||||
<label for="other">其它:</label>
|
||||
<input class="otherInput" id="other" value="" placeholder="请填写" model:value="{{info.regidentity}}" bindinput="bindInput" data-key="regidentity" />
|
||||
<view wx:if="{{info.regidentity.length > 0}}" class="otherOK greenBj'" bindtap="selectInfo" data-key="regidentity" data-value="{{info.regidentity}}">OK</view>
|
||||
<view wx:else class="'otherOK">OK</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 合作请联系 -->
|
||||
<view class="cooperationCcontact" wx:elif="{{ tab == 'cooperationCcontact'}}">
|
||||
<view class="cooperationCcontact-Title">合作请联系</view>
|
||||
<view class="cooperationCcontact-box">
|
||||
<view class="cooperationCcontact-yx">{{ config.cooperation.email }}</view>
|
||||
<view class="cooperationCcontact-btn" catchtap="copy">复制Email</view>
|
||||
</view>
|
||||
<view class="skip" bindtap="skip">知道了</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 信息中两列的模板 有图标 -->
|
||||
<template name="twoLinesIcon">
|
||||
<view class="Title">{{ title}}</view>
|
||||
<view class="twoLines">
|
||||
<view class="twoLines-item" wx:for="{{ data }}" wx:key="id" bindtap="selectInfo" data-key="{{key}}" data-value="{{ item.value }}">
|
||||
<i class="icon" style="background-image: url('{{ item.icon }}')"></i>
|
||||
<text>{{ item.value }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<!-- 信息中两列的模板 没有图标 -->
|
||||
<template name="twoLines">
|
||||
<view class="Title">{{ title}}</view>
|
||||
<view class="twoLines">
|
||||
<view class="twoLines-item" wx:for="{{ data }}" wx:key="id" bindtap="selectInfo" data-key="{{key}}" data-value="{{ item.value }}">
|
||||
<text>{{ item.value }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<!-- 信息中三列的模板 -->
|
||||
<template name="threeLines">
|
||||
<view class="Title">{{ title }}</view>
|
||||
<view class="threeLines">
|
||||
<view class="threeLines-item {{ item.state == 1 ? 'greenPitchOn' : ''}}" wx:for="{{ data }}" wx:key="id" bindtap="multipleChoice" data-key="{{ key }}" data-value="{{ item }}" data-keyList="{{ key }}">
|
||||
{{ item.value }}
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
278
component/perfectInformation/perfectInformation.wxss
Normal file
278
component/perfectInformation/perfectInformation.wxss
Normal file
@ -0,0 +1,278 @@
|
||||
.mask {
|
||||
height: 1000%;
|
||||
width: 100vw;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
/* position: absolute; */
|
||||
position: fixed;
|
||||
top: 0;
|
||||
z-index: 1004;
|
||||
}
|
||||
|
||||
.main {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
border-radius: 25rpx 25rpx 0 0;
|
||||
background-color: #fff;
|
||||
overflow: hidden;
|
||||
z-index: 9;
|
||||
}
|
||||
|
||||
.daBox {
|
||||
padding: 50rpx 65rpx 60rpx;
|
||||
}
|
||||
|
||||
.Title {
|
||||
font-size: 30rpx;
|
||||
font-weight: bold;
|
||||
margin-bottom: 50rpx;
|
||||
}
|
||||
|
||||
.box {
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.reminder {
|
||||
height: 75rpx;
|
||||
line-height: 75rpx;
|
||||
width: 100vw;
|
||||
font-size: 25rpx;
|
||||
background-color: #e0f9f1;
|
||||
color: #2dd8a2;
|
||||
text-align: center;
|
||||
/* border-radius: 50rpx 50rpx 0 0; */
|
||||
}
|
||||
|
||||
.icon {
|
||||
margin-right: 16rpx;
|
||||
display: block;
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
background-size: contain;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAES0lEQVR4nO2aXWhURxiGn5hIRUxUSEBR1Avv2m2pQgMi2EpKNVoh9qJNqReFXlgVpDeiXqkQUGmLaEEK7YVCxIChhVCspaVgU1B60yooSGktqGkVwb+akL/1YvYks9/O2T2zZ87MqvvCsGfOz/t977uzM2dnBup4vtEYIOYCYBfwOnAV+D9ADkExCOQL5XzgXIJgnGkDxgLnQkOAmPkayGEKM0IGrwXUDQidQGjUDQidQGhUMqADuAv8CazPPp1U6AI+A9pdkv7A9Jg9WgiSFpMa56QDPoB9GucIsNwRL79pxK5MuKrxXUnJBcXio/KeA14AOlFvay5NWAEMFMqrKfMzif8XaE3JW4QPgAnct4S0MIm/DbycRbDthmAhTfAqPsJ+Q9BR1M/EJ0zi75Cx+AhHDcGv+whcQJchvjfxoP65nRAJ/O0rOPApAcVHaAIOAxeBn4E3PMZuB4ZR4ocIIL4W0AzkgNmhE6njWUDQ6ShgLtBS+JxA/enyOk9YrQFNqMTnoZLXhbRox/NFXT+eZ+B9BHwJ7EW9Y9QU5gA9qGFPjsWuSx/hW2cRWlDDXtbC9fKOF2UJcZxsRA4D/wHXgFviWp8PYU0J71tnOPegUO6L43vaOXktuh7V9d/5auAXrb4kqYg0SGqAfOl4E/jRcS4yxohjfiOSTopeE/UeVKfoEi2ift8xvxFJW8DXqCYa4TXgDLAJd8PVXFG3NaADlc8LFe77C/gCy1XpBuA0pZ1YL+6m1j8R3Mcsns1ROmtVrnwbPZg0+TywBfhGnH8f+Nwi0XJI0wJy2H0Ra6MDm4fGgHcpNWEn8JEFTxyaRf2BxbPnsTNsIDpI2gdEGAN2AG9R3Gt3A19ZckmkaQE3gJdQ3+ysCvcOAWejiq0BbcD3lA5Zg5Y8JqQdBW4AJx3kEYs24BKlHUo/MNMB/znBW1NLcVmLB7gguFc54k0NH+JBLZPp/C865K4avsQD3BQxFjvmt0Yb8Ad+xAM8FHFkp+gVvsU3UrxsPkHAzRu+xYOaOtNj3csoTkW0kp34hahtsiYsFfH+SRmrKswAfiUb8XtQO0THC8cSORHzcsp4VWEj2Yg3rebuE/esFtfLvVlmshcI4BB+xJtM6BTXvovh01eHR1H/Rp3hmEgiS/HShG5x/lQMp1wdngC2psxzCjtikqsGcTs4zhrO96BmnPRzcZMh7ahvXr93EtidItcptKH+gaU1IU58DtWq+g3XZfm4DP9mSk3IAwdxsJjytoHcxoQke3cqmXCb0rkBiTgTjuPgBarLQJ7EBJuNSzOBIxS//eVRiyMrE+YZZ0IvDl7YbE2odtfWMmAbqh/YjnnBtBziTDhgyWNEUhOCbFnTYDLhJ1fklUwIumVNw2bgMdND44euyaUJPYVSC+IjzEf1H4uyIN+AWqsrN3T5bPZBUM6EZ158hDXA7xS/ip7D4f78pwULgFdQv7s66niK8QQ3olH2ufUz2wAAAABJRU5ErkJggg==);
|
||||
}
|
||||
|
||||
.twoLines {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.twoLines-item {
|
||||
border-radius: 5rpx;
|
||||
background-color: #f2f2f2;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 292rpx;
|
||||
height: 105rpx;
|
||||
line-height: 105rpx;
|
||||
margin-bottom: 30rpx;
|
||||
font-size: 25rpx;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.applyentryseasonyear-box {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.applyentryseasonyear-item,
|
||||
.year-item {
|
||||
font-size: 34rpx;
|
||||
font-weight: bolder;
|
||||
text-align: center;
|
||||
width: 292rpx;
|
||||
height: 105rpx;
|
||||
line-height: 105rpx;
|
||||
background-color: #f2f2f2;
|
||||
margin-bottom: 30rpx;
|
||||
border-radius: 5rpx;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.nian {
|
||||
font-size: 20rpx;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.threeLines {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
.threeLines-item {
|
||||
width: 192rpx;
|
||||
height: 105rpx;
|
||||
line-height: 105rpx;
|
||||
text-align: center;
|
||||
background-color: #f2f2f2;
|
||||
margin-bottom: 30rpx;
|
||||
margin-right: 18rpx;
|
||||
border-radius: 5rpx;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.threeLines-item:nth-of-type(3n) {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.OK {
|
||||
height: 90rpx;
|
||||
line-height: 90rpx;
|
||||
text-align: center;
|
||||
border-radius: 50rpx;
|
||||
color: #fff;
|
||||
background-color: #26d79f;
|
||||
margin-top: 23rpx;
|
||||
}
|
||||
|
||||
.other {
|
||||
display: flex;
|
||||
background-color: #f2f2f2;
|
||||
height: 75rpx;
|
||||
line-height: 75rpx;
|
||||
padding-left: 28rpx;
|
||||
border-radius: 5rpx;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.other .otherInput {
|
||||
line-height: 75rpx;
|
||||
height: 75rpx;
|
||||
padding-left: 14rpx;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.other .otherPicker {
|
||||
line-height: 75rpx;
|
||||
height: 75rpx;
|
||||
padding-left: 14rpx;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.other .otherOK {
|
||||
line-height: 75rpx;
|
||||
height: 75rpx;
|
||||
width: 135rpx;
|
||||
background-color: #d7d7d7;
|
||||
border-radius: 0 5rpx 5rpx 0;
|
||||
text-align: center;
|
||||
font-size: 22rpx;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.cooperationCcontact {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.QRcode {
|
||||
/* background-image: url(https://ada.xiaoapi.com/gter/yifang/images/%E3%80%905_0%E3%80%91%E5%AE%8C%E5%96%84%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF/u1036.svg); */
|
||||
background-size: cover;
|
||||
width: 195rpx;
|
||||
height: 195rpx;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.skip {
|
||||
width: 240rpx;
|
||||
height: 70rpx;
|
||||
line-height: 70rpx;
|
||||
text-align: center;
|
||||
border-radius: 50rpx;
|
||||
border: 2rpx solid #d4d4d4;
|
||||
margin: 0 auto;
|
||||
font-size: 26rpx;
|
||||
}
|
||||
|
||||
.hint {
|
||||
font-size: 21rpx;
|
||||
line-height: 21rpx;
|
||||
text-align: center;
|
||||
margin-top: 36rpx;
|
||||
}
|
||||
|
||||
.indication {
|
||||
text-align: center;
|
||||
height: 40rpx;
|
||||
line-height: 40rpx;
|
||||
background-color: #fbf6eb;
|
||||
font-size: 25rpx;
|
||||
color: #d48f29;
|
||||
padding: 0 20rpx;
|
||||
display: inline-block;
|
||||
margin: 0 auto;
|
||||
vertical-align: middle;
|
||||
margin-top: 28rpx;
|
||||
margin-bottom: 97rpx;
|
||||
border-radius: 5rpx;
|
||||
}
|
||||
|
||||
.cooperationCcontact-Title {
|
||||
margin-top: 32rpx;
|
||||
margin-bottom: 50rpx;
|
||||
font-weight: bold;
|
||||
font-size: 32rpx;
|
||||
line-height: 32rpx;
|
||||
}
|
||||
|
||||
.year-box {
|
||||
display: flex;
|
||||
position: relative;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: column;
|
||||
flex-flow: column wrap;
|
||||
place-content: space-between;
|
||||
height: 390rpx;
|
||||
margin-bottom: 50rpx;
|
||||
}
|
||||
|
||||
.enrollmentYearline {
|
||||
position: absolute;
|
||||
height: 380rpx;
|
||||
border-left: 3rpx dotted rgb(215, 215, 215);
|
||||
left: 196.25rpx;
|
||||
}
|
||||
|
||||
.year-item {
|
||||
width: 165rpx;
|
||||
height: 75rpx;
|
||||
line-height: 75rpx;
|
||||
margin-bottom: 10rpx;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.greenBj {
|
||||
background-color: rgb(38, 215, 159) !important;
|
||||
}
|
||||
|
||||
.greenPitchOn {
|
||||
background-color: rgba(38, 215, 159, 0.204) !important;
|
||||
}
|
||||
|
||||
.cooperationCcontact-box {
|
||||
height: 150rpx;
|
||||
background-color: rgb(242, 242, 242);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
margin-bottom: 50rpx;
|
||||
border-radius: 7.5rpx;
|
||||
padding: 20rpx;
|
||||
}
|
||||
|
||||
.cooperationCcontact-btn {
|
||||
width: 150rpx;
|
||||
height: 60rpx;
|
||||
line-height: 60rpx;
|
||||
font-size: 26rpx;
|
||||
background-color: rgb(51, 51, 51);
|
||||
color: #fff;
|
||||
border-radius: 750rpx;
|
||||
margin-top: 20rpx;
|
||||
}
|
73
component/projectShowText/projectShowText.js
Normal file
73
component/projectShowText/projectShowText.js
Normal file
@ -0,0 +1,73 @@
|
||||
// template/projectShowText/projectShowText.js
|
||||
var miucms = require('../../utils/miucms.js');
|
||||
let app = getApp()
|
||||
const util = require('../../utils/util')
|
||||
const common = require('../../utils/commonMethod')
|
||||
|
||||
Component({
|
||||
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
className: String,
|
||||
titleName: String,
|
||||
text: {
|
||||
type: String,
|
||||
observer(res) {
|
||||
if (res && res.length > 20) this.init()
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
text: "",
|
||||
height: 0,
|
||||
page: [],
|
||||
current: 0,
|
||||
isswiper: false,
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
init() {
|
||||
// const height = util.rpxTopx(510)
|
||||
const lineHeight = util.rpxTopx(51)
|
||||
const height = lineHeight * 10
|
||||
const query = wx.createSelectorQuery();
|
||||
query.select(`.main >>> .hide.text.${ this.data.className }`).boundingClientRect(rect => {
|
||||
const page = rect.height / height
|
||||
// console.log("rect.height", rect.height);
|
||||
let arr = []
|
||||
|
||||
for (let i = 0; i < Math.floor(page); i++) {
|
||||
arr.push(height)
|
||||
}
|
||||
|
||||
const decimalPart = parseFloat('0.' + page.toString().split('.')[1]);
|
||||
if (decimalPart > 0) arr.push(height * decimalPart)
|
||||
|
||||
this.setData({
|
||||
page: arr,
|
||||
height,
|
||||
isswiper: true,
|
||||
})
|
||||
|
||||
}).exec();
|
||||
},
|
||||
|
||||
// 招生官 轮播图 修改状态
|
||||
bindchange(e) {
|
||||
this.setData({
|
||||
current: e.detail.current
|
||||
})
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
})
|
4
component/projectShowText/projectShowText.json
Normal file
4
component/projectShowText/projectShowText.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {}
|
||||
}
|
67
component/projectShowText/projectShowText.less
Normal file
67
component/projectShowText/projectShowText.less
Normal file
@ -0,0 +1,67 @@
|
||||
/* template/projectShowText/projectShowText.wxss */
|
||||
.box {
|
||||
position: relative;
|
||||
padding-top: 30rpx;
|
||||
padding-bottom: 34.5rpx;
|
||||
|
||||
.head {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
padding-bottom: 30rpx;
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
top: -30rpx;
|
||||
width: 24rpx;
|
||||
height: 13.5rpx;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
}
|
||||
|
||||
swiper {
|
||||
height: 510rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
word-break: break-all;
|
||||
// height: 510rpx;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
line-height: 51rpx;
|
||||
white-space: pre-line;
|
||||
padding: 0 22.5rpx;
|
||||
overflow: hidden;
|
||||
width: 567rpx;
|
||||
|
||||
&.hide {
|
||||
position: absolute;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.pilot {
|
||||
margin-top: 24rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
.item {
|
||||
width: 15rpx;
|
||||
height: 6rpx;
|
||||
background-color: rgba(215, 215, 215, 1);
|
||||
border-radius: 30rpx;
|
||||
|
||||
&.pitch {
|
||||
background-color: rgba(250, 107, 17, 1);
|
||||
}
|
||||
|
||||
&:not(:last-of-type) {
|
||||
margin-right: 6rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
25
component/projectShowText/projectShowText.wxml
Normal file
25
component/projectShowText/projectShowText.wxml
Normal file
@ -0,0 +1,25 @@
|
||||
<!--template/projectShowText/projectShowText.wxml-->
|
||||
<view class="box">
|
||||
<view class style="position: relative;height: 0;width: 0;overflow: hidden;">
|
||||
<view class="hide text {{ className }}">{{ text }}</view>
|
||||
</view>
|
||||
|
||||
<view class="head" wx:if="{{ titleName }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
|
||||
{{ titleName }}
|
||||
</view>
|
||||
|
||||
<block wx:if="{{ isswiper }}">
|
||||
<swiper bindchange="bindchange" style="height: {{ page[0] }}px;">
|
||||
<swiper-item wx:for="{{ page }}" wx:key="index">
|
||||
<view class="text" style="margin-top: -{{ index * height }}px;">{{ text }}</view>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
|
||||
<view class="pilot" wx:if="{{ page.length > 1 }}">
|
||||
<view class="item {{ index == current ? 'pitch' : '' }}" wx:for="{{ page }}" wx:key="index"></view>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<view wx:else class="text" style="text-align: center;">{{ text }}</view>
|
||||
</view>
|
57
component/projectShowText/projectShowText.wxss
Normal file
57
component/projectShowText/projectShowText.wxss
Normal file
@ -0,0 +1,57 @@
|
||||
/* template/projectShowText/projectShowText.wxss */
|
||||
.box {
|
||||
position: relative;
|
||||
padding-top: 30rpx;
|
||||
padding-bottom: 34.5rpx;
|
||||
}
|
||||
.box .head {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
padding-bottom: 30rpx;
|
||||
}
|
||||
.box .head .icon {
|
||||
position: absolute;
|
||||
top: -30rpx;
|
||||
width: 24rpx;
|
||||
height: 13.5rpx;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
.box swiper {
|
||||
height: 510rpx;
|
||||
}
|
||||
.box .text {
|
||||
word-break: break-all;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
line-height: 51rpx;
|
||||
white-space: pre-line;
|
||||
padding: 0 22.5rpx;
|
||||
overflow: hidden;
|
||||
width: 567rpx;
|
||||
}
|
||||
.box .text.hide {
|
||||
position: absolute;
|
||||
height: auto;
|
||||
}
|
||||
.box .pilot {
|
||||
margin-top: 24rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.box .pilot .item {
|
||||
width: 15rpx;
|
||||
height: 6rpx;
|
||||
background-color: #d7d7d7;
|
||||
border-radius: 30rpx;
|
||||
}
|
||||
.box .pilot .item.pitch {
|
||||
background-color: #fa6b11;
|
||||
}
|
||||
.box .pilot .item:not(:last-of-type) {
|
||||
margin-right: 6rpx;
|
||||
}
|
54
component/rent-pop/rent-pop.js
Normal file
54
component/rent-pop/rent-pop.js
Normal file
@ -0,0 +1,54 @@
|
||||
// template/rent-pop/rent-pop.js
|
||||
const util = require('../../utils/util')
|
||||
const common = require('../../utils/commonMethod')
|
||||
|
||||
Component({
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
popup: {
|
||||
type: Object,
|
||||
observer(res) {
|
||||
if (!res) return
|
||||
this.setData({
|
||||
state: true,
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
state: false,
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
close() {
|
||||
this.setData({
|
||||
state: false
|
||||
})
|
||||
},
|
||||
|
||||
skip() {
|
||||
util.statistics({
|
||||
name: this.data.popup.statEvent
|
||||
})
|
||||
if (this.data.popup.applet?.appid) {
|
||||
wx.navigateToMiniProgram({
|
||||
appId: this.data.popup.applet.appid,
|
||||
path: this.data.popup.applet.path,
|
||||
})
|
||||
} else {
|
||||
common.goPage("/pages/webview/webview?url=" + encodeURIComponent(this.data.popup.url || ''))
|
||||
}
|
||||
|
||||
this.close()
|
||||
},
|
||||
}
|
||||
})
|
4
component/rent-pop/rent-pop.json
Normal file
4
component/rent-pop/rent-pop.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {}
|
||||
}
|
301
component/rent-pop/rent-pop.less
Normal file
301
component/rent-pop/rent-pop.less
Normal file
@ -0,0 +1,301 @@
|
||||
/* template/rent-pop/rent-pop.wxss */
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* 公共的 css 样式 */
|
||||
.flexflex {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flexcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flexjcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.flexacenter {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.flex1 {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.flexcolumn {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.pop {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.717647058823529);
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.box {
|
||||
width: 630rpx;
|
||||
height: 990rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: 49.5rpx;
|
||||
|
||||
transform-style: preserve-3d;
|
||||
// animation: rotateAnimation .3s;
|
||||
|
||||
@keyframes rotateAnimation {
|
||||
0% {
|
||||
transform: rotateY(180deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotateY(0deg);
|
||||
}
|
||||
}
|
||||
|
||||
.star {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.star1 {
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
top: 649.5rpx;
|
||||
left: -60rpx;
|
||||
}
|
||||
|
||||
.star2 {
|
||||
width: 72rpx;
|
||||
height: 72rpx;
|
||||
top: -85.5rpx;
|
||||
right: 66rpx;
|
||||
}
|
||||
|
||||
.star3 {
|
||||
width: 78rpx;
|
||||
height: 78rpx;
|
||||
right: -30rpx;
|
||||
bottom: -76.5rpx;
|
||||
}
|
||||
|
||||
.bj {
|
||||
width: 630rpx;
|
||||
height: 990rpx;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.city-bj {
|
||||
width: 630rpx;
|
||||
height: 517.5rpx;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: -1;
|
||||
|
||||
}
|
||||
|
||||
.head {
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
width: 300rpx;
|
||||
display: flex;
|
||||
|
||||
|
||||
.head-bj {
|
||||
position: absolute;
|
||||
left: -7.5rpx;
|
||||
top: -7.5rpx;
|
||||
width: 315rpx;
|
||||
height: 228rpx;
|
||||
transform: rotate(180deg);
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.head-box {
|
||||
height: 84rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
width: 300rpx;
|
||||
|
||||
.icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-right: 6rpx;
|
||||
}
|
||||
|
||||
.xg {
|
||||
width: 67.5rpx;
|
||||
height: 43.5rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.main {
|
||||
width: 561rpx;
|
||||
height: 843rpx;
|
||||
background: linear-gradient(180deg, rgba(247, 247, 247, 1) 1%, rgba(242, 242, 242, 1) 100%);
|
||||
border: 1rpx solid rgba(51, 51, 51, 1);
|
||||
margin-left: 40.5rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
||||
.main-bj {
|
||||
position: absolute;
|
||||
top: 10.5rpx;
|
||||
left: -10.5rpx;
|
||||
width: 561rpx;
|
||||
height: 843rpx;
|
||||
background: linear-gradient(180deg, rgba(247, 247, 247, 1) 1%, rgba(242, 242, 242, 1) 100%);
|
||||
border: 1rpx solid rgba(51, 51, 51, 1);
|
||||
z-index: -10;
|
||||
padding-top: 24rpx;
|
||||
|
||||
.title {
|
||||
width: 487.5rpx;
|
||||
height: 75rpx;
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
|
||||
.title-line {
|
||||
width: 481.5rpx;
|
||||
height: 3rpx;
|
||||
margin-bottom: 22.5rpx;
|
||||
}
|
||||
|
||||
.hint {
|
||||
width: 387rpx;
|
||||
height: 54rpx;
|
||||
margin-bottom: 28.5rpx;
|
||||
}
|
||||
|
||||
.data {
|
||||
position: relative;
|
||||
width: 480rpx;
|
||||
height: 136rpx;
|
||||
z-index: 1;
|
||||
margin-bottom: 35rpx;
|
||||
|
||||
.data-bj {
|
||||
width: 480rpx;
|
||||
height: 136rpx;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.item {
|
||||
text-align: center;
|
||||
|
||||
.value {
|
||||
font-family: 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 42rpx;
|
||||
color: #000000;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.text {
|
||||
color: #333333;
|
||||
font-size: 27rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.line {
|
||||
width: 1rpx;
|
||||
height: 94.5rpx;
|
||||
border-right: 1rpx dotted #797979;
|
||||
margin: 0 52.5rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.img-box {
|
||||
width: 480rpx;
|
||||
height: 376.5rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: 10rpx;
|
||||
|
||||
.img {
|
||||
position: absolute;
|
||||
left: -10.5rpx;
|
||||
top: -10.5rpx;
|
||||
width: 501rpx;
|
||||
height: 397.5rpx;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 22.5rpx;
|
||||
color: #555555;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
bottom: 20rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.arrows {
|
||||
.icon {
|
||||
|
||||
&:nth-child(2) {
|
||||
margin: 0 15rpx;
|
||||
}
|
||||
|
||||
width: 45rpx;
|
||||
height: 45rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
position: relative;
|
||||
width: 450rpx;
|
||||
height: 96rpx;
|
||||
background: -webkit-linear-gradient(270deg, rgba(252, 253, 206, 1) 0%, rgba(210, 213, 29, 1) 52%, rgba(251, 252, 203, 1) 100%);
|
||||
background: -moz-linear-gradient(180deg, rgba(252, 253, 206, 1) 0%, rgba(210, 213, 29, 1) 52%, rgba(251, 252, 203, 1) 100%);
|
||||
background: linear-gradient(180deg, rgba(252, 253, 206, 1) 0%, rgba(210, 213, 29, 1) 52%, rgba(251, 252, 203, 1) 100%);
|
||||
border: none;
|
||||
border-radius: 225rpx;
|
||||
|
||||
.img {
|
||||
width: 199.5rpx;
|
||||
height: 70.5rpx;
|
||||
margin-right: 18rpx;
|
||||
}
|
||||
|
||||
.arrows {
|
||||
width: 45rpx;
|
||||
height: 45rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.close {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
position: absolute;
|
||||
bottom: -100rpx;
|
||||
}
|
||||
|
||||
.imgimg {
|
||||
width: 100vw;
|
||||
height: 500rpx;
|
||||
}
|
57
component/rent-pop/rent-pop.wxml
Normal file
57
component/rent-pop/rent-pop.wxml
Normal file
@ -0,0 +1,57 @@
|
||||
<!--template/rent-pop/rent-pop.wxml-->
|
||||
<!-- <view class="pop flexcenter flexcolumn" wx:if="{{ state }}" bind:tap="close" catch:touchmove="return"> -->
|
||||
<view class="pop flexcenter flexcolumn" wx:if="{{ state }}" bind:tap="close" catch:touchmove="return">
|
||||
<block wx:if="{{ false }}">
|
||||
<view class="box flexcolumn" catch:tap="return">
|
||||
<image class="star star1" src="https://app.gter.net/image/miniApp/offer/rent-pop/star.png" mode="widthFix"></image>
|
||||
<image class="star star2" src="https://app.gter.net/image/miniApp/offer/rent-pop/star.png" mode="widthFix"></image>
|
||||
<image class="star star3" src="https://app.gter.net/image/miniApp/offer/rent-pop/star.png" mode="widthFix"></image>
|
||||
<image class="city-bj" src="https://app.gter.net/image/miniApp/offer/rent-pop/city-bj.svg" mode="widthFix"></image>
|
||||
|
||||
<image class="bj" src="https://app.gter.net/image/miniApp/offer/rent-pop/bj.svg" mode="widthFix"></image>
|
||||
<view class="head">
|
||||
<view class="head-box flexcenter">
|
||||
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/rent-pop/location.png"></image>
|
||||
<image class="xg" mode="" src="https://app.gter.net/image/miniApp/offer/rent-pop/xg.png"></image>
|
||||
</view>
|
||||
<image class="head-bj" src="https://app.gter.net/image/miniApp/offer/rent-pop/trapezoid.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
|
||||
<view class="main">
|
||||
<view class="main-bj flexacenter flexcolumn">
|
||||
<image class="title" src="https://app.gter.net/image/miniApp/offer/rent-pop/title.png"></image>
|
||||
<image class="title-line" src="https://app.gter.net/image/miniApp/offer/rent-pop/title-line.svg"></image>
|
||||
<image class="hint" src="https://app.gter.net/image/miniApp/offer/rent-pop/hint.png"></image>
|
||||
<view class="data flexcenter">
|
||||
<image class="data-bj" src="https://app.gter.net/image/miniApp/offer/rent-pop/data-bj.svg"></image>
|
||||
<view class="item">
|
||||
<view class="value">40+</view>
|
||||
<view class="text">学生公寓</view>
|
||||
</view>
|
||||
<view class="line"></view>
|
||||
<view class="item">
|
||||
<view class="value">5000+</view>
|
||||
<view class="text">真实房源</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="img-box">
|
||||
<image class="img" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/rent-pop/apartment-img.svg"></image>
|
||||
|
||||
<view class="text">@ 学生公寓实景照片</view>
|
||||
</view>
|
||||
<view class="arrows flexacenter">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/rent-pop/arrows3.png" mode="widthFix"></image>
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/rent-pop/arrows3.png" mode="widthFix"></image>
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/rent-pop/arrows3.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="btn flexcenter" catch:tap="skip">
|
||||
<image class="img" src="https://app.gter.net/image/miniApp/offer/rent-pop/btn-text.png" mode="widthFix"></image>
|
||||
<image class="arrows" src="https://app.gter.net/image/miniApp/offer/rent-pop/arrows.png" mode="widthFix"></image>
|
||||
<image class="close" catch:tap="close" src="https://app.gter.net/image/miniApp/offer/close-icon.png"></image>
|
||||
</view>
|
||||
</block>
|
||||
<image wx:else class="imgimg" src="{{ popup.image }}" mode="widthFix" catch:tap="skip"></image>
|
||||
</view>
|
251
component/rent-pop/rent-pop.wxss
Normal file
251
component/rent-pop/rent-pop.wxss
Normal file
@ -0,0 +1,251 @@
|
||||
/* template/rent-pop/rent-pop.wxss */
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
/* 公共的 css 样式 */
|
||||
.flexflex {
|
||||
display: flex;
|
||||
}
|
||||
.flexcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.flexjcenter {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.flexacenter {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.flex1 {
|
||||
flex: 1;
|
||||
}
|
||||
.flexcolumn {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.pop {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.71764706);
|
||||
z-index: 100;
|
||||
}
|
||||
.box {
|
||||
width: 630rpx;
|
||||
height: 990rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: 49.5rpx;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
@keyframes rotateAnimation {
|
||||
0% {
|
||||
transform: rotateY(180deg);
|
||||
}
|
||||
100% {
|
||||
transform: rotateY(0deg);
|
||||
}
|
||||
}
|
||||
.box .star {
|
||||
position: absolute;
|
||||
}
|
||||
.box .star1 {
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
top: 649.5rpx;
|
||||
left: -60rpx;
|
||||
}
|
||||
.box .star2 {
|
||||
width: 72rpx;
|
||||
height: 72rpx;
|
||||
top: -85.5rpx;
|
||||
right: 66rpx;
|
||||
}
|
||||
.box .star3 {
|
||||
width: 78rpx;
|
||||
height: 78rpx;
|
||||
right: -30rpx;
|
||||
bottom: -76.5rpx;
|
||||
}
|
||||
.box .bj {
|
||||
width: 630rpx;
|
||||
height: 990rpx;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
.box .city-bj {
|
||||
width: 630rpx;
|
||||
height: 517.5rpx;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
.box .head {
|
||||
position: relative;
|
||||
margin: 0 auto;
|
||||
width: 300rpx;
|
||||
display: flex;
|
||||
}
|
||||
.box .head .head-bj {
|
||||
position: absolute;
|
||||
left: -7.5rpx;
|
||||
top: -7.5rpx;
|
||||
width: 315rpx;
|
||||
height: 228rpx;
|
||||
transform: rotate(180deg);
|
||||
z-index: -1;
|
||||
}
|
||||
.box .head .head-box {
|
||||
height: 84rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
width: 300rpx;
|
||||
}
|
||||
.box .head .head-box .icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-right: 6rpx;
|
||||
}
|
||||
.box .head .head-box .xg {
|
||||
width: 67.5rpx;
|
||||
height: 43.5rpx;
|
||||
}
|
||||
.box .main {
|
||||
width: 561rpx;
|
||||
height: 843rpx;
|
||||
background: linear-gradient(180deg, #f7f7f7 1%, #f2f2f2 100%);
|
||||
border: 1rpx solid #333333;
|
||||
margin-left: 40.5rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
.box .main .main-bj {
|
||||
position: absolute;
|
||||
top: 10.5rpx;
|
||||
left: -10.5rpx;
|
||||
width: 561rpx;
|
||||
height: 843rpx;
|
||||
background: linear-gradient(180deg, #f7f7f7 1%, #f2f2f2 100%);
|
||||
border: 1rpx solid #333333;
|
||||
z-index: -10;
|
||||
padding-top: 24rpx;
|
||||
}
|
||||
.box .main .main-bj .title {
|
||||
width: 487.5rpx;
|
||||
height: 75rpx;
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
.box .main .main-bj .title-line {
|
||||
width: 481.5rpx;
|
||||
height: 3rpx;
|
||||
margin-bottom: 22.5rpx;
|
||||
}
|
||||
.box .main .main-bj .hint {
|
||||
width: 387rpx;
|
||||
height: 54rpx;
|
||||
margin-bottom: 28.5rpx;
|
||||
}
|
||||
.box .main .main-bj .data {
|
||||
position: relative;
|
||||
width: 480rpx;
|
||||
height: 136rpx;
|
||||
z-index: 1;
|
||||
margin-bottom: 35rpx;
|
||||
}
|
||||
.box .main .main-bj .data .data-bj {
|
||||
width: 480rpx;
|
||||
height: 136rpx;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
.box .main .main-bj .data .item {
|
||||
text-align: center;
|
||||
}
|
||||
.box .main .main-bj .data .item .value {
|
||||
font-family: 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 42rpx;
|
||||
color: #000000;
|
||||
text-align: center;
|
||||
}
|
||||
.box .main .main-bj .data .item .text {
|
||||
color: #333333;
|
||||
font-size: 27rpx;
|
||||
}
|
||||
.box .main .main-bj .data .line {
|
||||
width: 1rpx;
|
||||
height: 94.5rpx;
|
||||
border-right: 1rpx dotted #797979;
|
||||
margin: 0 52.5rpx;
|
||||
}
|
||||
.box .main .main-bj .img-box {
|
||||
width: 480rpx;
|
||||
height: 376.5rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
.box .main .main-bj .img-box .img {
|
||||
position: absolute;
|
||||
left: -10.5rpx;
|
||||
top: -10.5rpx;
|
||||
width: 501rpx;
|
||||
height: 397.5rpx;
|
||||
z-index: -1;
|
||||
}
|
||||
.box .main .main-bj .img-box .text {
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 22.5rpx;
|
||||
color: #555555;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
bottom: 20rpx;
|
||||
}
|
||||
.box .main .main-bj .arrows .icon {
|
||||
width: 45rpx;
|
||||
height: 45rpx;
|
||||
}
|
||||
.box .main .main-bj .arrows .icon:nth-child(2) {
|
||||
margin: 0 15rpx;
|
||||
}
|
||||
.btn {
|
||||
position: relative;
|
||||
width: 450rpx;
|
||||
height: 96rpx;
|
||||
background: -webkit-linear-gradient(270deg, #fcfdce 0%, #d2d51d 52%, #fbfccb 100%);
|
||||
background: -moz-linear-gradient(180deg, #fcfdce 0%, #d2d51d 52%, #fbfccb 100%);
|
||||
background: linear-gradient(180deg, #fcfdce 0%, #d2d51d 52%, #fbfccb 100%);
|
||||
border: none;
|
||||
border-radius: 225rpx;
|
||||
}
|
||||
.btn .img {
|
||||
width: 199.5rpx;
|
||||
height: 70.5rpx;
|
||||
margin-right: 18rpx;
|
||||
}
|
||||
.btn .arrows {
|
||||
width: 45rpx;
|
||||
height: 45rpx;
|
||||
}
|
||||
.close {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
position: absolute;
|
||||
bottom: -100rpx;
|
||||
}
|
||||
.imgimg {
|
||||
width: 100vw;
|
||||
height: 500rpx;
|
||||
}
|
67
component/territorySelect/territorySelect.js
Normal file
67
component/territorySelect/territorySelect.js
Normal file
@ -0,0 +1,67 @@
|
||||
// template/territorySelect/territorySelect.js
|
||||
Component({
|
||||
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
type: String, // major subject
|
||||
list: {
|
||||
type: Object,
|
||||
observer(res) {
|
||||
console.log("res", res);
|
||||
}
|
||||
},
|
||||
value: String,
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
titleObj: {
|
||||
major: "请选择专业",
|
||||
subject2: "请选择专业",
|
||||
subject: "请选择学科领域",
|
||||
school: "请选择学院领域",
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
select(e) {
|
||||
const key = e.currentTarget.dataset.key
|
||||
const value = e.currentTarget.dataset.value || {}
|
||||
|
||||
let yearList = []
|
||||
|
||||
|
||||
for (const key in value) {
|
||||
yearList.push(key)
|
||||
}
|
||||
|
||||
this.triggerEvent('closeselect', {
|
||||
key,
|
||||
yearList,
|
||||
})
|
||||
},
|
||||
|
||||
close() {
|
||||
this.triggerEvent('closeselect')
|
||||
},
|
||||
|
||||
// 选择学校相关的
|
||||
selectSchool(e) {
|
||||
const label = e.currentTarget.dataset.label
|
||||
const disciplineid = e.currentTarget.dataset.disciplineid
|
||||
const university = e.currentTarget.dataset.university
|
||||
this.triggerEvent('closeselect', {
|
||||
label,
|
||||
disciplineid,
|
||||
university,
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
4
component/territorySelect/territorySelect.json
Normal file
4
component/territorySelect/territorySelect.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {}
|
||||
}
|
87
component/territorySelect/territorySelect.less
Normal file
87
component/territorySelect/territorySelect.less
Normal file
@ -0,0 +1,87 @@
|
||||
/* template/territorySelect/territorySelect.wxss */
|
||||
.territory {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.705882352941177);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
.box {
|
||||
width: 100vw;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border-radius: 45rpx 45rpx 0 0;
|
||||
padding-top: 48rpx;
|
||||
padding-bottom: 80rpx;
|
||||
|
||||
.title {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
text-align: center;
|
||||
margin-bottom: 31.5rpx;
|
||||
}
|
||||
|
||||
.list {
|
||||
.item {
|
||||
height: 84rpx;
|
||||
padding-left: 37.5rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
&.pitch {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 24rpx;
|
||||
color: #9A9D02;
|
||||
}
|
||||
|
||||
&:not(:last-of-type) {
|
||||
.content {
|
||||
border-bottom: 1rpx dotted #ebebeb;
|
||||
}
|
||||
}
|
||||
|
||||
.dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
background-color: rgba(246, 246, 189, 1);
|
||||
border: 1rpx solid rgba(204, 208, 3, 1);
|
||||
border-radius: 58.5rpx;
|
||||
margin-right: 33rpx;
|
||||
}
|
||||
|
||||
.content {
|
||||
height: 100%;
|
||||
padding-right: 37.5rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
|
||||
.name {
|
||||
font-size: 27rpx;
|
||||
color: #333333;
|
||||
flex: 1;
|
||||
|
||||
}
|
||||
|
||||
.sum {
|
||||
// width: 32px;
|
||||
height: 33rpx;
|
||||
line-height: 33rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 225rpx;
|
||||
font-size: 21rpx;
|
||||
color: #026277;
|
||||
padding: 0 12rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
15
component/territorySelect/territorySelect.wxml
Normal file
15
component/territorySelect/territorySelect.wxml
Normal file
@ -0,0 +1,15 @@
|
||||
<!--template/territorySelect/territorySelect.wxml-->
|
||||
<view class="territory" catch:touchmove="return" bind:tap="close">
|
||||
<view class="box" catch:tap="return">
|
||||
<view class="title">{{ titleObj[type] }}</view>
|
||||
<scroll-view class="list" scroll-y="{{ true }}" style="max-height: 65vh;">
|
||||
<view class="item {{ value === index ? 'pitch' : '' }}" wx:for="{{ list }}" wx:key="index" catch:tap="{{ type == 'subject2' || type == 'subject' || type == 'school' ? 'selectSchool' : 'select'}}" data-key="{{ index }}" data-value="{{ item }}" data-label="{{ item.name }}" data-disciplineid="{{ item.disciplineid }}" data-university="{{ item.value }}">
|
||||
<view class="dot"></view>
|
||||
<view class="content">
|
||||
<view class="name">{{ type == 'subject2' ? item.label : (item.value || item.name || index) }}</view>
|
||||
<view class="sum" wx:if="{{ (type == 'subject' || type == 'school') && item.count > 0 }}">{{ item.count }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
72
component/territorySelect/territorySelect.wxss
Normal file
72
component/territorySelect/territorySelect.wxss
Normal file
@ -0,0 +1,72 @@
|
||||
/* template/territorySelect/territorySelect.wxss */
|
||||
.territory {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.70588235);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
}
|
||||
.territory .box {
|
||||
width: 100vw;
|
||||
background-color: #ffffff;
|
||||
border-radius: 45rpx 45rpx 0 0;
|
||||
padding-top: 48rpx;
|
||||
padding-bottom: 80rpx;
|
||||
}
|
||||
.territory .box .title {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
text-align: center;
|
||||
margin-bottom: 31.5rpx;
|
||||
}
|
||||
.territory .box .list .item {
|
||||
height: 84rpx;
|
||||
padding-left: 37.5rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.territory .box .list .item.pitch {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 24rpx;
|
||||
color: #9A9D02;
|
||||
}
|
||||
.territory .box .list .item:not(:last-of-type) .content {
|
||||
border-bottom: 1rpx dotted #ebebeb;
|
||||
}
|
||||
.territory .box .list .item .dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
background-color: #f6f6bd;
|
||||
border: 1rpx solid #ccd003;
|
||||
border-radius: 58.5rpx;
|
||||
margin-right: 33rpx;
|
||||
}
|
||||
.territory .box .list .item .content {
|
||||
height: 100%;
|
||||
padding-right: 37.5rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
}
|
||||
.territory .box .list .item .content .name {
|
||||
font-size: 27rpx;
|
||||
color: #333333;
|
||||
flex: 1;
|
||||
}
|
||||
.territory .box .list .item .content .sum {
|
||||
height: 33rpx;
|
||||
line-height: 33rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 225rpx;
|
||||
font-size: 21rpx;
|
||||
color: #026277;
|
||||
padding: 0 12rpx;
|
||||
}
|
31
component/toTop/toTop.js
Normal file
31
component/toTop/toTop.js
Normal file
@ -0,0 +1,31 @@
|
||||
// template/toTop/toTop.js
|
||||
var app = getApp()
|
||||
Component({
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
show: false
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
|
||||
toTop() {
|
||||
wx.pageScrollTo({
|
||||
scrollTop: 0,
|
||||
})
|
||||
this.triggerEvent('closeToTop')
|
||||
},
|
||||
|
||||
}
|
||||
})
|
4
component/toTop/toTop.json
Normal file
4
component/toTop/toTop.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {}
|
||||
}
|
3
component/toTop/toTop.wxml
Normal file
3
component/toTop/toTop.wxml
Normal file
@ -0,0 +1,3 @@
|
||||
<view class="to-top-btn" bindtap='toTop'>
|
||||
<image mode="widthFix" src="https://app.gter.net/image/miniApp/project/totop.png"></image>
|
||||
</view>
|
24
component/toTop/toTop.wxss
Normal file
24
component/toTop/toTop.wxss
Normal file
@ -0,0 +1,24 @@
|
||||
.to-top-btn{
|
||||
position: fixed;
|
||||
/* right: 5px; */
|
||||
right: 22rpx;
|
||||
bottom: 110px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
/* width: 50px;
|
||||
height: 50px; */
|
||||
width: 72rpx;
|
||||
height: 72rpx;
|
||||
/* line-height:50px; */
|
||||
/* border:1px solid #e4e4e4; */
|
||||
border-radius: 50%;
|
||||
background: rgba(0,0,0,0.4);
|
||||
z-index: 1003;
|
||||
}
|
||||
.to-top-btn image{
|
||||
/* width: 23px; */
|
||||
width: 32rpx;
|
||||
height: 32rpx;
|
||||
/* height: 23px; */
|
||||
}
|
50
component/wechatAlertsPop/wechatAlertsPop.js
Normal file
50
component/wechatAlertsPop/wechatAlertsPop.js
Normal file
@ -0,0 +1,50 @@
|
||||
// template/wechatAlertsPop/wechatAlertsPop.js
|
||||
import util from '../../utils/util'
|
||||
let app = getApp()
|
||||
Component({
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
capsulePopState: Boolean
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
reminderState: false, // 不再提醒的状态
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
// 点击关闭微信提醒
|
||||
cutCapsulePop() {
|
||||
this.setData({
|
||||
capsulePopState: !this.data.capsulePopState
|
||||
})
|
||||
app.globalData['iswechatmessagepush'] = 1
|
||||
},
|
||||
|
||||
// 点击不再提醒
|
||||
cutReminderSate() {
|
||||
this.setData({
|
||||
reminderState: !this.data.reminderState
|
||||
})
|
||||
util.wxpost("/miniprogram/user/rejectPopup").then(res => {})
|
||||
},
|
||||
|
||||
// 点击微信提醒的立即开启
|
||||
goReminder() {
|
||||
wx.navigateTo({
|
||||
url: '/pagesLoginRequired/pages/wechatReminder/wechatReminder',
|
||||
})
|
||||
this.setData({
|
||||
capsulePopState: false
|
||||
})
|
||||
app.globalData['iswechatmessagepush'] = 1
|
||||
}
|
||||
}
|
||||
})
|
5
component/wechatAlertsPop/wechatAlertsPop.json
Normal file
5
component/wechatAlertsPop/wechatAlertsPop.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {
|
||||
}
|
||||
}
|
18
component/wechatAlertsPop/wechatAlertsPop.wxml
Normal file
18
component/wechatAlertsPop/wechatAlertsPop.wxml
Normal file
@ -0,0 +1,18 @@
|
||||
<!-- 微信提醒的弹窗 -->
|
||||
<view class="capsulePop" wx:if="{{ capsulePopState }}">
|
||||
<view class="capsulePop-box">
|
||||
<image bindtap="cutCapsulePop" mode="widthFix" class="capsulePop-close" src="https://app.gter.net/image/miniApp/project/close.png"></image>
|
||||
<view class="capsulePop-content">
|
||||
<image mode="widthFix" class="capsulePop-img" src="https://app.gter.net/image/miniApp/offer/u92.png"></image>
|
||||
<view class="capsulePop-title">请开启消息通知</view>
|
||||
<view class="capsulePop-hint">使用微信服务号接受实时【消息提醒】</view>
|
||||
<view class="capsulePop-btn" bindtap="goReminder">立即开启</view>
|
||||
</view>
|
||||
<view class="capsulePop-operation" bindtap="cutReminderSate">
|
||||
不再提醒
|
||||
<view class="capsulePop-circle flexcenter">
|
||||
<view class="capsulePop-circle-circle" wx:if="{{ reminderState }}"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
118
component/wechatAlertsPop/wechatAlertsPop.wxss
Normal file
118
component/wechatAlertsPop/wechatAlertsPop.wxss
Normal file
@ -0,0 +1,118 @@
|
||||
/* template/wechatAlertsPop/wechatAlertsPop.wxss */
|
||||
.capsulePop {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, .5);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1100;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.capsulePop .capsulePop-box {
|
||||
position: relative;
|
||||
width: 487.4rpx;
|
||||
height: 726rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.capsulePop .capsulePop-box .capsulePop-content {
|
||||
width: 487.4rpx;
|
||||
height: 649.6rpx;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.capsulePop .capsulePop-box .capsulePop-img {
|
||||
width: 487.4rpx;
|
||||
height: 649.6rpx;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.capsulePop .capsulePop-box .capsulePop-btn {
|
||||
width: 361rpx;
|
||||
height: 73rpx;
|
||||
border-radius: 37rpx;
|
||||
background: linear-gradient(90deg, #4FE3C1, #61FEDA);
|
||||
color: #fff;
|
||||
font-size: 30rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
bottom: 65rpx;
|
||||
left: 50%;
|
||||
transform: translate(-50%);
|
||||
}
|
||||
|
||||
.capsulePop .capsulePop-box .capsulePop-hint {
|
||||
width: 300rpx;
|
||||
height: 68rpx;
|
||||
font-size: 26rpx;
|
||||
color: #555555;
|
||||
line-height: 42rpx;
|
||||
position: absolute;
|
||||
bottom: 180rpx;
|
||||
left: 50%;
|
||||
transform: translate(-50%);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.capsulePop .capsulePop-box .capsulePop-title {
|
||||
color: #323232;
|
||||
font-size: 36rpx;
|
||||
font-weight: 600;
|
||||
width: 266rpx;
|
||||
position: absolute;
|
||||
bottom: 280rpx;
|
||||
left: 50%;
|
||||
transform: translate(-50%);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.capsulePop .capsulePop-box .capsulePop-close {
|
||||
width: 44rpx;
|
||||
height: 44rpx;
|
||||
align-self: flex-end;
|
||||
margin-right: -38rpx;
|
||||
}
|
||||
|
||||
.capsulePop .capsulePop-box .capsulePop-operation {
|
||||
color: #fff;
|
||||
font-size: 31rpx;
|
||||
line-height: 42rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
align-self: center;
|
||||
margin-top: 25rpx;
|
||||
|
||||
}
|
||||
|
||||
.capsulePop .capsulePop-box .capsulePop-operation .capsulePop-circle {
|
||||
width: 28rpx;
|
||||
height: 28rpx;
|
||||
margin-left: 14rpx;
|
||||
border: 3rpx solid #fff;
|
||||
border-radius: 50%;
|
||||
position: relative;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.capsulePop .capsulePop-box .capsulePop-operation .capsulePop-circle-circle {
|
||||
width: 10rpx;
|
||||
height: 10rpx;
|
||||
background-color: #fff;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.offer {
|
||||
width: 100vw;
|
||||
}
|
97
component/xg-bottom/xg-bottom.js
Normal file
97
component/xg-bottom/xg-bottom.js
Normal file
@ -0,0 +1,97 @@
|
||||
// template/xg-bottom/xg-bottom.js
|
||||
const app = getApp()
|
||||
const util = require('../../utils/util')
|
||||
const common = require('../../utils/commonMethod')
|
||||
|
||||
Component({
|
||||
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
type: String,
|
||||
bezier: {
|
||||
type: Object,
|
||||
observer(res) {
|
||||
if (res.x == undefined) return
|
||||
this.setData({
|
||||
// amount: this.data.amount + 1,
|
||||
bezierX: res.x,
|
||||
bezierY: res.y,
|
||||
hideIcon: true,
|
||||
}, () => {
|
||||
setTimeout(() => {
|
||||
this.setData({
|
||||
jumpingState: true,
|
||||
})
|
||||
}, 10)
|
||||
})
|
||||
|
||||
const pos = this.data.pos
|
||||
setTimeout(() => {
|
||||
this.setData({
|
||||
bezierX: pos['x'],
|
||||
bezierY: pos['y'],
|
||||
})
|
||||
}, 30)
|
||||
|
||||
setTimeout(() => {
|
||||
this.setData({
|
||||
hideIcon: false,
|
||||
jumpingState: false,
|
||||
})
|
||||
}, 330)
|
||||
}
|
||||
},
|
||||
amount: Number,
|
||||
islogin: Boolean,
|
||||
sid: String,
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
typeObj: {
|
||||
index: "搜索项目",
|
||||
school: "搜索本校项目"
|
||||
},
|
||||
jumpingState: false,
|
||||
hideIcon: false,
|
||||
bezierX: 0,
|
||||
bezierY: 0,
|
||||
pos: {
|
||||
x: 321,
|
||||
y: 750,
|
||||
},
|
||||
},
|
||||
|
||||
lifetimes: {
|
||||
ready() {
|
||||
const screen_data = app.globalData.screen_data
|
||||
this.data.pos = {
|
||||
x: util.rpxTopx(630),
|
||||
y: screen_data.windowHeight - util.rpxTopx(110)
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
// 跳转搜索
|
||||
goSearch() {
|
||||
common.goPage(`/pages/search/search?type=xg&sid=${ this.data.sid }`)
|
||||
},
|
||||
|
||||
goPage(e) {
|
||||
if (!this.data.islogin) {
|
||||
this.triggerEvent('openLoginBtnState')
|
||||
return
|
||||
}
|
||||
const url = e.currentTarget.dataset.url
|
||||
common.goPage(url)
|
||||
},
|
||||
}
|
||||
})
|
4
component/xg-bottom/xg-bottom.json
Normal file
4
component/xg-bottom/xg-bottom.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {}
|
||||
}
|
92
component/xg-bottom/xg-bottom.less
Normal file
92
component/xg-bottom/xg-bottom.less
Normal file
@ -0,0 +1,92 @@
|
||||
/* template/xg-bottom/xg-bottom.wxss */
|
||||
.bottom {
|
||||
width: 660rpx;
|
||||
height: 99rpx;
|
||||
background-color: rgba(246, 246, 189, 1);
|
||||
border: 1rpx solid rgba(204, 208, 3, 1);
|
||||
border-radius: 237rpx;
|
||||
-moz-box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.0705882352941176);
|
||||
-webkit-box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.0705882352941176);
|
||||
box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.0705882352941176);
|
||||
|
||||
position: fixed;
|
||||
left: 45rpx;
|
||||
bottom: 60rpx;
|
||||
padding: 7.5rpx;
|
||||
z-index: 3;
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
|
||||
.search {
|
||||
width: 346.5rpx;
|
||||
height: 84rpx;
|
||||
background-color: #ffffff;
|
||||
border-radius: 237rpx 100rpx 100rpx 237rpx;
|
||||
border: 1rpx solid rgba(215, 215, 215, 0.8);
|
||||
padding-left: 24rpx;
|
||||
font-size: 24rpx;
|
||||
color: #AAAAAA;
|
||||
margin-right: 7.5rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.icon {
|
||||
width: 39rpx;
|
||||
height: 39rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.contrast {
|
||||
border-radius: 100rpx 237rpx 237rpx 100rpx;
|
||||
height: 84rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid rgba(215, 215, 215, 0.8);
|
||||
width: 291rpx;
|
||||
font-size: 27rpx;
|
||||
color: #333333;
|
||||
display: flex;
|
||||
// justify-content: center;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0 30rpx;
|
||||
|
||||
.text {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 45rpx;
|
||||
height: 33rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
|
||||
.amount {
|
||||
height: 33rpx;
|
||||
font-size: 21rpx;
|
||||
color: #F95D5D;
|
||||
padding: 0 12.75rpx;
|
||||
background-color: rgba(253, 243, 245, 1);
|
||||
border: 1rpx solid rgba(244, 207, 218, 1);
|
||||
border-radius: 225rpx;
|
||||
margin-left: 15rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dot {
|
||||
position: fixed;
|
||||
width: 15rpx;
|
||||
height: 15rpx;
|
||||
background-color: red;
|
||||
border-radius: 50%;
|
||||
top: -5%;
|
||||
left: -5%;
|
||||
z-index: 99;
|
||||
// transition: left .3s linear, top .3s cubic-bezier(0.5, -0.5, 1, 1);
|
||||
transition: left .3s linear, top .3s cubic-bezier(0.5, -0.5, 1, 1);
|
||||
}
|
17
component/xg-bottom/xg-bottom.wxml
Normal file
17
component/xg-bottom/xg-bottom.wxml
Normal file
@ -0,0 +1,17 @@
|
||||
<!--template/xg-bottom/xg-bottom.wxml-->
|
||||
<view class="dot {{ jumpingState ? 'jumpingState' : '' }}" wx:if="{{ hideIcon }}" style="left: {{ bezierX }}px; top: {{ bezierY }}px;"></view>
|
||||
|
||||
<view class="bottom">
|
||||
<view class="search" bind:tap="goSearch">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/search-fine.png" mode="widthFix"></image>
|
||||
{{ typeObj[type] }}
|
||||
</view>
|
||||
<view class="contrast" bind:tap="goPage" data-url="/pages/projectMy/projectMy">
|
||||
<view class="text">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/vs-icon.png" mode="widthFix"></image>
|
||||
项目对比
|
||||
</view>
|
||||
|
||||
<view wx:if="{{ amount != 0 }}" class="amount">{{ amount }}</view>
|
||||
</view>
|
||||
</view>
|
81
component/xg-bottom/xg-bottom.wxss
Normal file
81
component/xg-bottom/xg-bottom.wxss
Normal file
@ -0,0 +1,81 @@
|
||||
/* template/xg-bottom/xg-bottom.wxss */
|
||||
.bottom {
|
||||
width: 660rpx;
|
||||
height: 99rpx;
|
||||
background-color: #f6f6bd;
|
||||
border: 1rpx solid #ccd003;
|
||||
border-radius: 237rpx;
|
||||
-moz-box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.07058824);
|
||||
-webkit-box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.07058824);
|
||||
box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.07058824);
|
||||
position: fixed;
|
||||
left: 45rpx;
|
||||
bottom: 60rpx;
|
||||
padding: 7.5rpx;
|
||||
z-index: 3;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.bottom .search {
|
||||
width: 346.5rpx;
|
||||
height: 84rpx;
|
||||
background-color: #ffffff;
|
||||
border-radius: 237rpx 100rpx 100rpx 237rpx;
|
||||
border: 1rpx solid rgba(215, 215, 215, 0.8);
|
||||
padding-left: 24rpx;
|
||||
font-size: 24rpx;
|
||||
color: #AAAAAA;
|
||||
margin-right: 7.5rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.bottom .search .icon {
|
||||
width: 39rpx;
|
||||
height: 39rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
.bottom .contrast {
|
||||
border-radius: 100rpx 237rpx 237rpx 100rpx;
|
||||
height: 84rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid rgba(215, 215, 215, 0.8);
|
||||
width: 291rpx;
|
||||
font-size: 27rpx;
|
||||
color: #333333;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 0 30rpx;
|
||||
}
|
||||
.bottom .contrast .text {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.bottom .contrast .icon {
|
||||
width: 45rpx;
|
||||
height: 33rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
.bottom .contrast .amount {
|
||||
height: 33rpx;
|
||||
font-size: 21rpx;
|
||||
color: #F95D5D;
|
||||
padding: 0 12.75rpx;
|
||||
background-color: #fdf3f5;
|
||||
border: 1rpx solid #f4cfda;
|
||||
border-radius: 225rpx;
|
||||
margin-left: 15rpx;
|
||||
}
|
||||
.dot {
|
||||
position: fixed;
|
||||
width: 15rpx;
|
||||
height: 15rpx;
|
||||
background-color: red;
|
||||
border-radius: 50%;
|
||||
top: -5%;
|
||||
left: -5%;
|
||||
z-index: 99;
|
||||
transition: left 0.3s linear, top 0.3s cubic-bezier(0.5, -0.5, 1, 1);
|
||||
}
|
60
pages/index/index.js
Normal file
60
pages/index/index.js
Normal file
@ -0,0 +1,60 @@
|
||||
// index.js
|
||||
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
|
||||
|
||||
Page({
|
||||
data: {
|
||||
motto: 'Hello World',
|
||||
userInfo: {
|
||||
avatarUrl: defaultAvatarUrl,
|
||||
nickName: '',
|
||||
},
|
||||
hasUserInfo: false,
|
||||
canIUseGetUserProfile: wx.canIUse('getUserProfile'),
|
||||
canIUseNicknameComp: wx.canIUse('input.type.nickname'),
|
||||
},
|
||||
onLoad(options) {
|
||||
wx.navigateTo({
|
||||
url: '/pages/projectLibrary/projectLibrary',
|
||||
})
|
||||
},
|
||||
bindViewTap() {
|
||||
wx.navigateTo({
|
||||
url: '../logs/logs'
|
||||
})
|
||||
},
|
||||
onChooseAvatar(e) {
|
||||
const {
|
||||
avatarUrl
|
||||
} = e.detail
|
||||
const {
|
||||
nickName
|
||||
} = this.data.userInfo
|
||||
this.setData({
|
||||
"userInfo.avatarUrl": avatarUrl,
|
||||
hasUserInfo: nickName && avatarUrl && avatarUrl !== defaultAvatarUrl,
|
||||
})
|
||||
},
|
||||
onInputChange(e) {
|
||||
const nickName = e.detail.value
|
||||
const {
|
||||
avatarUrl
|
||||
} = this.data.userInfo
|
||||
this.setData({
|
||||
"userInfo.nickName": nickName,
|
||||
hasUserInfo: nickName && avatarUrl && avatarUrl !== defaultAvatarUrl,
|
||||
})
|
||||
},
|
||||
getUserProfile(e) {
|
||||
// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
|
||||
wx.getUserProfile({
|
||||
desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
|
||||
success: (res) => {
|
||||
console.log(res)
|
||||
this.setData({
|
||||
userInfo: res.userInfo,
|
||||
hasUserInfo: true
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
})
|
4
pages/index/index.json
Normal file
4
pages/index/index.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
}
|
||||
}
|
27
pages/index/index.wxml
Normal file
27
pages/index/index.wxml
Normal file
@ -0,0 +1,27 @@
|
||||
<!--index.wxml-->
|
||||
<scroll-view class="scrollarea" scroll-y type="list">
|
||||
<view class="container">
|
||||
<view class="userinfo">
|
||||
<block wx:if="{{canIUseNicknameComp && !hasUserInfo}}">
|
||||
<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
|
||||
<image class="avatar" src="{{userInfo.avatarUrl}}"></image>
|
||||
</button>
|
||||
<view class="nickname-wrapper">
|
||||
<text class="nickname-label">昵称</text>
|
||||
<input type="nickname" class="nickname-input" placeholder="请输入昵称" bind:change="onInputChange" />
|
||||
</view>
|
||||
</block>
|
||||
<block wx:elif="{{!hasUserInfo}}">
|
||||
<button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
|
||||
<view wx:else> 请使用2.10.4及以上版本基础库 </view>
|
||||
</block>
|
||||
<block wx:else>
|
||||
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
|
||||
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
|
||||
</block>
|
||||
</view>
|
||||
<view class="usermotto">
|
||||
<text class="user-motto">{{motto}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
62
pages/index/index.wxss
Normal file
62
pages/index/index.wxss
Normal file
@ -0,0 +1,62 @@
|
||||
/**index.wxss**/
|
||||
page {
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.scrollarea {
|
||||
flex: 1;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
.userinfo {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
color: #aaa;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.userinfo-avatar {
|
||||
overflow: hidden;
|
||||
width: 128rpx;
|
||||
height: 128rpx;
|
||||
margin: 20rpx;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.usermotto {
|
||||
margin-top: 200px;
|
||||
}
|
||||
|
||||
.avatar-wrapper {
|
||||
padding: 0;
|
||||
width: 56px !important;
|
||||
border-radius: 8px;
|
||||
margin-top: 40px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
display: block;
|
||||
width: 56px;
|
||||
height: 56px;
|
||||
}
|
||||
|
||||
.nickname-wrapper {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
padding: 16px;
|
||||
box-sizing: border-box;
|
||||
border-top: .5px solid rgba(0, 0, 0, 0.1);
|
||||
border-bottom: .5px solid rgba(0, 0, 0, 0.1);
|
||||
color: black;
|
||||
}
|
||||
|
||||
.nickname-label {
|
||||
width: 105px;
|
||||
}
|
||||
|
||||
.nickname-input {
|
||||
flex: 1;
|
||||
}
|
18
pages/logs/logs.js
Normal file
18
pages/logs/logs.js
Normal file
@ -0,0 +1,18 @@
|
||||
// logs.js
|
||||
const util = require('../../utils/util.js')
|
||||
|
||||
Page({
|
||||
data: {
|
||||
logs: []
|
||||
},
|
||||
onLoad() {
|
||||
this.setData({
|
||||
logs: (wx.getStorageSync('logs') || []).map(log => {
|
||||
return {
|
||||
date: util.formatTime(new Date(log)),
|
||||
timeStamp: log
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
4
pages/logs/logs.json
Normal file
4
pages/logs/logs.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
}
|
||||
}
|
6
pages/logs/logs.wxml
Normal file
6
pages/logs/logs.wxml
Normal file
@ -0,0 +1,6 @@
|
||||
<!--logs.wxml-->
|
||||
<scroll-view class="scrollarea" scroll-y type="list">
|
||||
<block wx:for="{{logs}}" wx:key="timeStamp" wx:for-item="log">
|
||||
<view class="log-item">{{index + 1}}. {{log.date}}</view>
|
||||
</block>
|
||||
</scroll-view>
|
16
pages/logs/logs.wxss
Normal file
16
pages/logs/logs.wxss
Normal file
@ -0,0 +1,16 @@
|
||||
page {
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.scrollarea {
|
||||
flex: 1;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
.log-item {
|
||||
margin-top: 20rpx;
|
||||
text-align: center;
|
||||
}
|
||||
.log-item:last-child {
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
}
|
358
pages/projectComparison/projectComparison.js
Normal file
358
pages/projectComparison/projectComparison.js
Normal file
@ -0,0 +1,358 @@
|
||||
// pages/projectComparison/projectComparison.js
|
||||
var miucms = require('../../utils/miucms.js');
|
||||
let app = getApp()
|
||||
const util = require('../../utils/util')
|
||||
const common = require('../../utils/commonMethod')
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
projectState: "", // 项目弹窗的状态 '' replace add
|
||||
screen_data: {},
|
||||
totalTopHeight: 86,
|
||||
islogin: false,
|
||||
briefness: false, // 是否开启头部的简单模式
|
||||
|
||||
isquick: false, // 快速保存按钮显示
|
||||
|
||||
list: [],
|
||||
|
||||
projectList: [],
|
||||
projectPage: 1,
|
||||
|
||||
stateObj: {
|
||||
0: "待定",
|
||||
1: "主申",
|
||||
2: "冲刺",
|
||||
3: "保底",
|
||||
},
|
||||
|
||||
showObj: {},
|
||||
|
||||
loading: true,
|
||||
|
||||
isInitFinish: false,
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
ids: [],
|
||||
onLoad(options) {
|
||||
this.ids = options.ids.split(",") || [];
|
||||
|
||||
miucms.pageStart(app).then(() => {
|
||||
const screen_data = app.globalData.screen_data
|
||||
this.setData({
|
||||
screen_data,
|
||||
totalTopHeight: screen_data.totalTopHeight,
|
||||
islogin: app.globalData.user.uid > 0 ? true : false,
|
||||
isInitFinish: true,
|
||||
})
|
||||
|
||||
if (!this.indexSidebar) this.indexSidebar = this.selectComponent('#index-sidebar')
|
||||
|
||||
common.xgBasicData(this, app).then(data => {
|
||||
let obj = {}
|
||||
const discipline = JSON.parse(JSON.stringify(data.discipline))
|
||||
discipline.forEach(element => {
|
||||
obj[element.value] = element.label
|
||||
})
|
||||
this.setData({
|
||||
disciplineObj: obj,
|
||||
})
|
||||
this.initData()
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
initData() {
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
this.setData({
|
||||
loading: true,
|
||||
})
|
||||
util.wxpost("/api/project.contrast", {
|
||||
projectid: this.ids,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
const list = data.data || []
|
||||
|
||||
let allArr = []
|
||||
list.forEach(element => allArr.push(common.decodeKey(element)))
|
||||
const obj = this.data.disciplineObj
|
||||
// console.log("discipline", obj);
|
||||
Promise.allSettled(allArr).then(res => {
|
||||
console.log("res", res);
|
||||
let list = []
|
||||
res.forEach(element => list.push(element.status === "fulfilled" ? element.value : {}));
|
||||
list.forEach(element => {
|
||||
element['tuition_fee_text'] = common.formatNumberWithSpaces(element['tuition_fee'] || '')
|
||||
|
||||
element['admission_deposit_text'] = common.formatNumberWithSpaces(element['admission_deposit'] || '')
|
||||
|
||||
if (element.language_of_instruction) {
|
||||
let strOutput = element.language_of_instruction.join(',');
|
||||
element['language_of_instruction_text'] = strOutput
|
||||
}
|
||||
|
||||
if (Array.isArray(element.english_proficiency)) {
|
||||
const english = element.english_proficiency
|
||||
let text = ""
|
||||
english.forEach(element => {
|
||||
text += `・${element.name_zh}(${element.name_en}) ${element.total}分以上 \n`
|
||||
})
|
||||
element['english_proficiency_text'] = text
|
||||
}
|
||||
|
||||
if (element.scholarship) element['scholarshipText'] = this.JudgmentScholarshipText(element.scholarship)
|
||||
element['disciplinename'] = obj[element.disciplineid] || ''
|
||||
})
|
||||
|
||||
console.log("list", list[0].disciplineid);
|
||||
this.setData({
|
||||
isquick: data.isquick,
|
||||
list,
|
||||
}, () => wx.nextTick(() => this.getAllItemHeight()))
|
||||
}).catch(err => {
|
||||
common.toast("出错了,请联系管理员。")
|
||||
})
|
||||
|
||||
}).finally(() => {
|
||||
wx.hideLoading()
|
||||
this.setData({
|
||||
loading: false,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 判断奖学金文案
|
||||
JudgmentScholarshipText(obj) {
|
||||
let text = ""
|
||||
if (obj.local && obj.nonlocal) text = '均有'
|
||||
else if (!obj.local && !obj.nonlocal) text = '均无'
|
||||
else if (obj.local && !obj.nonlocal) text = '非本地学生无'
|
||||
else if (!obj.local && obj.nonlocal) text = '非本地学生有'
|
||||
return text
|
||||
},
|
||||
|
||||
getAllItemHeight() {
|
||||
this.createSelectorQuery().selectAll(".lump .block").boundingClientRect(data => {
|
||||
let showObj = {}
|
||||
data.forEach(element => {
|
||||
const type = element.dataset?.type
|
||||
if (type != undefined && element.height > 200) {
|
||||
showObj[type] = {
|
||||
show: true,
|
||||
unfold: true,
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
this.setData({
|
||||
showObj
|
||||
})
|
||||
}).exec();
|
||||
},
|
||||
|
||||
selectIndex: null, // 选中要替换或增加的 下标
|
||||
// 点击 顶部的 增加 或者 替换 项目
|
||||
handleProject(e) {
|
||||
const type = e.currentTarget.dataset.type
|
||||
const index = e.currentTarget.dataset.index
|
||||
|
||||
this.selectIndex = index
|
||||
|
||||
this.setData({
|
||||
projectState: type,
|
||||
projectList: [],
|
||||
projectPage: 1,
|
||||
})
|
||||
|
||||
this.getListData()
|
||||
},
|
||||
|
||||
// 点击 关闭 项目弹窗
|
||||
closeProject() {
|
||||
this.setData({
|
||||
projectState: ""
|
||||
})
|
||||
},
|
||||
|
||||
// 点击 选择项目
|
||||
selectProject(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
const type = this.data.projectState
|
||||
|
||||
const projectList = this.data.projectList
|
||||
const target = projectList[index]
|
||||
|
||||
// 替换
|
||||
if (type == 'replace') this.ids[this.selectIndex] = `${target.projectid}`
|
||||
else this.ids.push(`${target.projectid}`) // 增加
|
||||
|
||||
this.initData()
|
||||
this.setData({
|
||||
projectState: "",
|
||||
})
|
||||
},
|
||||
|
||||
// 点击 删除项目
|
||||
deleteProject(e) {
|
||||
const index = e.currentTarget.dataset.index || 0
|
||||
wx.showModal({
|
||||
title: "确认删除?",
|
||||
success: res => {
|
||||
if (!res.confirm) return
|
||||
this.ids.splice(index, 1); // 从指定下标删除一个元素
|
||||
const list = this.data.list
|
||||
|
||||
list.splice(index, 1); // 从指定下标删除一个元素
|
||||
this.setData({
|
||||
list,
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 获取项目列表数据
|
||||
loading: false,
|
||||
getListData() {
|
||||
if (this.data.projectPage == 0 || this.loading) return
|
||||
this.loading = true
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
util.wxpost("/api/project.user", {
|
||||
limit: 2000,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
let list = data.data || []
|
||||
|
||||
const ids = this.ids
|
||||
list = list.filter(obj => obj.status === 1 && !ids.includes(`${obj.projectid}`));
|
||||
this.setData({
|
||||
projectList: list,
|
||||
projectPage: data.count > data.limit * data.page ? this.data.projectPage + 1 : 0,
|
||||
})
|
||||
}).finally(() => {
|
||||
wx.hideLoading()
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
|
||||
// 点击保存
|
||||
save() {
|
||||
util.wxpost("/api/project.contrast/addQuick", {
|
||||
projectid: this.ids
|
||||
}).then(res => {
|
||||
common.toast(res.message)
|
||||
this.setData({
|
||||
isquick: true,
|
||||
})
|
||||
|
||||
app.globalData['isquickState'] = true
|
||||
})
|
||||
},
|
||||
|
||||
cutShow(e) {
|
||||
const type = e.currentTarget.dataset.type
|
||||
let showObj = this.data.showObj
|
||||
showObj[type]['show'] = !showObj[type]['show']
|
||||
this.setData({
|
||||
showObj,
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
wx.stopPullDownRefresh()
|
||||
this.initData()
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
// onShareAppMessage() {
|
||||
// return {
|
||||
// title: "【寄托港校项目库】 - 项目对比",
|
||||
// }
|
||||
// },
|
||||
// onShareTimeline() {
|
||||
// util.statistics({
|
||||
// name: "share-timeline"
|
||||
// })
|
||||
// return {
|
||||
// title: "【寄托港校项目库】 - 项目对比",
|
||||
// }
|
||||
// },
|
||||
|
||||
indexSidebar: null,
|
||||
windowHeight: 812,
|
||||
onPageScroll(e) {
|
||||
const scrollTop = e.scrollTop
|
||||
let briefness = true
|
||||
if (scrollTop < 10) briefness = false
|
||||
|
||||
// 如果和 data 值 是一样的则 return
|
||||
if (this.data.briefness == briefness) return
|
||||
this.setData({
|
||||
briefness
|
||||
})
|
||||
|
||||
let sidebarState = this.indexSidebar.data.sidebarState
|
||||
if (scrollTop > this.windowHeight * 3 && sidebarState !== 3) sidebarState = 3
|
||||
|
||||
if (scrollTop < this.windowHeight * 3 && sidebarState == 3) sidebarState = 2
|
||||
|
||||
// 同一搜集 修改的 sidebarState
|
||||
if (sidebarState !== this.indexSidebar.data.sidebarState) {
|
||||
this.indexSidebar.setData({
|
||||
sidebarState
|
||||
})
|
||||
}
|
||||
|
||||
this.indexSidebar.openSidebarTwoHide()
|
||||
},
|
||||
})
|
6
pages/projectComparison/projectComparison.json
Normal file
6
pages/projectComparison/projectComparison.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
"header-nav": "/component/headerNav/headerNav",
|
||||
"index-sidebar": "/component/indexSidebar/indexSidebar"
|
||||
}
|
||||
}
|
432
pages/projectComparison/projectComparison.less
Normal file
432
pages/projectComparison/projectComparison.less
Normal file
@ -0,0 +1,432 @@
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
}
|
||||
|
||||
.container {
|
||||
min-height: 100vh;
|
||||
padding: 0 15rpx;
|
||||
}
|
||||
|
||||
.lump {
|
||||
.title {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
|
||||
.block {
|
||||
.item {
|
||||
// display: flex;
|
||||
// justify-content: center;
|
||||
// align-items: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.block {
|
||||
background-color: rgba(251, 247, 249, 1);
|
||||
border: 1rpx solid rgba(241, 241, 241, 1);
|
||||
border-radius: 12rpx;
|
||||
margin-bottom: 27rpx;
|
||||
position: relative;
|
||||
|
||||
.title {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
}
|
||||
|
||||
.item {
|
||||
&:not(:last-of-type) {
|
||||
border-right: 1rpx solid rgba(241, 241, 241, 1);
|
||||
}
|
||||
|
||||
&:nth-child(2) {
|
||||
background-color: rgba(245, 252, 253, 1);
|
||||
}
|
||||
|
||||
&:nth-child(3) {
|
||||
background-color: rgba(251, 251, 243, 1);
|
||||
}
|
||||
|
||||
.mode1 {
|
||||
// height: 60rpx;
|
||||
line-height: 60rpx;
|
||||
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 24rpx;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.mode2 {
|
||||
// height: 60rpx;
|
||||
line-height: 60rpx;
|
||||
font-size: 24rpx;
|
||||
color: #000000;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
|
||||
.mode3 {
|
||||
// height: 60rpx;
|
||||
line-height: 60rpx;
|
||||
font-size: 21rpx;
|
||||
color: #555555;
|
||||
|
||||
.amount {
|
||||
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.mode4 {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
line-height: 42rpx;
|
||||
padding: 18rpx 15rpx;
|
||||
white-space: pre-line;
|
||||
}
|
||||
|
||||
.mode6 {
|
||||
padding: 18rpx 15rpx 0;
|
||||
|
||||
.mode6-item {
|
||||
|
||||
.name {
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
|
||||
.english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
&.show {
|
||||
.item {
|
||||
height: 200px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.more {
|
||||
.more-icon {
|
||||
transform: rotate(90deg) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.unfold {
|
||||
padding-bottom: 75rpx;
|
||||
.more {
|
||||
display: flex;
|
||||
|
||||
.more-icon {
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.more {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 75rpx;
|
||||
background-color: rgba(251, 251, 251, 1);
|
||||
border-top: 1rpx solid rgba(241, 241, 241, 1);
|
||||
border-radius: 12rpx;
|
||||
display: none;
|
||||
transition: all .3s;
|
||||
|
||||
.more-icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
}
|
||||
|
||||
&.head-box {
|
||||
position: sticky;
|
||||
top: 86px;
|
||||
z-index: 1;
|
||||
|
||||
&.briefness {
|
||||
.item {
|
||||
.name {
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
|
||||
.english {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.operate {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
border-top-color: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item {
|
||||
padding-top: 24rpx;
|
||||
|
||||
.name {
|
||||
width: calc(100vw / 3 - 30rpx);
|
||||
font-weight: 650;
|
||||
font-size: 24rpx;
|
||||
color: #000000;
|
||||
padding: 0 15rpx;
|
||||
margin-bottom: 9rpx;
|
||||
}
|
||||
|
||||
.english {
|
||||
width: calc(100vw / 3 - 30rpx);
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
line-height: 24rpx;
|
||||
padding: 0 15rpx;
|
||||
margin-bottom: 27rpx;
|
||||
transition: all .3s;
|
||||
}
|
||||
|
||||
.school {
|
||||
padding: 0 15rpx;
|
||||
|
||||
.icon {
|
||||
width: 24rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
|
||||
font-size: 24rpx;
|
||||
margin-bottom: 16.5rpx;
|
||||
|
||||
.semester {
|
||||
font-size: 21rpx;
|
||||
color: #9A9D02;
|
||||
text-align: right;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.operate {
|
||||
border-top: 1rpx solid #f1f1f1;
|
||||
height: 73.5rpx;
|
||||
position: relative;
|
||||
transition: all .3s;
|
||||
|
||||
.operate-item {
|
||||
height: 100%;
|
||||
|
||||
&:not(:last-of-type) {
|
||||
// border-right: 1rpx solid #ebebeb;
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.increase {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
transform: translateX(50%);
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 73.5rpx;
|
||||
height: 73.5rpx;
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 33rpx;
|
||||
height: 33rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.end {
|
||||
padding: 45rpx 0 195rpx;
|
||||
text-align: center;
|
||||
font-size: 19.5rpx;
|
||||
color: #D7D7D7;
|
||||
}
|
||||
|
||||
.base {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100vw;
|
||||
height: 150rpx;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border-top: 1rpx solid rgba(235, 235, 235, 1);
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
|
||||
|
||||
.icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-left: 15rpx;
|
||||
margin-right: 28.5rpx;
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 255rpx;
|
||||
height: 90rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 172.5rpx;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-style: normal;
|
||||
font-size: 30rpx;
|
||||
color: #026277;
|
||||
}
|
||||
}
|
||||
|
||||
.handle-project-mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.705882352941177);
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
z-index: 99;
|
||||
|
||||
.handle-project {
|
||||
width: 100vw;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border-radius: 45rpx;
|
||||
|
||||
.title {
|
||||
margin: 0 30rpx;
|
||||
padding-top: 45rpx;
|
||||
padding-bottom: 33rpx;
|
||||
border-bottom: 1rpx dotted #ebebeb;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.scroll-view {
|
||||
.item {
|
||||
padding-top: 31.5rpx;
|
||||
padding-bottom: 30rpx;
|
||||
margin: 0 30rpx;
|
||||
justify-content: space-between;
|
||||
|
||||
&:not(:last-of-type) {
|
||||
border-bottom: 1rpx dotted #ebebeb;
|
||||
}
|
||||
|
||||
&:last-of-type {
|
||||
padding-bottom: 100rpx;
|
||||
}
|
||||
|
||||
.left {
|
||||
.name {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
|
||||
.english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
.icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 7.5rpx;
|
||||
}
|
||||
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
|
||||
.line {
|
||||
width: 1rpx;
|
||||
height: 25.5rpx;
|
||||
border-right: 1rpx solid #d7d7d7;
|
||||
margin: 0 18rpx;
|
||||
}
|
||||
|
||||
.state {
|
||||
font-size: 22.5rpx;
|
||||
color: #7F7F7F;
|
||||
width: 60rpx;
|
||||
height: 33rpx;
|
||||
background-color: rgba(240, 241, 236, 1);
|
||||
border: 1rpx solid rgba(235, 235, 235, 1);
|
||||
border-radius: 9rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 52.5rpx;
|
||||
|
||||
.icon {
|
||||
width: 30rpx;
|
||||
height: 27rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.empty {
|
||||
margin: 0 30rpx 30rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
flex-direction: column;
|
||||
height: 60vh;
|
||||
|
||||
.icon {
|
||||
width: 120rpx;
|
||||
height: 141rpx;
|
||||
margin-bottom: 40.5rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 24rpx;
|
||||
color: #7F7F7F;
|
||||
line-height: 45rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.index-sidebar {
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
}
|
290
pages/projectComparison/projectComparison.wxml
Normal file
290
pages/projectComparison/projectComparison.wxml
Normal file
@ -0,0 +1,290 @@
|
||||
<!--pages/projectComparison/projectComparison.wxml-->
|
||||
<header-nav>项目对比</header-nav>
|
||||
<view class="container" wx:if="{{ !loading }}">
|
||||
<block wx:key="index">
|
||||
<view class="block head-box flexflex {{ briefness ? 'briefness' : '' }}" style="top: {{ totalTopHeight }}px;">
|
||||
<view class="item flex1 " wx:for="{{ list }}" wx:key="index">
|
||||
<view class="name one-line-display" style="width: calc(100vw / {{ list.length }} - 30rpx);">{{ item.name_zh }}</view>
|
||||
<view class="english one-line-display" style="width: calc(100vw / {{ list.length }} - 30rpx);">{{ item.name_en }}</view>
|
||||
<view class="school flexacenter">
|
||||
<image class="icon" src="{{ item.schoollogo }}" mode="widthFix"></image>
|
||||
{{ item.schoolalias }}
|
||||
<view class="semester">{{ item.semester.text }}</view>
|
||||
</view>
|
||||
|
||||
<view class="operate flexacenter">
|
||||
<view class="operate-item flexcenter flex1" bind:tap="handleProject" data-type="replace" data-index="{{ index }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/refresh-two-icon.png" mode="widthFix"></image>
|
||||
</view>
|
||||
<view wx:if="{{ list.length == 3 }}" class="operate-item flexcenter flex1" bind:tap="deleteProject" data-index="{{ index }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/delete-gray.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
<view wx:if="{{ index == 0 && list.length == 2 }}" class="increase flexcenter" bind:tap="handleProject" data-type="add" data-index="{{ index }}">
|
||||
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/plus-case.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">专业排名</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template is="mode1" data="{{ text: item.rank || '-' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">学校合排名</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<!-- <template is="mode2" data="{{ text: item.rankingsMin || '-' }}"></template> -->
|
||||
<template is="mode2" data="{{ text: item.rankings[0].rank || '-' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">学科领域</view>
|
||||
<view class="block flexflex {{ showObj['disciplinename']['unfold'] ? 'unfold' : '' }} {{ showObj['disciplinename']['show'] ? 'show' : '' }}" data-type="disciplinename">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template wx:if="{{ item.disciplinename }}" is="mode2" data="{{ text: item.disciplinename }}"></template>
|
||||
<template wx:else is="mode2" data="{{ text: '-'}}"></template>
|
||||
</view>
|
||||
<view class="more flexcenter" bind:tap="cutShow" data-type="disciplinename">
|
||||
<image class="more-icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">学费</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template wx:if="{{ item.tuition_fee_text }}" is="mode3" data="{{ text: item.tuition_fee_text || '-' }}"></template>
|
||||
<template wx:else is="mode2" data="{{ text: '待确认' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">入学保证金</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template is="mode3" data="{{ text: item.admission_deposit_text || '-' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">奖学金</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template is="mode2" data="{{ text: item.scholarshipText || '-' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">一般学习时长</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template is="mode2" data="{{ text: item.ft_normal_period || '-' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">授课语言</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1 flexcenter" wx:for="{{ list }}" wx:key="index">
|
||||
<template is="mode2" data="{{ text: item.language_of_instruction_text || '-' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">专业方向</view>
|
||||
<view class="block flexflex {{ showObj['concentration']['unfold'] ? 'unfold' : '' }} {{ showObj['concentration']['show'] ? 'show' : '' }}" data-type="concentration">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template wx:if="{{ item.concentration }}" is="mode4" data="{{ text: item.concentration }}"></template>
|
||||
<template wx:else is="mode2" data="{{ text: '-' }}"></template>
|
||||
</view>
|
||||
<view class="more flexcenter" bind:tap="cutShow" data-type="concentration">
|
||||
<image class="more-icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">学术要求</view>
|
||||
<view class="block flexflex {{ showObj['entrance_requirements']['unfold'] ? 'unfold' : '' }} {{ showObj['entrance_requirements']['show'] ? 'show' : '' }}" data-type="entrance_requirements">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template wx:if="{{ item.entrance_requirements }}" is="mode4" data="{{ text: item.entrance_requirements }}"></template>
|
||||
<template wx:else is="mode2" data="{{ text: '-'}}"></template>
|
||||
</view>
|
||||
<view class="more flexcenter" bind:tap="cutShow" data-type="entrance_requirements">
|
||||
<image class="more-icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">英语能力要求</view>
|
||||
<view class="block flexflex {{ showObj['english_proficiency_text']['unfold'] ? 'unfold' : '' }} {{ showObj['english_proficiency_text']['show'] ? 'show' : '' }}" data-type="english_proficiency_text">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template wx:if="{{ item.english_proficiency_text }}" is="mode4" data="{{ text: item.english_proficiency_text }}"></template>
|
||||
<template wx:else is="mode2" data="{{ text: '-'}}"></template>
|
||||
</view>
|
||||
<view class="more flexcenter" bind:tap="cutShow" data-type="english_proficiency_text">
|
||||
<image class="more-icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">必要文件</view>
|
||||
<view class="block flexflex {{ showObj['documents_required']['unfold'] ? 'unfold' : '' }} {{ showObj['documents_required']['show'] ? 'show' : '' }}" data-type="documents_required">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template wx:if="{{ item.documents_required }}" is="mode4" data="{{ text: item.documents_required }}"></template>
|
||||
<template wx:else is="mode2" data="{{ text: '-'}}"></template>
|
||||
</view>
|
||||
<view class="more flexcenter" bind:tap="cutShow" data-type="documents_required">
|
||||
<image class="more-icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">专业认证</view>
|
||||
<view class="block flexflex {{ showObj['accreditation']['unfold'] ? 'unfold' : '' }} {{ showObj['accreditation']['show'] ? 'show' : '' }}" data-type="accreditation">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template wx:if="{{ item.accreditation }}" is="mode4" data="{{ text: item.accreditation }}"></template>
|
||||
<template wx:else is="mode2" data="{{ text: '-'}}"></template>
|
||||
</view>
|
||||
|
||||
<view class="more flexcenter" bind:tap="cutShow" data-type="accreditation">
|
||||
<image class="more-icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">是否含论文课程</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template is="mode2" data="{{ text: item.has_dissertation_course ? '是' : '否' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">是否含项目课程</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template is="mode2" data="{{ text: item.has_project_course ? '是' : '否' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">是否含实习课程</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template is="mode2" data="{{ text: item.has_placement_course ? '是' : '否' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lump">
|
||||
<view class="title">录取通知时间</view>
|
||||
<view class="block flexflex">
|
||||
<view class="item flex1" wx:for="{{ list }}" wx:key="index">
|
||||
<template wx:if="{{ item.result_date }}" is="mode4" data="{{ text: item.result_date }}"></template>
|
||||
<template wx:else is="mode2" data="{{ text: '-' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="end flexcenter">- End -</view>
|
||||
|
||||
<view class="base flexcenter" wx:if="{{ !isquick }}">
|
||||
保存该组对比,方便下次快速查看
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/arrows-black-straight.png" mode="widthFix"></image>
|
||||
<view class="btn flexcenter" bind:tap="save">保存</view>
|
||||
</view>
|
||||
|
||||
<view class="handle-project-mask" wx:if="{{ projectState }}" bind:tap="closeProject" catch:touchmove="return">
|
||||
<view class="handle-project" catch:touchmove="return" catch:tap="return">
|
||||
<view class="title">{{ projectState == 'replace' ? '请选择替换的项目' : '还可以增加1个项目' }}</view>
|
||||
<scroll-view class="scroll-view" scroll-y="{{ true }}" style="height: 70vh;">
|
||||
<block wx:for="{{ projectList }}" wx:key="index">
|
||||
<view class="item flexacenter" wx:if="{{ item.status == 1 }}">
|
||||
<view class="left flex1">
|
||||
<view class="name">{{ item.name_zh }}</view>
|
||||
<view class="english">{{ item.name_en }}</view>
|
||||
<view class="bottom flexacenter">
|
||||
<image class="icon" src="{{ item.schoollogo }}" mode="widthFix"></image>
|
||||
{{ item.schoolalias }}
|
||||
<block wx:if="{{ item.ismanage == 1 }}">
|
||||
<view class="line"></view>
|
||||
<view class="state flexcenter">{{ stateObj[item.typeid] }}</view>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
<view class="btn flexcenter" catch:tap="selectProject" data-index="{{ index }}">
|
||||
<image wx:if="{{ projectState == 'replace' }}" class="icon" src="https://app.gter.net/image/miniApp/offer/replace-icon.png" mode="widthFix"></image>
|
||||
<image wx:else class="icon" src="https://app.gter.net/image/miniApp/offer/arrows-straight-dark-cyan.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<view class="empty flexcenter" wx:if="{{ projectList.length == 0 }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/empty-icon.png" mode="widthFix"></image>
|
||||
<view class="text">暂无数据</view>
|
||||
</view>
|
||||
<view class="item"></view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<index-sidebar id="index-sidebar" class="index-sidebar" sidebarType="xg" isInitFinish="{{ isInitFinish }}" bind:openLogin="openLoginBtnState" islogin="{{ islogin }}"></index-sidebar>
|
||||
|
||||
<!-- 居中 粗体 -->
|
||||
<template name="mode1">
|
||||
<view class="mode1 flexcenter">{{ text }}</view>
|
||||
</template>
|
||||
|
||||
<!-- 居中 -->
|
||||
<template name="mode2">
|
||||
<view class="mode2 flexcenter">{{ text }}</view>
|
||||
</template>
|
||||
|
||||
<!-- 居中 金钱 -->
|
||||
<template name="mode3">
|
||||
<view class="mode3 flexcenter">
|
||||
<view class="amount">{{ text }}</view>
|
||||
HK$
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<!-- 正常显示文本 -->
|
||||
<template name="mode4">
|
||||
<view class="mode4">{{ text || ' - '}}</view>
|
||||
</template>
|
||||
|
||||
<!-- 居中 显示一条横杠 -->
|
||||
<template name="mode5">
|
||||
<view class="mode5 flexcenter">-</view>
|
||||
</template>
|
||||
|
||||
<template name="mode6">
|
||||
<view class="mode6">
|
||||
<view class="mode6-item" wx:for="{{ 5 }}" wx:key="index">
|
||||
<view class="name">金融计算</view>
|
||||
<view class="english">Financial Computing</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
336
pages/projectComparison/projectComparison.wxss
Normal file
336
pages/projectComparison/projectComparison.wxss
Normal file
@ -0,0 +1,336 @@
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
}
|
||||
.container {
|
||||
min-height: 100vh;
|
||||
padding: 0 15rpx;
|
||||
}
|
||||
.lump .title {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
.block {
|
||||
background-color: #fbf7f9;
|
||||
border: 1rpx solid #f1f1f1;
|
||||
border-radius: 12rpx;
|
||||
margin-bottom: 27rpx;
|
||||
position: relative;
|
||||
}
|
||||
.block .title {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
}
|
||||
.block .item:not(:last-of-type) {
|
||||
border-right: 1rpx solid #f1f1f1;
|
||||
}
|
||||
.block .item:nth-child(2) {
|
||||
background-color: #f5fcfd;
|
||||
}
|
||||
.block .item:nth-child(3) {
|
||||
background-color: #fbfbf3;
|
||||
}
|
||||
.block .item .mode1 {
|
||||
line-height: 60rpx;
|
||||
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 24rpx;
|
||||
color: #000000;
|
||||
}
|
||||
.block .item .mode2 {
|
||||
line-height: 60rpx;
|
||||
font-size: 24rpx;
|
||||
color: #000000;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
.block .item .mode3 {
|
||||
line-height: 60rpx;
|
||||
font-size: 21rpx;
|
||||
color: #555555;
|
||||
}
|
||||
.block .item .mode3 .amount {
|
||||
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
.block .item .mode4 {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
line-height: 42rpx;
|
||||
padding: 18rpx 15rpx;
|
||||
white-space: pre-line;
|
||||
}
|
||||
.block .item .mode6 {
|
||||
padding: 18rpx 15rpx 0;
|
||||
}
|
||||
.block .item .mode6 .mode6-item .name {
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
.block .item .mode6 .mode6-item .english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
.block.show .item {
|
||||
height: 200px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.block.show .more .more-icon {
|
||||
transform: rotate(90deg) !important;
|
||||
}
|
||||
.block.unfold {
|
||||
padding-bottom: 75rpx;
|
||||
}
|
||||
.block.unfold .more {
|
||||
display: flex;
|
||||
}
|
||||
.block.unfold .more .more-icon {
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
.block .more {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 75rpx;
|
||||
background-color: #fbfbfb;
|
||||
border-top: 1rpx solid #f1f1f1;
|
||||
border-radius: 12rpx;
|
||||
display: none;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.block .more .more-icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
.block.head-box {
|
||||
position: sticky;
|
||||
top: 86px;
|
||||
z-index: 1;
|
||||
}
|
||||
.block.head-box.briefness .item .name {
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
.block.head-box.briefness .item .english {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.block.head-box.briefness .item .operate {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
border-top-color: transparent;
|
||||
}
|
||||
.block.head-box .item {
|
||||
padding-top: 24rpx;
|
||||
}
|
||||
.block.head-box .item .name {
|
||||
width: calc(100vw / 3 - 30rpx);
|
||||
font-weight: 650;
|
||||
font-size: 24rpx;
|
||||
color: #000000;
|
||||
padding: 0 15rpx;
|
||||
margin-bottom: 9rpx;
|
||||
}
|
||||
.block.head-box .item .english {
|
||||
width: calc(100vw / 3 - 30rpx);
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
line-height: 24rpx;
|
||||
padding: 0 15rpx;
|
||||
margin-bottom: 27rpx;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.block.head-box .item .school {
|
||||
padding: 0 15rpx;
|
||||
font-size: 24rpx;
|
||||
margin-bottom: 16.5rpx;
|
||||
}
|
||||
.block.head-box .item .school .icon {
|
||||
width: 24rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.block.head-box .item .school .semester {
|
||||
font-size: 21rpx;
|
||||
color: #9A9D02;
|
||||
text-align: right;
|
||||
flex: 1;
|
||||
}
|
||||
.block.head-box .item .operate {
|
||||
border-top: 1rpx solid #f1f1f1;
|
||||
height: 73.5rpx;
|
||||
position: relative;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.block.head-box .item .operate .operate-item {
|
||||
height: 100%;
|
||||
}
|
||||
.block.head-box .item .operate .operate-item .icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
}
|
||||
.block.head-box .item .operate .increase {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
transform: translateX(50%);
|
||||
}
|
||||
.block.head-box .item .operate .increase::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
width: 73.5rpx;
|
||||
height: 73.5rpx;
|
||||
}
|
||||
.block.head-box .item .operate .increase .icon {
|
||||
width: 33rpx;
|
||||
height: 33rpx;
|
||||
}
|
||||
.end {
|
||||
padding: 45rpx 0 195rpx;
|
||||
text-align: center;
|
||||
font-size: 19.5rpx;
|
||||
color: #D7D7D7;
|
||||
}
|
||||
.base {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100vw;
|
||||
height: 150rpx;
|
||||
background-color: #f6f6f6;
|
||||
border-top: 1rpx solid #ebebeb;
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
}
|
||||
.base .icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-left: 15rpx;
|
||||
margin-right: 28.5rpx;
|
||||
}
|
||||
.base .btn {
|
||||
width: 255rpx;
|
||||
height: 90rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 172.5rpx;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-style: normal;
|
||||
font-size: 30rpx;
|
||||
color: #026277;
|
||||
}
|
||||
.handle-project-mask {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.70588235);
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
z-index: 99;
|
||||
}
|
||||
.handle-project-mask .handle-project {
|
||||
width: 100vw;
|
||||
background-color: #ffffff;
|
||||
border-radius: 45rpx;
|
||||
}
|
||||
.handle-project-mask .handle-project .title {
|
||||
margin: 0 30rpx;
|
||||
padding-top: 45rpx;
|
||||
padding-bottom: 33rpx;
|
||||
border-bottom: 1rpx dotted #ebebeb;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
text-align: center;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item {
|
||||
padding-top: 31.5rpx;
|
||||
padding-bottom: 30rpx;
|
||||
margin: 0 30rpx;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item:not(:last-of-type) {
|
||||
border-bottom: 1rpx dotted #ebebeb;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item:last-of-type {
|
||||
padding-bottom: 100rpx;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item .left .name {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item .left .english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item .left .bottom {
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item .left .bottom .icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 7.5rpx;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item .left .bottom .line {
|
||||
width: 1rpx;
|
||||
height: 25.5rpx;
|
||||
border-right: 1rpx solid #d7d7d7;
|
||||
margin: 0 18rpx;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item .left .bottom .state {
|
||||
font-size: 22.5rpx;
|
||||
color: #7F7F7F;
|
||||
width: 60rpx;
|
||||
height: 33rpx;
|
||||
background-color: #f0f1ec;
|
||||
border: 1rpx solid #ebebeb;
|
||||
border-radius: 9rpx;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item .btn {
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 52.5rpx;
|
||||
}
|
||||
.handle-project-mask .handle-project .scroll-view .item .btn .icon {
|
||||
width: 30rpx;
|
||||
height: 27rpx;
|
||||
}
|
||||
.empty {
|
||||
margin: 0 30rpx 30rpx;
|
||||
background-color: #ffffff;
|
||||
flex-direction: column;
|
||||
height: 60vh;
|
||||
}
|
||||
.empty .icon {
|
||||
width: 120rpx;
|
||||
height: 141rpx;
|
||||
margin-bottom: 40.5rpx;
|
||||
}
|
||||
.empty .text {
|
||||
font-size: 24rpx;
|
||||
color: #7F7F7F;
|
||||
line-height: 45rpx;
|
||||
}
|
||||
.index-sidebar {
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
}
|
729
pages/projectDetails/projectDetails.js
Normal file
729
pages/projectDetails/projectDetails.js
Normal file
@ -0,0 +1,729 @@
|
||||
// pages/projectDetails/projectDetails.js
|
||||
var miucms = require('../../utils/miucms.js');
|
||||
let app = getApp()
|
||||
const util = require('../../utils/util')
|
||||
const common = require('../../utils/commonMethod')
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
informationState: false, // 授权后可能需要弹出完成信息框 个人背景那些
|
||||
islogin: false,
|
||||
isloginBtnState: false,
|
||||
|
||||
isFirstPattern: true,
|
||||
screen_data: {},
|
||||
totalTopHeight: 82,
|
||||
|
||||
admissionCurrent: 0, // 招生官 轮播图的下标
|
||||
admissionState: false, // 招生官 弹窗的状态
|
||||
|
||||
stateState: false, // 底部状态显示状态
|
||||
|
||||
headHeight: 0, // 头部 高度
|
||||
rpx150: 150,
|
||||
index: 0,
|
||||
current: {},
|
||||
|
||||
headerObj: {
|
||||
ranking: "专业排名",
|
||||
brief: "简介",
|
||||
},
|
||||
|
||||
info: {},
|
||||
|
||||
remark: "", // 备注
|
||||
keyboardHeight: 0, // 键盘高度
|
||||
remarkInput: "", // 备注输入文本
|
||||
remarkFocus: false, // 备注输入框焦点状态
|
||||
|
||||
isadmission: 0, // 是否是招生官项目
|
||||
urls: [], // 招生官项目
|
||||
|
||||
uniqid: "",
|
||||
info: {},
|
||||
|
||||
side: {
|
||||
pivotal: "关键信息",
|
||||
basic: "基本信息",
|
||||
apply: "申请信息",
|
||||
attend: "就读信息",
|
||||
graduate: "毕业&就业",
|
||||
consult: "录取参考",
|
||||
issue: "常见问题",
|
||||
links: "相关链接",
|
||||
},
|
||||
|
||||
|
||||
sideKey: "pivotal", // 侧边栏选中 key
|
||||
|
||||
course: {}, // 课程
|
||||
|
||||
scrollTop: 0,
|
||||
|
||||
contras: {}, //
|
||||
|
||||
stateObj: {
|
||||
0: "待定",
|
||||
1: "主申",
|
||||
2: "冲刺",
|
||||
3: "保底",
|
||||
},
|
||||
|
||||
rankingsObj: {}, // 排名对象
|
||||
|
||||
studyMode: 'ft', // 学习模式显示状态 ft 全日制 pt 兼读制
|
||||
|
||||
moldObj: {
|
||||
1: "直播",
|
||||
2: "回放",
|
||||
3: "答疑"
|
||||
},
|
||||
|
||||
isInitFinish: false,
|
||||
|
||||
sideFixed: false,
|
||||
rpx30: 30,
|
||||
user: {},
|
||||
offerList: []
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
options: {},
|
||||
onLoad(options) {
|
||||
this.options = options
|
||||
miucms.pageStart(app).then(() => {
|
||||
const screen_data = app.globalData.screen_data || {}
|
||||
this.setData({
|
||||
screen_data,
|
||||
totalTopHeight: screen_data.totalTopHeight,
|
||||
islogin: app.globalData.user.uid > 0 ? true : false,
|
||||
uniqid: options.uniqid,
|
||||
rpx150: util.rpxTopx(150),
|
||||
rpx30: util.rpxTopx(30),
|
||||
user: app.globalData.user,
|
||||
})
|
||||
|
||||
this.windowHeight = screen_data.windowHeight || 812
|
||||
|
||||
common.xgBasicData(this, app).then(data => {
|
||||
this.setData({
|
||||
rankingsObj: data.rankings,
|
||||
})
|
||||
|
||||
this.getData()
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
getData() {
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
util.wxpost("/api/project.detail", {
|
||||
uniqid: this.data.uniqid,
|
||||
query: {
|
||||
...this.options
|
||||
},
|
||||
}).then(res => {
|
||||
const data = res.data
|
||||
common.decodeKey(data.info).then(res => {
|
||||
console.log("res", res);
|
||||
data.info = res
|
||||
|
||||
let course = {
|
||||
required: [],
|
||||
requiredCount: 0,
|
||||
elective: [],
|
||||
electiveCount: 0,
|
||||
}
|
||||
|
||||
const info = data.info || {}
|
||||
|
||||
const fields = ['tuition_fee', 'tuition_fee_per_credit', 'application_fee', 'admission_deposit'];
|
||||
fields.forEach(field => {
|
||||
const textKey = `${field}_text`;
|
||||
info[textKey] = common.formatNumberWithSpaces(info[field] || '');
|
||||
});
|
||||
|
||||
const curriculum = info.curriculum || []
|
||||
|
||||
if (info.language_of_instruction) {
|
||||
let strOutput = info.language_of_instruction.join(',');
|
||||
info['language_of_instruction_text'] = strOutput
|
||||
}
|
||||
|
||||
curriculum.forEach(element => {
|
||||
if (element.credit == 'N/A') element.credit = 0
|
||||
element.type === '必修课' ? (course.required.push(element), course.requiredCount += element.credit) : (course.elective.push(element), course.electiveCount += element.credit);
|
||||
})
|
||||
|
||||
let contras = data.contras
|
||||
if (Array.isArray(contras)) contras = {}
|
||||
const remark = contras.remarks || ''
|
||||
// 算出最后申请时间
|
||||
info['application_end'] = this.calculateApplicaDeadline(info.nonlocal_application_end || {})
|
||||
// 算出面试轮时间
|
||||
info['interviewRounds'] = this.calculateInterviewRound(info.nonlocal_application_end || {})
|
||||
|
||||
if (typeof info.mode_of_study == "string") info.mode_of_study = JSON.parse(info.mode_of_study)
|
||||
|
||||
let side = this.data.side
|
||||
// 判断是否常见问题 ,没有则删除左侧
|
||||
if (!info.faq || info.faq.length == 0) delete side.issue
|
||||
|
||||
// 判断 毕业就业 没有则删除左侧
|
||||
if (!info.award_zh && !info.graduation_requirements && !info.domains && !info.employers && !info.positions) delete side.graduate
|
||||
|
||||
// 判断奖学金文案
|
||||
if (info.scholarship) info['scholarshipText'] = this.JudgmentScholarshipText(info.scholarship)
|
||||
|
||||
if (info.leaflet_url) {
|
||||
const leaflet_url = decodeURIComponent(info.leaflet_url)
|
||||
const urlWithoutParams = leaflet_url.split('?')[0];
|
||||
const urlParts = urlWithoutParams.split('/');
|
||||
const fileName = urlParts[urlParts.length - 1];
|
||||
info['leaflet_name'] = fileName
|
||||
}
|
||||
|
||||
const isadmission = info.admissionsproject || 0
|
||||
if (isadmission == 1) this.getAdmissionList()
|
||||
|
||||
const date = new Date()
|
||||
const month = date.getMonth() + 1
|
||||
const year = date.getFullYear()
|
||||
const semester = info.semester || {}
|
||||
if (month > semester.month && year + 1 <= semester.year) info['semesterState'] = true
|
||||
|
||||
let scores = info.language_proficiency_scores || []
|
||||
console.log(scores);
|
||||
const scoresList = scores
|
||||
.map(element => {
|
||||
let text = ""
|
||||
if (["GMAT", "GMAT Focus Edition"].includes(element.name_zh)) text = `Verbal Reasoning ${element.verbal_reasoning} 分以上`
|
||||
else if (["IELTS Academic", "TOEFL-iBT", "TOEFL-pBT"].includes(element.name_en)) {
|
||||
const fields = {
|
||||
total: "总分",
|
||||
reading: "阅读",
|
||||
speaking: "口语",
|
||||
writing: "写作",
|
||||
listening: "听力",
|
||||
}
|
||||
|
||||
let scores = [element.reading, element.speaking, element.writing, element.listening]
|
||||
|
||||
if (scores.length == 4 && scores.every(score => score !== undefined && score > 0 && score === scores[0])) {
|
||||
text = `总分 ${element.total} 分以上,各项分数不低于 ${scores[0]} 分`
|
||||
} else {
|
||||
for (const [key, label] of Object.entries(fields)) {
|
||||
if (element[key]) text += `${label} ${element[key]} 分以上、`
|
||||
}
|
||||
if (text.endsWith("、")) text = text.slice(0, -1)
|
||||
}
|
||||
|
||||
} else if (element.total && /^[A-Za-z]+$/.test(element.total)) text = `等级 ${element.total} 以上`
|
||||
else if (element.total) text = `总分 ${element.total} 分以上`
|
||||
return text ? {
|
||||
name: element.name_zh,
|
||||
text
|
||||
} : null
|
||||
})
|
||||
.filter(item => item !== null)
|
||||
|
||||
info["scoresList"] = scoresList
|
||||
|
||||
this.getOfferData(info.id)
|
||||
|
||||
// 判断相关链接
|
||||
if (!info.leaflet_url && !info.program_url && !info.catalog_url) delete side.links
|
||||
|
||||
this.setData({
|
||||
info,
|
||||
course,
|
||||
contras,
|
||||
remark,
|
||||
side,
|
||||
isadmission,
|
||||
sideKey: "pivotal", // pivotal
|
||||
isInitFinish: true,
|
||||
}, () => {
|
||||
setTimeout(() => {
|
||||
this.getHeadHeight()
|
||||
this.getIndexHeight()
|
||||
}, 500)
|
||||
})
|
||||
|
||||
}).catch(err => common.toast("出错了,请联系管理员。"))
|
||||
}).finally(() => {
|
||||
wx.hideLoading()
|
||||
})
|
||||
},
|
||||
|
||||
// 判断奖学金文案
|
||||
JudgmentScholarshipText(obj) {
|
||||
let text = ""
|
||||
if (obj.local && obj.nonlocal) text = '均有'
|
||||
else if (!obj.local && !obj.nonlocal) text = '均无'
|
||||
else if (obj.local && !obj.nonlocal) text = '非本地学生无'
|
||||
else if (!obj.local && obj.nonlocal) text = '非本地学生有'
|
||||
return text
|
||||
},
|
||||
|
||||
// 计算出外地申请截止时间
|
||||
calculateApplicaDeadline(obj) {
|
||||
// 初始化变量来存储最大时间点的属性和日期
|
||||
let maxDate = null;
|
||||
// 遍历对象的属性
|
||||
for (const item in obj) {
|
||||
// 如果当前日期是最大日期或是第一个日期,则更新最大日期和属性
|
||||
if (maxDate === null || obj[item] > maxDate) maxDate = obj[item];
|
||||
}
|
||||
return maxDate
|
||||
},
|
||||
|
||||
// 计算出面试轮的数组
|
||||
calculateInterviewRound(obj) {
|
||||
let rounds = [];
|
||||
const chineseNumbers = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十"];
|
||||
|
||||
const formatTime = (time, index) => {
|
||||
return {
|
||||
text: `第${chineseNumbers[index]}轮`,
|
||||
time,
|
||||
};
|
||||
};
|
||||
|
||||
Object.keys(obj).forEach((key, index) => {
|
||||
rounds.push(formatTime(obj[key], index));
|
||||
});
|
||||
|
||||
if (rounds.length == 0) rounds = [{}]
|
||||
return rounds || [{}]
|
||||
},
|
||||
|
||||
// 切换招生官 轮播图状态
|
||||
cutAdmission() {
|
||||
this.setData({
|
||||
admissionState: !this.data.admissionState
|
||||
})
|
||||
},
|
||||
|
||||
// 招生官 轮播图 修改状态
|
||||
admissionChange(e) {
|
||||
this.setData({
|
||||
admissionCurrent: e.detail.current
|
||||
})
|
||||
},
|
||||
|
||||
// 获取index的高度
|
||||
getIndexHeight() {
|
||||
const query = wx.createSelectorQuery();
|
||||
query.select('.head-box').boundingClientRect(rect => {
|
||||
this.setData({
|
||||
headHeight: rect.height,
|
||||
})
|
||||
if (!this.indexSidebar) this.indexSidebar = this.selectComponent('#index-sidebar')
|
||||
}).exec();
|
||||
},
|
||||
|
||||
// 获取头部 高度
|
||||
sideHeight: {},
|
||||
getHeadHeight() {
|
||||
const query = wx.createSelectorQuery();
|
||||
query.selectAll('.details-box .side-item').boundingClientRect(rect => {
|
||||
if (!rect) return
|
||||
let sideHeight = {}
|
||||
rect.forEach(element => {
|
||||
const type = element.dataset.type
|
||||
sideHeight[type] = element.top
|
||||
})
|
||||
this.sideHeight = sideHeight
|
||||
}).exec();
|
||||
},
|
||||
|
||||
onPageScroll(e) {
|
||||
if (Math.random() > 0.5) return
|
||||
|
||||
const scrollTop = e.scrollTop
|
||||
|
||||
const sideHeight = this.sideHeight
|
||||
const sideHeightList = Object.keys(sideHeight) || []
|
||||
if (sideHeightList.length == 0) return
|
||||
let closestValue = sideHeightList.reduce((a, b) => Math.abs(sideHeight[b] - scrollTop) < Math.abs(sideHeight[a] - scrollTop) ? b : a);
|
||||
|
||||
const sideKey = closestValue || 'pivotal'
|
||||
if (sideKey != this.data.sideKey) {
|
||||
this.setData({
|
||||
sideKey,
|
||||
})
|
||||
}
|
||||
|
||||
const headHeight = this.data.headHeight
|
||||
const totalTopHeight = this.data.totalTopHeight
|
||||
let sideFixed = false
|
||||
if (scrollTop > headHeight - totalTopHeight - 15) sideFixed = true
|
||||
if (sideFixed != this.data.sideFixed) {
|
||||
this.setData({
|
||||
sideFixed,
|
||||
})
|
||||
}
|
||||
|
||||
let sidebarState = this.indexSidebar.data.sidebarState
|
||||
if (scrollTop > this.windowHeight * 3 && sidebarState !== 3) sidebarState = 3
|
||||
|
||||
if (scrollTop < this.windowHeight * 3 && sidebarState == 3) sidebarState = 2
|
||||
|
||||
// 同一搜集 修改的 sidebarState
|
||||
if (sidebarState !== this.indexSidebar.data.sidebarState) {
|
||||
this.indexSidebar.setData({
|
||||
sidebarState
|
||||
})
|
||||
}
|
||||
|
||||
this.indexSidebar.openSidebarTwoHide()
|
||||
},
|
||||
|
||||
// 点击复制
|
||||
copy(e) {
|
||||
const text = e.currentTarget.dataset.text
|
||||
util.copy(text, '复制成功,浏览器打开')
|
||||
},
|
||||
|
||||
// 打开文件
|
||||
openFile(e) {
|
||||
const url = e.currentTarget.dataset.url
|
||||
common.goPage("/pages/webview/webview?url=" + encodeURIComponent(url))
|
||||
},
|
||||
|
||||
// 打开 授权按钮
|
||||
openLoginBtnState() {
|
||||
this.setData({
|
||||
isloginBtnState: true,
|
||||
})
|
||||
},
|
||||
|
||||
// 关闭授权登录事件
|
||||
popClose() {
|
||||
this.setData({
|
||||
isloginBtnState: !this.data.isloginBtnState
|
||||
})
|
||||
},
|
||||
|
||||
userClickLogin(e) {
|
||||
let data = e.detail.data
|
||||
this.setData({
|
||||
islogin: true,
|
||||
isloginBtnState: false,
|
||||
informationState: data.regdatastep == 'success' ? false : true,
|
||||
})
|
||||
this.onLoad(this.options)
|
||||
},
|
||||
|
||||
// 子组件传值 修改 完善信息组件的状态
|
||||
revampInformationState() {
|
||||
this.setData({
|
||||
informationState: false
|
||||
})
|
||||
},
|
||||
|
||||
// 打开状态
|
||||
cutState() {
|
||||
if (!this.data.islogin) {
|
||||
this.openLoginBtnState()
|
||||
return
|
||||
}
|
||||
this.setData({
|
||||
stateState: !this.data.stateState,
|
||||
})
|
||||
},
|
||||
|
||||
//监听键盘
|
||||
bindkeyboardheightchange(e) {
|
||||
let keyboardHeight = e.detail.height || 0;
|
||||
this.setData({
|
||||
keyboardHeight,
|
||||
});
|
||||
},
|
||||
|
||||
// 监听输入 失去焦点
|
||||
bindblur() {
|
||||
this.setData({
|
||||
keyboardHeight: 0,
|
||||
});
|
||||
},
|
||||
|
||||
// 打开备注弹窗
|
||||
openRemark() {
|
||||
if (!this.data.islogin) {
|
||||
this.openLoginBtnState()
|
||||
return
|
||||
}
|
||||
this.setData({
|
||||
remarkState: true,
|
||||
remarkFocus: false,
|
||||
remarkInput: this.data.remark,
|
||||
}, () => {
|
||||
this.setData({
|
||||
remarkFocus: true,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 关闭备注
|
||||
closeRemark() {
|
||||
this.setData({
|
||||
remarkState: false,
|
||||
})
|
||||
},
|
||||
|
||||
// 确定备注
|
||||
confirmRemark() {
|
||||
const contras = this.data.contras
|
||||
util.wxpost("/api/project.user/remarks", {
|
||||
token: contras.token,
|
||||
remarks: this.data.remarkInput,
|
||||
}).then(res => {
|
||||
common.toast(res.message)
|
||||
|
||||
this.setData({
|
||||
remark: this.data.remarkInput,
|
||||
})
|
||||
|
||||
this.closeRemark()
|
||||
})
|
||||
},
|
||||
// 点击 跳转 公共方法
|
||||
goPage(e) {
|
||||
const url = e.currentTarget.dataset.url
|
||||
common.goPage(url)
|
||||
},
|
||||
|
||||
goMyProject() {
|
||||
if (!this.data.islogin) {
|
||||
this.openLoginBtnState()
|
||||
return
|
||||
}
|
||||
common.goPage("/pages/projectMy/projectMy?classify=manage")
|
||||
},
|
||||
|
||||
handSide(e) {
|
||||
const sideKey = e.currentTarget.dataset.key
|
||||
const sideHeight = this.sideHeight
|
||||
wx.pageScrollTo({
|
||||
scrollTop: sideHeight[sideKey] - this.data.totalTopHeight || 0,
|
||||
})
|
||||
},
|
||||
|
||||
indexSidebar: null,
|
||||
windowHeight: 812, // 屏幕高度
|
||||
|
||||
// 修改 项目 状态
|
||||
changeType(e) {
|
||||
const typeid = e.currentTarget.dataset.typeid
|
||||
const contras = this.data.contras
|
||||
util.wxpost("/api/project.user/changeType", {
|
||||
token: contras.token || '',
|
||||
typeid,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
common.toast(res.message)
|
||||
contras['typeid'] = typeid
|
||||
this.cutState()
|
||||
this.setData({
|
||||
contras,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
delete() {
|
||||
const contras = this.data.contras
|
||||
util.wxpost("/api/project.user/delete", {
|
||||
token: contras.token,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
common.toast(res.message)
|
||||
contras['ismanage'] = 0
|
||||
this.setData({
|
||||
contras,
|
||||
stateState: false,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 点击加入对比单
|
||||
addComparison() {
|
||||
if (!this.data.islogin) {
|
||||
this.openLoginBtnState()
|
||||
return
|
||||
}
|
||||
|
||||
const contras = this.data.contras
|
||||
const info = this.data.info
|
||||
|
||||
util.wxpost("/api/project.contrast/add", {
|
||||
projectid: info.id,
|
||||
}).then(res => {
|
||||
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
common.toast(res.message)
|
||||
contras['status'] = 1
|
||||
contras['ismanage'] = 1
|
||||
contras['typeid'] = 0 // 默认是待定
|
||||
contras['token'] = data.token
|
||||
this.setData({
|
||||
contras,
|
||||
})
|
||||
app.globalData.basicData['contrastcount'] = data.count
|
||||
}).catch(err => {
|
||||
if (err.code == 401) this.openLoginBtnState()
|
||||
})
|
||||
},
|
||||
|
||||
cutStudyMode(e) {
|
||||
const type = e.currentTarget.dataset.type
|
||||
this.setData({
|
||||
studyMode: type,
|
||||
})
|
||||
},
|
||||
|
||||
// 获取招生官
|
||||
getAdmissionList() {
|
||||
util.wxget('/miniprogramApi/offer/home').then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
let admissionsOfficer = data.admissionsOfficer || []
|
||||
let urls = []
|
||||
admissionsOfficer.forEach(element => {
|
||||
let mold = null
|
||||
if (element.date == null || element.date.indexOf("答疑") >= 0) mold = 3
|
||||
else mold = this.isToday(element.date) ? 1 : 2
|
||||
|
||||
element.urls.forEach(ele => {
|
||||
urls.push({
|
||||
...ele,
|
||||
mold,
|
||||
logo: element['logo'],
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
const urlsOne = urls[0] || {}
|
||||
|
||||
const chunkedArray = [];
|
||||
for (let i = 0; i < urls.length; i += 4) {
|
||||
chunkedArray.push(urls.slice(i, i + 4));
|
||||
}
|
||||
|
||||
this.setData({
|
||||
urls: chunkedArray,
|
||||
urlsOne,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
isToday(dateString) {
|
||||
const now = new Date().getTime()
|
||||
const date = new Date(dateString).getTime()
|
||||
return now <= date
|
||||
},
|
||||
|
||||
getOfferData(projectid) {
|
||||
util.wxget("/api/project.other/offerList?limit=2000&projectid=" + projectid, ).then(res => {
|
||||
const data = res.data
|
||||
const list = data.list || []
|
||||
let side = this.data.side
|
||||
if (list.length == 0) delete side.consult
|
||||
|
||||
list.forEach(element => {
|
||||
element["timestamp"] = util.strtimeago(element["timestamp"], 3)
|
||||
})
|
||||
|
||||
this.setData({
|
||||
offerList: list,
|
||||
side,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
openPreview() {
|
||||
wx.previewMedia({
|
||||
sources: [{
|
||||
url: '//framework.x-php.com/project//img/9dfc-c89f50deb0f906dd751540895bf0e303.jpg'
|
||||
}],
|
||||
showmenu: true,
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
wx.stopPullDownRefresh()
|
||||
this.getData()
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom() {
|
||||
|
||||
},
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
wx.stopPullDownRefresh()
|
||||
this.getData()
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage() {
|
||||
return {
|
||||
title: "【寄托港校项目库】 - " + this.data.info.name_zh,
|
||||
}
|
||||
},
|
||||
onShareTimeline() {
|
||||
util.statistics({
|
||||
name: "share-timeline"
|
||||
})
|
||||
return {
|
||||
title: "【寄托港校项目库】 - " + this.data.info.name_zh,
|
||||
}
|
||||
},
|
||||
})
|
9
pages/projectDetails/projectDetails.json
Normal file
9
pages/projectDetails/projectDetails.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
"header-Nav": "/component/headerNav/headerNav",
|
||||
"project-show-text": "/component/projectShowText/projectShowText",
|
||||
"go-login": "/component/goLogin/goLogin",
|
||||
"perfect-information": "/component/perfectInformation/perfectInformation",
|
||||
"index-sidebar": "/component/indexSidebar/indexSidebar"
|
||||
}
|
||||
}
|
1800
pages/projectDetails/projectDetails.less
Normal file
1800
pages/projectDetails/projectDetails.less
Normal file
File diff suppressed because it is too large
Load Diff
728
pages/projectDetails/projectDetails.wxml
Normal file
728
pages/projectDetails/projectDetails.wxml
Normal file
@ -0,0 +1,728 @@
|
||||
<!--pages/projectDetails/projectDetails.wxml-->
|
||||
<header-Nav wx:if="{{ isadmission }}" class="header-nav" bgcolor="{{ !sideFixed ? 'transparent' : '#fbfbfb' }}" user="{{ user }}">
|
||||
<view class="flexacenter" style="height: 100%;">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/admission-text-icon.png" mode="widthFix">
|
||||
</image>
|
||||
</view>
|
||||
</header-Nav>
|
||||
<header-Nav wx:else class="header-nav" bgcolor="{{ !sideFixed ? '#fff' : '#fbfbfb' }}">项目详情</header-Nav>
|
||||
|
||||
<view class="head-box {{ isadmission ? 'isadmission' : '' }}" style="padding-top: {{ totalTopHeight + 15 }}px">
|
||||
<view class="name">{{ info.name_zh }}</view>
|
||||
<view class="english">{{ info.name_en }}</view>
|
||||
<view class="school flexacenter">
|
||||
<view class="flexacenter" bind:tap="goPage" data-url="/pages/projectSchoolHomepage/projectSchoolHomepage?id={{ info.sid }}">
|
||||
<image class="icon" src="{{ info.schoollogo }}" mode="heightFix"></image>
|
||||
{{ info.schoolname || '' }}
|
||||
</view>
|
||||
<block wx:if="{{ info.au0 }}">
|
||||
<view class="line">|</view>
|
||||
{{ info.au0 }}
|
||||
</block>
|
||||
<block wx:if="{{ info.au1 }}">
|
||||
<view class="line">|</view>
|
||||
{{ info.au1 }}
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="main flexflex" style="min-height: calc(100vh - {{ headHeight - rpx30 }}px)">
|
||||
<view class="side-box">
|
||||
<view class="side {{ sideFixed ? 'sideFixed' : '' }}" style="top: {{ sideFixed ? totalTopHeight : 0 }}px;">
|
||||
<view class="side-fill {{ sideKey == 'pivotal' ? 'side-fill-white' : '' }}"></view>
|
||||
<view class="item flexcenter {{ index == sideKey ? 'pitch' : '' }}" wx:for="{{ side }}" bind:tap="handSide" data-key="{{ index }}" wx:key="index">
|
||||
<view class="text">{{ item }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view style="height: 100%" class="details-box flex1" scroll-y="{{ true }}" scroll-with-animation="{{ scrollAnimation }}">
|
||||
<view class="side-item" wx:if="{{ false }}" type="answers">
|
||||
<template is="item-header" data="{{ text: '招生官答网友问' }}"></template>
|
||||
<view class="answer mb40">
|
||||
<view class="hint flexflex">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/clock-icon.png"></image><text class="flex1">本期内容整理自2024年10月23日香港城市大学计算学院项目宣讲会。</text>
|
||||
</view>
|
||||
<scroll-view class="tab flexflex" scroll-x="{{ true }}">
|
||||
<view class="tab-item pitch flexcenter">项目概述</view>
|
||||
<view class="tab-item flexcenter">课程设置</view>
|
||||
<view class="tab-item flexcenter">职业发展</view>
|
||||
<view class="tab-item flexcenter">职业发展</view>
|
||||
<view class="tab-item flexcenter">职业发展</view>
|
||||
<view class="tab-item flexcenter">职业发展</view>
|
||||
<view class="tab-item flexcenter">职业发展</view>
|
||||
</scroll-view>
|
||||
|
||||
<view class="dialogue">
|
||||
<view class="dialogue-left">
|
||||
<view class="info flexacenter">
|
||||
<image class="avatar" src="https://app.gter.net/image/miniApp/offer/avatar-default.svg"></image>
|
||||
寄托网友
|
||||
</view>
|
||||
<view class="message">香港城市大学生物统计学系是一个什么样的系?香港城市大学生物统计学系是一个什么样的系?香港城市大学生物统计学系是一个什么样的系?</view>
|
||||
<image class="message-img" mode="widthFix" bind:tap="openPreview" src="//framework.x-php.com/project//img/9dfc-c89f50deb0f906dd751540895bf0e303.jpg"></image>
|
||||
</view>
|
||||
<view class="dialogue-right">
|
||||
<view class="info flexacenter">
|
||||
招生官
|
||||
<image class="avatar" src="https://app.gter.net/image/miniApp/offer/avatar-admission.png"></image>
|
||||
</view>
|
||||
<view class="message">香港城市大学生物统计学系是一个什么样的系?</view>
|
||||
<image class="message-img" mode="widthFix" bind:tap="openPreview" src="//framework.x-php.com/project//img/9dfc-c89f50deb0f906dd751540895bf0e303.jpg"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 招生官 -->
|
||||
<view class="side-item" data-type="pivotal">
|
||||
<view wx:if="{{ urls.length != 0 }}" class="admission-box block" bind:tap="cutAdmission">
|
||||
<view class="head flexcenter">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/talk-live-icon.png" mode="widthFix"></image>
|
||||
<view class="text flexcenter">
|
||||
<image class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-dark-cyan.svg"></image>
|
||||
招生官为你答疑
|
||||
</view>
|
||||
</view>
|
||||
<view class="content">
|
||||
<view class="title">
|
||||
<view class="admissionState state{{ urlsOne.mold }}">{{ moldObj[urlsOne.mold] }}</view>
|
||||
{{ urlsOne.title }}
|
||||
</view>
|
||||
<view class="more flexcenter">
|
||||
<text>more</text>
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- borderTop 招生官下需要一条线隔开 -->
|
||||
<view class="semester-box flexacenter {{ urls.length != 0 ? 'borderTop' : '' }}">
|
||||
<view class="text gray {{ info.semesterState ? 'semester' : '' }}">{{ info.semester.text || '' }}</view>
|
||||
{{ info.semesterState ? "本项目招生信息已更新为" + (info.semester.text || '') : "学校尚未更新招生信息,请参考" + (info.semester.text || '') + "内容" }}
|
||||
</view>
|
||||
|
||||
<view class="distinctive flexflex" wx:if="{{ info.distinctive }}">
|
||||
<image class="img" src="https://app.gter.net/image/miniApp/offer/double-quotation-marks.png" mode="widthFix"></image>
|
||||
<view class="flex1">{{ info.distinctive }}</view>
|
||||
</view>
|
||||
|
||||
<view class="label flexflex">
|
||||
<view class="item" wx:for="{{ info.tags }}" wx:key="index">{{ item }}</view>
|
||||
</view>
|
||||
|
||||
<block wx:if="{{ info.rankings && info.rankings.length != 0 }}">
|
||||
<view class="key-ranking block" bind:tap="goPage" data-url="/pages/projectList/projectList">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/major-icon.png" mode="widthFix">
|
||||
</image>
|
||||
<view class="list">
|
||||
<view class="item flex1" wx:for="{{ info.rankings }}" wx:key="index">
|
||||
<view class="quantity">{{ item.rank }}</view>
|
||||
<view class="ranking-name">
|
||||
{{ rankingsObj[item.system].name }}
|
||||
<image wx:if="{{ item.system == 'QS' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-QS.svg" mode="widthFix">
|
||||
</image>
|
||||
<image wx:if="{{ item.system == 'Times Higher Education' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-TIMES.svg" mode="widthFix">
|
||||
</image>
|
||||
<image wx:if="{{ item.system == 'U.S. News' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-US-News.svg" mode="widthFix">
|
||||
</image>
|
||||
<image wx:if="{{ item.system == 'Shanghai Ranking' }}" class="ranking-icon" src="https://app.gter.net/image/miniApp/offer/triangle-Soft.svg" mode="widthFix">
|
||||
</image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<!-- 总学费 -->
|
||||
<view class="tuition block">
|
||||
<view class="left flex1">
|
||||
<view class="unit">{{ info.tuition_currency || 'HK$' }}</view>
|
||||
<view class="number">{{ info.tuition_fee_text || '待确认' }}</view>
|
||||
<view class="text">总学费</view>
|
||||
</view>
|
||||
<view class="right">
|
||||
<view class="item flexacenter">
|
||||
<view class="key">每学分学费</view>
|
||||
<view class="value">{{ info.tuition_fee_per_credit_text || '-' }}</view>
|
||||
</view>
|
||||
<view class="item flexacenter">
|
||||
<view class="key">申请费</view>
|
||||
<view class="value">{{ info.application_fee_text || '-' }}</view>
|
||||
</view>
|
||||
<view class="item flexacenter">
|
||||
<view class="key">入学保证金</view>
|
||||
<view class="value">{{ info.admission_deposit_text || '-' }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 语言和奖金 -->
|
||||
<view class="language-bonuses flexflex" wx:if="{{ info.scholarshipText || info.language_of_instruction_text }}">
|
||||
<view class="item flex1 block">
|
||||
<view class="name">{{ info.language_of_instruction_text || '-' }}</view>
|
||||
<view class="value">教学语言</view>
|
||||
</view>
|
||||
<view class="item flex1 block">
|
||||
<view class="name">{{ info.scholarshipText || '-' }}</view>
|
||||
<view class="value">奖学金</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="application-schedule block">
|
||||
<view class="list">
|
||||
<view class="time flexflex">
|
||||
<view class="item flex1">
|
||||
<view class="name">{{ info.application_start || '-' }}</view>
|
||||
<view class="value">开始申请日期</view>
|
||||
</view>
|
||||
<view class="item flex1">
|
||||
<view class="name">{{ info.application_end || '-' }}</view>
|
||||
<view class="value">截止申请日期</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="demand block" wx:if="{{ info.scoresList.length != 0 }}">
|
||||
<view class="title">英语能力要求</view>
|
||||
<view class="hint">满足以下其中一项即可</view>
|
||||
<view class="list">
|
||||
<view class="item" wx:for="{{ info.scoresList }}" wx:key="index">
|
||||
<image class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
|
||||
<view class="name">{{ item.name }}</view>
|
||||
<view class="value">{{ item.text }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="side-item" data-type="basic">
|
||||
<block wx:if="{{ info.rankings && info.rankings.length != 0 }}">
|
||||
<template is="item-header" data="{{ text: '专业排名', type: 'rankings' }}"></template>
|
||||
<view class="ranking">
|
||||
<view class="item flexflex" wx:for="{{ info.rankings }}" wx:key="index" bind:tap="goPage" data-url="/pages/projectList/projectList">
|
||||
<view class="rank flexflex">
|
||||
<view class="number {{ rankingsObj[item.system].alias }}">
|
||||
{{ item.rank }}
|
||||
<image wx:if="{{ item.system == 'QS' }}" class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-qs.svg" mode="widthFix"></image>
|
||||
<image wx:if="{{ item.system == 'Shanghai Ranking' }}" class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-rk.svg" mode="widthFix"></image>
|
||||
<image wx:if="{{ item.system == 'Times Higher Education' }}" class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-ti.svg" mode="widthFix"></image>
|
||||
<image wx:if="{{ item.system == 'U.S. News' }}" class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-us.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
<view class="name">{{ rankingsObj[item.system].name }}</view>
|
||||
</view>
|
||||
<view class="box flex1">
|
||||
<view class="itemm flexacenter">
|
||||
<view class="key">年份:</view>
|
||||
<view class="value flex1">{{ item.year }}</view>
|
||||
</view>
|
||||
<view class="itemm flexacenter">
|
||||
<view class="key">学科:</view>
|
||||
<view class="value flex1">{{ item.subject }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<block wx:if="{{ info.intro }}">
|
||||
<template is="item-header" data="{{ text: '项目简介' }}"></template>
|
||||
<view class="block">
|
||||
<project-show-text className="intro_zh" text="{{ info.intro || ' - ' }}"></project-show-text>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<block wx:if="{{ info.accreditation }}">
|
||||
<template is="item-header" data="{{ text: '专业资格认证' }}"></template>
|
||||
<view class="block">
|
||||
<project-show-text className="accreditation" text="{{ info.accreditation || '无' }}"></project-show-text>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<view class="side-item" data-type="apply">
|
||||
<template is="item-header" data="{{ text: '申请日程' }}"></template>
|
||||
<view class="application-schedule block">
|
||||
<view class="list" wx:for="{{ info.interviewRounds }}" wx:key="index">
|
||||
<view class="index flexacenter" wx:if="{{ info.interviewRounds.length != 1 }}">
|
||||
<view class="sum flexcenter">{{ index + 1 }}</view>
|
||||
{{ item.text }}
|
||||
</view>
|
||||
<view class="time flexflex">
|
||||
<view class="item flex1">
|
||||
<view class="name">{{ info.application_start || '-' }}</view>
|
||||
<view class="value">开始申请日期</view>
|
||||
</view>
|
||||
<view class="item flex1">
|
||||
<view class="name">{{ item.time || '-' }}</view>
|
||||
<view class="value">截止申请日期</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="else" wx:if="{{ info.interview_date || info.result_date }}">
|
||||
<view class="item flexacenter" wx:if="{{ info.interview_date }}">
|
||||
<view class="name">面试时间:</view>
|
||||
<view class="value flex1">{{ info.interview_date }}</view>
|
||||
</view>
|
||||
<view class="item flexacenter" wx:if="{{ info.result_date }}">
|
||||
<view class="name">结果通知时间:</view>
|
||||
<view class="value flex1">{{ info.result_date }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<template is="item-header" data="{{ text: '最低入学要求' }}"></template>
|
||||
<view class="demand block">
|
||||
<view class="text">{{ info.entrance_requirements || '-' }}</view>
|
||||
<block wx:if="{{ info.language_proficiency_scores }}">
|
||||
<view class="title">英语能力要求</view>
|
||||
<view class="hint">满足以下其中一项即可</view>
|
||||
<view class="list">
|
||||
<block wx:for="{{ info.language_proficiency_scores }}" wx:key="index">
|
||||
<view class="item" wx:if="{{ item.total }}">
|
||||
<image class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
|
||||
<view class="name">{{ item.name_zh }}</view>
|
||||
<view class="value">总分 {{ item.total }} 分以上</view>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<block wx:if="{{ info.documents_required }}">
|
||||
<template is="item-header" data="{{ text: '必须文件' }}"></template>
|
||||
<view class="block">
|
||||
<project-show-text className="documents_required" text="{{ info.documents_required || '无' }}">
|
||||
</project-show-text>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<template is="item-header" data="{{ text: '费用' }}"></template>
|
||||
<view class="tuition block">
|
||||
<view class="left flex1">
|
||||
<view class="unit">{{ info.tuition_currency || 'HK$' }}</view>
|
||||
<view class="number">{{ info.tuition_fee_text || '待确认' }}</view>
|
||||
<view class="text">总学费</view>
|
||||
</view>
|
||||
<view class="right">
|
||||
<view class="item flexacenter">
|
||||
<view class="key">每学分学费</view>
|
||||
<view class="value">{{ info.tuition_fee_per_credit_text || '-' }}</view>
|
||||
</view>
|
||||
<view class="item flexacenter">
|
||||
<view class="key">申请费</view>
|
||||
<view class="value">{{ info.application_fee_text || '-' }}</view>
|
||||
</view>
|
||||
<view class="item flexacenter">
|
||||
<view class="key">入学保证金</view>
|
||||
<view class="value">{{ info.admission_deposit_text || '-' }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<block wx:if="{{ info.scholarships }}">
|
||||
<template is="item-header" data="{{ text: '奖学金' }}"></template>
|
||||
<view class="block">
|
||||
<project-show-text className="scholarships" text="{{ info.scholarships || '-' }}"></project-show-text>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<block wx:if="{{ info.selection_criteria }}">
|
||||
<template is="item-header" data="{{ text: '录取选择标准' }}"></template>
|
||||
<view class="block">
|
||||
<project-show-text className="selection_criteria" text="{{ info.selection_criteria || '- 暂无 -' }}"></project-show-text>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<block wx:if="{{ info.recent_admission }}">
|
||||
<template is="item-header" data="{{ text: '近期录取信息' }}"></template>
|
||||
<view class="block">
|
||||
<project-show-text className="recent_admission" text="{{ info.recent_admission || '- 暂无 -' }}"></project-show-text>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<view class="side-item" data-type="attend">
|
||||
<template is="item-header" data="{{ text: '学习模式' }}"></template>
|
||||
<view class="pattern block">
|
||||
<view class="tab flexacenter">
|
||||
<view class="item flex1 flexcenter {{ studyMode == 'ft' ? 'pitch' : '' }}" bind:tap="cutStudyMode" data-type="ft">全日制</view>
|
||||
<view class="item flex1 flexcenter {{ studyMode == 'pt' ? 'pitch' : '' }}" bind:tap="cutStudyMode" data-type="pt">兼读制</view>
|
||||
</view>
|
||||
|
||||
<view wx:if="{{ studyMode == 'ft' }}" class="introduce flexflex">
|
||||
<view class="item flex1">
|
||||
<view class="value">{{ info.language_of_instruction_text || '-' }}</view>
|
||||
<view class="name">教学语言</view>
|
||||
</view>
|
||||
<view class="item flex1">
|
||||
<view class="value">{{ info.ft_normal_period || '-' }}</view>
|
||||
<view class="name">正常学习时长</view>
|
||||
</view>
|
||||
<view class="item flex1">
|
||||
<view class="value">{{ info.ft_maximum_period || '待确认' }}</view>
|
||||
<view class="name">最长学习时长</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view wx:else class="introduce flexflex">
|
||||
<view class="item flex1">
|
||||
<view class="value">{{ info.language_of_instruction_text || '-' }}</view>
|
||||
<view class="name">教学语言</view>
|
||||
</view>
|
||||
<view class="item flex1">
|
||||
<view class="value">{{ info.pt_normal_period || '-' }}</view>
|
||||
<view class="name">正常学习时长</view>
|
||||
</view>
|
||||
<view class="item flex1">
|
||||
<view class="value">{{ info.pt_maximum_period || '待确认' }}</view>
|
||||
<view class="name">最长学习时长</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<block wx:if="{{ info.time_of_class }}">
|
||||
<template is="item-header" data="{{ text: '上课时间' }}"></template>
|
||||
<view class="block">
|
||||
<project-show-text className="time_of_class" text="{{ info.time_of_class || '- 暂无 -' }}"></project-show-text>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<template wx:if="{{ course.required.length != 0 || course.required.length != 0 }}" is="item-header" data="{{ text: '课程设置' }}"></template>
|
||||
|
||||
<view wx:if="{{ course.required.length != 0 }}" class="course block">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
|
||||
<view class="title">必修课程</view>
|
||||
<view class="hint" wx:if="{{ course.requiredCount }}">(共 {{ course.requiredCount }} 学分)</view>
|
||||
<view class="table-head flexacenter">
|
||||
<view class="item number">课程编号</view>
|
||||
<view class="item name flex1">课程名称</view>
|
||||
<view class="item credit">学分</view>
|
||||
</view>
|
||||
<view class="table-body">
|
||||
<view class="list" wx:for="{{ course.required }}" wx:key="index">
|
||||
<view class="item number flexcenter">{{ item.course_code || '-' }}</view>
|
||||
<view class="item name flex1">
|
||||
<view class="text">{{ item.course_name_zh }}</view>
|
||||
<view class="english">{{ item.course_name_en }}</view>
|
||||
</view>
|
||||
<view class="item credit flexcenter">{{ item.credit || '-' }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view wx:if="{{ course.elective.length != 0 }}" class="course block">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
|
||||
<view class="title">选修课程</view>
|
||||
<view class="table-head flexacenter">
|
||||
<view class="item number">课程编号</view>
|
||||
<view class="item name flex1">课程名称</view>
|
||||
<view class="item credit">学分</view>
|
||||
</view>
|
||||
<view class="table-body">
|
||||
<view class="list" wx:for="{{ course.elective }}" wx:key="index">
|
||||
<view class="item number flexcenter">{{ item.course_code || '-' }}</view>
|
||||
<view class="item name flex1">
|
||||
<view class="text">{{ item.course_name_zh }}</view>
|
||||
<view class="english">{{ item.course_name_en }}</view>
|
||||
</view>
|
||||
<view class="item credit flexcenter">{{ item.credit || '-' }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="link block" wx:if="{{ info.catalog_url }}">
|
||||
<view class="title">申请页项目详情</view>
|
||||
<view class="text">{{ info.catalog_url }}</view>
|
||||
<view class="btn flexcenter" bind:tap="copy" data-text="{{ info.catalog_url }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/copy-icon.png" mode="widthFix">
|
||||
</image>
|
||||
复制链接
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="side-item" data-type="graduate">
|
||||
<block wx:if="{{ info.award_zh }}">
|
||||
<template is="item-header" data="{{ text: '学位' }}"></template>
|
||||
<view class="degree block">
|
||||
<view class="title flexcenter">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/name-bj.svg" mode="widthFix">
|
||||
</image>
|
||||
学位名称
|
||||
</view>
|
||||
<view class="name">{{ info.award_zh }}</view>
|
||||
<view class="english">{{ info.award_en }}</view>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<block wx:if="{{ info.graduation_requirements }}">
|
||||
<template is="item-header" data="{{ text: '毕业要求' }}"></template>
|
||||
<view class="block">
|
||||
<project-show-text className="graduation_requirements" text="{{ info.graduation_requirements || '- 暂无 -' }}"></project-show-text>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<template wx:if="{{ info.domains || info.employers || info.positions }}" is="item-header" data="{{ text: '历届毕业生就业方向' }}"></template>
|
||||
<view class="block" wx:if="{{ info.domains }}">
|
||||
<project-show-text titleName="就业领域" className="domains" text="{{ info.domains || '- 暂无 -' }}"></project-show-text>
|
||||
</view>
|
||||
|
||||
<view class="block" wx:if="{{ info.employers }}">
|
||||
<project-show-text titleName="主要雇主名单" className="employers" text="{{ info.employers || '- 暂无 -' }}"></project-show-text>
|
||||
</view>
|
||||
|
||||
<view class="block" wx:if="{{ info.positions }}">
|
||||
<project-show-text titleName="职业岗位" className="positions" text="{{ info.positions || '- 暂无 -' }}"></project-show-text>
|
||||
</view>
|
||||
<!-- </block> -->
|
||||
</view>
|
||||
|
||||
<view wx:if="{{ offerList.length != 0 }}" class="side-item" data-type="consult">
|
||||
<template is="item-header" data="{{ text: '寄托录取参考', type: 'consult' }}"></template>
|
||||
<view class="consult-list">
|
||||
<navigator class="consult-item" target="miniProgram" app-id="wxa9296b07391c2bc7" wx:for="{{ offerList }}" wx:key="index" path="/pages/victoryDetails/victoryDetails?id={{ item.id || item.uniqid }}" hover-class="none">
|
||||
<view class="school flexacenter">
|
||||
<image class="img" src="{{ item.schoolimage }}" mode="widthFix"></image>
|
||||
{{ item.schoolname }}
|
||||
</view>
|
||||
<view class="info-item flexflex" wx:if="{{item.professional}}">
|
||||
<view class="info-major">专业</view>
|
||||
<view class="info-value flex1" wx:if="{{item.professionalzhong}}">
|
||||
<text>{{ item.professionaltou }}</text>
|
||||
<text style="color: #509CE3;">{{ item.professionalzhong }}</text>
|
||||
<text>{{ item.professionalend }}</text>
|
||||
</view>
|
||||
<view class="info-value flex1 " wx:else>{{ item.professional }}</view>
|
||||
</view>
|
||||
<view class="info-item flexflex" wx:if="{{item.project}}">
|
||||
<view class="info-major">项目</view>
|
||||
<view class="info-value flex1" wx:if="{{item.projecttzhong}}">
|
||||
<text>{{ item.projecttou }}</text>
|
||||
<text style="color: #509CE3;">{{ item.projecttzhong }}</text>
|
||||
<text>{{ item.projecttend }}</text>
|
||||
</view>
|
||||
<view class="info-value flex1" wx:else>{{ item.project }}</view>
|
||||
</view>
|
||||
<view class="info-item flexacenter" style="align-items: center;font-size: 27rpx;">
|
||||
{{ item.semester }}
|
||||
<view class="line-between"></view>
|
||||
{{ item.degree }}
|
||||
<view class="line-between"></view>
|
||||
<view class="info-item-results flexacenter results{{ item.apply_resultstatus }}">{{ item.apply_results }}</view>
|
||||
</view>
|
||||
<view class="info-xiaobox flexacenter" wx:if="{{ item.message }}">
|
||||
<view class="info-content one-line-display" wx:if="{{ item.message }}">{{ item.message }}</view>
|
||||
</view>
|
||||
<view class="bottom flexacenter">
|
||||
<view class="bottom-left flexacenter">
|
||||
<image class="bottom-avatar" src="{{ item.avatar }}"></image>
|
||||
{{ item.timestamp }}
|
||||
</view>
|
||||
<view wx:if="{{ isShowEmoji }}" class="numerical-box" style="display: flex;margin-left: 15rpx;">
|
||||
<view class="emoji-item" wx:for="{{ items }}" wx:key="index">
|
||||
<rich-text class="emoji-item-icon" nodes="&#x{{ item }};" />
|
||||
</view>
|
||||
</view>
|
||||
<!-- 数值 -->
|
||||
<view wx:else class="numerical-box flexacenter">
|
||||
<view class="item-bottom-item flexcenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/u884.png"></image>
|
||||
{{ item.view || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexcenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" style="width: 20rpx;" src="https://app.gter.net/image/miniApp/offer/expression-icon.png"></image>
|
||||
{{ item.ripostes || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexcenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/project/discuss-icon.png"></image>
|
||||
{{ item.comments || 0 }}
|
||||
</view>
|
||||
<view class="item-bottom-item flexcenter">
|
||||
<image class="item-bottom-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/bi-icon.png"></image>
|
||||
{{ item.reward || 0 }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</navigator>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="side-item" data-type="issue" wx:if="{{ info.faq && info.faq.length != 0 }}">
|
||||
<view class="issue-bj" wx:for="{{ info.faq }}" wx:key="index">
|
||||
<view class="issue block">
|
||||
<view class="index flexcenter">{{ item.num }}</view>
|
||||
<image class="index-bj" src="https://app.gter.net/image/miniApp/offer/index-bj.svg"></image>
|
||||
<view class="title">{{ item.question }}</view>
|
||||
<view class="text">{{ item.answer }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view wx:if="{{ info.leaflet_url || info.program_url || info.catalog_url }}" class="side-item" data-type="links">
|
||||
<view class="pdf block" wx:if="{{ info.leaflet_url }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/pdf-icon.svg" mode="widthFix"></image>
|
||||
<view class="title">官方宣传册</view>
|
||||
<view class="name">{{ info.leaflet_name || '-' }}</view>
|
||||
<view class="btn flexcenter" bind:tap="openFile" data-url="{{ info.leaflet_url }}">打开文件</view>
|
||||
</view>
|
||||
|
||||
<view class="link block" wx:if="{{ info.program_url }}">
|
||||
<view class="title">学院网站项目详情</view>
|
||||
<view class="text">{{ info.program_url }}</view>
|
||||
<view class="btn flexcenter" bind:tap="copy" data-text="{{ info.program_url }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/copy-icon.png" mode="widthFix"></image>
|
||||
复制链接
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="link block" wx:if="{{ info.catalog_url }}">
|
||||
<view class="title">项目目录项目详情</view>
|
||||
<view class="text">{{ info.catalog_url }}</view>
|
||||
<view class="btn flexcenter" bind:tap="copy" data-text="{{ info.catalog_url }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/copy-icon.png" mode="widthFix"></image>
|
||||
复制链接
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<text class="upglide flexcenter">- End -</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部导航栏 -->
|
||||
<view class="bottom-base flexflex">
|
||||
<view class="left flexcenter" bind:tap="goMyProject">
|
||||
我的项目
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/arrows-circle-olivine.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
<view class="right flex1 flexacenter">
|
||||
<view class="btn flexcenter" wx:if="{{ (contras.ismanage == null || contras.ismanage == 0) && (contras.status == null || contras.status == 0) }}" bind:tap="addComparison">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/flyingFriend-add.svg" mode="widthFix"></image>
|
||||
加入对比单
|
||||
</view>
|
||||
<block wx:elif="{{ contras.ismanage == 1 && contras.status == 1 }}">
|
||||
<view class="remark flexacenter" bind:tap="openRemark">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/project/u1434.png" mode="widthFix"></image>
|
||||
<view wx:if="{{ remark }}" class="text one-line-display">{{ remark }}</view>
|
||||
<view wx:else class="text placeholder">添加备注…</view>
|
||||
</view>
|
||||
<view class="state-mask" wx:if="{{ stateState }}" bind:tap="cutState"></view>
|
||||
<view class="state">
|
||||
<view class="state-box {{ contras.typeid == 0 ? 'undetermined' : '' }} {{ stateState ? 'show' : '' }}">
|
||||
<view class="state-list">
|
||||
<view class="state-item flexcenter {{ contras.typeid == index ? 'pitch' : '' }}" wx:for="{{ stateObj }}" wx:key="index" catch:tap="changeType" data-typeid="{{ index }}">
|
||||
{{ item }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="delete flexcenter" bind:tap="delete">
|
||||
<view class="delete-btn flexcenter">
|
||||
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/delete-light-grey.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="state-pitch flexcenter" catch:tap="cutState">
|
||||
{{ stateObj[contras.typeid || 0] }}
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/triangle-white.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<view wx:else class="btns flex1 flexacenter">
|
||||
<view class="item flexcenter flex1 {{ contras.status == 1 ? 'already' : '' }}" bind:tap="addComparison">
|
||||
<image wx:if="{{ contras.status == 1 }}" class="icon" src="https://app.gter.net/image/miniApp/offer/tick-grey.svg"></image>
|
||||
<image wx:else class="icon" src="https://app.gter.net/image/miniApp/offer/add-deep-blue.svg"></image>
|
||||
{{ contras.status == 1 ? '已' : '' }}加入对比单
|
||||
</view>
|
||||
<view class="item flexcenter flex1 {{ contras.ismanage == 1 ? 'already' : '' }}" bind:tap="addComparison">
|
||||
<image wx:if="{{ contras.ismanage == 1 }}" class="icon" src="https://app.gter.net/image/miniApp/offer/tick-grey.svg"></image>
|
||||
<image wx:else class="icon" src="https://app.gter.net/image/miniApp/offer/add-deep-blue.svg"></image>
|
||||
{{ contras.ismanage == 1 ? '已' : '' }}加入项目管理
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 招生官弹窗 -->
|
||||
<view class="admission-pop" wx:if="{{ admissionState }}" catch:touchmove="return" bind:tap="cutAdmission">
|
||||
<view class="admission-box" catch:tap="return">
|
||||
<view class="head flexcenter">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/talk-live-full-icon.png" mode="widthFix">
|
||||
</image>
|
||||
<view class="text flexcenter">
|
||||
<image class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-dark-cyan.svg"></image>
|
||||
招生官为你答疑
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="content">
|
||||
<swiper class="swiper" bindchange="admissionChange">
|
||||
<swiper-item class="swiper-item" wx:for="{{ urls }}" wx:key="index">
|
||||
<view class="item flexacenter" wx:for="{{ item }}" wx:key="index">
|
||||
<view class="flexcenter icon-box">
|
||||
<image class="icon" src="{{ item.logo }}" mode="heightFix"></image>
|
||||
</view>
|
||||
<view class="text flex1">
|
||||
<view class="admissionState state{{ item.mold }}">{{ moldObj[item.mold] }}</view>
|
||||
{{ item.title }}
|
||||
</view>
|
||||
</view>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
|
||||
<view class="point flexcenter">
|
||||
<view class="item {{ admissionCurrent == index ? 'pitch' : '' }}" wx:for="{{ urls }}" wx:key="index">
|
||||
</view>
|
||||
</view>
|
||||
<image class="triangle" src="https://app.gter.net/image/miniApp/offer/triangle-white-lucency.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
|
||||
<view class="word flexcenter">
|
||||
<image class="item" src="https://app.gter.net/image/miniApp/offer/word-live.png" mode="widthFix"></image>
|
||||
<image class="item" src="https://app.gter.net/image/miniApp/offer/word-playback.png" mode="widthFix">
|
||||
</image>
|
||||
<image class="item" src="https://app.gter.net/image/miniApp/offer/word-answer.png" mode="widthFix"></image>
|
||||
</view>
|
||||
|
||||
<view class="hint">请添加申请小助手</view>
|
||||
|
||||
<view class="QR-code flexcenter">
|
||||
<image class="icon" src="https://u.gter.net/assistantwxqrcode.png" mode="widthFix" show-menu-by-longpress="{{ true }}"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 输入备注弹窗 -->
|
||||
<view wx:if="{{ remarkState }}" class="remark-mask flexflex" style="height: calc(100vh - {{ keyboardHeight }}px);" bind:tap="closeRemark" catchtouchmove="return">
|
||||
<view class="remark" catch:tap="return">
|
||||
<textarea class="remark-input" cursor-spacing="{{ 5 }}" placeholder="添加备注…" maxlength="{{ 100 }}" focus="{{ remarkFocus }}" auto-focus="{{ remarkFocus }}" model:value="{{ remarkInput }}" adjust-position="{{ false }}" show-confirm-bar="{{ false }}" bindkeyboardheightchange="bindkeyboardheightchange" bind:blur="bindblur"></textarea>
|
||||
<view class="remark-bottom flexacenter">
|
||||
<view class="remark-limit">{{ remarkInput.length }}/100</view>
|
||||
<view class="remark-btn flexcenter" bindtap="confirmRemark">
|
||||
<image class="remark-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/arrows-deep-blue-green.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<template name="item-header">
|
||||
<view class="item-header flexacenter">
|
||||
<view class="flexacenter">
|
||||
<view class="greenDot"></view>
|
||||
{{ text }}
|
||||
</view>
|
||||
<view wx:if="{{ type == 'rankings' }}" class="list-btn flexacenter" bind:tap="goPage" data-url="/pages/projectList/projectList">
|
||||
榜单
|
||||
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png"></image>
|
||||
</view>
|
||||
<navigator wx:if="{{ type == 'consult' }}" class="list-btn flexacenter" path="/pages/victoryList/victoryList" target="miniProgram" app-id="wxa9296b07391c2bc7" hover-class="none">
|
||||
Offer榜
|
||||
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png"></image>
|
||||
</navigator>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<go-login wx:if="{{ isloginBtnState }}" islogin="{{ islogin }}" binduserClickLogin="userClickLogin" bindpopClose="popClose"></go-login>
|
||||
|
||||
<perfect-information wx:if="{{ informationState }}" bindrevampInformationState="revampInformationState"></perfect-information>
|
||||
|
||||
<index-sidebar id="index-sidebar" class="index-sidebar" sidebarType="xg" isInitFinish="{{ isInitFinish }}" bind:openLogin="openLoginBtnState" islogin="{{ islogin }}"></index-sidebar>
|
1487
pages/projectDetails/projectDetails.wxss
Normal file
1487
pages/projectDetails/projectDetails.wxss
Normal file
File diff suppressed because it is too large
Load Diff
700
pages/projectLibrary/projectLibrary.js
Normal file
700
pages/projectLibrary/projectLibrary.js
Normal file
@ -0,0 +1,700 @@
|
||||
// pages/projectLibrary/projectLibrary.js
|
||||
var miucms = require('../../utils/miucms.js');
|
||||
let app = getApp()
|
||||
const util = require('../../utils/util')
|
||||
const common = require('../../utils/commonMethod')
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
totalTopHeight: null,
|
||||
isFirstPattern: true, // 是否是首屏模式
|
||||
classify: "school", // school subject
|
||||
current: 0,
|
||||
|
||||
discipline: [], // 学科
|
||||
university: [], // 学校
|
||||
|
||||
bezier: {},
|
||||
|
||||
page: 1,
|
||||
list: [],
|
||||
listLeft: [],
|
||||
listRight: [],
|
||||
|
||||
fateProject: [], // 缘分项目
|
||||
admissionList: [], // 招生官项目
|
||||
contrastcount: 0, // 项目对比 数量
|
||||
|
||||
|
||||
informationState: false, // 授权后可能需要弹出完成信息框 个人背景那些
|
||||
islogin: false,
|
||||
isloginBtnState: false,
|
||||
|
||||
isInitFinish: false,
|
||||
user: {},
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
headHeight: 0, // 头部高度
|
||||
rpx15: 15,
|
||||
searchBoxTop: 0,
|
||||
options: {},
|
||||
onLoad(options) {
|
||||
this.options = options
|
||||
miucms.pageStart(app).then(() => {
|
||||
const screen_data = app.globalData.screen_data
|
||||
const totalTopHeight = screen_data.totalTopHeight || 0
|
||||
|
||||
this.searchBoxTop = util.rpxTopx(313.5) + totalTopHeight
|
||||
|
||||
this.headHeight = util.rpxTopx(313.5)
|
||||
this.rpx15 = util.rpxTopx(15)
|
||||
|
||||
this.setData({
|
||||
islogin: app.globalData.user.uid > 0 ? true : false,
|
||||
user: app.globalData.user,
|
||||
totalTopHeight,
|
||||
isInitFinish: true,
|
||||
bottomLift: screen_data.bottomLift,
|
||||
|
||||
})
|
||||
|
||||
this.windowHeight = screen_data.windowHeight || 812
|
||||
|
||||
common.xgBasicData(this, app, true).then(data => {
|
||||
this.setData({
|
||||
contrastcount: data.contrastcount || 0,
|
||||
university: data.university,
|
||||
discipline: data.discipline,
|
||||
})
|
||||
})
|
||||
|
||||
this.getFate()
|
||||
this.getAdmission()
|
||||
this.addRandom()
|
||||
this.getProjectData()
|
||||
|
||||
const fateProject = (this.data.fateProject || []).map(element => ({
|
||||
...element,
|
||||
random: app.randomString(6)
|
||||
}));
|
||||
|
||||
this.setData({
|
||||
fateProject,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
addRandom() {
|
||||
let list = this.data.list || []
|
||||
list.forEach(element => {
|
||||
element['random'] = app.randomString(6)
|
||||
})
|
||||
|
||||
this.setData({
|
||||
list
|
||||
})
|
||||
},
|
||||
|
||||
leftheight: 0,
|
||||
rightheight: 0,
|
||||
// 处理瀑布流
|
||||
handleLazyLoading(list) {
|
||||
this.getHeightState = true
|
||||
const length = list.length
|
||||
const eighty = Math.floor(length * 0.8)
|
||||
let left = []
|
||||
let right = []
|
||||
|
||||
// 变量决定第一个元素是放入 left 还是 right
|
||||
const startWithLeft = this.leftheight <= this.rightheight; // 如果为 true,第一个元素放入 left,否则放入 right
|
||||
const pointList = list.slice(0, eighty)
|
||||
pointList.forEach((element, index) => {
|
||||
if ((index % 2 === 0 && startWithLeft) || (index % 2 !== 0 && !startWithLeft)) left.push(element);
|
||||
else right.push(element);
|
||||
})
|
||||
|
||||
this.setData({
|
||||
listLeft: this.data.listLeft.concat(left),
|
||||
listRight: this.data.listRight.concat(right),
|
||||
})
|
||||
|
||||
this.getHeight(list, eighty)
|
||||
|
||||
},
|
||||
|
||||
queryLeft: null,
|
||||
getHeightState: false, // 瀑布流计算中
|
||||
// 获取高度
|
||||
getHeight(list, index) {
|
||||
if (!list[index]) {
|
||||
this.getHeightState = false
|
||||
return
|
||||
}
|
||||
this.createSelectorQuery().select(".waterfall .waterfall-left").boundingClientRect(res => {
|
||||
this.leftheight = res.height
|
||||
|
||||
this.createSelectorQuery().select(".waterfall .waterfall-right").boundingClientRect(res => {
|
||||
this.rightheight = res.height
|
||||
if (this.leftheight <= this.rightheight) {
|
||||
this.data.listLeft.push(list[index])
|
||||
this.setData({
|
||||
listLeft: this.data.listLeft
|
||||
})
|
||||
} else {
|
||||
this.data.listRight.push(list[index])
|
||||
|
||||
this.setData({
|
||||
listRight: this.data.listRight
|
||||
})
|
||||
}
|
||||
|
||||
wx.nextTick(() => {
|
||||
this.getHeight(list, index + 1)
|
||||
})
|
||||
}).exec();
|
||||
}).exec();
|
||||
},
|
||||
|
||||
|
||||
|
||||
// 获取今日缘分
|
||||
getFate() {
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
util.wxget("/api/project.home/todayFateProject").then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data || []
|
||||
data.forEach(element => {
|
||||
element['random'] = app.randomString(6)
|
||||
})
|
||||
this.setData({
|
||||
fateProject: data,
|
||||
})
|
||||
}).finally(() => {
|
||||
wx.hideLoading()
|
||||
})
|
||||
},
|
||||
|
||||
// 获取 招生官项目
|
||||
getAdmission() {
|
||||
util.wxget("/api/project.lists", {
|
||||
limit: 20,
|
||||
page: 1,
|
||||
admissionsproject: 1,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
const list = data.data || []
|
||||
|
||||
const admissionList = (list || []).map(element => ({
|
||||
...element,
|
||||
random: app.randomString(6)
|
||||
}));
|
||||
|
||||
const chunkArray = (array, size) => {
|
||||
const result = [];
|
||||
for (let i = 0; i < array.length; i += size) {
|
||||
result.push(array.slice(i, i + size));
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
const groupedAdmissionList = chunkArray(admissionList, 4);
|
||||
|
||||
this.setData({
|
||||
admissionList: groupedAdmissionList,
|
||||
})
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
// 获取项目数据
|
||||
getProjectData() {
|
||||
if (this.data.page == 0) return
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
util.wxget("/api/project.lists", {
|
||||
limit: 20,
|
||||
page: this.data.page,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
|
||||
const date = new Date()
|
||||
const month = date.getMonth() + 1
|
||||
const year = date.getFullYear()
|
||||
|
||||
let list = data.data || []
|
||||
list = (list).map(element => ({
|
||||
...element,
|
||||
random: app.randomString(6),
|
||||
semesterState: month > element.semester.month && year + 1 <= element.semester.year,
|
||||
}));
|
||||
|
||||
this.setData({
|
||||
list: this.data.list.concat(list),
|
||||
page: data.count > data.limit * data.page ? this.data.page + 1 : 0,
|
||||
})
|
||||
|
||||
this.handleLazyLoading(list)
|
||||
|
||||
if (!this.indexSidebar) this.indexSidebar = this.selectComponent('#index-sidebar')
|
||||
|
||||
}).finally(() => {
|
||||
wx.hideLoading()
|
||||
})
|
||||
},
|
||||
|
||||
// 物品的点击事件
|
||||
handleClick(e) {
|
||||
if (!this.data.islogin) {
|
||||
this.openLoginBtnState()
|
||||
return
|
||||
}
|
||||
const id = e.currentTarget.dataset.id
|
||||
const index = e.currentTarget.dataset.index || 0
|
||||
const i = e.currentTarget.dataset.i || 0
|
||||
const status = e.currentTarget.dataset.status || 0
|
||||
const type = e.currentTarget.dataset.type
|
||||
const random = e.currentTarget.dataset.random
|
||||
const query = this.createSelectorQuery();
|
||||
if (status == 1) return
|
||||
|
||||
console.log("random", random);
|
||||
|
||||
query.select('#add' + random).boundingClientRect();
|
||||
if (status == 0) {
|
||||
this.setData({
|
||||
bezier: {},
|
||||
})
|
||||
query.exec((res) => {
|
||||
const data = res[0]
|
||||
//定义手指点击位置
|
||||
this.setData({
|
||||
bezier: {
|
||||
x: data.left + data.width / 2 - this.rpx15,
|
||||
y: data.top + data.height / 2 - this.rpx15,
|
||||
},
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
let url = "/api/project.contrast/add"
|
||||
|
||||
util.wxpost(url, {
|
||||
projectid: id
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
if (type === 'admission') {
|
||||
const admissionList = this.data.admissionList
|
||||
if (admissionList[index][i]['contraststatus'] == null) admissionList[index][i]['contraststatus'] = {}
|
||||
admissionList[index][i]['contraststatus'] = {
|
||||
status: 1,
|
||||
ismanage: 1,
|
||||
}
|
||||
this.setData({
|
||||
admissionList,
|
||||
})
|
||||
}
|
||||
|
||||
console.log("type", type);
|
||||
if (type === 'left') {
|
||||
const listLeft = this.data.listLeft
|
||||
if (listLeft[index]['contraststatus'] == null) listLeft[index]['contraststatus'] = {}
|
||||
listLeft[index]['contraststatus'] = {
|
||||
status: 1,
|
||||
ismanage: 1,
|
||||
}
|
||||
console.log("listLeft", listLeft, index, "index");
|
||||
this.setData({
|
||||
listLeft,
|
||||
})
|
||||
}
|
||||
|
||||
if (type === 'right') {
|
||||
const listRight = this.data.listRight
|
||||
if (listRight[index]['contraststatus'] == null) listRight[index]['contraststatus'] = {}
|
||||
listRight[index]['contraststatus'] = {
|
||||
status: 1,
|
||||
ismanage: 1,
|
||||
}
|
||||
this.setData({
|
||||
listRight,
|
||||
})
|
||||
}
|
||||
|
||||
if (type == 'fate') {
|
||||
let fateProject = this.data.fateProject
|
||||
fateProject[index]['state'] = 1
|
||||
this.setData({
|
||||
fateProject,
|
||||
})
|
||||
}
|
||||
|
||||
this.setData({
|
||||
contrastcount: data.count,
|
||||
})
|
||||
|
||||
app.globalData.basicData['contrastcount'] = data.count
|
||||
|
||||
common.toast(res.message)
|
||||
})
|
||||
},
|
||||
|
||||
// 切换查看类型
|
||||
cutClassify(e) {
|
||||
const classify = e.currentTarget.dataset.type
|
||||
if (classify == this.data.classify) return
|
||||
|
||||
this.setData({
|
||||
classify
|
||||
})
|
||||
},
|
||||
|
||||
swiperchange(e) {
|
||||
this.setData({
|
||||
current: e.detail.current,
|
||||
})
|
||||
this.closeMoreSelectAll('admission')
|
||||
},
|
||||
|
||||
// 点击跳转 招生官频道
|
||||
goAdmission() {
|
||||
wx.navigateToMiniProgram({
|
||||
appId:"wxa9296b07391c2bc7",
|
||||
path:"/pages/admissionList/admissionList"
|
||||
})
|
||||
// common.goPage("/pages/admissionList/admissionList")
|
||||
},
|
||||
|
||||
// 点击 查看 学校
|
||||
goClassifyValue(e) {
|
||||
const classify = this.data.classify
|
||||
const value = e.currentTarget.dataset.value
|
||||
const name = e.currentTarget.dataset.label
|
||||
|
||||
let url = ""
|
||||
if (classify == 'school') url = `/pages/projectSchoolHomepage/projectSchoolHomepage?id=${value}`
|
||||
else url = `/pages/projectSubjectList/projectSubjectList?id=${value}`
|
||||
|
||||
common.goPage(url)
|
||||
},
|
||||
|
||||
// 点击项目详情
|
||||
goDetails(e) {
|
||||
const uniqid = e.currentTarget.dataset.uniqid
|
||||
const pageUrl = e.currentTarget.dataset.url
|
||||
|
||||
let url = `/pages/projectDetails/projectDetails?uniqid=${uniqid}`
|
||||
|
||||
common.goPage(url)
|
||||
},
|
||||
|
||||
// 点击跳转群主
|
||||
jumpGroup() {
|
||||
// const url = "https://form.gter.net/D8i0iS5uXCWG#/qr"
|
||||
// common.goPage(`/pages/webview/webview?url=${url}`)
|
||||
this.indexSidebar.setData({
|
||||
groupState: true,
|
||||
})
|
||||
util.statistics({
|
||||
name: "side-group"
|
||||
})
|
||||
},
|
||||
|
||||
indexSidebar: null,
|
||||
windowHeight: 812,
|
||||
onPageScroll(e) {
|
||||
const scrollTop = e.scrollTop
|
||||
|
||||
let isFirstPattern = true
|
||||
if (scrollTop > this.headHeight) isFirstPattern = false
|
||||
|
||||
if (this.data.isFirstPattern != isFirstPattern) {
|
||||
this.setData({
|
||||
isFirstPattern
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
let sidebarState = this.indexSidebar.data.sidebarState
|
||||
if (scrollTop > this.windowHeight * 3 && sidebarState !== 3) sidebarState = 3
|
||||
|
||||
if (scrollTop < this.windowHeight * 3 && sidebarState == 3) sidebarState = 2
|
||||
|
||||
// 同一搜集 修改的 sidebarState
|
||||
if (sidebarState !== this.indexSidebar.data.sidebarState) {
|
||||
this.indexSidebar.setData({
|
||||
sidebarState
|
||||
})
|
||||
}
|
||||
|
||||
this.indexSidebar.openSidebarTwoHide()
|
||||
|
||||
},
|
||||
|
||||
goPage(e) {
|
||||
const url = e.currentTarget.dataset.url
|
||||
common.goPage(url)
|
||||
},
|
||||
|
||||
openMoreSelect(e) {
|
||||
const index = e.currentTarget.dataset.index || 0
|
||||
const i = e.currentTarget.dataset.i || 0
|
||||
const type = e.currentTarget.dataset.type
|
||||
if (type == 'admission') {
|
||||
const admissionList = this.data.admissionList
|
||||
admissionList.forEach(element => {
|
||||
console.log("element", element);
|
||||
element.forEach(ele => {
|
||||
ele['moreState'] = false
|
||||
})
|
||||
})
|
||||
|
||||
admissionList[index][i]['moreState'] = true
|
||||
|
||||
this.setData({
|
||||
admissionList,
|
||||
})
|
||||
}
|
||||
|
||||
if (type == 'left') {
|
||||
let listLeft = this.data.listLeft
|
||||
listLeft.forEach(element => {
|
||||
element['moreState'] = false
|
||||
})
|
||||
|
||||
listLeft[index]['moreState'] = true
|
||||
|
||||
this.setData({
|
||||
listLeft,
|
||||
})
|
||||
}
|
||||
|
||||
if (type == 'right') {
|
||||
let listRight = this.data.listRight
|
||||
listRight.forEach(element => {
|
||||
element['moreState'] = false
|
||||
})
|
||||
|
||||
listRight[index]['moreState'] = true
|
||||
|
||||
this.setData({
|
||||
listRight,
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
closeMoreSelect(e) {
|
||||
const type = e.currentTarget.dataset.type
|
||||
this.closeMoreSelectAll(type)
|
||||
},
|
||||
|
||||
// 关闭所有 状态 选择 弹出框
|
||||
closeMoreSelectAll(type) {
|
||||
if (type == 'admission') {
|
||||
const admissionList = this.data.admissionList
|
||||
admissionList.forEach(element => {
|
||||
console.log("element", element);
|
||||
element.forEach(ele => {
|
||||
ele['moreState'] = false
|
||||
})
|
||||
})
|
||||
|
||||
this.setData({
|
||||
admissionList,
|
||||
})
|
||||
}
|
||||
|
||||
if (type == 'left') {
|
||||
let listLeft = this.data.listLeft
|
||||
listLeft.forEach(element => {
|
||||
element['moreState'] = false
|
||||
})
|
||||
|
||||
this.setData({
|
||||
listLeft,
|
||||
})
|
||||
}
|
||||
|
||||
if (type == 'right') {
|
||||
let listRight = this.data.listRight
|
||||
listRight.forEach(element => {
|
||||
element['moreState'] = false
|
||||
})
|
||||
|
||||
this.setData({
|
||||
listRight,
|
||||
})
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
addProject(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
const i = e.currentTarget.dataset.i
|
||||
const id = e.currentTarget.dataset.id
|
||||
|
||||
const type = e.currentTarget.dataset.type
|
||||
|
||||
util.wxpost("/api/project.contrast/add", {
|
||||
projectid: id
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
|
||||
if (type == 'admission') {
|
||||
let list = this.data.admissionList
|
||||
if (list[index][i]['contraststatus'] == null) list[index][i]['contraststatus'] = {}
|
||||
|
||||
list[index][i]['contraststatus'] = {
|
||||
status: 1,
|
||||
ismanage: 1,
|
||||
}
|
||||
this.setData({
|
||||
admissionList: list,
|
||||
})
|
||||
}
|
||||
|
||||
if (type == 'left') {
|
||||
let list = this.data.listLeft
|
||||
if (list[index]['contraststatus'] == null) list[index]['contraststatus'] = {}
|
||||
|
||||
list[index]['contraststatus'] = {
|
||||
status: 1,
|
||||
ismanage: 1,
|
||||
}
|
||||
this.setData({
|
||||
listLeft: list,
|
||||
})
|
||||
}
|
||||
|
||||
if (type == 'right') {
|
||||
let list = this.data.listRight
|
||||
if (list[index]['contraststatus'] == null) list[index]['contraststatus'] = {}
|
||||
|
||||
list[index]['contraststatus'] = {
|
||||
status: 1,
|
||||
ismanage: 1,
|
||||
}
|
||||
this.setData({
|
||||
listRight: list,
|
||||
})
|
||||
}
|
||||
|
||||
this.setData({
|
||||
contrastcount: data.count,
|
||||
})
|
||||
|
||||
app.globalData.basicData['contrastcount'] = data.count
|
||||
|
||||
common.toast(res.message)
|
||||
})
|
||||
},
|
||||
|
||||
// 打开 授权按钮
|
||||
openLoginBtnState() {
|
||||
this.setData({
|
||||
isloginBtnState: true,
|
||||
})
|
||||
},
|
||||
|
||||
// 关闭授权登录事件
|
||||
popClose() {
|
||||
this.setData({
|
||||
isloginBtnState: !this.data.isloginBtnState
|
||||
})
|
||||
},
|
||||
|
||||
userClickLogin(e) {
|
||||
let data = e.detail.data
|
||||
this.setData({
|
||||
islogin: true,
|
||||
isloginBtnState: false,
|
||||
informationState: data.regdatastep == 'success' ? false : true,
|
||||
})
|
||||
this.onLoad(this.options)
|
||||
},
|
||||
|
||||
// 子组件传值 修改 完善信息组件的状态
|
||||
revampInformationState() {
|
||||
this.setData({
|
||||
informationState: false
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {
|
||||
if (app.globalData.basicDataState) {
|
||||
this.setData({
|
||||
contrastcount: app.globalData.basicData['contrastcount'],
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
wx.stopPullDownRefresh()
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom() {
|
||||
if (!this.getHeightState) this.getProjectData()
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage() {
|
||||
return {
|
||||
title: "聚焦港校项目,助你迈向国际名校之路!",
|
||||
}
|
||||
},
|
||||
|
||||
onShareTimeline() {
|
||||
util.statistics({
|
||||
name: "share-timeline"
|
||||
})
|
||||
return {
|
||||
title: "聚焦港校项目,助你迈向国际名校之路!",
|
||||
}
|
||||
},
|
||||
})
|
8
pages/projectLibrary/projectLibrary.json
Normal file
8
pages/projectLibrary/projectLibrary.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
"header-nav": "/component/headerNav/headerNav",
|
||||
"xg-bottom": "/component/xg-bottom/xg-bottom",
|
||||
"go-login": "/component/goLogin/goLogin",
|
||||
"index-sidebar": "/component/indexSidebar/indexSidebar"
|
||||
}
|
||||
}
|
743
pages/projectLibrary/projectLibrary.less
Normal file
743
pages/projectLibrary/projectLibrary.less
Normal file
@ -0,0 +1,743 @@
|
||||
/* pages/projectLibrary/projectLibrary.wxss */
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
|
||||
.container {
|
||||
min-height: 100vh;
|
||||
background-color: rgba(245, 245, 245, 1);
|
||||
}
|
||||
|
||||
.header-nav {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.header-box {
|
||||
width: 750rpx;
|
||||
background: -webkit-linear-gradient(270deg, rgba(246, 246, 189, 1) 0%, rgba(245, 245, 245, 1) 100%);
|
||||
background: -moz-linear-gradient(180deg, rgba(246, 246, 189, 1) 0%, rgba(245, 245, 245, 1) 100%);
|
||||
background: linear-gradient(180deg, rgba(246, 246, 189, 1) 0%, rgba(245, 245, 245, 1) 100%);
|
||||
padding-top: 127.5rpx;
|
||||
margin-bottom: 45rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
overflow: hidden;
|
||||
padding-bottom: 100rpx;
|
||||
|
||||
.header-left {
|
||||
display: inline-block;
|
||||
padding-left: 90rpx;
|
||||
margin-right: 63rpx;
|
||||
|
||||
.header-title {
|
||||
border-bottom: 1rpx solid rgb(121, 121, 121);
|
||||
padding: 14rpx 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.header-title-icon {
|
||||
width: 276rpx;
|
||||
height: 72rpx;
|
||||
}
|
||||
|
||||
text {
|
||||
font-family: 'ArialRoundedMTBold', 'Arial Rounded MT Bold', 'Arial', sans-serif;
|
||||
}
|
||||
}
|
||||
|
||||
.header-brief {
|
||||
// font-size: 25.5rpx;
|
||||
// letter-spacing: 1.65rpx;
|
||||
// color: #333333;
|
||||
// width: 100%;
|
||||
border-bottom: 1rpx solid rgb(121, 121, 121);
|
||||
// padding-top: 5rpx;
|
||||
// padding-bottom: 6rpx;
|
||||
// text-align: center;
|
||||
// justify-content: space-between;
|
||||
|
||||
// .brief-icon {
|
||||
// width: 36rpx;
|
||||
// height: 36rpx;
|
||||
// }
|
||||
height: 43.5rpx;
|
||||
line-height: 43.5rpx;
|
||||
letter-spacing: normal;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 26rpx;
|
||||
color: #333333;
|
||||
}
|
||||
}
|
||||
|
||||
.header-right {
|
||||
width: 246rpx;
|
||||
height: 268.5rpx;
|
||||
position: relative;
|
||||
|
||||
.header-right-icon {
|
||||
position: absolute;
|
||||
top: -150rpx;
|
||||
left: -105rpx;
|
||||
width: 546rpx;
|
||||
height: 568.5rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.search-box {
|
||||
margin: -100rpx 22.5rpx 36rpx;
|
||||
padding-left: 34.5rpx;
|
||||
height: 84rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 237rpx;
|
||||
position: relative;
|
||||
|
||||
.icon {
|
||||
width: 39rpx;
|
||||
height: 39rpx;
|
||||
}
|
||||
|
||||
.input {
|
||||
font-size: 24rpx;
|
||||
padding: 0 21rpx;
|
||||
}
|
||||
|
||||
.btn {
|
||||
.vs {
|
||||
width: 40.5rpx;
|
||||
height: 30rpx;
|
||||
margin-right: 9rpx;
|
||||
}
|
||||
|
||||
padding: 0 25.5rpx;
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
border-left: 1rpx solid #d7d7d7;
|
||||
}
|
||||
}
|
||||
|
||||
.select {
|
||||
margin: 0 22.5rpx 30rpx;
|
||||
|
||||
.classify {
|
||||
height: 109.5rpx;
|
||||
background-color: rgba(237, 240, 244, 1);
|
||||
border-radius: 15rpx 15rpx 0 0;
|
||||
-moz-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.0549019607843137);
|
||||
-webkit-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.0549019607843137);
|
||||
box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.0549019607843137);
|
||||
padding-top: 21rpx;
|
||||
font-size: 30rpx;
|
||||
color: #555555;
|
||||
|
||||
.classify-item {
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
|
||||
.pitch {
|
||||
position: absolute;
|
||||
top: -28rpx;
|
||||
width: 352.5rpx;
|
||||
height: 90rpx;
|
||||
height: 92rpx;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
right: 2rpx;
|
||||
|
||||
&.right {
|
||||
.text {
|
||||
margin-left: 115.5rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
left: -4.5rpx;
|
||||
top: -4.5rpx;
|
||||
width: 363rpx;
|
||||
// height: 100.5rpx;
|
||||
height: 106.5rpx;
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 10.5rpx;
|
||||
background-color: #ffffff;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
}
|
||||
|
||||
.text {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
z-index: 1;
|
||||
margin-top: 27rpx;
|
||||
margin-left: 73.5rpx;
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 15rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border-radius: 58.5rpx;
|
||||
z-index: -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.list {
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border-radius: 15rpx;
|
||||
-moz-box-shadow: 0px 0 4.5rpx rgba(0, 0, 0, 0.0705882352941176);
|
||||
-webkit-box-shadow: 0px 0 4.5rpx rgba(0, 0, 0, 0.0705882352941176);
|
||||
box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.0705882352941176);
|
||||
padding: 45rpx 30rpx;
|
||||
margin-top: -25.5rpx;
|
||||
|
||||
.item {
|
||||
height: 60rpx;
|
||||
background-color: rgba(251, 251, 251, 1);
|
||||
border: 1rpx solid rgba(235, 235, 235, 1);
|
||||
border-radius: 18rpx;
|
||||
}
|
||||
|
||||
&.school-list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
column-gap: 15rpx;
|
||||
row-gap: 24rpx;
|
||||
|
||||
.item {
|
||||
width: 117rpx;
|
||||
}
|
||||
}
|
||||
|
||||
&.subject-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.item {
|
||||
padding: 0 23.25rpx;
|
||||
margin-right: 15rpx;
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.fate {
|
||||
margin: 0 22.5rpx 30rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 18rpx;
|
||||
box-shadow: 0 -7.5rpx rgba(249, 93, 93, 1);
|
||||
|
||||
|
||||
.head {
|
||||
height: 84rpx;
|
||||
justify-content: space-between;
|
||||
padding-left: 30rpx;
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
|
||||
.text {
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.refresh {
|
||||
padding: 0 30rpx;
|
||||
height: 100%;
|
||||
|
||||
.icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.box {
|
||||
.item {
|
||||
padding-top: 31.5rpx;
|
||||
padding-bottom: 31.5rpx;
|
||||
margin-left: 60rpx;
|
||||
margin-right: 30rpx;
|
||||
|
||||
&:not(:last-of-type) {
|
||||
border-bottom: 1rpx dotted #ebebeb;
|
||||
|
||||
}
|
||||
|
||||
.left {
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 10rpx;
|
||||
left: -30rpx;
|
||||
box-sizing: border-box;
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
background-color: rgba(246, 246, 189, 1);
|
||||
border: 1rpx solid rgba(204, 208, 3, 1);
|
||||
border-radius: 58.5rpx;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 6rpx;
|
||||
max-width: 450rpx;
|
||||
}
|
||||
|
||||
.introduce {
|
||||
color: #7F7F7F;
|
||||
font-size: 21rpx;
|
||||
|
||||
.project {
|
||||
max-width: 295.5rpx;
|
||||
}
|
||||
|
||||
.line {
|
||||
color: #D7D7D7;
|
||||
margin: 0 20rpx;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.admission {
|
||||
margin: 0 22.5rpx 30rpx;
|
||||
padding-bottom: 7.5rpx;
|
||||
// height: 873rpx;
|
||||
background: -webkit-linear-gradient(104.032264875252deg, rgba(207, 247, 255, 1) -39%, rgba(239, 240, 209, 1) 59%, rgba(207, 247, 255, 1) 178%);
|
||||
background: -moz-linear-gradient(-14.0322648752516deg, rgba(207, 247, 255, 1) -39%, rgba(239, 240, 209, 1) 59%, rgba(207, 247, 255, 1) 178%);
|
||||
background: linear-gradient(-14.0322648752516deg, rgba(207, 247, 255, 1) -39%, rgba(239, 240, 209, 1) 59%, rgba(207, 247, 255, 1) 178%);
|
||||
border-radius: 24rpx;
|
||||
|
||||
.head {
|
||||
padding-left: 30rpx;
|
||||
justify-content: space-between;
|
||||
height: 82.5rpx;
|
||||
|
||||
.img {
|
||||
width: 166.5rpx;
|
||||
height: 43.5rpx;
|
||||
}
|
||||
|
||||
.arrows {
|
||||
padding: 30rpx;
|
||||
|
||||
.icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.box {
|
||||
margin: 0 7.5rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 18rpx;
|
||||
height: 783rpx;
|
||||
|
||||
.swiper {
|
||||
height: 738rpx;
|
||||
|
||||
.swiper-item {
|
||||
.item:last-of-type {
|
||||
.more-select {
|
||||
top: auto;
|
||||
bottom: 55rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item {
|
||||
padding-top: 31.5rpx;
|
||||
padding-left: 22.5rpx;
|
||||
padding-right: 25.5rpx;
|
||||
|
||||
&:not(:last-of-type) {
|
||||
.content {
|
||||
border-bottom: 1rpx dotted #ebebeb;
|
||||
}
|
||||
}
|
||||
|
||||
.img {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
|
||||
.content {
|
||||
padding-bottom: 31.5rpx;
|
||||
justify-content: space-between;
|
||||
|
||||
.info {
|
||||
flex-direction: column;
|
||||
|
||||
.name {
|
||||
font-weight: 650;
|
||||
font-size: 24rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 12rpx;
|
||||
max-width: 435rpx;
|
||||
}
|
||||
|
||||
.subject {
|
||||
color: #333333;
|
||||
font-size: 30rpx;
|
||||
margin-bottom: 6rpx;
|
||||
max-width: 435rpx;
|
||||
}
|
||||
|
||||
.project {
|
||||
color: #7F7F7F;
|
||||
font-size: 21rpx;
|
||||
max-width: 435rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.indication {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.item {
|
||||
width: 15rpx;
|
||||
height: 6rpx;
|
||||
background-color: rgba(215, 215, 215, 1);
|
||||
border-radius: 30rpx;
|
||||
margin-right: 6rpx;
|
||||
|
||||
&.pitch {
|
||||
background-color: rgba(250, 107, 17, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.join {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 21rpx;
|
||||
color: #026277;
|
||||
|
||||
.add {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 30rpx;
|
||||
margin-bottom: 6rpx;
|
||||
|
||||
.icon {
|
||||
width: 15rpx;
|
||||
height: 15rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cancel {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
text-align: center;
|
||||
|
||||
.cross {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border: 1rpx solid rgba(235, 235, 235, 1);
|
||||
border-radius: 30rpx;
|
||||
margin-bottom: 6rpx;
|
||||
|
||||
.icon {
|
||||
width: 19.5rpx;
|
||||
height: 15rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.waterfall {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
margin: 0 22.5rpx 80rpx;
|
||||
|
||||
.waterfall-left {
|
||||
.more {
|
||||
margin: 0 auto 30rpx;
|
||||
|
||||
.more-select {
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item {
|
||||
width: 345rpx;
|
||||
// height: 438rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(235, 235, 235, 1);
|
||||
border-radius: 18rpx;
|
||||
padding: 22.5rpx 22.5rpx 0;
|
||||
margin-bottom: 15rpx;
|
||||
position: relative;
|
||||
|
||||
.school {
|
||||
.icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-right: 12rpx;
|
||||
}
|
||||
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-bottom: 19.5rpx;
|
||||
}
|
||||
|
||||
.name {
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
|
||||
.english {
|
||||
font-size: 21rpx;
|
||||
color: #555555;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 22.5rpx;
|
||||
color: #858585;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.tag {
|
||||
flex-wrap: wrap;
|
||||
// margin-top: 25rpx;
|
||||
margin-bottom: 15rpx;
|
||||
|
||||
.tag-item {
|
||||
height: 36rpx;
|
||||
line-height: 36rpx;
|
||||
font-size: 22.5rpx;
|
||||
color: #858585;
|
||||
padding: 0 10.5rpx;
|
||||
border: 1rpx solid #aaaaaa;
|
||||
border-radius: 9rpx;
|
||||
width: fit-content;
|
||||
margin-right: 15rpx;
|
||||
margin-bottom: 10rpx;
|
||||
word-break: break-all;
|
||||
|
||||
&.gray {
|
||||
border: none;
|
||||
color: #fff;
|
||||
background-color: rgba(51, 51, 51, 1);
|
||||
|
||||
&.semester {
|
||||
background-color: #f95d5d;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.view {
|
||||
height: 42rpx;
|
||||
margin-bottom: 30rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
||||
.add {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 30rpx;
|
||||
|
||||
.icon {
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
}
|
||||
}
|
||||
|
||||
&.cancel {
|
||||
flex-direction: row;
|
||||
|
||||
.cross {
|
||||
margin-bottom: 0;
|
||||
margin-right: 13.5rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.more {
|
||||
margin: 0 auto 30rpx;
|
||||
}
|
||||
|
||||
.type {
|
||||
position: relative;
|
||||
height: 60rpx;
|
||||
justify-content: center;
|
||||
|
||||
.type-icon {
|
||||
position: absolute;
|
||||
left: -22.5rpx;
|
||||
bottom: 0;
|
||||
width: 345rpx;
|
||||
height: 120rpx;
|
||||
}
|
||||
|
||||
.type-name {
|
||||
position: absolute;
|
||||
bottom: 15rpx;
|
||||
width: 118.5rpx;
|
||||
height: 31.5rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.cancel {
|
||||
.cross {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
|
||||
.icon {
|
||||
width: 15rpx;
|
||||
height: 12rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
.end {
|
||||
font-size: 19.5rpx;
|
||||
color: #D7D7D7;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
margin-bottom: 50rpx;
|
||||
}
|
||||
|
||||
.img {
|
||||
width: 345rpx;
|
||||
border-radius: 18rpx;
|
||||
margin-bottom: 15rpx;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.more {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 30rpx;
|
||||
position: relative;
|
||||
|
||||
.icon {
|
||||
width: 27rpx;
|
||||
height: 12rpx;
|
||||
}
|
||||
|
||||
.more-select-mask {
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
// background-color: #000000;
|
||||
}
|
||||
|
||||
.more-select {
|
||||
position: absolute;
|
||||
top: 55rpx;
|
||||
right: 0;
|
||||
width: 450rpx;
|
||||
height: 183rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border-radius: 12rpx;
|
||||
box-shadow: 0 0 7.5rpx rgba(0, 0, 0, 0.180392156862745);
|
||||
flex-direction: column;
|
||||
padding: 27rpx 30rpx 0;
|
||||
z-index: 1;
|
||||
|
||||
.more-select-title {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 34.5rpx;
|
||||
|
||||
.dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
border: 1rpx solid rgb(204, 208, 3);
|
||||
border-radius: 50%;
|
||||
background-color: rgb(246, 246, 189);
|
||||
margin-right: 12rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.more-select-btn {
|
||||
width: 240rpx;
|
||||
height: 60rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 237rpx;
|
||||
box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.0705882352941176);
|
||||
font-size: 24rpx;
|
||||
color: #026277;
|
||||
margin: 0 auto;
|
||||
|
||||
.more-select-icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-right: 9rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.index-sidebar {
|
||||
position: relative;
|
||||
z-index: 100;
|
||||
}
|
211
pages/projectLibrary/projectLibrary.wxml
Normal file
211
pages/projectLibrary/projectLibrary.wxml
Normal file
@ -0,0 +1,211 @@
|
||||
<!--pages/projectLibrary/projectLibrary.wxml-->
|
||||
<view class="container">
|
||||
<header-nav class="header-nav" bgcolor="{{ isFirstPattern ? 'transparent' : '#f5f5f5' }}" user="{{ user }}" isIndexPage="{{ true }}">{{ isFirstPattern ? '' : '港校项目库' }}</header-nav>
|
||||
|
||||
<view class="header-box" style="padding-top: {{ totalTopHeight }}px;">
|
||||
<view class="header-left">
|
||||
<view class="header-title">
|
||||
<image class="header-title-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/xg-icon.png"></image>
|
||||
</view>
|
||||
<view class="header-brief flexacenter">
|
||||
700+项目轻松查 快速比
|
||||
<!-- 港校项目<image class="brief-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/vs-header-icon.png"></image>港校项目 -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="header-right">
|
||||
<image class="header-right-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/xg-project-list-icon.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="search-box flexacenter">
|
||||
<image class="icon" mode="widthFix" bind:tap="goPage" data-url="/pages/search/search?type=xg" src="https://app.gter.net/image/miniApp/offer/search-fine.png"></image>
|
||||
<input class="input flex1" bind:tap="goPage" data-url="/pages/search/search?type=xg" disabled placeholder="搜索项目" />
|
||||
<view class="btn flexacenter" bind:tap="goPage" data-url="/pages/projectMy/projectMy">
|
||||
<image class="vs" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/vs-icon.png"></image>
|
||||
项目对比
|
||||
</view>
|
||||
</view>
|
||||
<view class="select">
|
||||
<view class="classify flexflex">
|
||||
<view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="school">
|
||||
<view class="pitch" wx:if="{{ classify == 'school' }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/classify-left-icon.svg"></image>
|
||||
<view class="text">按学校查看</view>
|
||||
</view>
|
||||
<block wx:else>按学校查看</block>
|
||||
</view>
|
||||
<view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="subject">
|
||||
<view class="pitch right" wx:if="{{ classify == 'subject' }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/classify-right-icon.svg"></image>
|
||||
<view class="text">按学科查看</view>
|
||||
</view>
|
||||
<block wx:else>按学科查看</block>
|
||||
</view>
|
||||
</view>
|
||||
<view class="school-list list" wx:if="{{ classify == 'school' }}">
|
||||
<view class="item flexcenter" wx:for="{{ university }}" wx:key="index" bind:tap="goClassifyValue" data-value="{{ item.value }}">{{ item.label }}</view>
|
||||
</view>
|
||||
<view class="subject-list list" wx:else>
|
||||
<view class="item flexcenter" wx:for="{{ discipline }}" wx:key="index" bind:tap="goClassifyValue" data-value="{{ item.value }}" data-label="{{ item.label }}">{{ item.label }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view wx:if="{{ fateProject.length != 0 }}" class="fate">
|
||||
<view class="head flexacenter">
|
||||
<view class="text">今日缘分项目</view>
|
||||
<view class="refresh flexcenter" bind:tap="getFate">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/refresh-icon.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="box">
|
||||
<view class="item flexacenter" wx:for="{{ fateProject }}" wx:key="index" bind:tap="goDetails" data-uniqid="{{ item.uniqid }}">
|
||||
<view class="left flexflex flex1">
|
||||
<view class="title one-line-display">{{ item.name_zh}}</view>
|
||||
<view class="introduce flexacenter">
|
||||
<view class="project one-line-display">{{ item.name_en }}</view>
|
||||
<view class="line"> | </view>
|
||||
{{ item.schoolname }}
|
||||
</view>
|
||||
</view>
|
||||
<view wx:if="{{ item.state }}" class="cancel flexflex" catch:tap="return" style="width: 106.5rpx;">
|
||||
<view class="cross flexcenter">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/tick-grey.svg"></image>
|
||||
</view>
|
||||
已加入
|
||||
</view>
|
||||
<view wx:else class="join flexflex" catch:tap="handleClick" data-random="{{ item.random }}" data-index="{{ index }}" data-id="{{ item.id }}" data-type="fate" style="width: 106.5rpx;">
|
||||
<view class="add flexcenter" id="add{{ item.random }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/plus-icon.svg"></image>
|
||||
</view>
|
||||
加入对比单
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 招生官项目 轮播图 -->
|
||||
<view wx:if="{{ admissionList.length != 0 }}" class="admission">
|
||||
<view class="head flexacenter">
|
||||
<image class="img" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/admission-text-icon.png"></image>
|
||||
<view class="arrows flexcenter" bind:tap="goAdmission">
|
||||
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/arrow-circle-gray.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="box">
|
||||
<swiper class="swiper" current="{{ current }}" bindchange="swiperchange">
|
||||
<swiper-item class="swiper-item" wx:for="{{ admissionList }}" wx:key="index">
|
||||
<view class="item flexflex" wx:for="{{ item }}" wx:for-index="i" wx:key="i" bind:tap="goDetails" data-uniqid="{{ item.uniqid }}">
|
||||
<image class="img" src="{{ item.schoollogo }}"></image>
|
||||
<view class="content flexflex flex1">
|
||||
<view class="info flexflex">
|
||||
<view class="name one-line-display">{{ item.schoolname }}</view>
|
||||
<view class="subject one-line-display">{{ item.name_zh }}</view>
|
||||
<view class="project one-line-display">{{ item.name_en }}</view>
|
||||
</view>
|
||||
|
||||
<view class="flexcenter" style="width: 106.5rpx;">
|
||||
<view wx:if="{{ item.contraststatus.status == 1 && item.contraststatus.ismanage == 1 }}" class="cancel flexflex">
|
||||
<view class="cross flexcenter">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/tick-grey.svg"></image>
|
||||
</view>
|
||||
已加入
|
||||
</view>
|
||||
<view wx:elif="{{ item.contraststatus.status == 0 || item.contraststatus.ismanage == 0 }}" class="more flexcenter" catch:tap="openMoreSelect" data-index="{{ index }}" data-i="{{ i }}" data-type="admission">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/dot-dot-dot-black.png"></image>
|
||||
<view wx:if="{{ item.moreState }}" class="more-select-mask" catch:tap="closeMoreSelect" data-type="admission"></view>
|
||||
<view wx:if="{{ item.moreState }}" class="more-select" catch:tap="return">
|
||||
<view class="more-select-title flexacenter">
|
||||
<view class="dot"></view>
|
||||
<block wx:if="{{ item.contraststatus.status == 1 }}">该项目已加入对比单,未加入项目管理</block>
|
||||
<block wx:else>该项目已加入项目管理,未加入对比单</block>
|
||||
</view>
|
||||
<view class="more-select-btn flexcenter" catch:tap="addProject" data-type="admission" data-index="{{ index }}" data-id="{{ item.id }}" data-i="{{ i }}">
|
||||
<image class="more-select-icon" src="https://app.gter.net/image/miniApp/offer/add-deep-blue.svg"></image>加入{{ item.contraststatus.status == 1 ? '项目管理' : '对比单' }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else class="join flexflex" catch:tap="handleClick" data-type="admission" data-random="{{ item.random }}" data-id="{{ item.id }}" data-index="{{ index }}" data-i="{{ i }}">
|
||||
<view class="add flexcenter" id="add{{ item.random }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/plus-icon.svg"></image>
|
||||
</view>
|
||||
加入对比单
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
<view class="indication flexacenter">
|
||||
<view class="item {{ current == index ? 'pitch' : '' }}" wx:for="{{ admissionList }}" wx:key="index"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="waterfall">
|
||||
<view class="waterfall-item waterfall-left">
|
||||
<image class="img" mode="widthFix" show-menu-by-longpress="{{ true }}" src="https://app.gter.net/image/miniApp/offer/application-group.jpg" bind:tap="jumpGroup"></image>
|
||||
<template wx:for="{{ listLeft }}" wx:key="index" is="waterfall-item" data="{{ item,index, type: 'left' }}"></template>
|
||||
</view>
|
||||
<view class="waterfall-item waterfall-right">
|
||||
<template wx:for="{{ listRight }}" wx:key="index" is="waterfall-item" data="{{ item, index, type: 'right' }}"></template>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="end" wx:if="{{ page == 0 }}">- End -</view>
|
||||
|
||||
<xg-bottom type="index" bezier="{{ bezier }}" amount="{{ contrastcount }}" bindopenLoginBtnState="openLoginBtnState" islogin="{{ islogin }}"></xg-bottom>
|
||||
|
||||
<go-login wx:if="{{ isloginBtnState }}" islogin="{{ islogin }}" binduserClickLogin="userClickLogin" bindpopClose="popClose"></go-login>
|
||||
|
||||
</view>
|
||||
|
||||
<template name="waterfall-item">
|
||||
<view class="item" bind:tap="goDetails" data-uniqid="{{ item.uniqid }}" style="z-index: {{ item.moreState ? 2 : 1 }};">
|
||||
<view class="school flexacenter">
|
||||
<image class="icon" mode="widthFix" src="{{ item.schoollogo }}"></image>
|
||||
<view class="flex1">{{ item.schoolname }}</view>
|
||||
</view>
|
||||
<view class="name">{{ item.name_zh }}</view>
|
||||
<view class="english" wx:if="{{ item.name_en }}">{{ item.name_en }}</view>
|
||||
<view class="text" wx:if="{{ item.distinctive }}">{{ item.distinctive }}</view>
|
||||
<view class="tag flexflex">
|
||||
<view class="tag-item gray {{ item.semesterState ? 'semester' : '' }}">{{ item.semester.text }}</view>
|
||||
<view class="tag-item" wx:for="{{ item.tags }}" wx:key="index">{{ item }}</view>
|
||||
</view>
|
||||
<view>
|
||||
<view wx:if="{{ item.contraststatus.status == 1 && item.contraststatus.ismanage == 1 }}" class="cancel view flexflex">
|
||||
<view class="cross flexcenter">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/tick-grey.svg"></image>
|
||||
</view>
|
||||
已加入
|
||||
</view>
|
||||
<view wx:elif="{{ item.contraststatus.status == 0 || item.contraststatus.ismanage == 0 }}" class="more view flexcenter" catch:tap="openMoreSelect" data-index="{{ index }}" data-type="{{ type }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/dot-dot-dot-black.png"></image>
|
||||
<view wx:if="{{ item.moreState }}" class="more-select-mask" catch:tap="closeMoreSelect" data-type="{{ type }}"></view>
|
||||
<view wx:if="{{ item.moreState }}" class="more-select" catch:tap="return">
|
||||
<view class="more-select-title flexacenter">
|
||||
<view class="dot"></view>
|
||||
<block wx:if="{{ item.contraststatus.status == 1 }}">该项目已加入对比单,未加入项目管理</block>
|
||||
<block wx:else>该项目已加入项目管理,未加入对比单</block>
|
||||
</view>
|
||||
<view class="more-select-btn flexcenter" catch:tap="addProject" data-type="{{ type }}" data-index="{{ index }}" data-id="{{ item.id }}">
|
||||
<image class="more-select-icon" src="https://app.gter.net/image/miniApp/offer/add-deep-blue.svg"></image>加入{{ item.contraststatus.status == 1 ? '项目管理' : '对比单' }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else class="view flexcenter" catch:tap="handleClick" data-type="{{ type }}" data-random="{{ item.random }}" data-id="{{ item.id }}" data-index="{{ index }}" data-status="{{ item.contraststatus.status }}">
|
||||
<view class="add flexcenter" id="add{{ item.random }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/plus-icon.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="type flexflex" wx:if="{{ item.admissionsproject }}">
|
||||
<image class="type-icon" src="https://app.gter.net/image/miniApp/offer/admission-border.svg" mode="widthFix"></image>
|
||||
<image class="type-name" src="https://app.gter.net/image/miniApp/offer/admission-text-icon.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<index-sidebar id="index-sidebar" class="index-sidebar" sidebarType="xg" isInitFinish="{{ isInitFinish }}" bind:openLogin="openLoginBtnState" islogin="{{ islogin }}"></index-sidebar>
|
596
pages/projectLibrary/projectLibrary.wxss
Normal file
596
pages/projectLibrary/projectLibrary.wxss
Normal file
@ -0,0 +1,596 @@
|
||||
/* pages/projectLibrary/projectLibrary.wxss */
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
.container {
|
||||
min-height: 100vh;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
.header-nav {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
.header-box {
|
||||
width: 750rpx;
|
||||
background: -webkit-linear-gradient(270deg, #f6f6bd 0%, #f5f5f5 100%);
|
||||
background: -moz-linear-gradient(180deg, #f6f6bd 0%, #f5f5f5 100%);
|
||||
background: linear-gradient(180deg, #f6f6bd 0%, #f5f5f5 100%);
|
||||
padding-top: 127.5rpx;
|
||||
margin-bottom: 45rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
overflow: hidden;
|
||||
padding-bottom: 100rpx;
|
||||
}
|
||||
.header-box .header-left {
|
||||
display: inline-block;
|
||||
padding-left: 90rpx;
|
||||
margin-right: 63rpx;
|
||||
}
|
||||
.header-box .header-left .header-title {
|
||||
border-bottom: 1rpx solid #797979;
|
||||
padding: 14rpx 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.header-box .header-left .header-title .header-title-icon {
|
||||
width: 276rpx;
|
||||
height: 72rpx;
|
||||
}
|
||||
.header-box .header-left .header-title text {
|
||||
font-family: 'ArialRoundedMTBold', 'Arial Rounded MT Bold', 'Arial', sans-serif;
|
||||
}
|
||||
.header-box .header-left .header-brief {
|
||||
border-bottom: 1rpx solid #797979;
|
||||
height: 43.5rpx;
|
||||
line-height: 43.5rpx;
|
||||
letter-spacing: normal;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 26rpx;
|
||||
color: #333333;
|
||||
}
|
||||
.header-box .header-right {
|
||||
width: 246rpx;
|
||||
height: 268.5rpx;
|
||||
position: relative;
|
||||
}
|
||||
.header-box .header-right .header-right-icon {
|
||||
position: absolute;
|
||||
top: -150rpx;
|
||||
left: -105rpx;
|
||||
width: 546rpx;
|
||||
height: 568.5rpx;
|
||||
}
|
||||
.search-box {
|
||||
margin: -100rpx 22.5rpx 36rpx;
|
||||
padding-left: 34.5rpx;
|
||||
height: 84rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 237rpx;
|
||||
position: relative;
|
||||
}
|
||||
.search-box .icon {
|
||||
width: 39rpx;
|
||||
height: 39rpx;
|
||||
}
|
||||
.search-box .input {
|
||||
font-size: 24rpx;
|
||||
padding: 0 21rpx;
|
||||
}
|
||||
.search-box .btn {
|
||||
padding: 0 25.5rpx;
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
border-left: 1rpx solid #d7d7d7;
|
||||
}
|
||||
.search-box .btn .vs {
|
||||
width: 40.5rpx;
|
||||
height: 30rpx;
|
||||
margin-right: 9rpx;
|
||||
}
|
||||
.select {
|
||||
margin: 0 22.5rpx 30rpx;
|
||||
}
|
||||
.select .classify {
|
||||
height: 109.5rpx;
|
||||
background-color: #edf0f4;
|
||||
border-radius: 15rpx 15rpx 0 0;
|
||||
-moz-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.05490196);
|
||||
-webkit-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.05490196);
|
||||
box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.05490196);
|
||||
padding-top: 21rpx;
|
||||
font-size: 30rpx;
|
||||
color: #555555;
|
||||
}
|
||||
.select .classify .classify-item {
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
}
|
||||
.select .classify .classify-item .pitch {
|
||||
position: absolute;
|
||||
top: -28rpx;
|
||||
width: 352.5rpx;
|
||||
height: 90rpx;
|
||||
height: 92rpx;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
right: 2rpx;
|
||||
}
|
||||
.select .classify .classify-item .pitch.right .text {
|
||||
margin-left: 115.5rpx;
|
||||
}
|
||||
.select .classify .classify-item .pitch .icon {
|
||||
position: absolute;
|
||||
left: -4.5rpx;
|
||||
top: -4.5rpx;
|
||||
width: 363rpx;
|
||||
height: 106.5rpx;
|
||||
}
|
||||
.select .classify .classify-item .pitch::after {
|
||||
content: "";
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 10.5rpx;
|
||||
background-color: #ffffff;
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
}
|
||||
.select .classify .classify-item .pitch .text {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
z-index: 1;
|
||||
margin-top: 27rpx;
|
||||
margin-left: 73.5rpx;
|
||||
}
|
||||
.select .classify .classify-item .pitch .text::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 15rpx;
|
||||
background-color: #cff7ff;
|
||||
border-radius: 58.5rpx;
|
||||
z-index: -1;
|
||||
}
|
||||
.select .list {
|
||||
background-color: #ffffff;
|
||||
border-radius: 15rpx;
|
||||
-moz-box-shadow: 0px 0 4.5rpx rgba(0, 0, 0, 0.07058824);
|
||||
-webkit-box-shadow: 0px 0 4.5rpx rgba(0, 0, 0, 0.07058824);
|
||||
box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.07058824);
|
||||
padding: 45rpx 30rpx;
|
||||
margin-top: -25.5rpx;
|
||||
}
|
||||
.select .list .item {
|
||||
height: 60rpx;
|
||||
background-color: #fbfbfb;
|
||||
border: 1rpx solid #ebebeb;
|
||||
border-radius: 18rpx;
|
||||
}
|
||||
.select .list.school-list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
column-gap: 15rpx;
|
||||
row-gap: 24rpx;
|
||||
}
|
||||
.select .list.school-list .item {
|
||||
width: 117rpx;
|
||||
}
|
||||
.select .list.subject-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.select .list.subject-list .item {
|
||||
padding: 0 23.25rpx;
|
||||
margin-right: 15rpx;
|
||||
margin-bottom: 24rpx;
|
||||
}
|
||||
.fate {
|
||||
margin: 0 22.5rpx 30rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 18rpx;
|
||||
box-shadow: 0 -7.5rpx #f95d5d;
|
||||
}
|
||||
.fate .head {
|
||||
height: 84rpx;
|
||||
justify-content: space-between;
|
||||
padding-left: 30rpx;
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
}
|
||||
.fate .head .text {
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
}
|
||||
.fate .head .refresh {
|
||||
padding: 0 30rpx;
|
||||
height: 100%;
|
||||
}
|
||||
.fate .head .refresh .icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
.fate .box .item {
|
||||
padding-top: 31.5rpx;
|
||||
padding-bottom: 31.5rpx;
|
||||
margin-left: 60rpx;
|
||||
margin-right: 30rpx;
|
||||
}
|
||||
.fate .box .item:not(:last-of-type) {
|
||||
border-bottom: 1rpx dotted #ebebeb;
|
||||
}
|
||||
.fate .box .item .left {
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
}
|
||||
.fate .box .item .left::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 10rpx;
|
||||
left: -30rpx;
|
||||
box-sizing: border-box;
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
background-color: #f6f6bd;
|
||||
border: 1rpx solid #ccd003;
|
||||
border-radius: 58.5rpx;
|
||||
}
|
||||
.fate .box .item .left .title {
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 6rpx;
|
||||
max-width: 450rpx;
|
||||
}
|
||||
.fate .box .item .left .introduce {
|
||||
color: #7F7F7F;
|
||||
font-size: 21rpx;
|
||||
}
|
||||
.fate .box .item .left .introduce .project {
|
||||
max-width: 295.5rpx;
|
||||
}
|
||||
.fate .box .item .left .introduce .line {
|
||||
color: #D7D7D7;
|
||||
margin: 0 20rpx;
|
||||
}
|
||||
.admission {
|
||||
margin: 0 22.5rpx 30rpx;
|
||||
padding-bottom: 7.5rpx;
|
||||
background: -webkit-linear-gradient(104.03226488deg, #cff7ff -39%, #eff0d1 59%, #cff7ff 178%);
|
||||
background: -moz-linear-gradient(-14.03226488deg, #cff7ff -39%, #eff0d1 59%, #cff7ff 178%);
|
||||
background: linear-gradient(-14.03226488deg, #cff7ff -39%, #eff0d1 59%, #cff7ff 178%);
|
||||
border-radius: 24rpx;
|
||||
}
|
||||
.admission .head {
|
||||
padding-left: 30rpx;
|
||||
justify-content: space-between;
|
||||
height: 82.5rpx;
|
||||
}
|
||||
.admission .head .img {
|
||||
width: 166.5rpx;
|
||||
height: 43.5rpx;
|
||||
}
|
||||
.admission .head .arrows {
|
||||
padding: 30rpx;
|
||||
}
|
||||
.admission .head .arrows .icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
}
|
||||
.admission .box {
|
||||
margin: 0 7.5rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 18rpx;
|
||||
height: 783rpx;
|
||||
}
|
||||
.admission .box .swiper {
|
||||
height: 738rpx;
|
||||
}
|
||||
.admission .box .swiper .swiper-item .item:last-of-type .more-select {
|
||||
top: auto;
|
||||
bottom: 55rpx;
|
||||
}
|
||||
.admission .box .swiper .item {
|
||||
padding-top: 31.5rpx;
|
||||
padding-left: 22.5rpx;
|
||||
padding-right: 25.5rpx;
|
||||
}
|
||||
.admission .box .swiper .item:not(:last-of-type) .content {
|
||||
border-bottom: 1rpx dotted #ebebeb;
|
||||
}
|
||||
.admission .box .swiper .item .img {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
.admission .box .swiper .item .content {
|
||||
padding-bottom: 31.5rpx;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.admission .box .swiper .item .content .info {
|
||||
flex-direction: column;
|
||||
}
|
||||
.admission .box .swiper .item .content .info .name {
|
||||
font-weight: 650;
|
||||
font-size: 24rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 12rpx;
|
||||
max-width: 435rpx;
|
||||
}
|
||||
.admission .box .swiper .item .content .info .subject {
|
||||
color: #333333;
|
||||
font-size: 30rpx;
|
||||
margin-bottom: 6rpx;
|
||||
max-width: 435rpx;
|
||||
}
|
||||
.admission .box .swiper .item .content .info .project {
|
||||
color: #7F7F7F;
|
||||
font-size: 21rpx;
|
||||
max-width: 435rpx;
|
||||
}
|
||||
.admission .box .indication {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.admission .box .indication .item {
|
||||
width: 15rpx;
|
||||
height: 6rpx;
|
||||
background-color: #d7d7d7;
|
||||
border-radius: 30rpx;
|
||||
margin-right: 6rpx;
|
||||
}
|
||||
.admission .box .indication .item.pitch {
|
||||
background-color: #fa6b11;
|
||||
}
|
||||
.join {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 21rpx;
|
||||
color: #026277;
|
||||
}
|
||||
.join .add {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 30rpx;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
.join .add .icon {
|
||||
width: 15rpx;
|
||||
height: 15rpx;
|
||||
}
|
||||
.cancel {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
text-align: center;
|
||||
}
|
||||
.cancel .cross {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
background-color: #f6f6f6;
|
||||
border: 1rpx solid #ebebeb;
|
||||
border-radius: 30rpx;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
.cancel .cross .icon {
|
||||
width: 19.5rpx;
|
||||
height: 15rpx;
|
||||
}
|
||||
.waterfall {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
margin: 0 22.5rpx 80rpx;
|
||||
}
|
||||
.waterfall .waterfall-left .more {
|
||||
margin: 0 auto 30rpx;
|
||||
}
|
||||
.waterfall .waterfall-left .more .more-select {
|
||||
left: 0;
|
||||
}
|
||||
.waterfall .item {
|
||||
width: 345rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #ebebeb;
|
||||
border-radius: 18rpx;
|
||||
padding: 22.5rpx 22.5rpx 0;
|
||||
margin-bottom: 15rpx;
|
||||
position: relative;
|
||||
}
|
||||
.waterfall .item .school {
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-bottom: 19.5rpx;
|
||||
}
|
||||
.waterfall .item .school .icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-right: 12rpx;
|
||||
}
|
||||
.waterfall .item .name {
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
.waterfall .item .english {
|
||||
font-size: 21rpx;
|
||||
color: #555555;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
.waterfall .item .text {
|
||||
font-size: 22.5rpx;
|
||||
color: #858585;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.waterfall .item .tag {
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
.waterfall .item .tag .tag-item {
|
||||
height: 36rpx;
|
||||
line-height: 36rpx;
|
||||
font-size: 22.5rpx;
|
||||
color: #858585;
|
||||
padding: 0 10.5rpx;
|
||||
border: 1rpx solid #aaaaaa;
|
||||
border-radius: 9rpx;
|
||||
width: fit-content;
|
||||
margin-right: 15rpx;
|
||||
margin-bottom: 10rpx;
|
||||
word-break: break-all;
|
||||
}
|
||||
.waterfall .item .tag .tag-item.gray {
|
||||
border: none;
|
||||
color: #fff;
|
||||
background-color: #333333;
|
||||
}
|
||||
.waterfall .item .tag .tag-item.gray.semester {
|
||||
background-color: #f95d5d;
|
||||
}
|
||||
.waterfall .item .view {
|
||||
height: 42rpx;
|
||||
margin-bottom: 30rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
.waterfall .item .view .add {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 30rpx;
|
||||
}
|
||||
.waterfall .item .view .add .icon {
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
}
|
||||
.waterfall .item .view.cancel {
|
||||
flex-direction: row;
|
||||
}
|
||||
.waterfall .item .view.cancel .cross {
|
||||
margin-bottom: 0;
|
||||
margin-right: 13.5rpx;
|
||||
}
|
||||
.waterfall .item .more {
|
||||
margin: 0 auto 30rpx;
|
||||
}
|
||||
.waterfall .item .type {
|
||||
position: relative;
|
||||
height: 60rpx;
|
||||
justify-content: center;
|
||||
}
|
||||
.waterfall .item .type .type-icon {
|
||||
position: absolute;
|
||||
left: -22.5rpx;
|
||||
bottom: 0;
|
||||
width: 345rpx;
|
||||
height: 120rpx;
|
||||
}
|
||||
.waterfall .item .type .type-name {
|
||||
position: absolute;
|
||||
bottom: 15rpx;
|
||||
width: 118.5rpx;
|
||||
height: 31.5rpx;
|
||||
}
|
||||
.waterfall .item .cancel .cross {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
.waterfall .item .cancel .cross .icon {
|
||||
width: 15rpx;
|
||||
height: 12rpx;
|
||||
}
|
||||
.end {
|
||||
font-size: 19.5rpx;
|
||||
color: #D7D7D7;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
margin-bottom: 50rpx;
|
||||
}
|
||||
.img {
|
||||
width: 345rpx;
|
||||
border-radius: 18rpx;
|
||||
margin-bottom: 15rpx;
|
||||
display: block;
|
||||
}
|
||||
.more {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 30rpx;
|
||||
position: relative;
|
||||
}
|
||||
.more .icon {
|
||||
width: 27rpx;
|
||||
height: 12rpx;
|
||||
}
|
||||
.more .more-select-mask {
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
.more .more-select {
|
||||
position: absolute;
|
||||
top: 55rpx;
|
||||
right: 0;
|
||||
width: 450rpx;
|
||||
height: 183rpx;
|
||||
background-color: #ffffff;
|
||||
border-radius: 12rpx;
|
||||
box-shadow: 0 0 7.5rpx rgba(0, 0, 0, 0.18039216);
|
||||
flex-direction: column;
|
||||
padding: 27rpx 30rpx 0;
|
||||
z-index: 1;
|
||||
}
|
||||
.more .more-select .more-select-title {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 34.5rpx;
|
||||
}
|
||||
.more .more-select .more-select-title .dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
border: 1rpx solid #ccd003;
|
||||
border-radius: 50%;
|
||||
background-color: #f6f6bd;
|
||||
margin-right: 12rpx;
|
||||
}
|
||||
.more .more-select .more-select-btn {
|
||||
width: 240rpx;
|
||||
height: 60rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 237rpx;
|
||||
box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.07058824);
|
||||
font-size: 24rpx;
|
||||
color: #026277;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.more .more-select .more-select-btn .more-select-icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-right: 9rpx;
|
||||
}
|
||||
.index-sidebar {
|
||||
position: relative;
|
||||
z-index: 100;
|
||||
}
|
637
pages/projectList/projectList.js
Normal file
637
pages/projectList/projectList.js
Normal file
@ -0,0 +1,637 @@
|
||||
// pages/projectList/projectList.js
|
||||
var miucms = require('../../utils/miucms.js');
|
||||
const util = require('../../utils/util.js')
|
||||
const common = require('../../utils/commonMethod')
|
||||
const app = getApp()
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
isFirstPattern: true,
|
||||
classify: "school", // school subject
|
||||
screenState: false, // 选择框的状态
|
||||
territoryState: false, // 专业弹窗
|
||||
|
||||
comprehensive: {
|
||||
organizationKey: "",
|
||||
organization: [],
|
||||
yearKey: "",
|
||||
year: [],
|
||||
obj: {},
|
||||
list: [],
|
||||
total: 0,
|
||||
only: 0,
|
||||
page: 1,
|
||||
},
|
||||
|
||||
discipline: {
|
||||
organizationKey: "",
|
||||
organization: [],
|
||||
yearKey: "",
|
||||
year: [],
|
||||
majorKey: "",
|
||||
obj: {},
|
||||
list: [],
|
||||
total: 0,
|
||||
only: 0,
|
||||
page: 1,
|
||||
},
|
||||
|
||||
university: [],
|
||||
universityArr: [],
|
||||
isInitFinish: false,
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
rpx219: 0,
|
||||
onLoad(options) {
|
||||
this.rpx219 = util.rpxTopx(219)
|
||||
|
||||
miucms.pageStart(app).then(() => {
|
||||
const screen_data = app.globalData.screen_data
|
||||
this.windowHeight = screen_data.windowHeight || 812
|
||||
|
||||
common.xgBasicData(this, app).then(data => {
|
||||
let universityArr = []
|
||||
const university = JSON.parse(JSON.stringify(data.university || {}))
|
||||
university.forEach(element => {
|
||||
universityArr.push(element.value)
|
||||
})
|
||||
this.setData({
|
||||
university: data.university,
|
||||
universityArr,
|
||||
})
|
||||
this.getRankings()
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 获取 综合排名 数据
|
||||
getSynthesizeData() {
|
||||
let comprehensive = this.data.comprehensive
|
||||
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
|
||||
util.wxget("/api/project.rankings/comprehensive", {
|
||||
token: comprehensive['token'],
|
||||
ishongkong: comprehensive['only'] || 0,
|
||||
limit: 2000,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
let data = res.data
|
||||
let list = data.data || []
|
||||
const universityArr = this.data.universityArr
|
||||
// 遍历去掉非香港院校
|
||||
list.forEach(element => {
|
||||
if (!universityArr.includes(element.sid)) element.sid = 0
|
||||
});
|
||||
comprehensive['total'] = data.count
|
||||
comprehensive['allList'] = list
|
||||
comprehensive['list'] = []
|
||||
comprehensive['page'] = 1
|
||||
|
||||
comprehensive['organizeText'] = comprehensive['organizationKey']
|
||||
comprehensive['yearText'] = comprehensive['yearKey']
|
||||
|
||||
this.setData({
|
||||
comprehensive,
|
||||
screenState: false,
|
||||
})
|
||||
|
||||
this.renderComprehensiveList()
|
||||
}).finally(() => wx.hideLoading())
|
||||
},
|
||||
|
||||
// 渲染 综合排名 limit: 20
|
||||
renderComprehensiveList() {
|
||||
const limit = 20
|
||||
let comprehensive = this.data.comprehensive
|
||||
let page = comprehensive['page']
|
||||
if (page == 0) return
|
||||
|
||||
const allList = comprehensive['allList']
|
||||
const target = allList.slice((page - 1) * limit, page * limit)
|
||||
comprehensive['list'] = comprehensive.list.concat(target)
|
||||
comprehensive['page'] = target.length < limit ? 0 : page + 1
|
||||
this.setData({
|
||||
comprehensive
|
||||
})
|
||||
},
|
||||
|
||||
// 获取 专业排名 数据
|
||||
getMajorData() {
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
let discipline = this.data.discipline
|
||||
// console.log("discipline", discipline);
|
||||
|
||||
util.wxget("/api/project.rankings/discipline", {
|
||||
token: discipline['token'],
|
||||
ishongkong: discipline['only'] || 0,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
let data = res.data
|
||||
discipline['total'] = data.count
|
||||
discipline['allList'] = data.data
|
||||
discipline['list'] = []
|
||||
discipline['page'] = 1
|
||||
|
||||
discipline['organizeText'] = discipline['organizationKey']
|
||||
discipline['yearText'] = discipline['yearKey']
|
||||
discipline['majorText'] = discipline['majorKey']
|
||||
|
||||
this.setData({
|
||||
discipline,
|
||||
screenState: false,
|
||||
})
|
||||
this.renderDisciplineList()
|
||||
}).finally(() => wx.hideLoading())
|
||||
},
|
||||
|
||||
// 渲染 专业排名 limit: 20
|
||||
renderDisciplineList() {
|
||||
const limit = 20
|
||||
let discipline = this.data.discipline
|
||||
let page = discipline['page']
|
||||
if (page == 0) return
|
||||
|
||||
const allList = discipline['allList']
|
||||
const target = allList.slice((page - 1) * limit, page * limit)
|
||||
discipline['list'] = discipline.list.concat(target)
|
||||
discipline['page'] = target.length < limit ? 0 : page + 1
|
||||
|
||||
this.setData({
|
||||
discipline,
|
||||
})
|
||||
},
|
||||
|
||||
// 获取 配置信息
|
||||
getRankings() {
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
util.wxget("/api/project.rankings", {}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
|
||||
const comprehensive = data.comprehensive
|
||||
let comprehensiveTarget = this.data.comprehensive
|
||||
let organizationSet = [...this.objectOne(comprehensive)]
|
||||
comprehensiveTarget['organization'] = organizationSet
|
||||
comprehensiveTarget['organizationKey'] = organizationSet[0]
|
||||
|
||||
let yearsSet = [...this.collectYears(comprehensive)]
|
||||
yearsSet.sort((a, b) => b - a);
|
||||
|
||||
// console.log("yearsSet", yearsSet);
|
||||
// comprehensiveTarget['year'] = yearsSet
|
||||
comprehensiveTarget['yearKey'] = yearsSet[0]
|
||||
comprehensiveTarget['obj'] = comprehensive
|
||||
|
||||
this.checkComprehensiveYear()
|
||||
|
||||
const discipline = data.discipline
|
||||
let disciplineTarget = this.data.discipline
|
||||
|
||||
const dOrganization = [...this.objectOne(discipline)]
|
||||
const [dOrganizationKey, dOrganizationValue] = Object.entries(discipline)[0]
|
||||
disciplineTarget['organization'] = dOrganization
|
||||
disciplineTarget['organizationKey'] = dOrganizationKey
|
||||
disciplineTarget['majorKey'] = Object.entries(dOrganizationValue)[0][0]
|
||||
const dYear = [...this.collectYears(discipline)]
|
||||
dYear.sort((a, b) => b - a);
|
||||
|
||||
// disciplineTarget['year'] = dYear
|
||||
disciplineTarget['yearKey'] = dYear[0]
|
||||
disciplineTarget['obj'] = discipline
|
||||
|
||||
this.checkDisciplineYear()
|
||||
|
||||
this.setData({
|
||||
comprehensive: comprehensiveTarget,
|
||||
discipline: disciplineTarget,
|
||||
isInitFinish: true,
|
||||
})
|
||||
|
||||
if (!this.indexSidebar) this.indexSidebar = this.selectComponent('#index-sidebar')
|
||||
|
||||
this.haveComprehensive()
|
||||
|
||||
if (!this.indexSidebar) this.indexSidebar = this.selectComponent('#index-sidebar')
|
||||
|
||||
}).finally(() => wx.hideLoading())
|
||||
},
|
||||
|
||||
// 计算出对象所有 一级 key
|
||||
objectOne(obj) {
|
||||
let arr = []
|
||||
for (const key in obj) {
|
||||
arr.push(key)
|
||||
}
|
||||
return arr
|
||||
},
|
||||
|
||||
// 计算出 对象 所有 二级 key 不重复
|
||||
collectYears(obj, arr = new Set()) {
|
||||
for (let key in obj) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
if (!isNaN(key) && key.length === 4) {
|
||||
arr.add(key);
|
||||
}
|
||||
|
||||
const value = obj[key];
|
||||
if (typeof value === 'object' && value !== null) {
|
||||
this.collectYears(value, arr);
|
||||
}
|
||||
}
|
||||
}
|
||||
return [...arr];
|
||||
},
|
||||
|
||||
// 切换查看类型
|
||||
cutClassify(e) {
|
||||
const classify = e.currentTarget.dataset.type
|
||||
if (classify == this.data.classify) return
|
||||
|
||||
|
||||
let discipline = this.data.discipline
|
||||
// 切换 专业排名时 判断 是否需要 显示选择
|
||||
if (classify == 'subject' && discipline.list.length == 0) {
|
||||
this.haveDiscipline()
|
||||
}
|
||||
|
||||
this.setData({
|
||||
classify,
|
||||
})
|
||||
},
|
||||
|
||||
indexSidebar: null,
|
||||
windowHeight: 812,
|
||||
onPageScroll(e) {
|
||||
const scrollTop = e.scrollTop
|
||||
|
||||
let isFirstPattern = true
|
||||
if (scrollTop > this.rpx219) isFirstPattern = false
|
||||
|
||||
if (this.data.isFirstPattern != isFirstPattern) {
|
||||
this.setData({
|
||||
isFirstPattern
|
||||
})
|
||||
}
|
||||
|
||||
let sidebarState = this.indexSidebar.data.sidebarState
|
||||
if (scrollTop > this.windowHeight * 3 && sidebarState !== 3) sidebarState = 3
|
||||
|
||||
if (scrollTop < this.windowHeight * 3 && sidebarState == 3) sidebarState = 2
|
||||
|
||||
// 同一搜集 修改的 sidebarState
|
||||
if (sidebarState !== this.indexSidebar.data.sidebarState) {
|
||||
this.indexSidebar.setData({
|
||||
sidebarState
|
||||
})
|
||||
}
|
||||
|
||||
this.indexSidebar.openSidebarTwoHide()
|
||||
},
|
||||
|
||||
// 切换仅显示香港
|
||||
cutOnlyXg() {
|
||||
const classify = this.data.classify
|
||||
if (classify == 'school') {
|
||||
let comprehensive = this.data.comprehensive
|
||||
comprehensive['only'] = comprehensive['only'] == 1 ? 0 : 1
|
||||
|
||||
comprehensive['list'] = []
|
||||
this.setData({
|
||||
comprehensive,
|
||||
})
|
||||
|
||||
this.getSynthesizeData()
|
||||
} else {
|
||||
let discipline = this.data.discipline
|
||||
discipline['only'] = discipline['only'] == 1 ? 0 : 1
|
||||
discipline['list'] = []
|
||||
this.setData({
|
||||
discipline,
|
||||
})
|
||||
this.getMajorData()
|
||||
}
|
||||
},
|
||||
|
||||
// 选择机构 - 综合
|
||||
selectOrganicComprehensive(e) {
|
||||
let key = e.currentTarget.dataset.key
|
||||
|
||||
// const key = e.currentTarget.dataset.key
|
||||
let comprehensive = this.data.comprehensive
|
||||
comprehensive['organizationKey'] = key
|
||||
this.setData({
|
||||
comprehensive,
|
||||
})
|
||||
this.checkComprehensiveYear()
|
||||
},
|
||||
|
||||
// 判断是否存在值 综合 检查 年份
|
||||
checkComprehensiveYear() {
|
||||
const comprehensive = this.data.comprehensive
|
||||
const obj = comprehensive.obj
|
||||
const target = obj[comprehensive.organizationKey]
|
||||
|
||||
let year = this.objectOne(target) || []
|
||||
|
||||
year.sort((a, b) => b - a);
|
||||
|
||||
if (!year.includes(comprehensive.yearKey)) comprehensive.yearKey = year[0]
|
||||
|
||||
// if (year.length == 1) comprehensive.yearKey = year[0]
|
||||
|
||||
comprehensive['year'] = year
|
||||
this.setData({
|
||||
comprehensive
|
||||
})
|
||||
},
|
||||
|
||||
// 选择年份 - 综合
|
||||
selectYearComprehensive(e) {
|
||||
const key = e.currentTarget.dataset.key
|
||||
let comprehensive = this.data.comprehensive
|
||||
comprehensive['yearKey'] = key
|
||||
this.setData({
|
||||
comprehensive,
|
||||
})
|
||||
},
|
||||
|
||||
// 选择机构 - 专业
|
||||
selectOrganicMajor(e) {
|
||||
const key = e.currentTarget.dataset.key
|
||||
let discipline = this.data.discipline
|
||||
discipline['organizationKey'] = key
|
||||
discipline['majorKey'] = ""
|
||||
|
||||
this.setData({
|
||||
discipline
|
||||
})
|
||||
|
||||
// this.checkDisciplineYear()
|
||||
this.selectFirstMajorInRanking()
|
||||
},
|
||||
|
||||
// 选中专业排名后 默认选择 第一个专业
|
||||
selectFirstMajorInRanking() {
|
||||
let discipline = this.data.discipline
|
||||
const organizationKey = discipline.organizationKey
|
||||
|
||||
const obj = discipline.obj
|
||||
|
||||
let majorsList = {}
|
||||
majorsList = obj[organizationKey]
|
||||
|
||||
// console.log(Object.keys(majorsList)[0]);
|
||||
|
||||
const majorKey = Object.keys(majorsList)[0] || ''
|
||||
// console.log("majorsList", majorsList[majorKey]);
|
||||
const yearObj = majorsList[majorKey]
|
||||
const yearList = Object.keys(yearObj)
|
||||
yearList.sort((a, b) => b - a);
|
||||
// console.log("yearList", yearList);
|
||||
|
||||
discipline['majorKey'] = majorKey
|
||||
discipline['year'] = yearList
|
||||
discipline['yearKey'] = yearList[0]
|
||||
this.setData({
|
||||
discipline,
|
||||
})
|
||||
},
|
||||
|
||||
// 判断是否存在值 专业 检查 年份
|
||||
checkDisciplineYear() {
|
||||
const discipline = this.data.discipline
|
||||
const obj = discipline.obj
|
||||
const target = obj[discipline.organizationKey]
|
||||
|
||||
let year = this.collectYears(target) || []
|
||||
year.sort((a, b) => b - a);
|
||||
if (!year.includes(discipline.yearKey)) discipline.yearKey = year[0]
|
||||
discipline['year'] = year
|
||||
|
||||
// if (year.length == 1) discipline.yearKey = year[0]
|
||||
|
||||
this.setData({
|
||||
discipline
|
||||
})
|
||||
},
|
||||
|
||||
// 选择年份 - 综合
|
||||
selectYearDiscipline(e) {
|
||||
const key = e.currentTarget.dataset.key
|
||||
let discipline = this.data.discipline
|
||||
discipline['yearKey'] = key
|
||||
this.setData({
|
||||
discipline,
|
||||
})
|
||||
},
|
||||
|
||||
// 打开专业弹窗
|
||||
opneMajorPop() {
|
||||
let discipline = this.data.discipline
|
||||
|
||||
const organizationKey = discipline.organizationKey
|
||||
const yearKey = discipline.yearKey
|
||||
|
||||
// discipline['yearKey'] = ""
|
||||
|
||||
const obj = discipline.obj
|
||||
if (!organizationKey) {
|
||||
wx.showToast({
|
||||
icon: "none",
|
||||
title: '请先选择评榜机构',
|
||||
})
|
||||
return
|
||||
}
|
||||
let majorsList = {}
|
||||
// 没有 选择年份的情况下
|
||||
majorsList = obj[organizationKey]
|
||||
|
||||
this.setData({
|
||||
majorsList,
|
||||
territoryState: true,
|
||||
screenState: false,
|
||||
})
|
||||
},
|
||||
|
||||
// 关闭 专业选择
|
||||
closeselect(e) {
|
||||
const yearList = e.detail?.yearList || []
|
||||
|
||||
yearList.sort((a, b) => b - a);
|
||||
|
||||
const key = e.detail?.key || ''
|
||||
|
||||
if (!key) {
|
||||
this.setData({
|
||||
territoryState: false,
|
||||
screenState: true,
|
||||
})
|
||||
}
|
||||
|
||||
let discipline = this.data.discipline
|
||||
|
||||
discipline['majorKey'] = key
|
||||
discipline['year'] = yearList
|
||||
if (!yearList.includes(discipline.yearKey)) discipline.yearKey = ""
|
||||
|
||||
discipline.yearKey = yearList[0]
|
||||
|
||||
this.setData({
|
||||
territoryState: false,
|
||||
screenState: true,
|
||||
discipline,
|
||||
})
|
||||
},
|
||||
|
||||
// 选好了 综合
|
||||
haveComprehensive() {
|
||||
let comprehensive = this.data.comprehensive
|
||||
const organizationKey = comprehensive['organizationKey']
|
||||
const yearKey = comprehensive['yearKey']
|
||||
|
||||
if (!organizationKey) this.selectionPrompt("请选择评榜机构")
|
||||
if (!yearKey) this.selectionPrompt("请选择年份")
|
||||
|
||||
if (!organizationKey || !yearKey) return
|
||||
|
||||
const obj = comprehensive['obj']
|
||||
|
||||
const organizationValue = obj[organizationKey]
|
||||
const token = organizationValue[yearKey]
|
||||
comprehensive['token'] = token
|
||||
|
||||
this.setData({
|
||||
comprehensive
|
||||
})
|
||||
|
||||
this.getSynthesizeData()
|
||||
|
||||
},
|
||||
|
||||
// 选好了 专业
|
||||
haveDiscipline() {
|
||||
let discipline = this.data.discipline
|
||||
const organizationKey = discipline['organizationKey']
|
||||
const majorKey = discipline['majorKey']
|
||||
const yearKey = discipline['yearKey']
|
||||
|
||||
if (!organizationKey) this.selectionPrompt("请选择评榜机构")
|
||||
if (!majorKey) this.selectionPrompt("请选择专业")
|
||||
if (!yearKey) this.selectionPrompt("请选择年份")
|
||||
if (!organizationKey || !majorKey || !yearKey) return
|
||||
|
||||
const obj = discipline['obj']
|
||||
|
||||
const organizationValue = obj[organizationKey]
|
||||
const majorValue = organizationValue[majorKey]
|
||||
const token = majorValue[yearKey]
|
||||
discipline['token'] = token
|
||||
this.setData({
|
||||
discipline
|
||||
})
|
||||
|
||||
this.getMajorData()
|
||||
},
|
||||
|
||||
//选择提示
|
||||
selectionPrompt(title) {
|
||||
wx.showToast({
|
||||
icon: "none",
|
||||
title,
|
||||
})
|
||||
},
|
||||
|
||||
// 跳转学校主页
|
||||
goSchoolHomepage(e) {
|
||||
const sid = e.currentTarget.dataset.sid
|
||||
wx.navigateTo({
|
||||
url: '/pages/projectSchoolHomepage/projectSchoolHomepage?id=' + sid,
|
||||
})
|
||||
},
|
||||
|
||||
// 点击
|
||||
cutScreenState() {
|
||||
this.setData({
|
||||
screenState: !this.data.screenState,
|
||||
})
|
||||
},
|
||||
|
||||
goDetails(e) {
|
||||
return
|
||||
const id = e.currentTarget.dataset.id
|
||||
common.goPage(`/pages/projectDetails/projectDetails?id=${id}`)
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
wx.stopPullDownRefresh()
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom() {
|
||||
if (this.data.classify == 'school') this.renderComprehensiveList()
|
||||
if (this.data.classify == 'subject') this.renderDisciplineList()
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage() {
|
||||
|
||||
},
|
||||
onShareTimeline() {
|
||||
util.statistics({
|
||||
name: "share-timeline"
|
||||
})
|
||||
return {
|
||||
title: "【寄托港校项目库】- 榜单",
|
||||
}
|
||||
},
|
||||
})
|
8
pages/projectList/projectList.json
Normal file
8
pages/projectList/projectList.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"enablePullDownRefresh": false,
|
||||
"usingComponents": {
|
||||
"header-nav": "/component/headerNav/headerNav",
|
||||
"territory-select": "/component/territorySelect/territorySelect",
|
||||
"index-sidebar": "/component/indexSidebar/indexSidebar"
|
||||
}
|
||||
}
|
383
pages/projectList/projectList.less
Normal file
383
pages/projectList/projectList.less
Normal file
@ -0,0 +1,383 @@
|
||||
/* pages/projectList/projectList.wxss */
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
|
||||
.header-box {
|
||||
width: 100vw;
|
||||
height: 219rpx;
|
||||
background: -webkit-linear-gradient(270deg, rgba(246, 246, 189, 1) 0%, rgba(245, 245, 245, 1) 100%);
|
||||
background: -moz-linear-gradient(180deg, rgba(246, 246, 189, 1) 0%, rgba(245, 245, 245, 1) 100%);
|
||||
background: linear-gradient(180deg, rgba(246, 246, 189, 1) 0%, rgba(245, 245, 245, 1) 100%);
|
||||
position: relative;
|
||||
|
||||
}
|
||||
|
||||
.header-nav {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
|
||||
.classify {
|
||||
padding-top: 21rpx;
|
||||
font-size: 30rpx;
|
||||
color: #555555;
|
||||
height: 109.5rpx;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
background-color: rgba(237, 240, 244, 1);
|
||||
border-radius: 15rpx 15rpx 0 0;
|
||||
-moz-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.0470588235294118);
|
||||
-webkit-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.0470588235294118);
|
||||
box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.0470588235294118);
|
||||
|
||||
.classify-item {
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
|
||||
.pitch {
|
||||
position: absolute;
|
||||
top: -28rpx;
|
||||
left: 0;
|
||||
width: 375rpx;
|
||||
height: 90rpx;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
overflow: hidden;
|
||||
|
||||
&.right {
|
||||
left: auto;
|
||||
right: 0;
|
||||
|
||||
.text {
|
||||
margin-left: 115.5rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
left: -4.5rpx;
|
||||
top: -4.5rpx;
|
||||
width: 385.5rpx;
|
||||
height: 100.5rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-top: 27rpx;
|
||||
margin-left: 73.5rpx;
|
||||
|
||||
.text-icon-box {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
border-radius: 50%;
|
||||
background-color: #f95d5d;
|
||||
margin-right: 15rpx;
|
||||
|
||||
.text-icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.chunk {
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
margin-top: -28rpx;
|
||||
position: relative;
|
||||
padding-top: 55.5rpx;
|
||||
|
||||
.pitch-on {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 33rpx;
|
||||
color: #000000;
|
||||
margin: 0 auto;
|
||||
width: fit-content;
|
||||
margin-bottom: 73.5rpx;
|
||||
position: relative;
|
||||
|
||||
&.major-pitch {
|
||||
font-weight: 650;
|
||||
font-style: normal;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
|
||||
.major-pitch-text {
|
||||
max-width: 80vw;
|
||||
}
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
height: 7.5rpx;
|
||||
top: 43.5rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.pitch-icon {
|
||||
width: 21rpx;
|
||||
height: 12rpx;
|
||||
margin-left: 18rpx;
|
||||
}
|
||||
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
width: 100%;
|
||||
height: 12rpx;
|
||||
position: absolute;
|
||||
top: 48rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border-radius: 58.5rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.message {
|
||||
justify-content: space-between;
|
||||
font-size: 24rpx;
|
||||
color: #7F7F7F;
|
||||
margin: 0 22.5rpx 30rpx;
|
||||
|
||||
.total {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
|
||||
.only {
|
||||
.icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 13.5rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.list {
|
||||
.item {
|
||||
margin: 0 22.5rpx 15rpx;
|
||||
background-color: rgba(251, 251, 251, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 18rpx;
|
||||
padding-top: 34.5rpx;
|
||||
padding-left: 37.5rpx;
|
||||
padding-right: 22.5rpx;
|
||||
padding-bottom: 30rpx;
|
||||
position: relative;
|
||||
|
||||
|
||||
.angle {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 75rpx;
|
||||
height: 76.5rpx;
|
||||
}
|
||||
|
||||
.ranking {
|
||||
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-style: normal;
|
||||
font-size: 24rpx;
|
||||
color: #000000;
|
||||
width: 76.5rpx;
|
||||
}
|
||||
|
||||
.head {
|
||||
align-items: flex-start;
|
||||
|
||||
.name {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.mark {
|
||||
font-size: 27rpx;
|
||||
color: #333333;
|
||||
|
||||
.text {
|
||||
font-size: 21rpx;
|
||||
color: #AAAAAA;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.english {
|
||||
font-size: 21rpx;
|
||||
line-height: 42rpx;
|
||||
color: #333333;
|
||||
margin-bottom: 3rpx;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
justify-content: space-between;
|
||||
|
||||
.site {
|
||||
font-size: 22.5rpx;
|
||||
line-height: 42rpx;
|
||||
color: #7F7F7F;
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 162rpx;
|
||||
height: 54rpx;
|
||||
line-height: 54rpx;
|
||||
background-color: rgba(249, 93, 93, 1);
|
||||
border-radius: 142.5rpx;
|
||||
font-size: 24rpx;
|
||||
color: #FFFFFF;
|
||||
padding: 0 15rpx;
|
||||
justify-content: space-between;
|
||||
|
||||
.icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.end {
|
||||
padding-top: 60rpx;
|
||||
text-align: center;
|
||||
font-size: 19.5rpx;
|
||||
color: #D7D7D7;
|
||||
}
|
||||
}
|
||||
|
||||
.screen-mask {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(0, 0, 0, 0.705882352941177);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
z-index: 100;
|
||||
|
||||
.screen-box {
|
||||
width: 100vw;
|
||||
background-color: #FFFFFF;
|
||||
padding-top: 43.5rpx;
|
||||
border-radius: 45rpx 45rpx 0 0;
|
||||
|
||||
.head {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 45rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.box {
|
||||
margin: 0 22.5rpx 30rpx;
|
||||
background-color: rgba(251, 251, 251, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 15rpx;
|
||||
padding: 16.5rpx 18rpx 30rpx 18rpx;
|
||||
|
||||
.title {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 45rpx;
|
||||
}
|
||||
|
||||
.major-box {
|
||||
height: 72rpx;
|
||||
line-height: 72rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(204, 208, 3, 1);
|
||||
border-radius: 112.5rpx;
|
||||
padding-left: 30rpx;
|
||||
padding-right: 22.5rpx;
|
||||
|
||||
.text {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 24rpx;
|
||||
color: #9A9D02;
|
||||
|
||||
&.text-no {
|
||||
color: #AAAAAA;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 10.5rpx;
|
||||
height: 18rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.list {
|
||||
flex-wrap: wrap;
|
||||
|
||||
.item {
|
||||
min-width: 150rpx;
|
||||
height: 72rpx;
|
||||
line-height: 72rpx;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border-radius: 112.5rpx;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
margin-right: 15rpx;
|
||||
padding: 0 15rpx;
|
||||
margin-bottom: 10rpx;
|
||||
|
||||
&.pitch {
|
||||
border: 1rpx solid rgba(204, 208, 3, 1);
|
||||
font-weight: 650;
|
||||
color: #9A9D02;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.footer {
|
||||
margin-top: 45rpx;
|
||||
height: 201rpx;
|
||||
border-top: 1rpx solid #ebebeb;
|
||||
justify-content: space-between;
|
||||
font-size: 30rpx;
|
||||
padding: 45rpx 30rpx 0 30rpx;
|
||||
|
||||
.cancel {
|
||||
width: 225rpx;
|
||||
height: 96rpx;
|
||||
background-color: rgba(207, 247, 255, 0);
|
||||
border: 1rpx solid rgba(215, 215, 215, 1);
|
||||
border-radius: 112.5rpx;
|
||||
color: #555555;
|
||||
}
|
||||
|
||||
.confirm {
|
||||
width: 435rpx;
|
||||
height: 96rpx;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
color: #026277;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 112.5rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.index-sidebar {
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
}
|
144
pages/projectList/projectList.wxml
Normal file
144
pages/projectList/projectList.wxml
Normal file
@ -0,0 +1,144 @@
|
||||
<!--pages/projectList/projectList.wxml-->
|
||||
<view class="container">
|
||||
<header-nav class="header-nav" bgcolor="{{ isFirstPattern ? 'transparent' : '#f5f5f5' }}">榜单</header-nav>
|
||||
<view class="header-box"></view>
|
||||
<view class="classify flexflex">
|
||||
<view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="school">
|
||||
<view class="pitch" wx:if="{{ classify == 'school' }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/list-left-icon.svg"></image>
|
||||
<view class="text flexacenter">
|
||||
<view class="text-icon-box flexcenter">
|
||||
<image class="text-icon" src="https://app.gter.net/image/miniApp/offer/list-synthesize-icon.png" mode="widthFix"></image>
|
||||
</view>
|
||||
综合排名
|
||||
</view>
|
||||
</view>
|
||||
<block wx:else>综合排名</block>
|
||||
</view>
|
||||
<view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="subject">
|
||||
<view class="pitch right" wx:if="{{ classify == 'subject' }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/list-right-icon.svg"></image>
|
||||
<view class="text flexacenter">
|
||||
<view class="text-icon-box flexcenter">
|
||||
<image class="text-icon" src="https://app.gter.net/image/miniApp/offer/list-major-icon.png" mode="widthFix"></image>
|
||||
</view>
|
||||
专业排名
|
||||
</view>
|
||||
</view>
|
||||
<block wx:else>专业排名</block>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="chunk">
|
||||
<block wx:if="{{ classify == 'school' }}">
|
||||
<view class="pitch-on flexacenter" bind:tap="cutScreenState">
|
||||
{{ comprehensive.organizeText }}世界综合排名({{ comprehensive.yearText }}年)
|
||||
<image class="pitch-icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
<view class="message flexacenter">
|
||||
<view class="total">共 {{ comprehensive.total }} 个排名</view>
|
||||
<view class="only flexacenter" bind:tap="cutOnlyXg">
|
||||
<image wx:if="{{ comprehensive.only }}" class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/project/u376.svg"></image>
|
||||
<image wx:else class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/frame-icon.svg"></image>
|
||||
仅显示香港学校
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<block wx:else>
|
||||
<view class="pitch-on major-pitch flexacenter" bind:tap="cutScreenState">
|
||||
<view class="major-pitch-text one-line-display">
|
||||
<!-- {{ discipline.organizationKey }} > {{ discipline.majorKey }}({{ discipline.yearKey }}年) -->
|
||||
{{ discipline.organizeText }} > {{ discipline.majorText }}({{ discipline.yearText }}年)
|
||||
</view>
|
||||
<image class="pitch-icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
<view class="message flexacenter">
|
||||
<view class="total">共 {{ discipline.total }} 个排名</view>
|
||||
<view class="only flexacenter" bind:tap="cutOnlyXg">
|
||||
<image wx:if="{{ discipline.only }}" class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/project/u376.svg"></image>
|
||||
<image wx:else class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/frame-icon.svg"></image>
|
||||
仅显示香港学校
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<view class="list">
|
||||
<view class="item flexflex" wx:for="{{ classify == 'school' ? comprehensive.list : discipline.list }}" wx:key="index" bind:tap="{{ classify == 'subject' ? 'goDetails' : '' }}" data-id="{{ index }}">
|
||||
<view class="ranking">{{ item.rank }}</view>
|
||||
<view class="flex1">
|
||||
<view class="head flexflex">
|
||||
<view class="name flex1">{{ item.name || item.subject }}</view>
|
||||
<view class="mark flexacenter" wx:if="{{ item.total_score }}">{{ item.total_score }} <text class="text">分</text></view>
|
||||
</view>
|
||||
<view class="english">
|
||||
{{ item.enname }}
|
||||
<block wx:if="{{ item.simple }}">({{item.simple}})</block>
|
||||
</view>
|
||||
<!-- <image wx:if="{{ item.sid }}" class="angle" src="https://app.gter.net/image/miniApp/offer/project-angle.svg" mode="widthFix"></image> -->
|
||||
|
||||
<view class="bottom flexflex">
|
||||
<view class="site">{{ item.city }}</view>
|
||||
<view wx:if="{{ item.sid }}" class="btn flexcenter" bind:tap="goSchoolHomepage" data-sid="{{ item.sid }}">
|
||||
学校主页
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/arrows-round-light-white.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
<view class="end" wx:if="{{ (classify == 'school' && comprehensive.page == 0) || (classify == 'subject' && discipline.page == 0) }}">- End -</view>
|
||||
</view>
|
||||
|
||||
<view class="screen-mask" wx:if="{{ screenState }}" bind:tap="cutScreenState">
|
||||
<view class="screen-box" catch:tap="return">
|
||||
<view class="head">请选择</view>
|
||||
<block wx:if="{{ classify == 'school' }}">
|
||||
<view class="box">
|
||||
<view class="title">评榜机构</view>
|
||||
<view class="list flexflex">
|
||||
<view class="item flexcenter {{ item == comprehensive.organizationKey ? 'pitch' : '' }}" bind:tap="selectOrganicComprehensive" data-key="{{ item }}" wx:for="{{ comprehensive.organization }}" wx:key="index">{{ item }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="box">
|
||||
<view class="title">年份</view>
|
||||
<view class="list flexflex">
|
||||
<view class="item flexcenter {{ item == comprehensive.yearKey ? 'pitch' : '' }}" wx:for="{{ comprehensive.year }}" wx:key="index" bind:tap="selectYearComprehensive" data-key="{{ item }}">{{ item }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<block wx:else>
|
||||
<view class="box">
|
||||
<view class="title">评榜机构</view>
|
||||
<view class="list flexflex">
|
||||
<view class="item flexcenter {{ item == discipline.organizationKey ? 'pitch' : '' }}" bind:tap="selectOrganicMajor" data-key="{{ item }}" wx:for="{{ discipline.organization }}" wx:key="index">{{ item }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="box">
|
||||
<view class="title">专业</view>
|
||||
<view class="major-box flexacenter" bind:tap="opneMajorPop">
|
||||
<view wx:if="{{ discipline.majorKey }}" class="flex1 text">{{ discipline.majorKey }}</view>
|
||||
<view wx:else class="flex1 text text-no">请选择</view>
|
||||
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/arrows-yellow-green.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="box">
|
||||
<view class="title">年份</view>
|
||||
<view class="list flexflex">
|
||||
<view class="item flexcenter {{ item == discipline.yearKey ? 'pitch' : '' }}" wx:for="{{ discipline.year }}" wx:key="index" bind:tap="selectYearDiscipline" data-key="{{ item }}">{{ item }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<view class="footer flexflex">
|
||||
<view class="cancel flexcenter" bind:tap="cutScreenState">取消</view>
|
||||
<view class="confirm flexcenter" bind:tap="{{ classify == 'school' ? 'haveComprehensive' : 'haveDiscipline' }}">选好了</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<territory-select wx:if="{{ territoryState }}" type="major" list="{{ majorsList }}" value="{{ discipline.majorKey }}" bindcloseselect="closeselect"></territory-select>
|
||||
</view>
|
||||
|
||||
<index-sidebar id="index-sidebar" class="index-sidebar" sidebarType="xg" isInitFinish="{{ isInitFinish }}" bind:openLogin="openLoginBtnState" islogin="{{ islogin }}"></index-sidebar>
|
323
pages/projectList/projectList.wxss
Normal file
323
pages/projectList/projectList.wxss
Normal file
@ -0,0 +1,323 @@
|
||||
/* pages/projectList/projectList.wxss */
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
.header-box {
|
||||
width: 100vw;
|
||||
height: 219rpx;
|
||||
background: -webkit-linear-gradient(270deg, #f6f6bd 0%, #f5f5f5 100%);
|
||||
background: -moz-linear-gradient(180deg, #f6f6bd 0%, #f5f5f5 100%);
|
||||
background: linear-gradient(180deg, #f6f6bd 0%, #f5f5f5 100%);
|
||||
position: relative;
|
||||
}
|
||||
.header-nav {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
.classify {
|
||||
padding-top: 21rpx;
|
||||
font-size: 30rpx;
|
||||
color: #555555;
|
||||
height: 109.5rpx;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
background-color: #edf0f4;
|
||||
border-radius: 15rpx 15rpx 0 0;
|
||||
-moz-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.04705882);
|
||||
-webkit-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.04705882);
|
||||
box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.04705882);
|
||||
}
|
||||
.classify .classify-item {
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
}
|
||||
.classify .classify-item .pitch {
|
||||
position: absolute;
|
||||
top: -28rpx;
|
||||
left: 0;
|
||||
width: 375rpx;
|
||||
height: 90rpx;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
overflow: hidden;
|
||||
}
|
||||
.classify .classify-item .pitch.right {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
.classify .classify-item .pitch.right .text {
|
||||
margin-left: 115.5rpx;
|
||||
}
|
||||
.classify .classify-item .pitch .icon {
|
||||
position: absolute;
|
||||
left: -4.5rpx;
|
||||
top: -4.5rpx;
|
||||
width: 385.5rpx;
|
||||
height: 100.5rpx;
|
||||
}
|
||||
.classify .classify-item .pitch .text {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-top: 27rpx;
|
||||
margin-left: 73.5rpx;
|
||||
}
|
||||
.classify .classify-item .pitch .text .text-icon-box {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
border-radius: 50%;
|
||||
background-color: #f95d5d;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
.classify .classify-item .pitch .text .text-icon-box .text-icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
.chunk {
|
||||
background-color: #ffffff;
|
||||
margin-top: -28rpx;
|
||||
position: relative;
|
||||
padding-top: 55.5rpx;
|
||||
}
|
||||
.chunk .pitch-on {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 33rpx;
|
||||
color: #000000;
|
||||
margin: 0 auto;
|
||||
width: fit-content;
|
||||
margin-bottom: 73.5rpx;
|
||||
position: relative;
|
||||
}
|
||||
.chunk .pitch-on.major-pitch {
|
||||
font-weight: 650;
|
||||
font-style: normal;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
}
|
||||
.chunk .pitch-on.major-pitch .major-pitch-text {
|
||||
max-width: 80vw;
|
||||
}
|
||||
.chunk .pitch-on.major-pitch::after {
|
||||
content: "";
|
||||
height: 7.5rpx;
|
||||
top: 43.5rpx;
|
||||
}
|
||||
.chunk .pitch-on .pitch-icon {
|
||||
width: 21rpx;
|
||||
height: 12rpx;
|
||||
margin-left: 18rpx;
|
||||
}
|
||||
.chunk .pitch-on::after {
|
||||
content: "";
|
||||
width: 100%;
|
||||
height: 12rpx;
|
||||
position: absolute;
|
||||
top: 48rpx;
|
||||
background-color: #cff7ff;
|
||||
border-radius: 58.5rpx;
|
||||
}
|
||||
.chunk .message {
|
||||
justify-content: space-between;
|
||||
font-size: 24rpx;
|
||||
color: #7F7F7F;
|
||||
margin: 0 22.5rpx 30rpx;
|
||||
}
|
||||
.chunk .message .total {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
.chunk .message .only .icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 13.5rpx;
|
||||
}
|
||||
.chunk .list .item {
|
||||
margin: 0 22.5rpx 15rpx;
|
||||
background-color: #fbfbfb;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 18rpx;
|
||||
padding-top: 34.5rpx;
|
||||
padding-left: 37.5rpx;
|
||||
padding-right: 22.5rpx;
|
||||
padding-bottom: 30rpx;
|
||||
position: relative;
|
||||
}
|
||||
.chunk .list .item .angle {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 75rpx;
|
||||
height: 76.5rpx;
|
||||
}
|
||||
.chunk .list .item .ranking {
|
||||
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-style: normal;
|
||||
font-size: 24rpx;
|
||||
color: #000000;
|
||||
width: 76.5rpx;
|
||||
}
|
||||
.chunk .list .item .head {
|
||||
align-items: flex-start;
|
||||
}
|
||||
.chunk .list .item .head .name {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
}
|
||||
.chunk .list .item .head .mark {
|
||||
font-size: 27rpx;
|
||||
color: #333333;
|
||||
}
|
||||
.chunk .list .item .head .mark .text {
|
||||
font-size: 21rpx;
|
||||
color: #AAAAAA;
|
||||
}
|
||||
.chunk .list .item .english {
|
||||
font-size: 21rpx;
|
||||
line-height: 42rpx;
|
||||
color: #333333;
|
||||
margin-bottom: 3rpx;
|
||||
}
|
||||
.chunk .list .item .bottom {
|
||||
justify-content: space-between;
|
||||
}
|
||||
.chunk .list .item .bottom .site {
|
||||
font-size: 22.5rpx;
|
||||
line-height: 42rpx;
|
||||
color: #7F7F7F;
|
||||
}
|
||||
.chunk .list .item .bottom .btn {
|
||||
width: 162rpx;
|
||||
height: 54rpx;
|
||||
line-height: 54rpx;
|
||||
background-color: #f95d5d;
|
||||
border-radius: 142.5rpx;
|
||||
font-size: 24rpx;
|
||||
color: #FFFFFF;
|
||||
padding: 0 15rpx;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.chunk .list .item .bottom .btn .icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
}
|
||||
.chunk .end {
|
||||
padding-top: 60rpx;
|
||||
text-align: center;
|
||||
font-size: 19.5rpx;
|
||||
color: #D7D7D7;
|
||||
}
|
||||
.screen-mask {
|
||||
background-color: rgba(0, 0, 0, 0.70588235);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
z-index: 100;
|
||||
}
|
||||
.screen-mask .screen-box {
|
||||
width: 100vw;
|
||||
background-color: #FFFFFF;
|
||||
padding-top: 43.5rpx;
|
||||
border-radius: 45rpx 45rpx 0 0;
|
||||
}
|
||||
.screen-mask .screen-box .head {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 45rpx;
|
||||
text-align: center;
|
||||
}
|
||||
.screen-mask .screen-box .box {
|
||||
margin: 0 22.5rpx 30rpx;
|
||||
background-color: #fbfbfb;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 15rpx;
|
||||
padding: 16.5rpx 18rpx 30rpx 18rpx;
|
||||
}
|
||||
.screen-mask .screen-box .box .title {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 45rpx;
|
||||
}
|
||||
.screen-mask .screen-box .box .major-box {
|
||||
height: 72rpx;
|
||||
line-height: 72rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #ccd003;
|
||||
border-radius: 112.5rpx;
|
||||
padding-left: 30rpx;
|
||||
padding-right: 22.5rpx;
|
||||
}
|
||||
.screen-mask .screen-box .box .major-box .text {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 24rpx;
|
||||
color: #9A9D02;
|
||||
}
|
||||
.screen-mask .screen-box .box .major-box .text.text-no {
|
||||
color: #AAAAAA;
|
||||
font-weight: 400;
|
||||
}
|
||||
.screen-mask .screen-box .box .major-box .icon {
|
||||
width: 10.5rpx;
|
||||
height: 18rpx;
|
||||
}
|
||||
.screen-mask .screen-box .box .list {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.screen-mask .screen-box .box .list .item {
|
||||
min-width: 150rpx;
|
||||
height: 72rpx;
|
||||
line-height: 72rpx;
|
||||
background-color: #f6f6f6;
|
||||
border-radius: 112.5rpx;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
margin-right: 15rpx;
|
||||
padding: 0 15rpx;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
.screen-mask .screen-box .box .list .item.pitch {
|
||||
border: 1rpx solid #ccd003;
|
||||
font-weight: 650;
|
||||
color: #9A9D02;
|
||||
}
|
||||
.screen-mask .screen-box .footer {
|
||||
margin-top: 45rpx;
|
||||
height: 201rpx;
|
||||
border-top: 1rpx solid #ebebeb;
|
||||
justify-content: space-between;
|
||||
font-size: 30rpx;
|
||||
padding: 45rpx 30rpx 0 30rpx;
|
||||
}
|
||||
.screen-mask .screen-box .footer .cancel {
|
||||
width: 225rpx;
|
||||
height: 96rpx;
|
||||
background-color: rgba(207, 247, 255, 0);
|
||||
border: 1rpx solid #d7d7d7;
|
||||
border-radius: 112.5rpx;
|
||||
color: #555555;
|
||||
}
|
||||
.screen-mask .screen-box .footer .confirm {
|
||||
width: 435rpx;
|
||||
height: 96rpx;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
color: #026277;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 112.5rpx;
|
||||
}
|
||||
.index-sidebar {
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
}
|
953
pages/projectMy/projectMy.js
Normal file
953
pages/projectMy/projectMy.js
Normal file
@ -0,0 +1,953 @@
|
||||
// pages/projectMy/projectMy.js
|
||||
var miucms = require('../../utils/miucms.js');
|
||||
let app = getApp()
|
||||
const util = require('../../utils/util')
|
||||
const common = require('../../utils/commonMethod')
|
||||
|
||||
Page({
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
informationState: false, // 授权后可能需要弹出完成信息框 个人背景那些
|
||||
islogin: false,
|
||||
isloginBtnState: false,
|
||||
|
||||
isFirstPattern: true,
|
||||
classify: "vs", // vs manage '' 代表都没有数据
|
||||
move: 0,
|
||||
manageHintState: false, // 底部的提示的显示状态
|
||||
|
||||
list: [],
|
||||
listCount: 0,
|
||||
page: 1,
|
||||
|
||||
stateObj: {
|
||||
0: "待定",
|
||||
1: "主申",
|
||||
2: "冲刺",
|
||||
3: "保底",
|
||||
},
|
||||
|
||||
isloading: false, // 项目管理获取 item 高度是否完成
|
||||
headTop: 0, // 项目管理头部的高度
|
||||
dragging: null, // 是否在拖拽中
|
||||
arrHeight: 0, // 项目管理的高度
|
||||
|
||||
quickList: [], // 快速对比 列表
|
||||
quickMoreState: false, // 快速对比 的 全部显示状态
|
||||
|
||||
typeList: [],
|
||||
typeIndex: 0,
|
||||
typeid: "", // 项目管理
|
||||
|
||||
projectPage: 1,
|
||||
projectList: [], // 项目对比
|
||||
projectCount: [], // 项目对比 数量
|
||||
|
||||
selectList: [], // 选中列表
|
||||
|
||||
// allQuickHeight: 0,
|
||||
|
||||
vsBottom: false, // 底部显示状态
|
||||
|
||||
// isInitFinish: false,
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
rpx30: 30,
|
||||
rpx219: 219,
|
||||
options: {},
|
||||
onLoad(options) {
|
||||
this.options = options
|
||||
this.deleteWidth = util.rpxTopx(180 + 30)
|
||||
miucms.pageStart(app).then(() => {
|
||||
// 判断是否需要显示底部提示
|
||||
let manageHintState = true
|
||||
if (wx.getStorageSync("PMState")) manageHintState = false
|
||||
|
||||
const islogin = app.globalData.user.uid > 0 ? true : false
|
||||
const screen_data = app.globalData.screen_data
|
||||
this.setData({
|
||||
screen_data,
|
||||
islogin,
|
||||
manageHintState,
|
||||
// isInitFinish: true,
|
||||
})
|
||||
|
||||
this.windowHeight = screen_data.windowHeight || 812
|
||||
|
||||
// if (!this.indexSidebar) this.indexSidebar = this.selectComponent('#index-sidebar')
|
||||
|
||||
if (!islogin) this.openLoginBtnState()
|
||||
|
||||
this.rpx30 = util.rpxTopx(30)
|
||||
this.rpx219 = util.rpxTopx(219)
|
||||
|
||||
this.getList().then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
const nums = data.nums || {}
|
||||
let classify = 'vs'
|
||||
if (nums['contrast'] == 0 && nums['manage'] == 0) {
|
||||
classify = ''
|
||||
} else if (nums['contrast'] == 0 && nums['manage'] != 0) {
|
||||
classify = 'manage'
|
||||
this.handleUserProjectData(res)
|
||||
} else {
|
||||
this.getQuickList()
|
||||
this.handleProjectListData(res)
|
||||
}
|
||||
|
||||
this.setData({
|
||||
classify,
|
||||
})
|
||||
})
|
||||
}).catch(res => {})
|
||||
},
|
||||
|
||||
// 公共的获取列表 方法
|
||||
getList(obj = {}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
|
||||
util.wxpost("/api/project.user", {
|
||||
limit: 2000,
|
||||
page: obj.page || 1,
|
||||
typeid: obj.typeid || '',
|
||||
}).then(res => resolve(res)).finally(() => wx.hideLoading())
|
||||
})
|
||||
},
|
||||
|
||||
getProjectList() {
|
||||
if (this.data.projectPage == 0) return
|
||||
|
||||
this.getList({
|
||||
page: this.data.projectPage,
|
||||
}).then(res => {
|
||||
console.log("getUserProject");
|
||||
this.handleProjectListData(res)
|
||||
})
|
||||
},
|
||||
|
||||
handleProjectListData(res) {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
let list = data.data || []
|
||||
let projectCount = 0
|
||||
list.forEach(element => {
|
||||
if (element.status == 1) projectCount++
|
||||
})
|
||||
let projectList = this.data.projectList.concat(list)
|
||||
|
||||
this.setData({
|
||||
projectCount: projectCount + this.data.projectCount,
|
||||
projectList,
|
||||
projectPage: data.count > data.limit * data.page ? this.data.projectPage + 1 : 0,
|
||||
})
|
||||
},
|
||||
|
||||
// 获取快速列表
|
||||
getQuickList() {
|
||||
util.wxget("/api/project.contrast/getQuickList", {}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
const quickList = data || []
|
||||
this.setData({
|
||||
quickList,
|
||||
quickMoreState: quickList.length > 3 ? false : true,
|
||||
|
||||
vsBottom: quickList.length == 0 ? true : false,
|
||||
})
|
||||
|
||||
// 计算 快速对比的高度的 隐藏高度
|
||||
if (quickList.length > 3) this.calculateQuickHeight()
|
||||
this.listeningNode()
|
||||
})
|
||||
},
|
||||
|
||||
// 获取项目管理
|
||||
getUserProject() {
|
||||
if (this.data.page == 0) return
|
||||
this.getList({
|
||||
page: this.data.page,
|
||||
typeid: this.data.typeid
|
||||
}).then(res => {
|
||||
console.log("getUserProject");
|
||||
this.handleUserProjectData(res)
|
||||
})
|
||||
},
|
||||
|
||||
handleUserProjectData(res) {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
let list = this.data.list.concat(data.data || [])
|
||||
list.forEach((element, index) => {
|
||||
element['sortKey'] = index
|
||||
})
|
||||
|
||||
this.setData({
|
||||
list,
|
||||
typeList: data.typeList,
|
||||
page: data.count > data.limit * data.page ? this.data.page + 1 : 0,
|
||||
listCount: data.count,
|
||||
}, () => this.calculateManageHeight())
|
||||
},
|
||||
|
||||
// 计算快速对比的高度 和 隐藏高度
|
||||
calculateQuickHeight() {
|
||||
const quickList = this.data.quickList || []
|
||||
let allQuickHeight = 0
|
||||
let first3_5 = 0
|
||||
quickList.forEach((element, index) => {
|
||||
let height = 186
|
||||
if (element.data.length == 3) height = 239.25
|
||||
|
||||
if (index < 3) first3_5 += height
|
||||
if (index == 3) first3_5 += (height / 2)
|
||||
|
||||
allQuickHeight += height
|
||||
})
|
||||
|
||||
first3_5 = util.rpxTopx(first3_5)
|
||||
allQuickHeight = util.rpxTopx(allQuickHeight)
|
||||
|
||||
this.setData({
|
||||
first3_5,
|
||||
allQuickHeight,
|
||||
})
|
||||
},
|
||||
|
||||
// 计算项目管理的高度
|
||||
calculateManageHeight() {
|
||||
const query = this.createSelectorQuery();
|
||||
let arrHeight = 0
|
||||
query.select(".manage-box .list").boundingClientRect(res => {
|
||||
const top = res.top
|
||||
|
||||
this.createSelectorQuery().selectAll(".manage-box .list .item").boundingClientRect(res => {
|
||||
|
||||
let obj = {}
|
||||
res.sort((a, b) => a.dataset.key - b.dataset.key);
|
||||
|
||||
let totalHeight = 0
|
||||
res.forEach(element => {
|
||||
const key = element.dataset.key
|
||||
let height = element.height
|
||||
|
||||
if (height != 0) height += this.rpx30 // 删除了不需要高度
|
||||
|
||||
arrHeight += height
|
||||
|
||||
obj[key] = {
|
||||
top: totalHeight,
|
||||
height,
|
||||
}
|
||||
|
||||
totalHeight += height
|
||||
})
|
||||
|
||||
let list = this.data.list || []
|
||||
|
||||
list.forEach((element, index) => {
|
||||
element['top'] = obj[element.sortKey].top
|
||||
element['height'] = obj[element.sortKey].height
|
||||
})
|
||||
|
||||
this.setData({
|
||||
list,
|
||||
isloading: true,
|
||||
headTop: top,
|
||||
arrHeight,
|
||||
})
|
||||
|
||||
}).exec();
|
||||
}).exec();
|
||||
},
|
||||
|
||||
// 切换查看类型
|
||||
cutClassify(e) {
|
||||
const classify = e.currentTarget.dataset.type
|
||||
if (classify == this.data.classify) return
|
||||
this.setData({
|
||||
classify,
|
||||
// isInitFinish: false,
|
||||
})
|
||||
|
||||
if (this.data.classify == 'manage') {
|
||||
this.setData({
|
||||
page: 1,
|
||||
typeid: "",
|
||||
arrHeight: 0,
|
||||
list: [],
|
||||
})
|
||||
this.getUserProject()
|
||||
}
|
||||
if (this.data.classify == 'vs') {
|
||||
this.setData({
|
||||
quickList: [],
|
||||
quickMoreState: false,
|
||||
projectPage: 1,
|
||||
projectList: [],
|
||||
selectList: [],
|
||||
// isInitFinish: true,
|
||||
})
|
||||
this.getProjectList()
|
||||
this.getQuickList()
|
||||
}
|
||||
},
|
||||
|
||||
deleteWidth: 150, // 删除按钮的 宽度
|
||||
x: 0,
|
||||
shtouchmove(e) {
|
||||
this.x = e.detail.x
|
||||
},
|
||||
|
||||
handleTouchEnd(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
const type = e.currentTarget.dataset.type
|
||||
let move = 0
|
||||
|
||||
if (Math.abs(this.x) > this.deleteWidth / 2) move = -this.deleteWidth
|
||||
this.setData({
|
||||
[`${type}[${index}].move`]: move
|
||||
})
|
||||
|
||||
this.x = 0
|
||||
},
|
||||
|
||||
// 关闭 底部提示框
|
||||
manageClose() {
|
||||
this.setData({
|
||||
manageHintState: false,
|
||||
})
|
||||
|
||||
wx.setStorageSync('PMState', 1)
|
||||
},
|
||||
|
||||
// 项目的里的排序 拖拽
|
||||
movableChange(e) {
|
||||
if (e.detail.source != 'touch') return
|
||||
|
||||
let list = this.data.list || []
|
||||
const index = e.target.dataset.index
|
||||
let item = list[index]
|
||||
item.touch = true
|
||||
},
|
||||
|
||||
pointDistance: 0, // 点距离顶部
|
||||
longPress(e) {
|
||||
let index = e.currentTarget.dataset.index;
|
||||
let list = this.data.list || []
|
||||
this.setData({
|
||||
dragging: index,
|
||||
})
|
||||
this.pointDistance = e.detail.y - list[index].top - this.data.headTop
|
||||
wx.vibrateShort({
|
||||
type: "heavy",
|
||||
})
|
||||
this.setData({
|
||||
list,
|
||||
})
|
||||
},
|
||||
|
||||
timerr: null,
|
||||
touchMove(e) {
|
||||
clearTimeout(this.touchEndTmer)
|
||||
if (Math.random() < 0.3 || Date.now() - this.timerr < 20) return
|
||||
this.timerr = Date.now()
|
||||
|
||||
let key = e.currentTarget.dataset.key;
|
||||
let list = this.data.list || []
|
||||
let currentTouch = e.changedTouches[0];
|
||||
if (!currentTouch) return;
|
||||
|
||||
let index = 0 // 当前 item 的下标 注意 因为 拖拽的 所以和 wx:for 表面上的 index 不一致
|
||||
list.forEach((element, i) => {
|
||||
if (element.sortKey == key) index = i
|
||||
})
|
||||
|
||||
if (this.data.dragging == null) return;
|
||||
|
||||
// 设置当前 item 的定位 item
|
||||
const top = currentTouch.pageY - this.data.headTop - this.pointDistance
|
||||
const bottom = top + list[index].height
|
||||
list[index].top = top
|
||||
|
||||
// 判断 有没有到其他 item 地盘
|
||||
let keyTop = key - 1
|
||||
let keyBottom = key + 1
|
||||
if (keyTop >= 0) {
|
||||
let keyTopIndex = list.findIndex(element => element.sortKey === keyTop);
|
||||
let keyItem = list[keyTopIndex]
|
||||
|
||||
let keyHeight = keyItem.height || 0
|
||||
const middleLine = keyItem.top + keyHeight / 2 // 上一个的中间线
|
||||
if (top <= middleLine) {
|
||||
// 交换 sortKey
|
||||
const akey = key
|
||||
list[index].sortKey = keyItem.sortKey
|
||||
list[keyTopIndex].sortKey = akey
|
||||
list[keyTopIndex].top = this.calculateHeight(JSON.parse(JSON.stringify(list)), key)
|
||||
}
|
||||
}
|
||||
|
||||
if (keyBottom < list.length) {
|
||||
let keyBottomIndex = list.findIndex(element => element.sortKey === keyBottom);
|
||||
|
||||
let keyItem = JSON.parse(JSON.stringify(list[keyBottomIndex]))
|
||||
|
||||
let keyHeight = keyItem.height
|
||||
const middleLine = keyItem.top + keyHeight / 2 // 下一个的中间线
|
||||
if (bottom >= middleLine) {
|
||||
// 交换 sortKey
|
||||
const akey = key
|
||||
list[index].sortKey = keyItem.sortKey
|
||||
list[keyBottomIndex].sortKey = akey
|
||||
list[keyBottomIndex].top = this.calculateHeight(JSON.parse(JSON.stringify(list)), key)
|
||||
}
|
||||
}
|
||||
|
||||
this.setData({
|
||||
list,
|
||||
})
|
||||
},
|
||||
|
||||
touchEndTmer: null,
|
||||
touchEnd(e) {
|
||||
this.setData({
|
||||
dragging: null,
|
||||
})
|
||||
let key = e.currentTarget.dataset.key;
|
||||
let list = this.data.list || []
|
||||
|
||||
let index = 0
|
||||
|
||||
list.forEach((element, i) => {
|
||||
if (element.sortKey == key) index = i
|
||||
})
|
||||
|
||||
list[index].top = this.calculateHeight(JSON.parse(JSON.stringify(list)), key)
|
||||
|
||||
this.setData({
|
||||
list
|
||||
})
|
||||
|
||||
this.touchEndTmer = setTimeout(() => {
|
||||
let list = JSON.parse(JSON.stringify(this.data.list)) || []
|
||||
// 按照 id 属性排序
|
||||
const sortedArray = list.slice().sort((a, b) => a.sortKey - b.sortKey);
|
||||
|
||||
// 获取排序后的对象在原数组中的索引位置
|
||||
const indexes = sortedArray.map(obj => list.indexOf(obj));
|
||||
|
||||
let accumulatedHeight = 0;
|
||||
|
||||
indexes.forEach((element, i) => {
|
||||
list[element].top = accumulatedHeight
|
||||
accumulatedHeight += list[element].height
|
||||
})
|
||||
this.setData({
|
||||
list
|
||||
})
|
||||
}, 800)
|
||||
|
||||
let targetList = JSON.parse(JSON.stringify(list))
|
||||
// 按照 sortKey 属性对数组进行排序
|
||||
targetList.sort((a, b) => a.sortKey - b.sortKey);
|
||||
|
||||
let newId = []
|
||||
// 输出排序后的对象的 id 属性
|
||||
targetList.forEach(obj => {
|
||||
newId.push(obj.projectid)
|
||||
});
|
||||
|
||||
util.wxpost("/api/project.user/changeSorting", {
|
||||
projectids: newId
|
||||
}).then(res => common.toast(res.message))
|
||||
},
|
||||
|
||||
calculateHeight(list, key) {
|
||||
let height = 0
|
||||
list.forEach(element => {
|
||||
if (element.sortKey < key) height += element.height
|
||||
})
|
||||
return height
|
||||
},
|
||||
|
||||
scrollTop: 0, // 滚动的距离
|
||||
// indexSidebar: null,
|
||||
windowHeight: 812,
|
||||
onPageScroll(e) {
|
||||
if (Math.random() < 0.5) return
|
||||
let scrollTop = e.scrollTop
|
||||
this.scrollTop = scrollTop
|
||||
|
||||
let isFirstPattern = true
|
||||
if (scrollTop > this.rpx219) isFirstPattern = false
|
||||
|
||||
// if (this.data.isFirstPattern != isFirstPattern) {
|
||||
// this.setData({
|
||||
// isFirstPattern,
|
||||
// })
|
||||
// }
|
||||
|
||||
// let sidebarState = this.indexSidebar.data.sidebarState
|
||||
// if (scrollTop > this.windowHeight * 3 && sidebarState !== 3) sidebarState = 3
|
||||
|
||||
// if (scrollTop < this.windowHeight * 3 && sidebarState == 3) sidebarState = 2
|
||||
|
||||
// // 同一搜集 修改的 sidebarState
|
||||
// if (sidebarState !== this.indexSidebar.data.sidebarState) {
|
||||
// this.indexSidebar.setData({
|
||||
// sidebarState
|
||||
// })
|
||||
// }
|
||||
|
||||
// this.indexSidebar.openSidebarTwoHide()
|
||||
},
|
||||
|
||||
slowScrollNow: "",
|
||||
slowScrollTo(type) {
|
||||
if (Date.now() - this.slowScrollNow > 350) {
|
||||
wx.pageScrollTo({
|
||||
scrollTop: this.scrollTop - 150,
|
||||
});
|
||||
this.slowScrollNow = Date.now()
|
||||
}
|
||||
},
|
||||
|
||||
openInput(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
let list = this.data.list
|
||||
list[index]['input'] = 1
|
||||
this.setData({
|
||||
list
|
||||
})
|
||||
},
|
||||
|
||||
linechange(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
this.calculateManageHeight()
|
||||
},
|
||||
|
||||
bindblur(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
let list = this.data.list
|
||||
list[index]['input'] = 0
|
||||
this.setData({
|
||||
list
|
||||
})
|
||||
|
||||
wx.nextTick(() => {
|
||||
this.calculateManageHeight()
|
||||
})
|
||||
|
||||
const target = list[index] || {}
|
||||
this.postRemarks(target.token, target.remarks)
|
||||
},
|
||||
|
||||
// 发送 备注
|
||||
postRemarks(token, remarks) {
|
||||
util.wxpost("/api/project.user/remarks", {
|
||||
token,
|
||||
remarks,
|
||||
}).then(res => {
|
||||
common.toast(res.message)
|
||||
})
|
||||
},
|
||||
|
||||
// 备注输入
|
||||
inputRemark(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
let list = this.data.list
|
||||
const value = e.detail.value
|
||||
list[index]['remarks'] = value
|
||||
this.setData({
|
||||
list
|
||||
})
|
||||
},
|
||||
|
||||
// 展开 快速对比的 全部
|
||||
openQuickMore() {
|
||||
this.setData({
|
||||
quickMoreState: !this.data.quickMoreState,
|
||||
})
|
||||
},
|
||||
|
||||
// 选中
|
||||
cutSelect(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
const pitch = e.currentTarget.dataset.pitch || false // false 表示还没有选中
|
||||
|
||||
let projectList = this.data.projectList || []
|
||||
|
||||
const projectid = projectList[index].projectid
|
||||
|
||||
let selectList = this.data.selectList
|
||||
|
||||
// 检查数组中是否存在指定的id
|
||||
let indexx = selectList.findIndex(item => item == projectid);
|
||||
|
||||
if (indexx !== -1) {
|
||||
// 如果存在,删除该元素
|
||||
selectList.splice(indexx, 1);
|
||||
projectList[index]['pitch'] = false
|
||||
} else if (selectList.length < 3) {
|
||||
// 如果不存在,将新元素推入数组
|
||||
selectList.push(projectid);
|
||||
projectList[index]['pitch'] = true
|
||||
}
|
||||
|
||||
if (selectList.length >= 2) {
|
||||
this.setData({
|
||||
vsBottom: true,
|
||||
})
|
||||
}
|
||||
|
||||
this.setData({
|
||||
projectList,
|
||||
selectList,
|
||||
})
|
||||
},
|
||||
|
||||
// 跳转 项目对比
|
||||
goContrast(e) {
|
||||
const ids = e.currentTarget.dataset.ids
|
||||
common.goPage(`/pages/projectComparison/projectComparison?ids=${ ids }`)
|
||||
},
|
||||
|
||||
// 点击删除快速对比
|
||||
quickDelete(e) {
|
||||
const id = e.currentTarget.dataset.id
|
||||
const index = e.currentTarget.dataset.index
|
||||
const quickList = this.data.quickList
|
||||
|
||||
util.wxpost("/api/project.contrast/deleteQuick", {
|
||||
id
|
||||
}).then(res => {
|
||||
quickList.splice(index, 1)
|
||||
common.toast(res.message)
|
||||
let allQuickHeight = this.data.allQuickHeight
|
||||
this.setData({
|
||||
quickList,
|
||||
allQuickHeight,
|
||||
})
|
||||
|
||||
this.calculateQuickHeight()
|
||||
})
|
||||
|
||||
this.x = 0
|
||||
},
|
||||
|
||||
// 跳转 对比
|
||||
statePitch(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
const state = e.currentTarget.dataset.state
|
||||
|
||||
let list = this.data.list || []
|
||||
list.forEach(element => {
|
||||
element['state'] = false
|
||||
})
|
||||
list[index]['state'] = !state
|
||||
this.setData({
|
||||
list,
|
||||
})
|
||||
},
|
||||
|
||||
// 点击对比
|
||||
startContrast() {
|
||||
let arr = this.data.selectList
|
||||
|
||||
if (arr.length == 0 || arr.length < 2) {
|
||||
common.toast(arr.length == 0 ? '请选择项目' : '请选择2~3个项目')
|
||||
return
|
||||
}
|
||||
common.goPage(`/pages/projectComparison/projectComparison?ids=${arr}`)
|
||||
let projectList = this.data.projectList || []
|
||||
projectList.forEach(element => {
|
||||
element['pitch'] = false
|
||||
})
|
||||
this.setData({
|
||||
selectList: [],
|
||||
projectList,
|
||||
})
|
||||
},
|
||||
|
||||
// 点击项目管理的删除
|
||||
delete(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
|
||||
let list = this.data.list
|
||||
const target = list[index]
|
||||
|
||||
util.wxpost("/api/project.user/delete", {
|
||||
token: target.token,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
common.toast(res.message)
|
||||
|
||||
const typeList = this.data.typeList || []
|
||||
|
||||
const stateObj = this.data.stateObj
|
||||
const stateName = stateObj[target.typeid]
|
||||
typeList.forEach(element => {
|
||||
if (element.name == '全部') element.count--
|
||||
if (element.name == stateName) element.count--
|
||||
})
|
||||
|
||||
const height = target['height']
|
||||
list[index]['ismanage'] = 0
|
||||
list[index]['height'] = 0
|
||||
|
||||
// 对数组按sortKey进行排序
|
||||
list.sort((a, b) => a.sortKey - b.sortKey);
|
||||
|
||||
// 初始化累加的高度
|
||||
let accumulatedHeight = 0;
|
||||
|
||||
list.forEach((element, i) => {
|
||||
element.top = accumulatedHeight
|
||||
accumulatedHeight += element.height
|
||||
})
|
||||
|
||||
let arrHeight = 0
|
||||
|
||||
list.forEach(element => {
|
||||
arrHeight += element.height
|
||||
})
|
||||
|
||||
this.setData({
|
||||
list,
|
||||
arrHeight,
|
||||
typeList,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 修改 项目 状态
|
||||
changeType(e) {
|
||||
const typeid = e.currentTarget.dataset.typeid
|
||||
const index = e.currentTarget.dataset.index
|
||||
const list = this.data.list || []
|
||||
const target = JSON.parse(JSON.stringify(list[index])) || {}
|
||||
|
||||
util.wxpost("/api/project.user/changeType", {
|
||||
token: target.token,
|
||||
typeid,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
|
||||
const typeList = this.data.typeList || []
|
||||
const typeIndex = this.data.typeIndex || 0
|
||||
|
||||
const stateObj = this.data.stateObj
|
||||
const stateNameFront = stateObj[target.typeid] // 修改前的状态
|
||||
const stateNameAfter = stateObj[typeid] // 修改后的状态
|
||||
typeList.forEach(element => {
|
||||
if (element.name == stateNameFront) element.count--
|
||||
if (element.name == stateNameAfter) element.count++
|
||||
})
|
||||
|
||||
list[index]['typeid'] = typeid
|
||||
list[index]['state'] = false
|
||||
|
||||
if (typeIndex != 0) {
|
||||
list[index]['ismanage'] = 0
|
||||
list[index]['height'] = 0
|
||||
|
||||
// 对数组按sortKey进行排序
|
||||
list.sort((a, b) => a.sortKey - b.sortKey);
|
||||
|
||||
// 初始化累加的高度
|
||||
let accumulatedHeight = 0;
|
||||
|
||||
list.forEach((element, i) => {
|
||||
element.top = accumulatedHeight
|
||||
accumulatedHeight += element.height
|
||||
})
|
||||
|
||||
let arrHeight = 0
|
||||
|
||||
list.forEach(element => {
|
||||
arrHeight += element.height
|
||||
})
|
||||
|
||||
this.setData({
|
||||
arrHeight,
|
||||
})
|
||||
}
|
||||
|
||||
this.setData({
|
||||
list,
|
||||
typeList,
|
||||
})
|
||||
})
|
||||
|
||||
},
|
||||
|
||||
// 点击头部 tab
|
||||
cutTypeid(e) {
|
||||
const typeid = e.currentTarget.dataset.value
|
||||
const index = e.currentTarget.dataset.index
|
||||
|
||||
this.setData({
|
||||
typeid,
|
||||
typeIndex: index,
|
||||
list: [],
|
||||
page: 1,
|
||||
}, () => this.getUserProject())
|
||||
|
||||
},
|
||||
|
||||
// 点击删除对比库
|
||||
projectDelete(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
const projectid = e.currentTarget.dataset.projectid
|
||||
|
||||
util.wxpost("/api/project.contrast/delete", {
|
||||
projectid
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
|
||||
common.toast(res.message)
|
||||
|
||||
let projectList = this.data.projectList
|
||||
projectList.splice(index, 1)
|
||||
this.setData({
|
||||
projectList,
|
||||
projectCount: this.data.projectCount--,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
goPage(e) {
|
||||
const url = e.currentTarget.dataset.url
|
||||
common.goPage(url)
|
||||
},
|
||||
|
||||
observer: null,
|
||||
listeningNode() {
|
||||
this.observer = wx.createIntersectionObserver(this, {
|
||||
observeAll: true,
|
||||
thresholds: [0] // 设定阈值,表示元素一半进入可视区域时触发
|
||||
});
|
||||
|
||||
this.observer.relativeToViewport().observe('.quick-border', res => {
|
||||
if (res.intersectionRatio == 0) {
|
||||
this.setData({
|
||||
vsBottom: true,
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 打开 授权按钮
|
||||
openLoginBtnState() {
|
||||
this.setData({
|
||||
isloginBtnState: true,
|
||||
})
|
||||
},
|
||||
|
||||
// 关闭授权登录事件
|
||||
popClose() {
|
||||
this.setData({
|
||||
isloginBtnState: !this.data.isloginBtnState
|
||||
})
|
||||
},
|
||||
|
||||
userClickLogin(e) {
|
||||
let data = e.detail.data
|
||||
this.setData({
|
||||
islogin: true,
|
||||
isloginBtnState: false,
|
||||
informationState: data.regdatastep == 'success' ? false : true,
|
||||
quickList: [],
|
||||
quickMoreState: false,
|
||||
projectPage: 1,
|
||||
projectList: [],
|
||||
selectList: [],
|
||||
page: 1,
|
||||
typeid: "",
|
||||
arrHeight: 0,
|
||||
list: [],
|
||||
})
|
||||
this.onLoad(this.options)
|
||||
},
|
||||
|
||||
// 子组件传值 修改 完善信息组件的状态
|
||||
revampInformationState() {
|
||||
this.setData({
|
||||
informationState: false
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {
|
||||
if (app.globalData['isquickState']) this.getQuickList()
|
||||
|
||||
app.globalData['isquickState'] = false
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
wx.stopPullDownRefresh()
|
||||
|
||||
if (this.data.classify == 'manage') {
|
||||
this.setData({
|
||||
page: 1,
|
||||
typeid: "",
|
||||
arrHeight: 0,
|
||||
})
|
||||
this.getUserProject()
|
||||
}
|
||||
if (this.data.classify == 'vs') {
|
||||
this.setData({
|
||||
quickList: [],
|
||||
quickMoreState: false,
|
||||
projectPage: 1,
|
||||
projectList: [],
|
||||
selectList: [],
|
||||
})
|
||||
this.getProjectList()
|
||||
this.getQuickList()
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom() {
|
||||
if (this.data.classify == 'manage') this.getUserProject()
|
||||
if (this.data.classify == 'vs') this.getProjectList()
|
||||
},
|
||||
})
|
8
pages/projectMy/projectMy.json
Normal file
8
pages/projectMy/projectMy.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"enablePullDownRefresh": false,
|
||||
"usingComponents": {
|
||||
"header-nav": "/component/headerNav/headerNav",
|
||||
"go-login": "/component/goLogin/goLogin",
|
||||
"index-sidebar": "/component/indexSidebar/indexSidebar"
|
||||
}
|
||||
}
|
775
pages/projectMy/projectMy.less
Normal file
775
pages/projectMy/projectMy.less
Normal file
@ -0,0 +1,775 @@
|
||||
/* pages/projectMy/projectMy.wxss */
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
|
||||
.container {
|
||||
min-height: 80vh;
|
||||
padding-bottom: 180rpx;
|
||||
|
||||
&.no-data-bj {
|
||||
background-color: rgba(245, 245, 245, 1);
|
||||
}
|
||||
}
|
||||
|
||||
.header-box {
|
||||
width: 100vw;
|
||||
height: 219rpx;
|
||||
background: -webkit-linear-gradient(270deg, rgba(246, 246, 189, 1) 0%, rgba(245, 245, 245, 1) 100%);
|
||||
background: -moz-linear-gradient(180deg, rgba(246, 246, 189, 1) 0%, rgba(245, 245, 245, 1) 100%);
|
||||
background: linear-gradient(180deg, rgba(246, 246, 189, 1) 0%, rgba(245, 245, 245, 1) 100%);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.header-nav {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.classify {
|
||||
padding-top: 21rpx;
|
||||
font-size: 30rpx;
|
||||
color: #555555;
|
||||
// width: 100vh;
|
||||
height: 109.5rpx;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
background-color: rgba(237, 240, 244, 1);
|
||||
border-radius: 15rpx 15rpx 0 0;
|
||||
-moz-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.0470588235294118);
|
||||
-webkit-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.0470588235294118);
|
||||
box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.0470588235294118);
|
||||
|
||||
.classify-item {
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
|
||||
.pitch {
|
||||
position: absolute;
|
||||
top: -26rpx;
|
||||
left: 0;
|
||||
width: 375rpx;
|
||||
height: 90rpx;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
overflow: hidden;
|
||||
|
||||
&.right {
|
||||
left: auto;
|
||||
right: 0;
|
||||
|
||||
.text {
|
||||
margin-left: 115.5rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
left: -4.5rpx;
|
||||
top: -4.5rpx;
|
||||
width: 385.5rpx;
|
||||
height: 100.5rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-top: 27rpx;
|
||||
margin-left: 73.5rpx;
|
||||
|
||||
.text-icon-box {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.manage-box {
|
||||
|
||||
.state-scroll {
|
||||
margin-top: -27rpx;
|
||||
background-color: #ffffff;
|
||||
position: relative;
|
||||
width: 100vw;
|
||||
white-space: nowrap;
|
||||
box-sizing: border-box;
|
||||
|
||||
&.state-list {
|
||||
display: flex;
|
||||
padding-top: 48rpx;
|
||||
padding-left: 22.5rpx;
|
||||
padding-bottom: 30rpx;
|
||||
width: 100vw;
|
||||
|
||||
.item {
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
margin-right: 45rpx;
|
||||
display: flex;
|
||||
display: inline-block;
|
||||
|
||||
&.pitch {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
color: #000000;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
width: 100%;
|
||||
height: 12rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border-radius: 58.5rpx;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.list {
|
||||
padding: 0 22.5rpx;
|
||||
position: relative;
|
||||
min-height: 65vh;
|
||||
// width: auto;
|
||||
// height: auto;
|
||||
box-sizing: border-box;
|
||||
|
||||
.item {
|
||||
background-color: rgba(251, 251, 251, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 18rpx;
|
||||
padding-top: 22.5rpx;
|
||||
width: calc(100vw - 45rpx);
|
||||
|
||||
&:not(:last-of-type) {
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
&.itemTransition {
|
||||
transition: all .3s;
|
||||
}
|
||||
|
||||
&.zIndex {
|
||||
z-index: 10;
|
||||
box-shadow: 0 0 18rpx rgba(0, 0, 0, .1);
|
||||
}
|
||||
|
||||
&.cur {
|
||||
transition: initial;
|
||||
}
|
||||
|
||||
&.fixed {
|
||||
z-index: 0 !important;
|
||||
}
|
||||
|
||||
&.delete {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.top {
|
||||
padding-bottom: 18rpx;
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
padding-left: 22.5rpx;
|
||||
|
||||
.info {
|
||||
.name {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
|
||||
.english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 19.5rpx;
|
||||
}
|
||||
|
||||
.school {
|
||||
color: #333333;
|
||||
font-size: 24rpx;
|
||||
|
||||
.icon {
|
||||
width: 24rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 12rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.state {
|
||||
width: 150rpx;
|
||||
height: 105rpx;
|
||||
position: relative;
|
||||
|
||||
.state-mask {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.state-box {
|
||||
border-radius: 12rpx;
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
|
||||
&.show {
|
||||
background-color: rgba(245, 252, 253, 1);
|
||||
box-shadow: 0 0 7.5rpx rgba(0, 0, 0, 0.2),
|
||||
0 0 0 1rpx rgba(242, 242, 242, 1);
|
||||
z-index: 3;
|
||||
|
||||
.state-list {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.delete {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
|
||||
&.undetermined {
|
||||
.state-pitch {
|
||||
background-color: rgba(249, 93, 93, 1);
|
||||
}
|
||||
|
||||
.state-list {
|
||||
.state-item {
|
||||
&.pitch {
|
||||
color: #F95D5D;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.state-pitch {
|
||||
width: 105rpx;
|
||||
height: 60rpx;
|
||||
background-color: rgba(4, 176, 213, 1);
|
||||
border-radius: 12rpx;
|
||||
font-size: 24rpx;
|
||||
color: #FFFFFF;
|
||||
margin: 22.5rpx 22.5rpx 18rpx;
|
||||
|
||||
.icon {
|
||||
width: 16.5rpx;
|
||||
height: 9rpx;
|
||||
margin-left: 8rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.state-list {
|
||||
padding: 0 0 13.5rpx;
|
||||
border-bottom: 1rpx dotted #d7d7d7;
|
||||
display: none;
|
||||
|
||||
.state-item {
|
||||
height: 75rpx;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
|
||||
&.pitch {
|
||||
color: #04B0D5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.delete {
|
||||
display: none;
|
||||
padding: 31.5rpx 0;
|
||||
|
||||
.btn {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
background-color: #f2f2f2;
|
||||
border-radius: 50%;
|
||||
|
||||
.icon {
|
||||
width: 21rpx;
|
||||
height: 22.5rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.bottom {
|
||||
align-items: flex-start;
|
||||
|
||||
.edit {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
border-radius: 50%;
|
||||
background-color: #f2f2f2;
|
||||
margin-top: 33rpx;
|
||||
margin-left: 22.5rpx;
|
||||
|
||||
.icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.input {
|
||||
font-size: 24rpx;
|
||||
line-height: 36rpx;
|
||||
padding-top: 33rpx;
|
||||
padding-left: 22.5rpx;
|
||||
padding-bottom: 33rpx;
|
||||
word-break: break-all;
|
||||
white-space: pre-line;
|
||||
|
||||
&.text {
|
||||
min-height: 102rpx;
|
||||
}
|
||||
|
||||
&.placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
}
|
||||
|
||||
.drag-box {
|
||||
padding: 34.5rpx 22rpx 0;
|
||||
|
||||
.icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.end {
|
||||
padding-top: 45rpx;
|
||||
padding-bottom: 45rpx;
|
||||
text-align: center;
|
||||
font-size: 19.5rpx;
|
||||
color: #D7D7D7;
|
||||
position: absolute;
|
||||
bottom: 120px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.manage-hint {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 150rpx;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border: 1rpx solid rgba(235, 235, 235, 1);
|
||||
padding-left: 22.5rpx;
|
||||
z-index: 2;
|
||||
|
||||
.icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-right: 15rpx;
|
||||
margin-top: 46.5rpx;
|
||||
|
||||
}
|
||||
|
||||
.hint-text {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-weight: 400;
|
||||
color: #555555;
|
||||
font-size: 24rpx;
|
||||
padding-right: 30rpx;
|
||||
margin-top: 42rpx;
|
||||
|
||||
text {
|
||||
font-weight: 650;
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
|
||||
.close {
|
||||
width: 118.5rpx;
|
||||
height: 150rpx;
|
||||
border-left: 1rpx solid #ebebeb;
|
||||
|
||||
.close-icon {
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.vs-box {
|
||||
margin-top: -27rpx;
|
||||
background-color: #ffffff;
|
||||
position: relative;
|
||||
|
||||
.head-box {
|
||||
.dot {
|
||||
width: 9rpx;
|
||||
height: 24rpx;
|
||||
background-color: rgba(204, 208, 3, 1);
|
||||
border: 1rpx solid rgba(154, 157, 2, 1);
|
||||
border-radius: 7.5rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
|
||||
font-weight: 400;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
padding-left: 30rpx;
|
||||
height: 112.5rpx;
|
||||
}
|
||||
|
||||
.select-box {
|
||||
|
||||
.list {
|
||||
|
||||
.item {
|
||||
width: calc(100vw - 60rpx);
|
||||
height: initial;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
margin: 0 30rpx;
|
||||
border-top: 1rpx dotted #ebebeb;
|
||||
|
||||
.movable-view {
|
||||
width: calc(100vw + 180rpx);
|
||||
height: initial;
|
||||
margin: 0 30rpx;
|
||||
position: relative;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.content {
|
||||
width: calc(100vw - 60rpx);
|
||||
margin-right: 30rpx;
|
||||
|
||||
}
|
||||
|
||||
.left {
|
||||
padding-top: 31.5rpx;
|
||||
// width: 643.5rpx;
|
||||
// width: 628.5rpx;
|
||||
padding-right: 15rpx;
|
||||
flex: 1;
|
||||
|
||||
.name {
|
||||
font-weight: 650;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
|
||||
.english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
|
||||
.message {
|
||||
color: #333333;
|
||||
font-size: 24rpx;
|
||||
margin-bottom: 30rpx;
|
||||
|
||||
.icon {
|
||||
width: 24rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
|
||||
.line {
|
||||
color: #d7d7d7;
|
||||
margin: 0 20rpx;
|
||||
}
|
||||
|
||||
.state-text {
|
||||
height: 33rpx;
|
||||
background-color: rgba(240, 241, 236, 1);
|
||||
border: 1rpx solid rgba(235, 235, 235, 1);
|
||||
border-radius: 9rpx;
|
||||
font-size: 22.5rpx;
|
||||
color: #7F7F7F;
|
||||
padding: 0 7.5rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
|
||||
.icon {
|
||||
width: 45rpx;
|
||||
height: 45rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.delete {
|
||||
width: 150rpx;
|
||||
background-color: rgba(249, 93, 93, 1);
|
||||
font-size: 27rpx;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.quick-box {
|
||||
|
||||
.list {
|
||||
transition: all .3s;
|
||||
overflow: hidden;
|
||||
|
||||
&.hide {
|
||||
height: 735rpx;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.movable-area {
|
||||
width: calc(100vw - 60rpx);
|
||||
height: initial;
|
||||
margin: 0 30rpx;
|
||||
overflow: hidden;
|
||||
border-radius: 18rpx;
|
||||
margin-bottom: 30rpx;
|
||||
|
||||
.item {
|
||||
width: calc(100vw + 180rpx);
|
||||
height: initial;
|
||||
margin: 0 30rpx;
|
||||
position: relative;
|
||||
display: flex;
|
||||
|
||||
.content {
|
||||
width: calc(100vw - 60rpx);
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 18rpx;
|
||||
padding: 34.5rpx 22.5rpx;
|
||||
justify-content: space-between;
|
||||
|
||||
.project-list {
|
||||
|
||||
.project-item {
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
line-height: 33.75rpx;
|
||||
|
||||
&:not(:last-of-type) {
|
||||
margin-bottom: 19.5rpx;
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 24rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 7.5rpx;
|
||||
}
|
||||
|
||||
.arrows {
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
margin: 0 13.5rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
width: 313.5rpx;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 150rpx;
|
||||
height: 60rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 172.5rpx;
|
||||
font-weight: 650;
|
||||
font-size: 24rpx;
|
||||
color: #026277;
|
||||
}
|
||||
}
|
||||
|
||||
z-index: 1;
|
||||
|
||||
.delete {
|
||||
width: 150rpx;
|
||||
border-radius: 0 18rpx 18rpx 0;
|
||||
position: relative;
|
||||
font-size: 27rpx;
|
||||
color: #FFFFFF;
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 120%;
|
||||
height: 100%;
|
||||
z-index: -1;
|
||||
background-color: rgba(249, 93, 93, 1);
|
||||
border-radius: 18rpx;
|
||||
width: 150rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.more-btn {
|
||||
height: 123rpx;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-top: -30rpx;
|
||||
background: #ffff;
|
||||
|
||||
&.pack {
|
||||
.icon {
|
||||
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
.mengcheng {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
margin-left: 16rpx;
|
||||
transition: all .3s;
|
||||
}
|
||||
|
||||
.mengcheng {
|
||||
width: calc(100vw - 60rpx);
|
||||
height: 48rpx;
|
||||
position: absolute;
|
||||
top: -48rpx;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.quick-border {
|
||||
height: 9rpx;
|
||||
background-color: rgba(242, 242, 242, 1);
|
||||
}
|
||||
|
||||
.vs-bottom {
|
||||
width: 100vw;
|
||||
height: 150rpx;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border: 1rpx solid rgba(235, 235, 235, 1);
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
padding: 0 22.5rpx;
|
||||
z-index: 10;
|
||||
|
||||
.begin-btn {
|
||||
height: 96rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 172.5rpx;
|
||||
font-weight: 650;
|
||||
font-size: 36rpx;
|
||||
color: #026277;
|
||||
}
|
||||
}
|
||||
|
||||
.lack-hint {
|
||||
position: fixed;
|
||||
left: 30rpx;
|
||||
bottom: 30rpx;
|
||||
width: 690rpx;
|
||||
height: 84rpx;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border-radius: 9rpx;
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
padding: 0 15rpx;
|
||||
|
||||
.icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.no-data {
|
||||
margin: 0 30rpx 30rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 18rpx;
|
||||
flex-direction: column;
|
||||
height: 80vh;
|
||||
|
||||
.icon {
|
||||
width: 120rpx;
|
||||
height: 141rpx;
|
||||
margin-bottom: 40.5rpx;
|
||||
}
|
||||
|
||||
.text {
|
||||
font-size: 24rpx;
|
||||
color: #7F7F7F;
|
||||
line-height: 45rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.empty {
|
||||
background-color: #fff;
|
||||
color: #7F7F7F;
|
||||
font-size: 23rpx;
|
||||
margin: 36rpx 0rpx 0;
|
||||
flex-direction: column;
|
||||
height: 60vh;
|
||||
|
||||
.dot-box {
|
||||
.dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
|
||||
&:not(:last-of-type) {
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.empty-icom {
|
||||
width: 153rpx;
|
||||
height: 180rpx;
|
||||
margin-top: 12rpx;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.index-sidebar {
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
}
|
205
pages/projectMy/projectMy.wxml
Normal file
205
pages/projectMy/projectMy.wxml
Normal file
@ -0,0 +1,205 @@
|
||||
<!--pages/projectMy/projectMy.wxml-->
|
||||
<view class="container {{ classify == '' ? 'no-data-bj' : '' }}">
|
||||
<header-nav class="header-nav" bgcolor="{{ isFirstPattern ? 'transparent' : '#f5f5f5' }}">我的项目</header-nav>
|
||||
<view class="header-box"></view>
|
||||
<view class="no-data flexcenter" wx:if="{{ classify == '' }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/empty-icon.png" mode="widthFix"></image>
|
||||
<view class="text">把你感兴趣的项目加进来,</view>
|
||||
<view class="text">可以做项目对比哦!</view>
|
||||
</view>
|
||||
|
||||
<view class="classify flexflex" wx:if="{{ classify != '' }}">
|
||||
<view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="vs">
|
||||
<view class="pitch" wx:if="{{ classify == 'vs' }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/list-left-icon.svg"></image>
|
||||
<view class="text flexacenter">
|
||||
<image class="text-icon-box" src="https://app.gter.net/image/miniApp/offer/vs-icon.png" mode="widthFix"></image>
|
||||
项目对比
|
||||
</view>
|
||||
</view>
|
||||
<block wx:else>项目对比</block>
|
||||
</view>
|
||||
<view class="classify-item flexflex flex1" bind:tap="cutClassify" data-type="manage">
|
||||
<view class="pitch right" wx:if="{{ classify == 'manage' }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/list-right-icon.svg"></image>
|
||||
<view class="text flexacenter">
|
||||
<image class="text-icon-box" src="https://app.gter.net/image/miniApp/offer/project-icon.png" mode="widthFix"></image>
|
||||
项目管理
|
||||
</view>
|
||||
</view>
|
||||
<block wx:else>项目管理</block>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="vs-box" wx:if="{{ classify == 'vs' }}">
|
||||
<view class="quick-box" wx:if="{{ quickList.length }}">
|
||||
<view class="head-box flexacenter">
|
||||
<view class="dot"></view>
|
||||
快速对比({{ quickList.length }})
|
||||
</view>
|
||||
<view class="list {{ !quickMoreState ? 'hide' : '' }}" style="height: {{ !quickMoreState ? first3_5 : allQuickHeight }}px;">
|
||||
<movable-area class="movable-area flexacenter" wx:for="{{ quickList }}" wx:key="index">
|
||||
<movable-view class="item" direction="horizontal" bindchange="shtouchmove" x='{{ item.move }}' bindtouchend="handleTouchEnd" data-type="{{ 'quickList' }}" data-index="{{ index }}" wx:key="index">
|
||||
<view class="content flexacenter">
|
||||
<view class="project-list">
|
||||
<view class="project-item flexacenter" wx:for="{{ item.data }}" wx:key="index">
|
||||
<image class="icon" mode="widthFix" src="{{ item.schoollogo }}"></image>
|
||||
{{ item.schoolalias }}
|
||||
<image class="arrows" src="https://app.gter.net/image/miniApp/offer/arrows-circle-yellow-green.svg" mode="widthFix"></image>
|
||||
<view class="text one-line-display">{{ item.name_zh }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="btn flexcenter" bind:tap="goContrast" data-ids="{{ item.projectid }}">开始对比</view>
|
||||
</view>
|
||||
<view class="delete flexcenter" bind:tap="quickDelete" data-id="{{ item.id }}" data-index="{{ index }}">删除</view>
|
||||
</movable-view>
|
||||
</movable-area>
|
||||
</view>
|
||||
|
||||
<view class="more-btn flexcenter {{ quickMoreState ? 'pack' : '' }}" bind:tap="openQuickMore" wx:if="{{ quickList.length > 3 }}">
|
||||
{{ quickMoreState ? '收起' : '展开全部' }}
|
||||
<image class="mengcheng" src="https://app.gter.net/image/miniApp/offer/mengcheng-icon.svg" mode="widthFix"></image>
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/arrow-circle.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="quick-border" wx:if="{{ quickList.length }}"></view>
|
||||
<view class="select-box">
|
||||
<view class="head-box flexacenter">
|
||||
<view class="dot"></view>
|
||||
选择2~3个项目开始对比
|
||||
</view>
|
||||
|
||||
<view class="list">
|
||||
<block wx:for="{{ projectList }}" wx:key="index">
|
||||
<movable-area wx:if="{{ item.status == 1 }}" class="item flexacenter">
|
||||
<movable-view class="movable-view" direction="horizontal" bindchange="shtouchmove" x='{{ item.move }}' bindtouchend="handleTouchEnd" data-type="{{ 'projectList' }}" data-index="{{ index }}" wx:key="index" bind:tap="goPage" data-url="/pages/projectDetails/projectDetails?uniqid={{ item.uniqid }}">
|
||||
<view class="content flexacenter" data-index="{{ index }}">
|
||||
<view class="left">
|
||||
<view class="name">{{ item.name_zh }}</view>
|
||||
<view class="english">{{ item.name_en }}</view>
|
||||
<view class="message flexacenter">
|
||||
<image class="icon" src="{{ item.schoollogo }}" mode="widthFix"></image>
|
||||
{{ item.schoolalias }}
|
||||
<block wx:if="{{ item.ismanage == 1 }}">
|
||||
<view class="line">|</view>
|
||||
<view class="state-text">{{ stateObj[item.typeid] }}</view>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
<view class="btn flexcenter" catch:tap="cutSelect" data-index="{{ index }}" data-pitch="{{ item.pitch }}">
|
||||
<image wx:if="{{ item.pitch }}" class="icon" src="https://app.gter.net/image/miniApp/offer/tick-red.svg" mode="widthFix"></image>
|
||||
<image wx:elif="{{ selectList.length == 3 }}" class="icon" src="https://app.gter.net/image/miniApp/offer/tick-gray.svg" mode="widthFix"></image>
|
||||
<image wx:else class="icon" src="https://app.gter.net/image/miniApp/offer/tick-dark-gray.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="delete flexcenter" catch:tap="projectDelete" data-index="{{ index }}" data-projectid="{{ item.projectid }}">删除</view>
|
||||
</movable-view>
|
||||
</movable-area>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<view class="empty flexcenter" wx:if="{{ projectCount == 0 && projectPage == 0 }}">
|
||||
<view class="dot-box flexacenter">
|
||||
<image class="dot" wx:for="{{ 3 }}" wx:key="index" mode="widthFix" src="https://app.gter.net/image/miniApp/project/u1829.svg"></image>
|
||||
<image class="dot" wx:for="{{ 3 }}" wx:key="index" mode="widthFix" src="https://app.gter.net/image/miniApp/project/u1832.svg"></image>
|
||||
</view>
|
||||
<image class="empty-icom" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/u1828.svg"></image>
|
||||
<view>暂无数据</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
<view class="vs-bottom flexacenter" wx:if="{{ vsBottom }}">
|
||||
<view class="begin-btn flex1 flexcenter" bind:tap="startContrast">开始对比</view>
|
||||
</view>
|
||||
|
||||
<view class="lack-hint flexacenter" wx:if="{{ projectCount < 2 }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/warning-icon.svg" mode="widthFix"></image>
|
||||
至少要有两个项目才能开始对比哦
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="manage-box" wx:elif="{{ classify == 'manage' }}">
|
||||
<scroll-view class="state-scroll state-list" scroll-x="{{ true }}">
|
||||
<view class="item {{ typeIndex == index ? 'pitch' : '' }}" wx:for="{{ typeList }}" wx:key="index" bind:tap="cutTypeid" data-value="{{ item.value }}" data-index="{{ index }}">{{ item.name }} {{ item.count }}</view>
|
||||
</scroll-view>
|
||||
<scroll-view class="list" scroll-x="{{ true }}" style="height: {{ arrHeight + 150 }}px;">
|
||||
<view class="item item{{ index }} {{ dragging == index ? 'zIndex' : 'itemTransition' }} {{ item.ismanage == 0 ? ' delete' : '' }}" wx:for="{{ list }}" wx:key="index" data-key="{{ item.sortKey }}" data-index="{{ index }}" catch:touchmove="{{ dragging != null ? 'touchMove' : '' }}" catch:touchend="{{ dragging != null ? 'touchEnd' : '' }}" style="top: {{ item.top }}px;position: {{ isloading ? 'absolute' : '' }}">
|
||||
<block wx:if="{{ item.ismanage == 0 }}"></block>
|
||||
<block wx:else>
|
||||
<view class="top flexacenter" catch:tap="goPage" data-url="/pages/projectDetails/projectDetails?uniqid={{ item.uniqid }}">
|
||||
<view class="info flex1">
|
||||
<view class="name">{{ item.name_zh }}</view>
|
||||
<view class="english">{{ item.name_en }}</view>
|
||||
<view class="school flexacenter">
|
||||
<image class="icon" src="{{ item.schoollogo }}" mode="widthFix"></image>
|
||||
{{ item.schoolalias }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="state">
|
||||
<view class="state-mask" wx:if="{{ item.state }}" catch:tap="statePitch" data-state="{{ item.state || false }}" data-index="{{ index }}"></view>
|
||||
<view class="state-box {{ item.typeid == 0 ? 'undetermined' : '' }} {{ item.state ? 'show' : '' }}">
|
||||
<view class="state-pitch flexcenter " catch:tap="statePitch" data-state="{{ item.state || false }}" data-index="{{ index }}">
|
||||
{{ stateObj[item.typeid] }}
|
||||
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-white.svg"></image>
|
||||
</view>
|
||||
|
||||
<view class="state-list">
|
||||
<view class="state-item flexcenter {{ item.typeid == i ? 'pitch' : '' }}" wx:for="{{ stateObj }}" wx:for-item="it" wx:for-index="i" wx:key="i" catch:tap="changeType" data-typeid="{{ i }}" data-index="{{ index }}">{{ it }}</view>
|
||||
</view>
|
||||
|
||||
<view class="delete flexcenter" catch:tap="delete" data-index="{{ index }}">
|
||||
<view class="btn flexcenter">
|
||||
<image class="icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/delete-light-grey.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="bottom flexflex">
|
||||
<view class="edit flexcenter">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/project/u1434.png" mode="widthFix"></image>
|
||||
</view>
|
||||
|
||||
<block wx:if="{{ item.input }}">
|
||||
<textarea class="input flex1" focus="{{ true }}" auto-focus="{{ true }}" auto-height="{{ true }}" placeholder="添加备注…" maxlength="100" cursor-spacing="10" bindinput="inputRemark" bindlinechange="linechange" bindblur="bindblur" data-index="{{ index }}" value="{{ item.remarks }}"></textarea>
|
||||
</block>
|
||||
<block wx:else>
|
||||
<view wx:if="{{ item.remarks }}" class="input flex1 text " bind:tap="openInput" data-index="{{ index }}">{{ item.remarks }}</view>
|
||||
<view wx:else class="input flex1 text placeholder" bind:tap="openInput" data-index="{{ index }}">添加备注…</view>
|
||||
</block>
|
||||
|
||||
<view class="drag-box" bind:longpress="longPress" data-index="{{ index }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/drag-icon.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
|
||||
<view class="end" wx:if="{{ page == 0 && list.length != 0 }}">- End -</view>
|
||||
|
||||
<view class="empty flexcenter" wx:if="{{ page == 0 && typeList[typeIndex]['count'] == 0 }}">
|
||||
<view class="dot-box flexacenter">
|
||||
<image class="dot" wx:for="{{ 3 }}" wx:key="index" mode="widthFix" src="https://app.gter.net/image/miniApp/project/u1829.svg"></image>
|
||||
<image class="dot" wx:for="{{ 3 }}" wx:key="index" mode="widthFix" src="https://app.gter.net/image/miniApp/project/u1832.svg"></image>
|
||||
</view>
|
||||
<image class="empty-icom" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/u1828.svg"></image>
|
||||
<view>暂无数据</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<view class="manage-hint flexflex" wx:if="{{ manageHintState }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/warning-icon.svg" mode="widthFix"></image>
|
||||
<view class="hint-text flex1">
|
||||
加入<text>对比单</text>的项目会同步进入<text>项目管理</text>当中;两者独立管理,删除操作互不影响。
|
||||
</view>
|
||||
<view class="close flexcenter" bind:tap="manageClose">
|
||||
<image class="close-icon" src="https://app.gter.net/image/miniApp/offer/close-black.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<go-login wx:if="{{ isloginBtnState }}" islogin="{{ islogin }}" binduserClickLogin="userClickLogin" bindpopClose="popClose"></go-login>
|
||||
</view>
|
||||
|
||||
<!-- <index-sidebar wx:if="{{ classify == 'vs' }}" id="index-sidebar" class="index-sidebar" sidebarType="xg" isInitFinish="{{ isInitFinish }}" bind:openLogin="openLoginBtnState" islogin="{{ islogin }}"></index-sidebar> -->
|
619
pages/projectMy/projectMy.wxss
Normal file
619
pages/projectMy/projectMy.wxss
Normal file
@ -0,0 +1,619 @@
|
||||
/* pages/projectMy/projectMy.wxss */
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
.container {
|
||||
min-height: 80vh;
|
||||
padding-bottom: 180rpx;
|
||||
}
|
||||
.container.no-data-bj {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
.header-box {
|
||||
width: 100vw;
|
||||
height: 219rpx;
|
||||
background: -webkit-linear-gradient(270deg, #f6f6bd 0%, #f5f5f5 100%);
|
||||
background: -moz-linear-gradient(180deg, #f6f6bd 0%, #f5f5f5 100%);
|
||||
background: linear-gradient(180deg, #f6f6bd 0%, #f5f5f5 100%);
|
||||
position: relative;
|
||||
}
|
||||
.header-nav {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
}
|
||||
.classify {
|
||||
padding-top: 21rpx;
|
||||
font-size: 30rpx;
|
||||
color: #555555;
|
||||
height: 109.5rpx;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
background-color: #edf0f4;
|
||||
border-radius: 15rpx 15rpx 0 0;
|
||||
-moz-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.04705882);
|
||||
-webkit-box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.04705882);
|
||||
box-shadow: 0 -1.5rpx 4.5rpx rgba(0, 0, 0, 0.04705882);
|
||||
}
|
||||
.classify .classify-item {
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
}
|
||||
.classify .classify-item .pitch {
|
||||
position: absolute;
|
||||
top: -26rpx;
|
||||
left: 0;
|
||||
width: 375rpx;
|
||||
height: 90rpx;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
color: #000000;
|
||||
overflow: hidden;
|
||||
}
|
||||
.classify .classify-item .pitch.right {
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
.classify .classify-item .pitch.right .text {
|
||||
margin-left: 115.5rpx;
|
||||
}
|
||||
.classify .classify-item .pitch .icon {
|
||||
position: absolute;
|
||||
left: -4.5rpx;
|
||||
top: -4.5rpx;
|
||||
width: 385.5rpx;
|
||||
height: 100.5rpx;
|
||||
}
|
||||
.classify .classify-item .pitch .text {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-top: 27rpx;
|
||||
margin-left: 73.5rpx;
|
||||
}
|
||||
.classify .classify-item .pitch .text .text-icon-box {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
.manage-box .state-scroll {
|
||||
margin-top: -27rpx;
|
||||
background-color: #ffffff;
|
||||
position: relative;
|
||||
width: 100vw;
|
||||
white-space: nowrap;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.manage-box .state-scroll.state-list {
|
||||
display: flex;
|
||||
padding-top: 48rpx;
|
||||
padding-left: 22.5rpx;
|
||||
padding-bottom: 30rpx;
|
||||
width: 100vw;
|
||||
}
|
||||
.manage-box .state-scroll.state-list .item {
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
margin-right: 45rpx;
|
||||
display: flex;
|
||||
display: inline-block;
|
||||
}
|
||||
.manage-box .state-scroll.state-list .item.pitch {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
color: #000000;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
.manage-box .state-scroll.state-list .item.pitch::after {
|
||||
content: "";
|
||||
width: 100%;
|
||||
height: 12rpx;
|
||||
background-color: #cff7ff;
|
||||
border-radius: 58.5rpx;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
.manage-box .list {
|
||||
padding: 0 22.5rpx;
|
||||
position: relative;
|
||||
min-height: 65vh;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.manage-box .list .item {
|
||||
background-color: #fbfbfb;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 18rpx;
|
||||
padding-top: 22.5rpx;
|
||||
width: calc(100vw - 45rpx);
|
||||
}
|
||||
.manage-box .list .item:not(:last-of-type) {
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.manage-box .list .item.itemTransition {
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.manage-box .list .item.zIndex {
|
||||
z-index: 10;
|
||||
box-shadow: 0 0 18rpx rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.manage-box .list .item.cur {
|
||||
transition: initial;
|
||||
}
|
||||
.manage-box .list .item.fixed {
|
||||
z-index: 0 !important;
|
||||
}
|
||||
.manage-box .list .item.delete {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: none;
|
||||
}
|
||||
.manage-box .list .item .top {
|
||||
padding-bottom: 18rpx;
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
padding-left: 22.5rpx;
|
||||
}
|
||||
.manage-box .list .item .top .info .name {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
.manage-box .list .item .top .info .english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 19.5rpx;
|
||||
}
|
||||
.manage-box .list .item .top .info .school {
|
||||
color: #333333;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
.manage-box .list .item .top .info .school .icon {
|
||||
width: 24rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 12rpx;
|
||||
}
|
||||
.manage-box .list .item .top .state {
|
||||
width: 150rpx;
|
||||
height: 105rpx;
|
||||
position: relative;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-mask {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box {
|
||||
border-radius: 12rpx;
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box.show {
|
||||
background-color: #f5fcfd;
|
||||
box-shadow: 0 0 7.5rpx rgba(0, 0, 0, 0.2), 0 0 0 1rpx #f2f2f2;
|
||||
z-index: 3;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box.show .state-list {
|
||||
display: block;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box.show .delete {
|
||||
display: flex;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box.undetermined .state-pitch {
|
||||
background-color: #f95d5d;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box.undetermined .state-list .state-item.pitch {
|
||||
color: #F95D5D;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box .state-pitch {
|
||||
width: 105rpx;
|
||||
height: 60rpx;
|
||||
background-color: #04b0d5;
|
||||
border-radius: 12rpx;
|
||||
font-size: 24rpx;
|
||||
color: #FFFFFF;
|
||||
margin: 22.5rpx 22.5rpx 18rpx;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box .state-pitch .icon {
|
||||
width: 16.5rpx;
|
||||
height: 9rpx;
|
||||
margin-left: 8rpx;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box .state-list {
|
||||
padding: 0 0 13.5rpx;
|
||||
border-bottom: 1rpx dotted #d7d7d7;
|
||||
display: none;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box .state-list .state-item {
|
||||
height: 75rpx;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box .state-list .state-item.pitch {
|
||||
color: #04B0D5;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box .delete {
|
||||
display: none;
|
||||
padding: 31.5rpx 0;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box .delete .btn {
|
||||
width: 48rpx;
|
||||
height: 48rpx;
|
||||
background-color: #f2f2f2;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.manage-box .list .item .top .state .state-box .delete .btn .icon {
|
||||
width: 21rpx;
|
||||
height: 22.5rpx;
|
||||
}
|
||||
.manage-box .list .item .bottom {
|
||||
align-items: flex-start;
|
||||
}
|
||||
.manage-box .list .item .bottom .edit {
|
||||
width: 36rpx;
|
||||
height: 36rpx;
|
||||
border-radius: 50%;
|
||||
background-color: #f2f2f2;
|
||||
margin-top: 33rpx;
|
||||
margin-left: 22.5rpx;
|
||||
}
|
||||
.manage-box .list .item .bottom .edit .icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
}
|
||||
.manage-box .list .item .bottom .input {
|
||||
font-size: 24rpx;
|
||||
line-height: 36rpx;
|
||||
padding-top: 33rpx;
|
||||
padding-left: 22.5rpx;
|
||||
padding-bottom: 33rpx;
|
||||
word-break: break-all;
|
||||
white-space: pre-line;
|
||||
}
|
||||
.manage-box .list .item .bottom .input.text {
|
||||
min-height: 102rpx;
|
||||
}
|
||||
.manage-box .list .item .bottom .input.placeholder {
|
||||
color: #aaaaaa;
|
||||
}
|
||||
.manage-box .list .item .bottom .drag-box {
|
||||
padding: 34.5rpx 22rpx 0;
|
||||
}
|
||||
.manage-box .list .item .bottom .drag-box .icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
}
|
||||
.manage-box .end {
|
||||
padding-top: 45rpx;
|
||||
padding-bottom: 45rpx;
|
||||
text-align: center;
|
||||
font-size: 19.5rpx;
|
||||
color: #D7D7D7;
|
||||
position: absolute;
|
||||
bottom: 120px;
|
||||
width: 100%;
|
||||
}
|
||||
.manage-box .manage-hint {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100vw;
|
||||
height: 150rpx;
|
||||
background-color: #f6f6f6;
|
||||
border: 1rpx solid #ebebeb;
|
||||
padding-left: 22.5rpx;
|
||||
z-index: 2;
|
||||
}
|
||||
.manage-box .manage-hint .icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-right: 15rpx;
|
||||
margin-top: 46.5rpx;
|
||||
}
|
||||
.manage-box .manage-hint .hint-text {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-weight: 400;
|
||||
color: #555555;
|
||||
font-size: 24rpx;
|
||||
padding-right: 30rpx;
|
||||
margin-top: 42rpx;
|
||||
}
|
||||
.manage-box .manage-hint .hint-text text {
|
||||
font-weight: 650;
|
||||
color: #000000;
|
||||
}
|
||||
.manage-box .manage-hint .close {
|
||||
width: 118.5rpx;
|
||||
height: 150rpx;
|
||||
border-left: 1rpx solid #ebebeb;
|
||||
}
|
||||
.manage-box .manage-hint .close .close-icon {
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
}
|
||||
.vs-box {
|
||||
margin-top: -27rpx;
|
||||
background-color: #ffffff;
|
||||
position: relative;
|
||||
}
|
||||
.vs-box .head-box {
|
||||
font-weight: 400;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
padding-left: 30rpx;
|
||||
height: 112.5rpx;
|
||||
}
|
||||
.vs-box .head-box .dot {
|
||||
width: 9rpx;
|
||||
height: 24rpx;
|
||||
background-color: #ccd003;
|
||||
border: 1rpx solid #9a9d02;
|
||||
border-radius: 7.5rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
.vs-box .select-box .list .item {
|
||||
width: calc(100vw - 60rpx);
|
||||
height: initial;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
margin: 0 30rpx;
|
||||
border-top: 1rpx dotted #ebebeb;
|
||||
}
|
||||
.vs-box .select-box .list .item .movable-view {
|
||||
width: calc(100vw + 180rpx);
|
||||
height: initial;
|
||||
margin: 0 30rpx;
|
||||
position: relative;
|
||||
display: flex;
|
||||
}
|
||||
.vs-box .select-box .list .item .content {
|
||||
width: calc(100vw - 60rpx);
|
||||
margin-right: 30rpx;
|
||||
}
|
||||
.vs-box .select-box .list .item .left {
|
||||
padding-top: 31.5rpx;
|
||||
padding-right: 15rpx;
|
||||
flex: 1;
|
||||
}
|
||||
.vs-box .select-box .list .item .left .name {
|
||||
font-weight: 650;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 6rpx;
|
||||
}
|
||||
.vs-box .select-box .list .item .left .english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
.vs-box .select-box .list .item .left .message {
|
||||
color: #333333;
|
||||
font-size: 24rpx;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.vs-box .select-box .list .item .left .message .icon {
|
||||
width: 24rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
.vs-box .select-box .list .item .left .message .line {
|
||||
color: #d7d7d7;
|
||||
margin: 0 20rpx;
|
||||
}
|
||||
.vs-box .select-box .list .item .left .message .state-text {
|
||||
height: 33rpx;
|
||||
background-color: #f0f1ec;
|
||||
border: 1rpx solid #ebebeb;
|
||||
border-radius: 9rpx;
|
||||
font-size: 22.5rpx;
|
||||
color: #7F7F7F;
|
||||
padding: 0 7.5rpx;
|
||||
}
|
||||
.vs-box .select-box .list .item .btn .icon {
|
||||
width: 45rpx;
|
||||
height: 45rpx;
|
||||
}
|
||||
.vs-box .select-box .list .item .delete {
|
||||
width: 150rpx;
|
||||
background-color: #f95d5d;
|
||||
font-size: 27rpx;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
.vs-box .quick-box .list {
|
||||
transition: all 0.3s;
|
||||
overflow: hidden;
|
||||
}
|
||||
.vs-box .quick-box .list.hide {
|
||||
height: 735rpx;
|
||||
overflow: hidden;
|
||||
}
|
||||
.vs-box .quick-box .movable-area {
|
||||
width: calc(100vw - 60rpx);
|
||||
height: initial;
|
||||
margin: 0 30rpx;
|
||||
overflow: hidden;
|
||||
border-radius: 18rpx;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.vs-box .quick-box .movable-area .item {
|
||||
width: calc(100vw + 180rpx);
|
||||
height: initial;
|
||||
margin: 0 30rpx;
|
||||
position: relative;
|
||||
display: flex;
|
||||
z-index: 1;
|
||||
}
|
||||
.vs-box .quick-box .movable-area .item .content {
|
||||
width: calc(100vw - 60rpx);
|
||||
background-color: #f6f6f6;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 18rpx;
|
||||
padding: 34.5rpx 22.5rpx;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.vs-box .quick-box .movable-area .item .content .project-list .project-item {
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
line-height: 33.75rpx;
|
||||
}
|
||||
.vs-box .quick-box .movable-area .item .content .project-list .project-item:not(:last-of-type) {
|
||||
margin-bottom: 19.5rpx;
|
||||
}
|
||||
.vs-box .quick-box .movable-area .item .content .project-list .project-item .icon {
|
||||
width: 24rpx;
|
||||
height: 27rpx;
|
||||
margin-right: 7.5rpx;
|
||||
}
|
||||
.vs-box .quick-box .movable-area .item .content .project-list .project-item .arrows {
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
margin: 0 13.5rpx;
|
||||
}
|
||||
.vs-box .quick-box .movable-area .item .content .project-list .project-item .text {
|
||||
width: 313.5rpx;
|
||||
}
|
||||
.vs-box .quick-box .movable-area .item .content .btn {
|
||||
width: 150rpx;
|
||||
height: 60rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 172.5rpx;
|
||||
font-weight: 650;
|
||||
font-size: 24rpx;
|
||||
color: #026277;
|
||||
}
|
||||
.vs-box .quick-box .movable-area .item .delete {
|
||||
width: 150rpx;
|
||||
border-radius: 0 18rpx 18rpx 0;
|
||||
position: relative;
|
||||
font-size: 27rpx;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
.vs-box .quick-box .movable-area .item .delete::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 120%;
|
||||
height: 100%;
|
||||
z-index: -1;
|
||||
background-color: #f95d5d;
|
||||
border-radius: 18rpx;
|
||||
width: 150rpx;
|
||||
}
|
||||
.vs-box .quick-box .more-btn {
|
||||
height: 123rpx;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-top: -30rpx;
|
||||
background: #ffff;
|
||||
}
|
||||
.vs-box .quick-box .more-btn.pack .icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
.vs-box .quick-box .more-btn.pack .mengcheng {
|
||||
display: none;
|
||||
}
|
||||
.vs-box .quick-box .more-btn .icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
margin-left: 16rpx;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.vs-box .quick-box .more-btn .mengcheng {
|
||||
width: calc(100vw - 60rpx);
|
||||
height: 48rpx;
|
||||
position: absolute;
|
||||
top: -48rpx;
|
||||
}
|
||||
.vs-box .quick-border {
|
||||
height: 9rpx;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
.vs-box .vs-bottom {
|
||||
width: 100vw;
|
||||
height: 150rpx;
|
||||
background-color: #f6f6f6;
|
||||
border: 1rpx solid #ebebeb;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
padding: 0 22.5rpx;
|
||||
z-index: 10;
|
||||
}
|
||||
.vs-box .vs-bottom .begin-btn {
|
||||
height: 96rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 172.5rpx;
|
||||
font-weight: 650;
|
||||
font-size: 36rpx;
|
||||
color: #026277;
|
||||
}
|
||||
.vs-box .lack-hint {
|
||||
position: fixed;
|
||||
left: 30rpx;
|
||||
bottom: 30rpx;
|
||||
width: 690rpx;
|
||||
height: 84rpx;
|
||||
background-color: #f6f6f6;
|
||||
border-radius: 9rpx;
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
padding: 0 15rpx;
|
||||
}
|
||||
.vs-box .lack-hint .icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
.no-data {
|
||||
margin: 0 30rpx 30rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 18rpx;
|
||||
flex-direction: column;
|
||||
height: 80vh;
|
||||
}
|
||||
.no-data .icon {
|
||||
width: 120rpx;
|
||||
height: 141rpx;
|
||||
margin-bottom: 40.5rpx;
|
||||
}
|
||||
.no-data .text {
|
||||
font-size: 24rpx;
|
||||
color: #7F7F7F;
|
||||
line-height: 45rpx;
|
||||
}
|
||||
.empty {
|
||||
background-color: #fff;
|
||||
color: #7F7F7F;
|
||||
font-size: 23rpx;
|
||||
margin: 36rpx 0rpx 0;
|
||||
flex-direction: column;
|
||||
height: 60vh;
|
||||
}
|
||||
.empty .dot-box .dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
}
|
||||
.empty .dot-box .dot:not(:last-of-type) {
|
||||
margin-right: 8rpx;
|
||||
}
|
||||
.empty .empty-icom {
|
||||
width: 153rpx;
|
||||
height: 180rpx;
|
||||
margin-top: 12rpx;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.index-sidebar {
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
}
|
663
pages/projectSchoolHomepage/projectSchoolHomepage.js
Normal file
663
pages/projectSchoolHomepage/projectSchoolHomepage.js
Normal file
@ -0,0 +1,663 @@
|
||||
// pages/projectSchoolHomepage/projectSchoolHomepage.js
|
||||
var miucms = require('../../utils/miucms.js');
|
||||
const util = require('../../utils/util.js')
|
||||
const common = require('../../utils/commonMethod')
|
||||
const app = getApp()
|
||||
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
informationState: false, // 授权后可能需要弹出完成信息框 个人背景那些
|
||||
islogin: false,
|
||||
isloginBtnState: false,
|
||||
|
||||
current: 0,
|
||||
territoryState: "", // 学科领域弹窗状态
|
||||
|
||||
// selectType: "", // '' subject school
|
||||
id: 0,
|
||||
|
||||
briefShow: false, // 学校简介显示状态
|
||||
|
||||
selectState: false, // 排序选项 弹窗显示
|
||||
|
||||
screenkey: "all", // all subject school
|
||||
|
||||
screen: {
|
||||
name: "",
|
||||
key: "all", // all subject school
|
||||
pitch: "all",
|
||||
},
|
||||
|
||||
bezier: {},
|
||||
|
||||
hotList: [],
|
||||
|
||||
list: [],
|
||||
page: 1,
|
||||
count: 0,
|
||||
|
||||
briefHeight: 0, // 简介高度
|
||||
|
||||
contrastcount: 0,
|
||||
|
||||
discipline: [],
|
||||
universitydepartment: [],
|
||||
|
||||
sortObj: {
|
||||
0: "排名由高到低",
|
||||
1: "学费由低到高",
|
||||
2: "学费由高到低",
|
||||
},
|
||||
|
||||
sortIndex: 0, // 排名由高到低 0 学费由低到高 1 学费由高到低 2
|
||||
|
||||
isInitFinish: false,
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
rpx525: 262,
|
||||
rpx15: 15,
|
||||
windowWidth: 375,
|
||||
options: {},
|
||||
onLoad(options) {
|
||||
this.rpx525 = util.rpxTopx(525)
|
||||
this.options = options
|
||||
// this.data.id = options.id
|
||||
this.rpx15 = util.rpxTopx(15)
|
||||
|
||||
miucms.pageStart(app).then(() => {
|
||||
const screen_data = app.globalData.screen_data
|
||||
this.windowWidth = screen_data.windowWidth
|
||||
this.windowHeight = screen_data.windowHeight || 812
|
||||
|
||||
this.setData({
|
||||
islogin: app.globalData.user.uid > 0 ? true : false,
|
||||
id: options.id
|
||||
})
|
||||
|
||||
common.xgBasicData(this, app).then(data => {
|
||||
this.setData({
|
||||
contrastcount: data.contrastcount || 0,
|
||||
})
|
||||
})
|
||||
|
||||
this.getinit()
|
||||
this.getProjectData()
|
||||
})
|
||||
},
|
||||
|
||||
getinit() {
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
util.wxget("/api/project.university/getInfo", {
|
||||
id: this.data.id,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
let hotList = data.hot_projects || []
|
||||
hotList.forEach(element => {
|
||||
element['random'] = app.randomString(6)
|
||||
})
|
||||
|
||||
// 将一维数组转换成二维数组,每两个元素为一组
|
||||
let twoDimensionalArray = [];
|
||||
for (let i = 0; i < hotList.length; i += 2) {
|
||||
twoDimensionalArray.push(hotList.slice(i, i + 2));
|
||||
}
|
||||
console.log("data", data);
|
||||
this.setData({
|
||||
info: data.info,
|
||||
hotList: twoDimensionalArray,
|
||||
discipline: data.discipline,
|
||||
universitydepartment: data.universitydepartment || [],
|
||||
isInitFinish: true,
|
||||
})
|
||||
|
||||
if (!this.indexSidebar) this.indexSidebar = this.selectComponent('#index-sidebar')
|
||||
|
||||
|
||||
wx.nextTick(() => this.getBriefHeight())
|
||||
}).finally(() => {
|
||||
wx.hideLoading()
|
||||
})
|
||||
},
|
||||
|
||||
// 获取项目列表
|
||||
loading: false,
|
||||
listAll: [], // 所有的数据
|
||||
screenList: [], // 当前筛选所有数据
|
||||
|
||||
getProjectData() {
|
||||
const screen = this.data.screen
|
||||
if (this.data.page == 0 || this.loading) return
|
||||
this.loading = true
|
||||
|
||||
util.wxget("/api/project.lists", {
|
||||
limit: 2000,
|
||||
page: this.data.page,
|
||||
sid: this.data.id,
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
|
||||
let list = data.data || []
|
||||
const date = new Date()
|
||||
const month = date.getMonth() + 1
|
||||
const year = date.getFullYear()
|
||||
|
||||
list.forEach(element => {
|
||||
const semester = element.semester || {}
|
||||
|
||||
if (month > semester.month && year + 1 <= semester.year) element['semesterState'] = true
|
||||
|
||||
element['tuition_fee_text'] = common.formatNumberWithSpaces(element.tuition_fee)
|
||||
element['random'] = app.randomString(6)
|
||||
element['rankk'] = this.convertRankToRankText(element.rank)
|
||||
})
|
||||
|
||||
|
||||
this.listAll = list
|
||||
this.screenList = list
|
||||
this.setData({
|
||||
count: data.count,
|
||||
})
|
||||
|
||||
this.screenData()
|
||||
|
||||
}).finally(() => {
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
|
||||
convertRankToRankText(rank) {
|
||||
if (!rank) return 0
|
||||
if (rank.indexOf('-')) {
|
||||
const range = rank.split('-');
|
||||
const start = parseInt(range[0]) * 1;
|
||||
const end = parseInt(range[1]) * 1;
|
||||
return start || end || 0
|
||||
} else return rank
|
||||
},
|
||||
|
||||
// 在 screenList 数据截取要显示的数据
|
||||
calculateShowList() {
|
||||
const limit = 20
|
||||
let screenList = this.screenList
|
||||
|
||||
let page = this.data.page
|
||||
|
||||
if (page == 0) return
|
||||
|
||||
const startIndex = (page - 1) * limit;
|
||||
const endIndex = startIndex + limit;
|
||||
|
||||
let list = screenList.slice(startIndex, endIndex);
|
||||
|
||||
this.setData({
|
||||
list: this.data.list.concat(list),
|
||||
page: endIndex >= screenList.length ? 0 : page + 1,
|
||||
})
|
||||
},
|
||||
|
||||
// 筛选数据
|
||||
screenData() {
|
||||
const sort = this.data.sortIndex
|
||||
let screen = this.data.screen
|
||||
const disciplineid = screen['disciplineid']
|
||||
const university = screen['university']
|
||||
let listAll = this.listAll
|
||||
|
||||
screen['pitch'] = screen.key
|
||||
|
||||
let screenList = this.screenList
|
||||
|
||||
let list = []
|
||||
if (disciplineid > 0) {
|
||||
screenList = listAll.filter(item => item.disciplineid === disciplineid);
|
||||
} else if (university) {
|
||||
screenList = listAll.filter(item => item.department === university);
|
||||
} else {
|
||||
screenList = this.listAll
|
||||
}
|
||||
|
||||
if (sort == 0) {
|
||||
screenList.sort((a, b) => {
|
||||
// a 排在后面
|
||||
if (a.rankk == 0) return 1;
|
||||
// b 排在后面
|
||||
if (b.rankk == 0) return -1;
|
||||
|
||||
return a.rankk - b.rankk
|
||||
});
|
||||
} else if (sort == 1) {
|
||||
// 按学费由低到高排序
|
||||
screenList.sort((a, b) => {
|
||||
if (a.tuition_fee == null) return 1;
|
||||
if (b.tuition_fee == null) return -1;
|
||||
return a.tuition_fee - b.tuition_fee
|
||||
});
|
||||
} else if (sort == 2) {
|
||||
// 按学费由高到低排序
|
||||
screenList.sort((a, b) => {
|
||||
if (a.tuition_fee == null) return 1;
|
||||
if (b.tuition_fee == null) return -1;
|
||||
return b.tuition_fee - a.tuition_fee
|
||||
});
|
||||
}
|
||||
|
||||
this.screenList = screenList
|
||||
|
||||
this.setData({
|
||||
screen,
|
||||
list: [],
|
||||
page: 1,
|
||||
count: this.screenList.length,
|
||||
})
|
||||
|
||||
this.calculateShowList()
|
||||
},
|
||||
|
||||
// 选中 排序
|
||||
screenIncident(e) {
|
||||
const sort = e.currentTarget.dataset.sort
|
||||
|
||||
this.setData({
|
||||
list: [],
|
||||
page: 1,
|
||||
sortIndex: sort,
|
||||
selectState: false,
|
||||
})
|
||||
|
||||
this.screenData()
|
||||
},
|
||||
|
||||
// 获取简介的高度
|
||||
getBriefHeight() {
|
||||
const query = wx.createSelectorQuery();
|
||||
query.select('#rich-text').boundingClientRect((rect) => {
|
||||
let briefHeight = null
|
||||
if (rect && rect.height) briefHeight = rect.height
|
||||
|
||||
this.setData({
|
||||
briefHeight
|
||||
})
|
||||
}).exec();
|
||||
},
|
||||
|
||||
// 切换简介显示
|
||||
cutBriefShow() {
|
||||
this.setData({
|
||||
briefShow: !this.data.briefShow
|
||||
})
|
||||
},
|
||||
|
||||
// 计算当前所处的页面索引
|
||||
hotscroll(e) {
|
||||
if (Math.random() > 0.7) return; // 30% 的概率
|
||||
const scrollLeft = e.detail.scrollLeft + this.rpx525 / 2
|
||||
const current = Math.floor(scrollLeft / this.rpx525);
|
||||
if (this.data.current == current) return;
|
||||
if (current > this.data.hotList.length - 1) return
|
||||
this.setData({
|
||||
current
|
||||
});
|
||||
},
|
||||
|
||||
// 点击显示 筛选条件框
|
||||
cutCondition() {
|
||||
this.setData({
|
||||
selectState: !this.data.selectState
|
||||
})
|
||||
},
|
||||
|
||||
// 物品的点击事件
|
||||
handleClick(e) {
|
||||
if (!this.data.islogin) {
|
||||
this.openLoginBtnState()
|
||||
return
|
||||
}
|
||||
const index = e.currentTarget.dataset.index
|
||||
const i = e.currentTarget.dataset.i
|
||||
const type = e.currentTarget.dataset.type
|
||||
const status = e.currentTarget.dataset.status || 0
|
||||
const id = e.currentTarget.dataset.id
|
||||
const random = e.currentTarget.dataset.random
|
||||
|
||||
if (status == 1) return
|
||||
|
||||
const query = this.createSelectorQuery();
|
||||
query.select('#add' + random).boundingClientRect();
|
||||
// if (status == 1) return
|
||||
if (status == 0) {
|
||||
this.setData({
|
||||
bezier: {},
|
||||
})
|
||||
|
||||
query.exec((res) => {
|
||||
const data = res[0]
|
||||
this.setData({
|
||||
bezier: {
|
||||
x: data.left + data.width / 2 - this.rpx15,
|
||||
y: data.top + data.height / 2 - this.rpx15,
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
let url = "/api/project.contrast/add"
|
||||
if (status == 1) url = "/api/project.contrast/delete"
|
||||
|
||||
util.wxpost(url, {
|
||||
projectid: id
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
if (type === 'hot') {
|
||||
const hotList = this.data.hotList
|
||||
if (hotList[index][i]['contraststatus'] == null) hotList[index][i]['contraststatus'] = {}
|
||||
hotList[index][i]['contraststatus'] = {
|
||||
status: 1,
|
||||
ismanage: 1,
|
||||
}
|
||||
this.setData({
|
||||
hotList,
|
||||
})
|
||||
}
|
||||
|
||||
if (type === 'list') {
|
||||
const list = this.data.list
|
||||
if (list[index]['contraststatus'] == null) list[index]['contraststatus'] = {}
|
||||
|
||||
list[index]['contraststatus'] = {
|
||||
status: 1,
|
||||
ismanage: 1,
|
||||
}
|
||||
|
||||
this.setData({
|
||||
list,
|
||||
})
|
||||
}
|
||||
|
||||
this.setData({
|
||||
contrastcount: data.count,
|
||||
})
|
||||
|
||||
app.globalData.basicData['contrastcount'] = data.count
|
||||
|
||||
wx.showToast({
|
||||
icon: "none",
|
||||
title: res.message,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 打开筛选选择框
|
||||
openselect() {
|
||||
let screen = this.data.screen
|
||||
screen['state'] = true
|
||||
this.setData({
|
||||
screen,
|
||||
})
|
||||
},
|
||||
|
||||
// 关闭筛选选择框
|
||||
closeselect(e) {
|
||||
const disciplineid = e.detail?.disciplineid || ''
|
||||
const university = e.detail?.university || ''
|
||||
const label = e.detail?.label || ''
|
||||
|
||||
let screen = this.data.screen
|
||||
screen['state'] = false
|
||||
|
||||
// 没有选择
|
||||
if (disciplineid == "" && university == "") {
|
||||
screen['key'] = screen['pitch']
|
||||
this.setData({
|
||||
screen,
|
||||
})
|
||||
} else {
|
||||
screen['disciplineid'] = disciplineid
|
||||
screen['name'] = label || university
|
||||
screen['university'] = university
|
||||
|
||||
this.setData({
|
||||
screen,
|
||||
list: [],
|
||||
page: 1,
|
||||
}, () => {
|
||||
this.screenData()
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
// 点击选择 中间 的 筛选
|
||||
selectScreen(e) {
|
||||
const type = e.currentTarget.dataset.type
|
||||
let screen = this.data.screen
|
||||
|
||||
screen['key'] = type
|
||||
if (type == 'all') {
|
||||
screen['disciplineid'] = ''
|
||||
screen['universityid'] = ''
|
||||
screen['list'] = []
|
||||
this.setData({
|
||||
screen,
|
||||
list: [],
|
||||
page: 1,
|
||||
sortIndex: 0,
|
||||
})
|
||||
this.screenData()
|
||||
return
|
||||
}
|
||||
|
||||
if (type == 'subject') {
|
||||
screen['list'] = this.data.discipline
|
||||
screen['universityid'] = ''
|
||||
} else if (type == 'school') {
|
||||
screen['disciplineid'] = ''
|
||||
screen['list'] = this.data.universitydepartment
|
||||
}
|
||||
|
||||
screen['state'] = true
|
||||
|
||||
this.setData({
|
||||
screen,
|
||||
sortIndex: 1,
|
||||
})
|
||||
},
|
||||
|
||||
// 打开 授权按钮
|
||||
openLoginBtnState() {
|
||||
this.setData({
|
||||
isloginBtnState: true,
|
||||
})
|
||||
},
|
||||
|
||||
// 关闭授权登录事件
|
||||
popClose() {
|
||||
this.setData({
|
||||
isloginBtnState: !this.data.isloginBtnState
|
||||
})
|
||||
},
|
||||
|
||||
userClickLogin(e) {
|
||||
let data = e.detail.data
|
||||
this.setData({
|
||||
islogin: true,
|
||||
isloginBtnState: false,
|
||||
informationState: data.regdatastep == 'success' ? false : true,
|
||||
page: 1,
|
||||
list: [],
|
||||
})
|
||||
this.onLoad(this.options)
|
||||
},
|
||||
|
||||
// 子组件传值 修改 完善信息组件的状态
|
||||
revampInformationState() {
|
||||
this.setData({
|
||||
informationState: false
|
||||
})
|
||||
},
|
||||
|
||||
// 点击跳转详情
|
||||
goDetails(e) {
|
||||
const uniqid = e.currentTarget.dataset.uniqid
|
||||
common.goPage(`/pages/projectDetails/projectDetails?uniqid=${ uniqid }`)
|
||||
},
|
||||
|
||||
closeMoreSelect() {
|
||||
const list = this.data.list
|
||||
list.forEach(element => {
|
||||
element['moreState'] = false
|
||||
})
|
||||
this.setData({
|
||||
list,
|
||||
})
|
||||
},
|
||||
|
||||
openMoreSelect(e) {
|
||||
const index = e.currentTarget.dataset.index || 0
|
||||
const list = this.data.list
|
||||
list.forEach(element => {
|
||||
element['moreState'] = false
|
||||
})
|
||||
list[index]['moreState'] = !list[index]['moreState']
|
||||
this.setData({
|
||||
list,
|
||||
})
|
||||
},
|
||||
|
||||
addProject(e) {
|
||||
const index = e.currentTarget.dataset.index
|
||||
const id = e.currentTarget.dataset.id
|
||||
|
||||
let url = "/api/project.contrast/add"
|
||||
|
||||
util.wxpost(url, {
|
||||
projectid: id
|
||||
}).then(res => {
|
||||
if (res.code != 200) return
|
||||
const data = res.data
|
||||
|
||||
const list = this.data.list
|
||||
|
||||
if (list[index]['contraststatus'] == null) list[index]['contraststatus'] = {}
|
||||
|
||||
list[index]['contraststatus'] = {
|
||||
status: 1,
|
||||
ismanage: 1,
|
||||
}
|
||||
|
||||
this.setData({
|
||||
list,
|
||||
contrastcount: data.count,
|
||||
})
|
||||
|
||||
app.globalData.basicData['contrastcount'] = data.count
|
||||
|
||||
common.toast(res.message)
|
||||
})
|
||||
},
|
||||
|
||||
// 点击 跳转 公共方法
|
||||
goPage(e) {
|
||||
const url = e.currentTarget.dataset.url
|
||||
common.goPage(url)
|
||||
},
|
||||
|
||||
indexSidebar: null,
|
||||
windowHeight: 812,
|
||||
onPageScroll(e) {
|
||||
const scrollTop = e.scrollTop
|
||||
|
||||
let sidebarState = this.indexSidebar.data.sidebarState
|
||||
if (scrollTop > this.windowHeight * 3 && sidebarState !== 3) sidebarState = 3
|
||||
|
||||
if (scrollTop < this.windowHeight * 3 && sidebarState == 3) sidebarState = 2
|
||||
|
||||
// 同一搜集 修改的 sidebarState
|
||||
if (sidebarState !== this.indexSidebar.data.sidebarState) {
|
||||
this.indexSidebar.setData({
|
||||
sidebarState
|
||||
})
|
||||
}
|
||||
|
||||
this.indexSidebar.openSidebarTwoHide()
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload() {
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
wx.stopPullDownRefresh()
|
||||
|
||||
this.setData({
|
||||
info: {},
|
||||
hotList: [],
|
||||
page: 1,
|
||||
list: [],
|
||||
})
|
||||
|
||||
this.getinit()
|
||||
this.getProjectData()
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom() {
|
||||
this.calculateShowList()
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage() {
|
||||
|
||||
},
|
||||
onShareTimeline() {
|
||||
util.statistics({
|
||||
name: "share-timeline"
|
||||
})
|
||||
|
||||
return {
|
||||
title: "【寄托港校项目库】- " + this.data.info.name,
|
||||
}
|
||||
},
|
||||
})
|
10
pages/projectSchoolHomepage/projectSchoolHomepage.json
Normal file
10
pages/projectSchoolHomepage/projectSchoolHomepage.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
"header-nav": "/component/headerNav/headerNav",
|
||||
"xg-bottom": "/component/xg-bottom/xg-bottom",
|
||||
"territory-select": "/component/territorySelect/territorySelect",
|
||||
"go-login": "/component/goLogin/goLogin",
|
||||
"perfect-information": "/component/perfectInformation/perfectInformation",
|
||||
"index-sidebar": "/component/indexSidebar/indexSidebar"
|
||||
}
|
||||
}
|
637
pages/projectSchoolHomepage/projectSchoolHomepage.less
Normal file
637
pages/projectSchoolHomepage/projectSchoolHomepage.less
Normal file
@ -0,0 +1,637 @@
|
||||
/* pages/schoolHomepage/schoolHomepage.wxss */
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
|
||||
.container {
|
||||
min-height: 100vh;
|
||||
background-color: rgba(245, 245, 245, 1);
|
||||
padding-bottom: 180rpx;
|
||||
}
|
||||
|
||||
.header {
|
||||
background-color: rgba(251, 251, 251, 1);
|
||||
padding-bottom: 24rpx;
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
margin-bottom: 61.5rpx;
|
||||
|
||||
.info {
|
||||
padding: 36rpx 36rpx 42rpx;
|
||||
|
||||
.avatar {
|
||||
width: 180rpx;
|
||||
height: 180rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 15rpx;
|
||||
margin-right: 30rpx;
|
||||
|
||||
.img {
|
||||
width: 106.5rpx;
|
||||
height: 120rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
flex-direction: column;
|
||||
|
||||
.name {
|
||||
font-weight: 650;
|
||||
font-size: 48rpx;
|
||||
color: #000000;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
margin-bottom: 9rpx;
|
||||
}
|
||||
|
||||
.english {
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.ranking-box {
|
||||
height: 54rpx;
|
||||
background-color: rgba(249, 231, 237, 1);
|
||||
border-radius: 9rpx;
|
||||
color: #933737;
|
||||
font-size: 27rpx;
|
||||
padding-left: 15rpx;
|
||||
width: fit-content;
|
||||
|
||||
.sum {
|
||||
margin-left: 15rpx;
|
||||
font-family: 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 30rpx;
|
||||
color: #FFFFFF;
|
||||
height: 54rpx;
|
||||
line-height: 54rpx;
|
||||
background-color: rgba(249, 93, 93, 1);
|
||||
border-radius: 0 9rpx 9rpx 0;
|
||||
padding: 0 10.5rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.world {
|
||||
.head {
|
||||
width: 100%;
|
||||
height: 33rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: 10.5rpx;
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
// transform: translateY(-50%);
|
||||
width: 100%;
|
||||
height: 1rpx;
|
||||
z-index: -1;
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 163.5rpx;
|
||||
background-color: rgba(251, 251, 251, 1);
|
||||
|
||||
.img {
|
||||
width: 96rpx;
|
||||
height: 33rpx;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.list {
|
||||
justify-content: space-between;
|
||||
padding-bottom: 25rpx;
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
|
||||
.item {
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
|
||||
.quantity {
|
||||
text-align: center;
|
||||
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
|
||||
.ranking-name {
|
||||
text-align: center;
|
||||
font-family: 'HelveticaNeue', 'Helvetica Neue', sans-serif;
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
width: fit-content;
|
||||
position: relative;
|
||||
line-height: 24rpx;
|
||||
|
||||
.ranking-icon {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: -12rpx;
|
||||
transform: rotate(270deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.brief {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-size: 22.5rpx;
|
||||
color: #7F7F7F;
|
||||
line-height: 42rpx;
|
||||
padding: 0 36rpx;
|
||||
display: block;
|
||||
transition: all .3s;
|
||||
white-space: pre-line;
|
||||
word-break: break-word;
|
||||
transition: all .3s;
|
||||
overflow: hidden;
|
||||
|
||||
&.twoLines {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
&#rich-text {
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
bottom: 0;
|
||||
color: transparent;
|
||||
// background-color: red;
|
||||
}
|
||||
}
|
||||
|
||||
.brief-more {
|
||||
padding: 21rpx 0;
|
||||
|
||||
.icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
transition: all .3s;
|
||||
|
||||
&.spin {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.item-header {
|
||||
padding: 0 22.5rpx;
|
||||
color: #000;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
margin-bottom: 30rpx;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
|
||||
.greenDot {
|
||||
margin-right: 18rpx;
|
||||
width: 11rpx;
|
||||
height: 24rpx;
|
||||
background-color: #ccd003;
|
||||
border: 1rpx solid #9a9d02;
|
||||
border-radius: 10rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.hot {
|
||||
margin-left: 22.5rpx;
|
||||
margin-bottom: 60rpx;
|
||||
|
||||
.hot-box {
|
||||
margin-bottom: 18rpx;
|
||||
white-space: nowrap;
|
||||
|
||||
.line {
|
||||
width: 525rpx;
|
||||
margin-right: 15rpx;
|
||||
display: inline-block;
|
||||
|
||||
.item {
|
||||
width: 525rpx;
|
||||
height: 135rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 18rpx;
|
||||
// padding-top: 30rpx;
|
||||
padding: 0 30rpx;
|
||||
justify-content: space-between;
|
||||
|
||||
&:first-of-type {
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
|
||||
.name {
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 6rpx;
|
||||
width: 380rpx;
|
||||
}
|
||||
|
||||
.english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
width: 380rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.indication {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.item {
|
||||
width: 15rpx;
|
||||
height: 6rpx;
|
||||
background-color: rgba(215, 215, 215, 1);
|
||||
border-radius: 30rpx;
|
||||
margin-right: 6rpx;
|
||||
|
||||
&.pitch {
|
||||
background-color: rgba(250, 107, 17, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.join {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 21rpx;
|
||||
color: #026277;
|
||||
|
||||
.add {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 30rpx;
|
||||
// margin-bottom: 6rpx;
|
||||
|
||||
.icon {
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.cancel {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
text-align: center;
|
||||
|
||||
.cross {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border: 1rpx solid rgba(235, 235, 235, 1);
|
||||
border-radius: 30rpx;
|
||||
// margin-bottom: 6rpx;
|
||||
|
||||
.icon {
|
||||
width: 22.5rpx;
|
||||
height: 18rpx;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.screen {
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
margin: 0 22.5rpx 15rpx;
|
||||
justify-content: space-between;
|
||||
|
||||
.left {
|
||||
height: 84rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 237rpx;
|
||||
margin-right: 15rpx;
|
||||
padding: 0 9rpx;
|
||||
|
||||
.item {
|
||||
height: 66rpx;
|
||||
line-height: 66rpx;
|
||||
border-radius: 237rpx;
|
||||
|
||||
&.pitch {
|
||||
color: #fff;
|
||||
background-color: rgba(4, 176, 213, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tuition {
|
||||
width: 256.5rpx;
|
||||
height: 84rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 237rpx;
|
||||
color: #000;
|
||||
position: relative;
|
||||
|
||||
.sort-icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-left: 8rpx;
|
||||
}
|
||||
|
||||
.select-mask {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
// background-color: #000;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.select-box {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
border-radius: 15rpx;
|
||||
overflow: hidden;
|
||||
z-index: 100;
|
||||
border: 1rpx solid transparent;
|
||||
|
||||
&.show {
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
transition: all .3s;
|
||||
|
||||
.item {
|
||||
height: 84rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.item {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
transition: all .3s;
|
||||
background-color: #fff;
|
||||
|
||||
&.pitch {
|
||||
font-weight: 650;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.all-projects {
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 18rpx;
|
||||
margin: 0 30rpx;
|
||||
padding-top: 30rpx;
|
||||
|
||||
.pitch {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
|
||||
.text {
|
||||
line-height: 43.5rpx;
|
||||
position: relative;
|
||||
padding-bottom: 37.5rpx;
|
||||
|
||||
&::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 43.5rpx;
|
||||
width: 100%;
|
||||
height: 7.5rpx;
|
||||
display: block;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border-radius: 58.5rpx;
|
||||
}
|
||||
|
||||
.icon {
|
||||
width: 18rpx;
|
||||
height: 10.5rpx;
|
||||
margin-left: 13.5rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.total {
|
||||
font-size: 24rpx;
|
||||
color: #7F7F7F;
|
||||
margin: 0 30rpx 30rpx;
|
||||
}
|
||||
|
||||
.item {
|
||||
background-color: rgba(251, 251, 251, 1);
|
||||
border: 1rpx solid rgba(242, 242, 242, 1);
|
||||
border-radius: 18rpx;
|
||||
margin: 0 30rpx 34.5rpx;
|
||||
padding: 30rpx;
|
||||
position: relative;
|
||||
// overflow: hidden;
|
||||
|
||||
// .angle {
|
||||
// width: 48rpx;
|
||||
// height: 48rpx;
|
||||
// position: absolute;
|
||||
// top: 0;
|
||||
// right: 0;
|
||||
// transform: rotate(-90deg);
|
||||
// border-radius: 0 0 18rpx 0;
|
||||
// }
|
||||
|
||||
.title {
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.name {
|
||||
font-weight: 650;
|
||||
font-size: 33rpx;
|
||||
color: #000000;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
margin-right: 15rpx;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.more {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 30rpx;
|
||||
position: relative;
|
||||
|
||||
.icon {
|
||||
width: 27rpx;
|
||||
height: 12rpx;
|
||||
}
|
||||
|
||||
.more-select-mask {
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.more-select {
|
||||
position: absolute;
|
||||
top: 55rpx;
|
||||
right: 0;
|
||||
width: 450rpx;
|
||||
height: 183rpx;
|
||||
background-color: rgba(255, 255, 255, 1);
|
||||
border-radius: 12rpx;
|
||||
box-shadow: 0 0 7.5rpx rgba(0, 0, 0, 0.180392156862745);
|
||||
flex-direction: column;
|
||||
padding: 27rpx 30rpx 0;
|
||||
z-index: 1;
|
||||
|
||||
.more-select-title {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 34.5rpx;
|
||||
|
||||
.dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
border: 1rpx solid rgb(204, 208, 3);
|
||||
border-radius: 50%;
|
||||
background-color: rgb(246, 246, 189);
|
||||
margin-right: 12rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.more-select-btn {
|
||||
width: 240rpx;
|
||||
height: 60rpx;
|
||||
background-color: rgba(207, 247, 255, 1);
|
||||
border: 1rpx solid rgba(186, 222, 230, 1);
|
||||
border-radius: 237rpx;
|
||||
box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.0705882352941176);
|
||||
font-size: 24rpx;
|
||||
color: #026277;
|
||||
margin: 0 auto;
|
||||
|
||||
.more-select-icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-right: 9rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-top: 12rpx;
|
||||
word-break: break-all;
|
||||
|
||||
}
|
||||
|
||||
.introduce {
|
||||
font-size: 25.5rpx;
|
||||
color: #555555;
|
||||
margin-top: 15rpx;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.line {
|
||||
color: #D7D7D7;
|
||||
margin: 0 12rpx;
|
||||
}
|
||||
|
||||
.quantity {
|
||||
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
color: #000000;
|
||||
margin-left: 12rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.word {
|
||||
font-size: 24rpx;
|
||||
color: #858585;
|
||||
padding: 10.5rpx 15rpx;
|
||||
background-color: rgba(246, 246, 246, 1);
|
||||
border-radius: 7.5rpx;
|
||||
margin-top: 15rpx;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.tag {
|
||||
flex-wrap: wrap;
|
||||
margin-top: 25rpx;
|
||||
|
||||
.tag-item {
|
||||
font-size: 22.5rpx;
|
||||
color: #858585;
|
||||
padding: 0 10.5rpx;
|
||||
border: 1rpx solid #aaaaaa;
|
||||
border-radius: 9rpx;
|
||||
width: fit-content;
|
||||
margin-right: 15rpx;
|
||||
margin-bottom: 10rpx;
|
||||
word-break: break-all;
|
||||
height: 36rpx;
|
||||
line-height: 36rpx;
|
||||
|
||||
&.admissions {
|
||||
background-color: rgba(115, 209, 229, 1);
|
||||
border: none;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
&.gray {
|
||||
border: none;
|
||||
color: #fff;
|
||||
background-color: rgba(51, 51, 51, 1);
|
||||
|
||||
&.semester {
|
||||
background-color: #f95d5d;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.end {
|
||||
font-size: 19.5rpx;
|
||||
color: #D7D7D7;
|
||||
text-align: center;
|
||||
padding: 15rpx 0 45rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.index-sidebar {
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
}
|
172
pages/projectSchoolHomepage/projectSchoolHomepage.wxml
Normal file
172
pages/projectSchoolHomepage/projectSchoolHomepage.wxml
Normal file
@ -0,0 +1,172 @@
|
||||
<!--pages/projectSchoolHomepage/projectSchoolHomepage.wxml-->
|
||||
<header-nav class="header-nav" bgcolor="#fbfbfb"></header-nav>
|
||||
<view class="container">
|
||||
<view class="header">
|
||||
<view class="info flexflex">
|
||||
<view class="avatar flexcenter">
|
||||
<image class="img" src="{{ info.logo }}" mode="widthFix"></image>
|
||||
</view>
|
||||
<view class="right flex1 flexflex">
|
||||
<view class="name">{{ info.name }}</view>
|
||||
<view class="english">{{ info.enname }}</view>
|
||||
<view wx:if="{{ info.ranks.length != 0 }}" class="world" bind:tap="goPage" data-url="/pages/projectList/projectList">
|
||||
<view class="head flexcenter">
|
||||
<view class="icon flexcenter">
|
||||
<image class="img" src="https://app.gter.net/image/miniApp/offer/world-ranking-icon.png" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="list flexacenter">
|
||||
<view class="item" wx:for="{{ info.ranks }}" wx:key="index">
|
||||
<view class="quantity">{{ item.ranktext }}</view>
|
||||
<view class="ranking-name">
|
||||
{{ item.mechanism }}
|
||||
<image wx:if="{{ item.mechanism == 'QS' }}" class="ranking-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-QS.svg"></image>
|
||||
<image wx:if="{{ item.mechanism == '泰晤士' }}" class="ranking-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-TIMES.svg"></image>
|
||||
<image wx:if="{{ item.mechanism == 'USNEWS' }}" class="ranking-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-US-News.svg"></image>
|
||||
<image wx:if="{{ item.mechanism == '软科' }}" class="ranking-icon" mode="widthFix" src="https://app.gter.net/image/miniApp/offer/triangle-Soft.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view wx:else class="ranking-box flexacenter">
|
||||
QS世界综合排名 [2024]
|
||||
<view class="sum">16</view>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
<rich-text id="rich-text" class="brief" nodes="{{ info.message }}"></rich-text>
|
||||
<rich-text class="brief {{ !briefShow ? 'twoLines' : '' }}" style="height: {{ briefShow ? briefHeight : '42' }}px;" nodes="{{ info.message }}"></rich-text>
|
||||
<view class="brief-more flexcenter" bind:tap="cutBriefShow">
|
||||
<image class="icon {{ briefShow ? 'spin' : '' }}" src="https://app.gter.net/image/miniApp/project/u1194.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
<block wx:if="{{ hotList.length !== 0}}">
|
||||
<view class="item-header flexacenter">
|
||||
<view class="greenDot"></view>
|
||||
热门项目
|
||||
</view>
|
||||
<view class="hot">
|
||||
<scroll-view class="hot-box" scroll-x="{{ true }}" bindscroll="hotscroll">
|
||||
<view class="line" wx:for="{{ hotList }}" wx:key="index">
|
||||
<view class="item flexacenter" wx:for="{{ item }}" wx:for-index="i" wx:key="i" bind:tap="goDetails" data-uniqid="{{ item.uniqid }}">
|
||||
<view class="box">
|
||||
<view class="name one-line-display">{{ item.name_zh }}</view>
|
||||
<view class="english one-line-display">{{ item.name_en }}</view>
|
||||
</view>
|
||||
<!-- <view> -->
|
||||
<view wx:if="{{ item.contraststatus == 0 }}" class="join flexflex" catch:tap="handleClick" data-index="{{ item.random }}" data-type="hot" data-random="{{ item.random }}" data-id="{{ item.id }}" data-index="{{ index }}" data-i="{{ i }}" data-status="{{ item.contraststatus }}">
|
||||
<view class="add flexcenter" id="add{{ item.random }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/plus-icon.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else class="cancel flexflex">
|
||||
<view class="cross flexcenter">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/tick-grey.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
<!-- </view> -->
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
<view class="indication flexacenter">
|
||||
<view class="item {{ current == index ? 'pitch' : '' }}" wx:for="{{ hotList.length }}" wx:key="index"></view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<view class="item-header flexacenter">
|
||||
<view class="greenDot"></view>
|
||||
所有项目
|
||||
</view>
|
||||
|
||||
<view class="screen flexacenter">
|
||||
<view class="left flexacenter flex1">
|
||||
<view class="item flex1 flexcenter {{ screen.pitch == 'all' ? 'pitch' : '' }}" bind:tap="selectScreen" data-type="all">全部项目</view>
|
||||
<view class="item flex1 flexcenter {{ screen.pitch == 'subject' ? 'pitch' : '' }}" bind:tap="selectScreen" data-type="subject">按学科</view>
|
||||
<view class="item flex1 flexcenter {{ screen.pitch == 'school' ? 'pitch' : '' }}" bind:tap="selectScreen" data-type="school">按学院</view>
|
||||
</view>
|
||||
<view class="tuition flexcenter" bind:tap="cutCondition">
|
||||
{{ sortObj[sortIndex] }}
|
||||
<image class="sort-icon" src="https://app.gter.net/image/miniApp/offer/sort-icon.png" mode="widthFix"></image>
|
||||
<view wx:if="{{ selectState }}" class="select-mask"></view>
|
||||
<view class="select-box {{ selectState ? 'show' : '' }}" catch:tap="return">
|
||||
<view catch:tap="screenIncident" data-sort="0" wx:if="{{ screen.key == 'all' }}" class="item flexcenter {{ sortIndex == 0 ? 'pitch' : '' }}">排名由高到低</view>
|
||||
<view catch:tap="screenIncident" data-sort="1" class="item flexcenter {{ sortIndex == 1 ? 'pitch' : '' }}">学费由低到高</view>
|
||||
<view catch:tap="screenIncident" data-sort="2" class="item flexcenter {{ sortIndex == 2 ? 'pitch' : '' }}">学费由高到低</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="all-projects">
|
||||
<view wx:if="{{ screen.pitch !== 'all' }}" class="pitch flexcenter" bind:tap="openselect">
|
||||
<view class="text">
|
||||
{{ screen.name }}
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/triangle-red.svg" mode="widthFix"></image>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="total">共 {{ count }} 个项目</view>
|
||||
|
||||
<view class="item" wx:for="{{ list }}" wx:key="index" bind:tap="goDetails" data-uniqid="{{ item.uniqid }}">
|
||||
<!-- <image wx:if="{{ item.admissionsproject }}" class="angle" src="https://app.gter.net/image/miniApp/offer/admission-angle.svg"></image> -->
|
||||
<view class="title flexflex">
|
||||
<view class="name flex1">{{ item.name_zh }}</view>
|
||||
<view>
|
||||
<view wx:if="{{ item.contraststatus.status == 1 && item.contraststatus.ismanage == 1 }}" class="cancel flexflex">
|
||||
<view class="cross flexcenter">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/tick-grey.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
<view wx:elif="{{ item.contraststatus.status == 0 || item.contraststatus.ismanage == 0 }}" class="more flexcenter" catch:tap="openMoreSelect" data-index="{{ index }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/dot-dot-dot-black.png"></image>
|
||||
<view wx:if="{{ item.moreState }}" class="more-select-mask" catch:tap="closeMoreSelect"></view>
|
||||
<view wx:if="{{ item.moreState }}" class="more-select" catch:tap="return">
|
||||
<view class="more-select-title flexacenter">
|
||||
<view class="dot"></view>
|
||||
<block wx:if="{{ item.contraststatus.status == 1 }}">该项目已加入对比单,未加入项目管理</block>
|
||||
<block wx:else>该项目已加入项目管理,未加入对比单</block>
|
||||
</view>
|
||||
<view class="more-select-btn flexcenter" catch:tap="addProject" data-index="{{ index }}" data-id="{{ item.id }}">
|
||||
<image class="more-select-icon" src="https://app.gter.net/image/miniApp/offer/add-deep-blue.svg"></image>加入{{ item.contraststatus.status == 1 ? '项目管理' : '对比单' }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view wx:else class="join flexflex" catch:tap="handleClick" data-index="{{ item.random }}" data-type="list" data-random="{{ item.random }}" data-id="{{ item.id }}" data-index="{{ index }}" data-status="{{ item.contraststatus }}">
|
||||
<view class="add flexcenter" id="add{{ item.random }}">
|
||||
<image class="icon" src="https://app.gter.net/image/miniApp/offer/plus-icon.svg"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="english">{{ item.name_en }}</view>
|
||||
<view class="introduce flexacenter" wx:if="{{ item.department || item.rank || item.tuition_fee_text }}">
|
||||
{{ item.department }}
|
||||
<view class="flexacenter" wx:if="{{ item.rank }}">
|
||||
<view class="line">|</view> 专业排名 <vie class="quantity">{{ item.rank }}</vie>
|
||||
</view>
|
||||
<view class="flexacenter" wx:if="{{ item.tuition_fee }}">
|
||||
<view class="line">|</view> 学费HK$ <vie class="quantity">{{ item.tuition_fee_text }}</vie>
|
||||
</view>
|
||||
</view>
|
||||
<view class="word" wx:if="{{ item.distinctive }}">{{ item.distinctive }}</view>
|
||||
<view class="tag flexflex">
|
||||
<view class="tag-item admissions" wx:if="{{ item.admissionsproject }}">招生官项目</view>
|
||||
<view class="tag-item gray {{ item.semesterState ? 'semester' : '' }}">{{ item.semester.text }}</view>
|
||||
<view class="tag-item" wx:for="{{ item.tags }}" wx:key="index">{{ item }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="end" wx:if="{{ page == 0 && list.length != 0 }}">- End -</view>
|
||||
</view>
|
||||
|
||||
<xg-bottom type="school" bezier="{{ bezier }}" amount="{{ contrastcount }}" bindopenLoginBtnState="openLoginBtnState" islogin="{{ islogin }}" sid="{{ id }}"></xg-bottom>
|
||||
|
||||
<!-- 学科领域 -->
|
||||
<territory-select wx:if="{{ screen.state }}" type="{{ screen.key }}" list="{{ screen.list }}" bindcloseselect="closeselect"></territory-select>
|
||||
|
||||
<go-login wx:if="{{ isloginBtnState }}" islogin="{{ islogin }}" binduserClickLogin="userClickLogin" bindpopClose="popClose"></go-login>
|
||||
|
||||
<perfect-information wx:if="{{ informationState }}" bindrevampInformationState="revampInformationState"></perfect-information>
|
||||
|
||||
</view>
|
||||
<index-sidebar id="index-sidebar" class="index-sidebar" sidebarType="xg" isInitFinish="{{ isInitFinish }}" bind:openLogin="openLoginBtnState" islogin="{{ islogin }}"></index-sidebar>
|
529
pages/projectSchoolHomepage/projectSchoolHomepage.wxss
Normal file
529
pages/projectSchoolHomepage/projectSchoolHomepage.wxss
Normal file
@ -0,0 +1,529 @@
|
||||
/* pages/schoolHomepage/schoolHomepage.wxss */
|
||||
view {
|
||||
box-sizing: border-box;
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
}
|
||||
.container {
|
||||
min-height: 100vh;
|
||||
background-color: #f5f5f5;
|
||||
padding-bottom: 180rpx;
|
||||
}
|
||||
.header {
|
||||
background-color: #fbfbfb;
|
||||
padding-bottom: 24rpx;
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
margin-bottom: 61.5rpx;
|
||||
}
|
||||
.header .info {
|
||||
padding: 36rpx 36rpx 42rpx;
|
||||
}
|
||||
.header .info .avatar {
|
||||
width: 180rpx;
|
||||
height: 180rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 15rpx;
|
||||
margin-right: 30rpx;
|
||||
}
|
||||
.header .info .avatar .img {
|
||||
width: 106.5rpx;
|
||||
height: 120rpx;
|
||||
}
|
||||
.header .info .right {
|
||||
flex-direction: column;
|
||||
}
|
||||
.header .info .right .name {
|
||||
font-weight: 650;
|
||||
font-size: 48rpx;
|
||||
color: #000000;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
margin-bottom: 9rpx;
|
||||
}
|
||||
.header .info .right .english {
|
||||
font-size: 24rpx;
|
||||
color: #333333;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.header .info .right .ranking-box {
|
||||
height: 54rpx;
|
||||
background-color: #f9e7ed;
|
||||
border-radius: 9rpx;
|
||||
color: #933737;
|
||||
font-size: 27rpx;
|
||||
padding-left: 15rpx;
|
||||
width: fit-content;
|
||||
}
|
||||
.header .info .right .ranking-box .sum {
|
||||
margin-left: 15rpx;
|
||||
font-family: 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 30rpx;
|
||||
color: #FFFFFF;
|
||||
height: 54rpx;
|
||||
line-height: 54rpx;
|
||||
background-color: #f95d5d;
|
||||
border-radius: 0 9rpx 9rpx 0;
|
||||
padding: 0 10.5rpx;
|
||||
}
|
||||
.header .info .right .world .head {
|
||||
width: 100%;
|
||||
height: 33rpx;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: 10.5rpx;
|
||||
}
|
||||
.header .info .right .world .head::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: 100%;
|
||||
height: 1rpx;
|
||||
z-index: -1;
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.header .info .right .world .head .icon {
|
||||
width: 163.5rpx;
|
||||
background-color: #fbfbfb;
|
||||
}
|
||||
.header .info .right .world .head .icon .img {
|
||||
width: 96rpx;
|
||||
height: 33rpx;
|
||||
display: block;
|
||||
}
|
||||
.header .info .right .world .list {
|
||||
justify-content: space-between;
|
||||
padding-bottom: 25rpx;
|
||||
border-bottom: 1rpx solid #ebebeb;
|
||||
}
|
||||
.header .info .right .world .list .item {
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
}
|
||||
.header .info .right .world .list .item .quantity {
|
||||
text-align: center;
|
||||
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 18rpx;
|
||||
}
|
||||
.header .info .right .world .list .item .ranking-name {
|
||||
text-align: center;
|
||||
font-family: 'HelveticaNeue', 'Helvetica Neue', sans-serif;
|
||||
font-weight: 400;
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
width: fit-content;
|
||||
position: relative;
|
||||
line-height: 24rpx;
|
||||
}
|
||||
.header .info .right .world .list .item .ranking-name .ranking-icon {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: -12rpx;
|
||||
transform: rotate(270deg);
|
||||
}
|
||||
.header .brief {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', sans-serif;
|
||||
font-size: 22.5rpx;
|
||||
color: #7F7F7F;
|
||||
line-height: 42rpx;
|
||||
padding: 0 36rpx;
|
||||
display: block;
|
||||
white-space: pre-line;
|
||||
word-break: break-word;
|
||||
transition: all 0.3s;
|
||||
overflow: hidden;
|
||||
}
|
||||
.header .brief.twoLines {
|
||||
display: -webkit-box;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 2;
|
||||
overflow: hidden;
|
||||
}
|
||||
.header .brief#rich-text {
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
bottom: 0;
|
||||
color: transparent;
|
||||
}
|
||||
.header .brief-more {
|
||||
padding: 21rpx 0;
|
||||
}
|
||||
.header .brief-more .icon {
|
||||
width: 27rpx;
|
||||
height: 27rpx;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.header .brief-more .icon.spin {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
.item-header {
|
||||
padding: 0 22.5rpx;
|
||||
color: #000;
|
||||
font-weight: 650;
|
||||
font-size: 30rpx;
|
||||
margin-bottom: 30rpx;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
}
|
||||
.item-header .greenDot {
|
||||
margin-right: 18rpx;
|
||||
width: 11rpx;
|
||||
height: 24rpx;
|
||||
background-color: #ccd003;
|
||||
border: 1rpx solid #9a9d02;
|
||||
border-radius: 10rpx;
|
||||
}
|
||||
.hot {
|
||||
margin-left: 22.5rpx;
|
||||
margin-bottom: 60rpx;
|
||||
}
|
||||
.hot .hot-box {
|
||||
margin-bottom: 18rpx;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.hot .hot-box .line {
|
||||
width: 525rpx;
|
||||
margin-right: 15rpx;
|
||||
display: inline-block;
|
||||
}
|
||||
.hot .hot-box .line .item {
|
||||
width: 525rpx;
|
||||
height: 135rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 18rpx;
|
||||
padding: 0 30rpx;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.hot .hot-box .line .item:first-of-type {
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
.hot .hot-box .line .item .name {
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
margin-bottom: 6rpx;
|
||||
width: 380rpx;
|
||||
}
|
||||
.hot .hot-box .line .item .english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
width: 380rpx;
|
||||
}
|
||||
.hot .indication {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.hot .indication .item {
|
||||
width: 15rpx;
|
||||
height: 6rpx;
|
||||
background-color: #d7d7d7;
|
||||
border-radius: 30rpx;
|
||||
margin-right: 6rpx;
|
||||
}
|
||||
.hot .indication .item.pitch {
|
||||
background-color: #fa6b11;
|
||||
}
|
||||
.join {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 21rpx;
|
||||
color: #026277;
|
||||
}
|
||||
.join .add {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 30rpx;
|
||||
}
|
||||
.join .add .icon {
|
||||
width: 18rpx;
|
||||
height: 18rpx;
|
||||
}
|
||||
.cancel {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
text-align: center;
|
||||
}
|
||||
.cancel .cross {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
background-color: #f6f6f6;
|
||||
border: 1rpx solid #ebebeb;
|
||||
border-radius: 30rpx;
|
||||
}
|
||||
.cancel .cross .icon {
|
||||
width: 22.5rpx;
|
||||
height: 18rpx;
|
||||
}
|
||||
.screen {
|
||||
font-size: 24rpx;
|
||||
color: #555555;
|
||||
margin: 0 22.5rpx 15rpx;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.screen .left {
|
||||
height: 84rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 237rpx;
|
||||
margin-right: 15rpx;
|
||||
padding: 0 9rpx;
|
||||
}
|
||||
.screen .left .item {
|
||||
height: 66rpx;
|
||||
line-height: 66rpx;
|
||||
border-radius: 237rpx;
|
||||
}
|
||||
.screen .left .item.pitch {
|
||||
color: #fff;
|
||||
background-color: #04b0d5;
|
||||
}
|
||||
.screen .tuition {
|
||||
width: 256.5rpx;
|
||||
height: 84rpx;
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 237rpx;
|
||||
color: #000;
|
||||
position: relative;
|
||||
}
|
||||
.screen .tuition .sort-icon {
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
margin-left: 8rpx;
|
||||
}
|
||||
.screen .tuition .select-mask {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
.screen .tuition .select-box {
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
border-radius: 15rpx;
|
||||
overflow: hidden;
|
||||
z-index: 100;
|
||||
border: 1rpx solid transparent;
|
||||
}
|
||||
.screen .tuition .select-box.show {
|
||||
border: 1rpx solid #f2f2f2;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.screen .tuition .select-box.show .item {
|
||||
height: 84rpx;
|
||||
}
|
||||
.screen .tuition .select-box .item {
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
transition: all 0.3s;
|
||||
background-color: #fff;
|
||||
}
|
||||
.screen .tuition .select-box .item.pitch {
|
||||
font-weight: 650;
|
||||
}
|
||||
.all-projects {
|
||||
background-color: #ffffff;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 18rpx;
|
||||
margin: 0 30rpx;
|
||||
padding-top: 30rpx;
|
||||
}
|
||||
.all-projects .pitch {
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
font-weight: 650;
|
||||
font-size: 27rpx;
|
||||
color: #000000;
|
||||
}
|
||||
.all-projects .pitch .text {
|
||||
line-height: 43.5rpx;
|
||||
position: relative;
|
||||
padding-bottom: 37.5rpx;
|
||||
}
|
||||
.all-projects .pitch .text::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 43.5rpx;
|
||||
width: 100%;
|
||||
height: 7.5rpx;
|
||||
display: block;
|
||||
background-color: #cff7ff;
|
||||
border-radius: 58.5rpx;
|
||||
}
|
||||
.all-projects .pitch .text .icon {
|
||||
width: 18rpx;
|
||||
height: 10.5rpx;
|
||||
margin-left: 13.5rpx;
|
||||
}
|
||||
.all-projects .total {
|
||||
font-size: 24rpx;
|
||||
color: #7F7F7F;
|
||||
margin: 0 30rpx 30rpx;
|
||||
}
|
||||
.all-projects .item {
|
||||
background-color: #fbfbfb;
|
||||
border: 1rpx solid #f2f2f2;
|
||||
border-radius: 18rpx;
|
||||
margin: 0 30rpx 34.5rpx;
|
||||
padding: 30rpx;
|
||||
position: relative;
|
||||
}
|
||||
.all-projects .item .title {
|
||||
align-items: flex-start;
|
||||
}
|
||||
.all-projects .item .name {
|
||||
font-weight: 650;
|
||||
font-size: 33rpx;
|
||||
color: #000000;
|
||||
font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC', sans-serif;
|
||||
margin-right: 15rpx;
|
||||
word-break: break-all;
|
||||
}
|
||||
.all-projects .item .more {
|
||||
width: 42rpx;
|
||||
height: 42rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 30rpx;
|
||||
position: relative;
|
||||
}
|
||||
.all-projects .item .more .icon {
|
||||
width: 27rpx;
|
||||
height: 12rpx;
|
||||
}
|
||||
.all-projects .item .more .more-select-mask {
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
.all-projects .item .more .more-select {
|
||||
position: absolute;
|
||||
top: 55rpx;
|
||||
right: 0;
|
||||
width: 450rpx;
|
||||
height: 183rpx;
|
||||
background-color: #ffffff;
|
||||
border-radius: 12rpx;
|
||||
box-shadow: 0 0 7.5rpx rgba(0, 0, 0, 0.18039216);
|
||||
flex-direction: column;
|
||||
padding: 27rpx 30rpx 0;
|
||||
z-index: 1;
|
||||
}
|
||||
.all-projects .item .more .more-select .more-select-title {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-bottom: 34.5rpx;
|
||||
}
|
||||
.all-projects .item .more .more-select .more-select-title .dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
border: 1rpx solid #ccd003;
|
||||
border-radius: 50%;
|
||||
background-color: #f6f6bd;
|
||||
margin-right: 12rpx;
|
||||
}
|
||||
.all-projects .item .more .more-select .more-select-btn {
|
||||
width: 240rpx;
|
||||
height: 60rpx;
|
||||
background-color: #cff7ff;
|
||||
border: 1rpx solid #badee6;
|
||||
border-radius: 237rpx;
|
||||
box-shadow: 0 0 4.5rpx rgba(0, 0, 0, 0.07058824);
|
||||
font-size: 24rpx;
|
||||
color: #026277;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.all-projects .item .more .more-select .more-select-btn .more-select-icon {
|
||||
width: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-right: 9rpx;
|
||||
}
|
||||
.all-projects .item .english {
|
||||
font-size: 21rpx;
|
||||
color: #7F7F7F;
|
||||
margin-top: 12rpx;
|
||||
word-break: break-all;
|
||||
}
|
||||
.all-projects .item .introduce {
|
||||
font-size: 25.5rpx;
|
||||
color: #555555;
|
||||
margin-top: 15rpx;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.all-projects .item .introduce .line {
|
||||
color: #D7D7D7;
|
||||
margin: 0 12rpx;
|
||||
}
|
||||
.all-projects .item .introduce .quantity {
|
||||
font-family: 'Arial', 'Arial-Black', 'Arial Black', sans-serif;
|
||||
font-weight: 900;
|
||||
color: #000000;
|
||||
margin-left: 12rpx;
|
||||
}
|
||||
.all-projects .item .word {
|
||||
font-size: 24rpx;
|
||||
color: #858585;
|
||||
padding: 10.5rpx 15rpx;
|
||||
background-color: #f6f6f6;
|
||||
border-radius: 7.5rpx;
|
||||
margin-top: 15rpx;
|
||||
word-break: break-all;
|
||||
}
|
||||
.all-projects .item .tag {
|
||||
flex-wrap: wrap;
|
||||
margin-top: 25rpx;
|
||||
}
|
||||
.all-projects .item .tag .tag-item {
|
||||
font-size: 22.5rpx;
|
||||
color: #858585;
|
||||
padding: 0 10.5rpx;
|
||||
border: 1rpx solid #aaaaaa;
|
||||
border-radius: 9rpx;
|
||||
width: fit-content;
|
||||
margin-right: 15rpx;
|
||||
margin-bottom: 10rpx;
|
||||
word-break: break-all;
|
||||
height: 36rpx;
|
||||
line-height: 36rpx;
|
||||
}
|
||||
.all-projects .item .tag .tag-item.admissions {
|
||||
background-color: #73d1e5;
|
||||
border: none;
|
||||
color: #fff;
|
||||
}
|
||||
.all-projects .item .tag .tag-item.gray {
|
||||
border: none;
|
||||
color: #fff;
|
||||
background-color: #333333;
|
||||
}
|
||||
.all-projects .item .tag .tag-item.gray.semester {
|
||||
background-color: #f95d5d;
|
||||
}
|
||||
.all-projects .end {
|
||||
font-size: 19.5rpx;
|
||||
color: #D7D7D7;
|
||||
text-align: center;
|
||||
padding: 15rpx 0 45rpx;
|
||||
}
|
||||
.index-sidebar {
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user