diff --git a/config.js b/config.js
index 1aa3ac1..87db025 100644
--- a/config.js
+++ b/config.js
@@ -12,8 +12,8 @@ module.exports = {
// product env
// apiUrl: "http://10.24.4.14:80/",
// apiUrl: "http://10.24.4.156/",
- apiUrl: "./kk/",
- // apiUrl: "http://192.168.66.219:8081/kk/",
+ // apiUrl: "./kk/",
+ apiUrl: "http://192.168.66.219:8081/kk/",
/**
* 是否启用商城设置缓存
diff --git a/js_sdk/mmmm-image-tools/index.js b/js_sdk/mmmm-image-tools/index.js
new file mode 100644
index 0000000..acf40bc
--- /dev/null
+++ b/js_sdk/mmmm-image-tools/index.js
@@ -0,0 +1,196 @@
+function getLocalFilePath(path) {
+ if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) {
+ return path
+ }
+ if (path.indexOf('file://') === 0) {
+ return path
+ }
+ if (path.indexOf('/storage/emulated/0/') === 0) {
+ return path
+ }
+ if (path.indexOf('/') === 0) {
+ var localFilePath = plus.io.convertAbsoluteFileSystem(path)
+ if (localFilePath !== path) {
+ return localFilePath
+ } else {
+ path = path.substr(1)
+ }
+ }
+ return '_www/' + path
+}
+
+function dataUrlToBase64(str) {
+ var array = str.split(',')
+ return array[array.length - 1]
+}
+
+var index = 0
+function getNewFileId() {
+ return Date.now() + String(index++)
+}
+
+function biggerThan(v1, v2) {
+ var v1Array = v1.split('.')
+ var v2Array = v2.split('.')
+ var update = false
+ for (var index = 0; index < v2Array.length; index++) {
+ var diff = v1Array[index] - v2Array[index]
+ if (diff !== 0) {
+ update = diff > 0
+ break
+ }
+ }
+ return update
+}
+
+export function pathToBase64(path) {
+ return new Promise(function(resolve, reject) {
+ if (typeof window === 'object' && 'document' in window) {
+ if (typeof FileReader === 'function') {
+ var xhr = new XMLHttpRequest()
+ xhr.open('GET', path, true)
+ xhr.responseType = 'blob'
+ xhr.onload = function() {
+ if (this.status === 200) {
+ let fileReader = new FileReader()
+ fileReader.onload = function(e) {
+ resolve(e.target.result)
+ }
+ fileReader.onerror = reject
+ fileReader.readAsDataURL(this.response)
+ }
+ }
+ xhr.onerror = reject
+ xhr.send()
+ return
+ }
+ var canvas = document.createElement('canvas')
+ var c2x = canvas.getContext('2d')
+ var img = new Image
+ img.onload = function() {
+ canvas.width = img.width
+ canvas.height = img.height
+ c2x.drawImage(img, 0, 0)
+ resolve(canvas.toDataURL())
+ canvas.height = canvas.width = 0
+ }
+ img.onerror = reject
+ img.src = path
+ return
+ }
+ if (typeof plus === 'object') {
+ plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), function(entry) {
+ entry.file(function(file) {
+ var fileReader = new plus.io.FileReader()
+ fileReader.onload = function(data) {
+ resolve(data.target.result)
+ }
+ fileReader.onerror = function(error) {
+ reject(error)
+ }
+ fileReader.readAsDataURL(file)
+ }, function(error) {
+ reject(error)
+ })
+ }, function(error) {
+ reject(error)
+ })
+ return
+ }
+ if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+ wx.getFileSystemManager().readFile({
+ filePath: path,
+ encoding: 'base64',
+ success: function(res) {
+ resolve('data:image/png;base64,' + res.data)
+ },
+ fail: function(error) {
+ reject(error)
+ }
+ })
+ return
+ }
+ reject(new Error('not support'))
+ })
+}
+
+export function base64ToPath(base64) {
+ return new Promise(function(resolve, reject) {
+ if (typeof window === 'object' && 'document' in window) {
+ base64 = base64.split(',')
+ var type = base64[0].match(/:(.*?);/)[1]
+ var str = atob(base64[1])
+ var n = str.length
+ var array = new Uint8Array(n)
+ while (n--) {
+ array[n] = str.charCodeAt(n)
+ }
+ return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
+ }
+ var extName = base64.split(',')[0].match(/data\:\S+\/(\S+);/)
+ if (extName) {
+ extName = extName[1]
+ } else {
+ reject(new Error('base64 error'))
+ }
+ var fileName = getNewFileId() + '.' + extName
+ if (typeof plus === 'object') {
+ var basePath = '_doc'
+ var dirPath = 'uniapp_temp'
+ var filePath = basePath + '/' + dirPath + '/' + fileName
+ if (!biggerThan(plus.os.name === 'Android' ? '1.9.9.80627' : '1.9.9.80472', plus.runtime.innerVersion)) {
+ plus.io.resolveLocalFileSystemURL(basePath, function(entry) {
+ entry.getDirectory(dirPath, {
+ create: true,
+ exclusive: false,
+ }, function(entry) {
+ entry.getFile(fileName, {
+ create: true,
+ exclusive: false,
+ }, function(entry) {
+ entry.createWriter(function(writer) {
+ writer.onwrite = function() {
+ resolve(filePath)
+ }
+ writer.onerror = reject
+ writer.seek(0)
+ writer.writeAsBinary(dataUrlToBase64(base64))
+ }, reject)
+ }, reject)
+ }, reject)
+ }, reject)
+ return
+ }
+ var bitmap = new plus.nativeObj.Bitmap(fileName)
+ bitmap.loadBase64Data(base64, function() {
+ bitmap.save(filePath, {}, function() {
+ bitmap.clear()
+ resolve(filePath)
+ }, function(error) {
+ bitmap.clear()
+ reject(error)
+ })
+ }, function(error) {
+ bitmap.clear()
+ reject(error)
+ })
+ return
+ }
+ if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
+ var filePath = wx.env.USER_DATA_PATH + '/' + fileName
+ wx.getFileSystemManager().writeFile({
+ filePath: filePath,
+ data: dataUrlToBase64(base64),
+ encoding: 'base64',
+ success: function() {
+ resolve(filePath)
+ },
+ fail: function(error) {
+ reject(error)
+ }
+ })
+ return
+ }
+ reject(new Error('not support'))
+ })
+}
\ No newline at end of file
diff --git a/js_sdk/mmmm-image-tools/package.json b/js_sdk/mmmm-image-tools/package.json
new file mode 100644
index 0000000..e8b9c0a
--- /dev/null
+++ b/js_sdk/mmmm-image-tools/package.json
@@ -0,0 +1,11 @@
+{
+ "id": "mmmm-image-tools",
+ "name": "image-tools",
+ "version": "1.4.0",
+ "description": "图像转换工具,可用于图像和base64的转换",
+ "keywords": [
+ "base64",
+ "保存",
+ "图像"
+ ]
+}
\ No newline at end of file
diff --git a/pages.json b/pages.json
index f64d130..dce29f7 100644
--- a/pages.json
+++ b/pages.json
@@ -45,6 +45,8 @@
"path": "pages/category/consulting/list",
"style": {
"navigationBarTitleText": "资讯中心",
+ "navigationBarBackgroundColor": "#1c223b",
+ "navigationBarTextStyle": "white",
"enablePullDownRefresh" : false
}
},
diff --git a/pages/category/consulting/detail.vue b/pages/category/consulting/detail.vue
index b52d988..b04c0de 100644
--- a/pages/category/consulting/detail.vue
+++ b/pages/category/consulting/detail.vue
@@ -4,13 +4,13 @@
-
+
@@ -22,9 +22,11 @@
{{list.contextTitle}}
无标题信息
+ 发布时间:{{list.contextCreationTime}}
-
+
+
@@ -57,6 +59,9 @@ import * as CategoryApi from '@/api/category'
import Empty from '@/components/empty'
import Secondary from './../components/secondary'
import { rpx2px,base64ToUint8Array} from '@/utils/util'
+import readmore from 'utils/json/readmore.json'
+// 以下路径需根据项目实际情况填写
+import {pathToBase64,base64ToPath} from '@/js_sdk/mmmm-image-tools/index.js'
//分页大小
let limit=4;
@@ -78,6 +83,7 @@ export default {
informationList: [],
// 分类列表
list: [],
+ // list: readmore.data,
// 分类模板设置
setting: {},
// 正在加载中
@@ -92,6 +98,8 @@ export default {
scrollTop: 0,
// 分类id
contextId: '',
+ // 图片列表
+ imgList:[]
}
},
@@ -121,6 +129,32 @@ export default {
this.setListHeight()
},
methods: {
+ previewImage(){
+ // 富文本全部内容
+ let richText = this.list.context
+ // 获取 img 标签数组
+ let tagsImage = richText.match(/
]+>/g)
+ let base64Arr = []
+ for (let i = 0; i < tagsImage.length; i++) {
+ tagsImage[i].replace(/
]*src=['"]([^'"]+)[^>]*>/gi, function(match, capture) {
+ base64Arr.push(capture)
+ })
+ }
+ // 数组倒序 从第一张开始预览
+ // base64Arr = base64Arr.reverse()
+ // console.log(base64Arr)
+ // 串行,base64转换成临时url
+ base64Arr.reduce((promise, path) => promise.then(res => base64ToPath(path).then(base64 => (res.push(base64), res))), Promise.resolve([])).then(res => {
+ // 临时url
+ this.imgList = res
+ this.$nextTick(()=>{
+ this.$refs.previewImage.open(res); // 传入当前选中的图片地址(小程序必须添加$nextTick,解决组件首次加载无图)
+ })
+ })
+ .catch(error => {
+ console.error(error)
+ })
+ },
// 设置列表内容的高度
setListHeight() {
const { windowHeight } = uni.getSystemInfoSync()
@@ -149,13 +183,13 @@ export default {
// 资讯中心
getConsultingContextSelection() {
const app = this
- CategoryApi.consultingContextSelection().then(res=>{
- if (res.resultCode == '00000000') {
- app.informationList = res.data
- } else {
- app.$error('获取资讯信息失败')
- }
- })
+ // CategoryApi.consultingContextSelection().then(res=>{
+ // if (res.resultCode == '00000000') {
+ // app.informationList = res.data
+ // } else {
+ // app.$error('获取资讯信息失败')
+ // }
+ // })
},
}
}
@@ -200,7 +234,7 @@ page {
width: 100%;
.cate-cont {
- width: 96%;
+ width: 100%;
height: 100%;
padding: 16rpx;
margin-top: 20rpx;
@@ -220,9 +254,15 @@ page {
border-radius: 10rpx;
padding: 0rpx 20rpx 0rpx 20rpx;
color: #0b0b0b;
- background-color: #a8a8a8;
+ font-size: 30rpx;
+ // background-color: #a8a8a8;
text-align: center;
}
+ .cate-cont-time{
+ text-align: center;
+ margin-top: 30rpx;
+ margin-bottom: 30rpx;
+ }
}
}
diff --git a/pages/category/consulting/list.vue b/pages/category/consulting/list.vue
index 1d15f4c..359b6a2 100644
--- a/pages/category/consulting/list.vue
+++ b/pages/category/consulting/list.vue
@@ -1,16 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -20,16 +34,16 @@
- 标题名称:
- {{item.contextTitle}}
-
-
- 发布时间:
- {{item.contextCreationTime}}
-
-
-
+ 标题名称:
+ {{item.contextTitle}}
+
+
+ 发布时间:
+ {{item.contextCreationTime}}
+
+ 阅读全文
+
@@ -37,7 +51,7 @@
-
+
@@ -64,7 +78,8 @@
import Empty from '@/components/empty'
import Secondary from './../components/secondary'
import { rpx2px,base64ToUint8Array} from '@/utils/util'
-
+ import information from 'utils/json/information.json'
+
//分页大小
let pageSize = 10
@@ -85,8 +100,10 @@
PageCategoryStyleEnum,
// 分类列表
informationList: [],
+ // informationList: information.data,
// 分类列表
- list: [],
+ list: [],
+ // list: information.data.pageDataList,
// 分类模板设置
setting: {},
// 正在加载中
@@ -112,6 +129,7 @@
tip: '暂无记录'
}
},
+ searchValue: '',
}
},
@@ -124,6 +142,10 @@
// 加载页面数据
this.getConsultingContextSelection()
this.onRefreshPage()
+
+ uni.setNavigationBarTitle({
+ title: options.name
+ });
},
/**
@@ -141,6 +163,15 @@
this.setListHeight()
},
methods: {
+ // 搜索
+ async onSearch() {
+ if (this.searchValue == '') {
+ this.$error('请输入搜索关键词');
+ } else {
+ await this.getGoodsList()
+ await this.getHomeListImage()
+ }
+ },
// 设置列表内容的高度
setListHeight() {
const { windowHeight } = uni.getSystemInfoSync()
@@ -186,6 +217,9 @@
// 查询分类 获取列表
getCatList(pageIndex = 1){
const app = this
+ if (app.searchValue != '') {
+ param.goods_name = app.searchValue
+ }
let param = {
pageIndex : pageIndex,
pageRows : pageSize,
@@ -208,18 +242,18 @@
// 资讯中心
getConsultingContextSelection() {
const app = this
- CategoryApi.consultingContextSelection().then(res=>{
- if (res.resultCode == '00000000') {
- app.informationList = res.data
- app.informationList.forEach((items,key) => {
- if (items.consultingId === app.consultingId) {
- app.curIndex = key
- }
- })
- } else {
- app.$error('获取资讯信息失败')
- }
- })
+ // CategoryApi.consultingContextSelection().then(res=>{
+ // if (res.resultCode == '00000000') {
+ // app.informationList = res.data
+ // app.informationList.forEach((items,key) => {
+ // if (items.consultingId === app.consultingId) {
+ // app.curIndex = key
+ // }
+ // })
+ // } else {
+ // app.$error('获取资讯信息失败')
+ // }
+ // })
},
}
}
@@ -232,7 +266,6 @@
}
+
\ No newline at end of file
diff --git a/uni_modules/q-previewImage/changelog.md b/uni_modules/q-previewImage/changelog.md
new file mode 100644
index 0000000..cd4026c
--- /dev/null
+++ b/uni_modules/q-previewImage/changelog.md
@@ -0,0 +1,24 @@
+## 1.1.1(2023-08-01)
+优化文档
+## 1.1.0(2023-08-01)
+优化文档
+## 1.0.9(2023-07-10)
+优化文档
+## 1.0.8(2023-06-25)
+优化文档
+## 1.0.7(2023-06-25)
+优化文档
+## 1.0.6(2023-05-26)
+优化文档
+## 1.0.5(2023-05-22)
+优化文档
+## 1.0.4(2023-04-30)
+新增图片放大功能,解决原生组件和tabbar导航栏等无法覆盖的问题
+## 1.0.3(2023-04-28)
+优化文档
+## 1.0.2(2023-04-28)
+优化文档
+## 1.0.1(2023-04-28)
+新增长按事件
+## 1.0.0(2023-04-28)
+插件上线
diff --git a/uni_modules/q-previewImage/components/q-previewImage/q-previewImage.vue b/uni_modules/q-previewImage/components/q-previewImage/q-previewImage.vue
new file mode 100644
index 0000000..338581c
--- /dev/null
+++ b/uni_modules/q-previewImage/components/q-previewImage/q-previewImage.vue
@@ -0,0 +1,136 @@
+
+
+
+
+ {{ current + 1 }} / {{ urls.length }}
+
+ ×
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/q-previewImage/package.json b/uni_modules/q-previewImage/package.json
new file mode 100644
index 0000000..3550c3f
--- /dev/null
+++ b/uni_modules/q-previewImage/package.json
@@ -0,0 +1,81 @@
+{
+ "id": "q-previewImage",
+ "displayName": "图片预览、多图左右滑动、图片放大、支持覆盖原生组件、原生导航栏、tabbar",
+ "version": "1.1.1",
+ "description": "最简洁的模拟图片预览,支持长按事件,多图左右滑动,大图上下滑动查看,支持图片放大,支持覆盖原生组件/原生导航栏/tabbar 支持vue2/vue3/app/小程序/h5",
+ "keywords": [
+ "图片预览"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.4.14"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "u",
+ "微信浏览器(Android)": "u",
+ "QQ浏览器(Android)": "u"
+ },
+ "H5-pc": {
+ "Chrome": "u",
+ "IE": "u",
+ "Edge": "u",
+ "Firefox": "u",
+ "Safari": "u"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/q-previewImage/readme.md b/uni_modules/q-previewImage/readme.md
new file mode 100644
index 0000000..76c9508
--- /dev/null
+++ b/uni_modules/q-previewImage/readme.md
@@ -0,0 +1,244 @@
+# 最简洁的模拟图片预览,支持长按事件,多图左右滑动,大图上下滑动查看,支持图片放大,支持覆盖原生组件/原生导航栏/tabbar 支持vue2/vue3/app/小程序/h5
+
+ - 为了解决项目中因一些特殊原因无法使用uni.previewImage,例如App.onShow或者页面的oShow中写了方法。
+ - 如果用uni.previewImage,每次预览图片都会进到onShow的方法里
+ - 可以基本实现官方的预览图片功能,但是体验不如uni.previewImage()
+ - 如没有特殊原因,还是推荐官方的uni.previewImage()
+
+## 安装指引
+
+##1. 在插件市场打开本插件页面,在右侧点击`使用 HBuilderX 导入插件`,选择要导入的项目点击确定
+
+##2. 使用方法 vue2写法
+
+```
+
+
+
+
+
+
+
+
+
+
+
+```
+
+##3. vue3 setup写法
+
+```
+
+
+
+
+
+
+
+
+
+
+
+```
+
+##4. 项目示例 (一般返回的数据图片是以逗号或特殊字符分割的字符串,点击时就需要传两个参数,一个是图片数组,一个是当前图片的index)
+## 注意q-previewImage不要写在循环体中,imgs其实就是用来存放当前图片的数组,每次点击每次赋值就行
+
+```
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+
+## 如果插件对您有一点帮助,请给个五星好评,感谢支持
+
+
+## 如有问题,请加qq 965969604
\ No newline at end of file
diff --git a/utils/json/information.json b/utils/json/information.json
new file mode 100644
index 0000000..ef50972
--- /dev/null
+++ b/utils/json/information.json
@@ -0,0 +1,93 @@
+{
+ "resultCode": "00000000",
+ "resultMsg": "SUCCESS",
+ "data": {
+ "pageRows": 10,
+ "pageIndex": 1,
+ "pageOrder": null,
+ "pageDataSize": 324,
+ "pageSize": 33,
+ "pageDataList": [
+ {
+ "contextId": "972135119269793820",
+ "contextConsultingId": "762033233176170504",
+ "contextTitle": "公告丨全国文化大数据交易中心文化资源数据标的成交公告",
+ "contextCreationTime": "2024-04-01 11:18:59",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ },
+ {
+ "contextId": "971038085523574834",
+ "contextConsultingId": "762033233176170504",
+ "contextTitle": "数据超市丨《水浒传》系列精品文化资源数据类标的:吴学究双掌连环计 宋公明三打祝家庄",
+ "contextCreationTime": "2024-03-29 10:39:46",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ },
+ {
+ "contextId": "969606242278445102",
+ "contextConsultingId": "762033233176170504",
+ "contextTitle": "公告丨全国文化大数据交易中心交易主体进场公告【腾讯云计算(北京)有限责任公司】",
+ "contextCreationTime": "2024-03-25 11:50:08",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ },
+ {
+ "contextId": "968499733108756490",
+ "contextConsultingId": "762033233176170504",
+ "contextTitle": "公告丨全国文化大数据交易中心交易主体进场公告【深圳市其域创新科技有限公司】",
+ "contextCreationTime": "2024-03-22 10:33:15",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ },
+ {
+ "contextId": "967135031296397373",
+ "contextConsultingId": "762033233176170504",
+ "contextTitle": "数据超市丨《水浒传》系列精品文化资源数据类标的:卢俊义分兵歙州道 宋公明大战乌龙岭",
+ "contextCreationTime": "2024-03-18 16:10:25",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ },
+ {
+ "contextId": "962763066871779370",
+ "contextConsultingId": "762033233176170504",
+ "contextTitle": "数据超市丨《三国演义》系列精品文化资源数据类标的:曹操平定汉中地,张辽威震逍遥津",
+ "contextCreationTime": "2024-03-06 14:37:48",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ },
+ {
+ "contextId": "960885697982631998",
+ "contextConsultingId": "762033233176170504",
+ "contextTitle": "数据超市丨《红楼梦》系列精品文化资源数据类标的:“真假”宝玉会面,地藏庵劝惜春出家",
+ "contextCreationTime": "2024-03-01 10:17:48",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ },
+ {
+ "contextId": "959808218010357765",
+ "contextConsultingId": "762033233176170504",
+ "contextTitle": "热血水浒丨柴进门招天下客,林冲棒打洪教头",
+ "contextCreationTime": "2024-02-27 10:56:17",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ },
+ {
+ "contextId": "957250035354046480",
+ "contextConsultingId": "762033233176170504",
+ "contextTitle": "梦回红楼丨比通灵金莺微露意,探宝钗黛玉半含酸",
+ "contextCreationTime": "2024-02-20 09:30:58",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ },
+ {
+ "contextId": "952901732248195122",
+ "contextConsultingId": "762033233176170504",
+ "contextTitle": "公告丨全国文化大数据交易中心交易主体进场公告【西安当时商业运营管理有限责任公司】",
+ "contextCreationTime": "2024-02-08 09:32:22",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/utils/json/readmore.json b/utils/json/readmore.json
new file mode 100644
index 0000000..2370a43
--- /dev/null
+++ b/utils/json/readmore.json
@@ -0,0 +1,13 @@
+{
+ "resultCode": "00000000",
+ "resultMsg": "SUCCESS",
+ "data": {
+ "contextId": "857975839223058489",
+ "contextConsultingId": "762033263727480878",
+ "contextTitle": "加快推进数字文化治理现代化",
+ "context": "





",
+ "contextCreationTime": "2023-05-22 10:50:46",
+ "contextStatus": 0,
+ "contextUsername": "chanpin"
+ }
+}
\ No newline at end of file