【工程实战篇】简单封装和组件库使用及第一个通信
我们对网页match然后赋予gmxhr权限```js
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @descriptiontry to take over the world!
// @author You
// @match http://localhost:8081/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=undefined.localhost
// @grant unsafeWindow
// @run-at document-start
// @grant GM_xmlhttpRequest
// ==/UserScript==
unsafeWindow.GM_xmlhttpRequest=GM_xmlhttpRequest;
```
然后对post和get进行简易封装
![图片.png](data/attachment/forum/202204/20/092106hlouhnyc2kuwvkrc.png)
之所以用promise是为了保证可维护性,以后后期如果需要修改替换post和get函数即可
然后我们开始画页面
这里我选择了element-plus
NPM
$ npm install element-plus --save
安装element-plus
然后配置自动导入
npm install -D unplugin-vue-components unplugin-auto-import
然后去vue.config.js
const AutoImport = require("unplugin-auto-import/webpack");
const Components = require("unplugin-vue-components/webpack");
const { ElementPlusResolver } = require("unplugin-vue-components/resolvers");
配置一下
```js
configureWebpack: {
plugins: [
AutoImport({
resolvers: ,
}),
Components({
resolvers: ,
}),
],
},
```
![图片.png](data/attachment/forum/202204/20/092359wsfa1qjz1846rmjq.png)
接下来我们先写一个最简单的函数
获取学校信息的
```js
async function GetSchoolList() {
let postdata = {
service: "alioth.login.customer.listValid",
deviceCode: 2,
tenantCode: "",
};
post(
"https://xueqiplus.chinaedu.net/aliothprovider/router",
await GeneratePostData(postdata)
).then((response) => {
if (response.code === "0") {
let payload = JSON.parse(response.data);
let school = [];
payload.forEach((item) => {
item.customerList.forEach((customer) => {
school.push({
label: customer.name,
value: JSON.stringify(customer),
});
});
});
schoollist.value = school;
}
});
}
GetSchoolList();
```
这里首先设置了最基础的三个数据
![图片.png](data/attachment/forum/202204/20/092523fm6afspd4ldz8evp.png)
然后调用post提交
![图片.png](data/attachment/forum/202204/20/092532aovgl8miy4yjgvgh.png)
在提交之前先调用GeneratePostData
这里用了promise,也是为了以后后期更方便修改
GeneratePostData做了三件事
1.拓展对象自身属性
2.计算sign
3.对象转为字符串格式
![图片.png](data/attachment/forum/202204/20/092629i5g5d8yr975m5y75.png)
首先拓展对象属性
![图片.png](data/attachment/forum/202204/20/092642ozxb2gmgz1g9iibc.png)
然后获取sign
![图片.png](data/attachment/forum/202204/20/092652pp30a1x2s30osq0r.png)
最后根据obj的service构造不同的固定字符串
![图片.png](data/attachment/forum/202204/20/092714bvcg2ggx6nn0g28s.png)
其实我们可以使用库的,但是我担心生成的格式跟他的不一致,所以决定干脆统一使用switch和case做这部分了
返回内容处理在
```js
if (response.code === "0") {
let payload = JSON.parse(response.data);
let school = [];
payload.forEach((item) => {
item.customerList.forEach((customer) => {
school.push({
label: customer.name,
value: JSON.stringify(customer),
});
});
});
schoollist.value = school;
}
```
这里forEach遍历,并且往输入投递了label和字符串value值
因为根据我测试element-plus无法绑定对象...为啥我也不知道....
设置value-key也不定
感觉官方文档有点缺失
所以脏了一下
然后我们简单画一下页面
```html
<div>
<el-form
:model="info"
ref="ruleFormRef"
:rules="rules"
label-width="120px"
>
<el-form-item prop="school" label="选择学校">
<el-select-v2
placeholder="请选择学校"
style="width: 100%"
filterable
v-model="info.school"
:options="schoollist"
/>
</el-form-item>
<el-form-item prop="username" label="请输入账户">
<el-input v-model="info.username" />
</el-form-item>
<el-form-item prop="password" label="请输入密码">
<el-input type="password" show-password v-model="info.password" />
</el-form-item>
<el-form-item>
<el-button
style="width: 100%"
type="primary"
@click="submitForm(ruleFormRef)"
>登录账号</el-button
>
</el-form-item>
</el-form>
</div>
```
设置一下校验规则,就做好最基本的项目了
![图片.png](data/attachment/forum/202204/20/093030nsuf1e56uzk2ky7a.png)
# 结语
撒花~
不明觉厉~ggnb! 极品小猫 发表于 2022-4-20 13:29
不明觉厉~ggnb!
猫猫姐姐比我强多了! 我为哥哥举大旗,斩尽世间一切敌,看谁敢与道为敌!!!{:4_94:}{:4_94:}{:4_94:} 执念e1 发表于 2022-4-20 17:19
我为哥哥举大旗,斩尽世间一切敌,看谁敢与道为敌!!! ...
呜呜呜呜,感谢哥哥,安排!
页:
[1]