提交 d87bfb13 编写于 作者: yma16's avatar yma16

perf:动态配置页面文字和页面跳转

上级 37fe5428
...@@ -4,4 +4,4 @@ ...@@ -4,4 +4,4 @@
### 云开发小程序 ### 云开发小程序
# 接入markdown # 接入markdown博客
\ No newline at end of file \ No newline at end of file
// app.js // app.js
App({ App({
homePageArticleId:32, homePageArticleId: 32,
lifePageArricleId:35, lifePageArricleId: 35,
wxProgramConfig: {
authorPageConfig: {
title: "记忆碎片",
userImageUrl: 'https://yongma16.xyz/staticFile/common/img/logo.png',
loginTitle: '点击授权',
detailInfo: '关于:code笔记',
nextPage: "/pages/home/home",
userPrefix: '昵称:',
userName: '月牙天冲',
designPlaceholder: '自定义名称',
joinTitle: '进入',
isOldVersion: false
},
homePageConfig: {
headBackground: [
{ class: 'header-swiper-one', content: '数据分析', articleId: 32, img: 'https://yongma16.xyz/staticFile/common/img/data.png' },
{ class: 'header-swiper-two', content: '前端开发', articleId: 33, img: 'https://yongma16.xyz/staticFile/common/img/front.png' },
{ class: 'header-swiper-three', content: '全栈开发', articleId: 34, img: 'https://yongma16.xyz/staticFile/common/img/back.png' }],
bottomStyleConfig: {
tabMenuText: '记忆碎片',
homePageText: '主页',
blogText: '博客',
apiText: 'openai',
aboutText: '关于'
},
bottomBtn: 'target',
},
apiPageConfig: {
articleId: 44,
aiConfig: {
avatarUrl: 'https://yongma16.xyz/staticFile/common/img/aiTop.jpg',
bgUrl: 'https://yongma16.xyz/staticFile/common/img/aiBg.jpg'
},
mode: 'openAiUse',
option: 'introduce,openAiUse',
layoutConfig: {
introduceText: 'api介绍',
useText: '使用',
returnText: '返回介绍',
sendText: '发送',
searchText: '关键词查询'
}
},
aboutPageConfig: {
articleId: 35
}
},
loginStatus: '',
globalData: { globalData: {
userInfo: '', userInfo: '',
hasUserInfo:false, hasUserInfo: false,
geoJson:{}, geoJson: {},
hotData:[], hotData: [],
/** /**
* @type object[{name:'',adcode:''}] * @type object[{name:'',adcode:''}]
*/ */
geoAdcodeMap:[], geoAdcodeMap: [],
targetItem:{}, targetItem: {},
}, },
remoteConfig:{ remoteConfig: {
baseUrl:'https://yongma16.xyz' baseUrl: 'https://yongma16.xyz'
}, },
// 引入`towxml3.0`解析方法 // 引入`towxml3.0`解析方法
towxml:require('/towxml/index'), towxml: require('/towxml/index'),
getUserProfile: function (e) { getUserProfile: function (e) {
// 推荐使用 wx.getUserProfile 获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认 // 推荐使用 wx.getUserProfile 获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
// 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗 // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
...@@ -32,7 +80,25 @@ App({ ...@@ -32,7 +80,25 @@ App({
}) })
}, },
onLaunch: function (options) { onLaunch: function (options) {
console.log('start') console.log('onLaunch', options)
// 获取配置项目
const that = this
wx.request({
url: 'https://yongma16.xyz/api/dictModel/index/',
method: 'POST',
data: {
kind: 'wxConfig'
}, success: function (res) {
console.log('res', res)
if (res.data.data) {
console.log('JSON.parse(res.data.data)', JSON.parse(res.data.data[0].option))
that.wxProgramConfig = JSON.parse(res.data.data[0].option)
}
},
fail: function (r) {
console.log('r', r)
}
})
if (!wx.cloud) { if (!wx.cloud) {
console.error('请使用 2.2.3 或以上的基础库以使用云能力'); console.error('请使用 2.2.3 或以上的基础库以使用云能力');
} else { } else {
...@@ -44,50 +110,42 @@ App({ ...@@ -44,50 +110,42 @@ App({
// env: 'my-env-id', // env: 'my-env-id',
traceUser: true, traceUser: true,
}); });
} wx.removeStorageSync('currentUserInfo');
// 用户授权 wx.navigateTo({
wx.getUserProfile({ url: 'pages/index/index',
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 success: function (res) {
success: (res) => { // 通过 eventChannel 向被打开页面传送数据
console.info('用户授权', res) console.log('res', res)
this.setData({ }
globalData:{userInfo: res.userInfo,hasUserInfo: true}, });
const currentUserInfo = wx.getStorageSync('currentUserInfo')
if (currentUserInfo && currentUserInfo.nickName) {
console.log('success')
} else {
wx.navigateTo({
url: 'pages/index/index',
success: function (res) {
// 通过 eventChannel 向被打开页面传送数据
console.log('res', res)
}
}) })
wx.setStorageSync('currentUserInfo', res.userInfo)
}
})
// 用户登录
let host = "https://example.com/onLogin"
wx.login({
success(res) {
console.log('res login', res)
console.log('res code', res.code)
// if (res.code) {
// //发起网络请求
// wx.request({
// url: host,
// data: {
// code: res.code
// }
// })
// } else {
// console.log('登录失败!' + res.errMsg)
// }
}
})
let setting = null;
wx.getSetting({
success(res) {
setting = res
console.log('res', res)
} }
})
this.globalData = { setting: setting }; // 用户登录
console.log('onLaunch', options) const that = this
wx.login({
success(res) {
console.log('res login', res)
that.globalData.loginStatus = res
}
})
wx.getSetting({
success(res) {
console.log('res set', res)
that.globalData.setting = res
}
})
}
}, },
onShow(options) { onShow(options) {
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
"backgroundColor": "#F6F6F6", "backgroundColor": "#F6F6F6",
"backgroundTextStyle": "light", "backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#262626", "navigationBarBackgroundColor": "#262626",
"navigationBarTitleText": "阳光罐里的日记", "navigationBarTitleText": "yma16博客",
"navigationBarTextStyle": "white" "navigationBarTextStyle": "white"
}, },
"sitemapLocation": "sitemap.json", "sitemapLocation": "sitemap.json",
......
// pages/future/future.js // pages/future/future.js
const app = getApp(); const app = getApp();
const baseUrl = app.remoteConfig.baseUrl; const baseUrl = app.remoteConfig.baseUrl;
const baseArticleId = app.wxProgramConfig.apiPageConfig.articleId;
const baseMode = app.wxProgramConfig.apiPageConfig.mode;
Component({ Component({
/** /**
* 继承父级样式 * 继承父级样式
*/ */
...@@ -10,80 +11,104 @@ Component({ ...@@ -10,80 +11,104 @@ Component({
addGlobalClass: true, addGlobalClass: true,
}, },
// 属性定义 // 属性定义
properties: { properties: {
// 用户信息 // 用户信息
userInfo: { userInfo: {
type: Object, type: Object,
value: ()=>{ value: () => {
return { return {
}
},
observer: function(newVal, oldVal) {
// 属性值变化时执行
console.log(newVal,oldVal,'change')
} }
} },
}, }
},
/** /**
*组件的初始数据 *组件的初始数据
*/ */
data: { data: {
mode:'introduce', scrollTop: 0,
article:{}, mode: baseMode,
articleId:44, article: {},
isShowOenAi:false, articleId: baseArticleId,
baseUrl:'https://yongma16.xyz/api/', isShowOenAi: false,
baseCloudUrl:'https://yongma16.xyz/cloudApi/', baseUrl: 'https://yongma16.xyz/api/',
baseCloudPath:'openAiRecord/add', baseCloudUrl: 'https://yongma16.xyz/cloudApi/',
path:'article/blog/', baseCloudPath: 'openAiRecord/add',
currentUserInfo:{ path: 'article/blog/',
nickName:'', currentUserInfo: {
avatarUrl:'' nickName: '',
avatarUrl: ''
}, },
aiConfig:{ aiConfig: {
avatarUrl:'https://yongma16.xyz/staticFile/common/img/aiTop.jpg', avatarUrl: 'https://yongma16.xyz/staticFile/common/img/aiTop.jpg',
bgUrl:'https://yongma16.xyz/staticFile/common/img/aiBg.jpg' bgUrl: 'https://yongma16.xyz/staticFile/common/img/aiBg.jpg'
}, },
searchOpenAiText:'', searchOpenAiText: '',
responseText:'', responseText: '',
// questions,answer,index // questions,answer,index
chatObjConfig:{ chatObjConfig: {
option:[{ option: [{
question:'', question: '',
answer:'', answer: '',
isEdit:true isEdit: true
}], }],
currentIndex:0 currentIndex: 0
},
layoutConfig:{
introduceText:'api介绍',
useText:'使用',
returnText:'返回介绍',
sendText:'发送',
searchText:'关键词查询'
}
},
observers: {
mode: function (newVal, oldVal) {
// 属性值变化时执行
console.log(newVal, oldVal, 'change')
wx.showLoading({
title: '加载中',
})
// 在当前同步流程结束后,下一个时间片执行
wx.nextTick(() => {
wx.hideLoading({
success: (res) => {},
})
// 触发父组件事件
this.triggerEvent('updateBottomNavigation', newVal === 'introduce')
})
} }
}, },
lifetimes: { lifetimes: {
// 生命周期函数,可以为函数,或一个在 methods 段中定义的方法名 // 生命周期函数,可以为函数,或一个在 methods 段中定义的方法名
attached: function () { attached: function () {
this.getRemoteArticle(this.data.articleId) this.getRemoteArticle(this.data.articleId)
const openAiOptions=wx.getStorageSync('openAiOptions') const openAiOptions = wx.getStorageSync('openAiOptions')
if(openAiOptions){ if (openAiOptions) {
this.setData( this.setData(
{ {
chatObjConfig:openAiOptions chatObjConfig: openAiOptions,
mode: app.wxProgramConfig.apiPageConfig.mode,
layoutConfig:app.wxProgramConfig.apiPageConfig.layoutConfig,
} }
) )
} }
const currentUserInfo=wx.getStorageSync('currentUserInfo') const currentUserInfo = wx.getStorageSync('currentUserInfo')
if(currentUserInfo&&currentUserInfo.nickName){ if (currentUserInfo && currentUserInfo.nickName) {
console.log('currentUserInfo',currentUserInfo) console.log('currentUserInfo', currentUserInfo)
this.setData( this.setData(
{ {
currentUserInfo:currentUserInfo currentUserInfo: currentUserInfo
} }
) )
this.setData({ this.setData({
isShowOenAi:true isShowOenAi: true
}) })
} }
}, },
moved: function () { }, moved: function () { },
detached: function () { detached: function () {
...@@ -92,96 +117,108 @@ Component({ ...@@ -92,96 +117,108 @@ Component({
}, },
methods: { methods: {
createOpenRecord(params){ upper(e) {
const headers = {'Content-Type':'application/json;charset=UTF-8'} console.log('upper e', e)
},
lower(e) {
console.log('lower e', e)
},
scroll(e) {
console.log('scroll e', e)
},
createOpenRecord(params) {
const headers = { 'Content-Type': 'application/json;charset=UTF-8' }
wx.request({ wx.request({
url: this.data.baseCloudUrl + this.data.baseCloudPath, url: this.data.baseCloudUrl + this.data.baseCloudPath,
headers: headers, headers: headers,
data:params, data: params,
method: 'POST', method: 'POST',
success:(res=>{ success: (res => {
console.log('cloud res',res) console.log('cloud res', res)
}), }),
fail:r=>{ fail: r => {
console.log('cloud r',r) console.log('cloud r', r)
} }
}) })
}, },
scrollToBottom(){ scrollToBottom() {
const viewComponent = this.getEle('#chat-container-id') const index=this.data.chatObjConfig.option.length-1
console.log('viewComponent',viewComponent) this.setData({
toView:`chat-mode${index}`
})
}, },
getRemoteArticle:function(id){ getRemoteArticle: function (id) {
this.setData({ this.setData({
isLoading:true isLoading: true
}) })
const baseUrl=this.data.baseUrl const baseUrl = this.data.baseUrl
const path=this.data.path const path = this.data.path
const headers = {'Content-Type':'application/json;charset=UTF-8'} const headers = { 'Content-Type': 'application/json;charset=UTF-8' }
const that=this const that = this
const params={ const params = {
id:id id: id
} }
wx.request({ wx.request({
url: baseUrl+path, url: baseUrl + path,
headers:headers, headers: headers,
data:params, data: params,
method:'POST', method: 'POST',
success: (res) => { success: (res) => {
const data=res.data const data = res.data
const articleStr=data&&data.article&&data.article const articleStr = data && data.article && data.article
const markdownText = app.towxml(articleStr,'markdown',{ const markdownText = app.towxml(articleStr, 'markdown', {
       theme:'light', //主题 dark 黑色,light白色,不填默认light theme: 'light', //主题 dark 黑色,light白色,不填默认light
       base: baseUrl+path, base: baseUrl + path,
events:{ //为元素绑定的事件方法 events: { //为元素绑定的事件方法
tap:e => { tap: e => {
console.log('tap',e); console.log('tap', e);
}, },
change:e => { change: e => {
console.log('todo',e); console.log('todo', e);
} }
} }
}); });
that.setData({ that.setData({
isLoading:false, isLoading: false,
article:markdownText article: markdownText
}) })
} }
}); });
}, },
changeMode(e){ changeMode(e) {
const {mode}=e.currentTarget.dataset const { mode } = e.currentTarget.dataset
console.log(mode,'mode') console.log(mode, 'mode')
this.setData({ this.setData({
mode:mode mode: mode
}) })
}, },
bindKeyInput(e) { bindKeyInput(e) {
const {columnIndex}=e.currentTarget.dataset const { columnIndex } = e.currentTarget.dataset
console.log('this.data.chatObjConfig',this.data.chatObjConfig) console.log('this.data.chatObjConfig', this.data.chatObjConfig)
const option=this.data.chatObjConfig.option const option = this.data.chatObjConfig.option
option.some((item,index)=>{ option.some((item, index) => {
if(columnIndex===index){ if (columnIndex === index) {
item.question=e.detail.value item.question = e.detail.value
item.isEdit=true item.isEdit = true
return true return true
} }
return false return false
}) })
this.setData({ this.setData({
searchOpenAiText:e.detail.value, searchOpenAiText: e.detail.value,
chatObjConfig:{ chatObjConfig: {
option:option, option: option,
currentIndex:columnIndex currentIndex: columnIndex
} }
}) })
}, },
search(e){ search(e) {
console.log(this.data.searchOpenAiText) console.log(this.data.searchOpenAiText)
if(!this.data.searchOpenAiText){ this.scrollToBottom()
if (!this.data.searchOpenAiText) {
wx.showModal({ wx.showModal({
cancelColor: 'cancelColor', cancelColor: 'cancelColor',
title:'请输入!' title: '请输入!'
}) })
return return
} }
...@@ -194,52 +231,52 @@ Component({ ...@@ -194,52 +231,52 @@ Component({
console.log(e) console.log(e)
const path = '/common-api/searchOpenAiText/' const path = '/common-api/searchOpenAiText/'
const headers = { 'Content-Type': 'application/json;charset=UTF-8' } const headers = { 'Content-Type': 'application/json;charset=UTF-8' }
const params={ const params = {
"text":this.data.searchOpenAiText "text": this.data.searchOpenAiText
} }
const thisBack=this const thisBack = this
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
wx.request({ wx.request({
url: baseUrl + path, url: baseUrl + path,
headers: headers, headers: headers,
data:params, data: params,
method: 'GET', method: 'GET',
success: (res) => { success: (res) => {
console.log(res,'res') console.log(res, 'res')
const data=res.data.data const data = res.data.data
const option=thisBack.data.chatObjConfig.option const option = thisBack.data.chatObjConfig.option
const currentIndex=thisBack.data.chatObjConfig.currentIndex const currentIndex = thisBack.data.chatObjConfig.currentIndex
const choices=data.choices const choices = data.choices
console.log('choices',choices) console.log('choices', choices)
const answer=choices?choices.map(choicesItem=>{return choicesItem.text}).join('\n'):'。。。未知' const answer = choices ? choices.map(choicesItem => { return choicesItem.text }).join('\n') : '。。。未知'
option.some((item,index)=>{ option.some((item, index) => {
if(currentIndex===index){ if (currentIndex === index) {
item.answer=answer item.answer = answer
item.isEdit=false item.isEdit = false
return true return true
} }
return false return false
}) })
thisBack.createOpenRecord({ thisBack.createOpenRecord({
wx_name:thisBack.data.currentUserInfo.nickName, wx_name: thisBack.data.currentUserInfo.nickName,
wx_img:thisBack.data.currentUserInfo.avatarUrl, wx_img: thisBack.data.currentUserInfo.avatarUrl,
search_text:params.text, search_text: params.text,
search_response:answer search_response: answer
}) })
const chatObjConfig={ const chatObjConfig = {
option:option, option: option,
currentIndex:currentIndex+1 currentIndex: currentIndex + 1
} }
option.push({ option.push({
question:'', question: '',
answer:'', answer: '',
isEdit:true isEdit: true
}) })
thisBack.setData( thisBack.setData(
{ {
isLoading: false, isLoading: false,
searchOpenAiText:'', searchOpenAiText: '',
chatObjConfig:chatObjConfig chatObjConfig: chatObjConfig
} }
) )
wx.hideLoading() wx.hideLoading()
......
{ {
"usingComponents": { "usingComponents": {
"geoMap":"/components/visualComponent/geoMap/geoMap",
"lineChart":"/components/visualComponent/lineChart/lineChart",
"blockInfo":"/components/base/blockInfo/blockInfo",
"towxml":"/towxml/towxml" "towxml":"/towxml/towxml"
} }
} }
...@@ -9,58 +9,60 @@ ...@@ -9,58 +9,60 @@
<view class="header-btn" class="{{btnType==='blockInfo'? 'actived':'btn-default'}}" bindtap="clickHeadBtn" data-btn-type='blockInfo'>分类信息</view> <view class="header-btn" class="{{btnType==='blockInfo'? 'actived':'btn-default'}}" bindtap="clickHeadBtn" data-btn-type='blockInfo'>分类信息</view>
</view> --> </view> -->
<view class="form-container-introduce" wx:if="{{mode==='introduce'}}"> <view class="form-container-introduce" wx:if="{{mode==='introduce'}}">
<view class="header-box" style="display: flex;"> <view class="header-box" style="display: flex;">
<view style="width: 50%;" wx:if="{{isShowOenAi}}"> <view style="width: {{isShowOenAi? '50%':'100%'}}">
<button style="width: 100%;" type="primary" style="background: rgb(8, 183, 252);" loading="{{isLoading}}">api介绍</button> <button style="width: 100%;" type="primary" style="background: rgb(8, 183, 252);" loading="{{isLoading}}">{{layoutConfig.introduceText}}</button>
</view> </view>
<view style="width: 100%;" wx:else> <view style="width:50%" wx:if="{{isShowOenAi}}">
<button style="width: 100%;" type="primary" style="background: rgb(8, 183, 252);" loading="{{isLoading}}">api介绍</button> <button style="width: 100%;" type="primary" style="background: rgb(0, 114, 221);" bindtap="changeMode" loading="{{isLoading}}" data-mode='openAiUse'>{{layoutConfig.useText}}</button>
</view> </view>
<view style="width:50%" wx:if="{{isShowOenAi}}"> </view>
<button style="width: 100%;" type="primary" style="background: rgb(0, 114, 221);" bindtap="changeMode" loading="{{isLoading}}" data-mode='openAiUse'>使用</button> <view class="loading" wx:if="{{isLoading}}">
</view> <view class="loader-child" />
</view> <view class="loader-child" />
<view class="container-box-article"> <view class="loader-child" />
<towxml nodes="{{article}}"/> </view>
</view> <view class="container-box-article">
<towxml nodes="{{article}}" />
</view>
</view> </view>
<view class="form-container-api" wx:if="{{mode==='openAiUse'}}"> <view class="form-container-api" wx:if="{{mode==='openAiUse'}}">
<view> <view>
<button style="width: 100%;" type="primary" bindtap="changeMode" loading="{{isLoading}}" data-mode='introduce'>返回介绍</button> <button style="width: 100%;background-color: #0758c1;" type="primary" bindtap="changeMode" loading="{{isLoading}}" data-mode='introduce'>{{layoutConfig.returnText}}</button>
</view> </view>
<view class="chat-container" id="chat-container-id"> <view class="chat-container" id="chat-container-id" style="width: 100%;">
<view wx:for="{{ chatObjConfig.option }}" wx:for-index="index" wx:for-item="item" wx:key="*this"> <scroll-view scroll-y="true" class="scroll-answer" scroll-with-animation bindscrolltoupper="upper" bindscrolltolower="lower" bindscroll="scroll" scroll-into-view="{{toView}}" scroll-top="{{scrollTop}}">
<view class="form-request"> <view wx:for="{{ chatObjConfig.option }}" wx:for-index="index" wx:for-item="item" wx:key="*this" id="chat-mode{{index}}">
<view wx:if="{{item.isEdit}}"> <view class="form-request">
<image class="user-image" src="{{currentUserInfo.avatarUrl}}"></image> <view wx:if="{{item.isEdit}}">
<view style="display: inline;">({{currentUserInfo.nickName}}): </view> <image class="user-image" src="{{currentUserInfo.avatarUrl}}"></image>
<input bindinput="bindKeyInput" style="display: inline;" placeholder="关键词查询" data-column-index="{{index}}" disabled="{{isLoading}}" /> <view style="display: inline;">({{currentUserInfo.nickName}}):$ </view>
<input bindinput="bindKeyInput" style="display: inline;" placeholder="{{layoutConfig.searchText}}" data-column-index="{{index}}" disabled="{{isLoading}}" />
</view>
<view wx:else class='questioned'>
<view>
<image class="user-image" src="{{currentUserInfo.avatarUrl}}"></image> ({{currentUserInfo.nickName}}):$ {{item.question}}
</view>
</view>
</view> </view>
<view wx:else class='questioned'> <view class="form-response">
<view> <view class='questioned'>
<image class="user-image" src="{{currentUserInfo.avatarUrl}}"></image> ({{currentUserInfo.nickName}}):$ {{item.question}} <image class="ai-image" src="{{aiConfig.avatarUrl}}"></image>
(openai):$ {{item.answer}}
</view> </view>
</view> </view>
</view> </view>
<view class="form-response"> <view class="form-submit" wx:if="{{mode==='openAiUse'}}" style="width: 100%;">
<view class='questioned'>
<image class="ai-image" src="{{aiConfig.avatarUrl}}"></image>
(openai):$ {{item.answer}}
</view>
</view> </view>
</view> </scroll-view>
<view class="form-submit" wx:if="{{mode==='openAiUse'}}">
<button style="width: 100%;" type="primary" bindtap="search" loading="{{isLoading}}">发送</button> <button style="width: 100%;;background-color: #0758c1;" type="primary" bindtap="search" loading="{{isLoading}}">{{layoutConfig.sendText}}</button>
</view>
</view> </view>
</view> </view>
<view class="loading" wx:if="{{isLoading}}">
<view class="loader-child" />
<view class="loader-child" />
<view class="loader-child" />
</view>
<view class="content-container" wx:if="{{!isLoading}}"> <view class="content-container" wx:if="{{!isLoading}}">
<!-- <geoMap wx:if="{{btnType==='map'}}" ></geoMap> <!-- <geoMap wx:if="{{btnType==='map'}}" ></geoMap>
<lineChart wx:elif="{{btnType==='line'}}" bindtap="clickBottomBtn"></lineChart> <lineChart wx:elif="{{btnType==='line'}}" bindtap="clickBottomBtn"></lineChart>
......
...@@ -3,10 +3,13 @@ ...@@ -3,10 +3,13 @@
position: relative; position: relative;
width: 100vw; width: 100vw;
height: 100vh; height: 100vh;
background: linear-gradient(to right, rgba(1, 41, 116, 0.1) 1px, transparent 1px), linear-gradient(to bottom, rgba(1, 41, 116, 0.1) 1px, transparent 1px); /* background: linear-gradient(to right, rgba(1, 41, 116, 0.1) 1px, transparent 1px), linear-gradient(to bottom, rgba(1, 41, 116, 0.1) 1px, transparent 1px);
background-repeat: repeat; background-repeat: repeat;
background-size: 10px 10px; background-size: 10px 10px;
border: 1px solid #01c4ff; border: 1px solid #01c4ff; */
background-image: url('https://yongma16.xyz/staticFile/common/img/aiBg.jpg');
background-repeat: no-repeat;
background-size: cover;
overflow: hidden; overflow: hidden;
box-sizing: border-box; box-sizing: border-box;
} }
...@@ -101,9 +104,8 @@ button { ...@@ -101,9 +104,8 @@ button {
display: block; display: block;
width: 100%; width: 100%;
color: #07c160; color: #07c160;
background-color: rgb(37, 0, 97); background-color: rgba(37, 0, 97,.9);
line-height: 50px; line-height: 50px;
padding: 5px;
} }
.form-response { .form-response {
...@@ -113,7 +115,9 @@ button { ...@@ -113,7 +115,9 @@ button {
display: block; display: block;
margin-bottom: 10px; margin-bottom: 10px;
color: #07c160; color: #07c160;
background-color: rgb(0, 72, 94); background-color: rgba(0, 72, 94,.9);
box-sizing: border-box;
min-height: 60px;
} }
.form-class-submit { .form-class-submit {
...@@ -135,11 +139,13 @@ button { ...@@ -135,11 +139,13 @@ button {
height: calc(100vh - 100px); height: calc(100vh - 100px);
overflow: auto; overflow: auto;
} }
.scroll-answer{
height: calc(100vh - 90px);
}
.chat-container { .chat-container {
margin-top: 10px; margin-top: 10px;
width: 100%; width: 100%;
height: calc(100vh - 120px); height: calc(100vh - 40px);
overflow-y: auto; overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
position: relative; position: relative;
...@@ -164,4 +170,14 @@ button { ...@@ -164,4 +170,14 @@ button {
width: 20px; width: 20px;
height: 20px; height: 20px;
border-radius: 50%; border-radius: 50%;
} }
\ No newline at end of file
/* .loader-child:nth-of-type(1) {
border-bottom: 3px solid #ffffff;
}
.loader-child:nth-of-type(2) {
border-right: 3px solid #ffffff;
}
.loader-child:nth-of-type(3) {
border-right: 3px solid #ffffff;
} */
\ No newline at end of file
...@@ -7,14 +7,12 @@ Page({ ...@@ -7,14 +7,12 @@ Page({
* 页面的初始数据 * 页面的初始数据
*/ */
data: { data: {
toView: '',
title: 'header', title: 'header',
userInfo: {}, userInfo: {},
content: '我是父组件的content', content: '我是父组件的content',
footContent: "bottomContent", footContent: "bottomContent",
headBackground: [ headBackground: [
{ class: 'header-swiper-one', content: '数据分析' ,articleId:32,img:'https://yongma16.xyz/staticFile/common/img/data.png'},
{ class: 'header-swiper-two', content: '前端开发' ,articleId:33,img:'https://yongma16.xyz/staticFile/common/img/front.png'},
{ class: 'header-swiper-three', content: '全栈开发',articleId:34,img:'https://yongma16.xyz/staticFile/common/img/back.png' }
], ],
swiperConfig: { swiperConfig: {
indicatorDots: true, indicatorDots: true,
...@@ -32,7 +30,15 @@ Page({ ...@@ -32,7 +30,15 @@ Page({
baseUrl: 'https://yongma16.xyz/api/', baseUrl: 'https://yongma16.xyz/api/',
path: 'article/index/', path: 'article/index/',
currentArticleId: 0, currentArticleId: 0,
currentArticleTitle: '' currentArticleTitle: '',
isShowBottom: true,
bottomStyleConfig: {
tabMenuText: '记忆碎片',
homePageText: '主页',
blogText: '博客',
apiText: 'openai',
aboutText: '关于'
}
}, },
// 监听 // 监听
watch: { watch: {
...@@ -40,35 +46,42 @@ Page({ ...@@ -40,35 +46,42 @@ Page({
console.log('监听', newVal, oldVal) console.log('监听', newVal, oldVal)
} }
}, },
updateBottomNavigation(e) {
console.log('val home', e)
this.setData({
isShowBottom: e.detail
})
},
/** /**
* 用户信息配置 * 用户信息配置
* @param {Object} userInfo
*/ */
setCurrentUserInfo(userInfo){ setCurrentUserInfo(userInfo) {
console.log('事件触发userInfo',userInfo) console.log('事件触发userInfo', userInfo)
this.setData({ this.setData({
userInfo:userInfo userInfo: userInfo
}) })
}, },
/** /**
* 获取文章 * 获取文章
*/ */
clickBlogTitleBtn(e) { clickBlogTitleBtn(e) {
const {id,title}=e.currentTarget.dataset const { id, title } = e.currentTarget.dataset
this.setData({ this.setData({
currentArticleId:id, currentArticleId: id,
currentArticleTitle:title currentArticleTitle: title
}) })
this.getRemoteArticleById(id) this.getRemoteArticleById(id)
}, },
initHomeComponent(){ initHomeComponent() {
const articleObjId=this.data.headBackground[0].articleId const articleObjId = this.data.headBackground[0].articleId
this.updateHomeContent(articleObjId) this.updateHomeContent(articleObjId)
}, },
/** /**
* 更新 * 更新
* @param {*} articleObjId * @param {*} articleObjId
*/ */
updateHomeContent(articleObjId){ updateHomeContent(articleObjId) {
this.triggerClearHomeContent() this.triggerClearHomeContent()
this.triggerGetHomeContent(articleObjId) this.triggerGetHomeContent(articleObjId)
}, },
...@@ -76,25 +89,29 @@ Page({ ...@@ -76,25 +89,29 @@ Page({
* 卡片变动修改内容 * 卡片变动修改内容
* @param {*} e * @param {*} e
*/ */
swiperChange(e){ swiperChange(e) {
const index=e.detail.current const index = e.detail.current
const articleObjId=this.data.headBackground[index].articleId const articleObjId = this.data.headBackground[index].articleId
this.updateHomeContent(articleObjId) this.updateHomeContent(articleObjId)
}, },
/** /**
* 触发子组件跟新id * 触发子组件跟新id
*/ */
triggerGetHomeContent(id){ triggerGetHomeContent(id) {
const homeComponent = this.selectComponent('#home-content-id') const homeComponent = this.selectComponent('#home-content-id')
homeComponent.getRemoteArticle(id) if (homeComponent && homeComponent.getRemoteArticle) {
homeComponent.getRemoteArticle(id)
}
}, },
/** /**
* 触发子组件删除article * 触发子组件删除article
*/ */
triggerClearHomeContent(){ triggerClearHomeContent() {
const homeComponent = this.selectComponent('#home-content-id') const homeComponent = this.selectComponent('#home-content-id')
homeComponent.clearArticle() if (homeComponent && homeComponent.clearArticle) {
homeComponent.clearArticle()
}
}, },
/** /**
...@@ -102,13 +119,13 @@ Page({ ...@@ -102,13 +119,13 @@ Page({
* @param {*} id * @param {*} id
*/ */
getRemoteArticleById() { getRemoteArticleById() {
const paramId=this.data.currentArticleId; const paramId = this.data.currentArticleId;
const blogComponent = this.selectComponent('#blog-id') const blogComponent = this.selectComponent('#blog-id')
blogComponent.setLoading(true) blogComponent.setLoading(true)
blogComponent.clearArticleNode() blogComponent.clearArticleNode()
const baseUrl = this.data.baseUrl const baseUrl = this.data.baseUrl
const path = this.data.path const path = this.data.path
const that=this const that = this
const headers = { 'Content-Type': 'application/json;charset=UTF-8' } const headers = { 'Content-Type': 'application/json;charset=UTF-8' }
const params = { const params = {
value: paramId value: paramId
...@@ -121,8 +138,8 @@ Page({ ...@@ -121,8 +138,8 @@ Page({
success: (res) => { success: (res) => {
const data = res.data const data = res.data
const articleStr = data && data.article[0] const articleStr = data && data.article[0]
const title=that.data.currentArticleTitle const title = that.data.currentArticleTitle
blogComponent.setArticleNode(articleStr,title) blogComponent.setArticleNode(articleStr, title)
} }
}); });
}, },
...@@ -190,7 +207,23 @@ Page({ ...@@ -190,7 +207,23 @@ Page({
* 生命周期函数--监听页面加载 * 生命周期函数--监听页面加载
*/ */
onLoad: function (options) { onLoad: function (options) {
// this.initHomeComponent(); const eventChannel = this.getOpenerEventChannel()
if (eventChannel.emit) {
eventChannel.emit('acceptDataFromOpenedPage', { data: 'test' });
eventChannel.emit('someEvent', { data: 'test' });
}
if (eventChannel.on) {
// 监听 acceptDataFromOpenerPage 事件,获取上一页面通过 eventChannel 传送到当前页面的数据
eventChannel.on('setHomePageData', function (data) {
console.log('setHomePageData', data)
})
}
this.setData({
headBackground: app.wxProgramConfig.homePageConfig.headBackground,
bottomBtn: app.wxProgramConfig.homePageConfig.bottomBtn,
bottomStyleConfig: app.wxProgramConfig.homePageConfig.bottomStyleConfig
})
this.initHomeComponent();
}, },
/** /**
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<view class="container-menu" wx:if="{{menuIsShow}}"> <view class="container-menu" wx:if="{{menuIsShow}}">
<view class="arrow-right" bindtap="menuSwitch"></view> <view class="arrow-right" bindtap="menuSwitch"></view>
<view class="btn-ul" style="margin-top: 10px;font-weight: bold;position: absolute;"> <view class="btn-ul" style="margin-top: 10px;font-weight: bold;position: absolute;">
记忆碎片</view> {{bottomStyleConfig.tabMenuText}}</view>
<view class='menu-box' style="margin-top: 40px;"> <view class='menu-box' style="margin-top: 40px;">
<block wx:for="{{titleObj}}" wx:key="*this"> <block wx:for="{{titleObj}}" wx:key="*this">
<view class="blog-title {{currentArticleId===item.id? 'title-actived':''}}" bindtap="clickBlogTitleBtn" data-title="{{item.title}}" data-id="{{item.id}}">{{item.title}}</view> <view class="blog-title {{currentArticleId===item.id? 'title-actived':''}}" bindtap="clickBlogTitleBtn" data-title="{{item.title}}" data-id="{{item.id}}">{{item.title}}</view>
...@@ -33,15 +33,15 @@ ...@@ -33,15 +33,15 @@
<view class="container-content"> <view class="container-content">
<home-content class='home-content-class' headerItem='{{content}}' wx:if="{{bottomBtn==='front'}}" id="home-content-id"></home-content> <home-content class='home-content-class' headerItem='{{content}}' wx:if="{{bottomBtn==='front'}}" id="home-content-id"></home-content>
<blog class='home-content-class' id="blog-id" wx:if="{{bottomBtn==='blog'}}" bind:updateArticleMenu="updateArticleMenu"></blog> <blog class='home-content-class' id="blog-id" wx:if="{{bottomBtn==='blog'}}" bind:updateArticleMenu="updateArticleMenu"></blog>
<future class='home-content-class' wx:if="{{bottomBtn==='target'}}"></future> <future class='home-content-class' wx:if="{{bottomBtn==='target'}}" bind:updateBottomNavigation="updateBottomNavigation"></future>
<life class='home-content-class' wx:if="{{bottomBtn==='life'}}" bindUserinfo="{{userInfo}}"></life> <life class='home-content-class' wx:if="{{bottomBtn==='life'}}" bindUserinfo="{{userInfo}}"></life>
</view> </view>
<view class="container-footer"> <view class="container-footer" wx:if="{{isShowBottom}}">
<view class="container-footer-btn-menu"> <view class="container-footer-btn-menu">
<view class="default-btn active {{bottomBtn==='front'? 'btn-actived':''}}" bindtap="clickBottomBtn" data-label='front'>主页</view> <view class="default-btn active {{bottomBtn==='front'? 'btn-actived':''}}" bindtap="clickBottomBtn" data-label='front'>{{bottomStyleConfig.homePageText}}</view>
<view class="default-btn active {{bottomBtn==='blog'? 'btn-actived':''}}" bindtap="clickBottomBtn" data-label='blog'>博客</view> <view class="default-btn active {{bottomBtn==='blog'? 'btn-actived':''}}" bindtap="clickBottomBtn" data-label='blog'>{{bottomStyleConfig.blogText}}</view>
<view class="default-btn active {{bottomBtn==='target'? 'btn-actived':''}}" bindtap="clickBottomBtn" data-label='target'>api管理</view> <view class="default-btn active {{bottomBtn==='target'? 'btn-actived':''}}" bindtap="clickBottomBtn" data-label='target'>{{bottomStyleConfig.apiText}}</view>
<view class="default-btn active {{bottomBtn==='life'? 'btn-actived':''}}" bindtap="clickBottomBtn" data-label='life'>关于</view> <view class="default-btn active {{bottomBtn==='life'? 'btn-actived':''}}" bindtap="clickBottomBtn" data-label='life'>{{bottomStyleConfig.aboutText}}</view>
</view> </view>
</view> </view>
</view> </view>
\ No newline at end of file
...@@ -24,16 +24,16 @@ Component({ ...@@ -24,16 +24,16 @@ Component({
article: {'key':12}, article: {'key':12},
baseUrl:'https://yongma16.xyz/api/', baseUrl:'https://yongma16.xyz/api/',
path:'article/blog/', path:'article/blog/',
// 35, 34, 33, 32
currentArticleId:32,
}, },
observers:{ observers:{
mode:function(val){
console.log('val',val)
}
}, },
lifetimes: { lifetimes: {
// 生命周期函数,可以为函数,或一个在 methods 段中定义的方法名 // 生命周期函数,可以为函数,或一个在 methods 段中定义的方法名
attached: function () { attached: function () {
const id=app.homePageArticleId const id=app.wxProgramConfig.homePageConfig.headBackground[0].articleId
this.getRemoteArticle(id) this.getRemoteArticle(id)
}, },
moved: function () {}, moved: function () {},
......
// index.js // index.js
// const app = getApp()
// const { envList } = require('../../envList.js'); // const { envList } = require('../../envList.js');
const app = getApp()
Page({ Page({
data: { data: {
detailInfo: '关于:前端程序员的生活博客', detailInfo: '关于:code笔记',
title: "yma16博客", title: "yma16博客",
userImageUrl: "https://yongma16.xyz/staticFile/common/img/logo.png", userImageUrl: "https://yongma16.xyz/staticFile/common/img/aiTop.jpg",
loginTitle: "点击授权", loginTitle: "点击授权",
userName: '', joinTitle: '进入',
nextPage: "/pages/home/home",
userPrefix: '昵称:',
userName: '月牙天冲',
designPlaceholder: '自定义名称',
userInfo: {}, userInfo: {},
hasUserInfo: false, hasUserInfo: false,
isloading: true, isloading: true,
isOldVersion: false
}, },
getUserInfoBtn: function (info) { getUserInfoBtn: function (info) {
fgetUserProfile
wx.showLoading({ wx.showLoading({
title: '授权中', title: '授权中',
}); });
...@@ -24,13 +27,49 @@ Page({ ...@@ -24,13 +27,49 @@ Page({
this.setData({ this.setData({
userImageUrl: rowData.avatarUrl, userImageUrl: rowData.avatarUrl,
userName: rowData.nickName, userName: rowData.nickName,
userInfo:rowData userInfo: rowData
}) })
wx.setStorageSync('currentUserInfo',rowData) wx.setStorageSync('currentUserInfo', rowData)
console.log('rowData', rowData) console.log('rowData', rowData)
} }
wx.hideLoading(); wx.hideLoading();
}, },
bindKeyInput(e) {
const { value } = e.detail
console.log('val', value)
this.setData({
userName: value
})
},
// 头像选择
onChooseAvatar(e) {
console.log('e', e)
const { avatarUrl } = e.detail
this.setData({
userImageUrl: avatarUrl,
})
},
joinProfile(e) {
const userInfo = {
nickName: this.data.userName,
avatarUrl: this.data.userImageUrl
}
if(!this.data.userName){
wx.showModal({
cancelColor: 'cancelColor',
title: '昵称不能为空!'
})
return
}
console.log('userInfo', userInfo)
wx.setStorageSync('currentUserInfo', userInfo)
this.setData({
userInfo: userInfo,
hasUserInfo: true
})
// 跳转到home
this.jumpTohome()
},
getUserProfile(e) { getUserProfile(e) {
// 推荐使用 wx.getUserProfile 获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认 // 推荐使用 wx.getUserProfile 获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
// 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗 // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
...@@ -38,8 +77,7 @@ Page({ ...@@ -38,8 +77,7 @@ Page({
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => { success: (res) => {
console.log('信息', res) console.log('信息', res)
console.log('信息', res.userInfo) wx.setStorageSync('currentUserInfo', res.userInfo)
wx.setStorageSync('currentUserInfo',res.userInfo)
this.setData({ this.setData({
userInfo: res.userInfo, userInfo: res.userInfo,
hasUserInfo: true hasUserInfo: true
...@@ -53,15 +91,41 @@ Page({ ...@@ -53,15 +91,41 @@ Page({
jumpTohome: function () { jumpTohome: function () {
const thisBack = this const thisBack = this
wx.navigateTo({ wx.navigateTo({
url: '/pages/home/home', url: thisBack.data.nextPage,
events: {
// 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
acceptDataFromOpenedPage: function (data) {
console.log('acceptDataFromOpenedPage data', data)
},
someEvent: function (data) {
console.log('someEvent data', data)
}
},
success: function (res) { success: function (res) {
console.log('res jump', res)
// 通过 eventChannel 向被打开页面传送数据 // 通过 eventChannel 向被打开页面传送数据
res.eventChannel.emit('setCurrentUserInfo', thisBack.data.userInfo) res.eventChannel.emit('setHomePageData', {
userInfo: thisBack.data.userInfo
})
} }
}) })
}, },
onLoad: function (options) { onLoad: function (options) {
this.jumpTohome() console.log('option', options)
const authorPageConfig = app.wxProgramConfig.authorPageConfig
this.setData({
detailInfo: authorPageConfig.detailInfo,
title: authorPageConfig.title,
userImageUrl: authorPageConfig.userImageUrl,
loginTitle: authorPageConfig.loginTitle,
nextPage: authorPageConfig.nextPage,
userPrefix: authorPageConfig.userPrefix,
userName: authorPageConfig.userName,
designPlaceholder: authorPageConfig.designPlaceholder,
isOldVersion: authorPageConfig.isOldVersion,
joinTitle: authorPageConfig.joinTitle
})
// this.jumpTohome()
// 页面创建时执行 // 页面创建时执行
}, },
onShow: function () { onShow: function () {
...@@ -90,22 +154,5 @@ Page({ ...@@ -90,22 +154,5 @@ Page({
}, },
onResize: function () { onResize: function () {
// 页面尺寸变化时执行 // 页面尺寸变化时执行
},
userLogin: function () {
wx.login({
success(res) {
if (res.code) {
//发起网络请求
wx.request({
url: 'https://example.com/onLogin',
data: {
code: res.code
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
} }
}); });
<view class="container"> <view class="container">
<view class="title">{{title}}</view> <view class="title">{{title}}</view>
<view class="user-image-box"> <view class="user-image-box">
<view class="user-nick-name">{{userName}}</view> <view wx:if="{{isOldVersion}}">
<image class="user-image" src="{{userImageUrl}}"></image> <image class="user-image" src="{{userImageUrl}}"></image>
<view class="user-nick-name">{{userName}}</view>
</view>
<view wx:else>
<button class="avatar-wrapper" style="background: transparent;" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
<image class="avatar" class="user-image" src="{{userImageUrl}}"></image>
</button>
<view style="display: flex;width:100%">
<view style="width: 30%;text-align: right;">
{{userPrefix}}
</view>
<view style="width: 50%;text-align: center;">
<input type="nickname" class="weui-input" value="{{userName}}" bindinput="bindKeyInput"
placeholder-style="color: #07c160"
style="width: 100%;border-bottom: 1px solid #ffffff;" placeholder="{{designPlaceholder}}" />
</view>
</view>
</view>
</view> </view>
<view class="user-info"> <view class="user-info">
</view> </view>
<view class="login-container"> <view class="login-container">
<button type="primary" plain="true" bindtap="getUserProfile" class="user-login" bindgetuserinfo="getUserInfoBtn">{{loginTitle}}</button></view> <button type="primary" plain="true" bindtap="getUserProfile" class="user-login" bindgetuserinfo="getUserInfoBtn" wx:if="{{isOldVersion}}">{{loginTitle}}</button>
<button type="primary" plain="true" bindtap="joinProfile" class="user-login" wx:else>{{joinTitle}}</button>
</view>
</view> </view>
<view class="loading-container"> <view class="loading-container">
<view class="loading" wx:if="isloading"> <view class="loading" wx:if="isloading">
<view class="loader-child"/> <view class="loader-child" />
<view class="loader-child"/> <view class="loader-child" />
<view class="loader-child"/> <view class="loader-child" />
</view> </view>
</view> </view>
<view class="detail-info">{{detailInfo}}</view> <view class="detail-info">{{detailInfo}}</view>
\ No newline at end of file
...@@ -15,7 +15,9 @@ page { ...@@ -15,7 +15,9 @@ page {
.login-container{ .login-container{
margin-top:50px !important; position: absolute;
top:50%;
transform: translateY(50%);
} }
...@@ -49,7 +51,7 @@ page { ...@@ -49,7 +51,7 @@ page {
.title { .title {
font-family: PingFang SC; font-family: PingFang SC;
font-weight: 500; font-weight: 500;
font-size: 44rpx; font-size: 22px;
margin-bottom: 40rpx; margin-bottom: 40rpx;
} }
......
...@@ -59,7 +59,7 @@ Component({ ...@@ -59,7 +59,7 @@ Component({
methods: { methods: {
initArticle() { initArticle() {
const articleId=app.lifePageArricleId const articleId=app.wxProgramConfig.aboutPageConfig.articleId
this.getRemoteArticle(articleId) this.getRemoteArticle(articleId)
}, },
......
{ {
"miniprogramRoot": "miniprogram/", "description": "项目配置文件",
"cloudfunctionRoot": "cloudfunctions/", "packOptions": {
"ignore": []
},
"setting": { "setting": {
"urlCheck": true, "urlCheck": true,
"es6": true, "es6": true,
...@@ -39,29 +41,37 @@ ...@@ -39,29 +41,37 @@
"showES6CompileOption": false, "showES6CompileOption": false,
"useCompilerPlugins": false "useCompilerPlugins": false
}, },
"compileType": "miniprogram",
"libVersion": "2.27.0",
"appid": "wx373f33f993c688d1", "appid": "wx373f33f993c688d1",
"projectname": "yma16_program", "projectname": "yma16_program",
"libVersion": "2.27.0", "miniprogramRoot": "miniprogram/",
"cloudfunctionRoot": "cloudfunctions/",
"cloudfunctionTemplateRoot": "cloudfunctionTemplate", "cloudfunctionTemplateRoot": "cloudfunctionTemplate",
"watchOptions": {
"ignore": []
},
"debugOptions": {
"hidedInDevtools": []
},
"scripts": {},
"condition": { "condition": {
"search": {
"list": []
},
"conversation": {
"list": []
},
"plugin": { "plugin": {
"list": [] "list": []
}, },
"game": { "game": {
"list": [] "list": []
}, },
"gamePlugin": {
"list": []
},
"miniprogram": { "miniprogram": {
"list": [ "list": [
{ {
"id": -1, "name": "pages/getOpenId/index",
"name": "db guide", "pathName": "pages/getOpenId/index",
"pathName": "pages/databaseGuide/databaseGuide" "query": "",
"scene": null
} }
] ]
} }
......
...@@ -12,52 +12,11 @@ ...@@ -12,52 +12,11 @@
}, },
"miniprogram": { "miniprogram": {
"list": [ "list": [
{
"id": -1,
"name": "db guide",
"pathName": "pages/databaseGuide/databaseGuide",
"query": ""
},
{ {
"name": "pages/getOpenId/index", "name": "pages/getOpenId/index",
"pathName": "pages/getOpenId/index", "pathName": "pages/getOpenId/index",
"query": "", "query": "",
"scene": null "scene": null
},
{
"name": "pages/deployService/index",
"pathName": "pages/deployService/index",
"query": "",
"scene": null
},
{
"name": "pages/selectRecord/index",
"pathName": "pages/selectRecord/index",
"query": "",
"scene": null
},
{
"name": "pages/sumRecordResult/index",
"pathName": "pages/sumRecordResult/index",
"query": "",
"scene": null
},
{
"name": "pages/updateRecord/index",
"pathName": "pages/updateRecord/index",
"query": "",
"scene": null
},
{
"name": "pages/updateRecordResult/index",
"pathName": "pages/updateRecordResult/index",
"query": "",
"scene": null
},
{
"name": "pages/updateRecordSuccess/index",
"pathName": "pages/updateRecordSuccess/index",
"scene": null
} }
] ]
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册