dd/pages/index/index.js

324 lines
7.6 KiB
JavaScript

Page({
data: {
apiurl: '',
username: '',
password: '',
databaseList: '',
index: 0, //数据库选择的页面ID
databaseName: '',
Uid: null, //登录获取的信息保存本地设备
},
onLoad(query) {
// // 页面加载
// 检查本地缓存中是否有登录信息 要四个不为空才渲染//
const loginInfo = dd.getStorageSync({
key: 'loginInfo'
}).data;
if (loginInfo && loginInfo.apiurl && loginInfo.databaseName && loginInfo.username && loginInfo.password && loginInfo.uid > 0) {
const {
apiurl,
databaseName,
username,
password
} = loginInfo;
// 这里假定 apiurl 可以从其他地方获取或者有默认值';
this.setData({
apiurl,
databaseName,
username,
password
});
dd.switchTab({
url: '/pages/deal/deal',
success: () => {
dd.showToast({
content: '登录成功,已跳转页面',
type:'success',
duration: 1000,
success() {
}
});
},
});
} else {
console.log('本地缓存中未获取到登录信息');
}
},
onReady() {
// 页面加载完成
},
onShow() {
// 页面显示
},
onHide() {
// 页面隐藏
},
onUnload() {
// 页面被关闭
},
onTitleClick() {
// 标题被点击
},
onPullDownRefresh() {
// 页面被下拉
},
onReachBottom() {
// 页面被拉到底部
},
onShareAppMessage() {
// 返回自定义分享信息
return {
title: '钉钉胜佳',
desc: 'My App description',
path: 'pages/index/index',
};
},
onSubmit(e) {
if (!e || !e.detail || !e.detail.value) {
dd.showToast({
content: '传入的事件对象或其属性未定义',
type: 'none',
duration: 3000,
success() {
}
});
return;
}
const {
apiurl,
databaseName
} = this.data;
const {
username: username,
password: password
} = e.detail.value;
this.setData({
apiurl,
databaseName,
username,
password
});
if (!databaseName || !apiurl) {
dd.showToast({
content: '账套或地址有为空',
type: 'none',
duration: 3000,
success() {
}
});
return;
}
const data = {
"jsonrpc": "2.0",
"method": "call",
"id": 2,
"params": {
"service": "common",
"method": "authenticate",
"args": [
databaseName,
username,
password,
{}
]
}
};
return new Promise((resolve, reject) => {
dd.httpRequest({
url: `${apiurl}/jsonrpc`,
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
data: JSON.stringify(data),
success: (res) => {
if (res.status < 200 || res.status >= 300) {
reject(new Error(`HTTP error! status: ${res.status}`));
return;
}
const result = res.data;
if (Object.prototype.hasOwnProperty.call(result, 'error')) {
reject(new Error(`认证失败: ${JSON.stringify(result.error)}`));
return;
}
const uid = result.result;
try {
const loginInfo = {
apiurl,
uid,
username,
password,
databaseName
};
dd.setStorageSync({
key: 'loginInfo',
data: loginInfo
});
} catch (e) {
reject(new Error(`保存登录信息到本地缓存失败: ${e.message}`));
return;
}
if (uid) {
dd.switchTab({
url: '/pages/deal/deal',
success: () => {
dd.showToast({
content: '登录成功,已跳转页面',
type: 'success',
duration: 3000,
success() {
}
});
resolve(uid);
},
fail: (err) => {
reject(new Error(`页面跳转失败: ${JSON.stringify(err)}`));
}
});
} else {
reject(new Error('认证失败,未获取到有效的用户 ID'));
}
},
fail: (err) => {
reject(new Error(`请求失败: ${JSON.stringify(err)}`));
}
});
})
.catch((error) => {
dd.showToast({
content: error.message,
type: 'none',
duration: 3000,
success() {
}
});
});
},
onReset() {
dd.clearStorageSync();
this.setData({
apiurl: '',
username: '',
password: ''
});
},
//失去聚焦触发根据url获取数据库列表
postdb(e) {
const apiurl = e.detail.value;
console.log(apiurl)
if (!apiurl) {
return;
}
const data = {
"jsonrpc": "2.0",
"method": "call",
"params": {
"service": "db",
"method": "list",
"args": []
},
"id": 1
};
new Promise((resolve, reject) => {
dd.httpRequest({
url: `${apiurl}/jsonrpc`,
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
data: JSON.stringify(data),
success: (res) => {
if (res.status < 200 || res.status >= 300) {
reject(new Error(`HTTP error! status: ${res.status}`));
return;
}
const result = res.data;
if ('error' in result) {
resolve([]);
} else if ('result' in result) {
if (result['result'].length > 0) {
// this.setData({
// username: '',
// password: '',
// });
}
resolve(result['result']);
} else {
reject(new Error('请求发生错误'));
}
},
fail: (err) => {
reject(err);
}
});
})
.then((databaseList) => {
this.setData({
databaseList,
});
if (databaseList.length > 0) {
this.setData({
databaseName: databaseList[0],
index: 0,
apiurl: apiurl
});
dd.showToast({
content: '成功获取可用数据库列表',
type: 'success',
duration: 1000,
success() {
},
});
} else {
dd.showToast({
content: '未获取到可用的数据库。',
type: 'none',
duration: 1000,
success() {
},
});
}
})
.catch((error) => {
dd.showToast({
content: '请求发生错误',
type: 'none',
duration: 1000,
success() {
},
fail() {
console.log(error.message);
}
});
});
},
//
//数据库列表选择逻辑层获取name值
bindPickerChange(e) {
const selectedDatabase = this.data.databaseList[e.detail.value]; // 根据索引获取数据库名称
if (selectedDatabase) {
this.setData({
databaseName: selectedDatabase, // 设置数据库名称
index: e.detail.value, // 更新索引
});
} else {
console.log('未找到对应的数据库');
}
},
//
});