Compare commits

...

10 Commits

@ -107,7 +107,7 @@
bottom: 0;
left: 0;
width: 100%;
height: 120rpx;
height: 140rpx;
box-shadow: 0 0 10px #999;
display: flex;
align-items: center;

@ -10,6 +10,11 @@
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title></title>
<script src="/components/muyu-modelDisplay/threejs/three.js"></script>
<script src="/components/muyu-modelDisplay/threejs/OrbitControls.js"></script>
<script src="/components/muyu-modelDisplay/threejs/GLTFLoader.js"></script>
<script src="/components/muyu-modelDisplay/threejs/OBJLoader.js"></script>
<script src="/components/muyu-modelDisplay/threejs/MTLLoader.js"></script>
<!--preload-links-->
<!--app-context-->
</head>

@ -61,6 +61,9 @@
"desc" : "提供您最近的活动地址"
}
},
"optimization" : {
"subPackages" : true
},
"requiredPrivateInfos" : [ "getLocation" ]
},
"mp-alipay" : {

257
node_modules/moment/package.json generated vendored

@ -1,112 +1,163 @@
{
"_args": [
[
"moment@2.29.3",
"/Users/mac/Documents/朗业/2023/s-苏州博物馆/szgb-book-wx"
]
],
"_from": "moment@2.29.3",
"_id": "moment@2.29.3",
"_inBundle": false,
"_integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==",
"_location": "/moment",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "moment@2.29.3",
"name": "moment",
"version": "2.29.3",
"description": "Parse, validate, manipulate, and display dates",
"homepage": "https://momentjs.com",
"author": "Iskren Ivov Chernev <iskren.chernev@gmail.com> (https://github.com/ichernev)",
"contributors": [
"Tim Wood <washwithcare@gmail.com> (http://timwoodcreates.com/)",
"Rocky Meza (http://rockymeza.com)",
"Matt Johnson <mj1856@hotmail.com> (http://codeofmatt.com)",
"Isaac Cambron <isaac@isaaccambron.com> (http://isaaccambron.com)",
"Andre Polykanine <andre@oire.org> (https://github.com/oire)"
],
"keywords": [
"moment",
"date",
"time",
"parse",
"format",
"validate",
"i18n",
"l10n",
"ender"
],
"main": "./moment.js",
"jsnext:main": "./dist/moment.js",
"typings": "./moment.d.ts",
"typesVersions": {
">=3.1": {
"*": [
"ts3.1-typings/*"
]
}
},
"engines": {
"node": "*"
},
"repository": {
"type": "git",
"url": "https://github.com/moment/moment.git"
"escapedName": "moment",
"rawSpec": "2.29.3",
"saveSpec": null,
"fetchSpec": "2.29.3"
},
"_requiredBy": [
"/"
],
"_resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz",
"_spec": "2.29.3",
"_where": "/Users/mac/Documents/朗业/2023/s-苏州博物馆/szgb-book-wx",
"author": {
"name": "Iskren Ivov Chernev",
"email": "iskren.chernev@gmail.com",
"url": "https://github.com/ichernev"
},
"bugs": {
"url": "https://github.com/moment/moment/issues"
},
"contributors": [
{
"name": "Tim Wood",
"email": "washwithcare@gmail.com",
"url": "http://timwoodcreates.com/"
},
"bugs": {
"url": "https://github.com/moment/moment/issues"
{
"name": "Rocky Meza",
"url": "http://rockymeza.com"
},
"license": "MIT",
"devDependencies": {
"benchmark": "latest",
"coveralls": "latest",
"cross-env": "^6.0.3",
"es6-promise": "latest",
"eslint": "~6",
"grunt": "latest",
"grunt-benchmark": "latest",
"grunt-cli": "latest",
"grunt-contrib-clean": "latest",
"grunt-contrib-concat": "latest",
"grunt-contrib-copy": "latest",
"grunt-contrib-uglify": "latest",
"grunt-contrib-watch": "latest",
"grunt-env": "latest",
"grunt-exec": "latest",
"grunt-karma": "latest",
"grunt-nuget": "latest",
"grunt-string-replace": "latest",
"karma": "latest",
"karma-chrome-launcher": "latest",
"karma-firefox-launcher": "latest",
"karma-qunit": "latest",
"karma-sauce-launcher": "4.1.4",
"load-grunt-tasks": "latest",
"lodash": ">=4.17.19",
"node-qunit": "latest",
"nyc": "latest",
"prettier": "latest",
"qunit": "^2.10.0",
"rollup": "2.17.1",
"typescript": "^1.8.10",
"typescript3": "npm:typescript@^3.1.6",
"uglify-js": "latest"
{
"name": "Matt Johnson",
"email": "mj1856@hotmail.com",
"url": "http://codeofmatt.com"
},
"ender": "./ender.js",
"dojoBuild": "package.js",
"jspm": {
"files": [
"moment.js",
"moment.d.ts",
"locale"
],
"map": {
"moment": "./moment"
},
"buildConfig": {
"uglify": true
}
{
"name": "Isaac Cambron",
"email": "isaac@isaaccambron.com",
"url": "http://isaaccambron.com"
},
"scripts": {
"ts3.1-typescript-test": "cross-env node_modules/typescript3/bin/tsc --project ts3.1-typing-tests",
"typescript-test": "cross-env node_modules/typescript/bin/tsc --project typing-tests",
"test": "grunt test",
"eslint": "eslint Gruntfile.js tasks src",
"prettier-check": "prettier --check Gruntfile.js tasks src",
"prettier-fmt": "prettier --write Gruntfile.js tasks src",
"coverage": "nyc npm test && nyc report",
"coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls"
{
"name": "Andre Polykanine",
"email": "andre@oire.org",
"url": "https://github.com/oire"
}
],
"description": "Parse, validate, manipulate, and display dates",
"devDependencies": {
"benchmark": "latest",
"coveralls": "latest",
"cross-env": "^6.0.3",
"es6-promise": "latest",
"eslint": "~6",
"grunt": "latest",
"grunt-benchmark": "latest",
"grunt-cli": "latest",
"grunt-contrib-clean": "latest",
"grunt-contrib-concat": "latest",
"grunt-contrib-copy": "latest",
"grunt-contrib-uglify": "latest",
"grunt-contrib-watch": "latest",
"grunt-env": "latest",
"grunt-exec": "latest",
"grunt-karma": "latest",
"grunt-nuget": "latest",
"grunt-string-replace": "latest",
"karma": "latest",
"karma-chrome-launcher": "latest",
"karma-firefox-launcher": "latest",
"karma-qunit": "latest",
"karma-sauce-launcher": "4.1.4",
"load-grunt-tasks": "latest",
"lodash": ">=4.17.19",
"node-qunit": "latest",
"nyc": "latest",
"prettier": "latest",
"qunit": "^2.10.0",
"rollup": "2.17.1",
"typescript": "^1.8.10",
"typescript3": "npm:typescript@^3.1.6",
"uglify-js": "latest"
},
"dojoBuild": "package.js",
"ender": "./ender.js",
"engines": {
"node": "*"
},
"homepage": "https://momentjs.com",
"jsnext:main": "./dist/moment.js",
"jspm": {
"files": [
"moment.js",
"moment.d.ts",
"locale"
],
"map": {
"moment": "./moment"
},
"spm": {
"main": "moment.js",
"output": [
"locale/*.js"
]
"buildConfig": {
"uglify": true
}
},
"keywords": [
"moment",
"date",
"time",
"parse",
"format",
"validate",
"i18n",
"l10n",
"ender"
],
"license": "MIT",
"main": "./moment.js",
"name": "moment",
"repository": {
"type": "git",
"url": "git+https://github.com/moment/moment.git"
},
"scripts": {
"coverage": "nyc npm test && nyc report",
"coveralls": "nyc npm test && nyc report --reporter=text-lcov | coveralls",
"eslint": "eslint Gruntfile.js tasks src",
"prettier-check": "prettier --check Gruntfile.js tasks src",
"prettier-fmt": "prettier --write Gruntfile.js tasks src",
"test": "grunt test",
"ts3.1-typescript-test": "cross-env node_modules/typescript3/bin/tsc --project ts3.1-typing-tests",
"typescript-test": "cross-env node_modules/typescript/bin/tsc --project typing-tests"
},
"spm": {
"main": "moment.js",
"output": [
"locale/*.js"
]
},
"typesVersions": {
">=3.1": {
"*": [
"ts3.1-typings/*"
]
}
},
"typings": "./moment.d.ts",
"version": "2.29.3"
}

@ -281,7 +281,7 @@
methods: {
init() {
//
//this.$emit('monthSelected', this.selected)
this.$emit('monthSelected', this.selected)
this.$nextTick(() => {
//
// nvue$nextTick100%

@ -1,35 +1,34 @@
// 此版本发布于2022-04-19
const version = '2.0.31'
// 开发环境才提示,生产环境不会提示
if (process.env.NODE_ENV === 'development') {
console.log(`\n %c uView V${version} %c https://www.uviewui.com/ \n\n`,
'color: #ffffff; background: #3c9cff; padding:5px 0;', 'color: #3c9cff;background: #ffffff; padding:5px 0;');
}
export default {
v: version,
version,
// 主题名称
type: [
'primary',
'success',
'info',
'error',
'warning'
],
// 颜色部分本来可以通过scss的:export导出供js使用但是奈何nvue不支持
color: {
'u-primary': '#2979ff',
'u-warning': '#ff9900',
'u-success': '#19be6b',
'u-error': '#fa3534',
'u-info': '#909399',
'u-main-color': '#303133',
'u-content-color': '#606266',
'u-tips-color': '#909399',
'u-light-color': '#c0c4cc'
},
// 默认单位可以通过配置为rpx那么在用于传入组件大小参数为数值时就默认为rpx
unit: 'px'
// 此版本发布于2022-04-19
const version = '2.0.31'
// 开发环境才提示,生产环境不会提示
if (process.env.NODE_ENV === 'development') {
console.log(`\n %c uView V${version} %c https://www.uviewui.com/ \n\n`, 'color: #ffffff; background: #3c9cff; padding:5px 0;', 'color: #3c9cff;background: #ffffff; padding:5px 0;');
}
export default {
v: version,
version,
// 主题名称
type: [
'primary',
'success',
'info',
'error',
'warning'
],
// 颜色部分本来可以通过scss的:export导出供js使用但是奈何nvue不支持
color: {
'u-primary': '#2979ff',
'u-warning': '#ff9900',
'u-success': '#19be6b',
'u-error': '#fa3534',
'u-info': '#909399',
'u-main-color': '#303133',
'u-content-color': '#606266',
'u-tips-color': '#909399',
'u-light-color': '#c0c4cc'
},
// 默认单位可以通过配置为rpx那么在用于传入组件大小参数为数值时就默认为rpx
unit: 'px'
}

203
node_modules/uview-ui/package.json generated vendored

@ -1,87 +1,122 @@
{
"id": "uview-ui",
"name": "uview-ui",
"displayName": "uView2.0重磅发布,利剑出鞘,一统江湖",
"version": "2.0.31",
"description": "uView UI已完美兼容nvue全面的组件和便捷的工具会让您信手拈来如鱼得水",
"keywords": [
"uview",
"uview",
"ui",
"ui",
"uni-app",
"uni-app",
"ui"
"_args": [
[
"uview-ui@2.0.31",
"/Users/mac/Documents/朗业/2023/s-苏州博物馆/szgb-book-wx"
]
],
"_from": "uview-ui@2.0.31",
"_id": "uview-ui@2.0.31",
"_inBundle": false,
"_integrity": "sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw==",
"_location": "/uview-ui",
"_phantomChildren": {},
"_requested": {
"type": "version",
"registry": true,
"raw": "uview-ui@2.0.31",
"name": "uview-ui",
"escapedName": "uview-ui",
"rawSpec": "2.0.31",
"saveSpec": null,
"fetchSpec": "2.0.31"
},
"_requiredBy": [
"/"
],
"_resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz",
"_spec": "2.0.31",
"_where": "/Users/mac/Documents/朗业/2023/s-苏州博物馆/szgb-book-wx",
"bugs": {
"url": "https://github.com/umicro/uView2.0/issues"
},
"dcloudext": {
"category": [
"前端组件",
"通用组件"
],
"repository": "https://github.com/umicro/uView2.0",
"engines": {
"HBuilderX": "^3.1.0"
},
"dcloudext": {
"category": [
"前端组件",
"通用组件"
],
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": "1416956117"
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/package/uview-ui"
},
"uni_modules": {
"dependencies": [],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"Vue": {
"vue2": "y",
"vue3": "n"
},
"App": {
"app-vue": "y",
"app-nvue": "y"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y"
},
"快应用": {
"华为": "y",
"联盟": "y"
}
}
}
}
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": "1416956117"
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/package/uview-ui"
},
"description": "uView UI已完美兼容nvue全面的组件和便捷的工具会让您信手拈来如鱼得水",
"displayName": "uView2.0重磅发布,利剑出鞘,一统江湖",
"engines": {
"HBuilderX": "^3.1.0"
},
"homepage": "https://github.com/umicro/uView2.0#readme",
"id": "uview-ui",
"keywords": [
"uview",
"uview",
"ui",
"ui",
"uni-app",
"uni-app",
"ui"
],
"name": "uview-ui",
"repository": {
"type": "git",
"url": "git+https://github.com/umicro/uView2.0.git"
},
"uni_modules": {
"dependencies": [],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"Vue": {
"vue2": "y",
"vue3": "n"
},
"App": {
"app-vue": "y",
"app-nvue": "y"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y"
},
"快应用": {
"华为": "y",
"联盟": "y"
}
}
}
},
"version": "2.0.31"
}

27
package-lock.json generated

@ -1,31 +1,6 @@
{
"name": "szgb-book-wx",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"dependencies": {
"moment": "^2.29.3",
"uview-ui": "^2.0.31"
}
},
"node_modules/moment": {
"version": "2.29.3",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz",
"integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==",
"engines": {
"node": "*"
}
},
"node_modules/uview-ui": {
"version": "2.0.31",
"resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz",
"integrity": "sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw==",
"engines": {
"HBuilderX": "^3.1.0"
}
}
},
"lockfileVersion": 1,
"dependencies": {
"moment": {
"version": "2.29.3",

@ -18,11 +18,6 @@
<text>活动时间{{timeFormat(numberlist.start_time,"yyyy年MM月DD日")}}{{getHm(numberlist.start_time)}}-{{getHm(numberlist.end_time)}}</text>
</view>
<!-- <view class="activityBox-row">
<text class="icon-huodongfangshi iconfont"></text>
<text>活动方式{{list.area_name}}</text>
</view> -->
<view class="activityBox-row">
<text class="icon-huodong iconfont"></text>
<text>活动地址{{list.address}}</text>
@ -30,7 +25,8 @@
<view class="activityBox-row">
<text class="icon-renshu iconfont"></text>
<text>人数限制{{numberlist.total==0?'不限':numberlist.total}}</text>
<text>人数限制{{(list.form==2?10 : (numberlist.total==0?'不限':numberlist.total))}}</text>
</view>
<view class="activityBox-row flex-row align-center" @click="tothere">
<text class="icon-ditu-dibiao iconfont"></text>
@ -61,7 +57,7 @@
<text class="box-tips-txt"
v-if="type=='user'">每单限购{{list.person_max_count}}同一身份证当天限购1张</text>
<text class="box-tips-txt"
v-if="type=='team'">{{list.team_min_count}}人以上可团体预约<!-- 一个团体最多{{list.team_max_count}} --></text>
v-if="type=='team'">{{list.form==2?10:list.team_min_count}}人以上可团体预约<!-- 一个团体最多{{list.team_max_count}} --></text>
</view>
<view>
<view class="box-card-content">
@ -151,11 +147,6 @@
<u-input placeholder="请输入单位名称" v-model="form.unit"></u-input>
</u-form-item>
<u-form-item label="证件类型" labelWidth="80" prop="card_type1" required>
<!-- <u-radio-group v-model="form.card_type">
<u-radio width="50%" activeColor="#cf995a" v-for="(item, index) in cardType"
:key="index" :name=item.id :label="item.name">
</u-radio>
</u-radio-group> -->
<u-cell-group :border="false">
<u-cell @click="showCards" :title="card_type_names" :isLink="true"
arrow-direction="down"></u-cell>
@ -187,17 +178,12 @@
</u-form-item>
<u-form-item label="证件类型" labelWidth="80" prop="formUser.card_type" ref="formUser.card_type"
required>
<!-- <u-radio-group v-model="formUser.card_type">
<u-radio width="50%" activeColor="#cf995a" v-for="(item, index) in cardType"
:key="index" :name=item.id :label="item.name">
</u-radio>
</u-radio-group> -->
<u-cell-group :border="false">
<u-cell @click="showCard" :title="card_type_name" :isLink="true" arrow-direction="down">
</u-cell>
</u-cell-group>
</u-form-item>
<u-form-item label="证件号码" labelWidth="80" prop="formUser.idcard" ref="formUser.idcard" required>
<u-form-item label="证件号码" labelWidth="80" prop="formUser.idcard" ref="formUser.idcard">
<u-input v-model="formUser.idcard" placeholder="请输入证件号码"></u-input>
</u-form-item>
<u-form-item label="手机号" labelWidth="80" prop="formUser.mobile" ref="formUser.mobile">
@ -212,22 +198,26 @@
<u-picker :show="cardshow" @cancel="cancel" @confirm="confirmCard" ref="uPicker" :columns="cardLists"
keyName="label"></u-picker>
<u-picker :show="cardshows" @cancel="cancels" @confirm="confirmCards" ref="uPickers" :columns="cardLists"
keyName="label"></u-picker>
<u-popup :show="showInfo" mode="bottom" @close="closeInfo" :round="10" closeable>
<view class="mpopup">
<view class="mpopup-title">
{{currentNotice.title}}
</view>
<view class="mpopup-content" style="margin-top: 60rpx;">
<rich-text :nodes="currentNotice.content"></rich-text>
<view @click="downLoad" style="color:#cf995a ;" v-if="currentNotice.isTemplate"></view>
<view style="margin-top: 80px;"></view>
<u-button type="primary" @click="closeInfo"></u-button>
</view>
</view>
keyName="label"></u-picker>
<u-popup :show="showInfo" mode="bottom" @close="closeInfo" :round="10" closeable>
<view class="mpopup" :style="[{height:maxheight}]">
<view class="mpopup-title">
{{currentNotice.title}}
</view>
<view class="mpopup-content" style="margin-top: 60rpx;">
<scroll-view scroll-y="true" :style="[{height:scrollheight}]">
<view class="htmls" style="line-height: 50rpx;text-indent: 2em;" v-html="currentNotice.content">
</view>
<view @click="downLoad" style="color:#cf995a ;">下载模版</view>
</scroll-view>
<view style="margin-top: 40rpx;"></view>
<u-button type="primary" @click="closeInfo"></u-button>
</view>
</view>
</u-popup>
<u-popup :show="showAuthorization" closeable mode="bottom" @close="closePhone" :round="10">
@ -246,7 +236,6 @@
mode="center" width="600rpx" height="150rpx">
<view class="">
<view class="successBox">
<!-- <u-icon name="checkmark-circle" size="90" color="#cf995a"></u-icon> -->
<view class="h3">您已经预约成功</view>
<view class="p">报名成功</view>
<view class="p">即将跳转到活动预约 {{time}} s</view>
@ -302,17 +291,11 @@
message: '请输入证件号',
trigger: 'blur'
}],
card_type: [{
required: true,
message: '请选择证件类型',
trigger: 'change'
}]
},
cardshow: false,
cardshows: false,
card_type_name: "身份证",
card_type_names: "身份证",
// cardLists:['','','','',''],
cardLists: [
[{
value: 1,
@ -351,7 +334,6 @@
this.form.type = (options.type == 'user' ? 2 : 1);
this.form.activity_id = parseInt(options.activity_id);
this.form.activity_number_id = parseInt(options.activity_number_id);
},
onShow(){
var that = this;
@ -402,7 +384,7 @@
downLoad() {
const downloadTask = uni.downloadFile({
url: 'https://leyitest.ali251.langye.net/Template.xlsx', //
url: 'https://gbyuyue.szgmbwg.org.cn/Template.xlsx', //
success: (res) => {
var filePath = res.tempFilePath
if (res.statusCode === 200) {
@ -561,22 +543,7 @@
})
return false;
}
if (that.formUser.card_type == 1) {
if (this.util.isNull(this.formUser.idcard)) {
uni.showToast({
icon: "none",
title: "请填写身份证号"
})
return false;
}
if (!that.util.isValidCardID(that.formUser.idcard)) {
uni.showToast({
icon: "none",
title: "请正确输入身份证号"
})
return false;
}
}
if (that.isEdit) {
that.form.details_list[that.isEditIndex] = that.formUser;
that.isEdit = false
@ -717,7 +684,7 @@
}, 1000)
that.timer = setTimeout(function() {
uni.redirectTo({
url: '/pages/order/activityorder'
url: '/packages/order/activityorder'
})
clearInterval(that.t);
clearTimeout(that.timer)

@ -6,13 +6,6 @@
<view :class="!item.isCanBook?'gray100':''"></view>
<view class="activityBox-top">
<image :src='item.cover_upload.url' style="width: 100%;height: 333rpx;"></image>
<!-- <view class="book-status">
{{item.rate_name}}
</view> -->
<!-- <view class="book-num" v-if="item.orders_count>0">
<text class="book-num-y"> {{isUnde(item.orders_count)}} </text>
<text>人已报名</text>
</view> -->
</view>
<view class="activityBox-content flex-col">
<view class="activityBox-row">
@ -60,20 +53,12 @@
更多>>
</view>
</view>
<!-- <view class="activityBox-row">
<text class="icon-huodongfangshi iconfont"></text>
<text>活动方式{{isUnde(item.area_name)}}</text>
</view> -->
<view class="activityBox-row">
<text class="icon-huodong iconfont"></text>
<text>活动地址{{isUnde(item.address)}}</text>
</view>
<!-- <view class="activityBox-row">
<text class="icon-renshu iconfont"></text>
<text>人数限制{{isUnde(item.total)==0?'不限':isUnde(item.total)}}</text>
</view> -->
<view class="activityBox-row flex-row align-center" style="margin-bottom: 0rpx;"
@click.stop="tothere(item)">
<text class="icon-ditu-dibiao iconfont"></text>

@ -3,7 +3,6 @@
<view class="">
<view class="activityBox">
<view class="activityBox-top">
<!-- <image src="../../static/img/img_activity.jpg" style="width: 100%;height: 333rpx;"></image> -->
<swiper autoplay="true" :interval="4000" :duration="1000" :indicator-dots="true"
indicator-active-color="rgba(255, 255, 255, 0.7)" indicator-color="rgba(239, 149, 37, 1)"
:current="topSwiperIndex" @change="topSwiperTab">
@ -17,24 +16,11 @@
<view class="activityBox-content flex-col">
<view class="activityBox-row flex-row justify-between">
<text class="activityBox-title">{{isUnde(list.name)}}</text>
<!-- <view class="tag tag_green activityBox_btn">
<text>{{isUnde(list.type_name)}}</text>
</view> -->
</view>
<!-- <view class="activityBox-row">
<text class="icon-huodongfangshi iconfont"></text>
<text>活动方式{{isUnde(list.area_name)}}</text>
</view> -->
<view class="activityBox-row">
<text class="icon-huodong iconfont"></text>
<text>活动地址{{isUnde(list.address)}}</text>
</view>
<!-- <view class="activityBox-row">
<text class="icon-renshu iconfont"></text>
<text>人数限制{{isUnde(list.total)==0?'不限':isUnde(list.total)}}</text>
</view> -->
<view class="activityBox-row flex-row align-center" @click="tothere">
<text class="icon-ditu-dibiao iconfont"></text>
<text>距离{{isUnde(list.distance)}}km</text>
@ -42,11 +28,6 @@
<text class="icon-daohang1 iconfont" style="margin-right: 0;"></text>
</view>
</view>
<!-- <view class="colortext activityBox-row" v-if="list.status==1">
{{list.rate_name}} (已报名{{list.orders_total}})
</view> -->
</view>
</view>
<view class="infoBox" style="padding-bottom:0;margin-bottom: 26rpx;">
@ -67,14 +48,17 @@
活动时间{{item.time}}
</text>
</view>
<view style="padding-left:50rpx;margin-bottom:10rpx">
<text style="margin-right:20rpx">
限制人数{{item.total==0?'不限':item.total}}
</text>
<text>
已报人数{{item.has_total}}
</text>
<view style="padding-left:50rpx;margin-bottom:10rpx">
<text v-if="list.form!=2">
限制人数{{item.total==0?'不限':item.total}}
</text>
<text v-else>
{{item.has_total>0?"预约已满":""}}
</text>
<text style="margin-left:20rpx">
已报名数{{item.has_total}}
</text>
</view>
<view class="book-box-row-timeitem-status" v-if="item.checked">
<u-icon name="checkmark" color="#fff" size="20rpx"></u-icon>
@ -89,11 +73,9 @@
</view>
<view class="infoBox-content">
<u-parse v-if='showContent' :content="list.content?list.content:' '"/>
<!-- <rich-text style="text-indent: 2em;font-size: 28rpx;" :nodes="list.content"></rich-text> -->
</view>
</view>
</view>
<!-- <view class="infofooter" v-if="list.isCanBook&&list.total!=list.orders_total"> -->
<view class="infofooter" v-if="list.orders_total==0||(list.orders_total>0&&list.total!=list.orders_total)&&isCanBook">
<u-popup :show="showNumbers" mode="bottom" @close="closeNum" :round="10" closeable>
<view class="mpopup">
@ -111,7 +93,7 @@
</view>
</view>
</u-popup>
<view class="flex-row" v-if="list.status==1&&isCanBook">
<view class="flex-row" v-if="list.status==1">
<view style="margin-right: 14rpx;flex: 1;" v-if="list.join_type==1||list.join_type==0">
<u-button type="primary" @click="tobook('team')"></u-button>
</view>
@ -167,7 +149,7 @@
onShareAppMessage() {
return {
title: this.list.name,
path: "/pages/activity/info?id=" + this.list.id,
path: "/packages/activity/info?id=" + this.list.id,
imageUrl: this.list.cover_upload.url
}
},
@ -192,14 +174,7 @@
this.util.alert("您选择的场次不可预约!");
// this.isCanBook = false
return;
};
// var nt = new Date();
// this.isCanBook = this.$moment(nt).isBefore(item.end_plan);
// console.log("this.isCanBook",this.isCanBook)
// if(!this.isCanBook){
// this.util.alert("");
// return;
// }
};
var _numbers = this.numbers;
for (var mod of _numbers) {
mod.checked = false;
@ -257,6 +232,9 @@
if (m.has_total == m.total && m.total != 0) {
m.disabled = true
}
if(res.form==2&&parseInt(m.has_total)>0){
m.disabled = true
}
numberArr.push(m);
if (!m.disabled) {
@ -266,7 +244,6 @@
i++;
}
}
//console.log("numberArr[0].id", numberArr[0].id);
if (chkMod){
that.activity_number_id = chkMod.id
that.isCanBook = true

@ -0,0 +1,225 @@
<template>
<view class="container">
<view class="nav">
<view v-for="(item,index) in list" @click="towhere(index)">
<view class="imgs">
<img :src="item.icon" alt="" v-if="!item.show" :style="{'width':item.width,'height':item.height}">
<img :src="item.icon1" alt="" v-else :style="{'width':item.width,'height':item.height}">
</view>
<view :class="item.show?'textscur':'texts'">{{item.text}}</view>
</view>
</view>
<view class="bg">
<movable-area class="bg">
<movable-view class="bg" scale out-of-bounds direction="all">
<img :src="bg" alt="" class="bgs">
<view v-for="(item,index) in curlist">
<block v-for="(m,i) in item">
<uni-transition duration="1500" ref="ani" custom-class="transition"
:show="index === currentIndex">
<img :src="m.icon" alt="" :style="{'top':m.top,'left':m.left,'right':m.right}" class="curs">
</uni-transition>
<!-- <u-transition :show="true" mode="fade" duration='1000'>
<img :src="dl_cur" alt="" :style="{'top':m.top,'left':m.left,'right':m.right}" class="curs">
</u-transition> -->
</block>
</view>
</movable-view>
</movable-area>
</view>
</view>
</template>
<script>
export default {
data() {
return {
bg: require("./static/dl/dlbg.png"),
// dl_cur: require("./static/dl/dl_cur.png"),
currentIndex: '',
isshow:true,
curlist: [
[{
'top': '192rpx',
'left': '16rpx',
'right': '',
'icon': require("./static/dl/dl_cur1.png")
}, {
'top': '154rpx',
'right': '7rpx',
'left': '',
'icon': require("./static/dl/dl_cur2.png")
}, {
'top': '234rpx',
'right': '7rpx',
'left': '',
'icon': require("./static/dl/dl_cur4.png")
}],
[{
'top': '200rpx',
'right': '46rpx',
'left': '',
'icon': require("./static/dl/dl_cur3.png")
}],
[{
'top': '334rpx',
'left': '',
'right': '241rpx',
'icon': require("./static/dl/dl_cur5.png")
}],
[{
'top': '334rpx',
'left': '249rpx',
'right': '',
'icon': require("./static/dl/dl_cur6.png")
}],
],
list: [{
text: '卫生间',
icon: require("./static/dl/dl1.png"),
icon1: require("./static/dl/dl1_cur.png"),
show: false,
width: '50rpx',
height: '50rpx'
},
// {
// text: '',
// icon: require("./static/dl/dl2.png"),
// icon1: require("./static/dl/dl2_cur.png"),
// show: false,
// width: '44rpx',
// height: '44rpx'
// },
{
text: '电梯',
icon: require("./static/dl/dl3.png"),
icon1: require("./static/dl/dl3_cur.png"),
show: false,
width: '64rpx',
height: '64rpx'
},
// {
// text: '',
// icon: require("./static/dl/dl4.png"),
// icon1: require("./static/dl/dl4_cur.png"),
// show: false,
// width: '38rpx',
// height: '46rpx'
// },
{
text: '服务台',
icon: require("./static/dl/dl5.png"),
icon1: require("./static/dl/dl5_cur.png"),
show: false,
width: '50rpx',
height: '50rpx'
}, {
text: '休息区',
icon: require("./static/dl/dl6.png"),
icon1: require("./static/dl/dl6_cur.png"),
show: false,
width: '64rpx',
height: '64rpx'
},
// {
// text: '',
// icon: require("./static/dl/dl7.png"),
// icon1: require("./static/dl/dl7_cur.png"),
// show: false,
// width: '38rpx',
// height: '38rpx'
// },
]
}
},
methods: {
towhere(index) {
this.list.map((item, i) => {
item.show = false
if (index == i) {
item.show = !item.show
this.currentIndex = item.show ? index : ''
// this.ishow = true
}
})
}
}
}
</script>
<style scoped>
.container {
background-color: #f5ede6;
min-height: 100vh;
padding-top: 30rpx;
}
.nav {
background-color: #fff;
display: flex;
justify-content: space-around;
/* border:1px solid #ddd; */
box-shadow: 0px 0px 10rpx 0px rgba(0, 0, 0, 0.5);
margin: 0 20rpx;
padding: 30rpx 15rpx;
margin-bottom: 80rpx;
border-radius: 10rpx;
z-index:9999;
position: relative;
}
.nav>view {
text-align: center;
}
.nav>view .imgs {
height: 64rpx;
}
.nav>view img {
vertical-align: middle;
display: inline-block;
}
.nav>view .texts {
color: #333;
font-size: 24rpx;
}
.nav>view .textscur {
color: #cf995a;
font-size: 24rpx;
}
.bg {
width: 100%;
height: 711rpx;
position: relative;
}
.bg img.bgs {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
.bg img.curs {
width: 132rpx;
height: 170rpx;
position: absolute;
z-index: 999;
opacity:0.9;
/* top:0;
left:0;
right:0 */
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

@ -9,7 +9,7 @@
<block v-for="(item,index) in listOrder" :key="index">
<view class="orderBox" :class="{'cancelBox':item.status==0}" @click="toinfo(item.id)">
<view class="orderBoxTitle flex-row">
<text class="orderBoxTitleTxt">{{item.type==1?"团队预约":"个人预约"}}</text>
<text class="orderBoxTitleTxt">{{item.type==1?"团队信息":"个人信息"}}</text>
<view :class="item.status!=1?'cancelStatus orderBoxStatus':'orderBoxStatus'">
{{item.status_name}}
</view>
@ -91,7 +91,7 @@
},
toinfo(id) {
uni.navigateTo({
url: "/pages/order/activityorderinfo?id=" + id
url: "/packages/order/activityorderinfo?id=" + id
})
},
tocancel(id) {

@ -3,7 +3,7 @@
<view class="orderBoxList">
<view class="orderBox">
<view class="orderBoxTitle flex-row">
<text class="orderBoxTitleTxt">{{info.type==1?"团队预约信息":"个人预约信息"}}</text>
<text class="orderBoxTitleTxt">{{info.type==1?"团队信息":"个人信息"}}</text>
</view>
<view class="orderBoxInfo flex-col">

@ -81,7 +81,7 @@
},
toinfo(id) {
uni.navigateTo({
url: "/pages/order/parkorderinfo?id=" + id
url: "/packages/order/parkorderinfo?id=" + id
})
},
tocancel(id) {

@ -9,7 +9,7 @@
<block v-for="(item,index) in listOrder" :key="index">
<view class="orderBox" :class="{'cancelBox':item.status==0}" @click="toinfo(item.id)">
<view class="orderBoxTitle flex-row">
<text class="orderBoxTitleTxt">{{item.type==1?"团队预约":"个人预约"}}</text>
<text class="orderBoxTitleTxt">{{item.type==1?"团队信息":"个人信息"}}</text>
<view :class="item.status!=1?'orderBoxStatus cancelStatus':'orderBoxStatus'">{{item.status_name}}
</view>
</view>
@ -19,7 +19,7 @@
<!-- <text class="iconfont icon-youkexuzhi"></text> -->
<!-- <text class="orderBoxInfoRowTxt">
订单信息{{timeFormat(item.date, 'MM月DD日')}}{{item.time}}{{item.details_count}} 位观众</text> -->
<text class="orderBoxInfoRowTxt">预约时间{{timeFormat(item.date, 'MM月DD日')}}{{item.time?item.time:''}}</text>
<text class="orderBoxInfoRowTxt">参观时间{{timeFormat(item.date, 'MM月DD日')}}{{item.time?item.time:''}}</text>
</view>
<view class="orderBoxInfoRow flex-row" style="margin-top: 20rpx;">
<text class="orderBoxInfoRowTxt">入馆人数{{item.total}} 位观众</text>
@ -39,7 +39,7 @@
<view class="orderBoxFooter flex-row flex_end">
<view class="fbtn cancel" v-if="item.status==1" style="margin-right: 23rpx;"
@click.stop="tocancel(item.id)">取消预约</view>
@click.stop="tocancel(item.id)">取消参观</view>
<view class="fbtn" :class="{'cancel':item.status!=1}" @click.stop="toinfo(item.id)">查看详情</view>
</view>
</view>
@ -87,13 +87,13 @@
},
toinfo(id) {
uni.navigateTo({
url: "/pages/order/visitorderinfo?id=" + id
url: "/packages/order/visitorderinfo?id=" + id
})
},
tocancel(id) {
var that = this;
uni.showModal({
title: '确认要取消预约',
title: '确认要取消参观',
success: function(res) {
if (res.confirm) {
that.util.request({

@ -231,7 +231,6 @@
api: '/api/mobile/visit/introduce',
utilSuccess: function(res) {
that.vinfo = res;
},
utilFail: function(res) {

@ -369,7 +369,7 @@
}, 1000)
that.timer = setTimeout(function() {
uni.redirectTo({
url: '/pages/order/parkorder'
url: '/packages/order/parkorder'
})
clearInterval(that.t);
clearTimeout(that.timer)

@ -95,7 +95,7 @@
</view>
<view class="activityBox-row" style="margin-top: 20rpx;color: #cf995a;"
@click="showSelectorder=true">
@click="showSelectorder=false">
<text>选择信息{{selectInfo.info||"暂未选择"}}</text>
</view>
</view>
@ -175,7 +175,7 @@
id: 1
}],
currentPark: 0,
btnDisabled: false,
btnDisabled: true,
showSelectorder: false,
listOrder: [],
listActivtyOrder: [],
@ -223,11 +223,11 @@
that.loadOrder(function(res) {
that.loadactivityOrder(function(r) {
if (res.length + r.length == 0) {
that.util.toast("您需要“参观预约”或“活动预约”成功后才能进行停车位预约。");
// that.util.toast("");
that.btnDisabled = true;
} else {
that.btnDisabled = false;
that.showSelectorder = true;
that.btnDisabled = true;
that.showSelectorder = false;
}
})
});

@ -35,16 +35,9 @@
"navigationBarBackgroundColor": "#fff"
}
},{
"path": "pages/relic/list",
"path": "pages/exhibit/bookdetail",
"style": {
"navigationBarTitleText": "文物",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#fff"
}
},{
"path": "pages/relic/detail",
"style": {
"navigationBarTitleText": "文物",
"navigationBarTitleText": "党史书籍",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#fff"
}
@ -62,7 +55,7 @@
"enablePullDownRefresh": false
}
}, {
},{
"path": "pages/guide/index",
"style": {
"navigationBarTitleText": "服务",
@ -79,175 +72,138 @@
"enablePullDownRefresh": false
}
}, {
"path": "pages/map/map",
"style": {
"navigationBarTitleText": "展馆导航",
"enablePullDownRefresh": false
}
}, {
"path": "pages/visit/index",
"style": {
"navigationBarTitleText": "参观预约",
"enablePullDownRefresh": false
}
}, {
"path": "pages/activity/index",
"style": {
"navigationBarTitleText": "活动列表",
"navigationBarTitleText": "参观信息",
"enablePullDownRefresh": false
}
}, {
"path": "pages/visit/book",
"style": {
"navigationBarTitleText": "个人预约",
"navigationBarTitleText": "个人信息",
"enablePullDownRefresh": false
}
}, {
"path": "pages/visit/teambook",
"style": {
"navigationBarTitleText": "团体预约",
"navigationBarTitleText": "团队信息",
"enablePullDownRefresh": false
}
}, {
"path": "pages/activity/info",
"path": "pages/success/success",
"style": {
"navigationBarTitleText": "活动详情",
"navigationBarTitleText": "填报成功",
"enablePullDownRefresh": false
}
}, {
"path": "pages/activity/book",
"path": "pages/mine/recommend",
"style": {
"navigationBarTitleText": "活动预约",
"navigationBarTitleText": "分享预约小程序",
"enablePullDownRefresh": false
}
}
],
"subPackages":[{
"root": "packages",
"pages":[{
"path": "dl/index",
"style": {
"navigationBarTitleText": "展厅导览",
"enablePullDownRefresh": false,
"navigationBarBackgroundColor": "#fff"
}
}, {
"path": "pages/order/visitorder",
"path": "map/map",
"style": {
"navigationBarTitleText": "参观预约订单",
"navigationBarTitleText": "展馆导航",
"enablePullDownRefresh": false
}
}, {
"path": "pages/order/parkorder",
"path": "activity/index",
"style": {
"navigationBarTitleText": "车位预约",
"navigationBarTitleText": "活动列表",
"enablePullDownRefresh": false
}
}, {
"path": "pages/park/index",
},{
"path": "activity/info",
"style": {
"navigationBarTitleText": "停车场预约",
"navigationBarTitleText": "活动详情",
"enablePullDownRefresh": false
}
}, {
"path": "pages/order/visitorderinfo",
"path": "activity/book",
"style": {
"navigationBarTitleText": "参观预约详情",
"navigationBarTitleText": "活动预约",
"enablePullDownRefresh": false
}
}, {
"path": "pages/park/book",
"path": "park/index",
"style": {
"navigationBarTitleText": "停车场预约",
"enablePullDownRefresh": false
}
}, {
"path": "pages/success/success",
"style": {
"navigationBarTitleText": "预约成功",
"enablePullDownRefresh": false
}
}, {
"path": "pages/order/parkorderinfo",
"path": "park/book",
"style": {
"navigationBarTitleText": "停车场预约",
"enablePullDownRefresh": false
}
}, {
"path": "pages/order/activityorder",
"style": {
"navigationBarTitleText": "活动预约",
"enablePullDownRefresh": false
}
}, {
"path": "pages/order/activityorderinfo",
"style": {
"navigationBarTitleText": "活动预约详情",
"enablePullDownRefresh": false
}
}, {
"path": "pages/guide/list",
"style": {
"navigationBarTitleText": "参观指南",
"enablePullDownRefresh": false
}
}, {
"path": "pages/guide/info",
"style": {
"navigationBarTitleText": "参观指南",
"enablePullDownRefresh": false
}
}, {
"path": "pages/mine/recommend",
},{
"path": "order/visitorder",
"style": {
"navigationBarTitleText": "分享预约小程序",
"navigationBarTitleText": "参观订单",
"enablePullDownRefresh": false
}
}, {
"path": "pages/guide/feedback",
"path": "order/parkorder",
"style": {
"navigationBarTitleText": "投诉建议",
"navigationBarTitleText": "车位预约",
"enablePullDownRefresh": false
}
}, {
"path": "pages/guide/contact",
"path": "order/visitorderinfo",
"style": {
"navigationBarTitleText": "联系我们",
"navigationBarTitleText": "参观信息详情",
"enablePullDownRefresh": false
}
}, {
"path": "pages/order/shareQR",
"path": "order/parkorderinfo",
"style": {
"navigationBarTitleText": "分享二维码",
"navigationBarTitleText": "停车场预约",
"enablePullDownRefresh": false
}
}, {
"path": "pages/vr/vrpagegm",
"path": "order/activityorder",
"style": {
"navigationBarTitleText": "",
"navigationBarTitleText": "活动预约",
"enablePullDownRefresh": false
}
}, {
"path": "pages/guide/feedbackinfo",
"path": "order/activityorderinfo",
"style": {
"navigationBarTitleText": "意见建议详情",
"navigationBarTitleText": "活动预约详情",
"enablePullDownRefresh": false
}
}
}]
}
],
"globalStyle": {
"navigationBarTextStyle": "black",

@ -0,0 +1,115 @@
<template>
<view class="content">
<view class='contop'>
<image :src='info.image.url' mode="widthFix"></image>
</view>
<!-- <view class='detail'>
<view class='title'>{{info.name?info.name:''}}</view>
<u-parse v-if='showContent' :content="info.content?info.content:' '" />
</view> -->
</view>
</template>
<script>
import uParse from '@/components/gaoyia-parse/parse.vue'
export default {
components: {
uParse,
},
data() {
return {
info: {},
id: '',
showContent: false,
}
},
onLoad(options) {
this.id = options.id ? options.id : ''
this.loadDetail()
},
methods: {
cancelTime(val) {
return val.substring(0, 10)
},
loadDetail() {
var that = this;
this.util.request({
api: '/api/mobile/book/show',
data: {
id: that.id
},
utilSuccess: function(res) {
that.info = res
that.showContent = true
},
utilFail: function(res) {
}
})
}
}
}
</script>
<style>
@import url("/components/gaoyia-parse/parse.css");
.content {
background-color: #fbf8f4;
min-height: 100vh;
height: 100vh;
/* padding-bottom:180rpx */
}
.contop {
/* padding: 80rpx 0;
height: 648rpx; */
font-size: 0;
width: 100%;
height: 100%;
box-sizing: border-box;
background-color: #393c40;
display: flex;
justify-content: space-around;
align-items: center;
/* height: calc(100vh - 240rpx) */
}
.contop image {
/* width: 368rpx;
height: 488rpx; */
width: 100%;
margin: 0rpx auto;
display: block;
transform: scale(1.2);
}
.title {
text-align: left;
/* padding: 30rpx 0rpx; */
font-size: 36rpx;
font-weight: bold;
/* position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); */
width: 90%;
line-height: 1.5;
/* padding: 30rpx; */
}
.detail {
background: linear-gradient(to bottom, #fff 30%, #fbf8f4 70%);
/* min-height: calc(100vh - 648rpx); */
/* height: 240rpx; */
/* height:calc(100vh - 648rpx); */
border-radius: 30rpx 30rpx 0 0;
/* overflow: scroll; */
padding: 30rpx;
position: relative;
}
.wxParse {
line-height: 2.3;
}
</style>

@ -1,9 +1,9 @@
<template>
<view>
<view class="wrap">
<view>
<img class="exhibit_bg" src="../../static/img/exhibitBg.png" alt="">
<img class="exhibit_bg" :src="bgimg" alt="">
</view>
<view class='content'>
<view class='content' :style="{'padding-top':padTop+'px'}">
<view class="exhibit" @click='toExhibitList'>
<view>
<view>
@ -21,27 +21,75 @@
<view>时间{{item.dateRange}}</view>
</view>
</view>
</view>
<view class="exhibit relic" @click='torelic'>
<view>
<view>
<span></span>
<span>文物</span>
</view>
<u-icon name="arrow-right"></u-icon>
</view>
</view>
<view class="relic_list">
<view v-for="item in relicList" class="relic_item" @click='toRelicDetail(item.id)'>
<img :src="item.head_upload.url" alt="">
<view>
<view>{{item.name}}</view>
<view>{{item.contain}}</view>
</view>
</view>
</view>
</view>
<view class="relic">
<view :class="!showBook?'relic_active':''" @click="changeBook"></view>
<view :class="showBook?'relic_active':''" @click="changeBook('book')"></view>
</view>
<view class="books" v-if="showBook">
<image class="books_img" src="../../static/book/book_bottom.png" mode=""></image>
<u-swiper @click="toBook" :list="bookList" :displayMultipleItems="displayMultipleItems" :circular="true"
:indicator="true" indicatorStyle="bottom" indicatorMode="dot" bgColor="transparent"
indicatorActiveColor="#9f4946" indicatorInactiveColor="#9f4946" :autoplay="false"
radius="0"></u-swiper>
<!-- <swiper class="swiper" circular
next-margin="180rpx">
<swiper-item v-for="(item,index) in bookList" @click="toBook(item.id)">
<view class="myswiper-item-img">
<image
:src="item.url?item.url:''" alt="" mode="heightFix">
</view>
</swiper-item>
</swiper> -->
</view>
<view class="relics" v-else>
<view class="myswiper">
<swiper class="swiper" @change="changeRelic" :current="relicIndex" circular previous-margin="180rpx"
next-margin="180rpx">
<swiper-item v-for="(item,index) in relicList" @click="toRelicDetail(item.id)">
<view class="myswiper-item-img">
<image :style="{'transform':relicIndex===index?'scale(1.05)':''}"
:src="item.head_upload?item.head_upload.url:item.threed.url" alt="" mode="widthFix">
</view>
</swiper-item>
</swiper>
<view class="myswiper-item-title">
<view class="">
{{relicList[relicIndex].name?relicList[relicIndex].name:''}}
</view>
<!-- <view class="">
革命博物馆典藏
</view> -->
</view>
<!-- <view class="myswiper-item" v-for="(item,index) in relicList">
<view class="myswiper-item-img">
<image :src="item.head_upload.url" alt="">
</view>
<view class="myswiper-item-title">
<view class="">
{{item.name}}
</view>
<view class="">
革命博物馆典藏
</view>
</view>
</view> -->
</view>
</view>
<!-- <view class="relic_list">
<view v-for="item in relicList" class="relic_item" @click='toRelicDetail(item.id)'>
<img :src="item.head_upload.url" alt="">
<view>
<view>{{item.name}}</view>
<view>{{item.contain}}</view>
</view>
</view>
</view> -->
</view>
@ -57,102 +105,180 @@
},
data() {
return {
exhibitList: [],
relicList:[]
exhibitList: [],
bookList: [],
relicList: [],
bgimg: '../../static/book/relic_bg.png',
padTop: 0,
showBook: false,
relicIndex: 0,
displayMultipleItems: 0,
authToken: ''
}
},
onLoad() {
this.getExhibit()
this.getRelic()
},
methods:{
cancelTime(str){
return str?str.substring(0,10):''
},
toExhibitList(){
uni.navigateTo({
url: "/pages/exhibit/list"
});
},
todetail(id){
uni.navigateTo({
url: "/pages/exhibit/detail?id="+id
});
},
toRelicDetail(id){
uni.navigateTo({
url: "/pages/relic/detail?id="+id
});
},
torelic(){
uni.navigateTo({
url: "/pages/relic/list"
});
},
getExhibit(){
var that = this;
this.util.request({
api: '/api/mobile/exhibit-hall/index',
data:{
page:1,
page_size:6,
state:1,
sort_name:'state',
sort_name_tow:'release_time',
sort_type:"DESC",
sort_type_tow:'DESC'
},
utilSuccess: function(res) {
that.exhibitList = res.data
for(var m of res.data){
m.dateRange = that.util.splitTime(m.start_time,m.over_time)
}
},
utilFail: function(res) {
}
})
},
getRelic(){
var that = this;
this.util.request({
api: '/api/mobile/cultural-relic/index',
data:{
page:1,
page_size:5,
sort_name:'release_time',
sort_type:"DESC",
},
utilSuccess: function(res) {
that.relicList = res.data
},
utilFail: function(res) {
}
})
},
onLoad() {
const MenuButton = uni.getMenuButtonBoundingClientRect()
this.padTop = MenuButton.top + MenuButton.height + 10
this.authToken = uni.getStorageSync('userInfo_token').token
this.getExhibit()
this.getRelic()
this.getBooks()
},
methods: {
cancelTime(str) {
return str ? str.substring(0, 10) : ''
},
toExhibitList() {
uni.navigateTo({
url: "/pages/exhibit/list"
});
},
todetail(id) {
uni.navigateTo({
url: "/pages/exhibit/detail?id=" + id
});
},
changeBook(e) {
if (e === 'book') {
this.showBook = true
this.bgimg = '../../static/book/book_bg.png'
} else {
this.showBook = false
this.bgimg = '../../static/book/relic_bg.png'
}
},
toRelicDetail(id) {
let that = this
let url = `${that.util.HOST}/fbx/wxdetail.html?id=${id}`
let newurl = encodeURIComponent(url)
uni.navigateTo({
url: '/pages/vr/vrpage?link=' + newurl
})
},
toBook(index) {
let id = this.bookList[index].id
uni.navigateTo({
url: '/pages/exhibit/bookdetail?id=' + id
})
},
torelic() {
uni.navigateTo({
url: "/pages/relic/list"
});
},
getExhibit() {
var that = this;
this.util.request({
api: '/api/mobile/exhibit-hall/index',
data: {
page: 1,
page_size: 6,
state: 1,
sort_name: 'state',
sort_name_tow: 'release_time',
sort_type: "DESC",
sort_type_tow: 'DESC'
},
utilSuccess: function(res) {
that.exhibitList = res.data
for (var m of res.data) {
m.dateRange = that.util.splitTime(m.start_time, m.over_time)
}
},
utilFail: function(res) {
}
})
},
changeRelic(e) {
console.log(e)
this.relicIndex = e.detail.current
},
getRelic() {
var that = this;
this.util.request({
api: '/api/mobile/cultural-relic/index',
data: {
page: 1,
page_size: 99,
sort_name: 'release_time',
sort_type: "DESC",
},
utilSuccess: function(res) {
that.relicList = res.data.filter(item => {
return item.show_list === 1
})
},
utilFail: function(res) {
}
})
},
getBooks() {
var that = this;
this.util.request({
api: '/api/mobile/book/index',
data: {
page: 1,
page_size: 99,
sort_name:"datetime",
sort_type:'ASC'
},
utilSuccess: function(res) {
let arr = []
res.data.map(item => {
arr.push({
url: item.image.url,
id: item.id,
title: item.name
})
})
that.bookList = arr
that.displayMultipleItems = 2
},
utilFail: function(res) {
}
})
},
}
}
</script>
<style>
.wrap {
width: 100vw;
height: 100vh;
}
.box-top {
width: 100%;
}
.exhibit_bg {
width: 100%;
height: 627rpx;
width: 100vw;
height: 100vh;
position: absolute;
top: 0;
left: 0
}
.content {
margin-top: -450rpx;
padding-bottom:140rpx
/* margin-top: -450rpx; */
padding-bottom: 140rpx;
position: absolute;
top: 0;
left: 0;
z-index: 9;
width: 100%;
height: 100vh;
overflow: scroll;
}
.exhibit {
color: #fff;
padding: 0 30rpx;
color: #333;
padding: 0 30rpx;
font-size: 36rpx;
}
@ -162,7 +288,7 @@
}
.exhibit>view:first-child span:first-child {
background-color: #fff;
background-color: #ebb966;
width: 5rpx;
height: 50rpx;
margin-right: 22rpx;
@ -183,7 +309,7 @@
width: 520rpx;
border-radius: 20rpx;
background-color: #fff;
box-shadow: 0rpx 0rpx 25rpx 0rpx rgba(33,22,19,0.1);
box-shadow: 0rpx 0rpx 25rpx 0rpx rgba(33, 22, 19, 0.1);
margin-right: 30rpx;
font-size: 0;
}
@ -218,57 +344,197 @@
color: #6E6E6E;
font-size: 28rpx;
margin-top: 20rpx
}
.relic{
color:black;
}
.relic>view:first-child span:first-child {
background-color: #DEA166;
}
.relic_list{
}
.relic_item{
margin:35rpx 30rpx;
border-radius: 20rpx;
display: flex;
justify-content: space-between;
background: linear-gradient(to bottom, #cf995a, #d8b487);
}
.relic_item img{
width:380rpx;
height:270rpx;
border-radius: 20rpx 0 0 20rpx;
}
.relic_item>view{
display: inline-block;
width:300rpx;
padding:24rpx;
color:#fff;
padding-bottom: 10rpx;
}
.relic_item>view view:first-child{
width: 100%;
/* height:100rpx; */
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/* 这里是超出几行省略 */
overflow: hidden;
}
.relic_item>view view:last-child{
width: 100%;
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
/* 这里是超出几行省略 */
overflow: hidden;
font-size: 28rpx;
margin-top:20rpx;
}
.relic {
display: flex;
padding: 30rpx;
}
.relic>view {
color: black;
text-align: center;
width: 227rpx;
height: 54rpx;
line-height: 53rpx;
font-size: 32rpx;
border: 1px solid #fff;
border-radius: 27rpx;
margin-right: 10rpx;
color: #333;
}
.relic .relic_active {
background: url(../../static/book/current.png) no-repeat left top;
background-size: 100% 100%;
border: 1px solid transparent;
color: #fff;
}
.books {
/* padding-left: 40rpx; */
position: relative;
margin-top: -20rpx;
}
.books_img {
height: 473rpx;
width: 100%;
position: absolute;
top: 28rpx;
left: 0;
}
.books .u-swiper {
/* margin-left: -33rpx; */
height: 530rpx !important;
}
.books .u-swiper__wrapper {
height: 550rpx !important;
}
/deep/ .u-swiper__wrapper__item__wrapper {
margin: 0 -50rpx;
}
.books .u-swiper__wrapper__item__wrapper::before {
content: "";
content: "";
position: absolute;
left: 22%;
bottom: 115rpx;
width: 30rpx;
height: 40rpx;
z-index: -1;
background-color: transparent;
/* margin: 50px; */
box-shadow: 30rpx 10rpx 20rpx rgba(0, 0, 0, 0.3);
transform: translateY(4px) translateX(24rpx) scale(1, 0.9) translateZ(19px) rotate(132deg);
transform-style: preserve-3d;
perspective: 2000rpx;
/* background: hsl(48, 100%, 20%);
transform: translate(0, -15%) rotate(-4deg);
transform-origin: center center;
box-shadow: 0 0 20px 15px hsl(48, 100%, 20%); */
}
.books swiper-item {
/* width: 40% !important; */
height: 473rpx !important;
width: 85% !important;
}
.books .u-swiper__wrapper__item__wrapper__image {
margin-right: 20rpx;
height: 424rpx !important;
}
.books .u-swiper__indicator {
bottom: 40rpx !important
}
.books .u-swiper-indicator__wrapper__dot--active.data-v-647f6c67 {
width: 5px !important;
transform: scale(1.5);
}
.relic_list {}
.relic_item {
margin: 35rpx 30rpx;
border-radius: 20rpx;
display: flex;
justify-content: space-between;
background: linear-gradient(to bottom, #cf995a, #d8b487);
}
.relic_item img {
width: 380rpx;
height: 270rpx;
border-radius: 20rpx 0 0 20rpx;
}
.relic_item>view {
display: inline-block;
width: 300rpx;
padding: 24rpx;
color: #fff;
padding-bottom: 10rpx;
}
.relic_item>view view:first-child {
width: 100%;
/* height:100rpx; */
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/* 这里是超出几行省略 */
overflow: hidden;
}
.relic_item>view view:last-child {
width: 100%;
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
/* 这里是超出几行省略 */
overflow: hidden;
font-size: 28rpx;
margin-top: 20rpx;
}
.myswiper {
width: 100vw;
margin: 40rpx 0 70rpx 0;
}
.myswiper .myswiper-item {
display: inline-block;
}
.myswiper swiper {
height: 400rpx;
min-height: 400rpx;
/* margin-bottom: 40rpx; */
}
.myswiper swiper-item {
text-align: center;
}
.myswiper-item-img {
/* width:501rpx;
height:207rpx; */
}
.myswiper-item-img image {
/* height: 400rpx; */
width: calc(100vw - 370rpx);
transform: scale(.7);
margin-bottom: 40rpx;
max-height: 400rpx;
transform: translate(0px, -42px) scale(.7);
}
.myswiper-item-title {
color: #e4e9f0;
text-align: center;
font-size: 28rpx;
}
.myswiper-item-title>view:first-child {
font-size: 36rpx;
margin-bottom: 10rpx;
}
</style>

@ -1,96 +0,0 @@
<template>
<view class="box">
<view class="bgtop">
<image src="../../static/img/nav_top.png" style="width: 100%;height: 100%;"></image>
</view>
<view class="bgcenter">
<view class="box-content">
<scroll-view :scroll-y="true" :style="{height:height+'px'}">
<rich-text :nodes="info.value"></rich-text>
</scroll-view>
</view>
</view>
<view class="bgbottom">
<image src="../../static/img/nav_bottom.png" style="width: 100%;height: 100%;"></image>
</view>
</view>
</template>
<script>
export default {
data() {
return {
height: 0,
info: {},
}
},
onLoad() {
let that = this;
uni.getSystemInfo({
success: function(res) {
that.height = res.windowHeight - 80;
}
});
this.loadConfigInfo();
},
methods: {
loadConfigInfo() {
var that = this;
this.util.request({
api: '/api/mobile/other/config-show',
data: {
tag: "about"
},
utilSuccess: function(res) {
res.value=res.value.replace(/\<img/g,"<img style='width:100%;height:auto;display:block'")
that.info = res;
},
utilFail: function(res) {
uni.showToast({
icon: "none",
title: res,
duration: 2000
})
}
})
},
}
}
</script>
<style>
.box {
padding: 20rpx;
box-sizing: border-box;
}
.bgtop {
height: 40rpx;
}
.bgcenter {
background: url("../../static/img/nav_middle.png") repeat-y;
background-size: 100% 100%;
}
.box-content {
padding: 15rpx 20rpx;
color: #351C1B;
box-sizing: border-box;
}
.title {}
.time {
font-size: 24rpx;
}
.bgbottom {
height: 40rpx;
}
</style>

@ -1,139 +0,0 @@
<template>
<view class="box">
<view class="bgtop">
<image src="../../static/img/nav_top.png" style="width: 100%;height: 100%;"></image>
</view>
<view class="bgcenter" :style="{height:height+'px'}">
<view class="box-content">
<u--form labelPosition="top" :model="form">
<u-form-item label="手机号" prop="mobile" labelWidth="60px" required>
<u-input v-model="form.mobile" placeholder="请输入手机号"></u-input>
</u-form-item>
<u-form-item label="内容" prop="content" labelWidth="60px" required>
<u--textarea v-model="form.content" placeholder="请输入内容"></u--textarea>
</u-form-item>
</u--form>
<u-button type="primary" @click="tosubmit"></u-button>
</view>
</view>
<view class="bgbottom">
<image src="../../static/img/nav_bottom.png" style="width: 100%;height: 100%;"></image>
</view>
</view>
</template>
<script>
export default {
data() {
return {
height: 0,
form: {
mobile: "",
content: ""
}
}
},
onLoad() {
let that = this;
uni.getSystemInfo({
success: function(res) {
that.height = res.windowHeight - 60;
}
});
},
methods: {
tosubmit() {
let that = this;
if (this.util.isNull(that.form.mobile)) {
this.util.toast("请填写手机号!");
return false;
} else {
if (!uni.$u.test.mobile(that.form.mobile)) {
this.util.toast("请填写正确的手机号!");
return false;
}
}
if (this.util.isNull(that.form.content)) {
this.util.toast("请填写内容!");
return false;
}
this.util.request({
api: '/api/mobile/other/tip-store',
data: this.form,
method: "POST",
utilSuccess: function(res) {
console.log(res)
that.newsSubscription();
},
utilFail: function(res) {
that.util.toast(res);
}
})
},
newsSubscription() {
uni.getSetting({
withSubscriptions: true, //false
success(res) {
if (res.authSetting['scope.subscribeMessage']) {
uni.redirectTo({
url: '/pages/success/success?from=feed'
})
} else {
//
uni.requestSubscribeMessage({
tmplIds: ['gPP22-SXuJmK9ffJZTNOSdq56Q2RmD2Qdg8ntteAO-Y'],
success(res) {
uni.showToast({
title: '订阅成功'
})
uni.redirectTo({
url: '/pages/success/success?from=feed'
})
}
})
}
}
});
},
}
}
</script>
<style>
.box {
padding: 20rpx;
box-sizing: border-box;
}
.u-input {
background-color: #fff;
}
.bgtop {
height: 40rpx;
}
.bgcenter {
background: url("../../static/img/nav_middle.png") repeat-y;
background-size: 100% 100%;
}
.box-content {
padding: 15rpx 40rpx;
color: #351C1B;
box-sizing: border-box;
}
.title {}
.time {
font-size: 24rpx;
}
.bgbottom {
height: 40rpx;
}
</style>

@ -1,105 +0,0 @@
<template>
<view class="box">
<view class="bgtop">
<image src="../../static/img/nav_top.png" style="width: 100%;height: 100%;"></image>
</view>
<view class="bgcenter" :style="{height:height+'px'}">
<view class="box-content">
反馈时间{{info.created_at||""}}
</view>
<view class="box-content" style="margin-top: 10px;">
反馈内容<rich-text :nodes="info.content"></rich-text>
</view>
<view class="box-content" style="margin-top: 40px;">
回复时间{{info.reply_time||""}}
</view>
<view class="box-content" style="margin-top: 10px;">
回复内容<rich-text :nodes="info.reply"></rich-text>
</view>
</view>
<view class="bgbottom">
<image src="../../static/img/nav_bottom.png" style="width: 100%;height: 100%;"></image>
</view>
</view>
</template>
<script>
export default {
data() {
return {
height: 0,
info: {}
}
},
onLoad(options) {
let that = this;
uni.getSystemInfo({
success: function(res) {
that.height = res.windowHeight - 60;
}
});
that.loadInfo(options.id);
},
methods: {
loadInfo(id) {
var that = this;
this.util.request({
api: "/api/mobile/other/tip-show",
data: {
id: id
},
utilSuccess: function(res) {
res.content = res.content.replace(/\<img/g,
"<img style='width:100%;height:auto;display:block'")
that.info = res;
},
utilFail: function(res) {
uni.showToast({
icon: "none",
title: res,
duration: 2000
})
}
})
}
}
}
</script>
<style>
.box {
padding: 20rpx;
box-sizing: border-box;
}
.bgtop {
height: 40rpx;
}
.bgcenter {
background: url("../../static/img/nav_middle.png") repeat-y;
background-size: 100% 100%;
padding: 15rpx 20rpx;
}
.time {
padding: 20rpx 0;
}
.newbox {
padding: 15rpx 20rpx;
color: #351C1B;
box-sizing: border-box;
}
.title {}
.time {
font-size: 24rpx;
}
.bgbottom {
height: 40rpx;
}
</style>

@ -1,109 +0,0 @@
<template>
<view class="box">
<view class="bgtop">
<image src="../../static/img/nav_top.png" style="width: 100%;height: 100%;"></image>
</view>
<view class="bgcenter" :style="{height:height+'px'}">
<view class="box-title">
{{info.name||""}}
</view>
<view class="time">
{{info.created_at||""}}
</view>
<view class="box-content">
<rich-text :nodes="info.content"></rich-text>
</view>
</view>
<view class="bgbottom">
<image src="../../static/img/nav_bottom.png" style="width: 100%;height: 100%;"></image>
</view>
</view>
</template>
<script>
export default {
data() {
return {
height: 0,
urls: {
1: '/api/mobile/other/visit-notice-show',
2: '/api/mobile/other/traffic-notice-show',
4: '/api/mobile/other/ask-show'
},
info: {},
type: 1
}
},
onLoad(options) {
let that = this;
uni.getSystemInfo({
success: function(res) {
that.height = res.windowHeight - 60;
}
});
this.type = options.type;
that.loadInfo(options.id);
},
methods: {
loadInfo(id) {
var that = this;
this.util.request({
api: this.urls[this.type],
data: {
id: id
},
utilSuccess: function(res) {
res.content = res.content.replace(/\<img/g,
"<img style='width:100%;height:auto;display:block'")
that.info = res;
},
utilFail: function(res) {
uni.showToast({
icon: "none",
title: res,
duration: 2000
})
}
})
}
}
}
</script>
<style>
.box {
padding: 20rpx;
box-sizing: border-box;
}
.bgtop {
height: 40rpx;
}
.bgcenter {
background: url("../../static/img/nav_middle.png") repeat-y;
background-size: 100% 100%;
padding: 15rpx 20rpx;
}
.time {
padding: 20rpx 0;
}
.newbox {
padding: 15rpx 20rpx;
color: #351C1B;
box-sizing: border-box;
}
.title {}
.time {
font-size: 24rpx;
}
.bgbottom {
height: 40rpx;
}
</style>

@ -1,111 +0,0 @@
<template>
<view class="box">
<view class="bgtop">
<image src="../../static/img/nav_top.png" style="width: 100%;height: 100%;"></image>
</view>
<view class="bgcenter" :style="{height:height+'px'}">
<view class="listnews">
<view class="newbox justify-between" v-for="(item,index) in list" :key="index" @click="toinfo(item.id)">
<view class="newboxleft flex-row">
<u-icon name="grid" color="#351C1B" size="24"></u-icon>
<text class="title" style="margin-left: 10rpx;">{{item.name}}</text>
</view>
<view class="newboxright">
<text class="time">{{item.created_at}}</text>
</view>
</view>
</view>
</view>
<view class="bgbottom">
<image src="../../static/img/nav_bottom.png" style="width: 100%;height: 100%;"></image>
</view>
</view>
</template>
<script>
export default {
data() {
return {
height: 0,
urls: {
1: '/api/mobile/other/visit-notice-index',
2: '/api/mobile/other/traffic-notice-index',
4: '/api/mobile/other/ask-index'
},
type: 1,
list: [],
isloading: true
}
},
onLoad(options) {
let that = this;
uni.getSystemInfo({
success: function(res) {
that.height = res.windowHeight - 60;
}
});
this.type = options.type;
that.loadList();
},
methods: {
toinfo(id) {
uni.navigateTo({
url: "info?type=" + this.type + "&id=" + id
})
},
loadList(page) {
var that = this;
this.util.request({
api: this.urls[this.type],
data: {
page: page
},
utilSuccess: function(res) {
that.list = res.data;
this.isloading = false;
},
utilFail: function(res) {
uni.showToast({
icon: "none",
title: res
})
}
})
}
}
}
</script>
<style>
.box {
padding: 20rpx;
box-sizing: border-box;
}
.bgtop {
height: 40rpx;
}
.bgcenter {
background: url("../../static/img/nav_middle.png") repeat-y;
background-size: 100% 100%;
}
.newbox {
padding: 15rpx 20rpx;
color: #351C1B;
box-sizing: border-box;
}
.title {}
.time {
font-size: 24rpx;
}
.bgbottom {
height: 40rpx;
}
</style>

@ -23,7 +23,7 @@
<view class="box-row">
<view class="box-col" @click="handleBook(1)">
<image src="../../static/img/index_icon_1.png" class="box-body-icon"></image>
<view class='box-body-title'>参观预约</view>
<view class='box-body-title'>团队信息</view>
</view>
<view class="box-col" @click="handleBook(2)">
<image src="../../static/img/index_icon_2.png" class="box-body-icon"></image>
@ -41,42 +41,44 @@
</view>
</view>
</view>
<view class="box-bottom">
<!-- 当前展览 -->
<!-- 展厅导览 -->
<view class="box-bottom" style="padding-bottom:0" @click='toDl'>
<view class="exhibit">
<view @click='toExhibitList'>
<view>
<view>
<span></span>
<span>当前展览</span>
<span>厅导</span>
</view>
<u-icon name="arrow-right"></u-icon>
</view>
<view class="exhibit_list" @click='todetail(exhibitObj.id)'>
<img :src="exhibitObj.head_upload.url" alt="">
<span>{{exhibitObj.name}}</span>
</view>
</view>
<!-- 展厅导览 -->
<!-- <view class="exhibit">
<view>
<view class="exhibit_list">
<img :src="dlimg" alt="" style="height:300rpx">
<span>2F 平面图</span>
</view>
</view>
<view class="box-bottom" style="padding-top:0">
<!-- 当前展览 -->
<view class="exhibit">
<view @click='toExhibitList'>
<view>
<span></span>
<span>展厅导览</span>
<span>当前展览</span>
</view>
<u-icon name="arrow-right"></u-icon>
</view>
<view class="exhibit_list">
<img src="../../static/img/exhibit.png" alt="">
<span>追寻伟人足迹传承闻天家风张闻天家风展</span>
<view class="exhibit_list" v-for="item in exhibitList" @click='todetail(item.id)'>
<img :src="item.head_upload.url" alt="">
<span>{{item.name}}</span>
</view>
</view> -->
</view>
</view>
<!-- 参观预约 -->
<u-popup :show="showBook" mode="bottom" @close="closeBook" :round="10" closeable>
<view class="mpopup">
<view class="mpopup-title">
参观预约
<!-- 参观预约 -->
</view>
<view class="mpopup-content">
<view class="book-box">
@ -96,7 +98,7 @@
</u-icon>
<view v-else>
<text
v-if="item.is_open==1">{{item.remain_count==0?"不可预约":"可预约"}}</text>
v-if="item.is_open==1">{{item.remain_count==0?"不可参观":"可参观"}}</text>
<text v-else></text>
</view>
</view>
@ -136,13 +138,13 @@
v-if="item.remain_count>0&&item.remain_count<=50">
{{item.remain_count}}
</view>
<view class="book-box-row-timeitem-txt" v-else-if="item.remain_count>50">
<!-- <view class="book-box-row-timeitem-txt" v-else-if="item.remain_count>50">
余票充足
</view>
<view class="book-box-row-timeitem-txt" v-else></view>
</view> -->
<view class="book-box-row-timeitem-txt" v-if="item.remain_count<=0"></view>
</block>
<block v-else>
<view class="book-box-row-timeitem-txt">不可预约</view>
<view class="book-box-row-timeitem-txt">不可参观</view>
</block>
</view>
</view>
@ -157,12 +159,12 @@
</view>
</view>
<view class="mpopup-footer">
<view style="margin-right: 14rpx;flex: 1;">
<u-button type="primary" @click="tobook('team')"></u-button>
<view style="margin-right: 0rpx;flex: 1;">
<u-button style="background-color: red;" type="primary" @click="tobook('team')"></u-button>
</view>
<view style="margin-left: 14rpx;flex: 1;">
<!-- <view style="margin-left: 14rpx;flex: 1;">
<u-button type="primary" @click="tobook('user')"></u-button>
</view>
</view> -->
</view>
</view>
</u-popup>
@ -192,7 +194,6 @@
<view v-html="currentNotice.content" style="font-size:28rpx;line-height: 2.3;text-indent: 2em;">
</view>
<!-- <rich-text :nodes="currentNotice.content"></rich-text> -->
</view>
</view>
</u-popup>
@ -219,7 +220,7 @@
//
statusBarHeight: 0,
navBarBoxHeight:0,
exhibitObj:{},
exhibitList:[],
showBook: false,
minDate: `${year}-${month}-${date + 1}`,
maxDate: `${year}-${month}-${date + 7}`,
@ -235,7 +236,8 @@
currentIndex: 0,
listCalendar: [],
showAuthorization: false,
openType: 1
openType: 1,
dlimg:require("../../static/img/daolan.png")
}
},
onShareAppMessage() {
@ -262,6 +264,11 @@
uni.navigateTo({
url: "/pages/exhibit/list"
});
},
toDl(){
uni.navigateTo({
url: "/packages/dl/index"
});
},
togame() {
uni.navigateToMiniProgram({
@ -338,11 +345,11 @@
if (isCanbook) {
that.showCalendar = false;
} else {
that.util.toast("您选择的日期不可预约")
that.util.toast("您选择的日期不可参观")
}
});
} else {
that.util.toast("您选择的日期不可预约")
that.util.toast("您选择的日期不可参观")
}
}
},
@ -361,9 +368,9 @@
if (date == m.date) {
if (m.is_open == 1)
if (m.remain_count == 0) {
day.bottomInfo = '不可预约'
day.bottomInfo = '不可参观'
} else {
day.bottomInfo = '可预约'
day.bottomInfo = '可参观'
}
else {
day.bottomInfo = '闭馆'
@ -387,7 +394,7 @@
if (cdate.remain_count === 0) {
uni.showToast({
icon: "none",
title: "该日期已不可预约"
title: "该日期已不可参观"
})
return;
}
@ -419,17 +426,17 @@
},
openActivity() {
uni.navigateTo({
url: "../activity/index"
url: "/packages/activity/index"
})
},
openMap() {
uni.navigateTo({
url: "/pages/map/map"
url: "/packages/map/map"
})
},
openPark() {
uni.navigateTo({
url: "/pages/park/index"
url: "/packages/park/index"
})
},
loadUser(cb) {
@ -473,11 +480,11 @@
tobook(type) {
if (this.util.isNull(this.currentDate.date)) {
this.util.toast("请选择预约的日期");
this.util.toast("请选择参观的日期");
return false;
}
if (this.util.isNull(this.currentTime.id)) {
this.util.toast("请选择预约的时段");
this.util.toast("请选择参观的时段");
return false;
}
uni.navigateTo({
@ -511,7 +518,7 @@
api: '/api/mobile/exhibit-hall/index',
data:{
page:1,
page_size:1,
page_size:2,
state:1,
sort_name:'state',
sort_name_tow:'release_time',
@ -519,8 +526,7 @@
sort_type_tow:'DESC'
},
utilSuccess: function(res) {
console.log(res.data[0])
that.exhibitObj = res?.data[0]
that.exhibitList = res.data
},
utilFail: function(res) {
@ -562,16 +568,6 @@
isOpenDate = true;
} else {
isOpenDate = false;
/* uni.showToast({
icon: "none",
title: selectDate + "不可以预约",
complete() {
setTimeout(function() {
that.load3Day(that.$moment(selectDate).add('days', 1)
.format("yyyy-MM-DD"))
}, 2000)
}
}, 2000) */
}
}
i++;
@ -626,15 +622,13 @@
.wrap{
background-color: #cf995a;
}
.navBarBox {
/* background-color: #cf995a; */
.navBarBox {
position: fixed;
top:0;
left:0;
width:100%;
z-index:999;
background: linear-gradient(to bottom,#f6d593,#cf995a);
/* height:190rpx; */
background: linear-gradient(to bottom,#f6d593,#cf995a);
}
.navBarBox .statusBar {}
@ -776,5 +770,15 @@
.richp {
margin-bottom: 10rpx;
}
.book-box-row-timeitem {
display: flex;
align-items: center;
flex-wrap: wrap;
width: 32%;
padding: 19rpx 21rpx!important;
}
.book-box-row-timeitem-txt {
width:100%
}
</style>

@ -27,7 +27,7 @@
<view class="mine-box-navlist">
<view class="mine-box-navitem" @click="toPage(1)">
<image src="../../static/img/index_icon_1.png" class="mine-box-navitemimg"></image>
<text class="mine-box-navitemtxt">参观预约</text>
<text class="mine-box-navitemtxt">参观信息</text>
</view>
<view class="mine-box-navitem" @click="toPage(2)">
<image src="../../static/img/index_icon_2.png" class="mine-box-navitemimg"></image>
@ -89,7 +89,6 @@
:sourceType="['album','camera']" :compress="false" :quality="80" :formData="otherData"
:remove="true" :dataType="1" @uploadSuccess="uploadSuccess" @imgDelete="imgDelete"
@uploadFail="uploadFail" :action="action"></htz-image-upload>
<!-- <u-textarea v-model="form.avatar" placeholder="请输入内容"></u-textarea> -->
</u-form-item>
</u-form>
<u-button type="primary" @click="tosubmit"></u-button>
@ -220,13 +219,13 @@
var url = "";
switch (type) {
case 1:
url = "../order/visitorder"
url = "/packages/order/visitorder"
break;
case 2:
url = "../order/activityorder"
url = "/packages/order/activityorder"
break;
case 3:
url = "../order/parkorder"
url = "/packages/order/parkorder"
break;
case 4:
url = "recommend"

@ -1,27 +0,0 @@
<template>
<view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
onShareAppMessage() {
return {
title: "领取我的预约码"
}
},
methods: {
}
}
</script>
<style>
</style>

@ -1,144 +0,0 @@
<template>
<view class="content">
<view class='contop'>
<view class='title'>{{info.name?info.name:''}}</view>
<view class='time'><span>时间{{info.release_time?cancelTime(info.release_time):''}}</span><span>来源{{info.source?info.source:''}}</span></view>
<!-- <view class='head'>
<img :src="info.head_upload.url" alt="">
</view> -->
</view>
<!-- <view class='bg40'></view> -->
<view class='detail'>
<u-parse v-if="showContent" :content="info.content?info.content:' '"/>
</view>
</view>
</template>
<script>
import uParse from '@/components/gaoyia-parse/parse.vue'
export default {
components: {
uParse
},
data() {
return {
info: {},
id: '',
showContent:false,
guidance_unit_list: [],
sponsor_list: [],
bear_unit_list: []
}
},
onLoad(options) {
this.id = options.id ? options.id : ''
this.loadDetail()
},
methods: {
cancelTime(val){
return val.substring(0,10)
},
loadDetail() {
var that = this;
this.util.request({
api: '/api/mobile/cultural-relic/show',
data: {
id: that.id
},
utilSuccess: function(res) {
that.info = res
const host = that.util.HOST
console.log(host)
that.info.content = that.util.replaceImgUrl(that.info.content,'../storage/files',`${host}/storage/files`)
that.showContent = true
},
utilFail: function(res) {
}
})
}
}
}
</script>
<style>
@import url("/components/gaoyia-parse/parse.css");
.content {
background-color: #fbf3ea;
/* padding-bottom:180rpx */
}
.contop{
padding:0 30rpx;
padding-bottom: 30rpx;
/* border-radius: 0 0 30rpx 30rpx; */
background: #fff;
}
.title {
text-align: center;
padding: 30rpx 0rpx;
font-size: 32rpx;
font-size: 36rpx;
font-weight:bold;
}
.time {
text-align: center;
color: #6e6e6e;
font-size: 28rpx;
padding-bottom: 30rpx;
border-bottom: 1px solid #fafaf9;
}
.time span {
margin: 0 10rpx;
}
.head {
margin:30rpx 0;
margin-bottom:0;
}
.head img {
width: 100%
}
.head_unit{
background-color: #fcf8f3;
border:8rpx solid #f8ebdb;
border-radius: 20rpx;
padding:35rpx;
margin:30rpx 0;
margin-bottom:0;
}
.head_unit>view{
display: flex;
}
.head_unit>view>view:first-child{
width:28%;
}
.head_unit>view>view:last-child{
width:72%;
}
.head_unit>view>view:last-child view{
margin-bottom: 20rpx;
}
.bg40{
width:100%;
height:40rpx;
background-color: #fbf3ea;
}
.detail {
padding:0 60rpx;
background: #fff;
padding-top: 30rpx;
/* border-radius: 30rpx 30rpx 0 0; */
padding-bottom:180rpx;
font-size: 28rpx;
}
.detail img {
width: 100%;
margin:10rpx 0;
}
.wxParse{
line-height: 2.3;
}
</style>

@ -1,178 +0,0 @@
<template>
<view class='content'>
<view>
<u-empty v-if="dataList.length==0" marginTop="250"></u-empty>
<view class="relic_list" v-else='dataList.length>0'>
<view class='relic_item' v-for='item in dataList' @click='todetail(item.id)'>
<img :src="item.head_upload.url" alt="">
<view>
<view>{{item.name}}</view>
<view class='contain'>{{item.contain}}</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
currentPage: 1,
isLoading: false,
dataList: []
}
},
onLoad() {
this.loadrelic(1)
},
onPullDownRefresh() {
console.log("onPullDownRefresh")
if (!this.isLoading) {
this.loadrelic(this.currentPage + 1);
}
},
onReachBottom() {
console.log("onReachBottom")
if (!this.isLoading) {
this.loadrelic(this.currentPage + 1);
}
},
methods: {
relicChange(e) {
this.current = e.index;
this.loadrelic(1);
},
cancelTime(str) {
return str ? str.substring(0, 10) : ''
},
todetail(id) {
uni.navigateTo({
url: "/pages/relic/detail?id=" + id
});
},
loadrelic(page) {
uni.hideKeyboard()
var that = this;
that.isLoading = true;
this.util.request({
api: '/api/mobile/cultural-relic/index',
customLoading: false,
data: {
page: page,
page_size: 7,
sort_name:'release_time',
sort_type:"DESC",
},
utilSuccess: function(r) {
var res = r.data;
that.isLoading = false;
var hasNoMore = r.total < 6 && page > 1;
if (hasNoMore || res.length == 0 && page > 1) {
uni.stopPullDownRefresh(); // < ,
//
uni.showToast({
title: '已加载到最后一页',
icon: 'none'
});
return;
}
var dataList = that.dataList;
// for (var m of res) {
// if (m.created_at.indexOf('T') > 0)
// m.created_at = m.created_at.split("T")[0] + " " + m.created_at.split("T")[
// 1].split(".")[0];
// m.poster = (weixin.isNull(m.poster) ? "../../static/rishang.png" : m
// .poster_url)
// }
if (page == 1) {
dataList = res;
} else {
dataList.push(...res);
}
that.currentPage = page;
that.dataList = dataList;
},
utilFail: function(res) {
if (page == 1) {
that.currentPage = page;
}
that.util.alert(res);
}
});
}
}
}
</script>
<style>
.tabsnav {
background-color: #fbf3ea;
}
.relic_list {
padding: 0 30rpx;
padding-top: 10rpx;
border-top: 1px solid #fafaf9;
}
.relic_item {
width: 100%;
padding: 20rpx 0;
padding-top: 20rpx;
border-bottom: 1px solid #fafaf9;
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.relic_item img {
width: 310rpx;
height: 183rpx;
border-radius: 10rpx;
}
.relic_item>view {
width: 370rpx;
}
.relic_item>view view {
margin-top: 10rpx;
}
.relic_item>view view:first-child {
width: 100%;
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
/* 这里是超出几行省略 */
overflow: hidden;
font-size: 30rpx;
margin-top:0
}
.relic_item>view view:last-child {
width: 100%;
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
/* 这里是超出几行省略 */
overflow: hidden;
font-size: 26rpx;
margin-top: 10rpx;
}
</style>

@ -25,13 +25,13 @@
var url = "";
if (options.from == "visit") {
this.tips = "参观预约";
url = "/pages/order/visitorderinfo?id=" + options.id
url = "/packages/order/visitorderinfo?id=" + options.id
} else if (options.from == "activity") {
this.tips = "活动预约";
url = "/pages/order/activityorderinfo?id=" + options.id
url = "/packages/order/activityorderinfo?id=" + options.id
} else if (options.from == "park") {
this.tips = "车位预约";
url = "/pages/order/parkorderinfo?id=" + options.id
url = "/packages/order/parkorderinfo?id=" + options.id
} else if (options.from == "feed") {
this.tips = "首页";
this.option = "提交"

@ -2,9 +2,9 @@
<view>
<view class="content">
<view class="box-card">
<view class="box-card-title">
预约详情
</view>
<!-- <view class="box-card-title">
参观详情
</view> -->
<view class="box-card-content">
<view class="book-box" style="padding-top: 20rpx;">
<view class="book-box-card">
@ -21,7 +21,7 @@
</u-icon>
<view v-else>
<text
v-if="item.is_open==1">{{item.remain_count==0?"不可预约":"可预约"}}</text>
v-if="item.is_open==1">{{item.remain_count==0?"不可参观":"可参观"}}</text>
<text v-else></text>
</view>
</view>
@ -58,10 +58,10 @@
v-if="item.remain_count>0&&item.remain_count<=50">
{{item.remain_count}}
</view>
<view class="book-box-row-timeitem-txt" v-else-if="item.remain_count>50">
<!-- <view class="book-box-row-timeitem-txt" v-else-if="item.remain_count>50">
余票充足
</view>
<view class="book-box-row-timeitem-txt" v-else></view>
</view> -->
<view class="book-box-row-timeitem-txt" v-if="item.remain_count<=0"></view>
</view>
</view>
</view>
@ -71,7 +71,7 @@
{{(currentTime.start_time||"")+"-"+(currentTime.end_time||"")}}
</view>
<view class="book-box-selectInfo-right" @click="openNoticeInfo(0)">
<text class="book-box-selectInfo-righttxt">预约须知</text>
<text class="book-box-selectInfo-righttxt">参观须知</text>
<u-icon name="arrow-right" color="#cf995a" size="20rpx"></u-icon>
</view>
</view>
@ -100,9 +100,9 @@
<view class="box-tips">
<text class="box-tips-txt" v-if="type=='user'">{{maxCount}}1</text>
<text class="box-tips-txt"
v-if="type=='team'">{{minCount}}人以上可团体预约<!-- 一个团体最多{{maxCount}} --></text>
v-if="type=='team'">{{minCount}}人以上可团体参观<!-- 一个团体最多{{maxCount}} --></text>
</view>
<view class="commonuser">
<!-- <view class="commonuser">
<view class="box-card-content">
<view class="book-box" style="padding-top: 20rpx;">
<view class="book-box-card">
@ -121,7 +121,6 @@
</u-icon>
</view>
<view>{{item.name}}</view>
<!-- <view>{{item.datef}}</view> -->
</view>
</block>
</view>
@ -172,18 +171,10 @@
<u-icon name="question-circle-fill" color="#cf995a" size="40rpx"></u-icon>
<text class="book-box-selectInfo-righttxt" style="margin-left: 20rpx;">批量导入说明</text>
</view>
</view>
</view> -->
</view>
</view>
<!-- <view class="box-card">
<u-form-item label="特殊情况" labelWidth="80" prop="leader" ref="leader">
<u-checkbox-group @change="radioChange">
<u-checkbox activeColor="#cf995a" label="乘坐轮椅等行动不便者" v-model="specialtype" name='1' shape="circle"></u-checkbox>
</u-checkbox-group>
</u-form-item>
</view> -->
<view class="box-card" v-if="type=='team'">
<view class="box-card-title">
{{type=="team"?"领队人信息":"联系人信息"}}
@ -197,12 +188,8 @@
<u-form-item label="单位名称" labelWidth="80" prop="unit" required>
<u-input placeholder="请输入单位名称" v-model="form.unit"></u-input>
</u-form-item>
<u-form-item label="证件类型" labelWidth="80" prop="card_type1" required>
<!-- <u-radio-group v-model="form.card_type">
<u-radio width="50%" activeColor="#cf995a" v-for="(item, index) in cardList"
:key="index" :name=item.idx :label="item.name">
</u-radio>
</u-radio-group> -->
<!-- <u-form-item label="证件类型" labelWidth="80" prop="card_type1" required>
<u-cell-group :border="false">
<u-cell @click="showCards" :title="card_type_names" :isLink="true"
arrow-direction="down"></u-cell>
@ -210,7 +197,7 @@
</u-form-item>
<u-form-item label="证件号码" labelWidth="80" prop="from.idcard" required>
<u-input placeholder="请输入证件号码" v-model="form.idcard"></u-input>
</u-form-item>
</u-form-item> -->
</block>
<u-form-item label="手机号" labelWidth="80" prop="mobile" ref="mobile" required>
<u-input readonly placeholder="请输入手机号" v-model="form.mobile"></u-input>
@ -240,27 +227,21 @@
<u-form-item label="姓名" labelWidth="80" prop="name" ref="name" required>
<u-input placeholder="请输入姓名" v-model="formUser.name"></u-input>
</u-form-item>
<u-form-item label="证件类型" labelWidth="80" prop="card_type1" ref="card_type" required>
<!-- <u-radio-group v-model="formUser.card_type">
<u-radio width="50%" activeColor="#cf995a" v-for="(item, index) in cardList"
:key="index" :name=item.idx :label="item.name">
</u-radio>
</u-radio-group> -->
<!-- <u-form-item label="证件类型" labelWidth="80" prop="card_type1" ref="card_type" required>
<u-cell-group :border="false">
<u-cell @click="showCard" :title="card_type_name" :isLink="true" arrow-direction="down">
</u-cell>
</u-cell-group>
<!-- <u-input placeholder="身份证" disabled @click="showCard" v-model="formUser.card_type"></u-input> -->
</u-form-item>
<u-form-item label="证件号码" labelWidth="80" prop="idcard" ref="idcard" required>
<u-input placeholder="请输入证件号码" v-model="formUser.idcard"></u-input>
</u-form-item>
</u-form-item> -->
<u-form-item label="行动不便者" labelWidth="80" prop="is_disability" ref="is_disability">
<u-radio-group v-model="formUser.is_disability">
<u-radio width="100%" activeColor="#cf995a" v-for="(item, index) in disabilitys"
:key="index" :name=item.idx :label="item.name">
</u-radio>
<!-- <u-checkbox activeColor="#cf995a" label="乘坐轮椅等行动不便者" v-model="specialtype" name='1' shape="circle"></u-checkbox> -->
</u-radio-group>
</u-form-item>
@ -290,7 +271,6 @@
<view class="mpopup-content" style="margin-top: 60rpx;">
<scroll-view scroll-y="true" :style="[{height:scrollheight}]">
<!-- <rich-text :nodes="currentNotice.content"></rich-text> -->
<view class="htmls" style="line-height: 50rpx;text-indent: 2em;" v-html="currentNotice.content">
</view>
<view @click="downLoad" style="color:#cf995a ;" v-if="currentNotice.isTemplate"></view>
@ -307,9 +287,8 @@
mode="center" width="600rpx" height="150rpx">
<view class="">
<view class="successBox">
<!-- <u-icon name="checkmark-circle" size="90" color="#cf995a"></u-icon> -->
<view class="h3">您已经预约成功</view>
<view class="p">即将跳转到参观预约 {{time}} s</view>
<view class="h3">您已经填报成功</view>
<view class="p">即将跳转到参观信息 {{time}} s</view>
</view>
<view class="pinkBtn" @click="goHome"></view>
</view>
@ -355,12 +334,12 @@
maxheight: "",
scrollheight: "",
notice: [{
title: "预约须知",
content: "预约须知的内容",
title: "参观须知",
content: "参观须知的内容",
isTemplate:false
}, {
title: "批量上传帮助",
content: "<p>1.批量上传EXCEL的以xlsx结尾</p><p>2.第一行为标题行 姓名 手机号 证件号 行动不便者</p><p>3.文件是从微信聊天记录中选取或者微信文件传输助手</p><img src='@host@/export.png?v=1.1' style='width:100%'/>",
content: "<p>1.批量上传EXCEL的以xlsx结尾</p><p>2.第一行为标题行 姓名 手机号 行动不便者</p><p>3.文件是从微信聊天记录中选取或者微信文件传输助手</p><img src='@host@/export.png?v=1.1' style='width:100%'/>",
isTemplate:true
}],
specialtype: false,
@ -394,16 +373,16 @@
message: '请输入姓名',
trigger: 'blur'
}],
idcard: [{
required: true,
message: '请输入证件号',
trigger: 'blur'
}],
card_type: [{
required: true,
message: '请选择证件类型',
trigger: 'change'
}]
// idcard: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
// card_type: [{
// required: true,
// message: '',
// trigger: 'change'
// }]
},
listVistor: [{}, {}],
showAdd: false,
@ -487,7 +466,7 @@
this.type = options.from;
this.load3Day(this.bcurrentDate.date);
uni.setNavigationBarTitle({
title: (options.from == 'user' ? "个人预约" : "团队预约")
title: (options.from == 'user' ? "个人信息" : "团队信息")
})
//this.maxCount = (type == 'user' ? 5 : 50);
@ -580,9 +559,7 @@
} else {
this.specialid = 0
}
// if(this.$refs.radio.currentValue){
// this.specialtype = val;
// }
},
loadCommonUser() {
var that = this;
@ -612,7 +589,6 @@
}
}
// this.form.total = this.form.details_list.length;
},
downLoad() {
const downloadTask = uni.downloadFile({
@ -688,10 +664,7 @@
submitOrder() {
this.form.date = this.currentDate.date;
this.form.rule_id = this.currentTime.id;
// if(this.specialid){
// //
// this.form.is_disability = this.specialid;
// }
if(this.type!='team'){
if (this.form.details_list.length != this.form.total) {
uni.showToast({
@ -733,23 +706,23 @@
return false;
}
if (this.util.isNull(this.form.idcard)) {
uni.showToast({
icon: "none",
title: "请填写证件号"
})
return false;
}
if (this.form.card_type == 1) {
if (!this.util.isValidCardID(this.form.idcard)) {
uni.showToast({
icon: "none",
title: "请正确输入身份证号"
})
return false;
}
}
// if (this.util.isNull(this.form.idcard)) {
// uni.showToast({
// icon: "none",
// title: ""
// })
// return false;
// }
// if (this.form.card_type == 1) {
// if (!this.util.isValidCardID(this.form.idcard)) {
// uni.showToast({
// icon: "none",
// title: ""
// })
// return false;
// }
// }
}
@ -769,22 +742,12 @@
}, 1000)
that.timer = setTimeout(function() {
uni.redirectTo({
url: '/pages/order/visitorder'
url: '/packages/order/visitorder'
})
clearInterval(that.t);
clearTimeout(that.timer)
}, 3000)
// uni.showToast({
// icon: "none",
// title: "",
// complete() {
// uni.redirectTo({
// url: "/pages/success/success?from=visit&id=" + res.id
// })
// }
// })
},
utilFail: function(res) {
that.util.toast(res);
@ -863,27 +826,15 @@
this.$refs.formUser.validate().then(res => {
if (that.formUser.card_type == 1) {
that.formUser.idcard = that.formUser.idcard.toUpperCase();
if (!that.util.isValidCardID(that.formUser.idcard)) {
uni.showToast({
icon: "none",
title: "请正确输入身份证号"
})
return false;
}
// if (!that.util.isValidCardID(that.formUser.idcard)) {
// uni.showToast({
// icon: "none",
// title: ""
// })
// return false;
// }
}
// if (this.util.isNull(this.formUser.mobile)) {
// uni.showToast({
// icon: "none",
// title: ""
// })
// return false;
// } else if (!this.util.phoneRegex.test(this.formUser.mobile)) {
// uni.showToast({
// icon: "none",
// title: ""
// })
// return false;
// }
if (!this.util.isNull(this.formUser.mobile)) {
if (!this.util.phoneRegex.test(this.formUser.mobile)) {
uni.showToast({
@ -939,11 +890,11 @@
that.showCalendar = false;
that.bcurrentTime = null;
} else {
that.util.toast("您选择的日期不可预约")
that.util.toast("您选择的日期不可参观")
}
});
} else {
that.util.toast("您选择的日期不可预约")
that.util.toast("您选择的日期不可参观")
}
}
@ -963,9 +914,9 @@
if (date == m.date) {
if (m.is_open == 1) {
if (m.remain_count == 0) {
day.bottomInfo = '不可预约'
day.bottomInfo = '不可参观'
} else {
day.bottomInfo = '可预约'
day.bottomInfo = '可参观'
}
} else {
day.bottomInfo = '闭馆'
@ -992,7 +943,7 @@
if (cdate.remain_count === 0) {
uni.showToast({
icon: "none",
title: "该日期已不可预约"
title: "该日期已不可参观"
})
return;
}
@ -1014,7 +965,7 @@
return false
}
if (mod.remain_count == 0) {
this.util.toast("该时段已不可预约");
this.util.toast("该时段已不可参观");
return false
}
for (var m of this.currentDate.rules) {
@ -1059,16 +1010,6 @@
isOpenDate = true;
} else {
isOpenDate = false;
/* uni.showToast({
icon: "none",
title: selectDate + "不可以预约",
complete() {
setTimeout(function() {
that.load3Day(that.$moment(selectDate).add('days', 1)
.format("yyyy-MM-DD"))
}, 2000)
}
}, 2000) */
}
}
i++;
@ -1330,5 +1271,15 @@
.u-radio-group .u-radio {
margin-bottom: 10rpx;
margin-right: 10rpx
}
.book-box-row-timeitem {
display: flex;
align-items: center;
flex-wrap: wrap;
width: 32%;
padding: 19rpx 21rpx!important;
}
.book-box-row-timeitem-txt {
width:100%
}
</style>

@ -70,7 +70,7 @@
<view class="book-box-selectInfo" style="width:100%;padding: 0rpx 13rpx">
<view class="book-box-selectInfo-left">已选5月6日 09:00-10:00</view>
<view class="book-box-selectInfo-right">
<text class="book-box-selectInfo-righttxt">预约须知</text>
<text class="book-box-selectInfo-righttxt">参观须知</text>
<u-icon name="arrow-right" color="#cf995a" size="20rpx"></u-icon>
</view>
</view>

@ -16,7 +16,7 @@
},
onLoad(options) {
if(options.link){
this.src = options.link
this.src = decodeURIComponent(options.link)
}
},
methods:{

@ -1,9 +0,0 @@
<template>
<web-view src="https://suzhoushijian.szgmbwg.org.cn?v=1.0"></web-view>
</template>
<script>
</script>
<style>
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@ -0,0 +1,22 @@
## 1.3.22023-05-04
- 修复 NVUE 平台报错的问题
## 1.3.12021-11-23
- 修复 init 方法初始化问题
## 1.3.02021-11-19
- 优化 组件UI并提供设计资源详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition)
## 1.2.12021-09-27
- 修复 init 方法不生效的 Bug
## 1.2.02021-07-30
- 组件兼容 vue3如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
## 1.1.12021-05-12
- 新增 示例地址
- 修复 示例项目缺少组件的 Bug
## 1.1.02021-04-22
- 新增 通过方法自定义动画
- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式
- 优化 动画触发逻辑,使动画更流畅
- 优化 支持单独的动画类型
- 优化 文档示例
## 1.0.22021-02-05
- 调整为 uni_modules 目录规范

@ -0,0 +1,131 @@
// const defaultOption = {
// duration: 300,
// timingFunction: 'linear',
// delay: 0,
// transformOrigin: '50% 50% 0'
// }
// #ifdef APP-NVUE
const nvueAnimation = uni.requireNativePlugin('animation')
// #endif
class MPAnimation {
constructor(options, _this) {
this.options = options
// 在iOS10+QQ小程序平台下传给原生的对象一定是个普通对象而不是Proxy对象否则会报parameter should be Object instead of ProxyObject的错误
this.animation = uni.createAnimation({
...options
})
this.currentStepAnimates = {}
this.next = 0
this.$ = _this
}
_nvuePushAnimates(type, args) {
let aniObj = this.currentStepAnimates[this.next]
let styles = {}
if (!aniObj) {
styles = {
styles: {},
config: {}
}
} else {
styles = aniObj
}
if (animateTypes1.includes(type)) {
if (!styles.styles.transform) {
styles.styles.transform = ''
}
let unit = ''
if(type === 'rotate'){
unit = 'deg'
}
styles.styles.transform += `${type}(${args+unit}) `
} else {
styles.styles[type] = `${args}`
}
this.currentStepAnimates[this.next] = styles
}
_animateRun(styles = {}, config = {}) {
let ref = this.$.$refs['ani'].ref
if (!ref) return
return new Promise((resolve, reject) => {
nvueAnimation.transition(ref, {
styles,
...config
}, res => {
resolve()
})
})
}
_nvueNextAnimate(animates, step = 0, fn) {
let obj = animates[step]
if (obj) {
let {
styles,
config
} = obj
this._animateRun(styles, config).then(() => {
step += 1
this._nvueNextAnimate(animates, step, fn)
})
} else {
this.currentStepAnimates = {}
typeof fn === 'function' && fn()
this.isEnd = true
}
}
step(config = {}) {
// #ifndef APP-NVUE
this.animation.step(config)
// #endif
// #ifdef APP-NVUE
this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
this.next++
// #endif
return this
}
run(fn) {
// #ifndef APP-NVUE
this.$.animationData = this.animation.export()
this.$.timer = setTimeout(() => {
typeof fn === 'function' && fn()
}, this.$.durationTime)
// #endif
// #ifdef APP-NVUE
this.isEnd = false
let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
if(!ref) return
this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
this.next = 0
// #endif
}
}
const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
'translateZ'
]
const animateTypes2 = ['opacity', 'backgroundColor']
const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
MPAnimation.prototype[type] = function(...args) {
// #ifndef APP-NVUE
this.animation[type](...args)
// #endif
// #ifdef APP-NVUE
this._nvuePushAnimates(type, args)
// #endif
return this
}
})
export function createAnimation(option, _this) {
if(!_this) return
clearTimeout(_this.timer)
return new MPAnimation(option, _this)
}

@ -0,0 +1,286 @@
<template>
<!-- #ifndef APP-NVUE -->
<view v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
<!-- #endif -->
<!-- #ifdef APP-NVUE -->
<view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
<!-- #endif -->
</template>
<script>
import { createAnimation } from './createAnimation'
/**
* Transition 过渡动画
* @description 简单过渡动画组件
* @tutorial https://ext.dcloud.net.cn/plugin?id=985
* @property {Boolean} show = [false|true] 控制组件显示或隐藏
* @property {Array|String} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
* @value fade 渐隐渐出过渡
* @value slide-top 由上至下过渡
* @value slide-right 由右至左过渡
* @value slide-bottom 由下至上过渡
* @value slide-left 由左至右过渡
* @value zoom-in 由小到大过渡
* @value zoom-out 由大到小过渡
* @property {Number} duration 过渡动画持续时间
* @property {Object} styles 组件样式 css 样式注意带-连接符的属性需要使用小驼峰写法如`backgroundColor:red`
*/
export default {
name: 'uniTransition',
emits:['click','change'],
props: {
show: {
type: Boolean,
default: false
},
modeClass: {
type: [Array, String],
default() {
return 'fade'
}
},
duration: {
type: Number,
default: 300
},
styles: {
type: Object,
default() {
return {}
}
},
customClass:{
type: String,
default: ''
},
onceRender:{
type:Boolean,
default:false
},
},
data() {
return {
isShow: false,
transform: '',
opacity: 1,
animationData: {},
durationTime: 300,
config: {}
}
},
watch: {
show: {
handler(newVal) {
if (newVal) {
this.open()
} else {
// close,
if (this.isShow) {
this.close()
}
}
},
immediate: true
}
},
computed: {
//
stylesObject() {
let styles = {
...this.styles,
'transition-duration': this.duration / 1000 + 's'
}
let transform = ''
for (let i in styles) {
let line = this.toLine(i)
transform += line + ':' + styles[i] + ';'
}
return transform
},
//
transformStyles() {
return 'transform:' + this.transform + ';' + 'opacity:' + this.opacity + ';' + this.stylesObject
}
},
created() {
//
this.config = {
duration: this.duration,
timingFunction: 'ease',
transformOrigin: '50% 50%',
delay: 0
}
this.durationTime = this.duration
},
methods: {
/**
* ref 触发 初始化动画
*/
init(obj = {}) {
if (obj.duration) {
this.durationTime = obj.duration
}
this.animation = createAnimation(Object.assign(this.config, obj),this)
},
/**
* 点击组件触发回调
*/
onClick() {
this.$emit('click', {
detail: this.isShow
})
},
/**
* ref 触发 动画分组
* @param {Object} obj
*/
step(obj, config = {}) {
if (!this.animation) return
for (let i in obj) {
try {
if(typeof obj[i] === 'object'){
this.animation[i](...obj[i])
}else{
this.animation[i](obj[i])
}
} catch (e) {
console.error(`方法 ${i} 不存在`)
}
}
this.animation.step(config)
return this
},
/**
* ref 触发 执行动画
*/
run(fn) {
if (!this.animation) return
this.animation.run(fn)
},
//
open() {
clearTimeout(this.timer)
this.transform = ''
this.isShow = true
let { opacity, transform } = this.styleInit(false)
if (typeof opacity !== 'undefined') {
this.opacity = opacity
}
this.transform = transform
// nextTick wx
this.$nextTick(() => {
// TODO
this.timer = setTimeout(() => {
this.animation = createAnimation(this.config, this)
this.tranfromInit(false).step()
this.animation.run()
this.$emit('change', {
detail: this.isShow
})
}, 20)
})
},
//
close(type) {
if (!this.animation) return
this.tranfromInit(true)
.step()
.run(() => {
this.isShow = false
this.animationData = null
this.animation = null
let { opacity, transform } = this.styleInit(false)
this.opacity = opacity || 1
this.transform = transform
this.$emit('change', {
detail: this.isShow
})
})
},
//
styleInit(type) {
let styles = {
transform: ''
}
let buildStyle = (type, mode) => {
if (mode === 'fade') {
styles.opacity = this.animationType(type)[mode]
} else {
styles.transform += this.animationType(type)[mode] + ' '
}
}
if (typeof this.modeClass === 'string') {
buildStyle(type, this.modeClass)
} else {
this.modeClass.forEach(mode => {
buildStyle(type, mode)
})
}
return styles
},
//
tranfromInit(type) {
let buildTranfrom = (type, mode) => {
let aniNum = null
if (mode === 'fade') {
aniNum = type ? 0 : 1
} else {
aniNum = type ? '-100%' : '0'
if (mode === 'zoom-in') {
aniNum = type ? 0.8 : 1
}
if (mode === 'zoom-out') {
aniNum = type ? 1.2 : 1
}
if (mode === 'slide-right') {
aniNum = type ? '100%' : '0'
}
if (mode === 'slide-bottom') {
aniNum = type ? '100%' : '0'
}
}
this.animation[this.animationMode()[mode]](aniNum)
}
if (typeof this.modeClass === 'string') {
buildTranfrom(type, this.modeClass)
} else {
this.modeClass.forEach(mode => {
buildTranfrom(type, mode)
})
}
return this.animation
},
animationType(type) {
return {
fade: type ? 1 : 0,
'slide-top': `translateY(${type ? '0' : '-100%'})`,
'slide-right': `translateX(${type ? '0' : '100%'})`,
'slide-bottom': `translateY(${type ? '0' : '100%'})`,
'slide-left': `translateX(${type ? '0' : '-100%'})`,
'zoom-in': `scaleX(${type ? 1 : 0.8}) scaleY(${type ? 1 : 0.8})`,
'zoom-out': `scaleX(${type ? 1 : 1.2}) scaleY(${type ? 1 : 1.2})`
}
},
//
animationMode() {
return {
fade: 'opacity',
'slide-top': 'translateY',
'slide-right': 'translateX',
'slide-bottom': 'translateY',
'slide-left': 'translateX',
'zoom-in': 'scale',
'zoom-out': 'scale'
}
},
// 线
toLine(name) {
return name.replace(/([A-Z])/g, '-$1').toLowerCase()
}
}
}
</script>
<style></style>

@ -0,0 +1,84 @@
{
"id": "uni-transition",
"displayName": "uni-transition 过渡动画",
"version": "1.3.2",
"description": "元素的简单过渡动画",
"keywords": [
"uni-ui",
"uniui",
"动画",
"过渡",
"过渡动画"
],
"repository": "https://github.com/dcloudio/uni-ui",
"engines": {
"HBuilderX": ""
},
"directories": {
"example": "../../temps/example_temps"
},
"dcloudext": {
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
"type": "component-vue"
},
"uni_modules": {
"dependencies": ["uni-scss"],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"App": {
"app-vue": "y",
"app-nvue": "y"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y"
},
"快应用": {
"华为": "u",
"联盟": "u"
},
"Vue": {
"vue2": "y",
"vue3": "y"
}
}
}
}
}

@ -0,0 +1,11 @@
## Transition 过渡动画
> **组件名uni-transition**
> 代码块: `uTransition`
元素过渡动画
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition)
#### 如使用过程中有任何问题或者您对uni-ui有一些好的建议欢迎加入 uni-ui 交流群871950839

@ -1,9 +1,9 @@
import md5 from "./md5.min";
const HOSTARR = {
'development':'https://gb-test.ali251.langye.net',
'production': 'https://gb-test.ali251.langye.net',
// 'development':'https://gbyuyue.szgmbwg.org.cn',
// 'production': 'https://gbyuyue.szgmbwg.org.cn',
// 'development':'https://gb-test.ali251.langye.net',
// 'production': 'https://gb-test.ali251.langye.net',
'development':'https://gbyuyue.szgmbwg.org.cn',
'production': 'https://gbyuyue.szgmbwg.org.cn',
// https://gbyuyue.szgmbwg.org.cn/
}; // 审核状态

Loading…
Cancel
Save