Commit 46080ab4 authored by zhangzhaohui's avatar zhangzhaohui

Initial commit

parents
Pipeline #333 canceled with stages
node_modules
\ No newline at end of file
{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
// launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
"version": "0.0",
"configurations": [{
"default" :
{
"launchtype" : "local"
},
"mp-weixin" :
{
"launchtype" : "local"
},
"type" : "uniCloud"
}
]
}
<script>
export default {
onLaunch: function() {
uni.setInnerAudioOption({
obeyMuteSwitch: false
})
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
},
methods: {
}
}
</script>
<style lang="scss">
@import "@/uni_modules/uview-ui/index.scss";
/*每个页面公共css */
</style>
import MinRequest from '../utils/request.js'
const minRequest = new MinRequest()
import qs from 'qs'
/* 获取导览路线列表 */
export function getVisitRoutes(){
return minRequest.get('/xqg/guideroute/no-auth/list')
}
/* 根据类型Id获取点位列表 */
export function getPointListById(typeId) {
return minRequest.get('/xqg/guideinfo/no-auth/list?guideTypeId=' + typeId)
}
/* 根据搜索内容获取点位结果 */
export function getPointListByName(name) {
return minRequest.get('/xqg/guideinfo/no-auth/list?guideTitle=' + name)
}
/* 获取景点详情 */
export function getSlightDetail(id) {
return minRequest.get('/xqg/guideinfo/no-auth/' + id)
}
export function getGuildbookList() {
return minRequest.get('/xqg/guidebook/no-auth/list')
}
\ No newline at end of file
<template>
<view class="header-bar" :style="{ 'padding-top': statusBarHeight + 'px' , 'height' : navHeight + 'px'}">
<view class="content">
<view class="icon-box" @click="back()">
<image class="icon" src="../static/img/back.png"></image>
<text class="back-text">返回</text>
</view>
<text>{{title}}</text>
</view>
</view>
</template>
<script>
export default {
name:"HeaderBar",
data() {
return {
};
},
props: ['title'],
computed: {
statusBarHeight(){
return this.$store.state.statusBarHeight
},
navHeight(){
return this.$store.state.navHeight
},
},
methods: {
back(){
uni.navigateBack()
},
}
}
</script>
<style lang="scss" scoped>
.header-bar{
width: 100%;
justify-content: center;
align-items: center;
display: flex;
font-size: 36rpx;
box-sizing: border-box;
position: fixed;
top: 0;
z-index: 99;
.content{
flex: 1;
display: flex;
justify-content: center;
position: relative;
align-items: center;
.icon-box{
display: flex;
align-items: center;
position: absolute;
left: 48rpx;
.icon {
height: 40rpx;
width: 40rpx;
margin-right: 15rpx;
}
.back-text{
font-size: 32rpx;
}
}
}
}
</style>
\ No newline at end of file
<template>
<view class="imt-audio">
<view class="audio-wrapper">
<view class="audio-number" style="color: #76b062;">{{format(current)}}</view>
<view class="slash" style="color: #76b062;margin: 0 10rpx;">/</view>
<view class="audio-number">{{format(duration)}}</view>
</view>
<view class="audio-control-wrapper" :style="{color}">
<slider class="audio-slider" :activeColor="color" block-size="16" :value="current" :max="duration" @changing="seek=true,current=$event.detail.value" @change="audio.seek($event.detail.value)"></slider>
<image class="audio-control" :src="paused ? playIcon : stopIcon " @click="audio.paused?play():pause()" ></image>
</view>
</view>
</template>
<script>
export default {
data() {
return {
playIcon: require('@/static/img/play_icon.png'),
stopIcon: require('@/static/img/stop_icon.png'),
audio: uni.createInnerAudioContext(),
current: 0, //当前进度(s)
duration: 0, //总时长(s)
paused: true, //是否处于暂停状态
loading: false, //是否处于读取状态
seek: false //是否处于拖动状态
}
},
props: {
src: String, //音频链接
autoplay: Boolean, //是否自动播放
continue: Boolean, //播放完成后是否继续播放下一首,需定义@next事件
control: {
type: Boolean,
default: true
}, //是否需要上一曲/下一曲按钮
color: {
type: String,
default: '#169af3'
} //主色调
},
methods: {
//返回prev事件
prev() {
this.$emit('prev')
},
//返回next事件
next() {
this.$emit('next')
},
//格式化时长
format(num) {
return '0'.repeat(2 - String(Math.floor(num / 60)).length) + Math.floor(num / 60) + ':' + '0'.repeat(2 - String(Math.floor(num % 60)).length) + Math.floor(num % 60)
},
//点击播放按钮
play() {
this.paused = false
this.audio.play()
this.loading = true
},
pause() {
this.paused = true
this.audio.pause()
}
},
created() {
if (this.src) {
this.audio.src = this.src
this.autoplay && this.play()
}
this.audio.obeyMuteSwitch = false
//音频进度更新事件
this.audio.onTimeUpdate(() => {
if (!this.seek) {
this.current = this.audio.currentTime
}
if (!this.duration) {
this.duration = this.audio.duration
}
})
//音频播放事件
this.audio.onPlay(() => {
this.paused = false
this.loading = false
})
//音频暂停事件
this.audio.onPause(() => {
this.paused = true
})
//音频结束事件
this.audio.onEnded(() => {
if (this.continue) {
this.next()
} else {
this.paused = true
this.current = 0
}
})
//音频完成更改进度事件
this.audio.onSeeked(() => {
this.seek = false
})
},
beforeDestroy(){
this.audio.destroy()
},
watch: {
src(src, old) {
this.audio.src = src
this.current = 0
this.duration = 0
if (old || this.autoplay) {
this.play()
}
}
}
}
</script>
<style>
@font-face {
font-family: 'icon';
src: url('//at.alicdn.com/t/font_1104838_fxzimc34xw.eot');
src: url('//at.alicdn.com/t/font_1104838_fxzimc34xw.eot?#iefix') format('embedded-opentype'),
url('//at.alicdn.com/t/font_1104838_fxzimc34xw.woff2') format('woff2'),
url('//at.alicdn.com/t/font_1104838_fxzimc34xw.woff') format('woff'),
url('//at.alicdn.com/t/font_1104838_fxzimc34xw.ttf') format('truetype'),
url('//at.alicdn.com/t/font_1104838_fxzimc34xw.svg#iconfont') format('svg');
}
.imt-audio {
width: 680rpx;
margin: 28rpx auto;
padding: 14rpx 30rpx ;
background: #F5F6F9;
border-radius: 20upx;
box-sizing: border-box;
}
.audio-wrapper {
display: flex;
align-items: center;
}
.audio-number {
font-size: 24upx;
line-height: 1;
color: #333;
text-align: center;
}
.audio-slider {
width: 470rpx;
}
.audio-control-wrapper {
display: flex;
justify-content: center;
align-items: center;
font-family: "icon" !important;
}
.audio-control {
width: 60rpx;
height: 60rpx;
}
.audioLoading {
animation: loading 2s;
animation-iteration-count: infinite;
animation-timing-function: linear;
}
@keyframes loading {
to {
transform: rotate(360deg);
}
}
</style>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div id="app"><!--app-html--></div>
<script type="module" src="/main.js"></script>
</body>
</html>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
var L = window.L
L.TileLayer.ChinaProvider = L.TileLayer.extend({
initialize: function(type, options) { // (type, Object)
if (!options) {
options = {}
}
var providers = L.TileLayer.ChinaProvider.providers
var parts = type.split('.')
var providerName = parts[0]
var mapName = parts[1]
var mapType = parts[2]
var url = providers[providerName][mapName][mapType]
options.subdomains = providers[providerName].Subdomains
L.TileLayer.prototype.initialize.call(this, url, options)
}
})
L.TileLayer.ChinaProvider.providers = {
TianDiTu: {
Normal: {
Map: '//t{s}.tianditu.com/DataServer?T=vec_w&X={x}&Y={y}&L={z}&tk={key}',
Annotion: '//t{s}.tianditu.com/DataServer?T=cva_w&X={x}&Y={y}&L={z}&tk={key}'
},
Satellite: {
Map: 'http://t{s}.tianditu.gov.cn/img_w/wmts?tk={key}&SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}',
Annotion: 'http://t{s}.tianditu.gov.cn/img_w/wmts?tk={key}&SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TileMatrix={z}&TileCol={x}&TileRow={y}'
},
Terrain: {
Map: '//t{s}.tianditu.com/DataServer?T=ter_w&X={x}&Y={y}&L={z}&tk={key}',
Annotion: '//t{s}.tianditu.com/DataServer?T=cta_w&X={x}&Y={y}&L={z}&tk={key}'
},
YunNan: {
/* https://maps.ynmap.cn/services/img/map/3857/WMTS?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=tdtYnImg100cm84&STYLE=default&TILEMATRIXSET=default028mm&FORMAT=tiles&TILEMATRIX=18&TILEROW=111233&TILECOL=204031&key= */
Map: 'https://maps.ynmap.cn/services/img/map/3857/WMTS?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=tdtYnImg100cm84&STYLE=default&TILEMATRIXSET=default028mm&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&key={key}',
Annotion: 'http://t{s}.tianditu.com/DataServer?T=cta_w&X={x}&Y={y}&L={z}&tk={key}'
},
Subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
key: '174705aebfe31b79b3587279e211cb9a'
},
MapBox: {
Normal: {
Map: 'https://api.mapbox.com/styles/v1/{user}/{style}/Draft/tiles/256/{z}/{x}/{y}?access_token={token}'
},
Subdomains: []
},
MapABC: {
Normal: {
Map: 'http://emap{s}.mapabc.com/mapabc/maptile?&x={x}&y={y}&z={z}'
},
Subdomains: ['0', '1', '2', '3']
},
GaoDe: {
Normal: {
Map: 'http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}'
},
Satellite: {
Map: 'http://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',
Annotion: 'http://webst0{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}'
},
Subdomains: ['1', '2', '3', '4']
},
GoogleCN: {
Normal: {
Map: 'http://mt{s}.google.cn/vt/lyrs=m&hl=zh-CN&gl=cn&x={x}&y={y}&z={z}'
},
Subdomains: ['1', '2', '3']
},
Geoq: {
Normal: {
Map: 'http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer/tile/{z}/{y}/{x}',
PurplishBlue: 'http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}',
Gray: 'http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetGray/MapServer/tile/{z}/{y}/{x}',
Warm: 'http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetWarm/MapServer/tile/{z}/{y}/{x}'
},
Theme: {
Hydro: 'http://thematic.geoq.cn/arcgis/rest/services/ThematicMaps/WorldHydroMap/MapServer/tile/{z}/{y}/{x}'
},
Subdomains: []
}
}
L.tileLayer.chinaProvider = function(type, options) {
return new L.TileLayer.ChinaProvider(type, options)
}
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
var L = window.L
// 坐标转换
L.CoordConver = function() {
/** 百度转84*/
this.bd09_To_gps84 = function(lng, lat) {
var gcj02 = this.bd09_To_gcj02(lng, lat)
var map84 = this.gcj02_To_gps84(gcj02.lng, gcj02.lat)
return map84
}
/** 84转百度*/
this.gps84_To_bd09 = function(lng, lat) {
var gcj02 = this.gps84_To_gcj02(lng, lat)
var bd09 = this.gcj02_To_bd09(gcj02.lng, gcj02.lat)
return bd09
}
/** 84转火星*/
this.gps84_To_gcj02 = function(lng, lat) {
var dLat = transformLat(lng - 105.0, lat - 35.0)
var dLng = transformLng(lng - 105.0, lat - 35.0)
var radLat = lat / 180.0 * pi
var magic = Math.sin(radLat)
magic = 1 - ee * magic * magic
var sqrtMagic = Math.sqrt(magic)
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi)
dLng = (dLng * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi)
var mgLat = lat + dLat
var mgLng = lng + dLng
var newCoord = {
lng: mgLng,
lat: mgLat
}
return newCoord
}
/** 火星转84*/
this.gcj02_To_gps84 = function(lng, lat) {
var coord = transform(lng, lat)
var lontitude = lng * 2 - coord.lng
var latitude = lat * 2 - coord.lat
var newCoord = {
lng: lontitude,
lat: latitude
}
return newCoord
}
/** 火星转百度*/
this.gcj02_To_bd09 = function(x, y) {
var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi)
var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi)
var bd_lng = z * Math.cos(theta) + 0.0065
var bd_lat = z * Math.sin(theta) + 0.006
var newCoord = {
lng: bd_lng,
lat: bd_lat
}
return newCoord
}
/** 百度转火星*/
this.bd09_To_gcj02 = function(bd_lng, bd_lat) {
var x = bd_lng - 0.0065
var y = bd_lat - 0.006
var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi)
var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi)
var gg_lng = z * Math.cos(theta)
var gg_lat = z * Math.sin(theta)
var newCoord = {
lng: gg_lng,
lat: gg_lat
}
return newCoord
}
var pi = 3.1415926535897932384626
var a = 6378245.0
var ee = 0.00669342162296594323
var x_pi = pi * 3000.0 / 180.0
// var R = 6378137
function transform(lng, lat) {
var dLat = transformLat(lng - 105.0, lat - 35.0)
var dLng = transformLng(lng - 105.0, lat - 35.0)
var radLat = lat / 180.0 * pi
var magic = Math.sin(radLat)
magic = 1 - ee * magic * magic
var sqrtMagic = Math.sqrt(magic)
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi)
dLng = (dLng * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi)
var mgLat = lat + dLat
var mgLng = lng + dLng
var newCoord = {
lng: mgLng,
lat: mgLat
}
return newCoord
}
function transformLat(x, y) {
var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x))
ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0
ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0
ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0
return ret
}
function transformLng(x, y) {
var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x))
ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0
ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0
ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0 * pi)) * 2.0 / 3.0
return ret
}
}
L.coordConver = function() {
return new L.CoordConver()
}
L.tileLayer.chinaProvider = function(type, options) {
options = options || {}
options.corrdType = getCorrdType(type)
return new L.TileLayer.ChinaProvider(type, options)
// 获取坐标类型
function getCorrdType(type) {
var parts = type.split('.')
var providerName = parts[0]
var zbName = 'wgs84'
switch (providerName) {
case 'Geoq':
case 'GaoDe':
case 'Google':
zbName = 'gcj02'
break
case 'Baidu':
zbName = 'bd09'
break
case 'OSM':
case 'TianDiTu':
case 'MapBox':
zbName = 'wgs84'
break
}
return zbName
}
}
L.GridLayer.include({
_setZoomTransform: function(level, _center, zoom) {
var center = _center
if (center !== undefined && this.options) {
if (this.options.corrdType === 'wgs84') {
center = L.coordConver().gcj02_To_gps84(_center.lng, _center.lat)
} else if (this.options.corrdType === 'bd09') {
center = L.coordConver().gcj02_To_bd09(_center.lng, _center.lat)
}
}
var scale = this._map.getZoomScale(zoom, level.zoom)
var translate = level.origin.multiplyBy(scale)
.subtract(this._map._getNewPixelOrigin(center, zoom)).round()
if (L.Browser.any3d) {
L.DomUtil.setTransform(level.el, translate, scale)
} else {
L.DomUtil.setPosition(level.el, translate)
}
},
_getTiledPixelBounds: function(_center) {
var center = _center
if (center !== undefined && this.options) {
if (this.options.corrdType === 'wgs84') {
center = L.coordConver().gcj02_To_gps84(_center.lng, _center.lat)
} else if (this.options.corrdType === 'bd09') {
center = L.coordConver().gcj02_To_bd09(_center.lng, _center.lat)
}
}
var map = this._map
var mapZoom = map._animatingZoom ? Math.max(map._animateToZoom, map.getZoom()) : map.getZoom()
var scale = map.getZoomScale(mapZoom, this._tileZoom)
var pixelCenter = map.project(center, this._tileZoom).floor()
var halfSize = map.getSize().divideBy(scale * 2)
return new L.Bounds(pixelCenter.subtract(halfSize), pixelCenter.add(halfSize))
}
})
This diff is collapsed.
This diff is collapsed.
import App from './App'
// #ifndef VUE3
import Vue from 'vue'
Vue.config.productionTip = false
App.mpType = 'app'
import store from 'store'
import uView from '@/uni_modules/uview-ui'
Vue.prototype.$staticUrl = 'https://xqg.zjhmit.com/hmit-admin/static'
Vue.use(uView);
const app = new Vue({
store,
...App
})
app.$mount()
// #endif
Vue.mixin({
mounted() {
wx.showShareMenu({
menus:['shareAppMessage','shareTimeline']
})
}
})
// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
// #endif
\ No newline at end of file
{
"name" : "xqg-guild-uni",
"appid" : "__UNI__BD498FC",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
/* 5+App特有相关 */
"app-plus" : {
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/* 模块配置 */
"modules" : {},
/* 应用发布信息 */
"distribute" : {
/* android打包配置 */
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios打包配置 */
"ios" : {},
/* SDK配置 */
"sdkConfigs" : {}
}
},
/* 快应用特有相关 */
"quickapp" : {},
/* 小程序特有相关 */
"mp-weixin" : {
"appid" : "wx839f4e52892430bb",
"setting" : {
"urlCheck" : false,
"minified" : true
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "2"
}
{
"name": "图片拖动 缩放 旋转插件",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@babel/runtime": {
"version": "7.21.0",
"resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.21.0.tgz",
"integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==",
"requires": {
"regenerator-runtime": "^0.13.11"
}
},
"call-bind": {
"version": "1.0.2",
"resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
}
},
"copy-text-to-clipboard": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz",
"integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng=="
},
"core-js": {
"version": "3.28.0",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.28.0.tgz",
"integrity": "sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw=="
},
"custom-event-polyfill": {
"version": "1.0.7",
"resolved": "https://registry.npmmirror.com/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz",
"integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w=="
},
"dom7": {
"version": "2.1.5",
"resolved": "https://registry.npmmirror.com/dom7/-/dom7-2.1.5.tgz",
"integrity": "sha512-xnhwVgyOh3eD++/XGtH+5qBwYTgCm0aW91GFgPJ3XG+jlsRLyJivnbP0QmUBFhI+Oaz9FV0s7cxgXHezwOEBYA==",
"requires": {
"ssr-window": "^2.0.0"
},
"dependencies": {
"ssr-window": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-2.0.0.tgz",
"integrity": "sha512-NXzN+/HPObKAx191H3zKlYomE5WrVIkoCB5IaSdvKokxTpjBdWfr0RaP+1Z5KOfDT0ZVz+2tdtiBkhsEQ9p+0A=="
}
}
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
"get-intrinsic": {
"version": "1.2.0",
"resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
"integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.3"
}
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"requires": {
"function-bind": "^1.1.1"
}
},
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"klona": {
"version": "2.0.6",
"resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",
"integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
"dev": true
},
"loadjs": {
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/loadjs/-/loadjs-4.2.0.tgz",
"integrity": "sha512-AgQGZisAlTPbTEzrHPb6q+NYBMD+DP9uvGSIjSUM5uG+0jG15cb8axWpxuOIqrmQjn6scaaH8JwloiP27b2KXA=="
},
"moment": {
"version": "2.29.4",
"resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
},
"mutation-observer": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
"integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
},
"neo-async": {
"version": "2.6.2",
"resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
"object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
},
"object-inspect": {
"version": "1.12.3",
"resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz",
"integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
},
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
"side-channel": "^1.0.4"
}
},
"rangetouch": {
"version": "2.0.1",
"resolved": "https://registry.npmmirror.com/rangetouch/-/rangetouch-2.0.1.tgz",
"integrity": "sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA=="
},
"regenerator-runtime": {
"version": "0.13.11",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
},
"sass-loader": {
"version": "13.2.1",
"resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-13.2.1.tgz",
"integrity": "sha512-VQUrgUa5/waIzMrzyuko3sj5WD9NMsYph91cNICx+OaODbRtLl6To2fswLx8MH2qNxXFqRtpvdPQIa7mE93YOA==",
"dev": true,
"requires": {
"klona": "^2.0.6",
"neo-async": "^2.6.2"
}
},
"side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"requires": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
"object-inspect": "^1.9.0"
}
},
"ssr-window": {
"version": "1.0.1",
"resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-1.0.1.tgz",
"integrity": "sha512-dgFqB+f00LJTEgb6UXhx0h+SrG50LJvti2yMKMqAgzfUmUXZrLSv2fjULF7AWGwK25EXu8+smLR3jYsJQChPsg=="
},
"url-polyfill": {
"version": "1.1.12",
"resolved": "https://registry.npmmirror.com/url-polyfill/-/url-polyfill-1.1.12.tgz",
"integrity": "sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A=="
},
"v-finger-mk42": {
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/v-finger-mk42/-/v-finger-mk42-3.0.0.tgz",
"integrity": "sha512-V3Pz1tF4l4+AXIAebdrPCK7MlkqV4VCfG0O4pEKLprbBu2MN/piKDnqew6uLGL5XdCvsixS78V0C/LkYbm9yqQ=="
},
"vconsole": {
"version": "3.15.0",
"resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.0.tgz",
"integrity": "sha512-8hq7wabPcRucSWQyN7/1tthMawP9JPvM95zgtMHpPknMMMCKj+abpoK7P7oKK4B0qw58C24Mdvo9+raUdpHyVQ==",
"requires": {
"@babel/runtime": "^7.17.2",
"copy-text-to-clipboard": "^3.0.1",
"core-js": "^3.11.0",
"mutation-observer": "^1.0.3"
}
},
"vuex": {
"version": "3.6.2",
"resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz",
"integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw=="
}
}
}
{
"id": "fy-poster",
"name": "图片拖动 缩放 旋转插件",
"version": "1.0.0",
"description": "uni-app 小程序 图片拖动缩放旋转",
"keywords": [
"uni-app",
"小程序",
"图片拖动",
"缩放",
"旋转"
],
"dependencies": {
"qs": "^6.11.0",
"vconsole": "^3.15.0",
"vuex": "^3.6.2"
},
"devDependencies": {
"sass-loader": "^13.2.1"
}
}
{
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
{
"path": "pages/home",
"style": {
"navigationBarTitleText": "首页",
"navigationStyle":"custom"
}
},
{
"path": "pages/map",
"style": {
"navigationBarTitleText": "蟹钳港风貌区智慧导览"
}
},
{
"path": "pages/advertise-book/list",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/slight-detail",
"style": {
"navigationBarTitleText": "点位详情"
}
},
{
"path": "pages/visit-route",
"style": {
"navigationBarTitleText": "浏览路线"
}
},
{
"path": "pages/brief",
"style": {
"navigationBarTitleText": "象山县风貌区简介"
}
},
{
"path": "pages/advertise-book/detail",
"style": {
"navigationBarTitleText": "电子手册"
}
},
{
"path": "pages/advertise-video",
"style": {
"navigationBarTitleText": "宣传视频"
}
},
{
"path": "pages/forward-page",
"style": {
"navigationBarTitleText": "前往"
}
},
{
"path": "pages/visit-page",
"style": {
"navigationBarTitleText": "浏览路线"
}
},
{
"path": "pages/vr-preview",
"style": {
"navigationBarTitleText": "VR预览"
}
},
{
"path": "pages/brief/xqg",
"style": {
"navigationBarTitleText": "潮隐海山蟹钳港县域风貌区"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {}
}
<template>
<view>
<web-view :src="src"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
src: ''
}
},
methods: {
},
onLoad(opt) {
this.src = this.$staticUrl + opt.src
}
}
</script>
<style>
</style>
<template>
<view class="advertise-box" :class="place === 'xqg' ? 'xqg-bg' : 'hba-bg'">
<view class="title-box">
{{title}}
</view>
<scroll-view scroll-y="true" class="book-list">
<view class="shelf-list" v-for="shelf in bookList">
<view class="book-content" >
<view class="book-item" @click="clickHandle(book)" v-for="book in shelf" :key="book.id">
<view class="cover-box" :class="book.type" style="bottom: 60rpx;">
<image :src="`${staticUrl}${book.coverSrc}`"></image>
</view>
<view class="_title" :style="{'height': place === 'hba' ? '90rpx' : '72rpx'}">【{{book.bookTitle}}{{title}}</view>
</view>
</view>
<view class="shelf-bg"></view>
</view>
</scroll-view>
<view class="book-count-container">
<view class="count-box">{{count}}</view>
</view>
</view>
</template>
<script>
import { getGuildbookList } from '@/api/index.js'
const nameMap = {
'xqg': '蟹钳港',
'hba': '黄避岙'
}
const placeMap = {
'xqg': '象山潮隐海山蟹钳港县域风貌区',
'hba': '象山墙头-黄避岙“斑斓海岸”县域风貌区'
}
const typeListMap = {
'xqg' : ['video', 'pdf', 'pdf', 'pdf', 'doc', 'img', 'pdf', 'doc'],
'hba' : ['video', 'pdf', 'pdf', 'doc', 'img', 'doc', 'pdf','empty']
}
export default({
data() {
return {
place: '',
title: '',
downloadIng: false,
bookList: []
}
},
computed: {
staticUrl() {
return this.$staticUrl
},
count() {
return this.bookList.flat(Infinity).length
}
},
onLoad(opt) {
this.place = opt.place
this.title = placeMap[opt.place]
uni.setNavigationBarTitle({
title: this.title
})
this.getList()
},
methods: {
getList() {
getGuildbookList().then(res => {
if (res.code === 0) {
let typeList = typeListMap[this.place]
res.data.filter(item => {
return item.remark === nameMap[this.place]
}).forEach((item, index) => {
item.type = typeList[index]
if (index % 2 === 0) {
this.bookList.push([])
}
this.bookList[Math.floor(index / 2)].push(item)
})
}
})
},
clickHandle(item) {
if (item.type === 'video') {
this.checkVideo(item)
} else if (item.type === 'img') {
this.checkImg(item)
} else {
this.checkBook(item)
}
},
checkVideo() {
uni.navigateTo({
url: '../advertise-video?place=' + this.place
})
},
checkImg(item) {
uni.previewImage({
urls:[this.$staticUrl + item.bookSrc],
current:0
})
},
checkBook(item) {
let _this = this
if (this.downloadIng) {
return
}
uni.getSystemInfo({
success: res => {
if (res.platform === 'android') {
_this.downloadIng = true
uni.showLoading({
title: '手册加载中,请稍后'
})
wx.downloadFile({
url: this.$staticUrl + item.bookSrc,
success: function(res) {
_this.downloadIng = false
uni.hideLoading()
const filePath = res.tempFilePath;
wx.openDocument({
filePath: filePath,
success: function(res) {
console.log('打开文档成功');
}
});
},
fail: function(err) {
uni.showToast({
title: err
})
},
complete() {
_this.downloadIng = false
}
});
} else {
uni.navigateTo({
url: '/pages/advertise-book/detail?src=' + item.bookSrc
})
}
}
});
}
}
})
</script>
<style lang="scss" scoped>
.xqg-bg{
background: url('https://xqg.zjhmit.com/xqg/handbook/xqg_bg.jpg') no-repeat;
background-size: 100% 100%;
}
.hba-bg{
background: url('https://xqg.zjhmit.com/xqg/handbook/hba_bg.jpg') no-repeat;
background-size: 100% 100%;
}
.advertise-box{
width: 100%;
.title-box{
height: 83rpx;
width: 100%;
background-color: #EFE4D6;
color: #000;
font-size: 32rpx;
line-height: 83rpx;
text-align: center;
}
.book-list{
min-height: calc(100vh - 83rpx);
.shelf-list{
position: relative;
height: 412rpx;
width: 100%;
.book-content{
z-index: 99;
position: absolute;
width: 710rpx;
left: 20rpx;
display: flex;
padding: 0 60rpx;
box-sizing: border-box;
justify-content: space-between;
bottom: 129rpx;
.book-item{
position: relative;
._title{
width: 235rpx;
border-radius: 7rpx;
padding: 0 16rpx;
box-sizing: border-box;
background: #3F2B10;
color: #E2CBB3;
font-size: 20rpx;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
}
.cover-box{
z-index: -1;
position: absolute;
}
.video{
width: 235rpx;
height: 170rpx;
background: url('../../static/img/video_bookbg.png') no-repeat;
background-size: 100% 100%;
left: 0rpx;
image{
width: 227rpx;height: 170rpx;
}
}
.pdf{
width: 203rpx;
height: 194rpx;
background: url('../../static/img/wj_03.png') no-repeat;
background-size: 100% 100%;
left: 16rpx;
image{
width: 192rpx;height: 192rpx;
}
}
.img{
width: 203rpx;
height: 194rpx;
background: url('../../static/img/wj_03.png') no-repeat;
background-size: 100% 100%;
left: 16rpx;
image{
width: 192rpx;height: 192rpx;
}
}
.doc{
width: 180rpx;
height: 236rpx;
background: url('../../static/img/wj_01.png') no-repeat;
background-size: 100% 100%;
left: 30rpx;
image{
width: 164rpx;height: 236rpx;
}
}
}
}
.shelf-bg{
z-index: 98;
left: 20rpx;
position: absolute;
bottom: 0;
height: 201rpx;
width: 710rpx;
background: url('../../static/img/shelf.png') no-repeat;
background-size: 100% 100%;
}
}
}
.book-count-container{
z-index: 200;
position: fixed;
bottom: 0;
height: 97rpx;
width: 100%;
background-color: #fff;
display: flex;
align-items: center;
justify-content: center;
.count-box{
width: 162rpx;
height: 50rpx;
background-color: #ECECEC;
border-radius: 25rpx;
color: #000;
font-size: 25rpx;
text-align: center;
line-height: 50rpx;
}
}
}
</style>
\ No newline at end of file
<template>
<video id="myVideo" :src="videoSrc"
@error="videoErrorCallback" :danmu-list="danmuList" :poster="posterSrc" controls></video>
</template>
<script>
import { getGuildbookList } from '../api/index.js'
const placeMap = {
'hba': '黄避岙',
'xqg': '蟹钳港'
}
export default({
data() {
return {
place: '',
posterSrc: '',
videoSrc: ''
}
},
methods: {
getVideoInfo() {
getGuildbookList().then(res => {
if (res.code === 0) {
let info = res.data.filter(item => {
return item.remark === placeMap[this.place] && item.bookSrc.includes('mp4')
})
this.posterSrc = this.$staticUrl + info[0].coverSrc
this.videoSrc = this.$staticUrl + info[0].bookSrc
}
})
},
},
onLoad(opt) {
this.place = opt.place
this.getVideoInfo()
}
})
</script>
<style lang="scss" scoped>
#myVideo{
height: 100vh;
width: 100%;
}
</style>
\ No newline at end of file
<template>
<view class="brief">
<u-swiper
height="530"
:list="list"
previousMargin="30"
nextMargin="30"
:autoplay="false"
bgColor="#ffffff"
@change="change"
@click="click"
></u-swiper>
</view>
</template>
<script>
import uSwiper from '@/uni_modules/uview-ui/components/u-swiper/u-swiper.vue'
export default({
components: {
uSwiper
},
data() {
return {
list: [
'https://xqg.zjhmit.com/xqg/handbook/brief1.jpg',
'https://xqg.zjhmit.com/xqg/handbook/brief2.jpg',
'https://xqg.zjhmit.com/xqg/handbook/brief3.jpg',
'https://xqg.zjhmit.com/xqg/handbook/brief4.jpg',
],
downloadIng: false,
bookList: [
{
title: '宁波象山县潮隐海山蟹钳港县域风貌区',
src: '【形象手册】宁波象山县潮隐海山蟹钳港县域风貌区.pdf'
},
{
title: '象山墙头-黄避岙“斑斓海岸”县域风貌区',
src: '【宣传手册】象山墙头-黄避岙“斑斓海岸”县域风貌区.pdf'
},
{
title: '象山县爵溪—石浦“东海扬帆”县域风貌区',
src: '【宣传手册】象山县爵溪—石浦“东海扬帆”县域风貌区.pdf'
},
{
title: '象山县石浦渔港古城传统风貌区',
src: 'spyg.pdf'
},
]
}
},
methods: {
change() {
},
click(index) {
if (index === 0) {
uni.navigateTo({
url: 'brief/xqg'
})
} else {
let _this = this
if (this.downloadIng) {
return
}
uni.getSystemInfo({
success: res => {
if (res.platform === 'android') {
_this.downloadIng = true
uni.showLoading({
title: '手册加载中,请稍后'
})
wx.downloadFile({
url: 'https://xqg.zjhmit.com/xqg/handbook/' + _this.bookList[index].src,
success: function(res) {
_this.downloadIng = false
uni.hideLoading()
const filePath = res.tempFilePath;
wx.openDocument({
filePath: filePath,
success: function(res) {
console.log('打开文档成功');
}
});
},
fail: function(err) {
uni.showToast({
title: err
})
},
complete() {
_this.downloadIng = false
}
});
} else {
uni.navigateTo({
url: '/pages/advertise-book/detail?src=' + _this.bookList[index].src
})
}
}
});
}
}
}
})
</script>
<style lang="scss" scoped>
.brief{
padding-top: 150rpx;
}
</style>
\ No newline at end of file
<template>
<view class="xqg-brief">
<video id="myVideo" :src="src"
@error="videoErrorCallback" :danmu-list="danmuList" poster="https://xqg.zjhmit.com/xqg/handbook/video.jpg" controls></video>
<image class="banner" src="https://xqg.zjhmit.com/xqg/handbook/xqg-brief-banner.jpg"></image>
<view class="content">
<p>象山潮隐海山蟹钳港县域风貌区位于浙江东部沿海,地处象山半岛内港片区,包含定塘镇、新桥镇、泗洲头镇及茅洋乡,总面积约12600公顷。风貌区全域山形秀、滩涂广、田园丰、岸线美,乡村农渔文旅产业兴旺发达,多元文化在此交融,非遗文化底蕴丰厚,是极具潮隐气质的山海渔乡片区。以“潮隐西海岸、共富样板区”为发展主题,风貌区打造全国“海上两山”生态文明展示窗口、全省“文旅赋能共同富裕”示范片区、宁波现代化滨海大都市最美图景地、象山北纬30°最美海岸线示范段。</p>
<image src="https://xqg.zjhmit.com/xqg/handbook/xqg1.jpg"></image>
<p>蟹钳港县域风貌区2020年以来共计实施37项城乡风貌相关建设工程,共计涉及投资5.58亿元。其中,2022年涉及投资3.07亿元。风貌区聚焦一个体验山水人文的绿道网络、一个鲜明的文化标识、一个落实未来社区理念的乡村新社区等重点内容,推进新桥西海岸沿线绿道项目,环蟹钳港公路全段标识标牌体系项目、墩岙村未来乡村创建等一系列建设工程,基于小切口进入、小空间优化、小场景营造、小尺度提升和小创意植入,全面提升蟹钳港区域城乡风貌品质,推进全域共同富裕。</p>
<image src="https://xqg.zjhmit.com/xqg/handbook/xqg2.jpg"></image>
<p>蟹钳港县域风貌区建设充分挖掘当地“二月二”“五月廿七”“宁波走书”等非遗文化,打造乡情文化馆、非遗文化传承所等非遗文化展示空间,构建环蟹钳港区域非遗文化地图,同时倡导各相关乡镇将当地居民日常生产生活行为作为最好的风貌活态展示。目前已有近20位非遗传承人正式入驻红庙街非遗文化街区,打造茅洋老粮仓竹根雕非遗馆、泗洲头镇乡情文化馆、泗水云品竹根雕展览基地三大非遗文化馆,四个乡镇共计14处非遗传承基地;同时打造墩岙村、灵岙村、上盘村、定山村共计4处非遗民宿,结合蟹钳港区域文旅产业发展,推进“花墙火龙果基地”“灵岩山滨海森林运动智谷”等项目建设,打造渔船餐厅、特色餐馆,利用象山影视城,构建影视旅游全产业链,成为长三角文旅产业超级IP,打造“浙江第一壮观”灵岩山景区和浙江省旅游风情小镇茅洋乡山海乐园,切实拓宽增收渠道。</p>
</view>
</view>
</template>
<script>
export default({
data() {
return {
src: 'https://xqg.zjhmit.com/xqg/handbook/20200218114723HDu3hhxqIT.mp4',
}
},
methods: {
}
})
</script>
<style lang="scss" scoped>
.xqg-brief{
#myVideo{
width: 100%;
}
.banner{
width: 100%;
}
.content{
padding: 30rpx;
image{
width: 100%;
margin: 20rpx auto;
}
}
}
</style>
\ No newline at end of file
<template>
</template>
<script>
export default({
onLoad(option) {
console.log('option', 'aa')
let lat = option.location.split(',')[0]
let lng = option.location.split(',')[1]
uni.openLocation({
latitude: Number(lat),
longitude: Number(lng),
success: function () {
uni.setStorageSync('hasForward', 1)
}
});
},
onShow() {
let hasForward = uni.getStorageSync('hasForward')
if (hasForward) {
uni.removeStorageSync('hasForward')
uni.navigateBack()
}
}
})
</script>
<style>
</style>
\ No newline at end of file
<template>
<view class="home">
<image class="home-banner" src="https://xqg.zjhmit.com/xqg/handbook/index_top_banner.jpg"></image>
<view class="brief-box" v-for="item in placeList" @click="toMap(item)">
<text>{{item.name}}县域风貌区</text>
</view>
<!-- <view class="brief-box" @click="toBrief">
<image class="brief-icon" src="../static/img/index_tb_icon.png"></image>
<text>象山县风貌区简介</text>
</view>
<view class="map-list">
<view class="map-item" v-for="item in placeList" @click="toMap(item)">
<view class="_name">{{item.name}}</view>
<view class="_type">{{item.type}}</view>
</view>
</view> -->
</view>
</template>
<script>
export default {
data() {
return {
placeList: [
{
name: '象山潮隐海山蟹钳港',
type: '县域风貌区',
url: 'map'
},
{
name: '象山墙头-黄避岙“斑斓海岸”',
type: '县域风貌区',
url: 'advertise-book/list?place=hba'
},
// {
// name: '爵溪-石浦“东海扬帆”',
// type: '县域风貌区'
// },
// {
// name: '石浦渔港古城',
// type: '传统风貌区'
// },
]
}
},
methods: {
toBrief() {
uni.navigateTo({
url: 'brief'
})
},
toMap(item) {
if (item.url) {
uni.navigateTo({
url:item.url
})
} else {
uni.showToast({
icon: 'none',
title: '建设中'
})
}
}
},
onLoad() {
},
onShow() {
}
}
</script>
<style lang="scss" scoped>
.home{
.home-banner{
width: 100%;
height: 774rpx;
}
.brief-box{
width: 694rpx;
height: 146rpx;
background-color: #F1F7EF ;
color: #76B062;
font-size: 33rpx;
display: flex;
align-items: center;
justify-content: center;
margin: 39rpx auto 38rpx;
border-radius: 21rpx;
.brief-icon{
height: 47rpx;
width: 43rpx;
margin-right: 18rpx;
}
}
.map-list{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
padding: 0 28rpx;
.map-item{
height: 146rpx;
width: 333rpx;
background-color: #F1F7EF ;
color: #76B062;
font-size: 29rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border-radius: 21rpx;
margin-bottom: 38rpx;
._name{
white-space: nowrap;
}
._type{
}
}
}
}
</style>
<template>
<view class="map">
<web-view :src="src"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
baseSrc: 'https://xqg.zjhmit.com/#/',
src: 'https://xqg.zjhmit.com/#/'
// baseSrc: 'http://192.168.10.175:8080/#/',
// src: 'http://192.168.10.175:8080/#/'
}
},
methods: {
},
onLoad(opt) {
if (opt.q) {
console.log(opt)
const q = decodeURIComponent(opt.q)
let scan = q.split('?scan=')[1]
if (scan == 1) {
this.src = this.baseSrc + '?scan=1'
}
}
},
onShow() {
}
}
</script>
<style>
</style>
<template>
<view class="slight-detail" :style="{'padding-top': navHeight + 'px'}" v-if="slightInfo !== null">
<view class="banner-box" >
<image class="banner" :src="`${imgUrlPre}/static${slightInfo.coverSrc}`"></image>
<image class="vr-btn" v-if="slightInfo.guideVrInfoDTOList.length > 0" @click="preview" src="../static/img/vr_btn.png"></image>
</view>
<imt-audio :control="false" :src="`${imgUrlPre}/static${slightInfo.audioSrc}`"></imt-audio>
<view class="detail-title">
{{slightInfo.guideTitle}}
</view>
<view class="desc-box">
<rich-text :nodes="slightInfo.mainText" class="detail-desc">
</rich-text>
</view>
<view class="operate-box">
<button class="operate-item" open-type="share" @click="share">
<img class="_icon" src="../static/img/share_icon.png"/>
分享
</button>
<button class="operate-item" @click="forward">
<img class="_icon" src="../static/img/nav_icon.png"/>
前往
</button>
</view>
<image class="back-icon" @click="back" src="../static/img/back_icon.png"></image>
</view>
</template>
<script>
import ImtAudio from '@/components/imt-audio/imt-audio.vue'
import { getSlightDetail } from '../api/index.js'
export default {
data() {
return {
player: null,
slightInfo: null
}
},
components: {
ImtAudio
},
computed: {
imgUrlPre() {
return 'https://xqg.zjhmit.com/hmit-admin'
},
},
methods: {
back() {
uni.navigateBack()
},
preview() {
if (this.slightInfo.guideVrInfoDTOList.length > 0) {
uni.navigateTo({
url: 'vr-preview?path=' + this.slightInfo.guideVrInfoDTOList[0].vrSrc
})
}
},
getInfo(id) {
getSlightDetail(id).then(res => {
if (res.code === 0) {
this.slightInfo = res.data
}
})
},
forward() {
let lat = this.slightInfo.pointLocation.split(',')[0]
let lng = this.slightInfo.pointLocation.split(',')[1]
uni.openLocation({
latitude: Number(lat),
longitude: Number(lng),
success: function () {
console.log('success');
}
});
},
share() {
uni.share({
provider: "weixin",
scene: "WXSceneSession",
type: 1,
summary: "我正在使用HBuilderX开发uni-app,赶紧跟我一起来体验!",
success: function (res) {
console.log("success:" + JSON.stringify(res));
},
fail: function (err) {
console.log("fail:" + JSON.stringify(err));
}
})
}
},
onLoad(opt) {
if (opt.q) {
const q = decodeURIComponent(opt.q)
let id = q.split('?id=')[1]
this.getInfo(id)
} else {
this.getInfo(opt.id)
}
}
}
</script>
<style>
.plyr__controls{
background-color: #F5F6F9 !important;
}
</style>
<style lang="scss" scoped>
.slight-detail{
padding-bottom: 80rpx;
.back-icon{
position: fixed;
bottom: 140rpx;
left: 35rpx;
width: 140rpx;
height: 140rpx;
}
.banner-box{
width: 100%;
height: 398rpx;
position: relative;
.banner{
width: 100%;
height: 398rpx;
}
.vr-btn{
position: absolute;
top: 50%;
left: 50%;
width: 140rpx;
height: 140rpx;
margin-top: -70rpx;
margin-left: -70rpx;
}
}
.introduce-box{
padding-top: 15rpx;
border-radius: 18rpx;
height: 125rpx;
width: 681rpx;
margin: 28rpx auto;
background-color: #F5F6F9;
}
.detail-title{
padding-left: 42rpx;
color: #333;
font-size: 35rpx;
font-weight: bold;
}
.desc-box{
padding: 40rpx 35rpx 120rpx;
}
.operate-box{
position: fixed;
bottom: 0rpx;
width: 100%;
left: 0;
background-color: #fff;
font-size: 25rpx;
height: 118rpx;
display: flex;
border-top: 1px solid #F1F1F1;
button::after{
border: none;
}
.operate-item{
height: 98rpx;
flex: 1;
display: flex;
align-items: center;
justify-content: center;
background-color: #fff;
color: #333 !important;
font-size: 30rpx !important;
border-radius: 0 !important;
._icon{
margin-right: 14rpx;
height: 30rpx;
width: 30rpx;
}
}
}
}
</style>
\ No newline at end of file
<template>
<view>
<web-view :src="src"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
baseSrc: 'https://xqg.zjhmit.com/#/VisitMap',
src: 'https://xqg.zjhmit.com/#/VisitMap'
// baseSrc: 'http://192.168.10.175:8080/#/VisitMap',
// src: 'http://192.168.10.175:8080/#/VisitMap'
}
},
methods: {
},
onLoad(opt) {
let routeIndex = opt.routeIndex
console.log(routeIndex)
this.src = this.baseSrc += '?routeIndex=' + routeIndex
},
onShow() {
}
}
</script>
<style>
</style>
<template>
<view class="visit-route">
<view class="route-list">
<view class="route-item" @click="chooseRoute(item, index)" v-for="(item, index) in routeList" :key="index">
<img class="_banner" :src="`${imgUrlPre}/static${item.coverSrc}`" />
<view class="item-text">
<view class="_name">{{item.routeTitle}}</view>
<view class="_info">
<text>{{item.visitNum}}个景点</text>
<text style="margin: 0 30rpx;">{{item.visitTime}}小时</text>
<text>{{item.distance}}公里</text>
</view>
<text class="_tag">{{item.routeTag}}</text>
</view>
</view>
</view>
</view>
</template>
<script>
import { getVisitRoutes } from '../api/index.js'
export default {
computed: {
imgUrlPre() {
return 'https://xqg.zjhmit.com/hmit-admin'
}
},
data() {
return {
routeList: []
}
},
methods: {
chooseRoute(item, index) {
uni.navigateTo({
url: 'visit-page?routeIndex=' + index
})
},
getList() {
getVisitRoutes().then(res => {
if (res.code === 0) {
this.routeList = res.data.list
this.routeList.forEach(i => {
i.visitNum = i.guideIds.split(',').length
i.visitTime = i.remark.split(',')[0]
i.distance = i.remark.split(',')[1]
})
}
})
}
},
mounted() {
this.getList()
}
}
</script>
<style lang="scss" scoped>
.visit-route{
.route-list{
padding: 28rpx;
.route-item{
padding: 28rpx 0;
display: flex;
align-items: center;
color: #333;
border-bottom: 1px solid #EBEBEB;
._banner{
width: 208rpx;
height: 146rpx;
border-radius: 14rpx;
}
.item-text{
margin-left: 28rpx;
._name{
font-size: 32rpx;
font-weight: bold;
}
._info{
margin: 10rpx 0 6rpx;
text{
font-size: 22rpx;
}
}
._tag{
padding: 6rpx 12rpx;
font-size: 20rpx;
color: #76b062;
background-color: #f1f7ef;
border-radius: 7rpx;
}
}
}
}
}
</style>
\ No newline at end of file
<template>
<view>
<web-view :src="src"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
baseSrc: 'https://xqg.zjhmit.com/#/VrPreview',
src: 'https://xqg.zjhmit.com/#/VrPreview'
// baseSrc: 'http://192.168.10.175:8080/#/VrPreview',
// src: 'http://192.168.10.175:8080/#/VrPreview'
}
},
methods: {
},
onLoad(opt) {
let path = opt.path
this.src = this.baseSrc += '?path=' + path
},
onShow() {
}
}
</script>
<style>
</style>
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
statusBarHeight: 0,
navHeight: 0,
tabbarHeight: 0,
},
mutations: {
SET_NAV_HEIGHT: (state, val) => {
state.navHeight = val
},
SET_TABBAR_HEIGHT: (state, val) => {
state.tabbarHeight = val
},
SET_STATUS_BAR_HEIGHT: (state, val) => {
state.statusBarHeight = val
},
SET_TAB_INDEX: (state, val) => {
state.tempTabIndex = val
}
},
actions: {
},
modules: {
}
})
This diff is collapsed.
MIT License
Copyright (c) 2020 www.uviewui.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<template>
<uvText
:type="type"
:show="show"
:text="text"
:prefixIcon="prefixIcon"
:suffixIcon="suffixIcon"
:mode="mode"
:href="href"
:format="format"
:call="call"
:openType="openType"
:bold="bold"
:block="block"
:lines="lines"
:color="color"
:decoration="decoration"
:size="size"
:iconStyle="iconStyle"
:margin="margin"
:lineHeight="lineHeight"
:align="align"
:wordWrap="wordWrap"
:customStyle="customStyle"
@click="$emit('click')"
></uvText>
</template>
<script>
/**
* 此组件存在的理由是,在nvue下,u-text被uni-app官方占用了,u-text在nvue中相当于input组件
* 所以在nvue下,取名为u--input,内部其实还是u-text.vue,只不过做一层中转
* 不使用v-bind="$attrs",而是分开独立写传参,是因为微信小程序不支持此写法
*/
import uvText from "../u-text/u-text.vue";
import props from "../u-text/props.js";
export default {
name: "u--text",
mixins: [uni.$u.mpMixin, props, uni.$u.mixin],
components: {
uvText,
},
};
</script>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment