Compare commits
17 Commits
24f71ed997
...
f592d87e17
| Author | SHA1 | Date |
|---|---|---|
|
|
f592d87e17 | |
|
|
ec3acd74e2 | |
|
|
2cd401409e | |
|
|
aad95000a8 | |
|
|
4ab1d5c89a | |
|
|
e19b4ccabd | |
|
|
4feccbd442 | |
|
|
59ee57827b | |
|
|
8a60d4c48f | |
|
|
7b62c5e473 | |
|
|
e6ffd7d5d7 | |
|
|
ff317c1cd2 | |
|
|
1cf16472d2 | |
|
|
079afea2e0 | |
|
|
e1075c154b | |
|
|
2d148e7aa4 | |
|
|
c8dd8061b2 |
|
|
@ -1,2 +1,2 @@
|
|||
TARO_APP_ID="wx636eb7cf2b84f305"
|
||||
TARO_APP_API=""
|
||||
TARO_APP_API="https://ate.zjueva.net"
|
||||
57
doc/api.md
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
### 值班信息 `GET /duty/info`
|
||||
|
||||
#### 当前在值班
|
||||
#### 当前在值班(正常值班时间)
|
||||
|
||||
data:
|
||||
|
||||
|
|
@ -45,7 +45,22 @@ data:
|
|||
"isInDuty": true,
|
||||
"inDutyCnt": 3,
|
||||
"currentDuty": "2",
|
||||
"place": "东三-204"
|
||||
"place": "东三-204",
|
||||
"otherDutyTime": ""
|
||||
}
|
||||
```
|
||||
|
||||
#### 当前在值班(其他值班时间)
|
||||
|
||||
data:
|
||||
|
||||
```json
|
||||
{
|
||||
"isInDuty": true,
|
||||
"inDutyCnt": 3,
|
||||
"currentDuty": "others",
|
||||
"place": "蓝田",
|
||||
"otherDutyTime": "9:30-11:30"
|
||||
}
|
||||
```
|
||||
|
||||
|
|
@ -250,17 +265,47 @@ Request
|
|||
```json
|
||||
{
|
||||
"token": "token_test",
|
||||
"id": "id",
|
||||
"id": "id"
|
||||
}
|
||||
```
|
||||
|
||||
### 获取七天内未完成工单 `POST /tickets/uncompleted`
|
||||
### 获取七天内未完成工单 `GET /tickets/uncompleted`
|
||||
|
||||
Request
|
||||
|
||||
```json
|
||||
{
|
||||
"token": "token_test",
|
||||
"pageId": 1,
|
||||
"count": 10,
|
||||
"queryType": 0
|
||||
}
|
||||
```
|
||||
|
||||
### 获取所有预填写工单 `GET /tickets/list`
|
||||
|
||||
Request
|
||||
|
||||
```json
|
||||
{
|
||||
"token": "token_test",
|
||||
"pageId": 1,
|
||||
"count": 10,
|
||||
"queryType": 0
|
||||
}
|
||||
```
|
||||
|
||||
### 查询预填写工单 `GET /tickets/search`
|
||||
|
||||
Request
|
||||
|
||||
```json
|
||||
{
|
||||
"token": "token_test",
|
||||
"values": "test",
|
||||
"pageId": 1,
|
||||
"count": 10,
|
||||
"queryType": 0
|
||||
}
|
||||
```
|
||||
|
||||
|
|
@ -329,10 +374,10 @@ Request
|
|||
```json
|
||||
{
|
||||
"token": "token_test",
|
||||
"stuid": "3220101984",
|
||||
"passwd": "sonvidiafuckyou"
|
||||
"code": "code_test",
|
||||
}
|
||||
```
|
||||
这里的 code 是来源于小程序扫描统一身份认证生成的二维码
|
||||
|
||||
### 检查 token 是否登陆 `GET /member/checklogin?token={token}` OK
|
||||
|
||||
|
|
|
|||
21
mock/api.ts
|
|
@ -1,16 +1,25 @@
|
|||
import mytickets from './mytickets.json';
|
||||
import ticketInfo from './ticketInfo.json';
|
||||
import uncompleted from './uncompleted.json';
|
||||
import ticketsList from './ticketsList.json';
|
||||
import ticketsSearch from './ticketSearch.json';
|
||||
|
||||
export default {
|
||||
'GET /ping': {
|
||||
success: true,
|
||||
data: {
|
||||
msg: 'pong',
|
||||
},
|
||||
},
|
||||
'GET /duty/info': {
|
||||
success: true,
|
||||
data: {
|
||||
token: 'token_test',
|
||||
isInDuty: true,
|
||||
inDutyCnt: 3,
|
||||
currentDuty: '2',
|
||||
place: '204',
|
||||
currentDuty: 'others',
|
||||
otherDutyTime: '9:30-11:30',
|
||||
place: '蓝田',
|
||||
},
|
||||
},
|
||||
'GET /user/info': {
|
||||
|
|
@ -84,6 +93,14 @@ export default {
|
|||
success: true,
|
||||
data: uncompleted,
|
||||
},
|
||||
'GET /tickets/list': {
|
||||
success: true,
|
||||
data: ticketsList,
|
||||
},
|
||||
'GET /tickets/search': {
|
||||
success: true,
|
||||
data: ticketsSearch,
|
||||
},
|
||||
'POST /member/logout': {
|
||||
success: true,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,119 @@
|
|||
{
|
||||
"pageIndex": 1,
|
||||
"pageCount": 20,
|
||||
"size": 10,
|
||||
"queryType": 0,
|
||||
"data": [
|
||||
{
|
||||
"id": 6830,
|
||||
"type": 1,
|
||||
"status": 2,
|
||||
"device": "主机",
|
||||
"deviceModel": "马嘉祺",
|
||||
"owner": "马嘉祺",
|
||||
"phone": "18888888888",
|
||||
"createdTime": "2024-03-06T19:49:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6831,
|
||||
"type": 0,
|
||||
"status": 0,
|
||||
"device": "小米",
|
||||
"deviceModel": "丁晨曦",
|
||||
"owner": "丁晨曦",
|
||||
"phone": "18888888887",
|
||||
"createdTime": "2024-03-06T11:45:14.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6832,
|
||||
"type": 1,
|
||||
"status": 1,
|
||||
"device": "华硕",
|
||||
"deviceModel": "宋亚轩",
|
||||
"owner": "宋亚轩",
|
||||
"phone": "18888888886",
|
||||
"createdTime": "2024-03-06T19:48:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6833,
|
||||
"type": 1,
|
||||
"status": 3,
|
||||
"device": "联想",
|
||||
"deviceModel": "刘耀文",
|
||||
"owner": "刘耀文",
|
||||
"phone": "18888888885",
|
||||
"createdTime": "2024-03-06T14:49:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6834,
|
||||
"type": 1,
|
||||
"status": 4,
|
||||
"device": "ROG",
|
||||
"deviceModel": "张震远",
|
||||
"owner": "张震远",
|
||||
"phone": "18888888884",
|
||||
"createdTime": "2024-03-06T19:49:17.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6835,
|
||||
"type": 1,
|
||||
"status": 5,
|
||||
"device": "荣耀",
|
||||
"deviceModel": "言好像",
|
||||
"owner": "言好像",
|
||||
"phone": "18888888883",
|
||||
"createdTime": "2024-03-06T19:39:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6836,
|
||||
"type": 1,
|
||||
"status": 6,
|
||||
"device": "ROG",
|
||||
"deviceModel": "何君琳",
|
||||
"owner": "何君琳",
|
||||
"phone": "18888888882",
|
||||
"createdTime": "2024-03-06T09:49:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6837,
|
||||
"type": 1,
|
||||
"status": 7,
|
||||
"device": "EVA",
|
||||
"deviceModel": "Echo",
|
||||
"owner": "Echo",
|
||||
"phone": "18888888881",
|
||||
"createdTime": "2024-03-16T19:49:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6838,
|
||||
"type": 0,
|
||||
"status": 2,
|
||||
"device": "罗技",
|
||||
"deviceModel": "SB",
|
||||
"owner": "SB",
|
||||
"phone": "18888888880",
|
||||
"createdTime": "2024-04-06T19:49:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6839,
|
||||
"type": 0,
|
||||
"status": 3,
|
||||
"device": "HAL",
|
||||
"deviceModel": "CNM",
|
||||
"owner": "CNM",
|
||||
"phone": "18888888877",
|
||||
"createdTime": "2024-03-09T19:49:27.043865",
|
||||
"isConfirmed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
{
|
||||
"pageIndex": 1,
|
||||
"pageCount": 24,
|
||||
"size": 8,
|
||||
"queryType": 0,
|
||||
"data": [
|
||||
{
|
||||
"id": 6830,
|
||||
"type": 1,
|
||||
"status": 2,
|
||||
"device": "主机",
|
||||
"deviceModel": "技嘉",
|
||||
"owner": "武技栏",
|
||||
"phone": "18888888888",
|
||||
"createdTime": "2024-03-06T19:49:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6831,
|
||||
"type": 0,
|
||||
"status": 0,
|
||||
"device": "小米",
|
||||
"deviceModel": "电风扇",
|
||||
"owner": "丁真",
|
||||
"phone": "18888888887",
|
||||
"createdTime": "2024-03-06T11:45:14.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6832,
|
||||
"type": 1,
|
||||
"status": 1,
|
||||
"device": "华硕",
|
||||
"deviceModel": "天选 3",
|
||||
"owner": "西西弗",
|
||||
"phone": "18888888886",
|
||||
"createdTime": "2024-03-06T19:48:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6833,
|
||||
"type": 1,
|
||||
"status": 3,
|
||||
"device": "联想",
|
||||
"deviceModel": "ThinkPad X1 Carbon",
|
||||
"owner": "宇航员",
|
||||
"phone": "18888888885",
|
||||
"createdTime": "2024-03-06T14:49:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6834,
|
||||
"type": 1,
|
||||
"status": 4,
|
||||
"device": "ROG",
|
||||
"deviceModel": "魔霸 7 Plus",
|
||||
"owner": "约书亚",
|
||||
"phone": "18888888884",
|
||||
"createdTime": "2024-03-06T19:49:17.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6835,
|
||||
"type": 1,
|
||||
"status": 5,
|
||||
"device": "荣耀",
|
||||
"deviceModel": "触屏笔记本",
|
||||
"owner": "玉米",
|
||||
"phone": "18888888883",
|
||||
"createdTime": "2024-03-06T19:39:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6836,
|
||||
"type": 1,
|
||||
"status": 6,
|
||||
"device": "ROG",
|
||||
"deviceModel": "幻 14",
|
||||
"owner": "晓洋",
|
||||
"phone": "18888888882",
|
||||
"createdTime": "2024-03-06T09:49:27.043865",
|
||||
"isConfirmed": false
|
||||
},
|
||||
{
|
||||
"id": 6839,
|
||||
"type": 0,
|
||||
"status": 7,
|
||||
"device": "HAL",
|
||||
"deviceModel": "卡比手办",
|
||||
"owner": "蘑菇云",
|
||||
"phone": "18888888877",
|
||||
"createdTime": "2024-03-09T19:49:27.043865",
|
||||
"isConfirmed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
|
@ -9,6 +9,8 @@ export default defineAppConfig({
|
|||
'pages/user/report/report',
|
||||
'pages/user/member/member',
|
||||
'pages/TicketDetail/TicketDetail',
|
||||
'pages/TicketList/TicketList',
|
||||
'pages/404/404',
|
||||
],
|
||||
window: {
|
||||
backgroundTextStyle: 'light',
|
||||
|
|
|
|||
21
src/app.ts
|
|
@ -2,30 +2,13 @@ import { PropsWithChildren } from 'react';
|
|||
import { useLaunch } from '@tarojs/taro';
|
||||
import 'taro-ui/dist/style/index.scss';
|
||||
import './app.scss';
|
||||
import { checkLogin, checkToken } from './service/checkLogin';
|
||||
import wechatUser from './wechat';
|
||||
import { loginAte } from './service/login';
|
||||
import { getInfo } from './service/getInfo';
|
||||
import { pingAte } from './service/pingAte';
|
||||
|
||||
function App({ children }: PropsWithChildren<any>) {
|
||||
useLaunch(() => {
|
||||
console.log('App launched.');
|
||||
// if (checkLogin()) {
|
||||
// wechatUser.setToken(checkToken());
|
||||
// if(getMemberInfo());
|
||||
// } else {
|
||||
// loginAte();
|
||||
// }
|
||||
checkLogin((success) => {
|
||||
if (success) {
|
||||
wechatUser.setToken(checkToken());
|
||||
getInfo();
|
||||
} else {
|
||||
loginAte();
|
||||
}
|
||||
pingAte();
|
||||
});
|
||||
});
|
||||
|
||||
// children 是将要会渲染的页面
|
||||
return children;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1710991023487" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12657" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><path d="M512 42.666667q95.658667 0 182.485333 37.162667t149.674667 100.010667 100.010667 149.674667 37.162667 182.485333-37.162667 182.485333-100.010667 149.674667-149.674667 100.010667-182.485333 37.162667-182.485333-37.162667-149.674667-100.010667-100.010667-149.674667-37.162667-182.485333 37.162667-182.485333 100.010667-149.674667 149.674667-100.010667 182.485333-37.162667zM512 128q-77.994667 0-149.162667 30.506667t-122.496 81.834667-81.834667 122.496-30.506667 149.162667 30.506667 149.162667 81.834667 122.496 122.496 81.834667 149.162667 30.506667 149.162667-30.506667 122.496-81.834667 81.834667-122.496 30.506667-149.162667-30.506667-149.162667-81.834667-122.496-122.496-81.834667-149.162667-30.506667zM512 213.333333q17.664 0 30.165333 12.501333t12.501333 30.165333l0 238.336 115.669333 115.328q12.330667 12.330667 12.330667 30.336t-12.330667 30.336-30.336 12.330667-30.336-12.330667l-128-128q-12.330667-12.330667-12.330667-30.336l0-256q0-17.664 12.501333-30.165333t30.165333-12.501333z" fill="#E69966" p-id="12658"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 746 B After Width: | Height: | Size: 746 B |
|
|
@ -1 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1710604932901" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4288" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24"><path d="M512 121.6c217.6 0 390.4 172.8 390.4 390.4S729.6 902.4 512 902.4 121.6 729.6 121.6 512 294.4 121.6 512 121.6m0-89.6C246.4 32 32 249.6 32 512s217.6 480 480 480 480-217.6 480-480S774.4 32 512 32z" p-id="4289"></path><path d="M675.2 512H508.8V284.8c0-25.6-19.2-41.6-41.6-41.6H464c-25.6 0-41.6 19.2-41.6 41.6v272c0 25.6 19.2 41.6 41.6 41.6h214.4c25.6 0 44.8-22.4 44.8-44.8s-22.4-41.6-48-41.6z" p-id="4290"></path></svg>
|
||||
|
Before Width: | Height: | Size: 746 B |
|
|
@ -1 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1709907392895" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9700" width="48" height="48" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M512 32C246.4 32 32 246.4 32 512s214.4 480 480 480 480-214.4 480-480S777.6 32 512 32z m160 566.4c19.2 19.2 19.2 51.2 0 73.6-19.2 19.2-51.2 19.2-73.6 0L512 585.6 425.6 672c-19.2 19.2-51.2 19.2-73.6 0-19.2-19.2-19.2-51.2 0-73.6l86.4-86.4-86.4-86.4c-19.2-19.2-19.2-51.2 0-73.6 19.2-19.2 51.2-19.2 73.6 0l86.4 86.4 86.4-86.4c19.2-19.2 51.2-19.2 73.6 0 19.2 19.2 19.2 51.2 0 73.6L585.6 512l86.4 86.4z" p-id="9701" fill="#d4237a"></path></svg>
|
||||
|
Before Width: | Height: | Size: 768 B |
|
|
@ -1 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1709907148592" class="icon" viewBox="0 0 1410 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4262" width="66.09375" height="48" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M385.420696 906.172765L1004.039509 20.583293a47.214703 47.214703 0 0 1 44.414648-20.276253c18.634842 1.448304 31.766129 10.524341 39.297309 27.035004a49.049221 49.049221 0 0 1-3.76559 49.145774L435.242346 1001.278045a49.531989 49.531989 0 0 1-31.669576 20.276253 44.800863 44.800863 0 0 1-36.207594-8.207055L18.806738 752.362906a48.469899 48.469899 0 0 1-18.05552-31.669576 47.311256 47.311256 0 0 1 9.076037-36.207594 44.028434 44.028434 0 0 1 31.669575-18.924502 49.918203 49.918203 0 0 1 36.207594 9.848465l307.716272 230.763066z m686.495982-461.622685a47.021595 47.021595 0 0 1-34.75929-13.517502 47.021595 47.021595 0 0 1-13.517502-34.75929c0-14.096823 4.441465-25.683253 13.517502-34.75929a47.021595 47.021595 0 0 1 34.75929-13.517502h289.660752c14.096823 0 25.5867 4.441465 34.75929 13.517502 8.979483 9.076037 13.517502 20.662467 13.517502 34.75929a47.021595 47.021595 0 0 1-13.517502 34.75929 47.021595 47.021595 0 0 1-34.75929 13.517502h-289.660752z m-193.107168 289.660752a47.021595 47.021595 0 0 1-34.75929-13.517502 47.021595 47.021595 0 0 1-13.517502-34.75929c0-14.096823 4.441465-25.683253 13.517502-34.75929a47.021595 47.021595 0 0 1 34.75929-13.517502h482.76792c14.096823 0 25.5867 4.441465 34.75929 13.517502 8.979483 9.076037 13.517502 20.662467 13.517502 34.75929a47.021595 47.021595 0 0 1-13.517502 34.75929 47.021595 47.021595 0 0 1-34.75929 13.517502h-482.76792z m-193.107168 289.660752a47.021595 47.021595 0 0 1-34.75929-13.517502 47.021595 47.021595 0 0 1-13.517502-34.75929c0-14.096823 4.441465-25.683253 13.517502-34.75929a47.021595 47.021595 0 0 1 34.75929-13.517502h675.875088c14.096823 0 25.5867 4.441465 34.75929 13.517502 8.979483 9.076037 13.517502 20.662467 13.517502 34.75929a47.021595 47.021595 0 0 1-13.517502 34.75929 47.021595 47.021595 0 0 1-34.75929 13.517502h-675.875088z" p-id="4263" fill="#8a8a8a"></path></svg>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
|
|
@ -1 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1709907302076" class="icon" viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7483" width="48.09375" height="48" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M123.252 739.482L406.85 455.885l-60.34-60.34-287.64 287.64c-30.893 30.894-31.708 80.946-0.814 111.84l177.279 177.278c30.863 30.864 80.945 30.08 111.84-0.814l287.609-287.61-60.34-60.34-283.597 283.597-167.654-167.654z" p-id="7484" fill="#8a8a8a"></path><path d="M717.75 223.245l65.107-65.348 122.58 121.374-62.331 62.572-109.064 44.56a81.444 81.444 0 0 0-27.274 18.404L562.013 553.183l61.064 59.616 144.122-147.742 109.034-44.531a80.337 80.337 0 0 0 26.67-17.8l123.364-123.848-243.863-241.45L656.686 163.69c-7.452 7.452-13.365 16.382-17.408 26.097l-44.56 107.616-136.972 137.574 60.46 60.22 137.605-138.209c7.482-7.482 13.366-16.382 17.438-26.127l44.47-107.646z" p-id="7485" fill="#8a8a8a"></path><path d="M351.156 295.623L746.713 691.18q30.17 30.17 0 60.34t-60.34 0L290.816 355.962q-30.17-30.17 0-60.34t60.34 0zM222.24 728.35a42.667 42.667 0 0 1 60.31 1.055l24.739 25.584a42.667 42.667 0 0 1-61.366 59.254l-24.74-25.644a42.624 42.624 0 0 1 1.027-60.28z" p-id="7486" fill="#8a8a8a"></path></svg>
|
||||
|
Before Width: | Height: | Size: 1.3 KiB |
|
|
@ -1 +0,0 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1709907338992" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8608" width="48" height="48" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M832 0H192C85.952 0 0 86.016 0 192v640a192 192 0 0 0 192 192h640a192 192 0 0 0 192-192V192c0-105.984-85.952-192-192-192z m64 832c0 35.392-28.608 64-64 64H192a64 64 0 0 1-64-64V192c0-35.328 28.672-64 64-64h640a64 64 0 0 1 64 64v640zM669.376 330.88L443.136 557.12l-90.56-90.496c-24.96-25.024-65.472-25.024-90.496 0s-25.024 65.536 0 90.496l135.808 135.744a63.936 63.936 0 0 0 90.496 0l271.488-271.488c25.024-25.024 25.024-65.472 0-90.496s-65.472-25.024-90.496 0z" p-id="8609" fill="#12c53d"></path></svg>
|
||||
|
Before Width: | Height: | Size: 832 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711724022815" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7442" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 85.333333c235.648 0 426.666667 191.061333 426.666667 426.666667s-191.018667 426.666667-426.666667 426.666667S85.333333 747.605333 85.333333 512 276.352 85.333333 512 85.333333z m0 71.125334c-196.053333 0-355.541333 159.488-355.541333 355.541333 0 196.053333 159.488 355.541333 355.541333 355.541333 196.053333 0 355.541333-159.488 355.541333-355.541333 0-196.053333-159.488-355.541333-355.541333-355.541333zM480 256a32 32 0 0 1 31.701333 27.648L512 288V512h138.666667a32 32 0 0 1 4.352 63.701333l-4.352 0.298667h-170.666667a32 32 0 0 1-31.701333-27.648l-0.298667-4.352v-256a32 32 0 0 1 32-32z" fill="#bfbfbf" p-id="7443"></path></svg>
|
||||
|
After Width: | Height: | Size: 972 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711724082044" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8459" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M572.341333 512l268.490667-268.501333a42.666667 42.666667 0 0 0-59.274667-61.376c-0.362667 0.341333-0.704 0.693333-1.056 1.045333L512 451.658667 243.509333 183.168a42.666667 42.666667 0 0 0-60.341333 60.330667L451.669333 512 183.168 780.501333a42.666667 42.666667 0 0 0 59.669333 61.002667l0.672-0.672L512 572.341333l268.501333 268.490667C788.832 849.162667 799.754667 853.333333 810.666667 853.333333s21.845333-4.170667 30.165333-12.501333a42.666667 42.666667 0 0 0 0-60.330667L572.341333 512z" p-id="8460" fill="#d81e06"></path></svg>
|
||||
|
After Width: | Height: | Size: 869 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711724278042" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11057" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M756.821333 256C691.541333 203.264 601.472 170.666667 512 170.666667a341.333333 341.333333 0 1 0 341.333333 341.333333 42.666667 42.666667 0 0 1 85.333334 0c0 235.648-191.018667 426.666667-426.666667 426.666667S85.333333 747.648 85.333333 512 276.352 85.333333 512 85.333333c108.757333 0 217.898667 39.082667 298.666667 104.490667V128a42.666667 42.666667 0 0 1 85.333333 0v170.666667a42.666667 42.666667 0 0 1-42.666667 42.666666h-170.666666a42.666667 42.666667 0 0 1 0-85.333333h74.154666z" p-id="11058" fill="#f0d323"></path></svg>
|
||||
|
After Width: | Height: | Size: 867 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711724571236" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15667" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M223.579432 955.45963a24.234651 24.234651 0 0 1-3.071998-1.979732 508.995927 508.995927 0 0 1-184.319877-185.616943 34.133311 34.133311 0 0 1 12.561058-46.557836 33.655444 33.655444 0 0 1 46.694369 12.561058 440.25144 440.25144 0 0 0 159.880427 160.767893 15.223457 15.223457 0 0 1 2.525865 1.365333c12.424525 6.826662 24.917317 13.653324 37.751441 19.455987A443.733038 443.733038 0 0 0 701.582313 127.726848l-4.64213-2.662398-4.369064-2.389332H692.16152a444.347437 444.347437 0 0 0-423.867451 0l-1.365333 0.682666-3.618131 1.979732-5.188263 2.935465A440.114907 440.114907 0 0 0 95.852584 290.406206a33.723711 33.723711 0 0 1-46.694369 12.561059 34.133311 34.133311 0 0 1-12.561058-46.694369A512.477525 512.477525 0 0 1 695.233517 47.854901a0.682666 0.682666 0 0 0 0.546133 0c1.365332 0.682666 2.525865 1.365332 3.891198 1.843199a511.658326 511.658326 0 0 1-1.365333 925.35405l-1.228799 0.682666-3.618131 1.570132a505.71913 505.71913 0 0 1-176.947082 45.329037 492.065805 492.065805 0 0 1-37.614908 1.433599 507.835395 507.835395 0 0 1-255.317163-68.607954z" fill="#bfbfbf" p-id="15668"></path><path d="M539.176022 288.358208a231.492112 231.492112 0 0 1 163.498557 283.169944 34.133311 34.133311 0 0 1-41.847439 24.098118 34.133311 34.133311 0 0 1-24.098117-41.779173A162.952425 162.952425 0 1 0 437.117423 669.012887a34.133311 34.133311 0 0 1 24.098117 41.847439 34.133311 34.133311 0 0 1-41.779172 24.098117 231.219046 231.219046 0 1 1 119.739654-446.600235z" fill="#bfbfbf" p-id="15669"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711723813811" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4236" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M800 288a47.84 47.84 0 0 0-33.936 14.064L432 636.112 257.936 462.064a48 48 0 1 0-67.872 67.872l208 208c8.688 8.688 20.688 14.064 33.936 14.064s25.248-5.376 33.936-14.064l368-368A48 48 0 0 0 800 288z" fill="#bfbfbf" p-id="4237"></path></svg>
|
||||
|
After Width: | Height: | Size: 573 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711724195931" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9893" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M800 288a47.84 47.84 0 0 0-33.936 14.064L432 636.112 257.936 462.064a48 48 0 1 0-67.872 67.872l208 208c8.688 8.688 20.688 14.064 33.936 14.064s25.248-5.376 33.936-14.064l368-368A48 48 0 0 0 800 288z" fill="#14ca20" p-id="9894"></path></svg>
|
||||
|
After Width: | Height: | Size: 573 B |
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711521868832" class="icon" viewBox="0 0 1025 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1603" xmlns:xlink="http://www.w3.org/1999/xlink" width="200.1953125" height="200"><path d="M982.668821 313.74918c-25.810101-60.752236-62.714-115.373446-109.685763-162.346233-46.972787-46.971763-101.593997-83.875662-162.346233-109.685763C647.666853 14.966132 580.925912 1.401699 512.268258 1.401699S376.868639 14.966132 313.898667 41.717184c-60.752236 25.810101-115.373446 62.714-162.346233 109.685763-46.971763 46.972787-83.875662 101.593997-109.685763 162.346233C15.115619 376.719151 1.551186 443.460092 1.551186 512.118771S15.115619 647.517366 41.866671 710.487337c25.810101 60.75326 62.714 115.37447 109.685763 162.346233 46.971763 46.972787 101.592974 83.876686 162.346233 109.685763 62.969971 26.752076 129.710912 40.316509 198.369591 40.316509s135.398595-13.564433 198.368567-40.316509c60.75326-25.809077 115.37447-62.712976 162.346233-109.685763 46.972787-46.971763 83.876686-101.592974 109.685763-162.346233 26.752076-62.969971 40.316509-129.710912 40.316509-198.368567S1009.419873 376.719151 982.668821 313.74918zM937.435615 691.271058c-23.333323 54.923257-56.71096 104.317532-99.204249 146.811845-42.494313 42.493289-91.888588 75.870926-146.811845 99.204249-56.8584 24.155503-117.133505 36.403219-179.152287 36.403219-62.018782 0-122.293887-12.247716-179.152287-36.403219-54.923257-23.333323-104.317532-56.71096-146.810821-99.204249-42.493289-42.494313-75.870926-91.888588-99.204249-146.811845C62.944374 634.412658 50.697682 574.136529 50.697682 512.118771c0-62.018782 12.247716-122.293887 36.403219-179.152287 23.333323-54.923257 56.709936-104.317532 99.204249-146.810821s91.888588-75.870926 146.810821-99.204249c56.8584-24.155503 117.133505-36.403219 179.152287-36.403219 62.017758 0 122.292863 12.247716 179.152287 36.403219 54.923257 23.333323 104.317532 56.709936 146.810821 99.204249 42.494313 42.493289 75.870926 91.888588 99.205273 146.810821 24.155503 56.8584 36.403219 117.134529 36.403219 179.152287S961.591118 634.412658 937.435615 691.271058z" fill="#ffffff" p-id="1604"></path><path d="M704.62457 319.769626c-9.997216-9.996192-26.203273-9.996192-36.199466 0L512.382933 475.810773 356.341786 319.769626c-9.996192-9.996192-26.204297-9.996192-36.199466 0-9.996192 9.996192-9.996192 26.203273 0 36.199466l156.041147 156.041147L320.14232 668.05241c-9.996192 9.997216-9.996192 26.204297 0 36.199466 4.997584 4.998608 11.549426 7.496888 18.100245 7.496888s13.101637-2.49828 18.100245-7.496888l156.041147-156.041147L668.424081 704.251876c4.998608 4.998608 11.548403 7.496888 18.100245 7.496888s13.101637-2.49828 18.100245-7.496888c9.996192-9.996192 9.996192-26.203273 0-36.199466L548.583423 512.011263l156.041147-156.041147C714.620762 345.973923 714.620762 329.765818 704.62457 319.769626z" fill="#ffffff" p-id="1605"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
|
@ -9,7 +9,7 @@ import {
|
|||
import pt from '@/plain-text';
|
||||
import { RequestState } from '@/service';
|
||||
import { getTicketInfo } from '@/service/ticketsInfo';
|
||||
import { AtCard, AtSteps } from 'taro-ui';
|
||||
import { AtActivityIndicator, AtCard, AtSteps, AtToast } from 'taro-ui';
|
||||
import NoteList from '../NoteList/NoteList';
|
||||
|
||||
interface StepItemData {
|
||||
|
|
@ -66,9 +66,21 @@ export default class DetailFramework extends Component<
|
|||
|
||||
render(): ReactNode {
|
||||
if (this.state.rs.loading) {
|
||||
return <View>Loading</View>;
|
||||
} else if (!this.state.rs.success) {
|
||||
return <View>Request failed</View>;
|
||||
return (
|
||||
<AtActivityIndicator
|
||||
mode='center'
|
||||
content={pt.get().actIndicator.loading}
|
||||
></AtActivityIndicator>
|
||||
);
|
||||
}
|
||||
if (!this.state.rs.success) {
|
||||
return (
|
||||
<AtToast
|
||||
isOpened
|
||||
text={pt.get().toast.error}
|
||||
icon='close-circle'
|
||||
></AtToast>
|
||||
);
|
||||
}
|
||||
|
||||
const elements: ShowElements = {
|
||||
|
|
|
|||
|
|
@ -44,8 +44,12 @@ export default class NoteCard extends Component<NoteCardProps, {}> {
|
|||
/>
|
||||
</View>
|
||||
<View
|
||||
className='at-col'
|
||||
style={{ marginTop: '40rpx', marginBottom: '40rpx' }}
|
||||
className='at-col at-col--wrap'
|
||||
style={{
|
||||
marginTop: '40rpx',
|
||||
marginBottom: '40rpx',
|
||||
wordBreak: 'normal',
|
||||
}}
|
||||
>
|
||||
<View className='at-article__p'>{note.op}</View>
|
||||
<View className='at-article__info'>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
import { AtListItem } from 'taro-ui';
|
||||
import repair from '@/assets/icons/MyTickets/repair.svg';
|
||||
import finished from '@/assets/icons/MyTickets/finished.svg';
|
||||
import tick from '@/assets/icons/MyTickets/tick.svg';
|
||||
import fail from '@/assets/icons/MyTickets/fail.svg';
|
||||
import clock from '@/assets/icons/MyTickets/clock.svg';
|
||||
import create from '@/assets/icons/TicketState/create.svg';
|
||||
import repair from '@/assets/icons/TicketState/repair.svg';
|
||||
import success from '@/assets/icons/TicketState/success.svg';
|
||||
import fail from '@/assets/icons/TicketState/fail.svg';
|
||||
import refuse from '@/assets/icons/TicketState/refuse.svg';
|
||||
import retrieve from '@/assets/icons/TicketState/retrieve.svg';
|
||||
import pt from '@/plain-text';
|
||||
import Taro from '@tarojs/taro';
|
||||
import { FixStatus } from '@/common';
|
||||
|
|
@ -29,14 +30,14 @@ export class TicketListItem {
|
|||
this.status = status;
|
||||
this.createAt = createAt;
|
||||
this.iconMap = new Map<FixStatus, string>([
|
||||
[0, repair],
|
||||
[0, create],
|
||||
[1, repair],
|
||||
[2, clock],
|
||||
[3, finished],
|
||||
[4, clock],
|
||||
[5, tick],
|
||||
[6, clock],
|
||||
[7, fail],
|
||||
[2, refuse],
|
||||
[3, retrieve],
|
||||
[4, success],
|
||||
[5, retrieve],
|
||||
[6, fail],
|
||||
[7, retrieve],
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
export default definePageConfig({
|
||||
usingComponents: {},
|
||||
});
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
import { Component, ReactNode } from 'react';
|
||||
import { View } from '@tarojs/components';
|
||||
import Taro from '@tarojs/taro';
|
||||
import pt from '@/plain-text';
|
||||
import PageFooter from '@/components/PageFooter/PageFooter';
|
||||
import './404.scss';
|
||||
|
||||
export default class NotFoundPage extends Component {
|
||||
componentDidMount(): void {
|
||||
Taro.setNavigationBarTitle({
|
||||
title: pt.get().navBar.notFound,
|
||||
});
|
||||
}
|
||||
render(): ReactNode {
|
||||
return (
|
||||
<View>
|
||||
<View
|
||||
className='page-title'
|
||||
style={{ marginTop: '150rpx', marginBottom: '240rpx' }}
|
||||
>
|
||||
<View className='at-article__h1' style={{ fontWeight: 'bold' }}>
|
||||
{pt.get().notFound.titleZhCn}
|
||||
</View>
|
||||
<View className='at-article__h2'>{pt.get().notFound.descZhCn}</View>
|
||||
<View style={{ height: '150rpx' }}></View>
|
||||
<View className='at-article__h1' style={{ fontWeight: 'bold' }}>
|
||||
{pt.get().notFound.titleEnUs}
|
||||
</View>
|
||||
<View className='at-article__h2'>{pt.get().notFound.descEnUs}</View>
|
||||
</View>
|
||||
<PageFooter />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
export default definePageConfig({
|
||||
usingComponents: {},
|
||||
});
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
import { Component, ReactNode } from 'react';
|
||||
import { View } from '@tarojs/components';
|
||||
import {
|
||||
AtActivityIndicator,
|
||||
AtList,
|
||||
AtPagination,
|
||||
AtSearchBar,
|
||||
AtToast,
|
||||
} from 'taro-ui';
|
||||
import Taro from '@tarojs/taro';
|
||||
import moment from 'moment';
|
||||
import pt from '@/plain-text';
|
||||
import PageFooter from '@/components/PageFooter/PageFooter';
|
||||
import { RequestState } from '@/service';
|
||||
import { getTicketList, searchTicketList } from '@/service/ticketList';
|
||||
import { TicketListItem } from '@/components/TicketListItem/TicketListItem';
|
||||
import './TicketList.scss';
|
||||
|
||||
interface TicketListState {
|
||||
fixList: Array<TicketListItem>;
|
||||
rs: RequestState;
|
||||
currentPage: number;
|
||||
totalPage: number;
|
||||
pageSize: number;
|
||||
search: string;
|
||||
}
|
||||
|
||||
export default class TicketListPage extends Component<{}, TicketListState> {
|
||||
state = {
|
||||
fixList: [new TicketListItem(0, '', '', 1, moment())],
|
||||
rs: new RequestState(),
|
||||
currentPage: 1,
|
||||
totalPage: 1,
|
||||
pageSize: 8,
|
||||
search: '',
|
||||
};
|
||||
|
||||
componentDidMount(): void {
|
||||
Taro.setNavigationBarTitle({
|
||||
title: pt.get().navBar.ticketList,
|
||||
});
|
||||
getTicketList(this);
|
||||
}
|
||||
|
||||
onPageChange(): void {
|
||||
this.setState({
|
||||
rs: new RequestState(),
|
||||
});
|
||||
getTicketList(this);
|
||||
}
|
||||
|
||||
onSearchChange(search): void {
|
||||
this.setState({
|
||||
search: search,
|
||||
});
|
||||
return search;
|
||||
}
|
||||
|
||||
onActionClick(): void {
|
||||
this.setState({
|
||||
rs: new RequestState(),
|
||||
});
|
||||
searchTicketList(this);
|
||||
}
|
||||
|
||||
render(): ReactNode {
|
||||
if (this.state.rs.loading) {
|
||||
return (
|
||||
<AtActivityIndicator
|
||||
mode='center'
|
||||
content={pt.get().actIndicator.loading}
|
||||
></AtActivityIndicator>
|
||||
);
|
||||
}
|
||||
if (!this.state.rs.success) {
|
||||
return (
|
||||
<AtToast
|
||||
isOpened
|
||||
text={pt.get().toast.error}
|
||||
icon='close-circle'
|
||||
></AtToast>
|
||||
);
|
||||
}
|
||||
const fixListRenderer = this.state.fixList.map((item) => item.render());
|
||||
return (
|
||||
<View>
|
||||
<View style={{ marginTop: '20rpx', marginBottom: '20rpx' }}>
|
||||
<AtSearchBar
|
||||
actionName={pt.get().ticketList.search}
|
||||
value={this.state.search}
|
||||
onChange={this.onSearchChange.bind(this)}
|
||||
onActionClick={this.onActionClick.bind(this)}
|
||||
/>
|
||||
</View>
|
||||
<AtList>{fixListRenderer}</AtList>
|
||||
<View style={{ marginTop: '40rpx' }}>
|
||||
<AtPagination
|
||||
total={this.state.totalPage}
|
||||
pageSize={this.state.pageSize}
|
||||
current={this.state.currentPage}
|
||||
onPageChange={this.onPageChange.bind(this)}
|
||||
></AtPagination>
|
||||
</View>
|
||||
<PageFooter />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@ import { AtTimeline } from 'taro-ui';
|
|||
import pt from '@/plain-text';
|
||||
import tick from '@/assets/icons/MainPage/tick.svg';
|
||||
import cross from '@/assets/icons/MainPage/cross.svg';
|
||||
import clock from '@/assets/icons/MemberPage/clock.svg';
|
||||
import clock from '@/assets/icons/MainPage/offduty.svg';
|
||||
import wechatUser from '@/wechat';
|
||||
|
||||
export class DutyData {
|
||||
|
|
@ -12,6 +12,7 @@ export class DutyData {
|
|||
this.isInDuty = false;
|
||||
this.inDutyCnt = 3;
|
||||
this.currentDuty = '2';
|
||||
this.otherDutyTime = '9:30-11:30';
|
||||
this.offDutyReason = '学园维修';
|
||||
this.dutyRecoverTime = '下周一';
|
||||
this.place = '东三-204';
|
||||
|
|
@ -20,6 +21,7 @@ export class DutyData {
|
|||
isInDuty: boolean;
|
||||
inDutyCnt?: number;
|
||||
currentDuty?: 'off' | '1' | '2' | '3' | 'others';
|
||||
otherDutyTime?: string;
|
||||
offDutyReason?: string;
|
||||
dutyRecoverTime?: string;
|
||||
place: string;
|
||||
|
|
@ -101,7 +103,12 @@ export class DutyInfo extends Component {
|
|||
<Card isInDuty={data.isInDuty} place={data.place} />
|
||||
<AtTimeline
|
||||
items={[
|
||||
{ title: id.currentDutyText(data.currentDuty || 'off') },
|
||||
{
|
||||
title:
|
||||
data.currentDuty == 'others'
|
||||
? id.currentDutyText('others') + data.otherDutyTime
|
||||
: id.currentDutyText(data.currentDuty || 'off'),
|
||||
},
|
||||
{ title: id.inDutyCnt(data.inDutyCnt as number) },
|
||||
]}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
import React from 'react';
|
||||
import { View, Image } from '@tarojs/components';
|
||||
import pt from '@/plain-text';
|
||||
import logo from '@/assets/images/UserPage/logo.png';
|
||||
import wechatUser from '@/wechat';
|
||||
|
||||
const logo = 'https://wiki.zjueva.net/images/evalogo_hd.png';
|
||||
|
||||
export default class TitleCard extends React.Component {
|
||||
render(): React.ReactNode {
|
||||
const mainPage = pt.get().mainPage;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,17 @@
|
|||
import { View } from '@tarojs/components';
|
||||
import { Component, ReactNode } from 'react';
|
||||
import Taro from '@tarojs/taro';
|
||||
import { AtCard, AtAccordion, AtInputNumber, AtButton, AtList } from 'taro-ui';
|
||||
import {
|
||||
AtCard,
|
||||
AtAccordion,
|
||||
AtInputNumber,
|
||||
AtButton,
|
||||
AtList,
|
||||
AtListItem,
|
||||
AtActivityIndicator,
|
||||
AtToast,
|
||||
} from 'taro-ui';
|
||||
import clockIcon from '@/assets/icons/MainPage/clock.svg';
|
||||
import type CustomTabBar from '@/custom-tab-bar';
|
||||
import PageFooter from '@/components/PageFooter/PageFooter';
|
||||
import pt from '@/plain-text';
|
||||
|
|
@ -106,8 +116,7 @@ export default class MainPage extends Component<{}, MainPageState> {
|
|||
};
|
||||
|
||||
componentDidMount(): void {
|
||||
const ptPage = wechatUser.getAccess() ? 'mainPage' : 'memberPage';
|
||||
|
||||
const ptPage = wechatUser.getAccess() ? 'memberPage' : 'mainPage';
|
||||
this.setState({
|
||||
dutyData: new DutyData(),
|
||||
inDutyCnt: 0,
|
||||
|
|
@ -166,14 +175,31 @@ export default class MainPage extends Component<{}, MainPageState> {
|
|||
}, submitInterval);
|
||||
}
|
||||
|
||||
ticketListPage() {
|
||||
Taro.navigateTo({
|
||||
url: '/pages/TicketList/TicketList',
|
||||
});
|
||||
}
|
||||
|
||||
render(): ReactNode {
|
||||
const mainPage = pt.get().mainPage;
|
||||
const memberPage = pt.get().memberPage;
|
||||
if (this.state.rs.loading) {
|
||||
return <View>loading</View>;
|
||||
return (
|
||||
<AtActivityIndicator
|
||||
mode='center'
|
||||
content={pt.get().actIndicator.loading}
|
||||
></AtActivityIndicator>
|
||||
);
|
||||
}
|
||||
if (!this.state.rs.success) {
|
||||
return <View>Failed</View>;
|
||||
return (
|
||||
<AtToast
|
||||
isOpened
|
||||
text={pt.get().toast.error}
|
||||
icon='close-circle'
|
||||
></AtToast>
|
||||
);
|
||||
}
|
||||
const fixListRenderer = this.state.fixList.map((item) => item.render());
|
||||
return (
|
||||
|
|
@ -239,7 +265,18 @@ export default class MainPage extends Component<{}, MainPageState> {
|
|||
/>
|
||||
</View>
|
||||
{wechatUser.getAccess() ? (
|
||||
<View>
|
||||
<AtList>{fixListRenderer}</AtList>
|
||||
<AtList>
|
||||
<AtListItem
|
||||
title={pt.get().mainPage.ticketList.title}
|
||||
note={pt.get().mainPage.ticketList.note}
|
||||
arrow='right'
|
||||
thumb={clockIcon}
|
||||
onClick={this.ticketListPage}
|
||||
/>
|
||||
</AtList>
|
||||
</View>
|
||||
) : (
|
||||
<View></View>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { Component, ReactNode } from 'react';
|
|||
import { Image, View } from '@tarojs/components';
|
||||
import Taro from '@tarojs/taro';
|
||||
import pt from '@/plain-text';
|
||||
import PageFooter from '@/components/PageFooter/PageFooter';
|
||||
import './about.scss';
|
||||
|
||||
export default class AboutPage extends Component {
|
||||
|
|
@ -14,7 +15,10 @@ export default class AboutPage extends Component {
|
|||
return (
|
||||
<View>
|
||||
<View
|
||||
style={{ marginTop: '60rpx', marginBottom: '60rpx' }}
|
||||
style={{
|
||||
marginTop: '200rpx',
|
||||
marginBottom: '60rpx',
|
||||
}}
|
||||
className='at-row at-row__align--start'
|
||||
>
|
||||
<View className='at-col at-col-1 at-col--auto'>
|
||||
|
|
@ -24,7 +28,10 @@ export default class AboutPage extends Component {
|
|||
mode='aspectFit'
|
||||
/>
|
||||
</View>
|
||||
<View className='at-article at-col'>
|
||||
<View
|
||||
className='at-article at-col at-col--wrap'
|
||||
style={{ wordBreak: 'normal' }}
|
||||
>
|
||||
<View className='at-article__h1'>
|
||||
{pt.get().aboutPage.dean.nickname}
|
||||
</View>
|
||||
|
|
@ -40,17 +47,20 @@ export default class AboutPage extends Component {
|
|||
</View>
|
||||
</View>
|
||||
<View
|
||||
style={{ marginTop: '60rpx', marginBottom: '60rpx' }}
|
||||
style={{ marginTop: '100rpx', marginBottom: '60rpx' }}
|
||||
className='at-row at-row__align--start'
|
||||
>
|
||||
<View className='at-col at-col-1 at-col--auto'>
|
||||
<Image
|
||||
style='width: 240rpx; height: 240rpx; margin-left: 60rpx; margin-right: 30rpx; margin-top: 30rpx; border-radius: 120rpx'
|
||||
src='https://wiki.zjueva.net/images/1/10/%E5%A4%B4%E5%83%8F.jpg?20240319171222'
|
||||
src='https://static.fracher21.top/head.jpg'
|
||||
mode='aspectFit'
|
||||
/>
|
||||
</View>
|
||||
<View className='at-article at-col'>
|
||||
<View
|
||||
className='at-article at-col at-col--wrap'
|
||||
style={{ wordBreak: 'normal' }}
|
||||
>
|
||||
<View className='at-article__h1'>
|
||||
{pt.get().aboutPage.fracher.nickname}
|
||||
</View>
|
||||
|
|
@ -65,6 +75,8 @@ export default class AboutPage extends Component {
|
|||
</View>
|
||||
</View>
|
||||
</View>
|
||||
<View style={{ height: '200rpx' }}></View>
|
||||
<PageFooter />
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { Component, ReactNode } from 'react';
|
||||
import { AtForm, AtInput, AtButton, AtMessage } from 'taro-ui';
|
||||
import { AtButton, AtMessage } from 'taro-ui';
|
||||
import Taro from '@tarojs/taro';
|
||||
import pt from '@/plain-text';
|
||||
import { memberLogin, memberLogout } from '@/service/memberLogin';
|
||||
|
|
@ -11,8 +11,6 @@ const logInterval = 5000;
|
|||
|
||||
export default class UserMemberPage extends Component {
|
||||
state = {
|
||||
stuid: '',
|
||||
passwd: '',
|
||||
isLoading: false,
|
||||
isDisable: false,
|
||||
};
|
||||
|
|
@ -21,34 +19,11 @@ export default class UserMemberPage extends Component {
|
|||
title: pt.get().navBar.user.memberLogin,
|
||||
});
|
||||
}
|
||||
handleChangeStuid(stuid: string) {
|
||||
this.setState({
|
||||
stuid: stuid,
|
||||
});
|
||||
return stuid;
|
||||
}
|
||||
handleChangePasswd(passwd: string) {
|
||||
this.setState({
|
||||
passwd: passwd,
|
||||
});
|
||||
return passwd;
|
||||
}
|
||||
onSubmit() {
|
||||
|
||||
onLogin() {
|
||||
this.setState({
|
||||
isDisable: true,
|
||||
});
|
||||
if (this.state.stuid == '' || this.state.passwd == '') {
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.blank,
|
||||
type: 'error',
|
||||
});
|
||||
setTimeout(() => {
|
||||
this.setState({
|
||||
isDisable: false,
|
||||
});
|
||||
}, logInterval);
|
||||
return;
|
||||
}
|
||||
memberLogin(this);
|
||||
setTimeout(() => {
|
||||
this.setState({
|
||||
|
|
@ -72,40 +47,35 @@ export default class UserMemberPage extends Component {
|
|||
render(): ReactNode {
|
||||
return !wechatUser.getAccess() ? (
|
||||
<View style={{ marginTop: '30rpx', width: '94%', marginLeft: '3%' }}>
|
||||
<AtForm onSubmit={this.onSubmit.bind(this)}>
|
||||
<AtMessage />
|
||||
<AtInput
|
||||
required
|
||||
name='stuid'
|
||||
title={pt.get().memberPage.stuidText.title}
|
||||
type='number'
|
||||
clear
|
||||
placeholder={pt.get().memberPage.stuidText.placeholder}
|
||||
value={this.state.stuid}
|
||||
onChange={this.handleChangeStuid.bind(this)}
|
||||
/>
|
||||
<AtInput
|
||||
clear
|
||||
required
|
||||
name='name'
|
||||
title={pt.get().memberPage.passwdText.title}
|
||||
type='password'
|
||||
placeholder={pt.get().memberPage.passwdText.placeholder}
|
||||
value={this.state.passwd}
|
||||
onChange={this.handleChangePasswd.bind(this)}
|
||||
/>
|
||||
<View className='page-title' style={{ marginBottom: '40rpx' }}>
|
||||
<View className='at-article__h1' style={{ fontWeight: 'bold' }}>
|
||||
{pt.get().memberPage.loginMainTitleLine}
|
||||
</View>
|
||||
<View className='at-article__h2'>
|
||||
{pt.get().memberPage.loginSubTitleLine}
|
||||
</View>
|
||||
</View>
|
||||
<AtButton
|
||||
loading={this.state.isLoading}
|
||||
formType='submit'
|
||||
type='primary'
|
||||
disabled={this.state.isDisable}
|
||||
onClick={this.onLogin.bind(this)}
|
||||
>
|
||||
{pt.get().button.buttonText.login}
|
||||
{pt.get().button.memberText.auth}
|
||||
</AtButton>
|
||||
</AtForm>
|
||||
</View>
|
||||
) : (
|
||||
<View style={{ marginTop: '30rpx', width: '94%', marginLeft: '3%' }}>
|
||||
<AtMessage />
|
||||
<View className='page-title' style={{ marginBottom: '40rpx' }}>
|
||||
<View className='at-article__h1' style={{ fontWeight: 'bold' }}>
|
||||
{pt.get().memberPage.logoutMainTitleLine}
|
||||
</View>
|
||||
<View className='at-article__h2'>
|
||||
{pt.get().memberPage.logoutSubTitleLine}
|
||||
</View>
|
||||
</View>
|
||||
<AtButton type='primary' onClick={this.onLogout.bind(this)}>
|
||||
{pt.get().button.buttonText.logout}
|
||||
</AtButton>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { Component, ReactNode } from 'react';
|
||||
import { View } from '@tarojs/components';
|
||||
import { AtList } from 'taro-ui';
|
||||
import { AtActivityIndicator, AtList, AtToast } from 'taro-ui';
|
||||
import Taro from '@tarojs/taro';
|
||||
import moment from 'moment';
|
||||
import pt from '@/plain-text';
|
||||
|
|
@ -29,10 +29,21 @@ export default class MyTicketPage extends Component<{}, MyTicketState> {
|
|||
|
||||
render(): ReactNode {
|
||||
if (this.state.rs.loading) {
|
||||
return <View>loading</View>;
|
||||
return (
|
||||
<AtActivityIndicator
|
||||
mode='center'
|
||||
content={pt.get().actIndicator.loading}
|
||||
></AtActivityIndicator>
|
||||
);
|
||||
}
|
||||
if (!this.state.rs.success) {
|
||||
return <View>Failed</View>;
|
||||
return (
|
||||
<AtToast
|
||||
isOpened
|
||||
text={pt.get().toast.error}
|
||||
icon='close-circle'
|
||||
></AtToast>
|
||||
);
|
||||
}
|
||||
const fixListRenderer = this.state.fixList.map((item) => item.render());
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -9,11 +9,11 @@ import userIcon from '@/assets/icons/UserPage/user.svg';
|
|||
import clockIcon from '@/assets/icons/UserPage/clock.svg';
|
||||
import messageIcon from '@/assets/icons/UserPage/message.svg';
|
||||
import pt, { Lang } from '@/plain-text';
|
||||
import logo from '@/assets/images/UserPage/logo.png';
|
||||
import { setLocaleData } from '@/service/localeData';
|
||||
import wechatUser from '@/wechat';
|
||||
import './user.scss';
|
||||
|
||||
const logo = 'https://wiki.zjueva.net/images/evalogo_hd.png';
|
||||
const memberClickTimes = 7;
|
||||
|
||||
export default class UserPage extends Component {
|
||||
|
|
@ -123,7 +123,7 @@ export default class UserPage extends Component {
|
|||
className='at-row at-row__justify--center at-row__align--center'
|
||||
style='height:120rpx;color:#696969;'
|
||||
>
|
||||
<Text style={{ fontSize: '32rpx' }}> EVA Notify v1.0.0</Text>
|
||||
<Text style={{ fontSize: '32rpx' }}> EVA Eta v1.0.0</Text>
|
||||
</View>
|
||||
<AtList>
|
||||
<AtListItem
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
export interface NotFoundText {
|
||||
titleZhCn: string;
|
||||
titleEnUs: string;
|
||||
descZhCn: string;
|
||||
descEnUs: string;
|
||||
}
|
||||
|
||||
export const notFound: NotFoundText = {
|
||||
titleZhCn: '啊哦...请求出错了...',
|
||||
descZhCn: '请确保处于校网环境后,点击右上角 "...-重新进入小程序"!',
|
||||
titleEnUs: 'Oops...Network Error...',
|
||||
descEnUs:
|
||||
'Please make sure you\'re in ZJU\'s school network environment and then click on the top right corner "... - re-enter the applet"!',
|
||||
};
|
||||
|
|
@ -23,8 +23,8 @@ export const aboutPageZhCn: AboutPageText = {
|
|||
fracher: {
|
||||
nickname: '宇航员',
|
||||
username: '@ FrozenArcher',
|
||||
status: 'Ate 总设计, Eta 合作贡献者',
|
||||
note: '6~',
|
||||
status: 'Ate 总设计, 项目合作贡献者',
|
||||
note: 'React 真是太有意思了',
|
||||
},
|
||||
};
|
||||
|
||||
|
|
@ -38,7 +38,7 @@ export const aboutPageEnUs: AboutPageText = {
|
|||
fracher: {
|
||||
nickname: 'Fracher',
|
||||
username: '@ FrozenArcher',
|
||||
status: "Ate's General Designer, Eta's Contributor",
|
||||
note: '6~',
|
||||
status: "Ate's General Designer, Project's Contributor",
|
||||
note: 'React is so fun',
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
export interface ActIndicatorText {
|
||||
loading: string;
|
||||
}
|
||||
|
||||
export const actIndicatorZhCn: ActIndicatorText = {
|
||||
loading: '加载中...',
|
||||
};
|
||||
|
||||
export const actIndicatorEnUs: ActIndicatorText = {
|
||||
loading: 'Loading...',
|
||||
};
|
||||
|
|
@ -10,6 +10,9 @@ export interface ButtonText {
|
|||
error: string;
|
||||
blank: string;
|
||||
};
|
||||
memberText: {
|
||||
auth: string;
|
||||
};
|
||||
loginText: {
|
||||
success: string;
|
||||
error: string;
|
||||
|
|
@ -33,6 +36,9 @@ export const buttonZhCn: ButtonText = {
|
|||
error: '提交失败:',
|
||||
blank: '请填写完整!',
|
||||
},
|
||||
memberText: {
|
||||
auth: '协会统一身份认证登录',
|
||||
},
|
||||
loginText: {
|
||||
success: '登录成功',
|
||||
error: '登录失败',
|
||||
|
|
@ -56,6 +62,9 @@ export const buttonEnUs: ButtonText = {
|
|||
error: 'Error: ',
|
||||
blank: 'Please fill in the blanks!',
|
||||
},
|
||||
memberText: {
|
||||
auth: 'EVA Auth Login Entry',
|
||||
},
|
||||
loginText: {
|
||||
success: 'Login Success',
|
||||
error: 'Login Failed',
|
||||
|
|
|
|||
|
|
@ -23,6 +23,11 @@ export interface MainPageText {
|
|||
stepList: Array<{ title: string }>;
|
||||
tipsList: Array<{ title: string }>;
|
||||
|
||||
ticketList: {
|
||||
title: string;
|
||||
note: string;
|
||||
};
|
||||
|
||||
dutyCard: {
|
||||
offDuty: {
|
||||
title: string;
|
||||
|
|
@ -71,6 +76,10 @@ export const mainPageZhCn: MainPageText = {
|
|||
{ title: '204 也是实验室,请勿在内饮食~' },
|
||||
{ title: '我们是志愿服务,不收取任何礼物哦~' },
|
||||
],
|
||||
ticketList: {
|
||||
title: '预填写工单列表',
|
||||
note: '在这里查看所有的预填写工单!',
|
||||
},
|
||||
dutyCard: {
|
||||
offDuty: {
|
||||
title: '未值班',
|
||||
|
|
@ -90,7 +99,7 @@ export const mainPageZhCn: MainPageText = {
|
|||
case '3':
|
||||
return '第三班 18:00-20:30';
|
||||
case 'others':
|
||||
return '其他值班时间,见通知';
|
||||
return '当班 ';
|
||||
}
|
||||
},
|
||||
inDutyCnt: (n) => '当前值班人数:' + n,
|
||||
|
|
@ -132,6 +141,10 @@ export const mainPageEnUs: MainPageText = {
|
|||
{ title: '204 is also a laboratory. Do not eat inside.' },
|
||||
{ title: 'We are volunteers and do not take any gifts.' },
|
||||
],
|
||||
ticketList: {
|
||||
title: 'Pre-filling ticket list',
|
||||
note: 'Browse for all pre-filling tickets here!',
|
||||
},
|
||||
dutyCard: {
|
||||
offDuty: {
|
||||
title: 'Off Duty',
|
||||
|
|
@ -151,7 +164,7 @@ export const mainPageEnUs: MainPageText = {
|
|||
case '3':
|
||||
return '3rd Shift 18:00-20:30';
|
||||
case 'others':
|
||||
return 'Other duty time, see notice';
|
||||
return 'Current Shift ';
|
||||
}
|
||||
},
|
||||
inDutyCnt: (n) => 'EVA members on duty: ' + n,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
export interface MemberPageText {
|
||||
mainTitleLine: string;
|
||||
subTitleLine: string;
|
||||
loginMainTitleLine: string;
|
||||
loginSubTitleLine: string;
|
||||
logoutMainTitleLine: string;
|
||||
logoutSubTitleLine: string;
|
||||
cardTitle: {
|
||||
dutyInfo: string;
|
||||
stepInfo: string;
|
||||
|
|
@ -55,6 +59,10 @@ export interface MemberPageText {
|
|||
export const memberPageZhCn: MemberPageText = {
|
||||
mainTitleLine: '您好,',
|
||||
subTitleLine: '祝你满绩每一天',
|
||||
loginMainTitleLine: '协会成员登录入口',
|
||||
loginSubTitleLine: '请使用 EVA 统一身份认证,登录后点击下方按钮以扫描二维码',
|
||||
logoutMainTitleLine: '协会成员登出',
|
||||
logoutSubTitleLine: '登出后须扫码重新登录!',
|
||||
cardTitle: {
|
||||
dutyInfo: '值班情况',
|
||||
stepInfo: '维修步骤',
|
||||
|
|
@ -106,8 +114,8 @@ export const memberPageZhCn: MemberPageText = {
|
|||
admin: '组长管理入口',
|
||||
},
|
||||
cardTips: {
|
||||
dutyInfo: '提示:可以先前往【维修】页面在线上预填写工单!',
|
||||
stepInfo: '提示:请在 20:30 之前取走自己的物品哦!',
|
||||
dutyInfo: '提示:如果有事不能值班,请及时请假!',
|
||||
stepInfo: '提示:维修完成请清点机主物品!',
|
||||
tipsInfo: '',
|
||||
},
|
||||
extraInfo: {
|
||||
|
|
@ -132,6 +140,11 @@ export const memberPageZhCn: MemberPageText = {
|
|||
export const memberPageEnUs: MemberPageText = {
|
||||
mainTitleLine: 'Hi! ',
|
||||
subTitleLine: 'Have a great day!',
|
||||
loginMainTitleLine: 'EVA Member Entry',
|
||||
loginSubTitleLine:
|
||||
'Please use EVA Auth, log in and click the button below to scan the QR code',
|
||||
logoutMainTitleLine: 'EVA Member Logout',
|
||||
logoutSubTitleLine: 'After logging out, scan the code again to log back in!',
|
||||
cardTitle: {
|
||||
dutyInfo: 'Duty Situation',
|
||||
stepInfo: 'Maintenance Steps',
|
||||
|
|
@ -183,8 +196,9 @@ export const memberPageEnUs: MemberPageText = {
|
|||
admin: 'Entry for admin',
|
||||
},
|
||||
cardTips: {
|
||||
dutyInfo: '提示:可以先前往【维修】页面在线上预填写工单!',
|
||||
stepInfo: '提示:请在 20:30 之前取走自己的物品哦!',
|
||||
dutyInfo:
|
||||
"Tips: If you can't be on duty, please ask for an excused absence!",
|
||||
stepInfo: "Tips: Inventory owner's belongings after maintenance!",
|
||||
tipsInfo: '',
|
||||
},
|
||||
extraInfo: {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
export interface NavBarTitle {
|
||||
notFound: string;
|
||||
ticketDetail: string;
|
||||
ticketList: string;
|
||||
user: {
|
||||
myTicket: string;
|
||||
report: string;
|
||||
|
|
@ -11,7 +13,9 @@ export interface NavBarTitle {
|
|||
}
|
||||
|
||||
export const navBarTitleZhCn: NavBarTitle = {
|
||||
notFound: '连接失败',
|
||||
ticketDetail: '工单详情',
|
||||
ticketList: '所有工单',
|
||||
user: {
|
||||
myTicket: '我的工单',
|
||||
report: '意见反馈',
|
||||
|
|
@ -23,7 +27,9 @@ export const navBarTitleZhCn: NavBarTitle = {
|
|||
};
|
||||
|
||||
export const navBarTitleEnUs: NavBarTitle = {
|
||||
notFound: 'Failed',
|
||||
ticketDetail: 'Ticket Detail',
|
||||
ticketList: 'All Tickets',
|
||||
user: {
|
||||
myTicket: 'My Tickets',
|
||||
report: 'Report',
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import { FixStatus } from '@/common';
|
|||
export interface TicketListText {
|
||||
createdAt(time: string): string;
|
||||
statusMap: Map<FixStatus, string>;
|
||||
search: string;
|
||||
}
|
||||
|
||||
export const ticketListZhCn: TicketListText = {
|
||||
|
|
@ -19,6 +20,7 @@ export const ticketListZhCn: TicketListText = {
|
|||
[6, '维修翻车待取回'],
|
||||
[7, '维修翻车已取回'],
|
||||
]),
|
||||
search: '搜索',
|
||||
};
|
||||
|
||||
export const ticketListEnUs: TicketListText = {
|
||||
|
|
@ -35,4 +37,5 @@ export const ticketListEnUs: TicketListText = {
|
|||
[6, 'Pending Retrieval (Failed)'],
|
||||
[7, 'Retrieved (Failed)'],
|
||||
]),
|
||||
search: 'search',
|
||||
};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
export interface ToastText {
|
||||
error: string;
|
||||
}
|
||||
|
||||
export const toastZhCn: ToastText = {
|
||||
error: '获取失败',
|
||||
};
|
||||
|
||||
export const toastEnUs: ToastText = {
|
||||
error: 'Request Failed',
|
||||
};
|
||||
|
|
@ -18,6 +18,13 @@ import {
|
|||
import { CommonText, commonTextEnUs, commonTextZhCn } from './common';
|
||||
import { TipsText, tipsEnUs, tipsZhCn } from './Tips';
|
||||
import { ModalText, modalEnUs, modalZhCn } from './Modal';
|
||||
import { ToastText, toastEnUs, toastZhCn } from './Toast';
|
||||
import {
|
||||
ActIndicatorText,
|
||||
actIndicatorEnUs,
|
||||
actIndicatorZhCn,
|
||||
} from './ActIndicator';
|
||||
import { NotFoundText, notFound } from './404';
|
||||
|
||||
interface TextRecord {
|
||||
common: CommonText;
|
||||
|
|
@ -36,6 +43,9 @@ interface TextRecord {
|
|||
ticketDetail: TicketDetailText;
|
||||
tips: TipsText;
|
||||
modal: ModalText;
|
||||
toast: ToastText;
|
||||
actIndicator: ActIndicatorText;
|
||||
notFound: NotFoundText;
|
||||
}
|
||||
|
||||
const textZhCn: TextRecord = {
|
||||
|
|
@ -55,6 +65,9 @@ const textZhCn: TextRecord = {
|
|||
ticketDetail: ticketDetailZhCn,
|
||||
tips: tipsZhCn,
|
||||
modal: modalZhCn,
|
||||
toast: toastZhCn,
|
||||
actIndicator: actIndicatorZhCn,
|
||||
notFound: notFound,
|
||||
};
|
||||
|
||||
const textEnUs: TextRecord = {
|
||||
|
|
@ -74,6 +87,9 @@ const textEnUs: TextRecord = {
|
|||
ticketDetail: ticketDetailEnUs,
|
||||
tips: tipsEnUs,
|
||||
modal: modalEnUs,
|
||||
toast: toastEnUs,
|
||||
actIndicator: actIndicatorEnUs,
|
||||
notFound: notFound,
|
||||
};
|
||||
|
||||
// type Lang = 'zh_CN' | 'en_US' | ...;
|
||||
|
|
|
|||
|
|
@ -27,12 +27,12 @@ export function addToOreo(that: TicketDetail) {
|
|||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isOreoLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.error + err.toString(),
|
||||
message: pt.get().button.submitText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@ export function changeDutyCnt(that: MainPage) {
|
|||
}, reLaunchInterval);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.error + err.toString(),
|
||||
message: pt.get().button.submitText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -35,12 +35,12 @@ export function changeStatus(that: TicketDetail, status: number) {
|
|||
}, reLaunchInterval);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isStatusLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.error + err.toString(),
|
||||
message: pt.get().button.submitText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ export function checkToken(): string {
|
|||
return '';
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ export function getCurrentTicket(that: RepairPage) {
|
|||
.catch((err) => {
|
||||
console.log(err);
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.error + err.toString(),
|
||||
message: pt.get().button.submitText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ export function getDutyInfo(that: MainPage) {
|
|||
isInDuty: data.isInDuty,
|
||||
inDutyCnt: data.inDutyCnt,
|
||||
currentDuty: data.currentDuty,
|
||||
otherDutyTime: data.otherDutyTime,
|
||||
place: data.place,
|
||||
},
|
||||
});
|
||||
|
|
@ -43,7 +44,7 @@ export function getDutyInfo(that: MainPage) {
|
|||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
let former = that.state.rs;
|
||||
that.setState({
|
||||
rs: former.trans(false),
|
||||
|
|
|
|||
|
|
@ -28,6 +28,6 @@ export function getDisable(that: TicketDetail, id: number) {
|
|||
}
|
||||
})
|
||||
.catch((reason) => {
|
||||
console.error(reason);
|
||||
console.log(reason.errMsg);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,6 @@ export function getInfo() {
|
|||
getLocaleData();
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,9 +24,8 @@ export function loginAte() {
|
|||
getLocaleData();
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
});
|
||||
getLocaleData();
|
||||
} else {
|
||||
console.log('Login Failed: ' + res.errMsg);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ export function getMemberDutyInfo(that: MainPage) {
|
|||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
dutyData: {
|
||||
isInDuty: false,
|
||||
|
|
|
|||
|
|
@ -8,13 +8,15 @@ export function memberLogin(that: UserMemberPage) {
|
|||
that.setState({
|
||||
isLoading: true,
|
||||
});
|
||||
Taro.scanCode({
|
||||
onlyFromCamera: true,
|
||||
success: (re) => {
|
||||
Taro.request({
|
||||
url: getUrl('/member/login'),
|
||||
method: 'POST',
|
||||
data: {
|
||||
token: wechatUser.getToken(),
|
||||
name: that.state.stuid,
|
||||
phone: that.state.passwd,
|
||||
code: re.result,
|
||||
},
|
||||
})
|
||||
.then((res) => {
|
||||
|
|
@ -40,15 +42,26 @@ export function memberLogin(that: UserMemberPage) {
|
|||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.loginText.error + err.toString(),
|
||||
message: pt.get().button.loginText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
that.setState({
|
||||
isLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.loginText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export function memberLogout(that: UserMemberPage) {
|
||||
|
|
@ -77,12 +90,12 @@ export function memberLogout(that: UserMemberPage) {
|
|||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.logoutText.error + err.toString(),
|
||||
message: pt.get().button.logoutText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -47,6 +47,6 @@ export function getMyTicketList(that: MyTicketPage) {
|
|||
that.setState({
|
||||
rs: former.trans(false),
|
||||
});
|
||||
console.log(reason);
|
||||
console.log(reason.errMsg);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@ export function pickTicket(that: TicketDetail) {
|
|||
}, reLaunchInterval);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isPickLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.error + err.toString(),
|
||||
message: pt.get().button.submitText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
import Taro from '@tarojs/taro';
|
||||
import wechatUser from '@/wechat';
|
||||
import { getUrl } from '.';
|
||||
import { checkLogin, checkToken } from './checkLogin';
|
||||
import { loginAte } from './login';
|
||||
import { getInfo } from './getInfo';
|
||||
|
||||
export function pingAte() {
|
||||
Taro.request({
|
||||
url: getUrl('/ping'),
|
||||
method: 'GET',
|
||||
data: {},
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res.data);
|
||||
checkLogin((success) => {
|
||||
if (success) {
|
||||
wechatUser.setToken(checkToken());
|
||||
getInfo();
|
||||
} else {
|
||||
loginAte();
|
||||
}
|
||||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err.errMsg);
|
||||
Taro.reLaunch({
|
||||
url: '/pages/404/404',
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
@ -27,12 +27,12 @@ export function reportMessage(that: ReportPage) {
|
|||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.error + err.toString(),
|
||||
message: pt.get().button.submitText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@ export function retrieve(that: TicketDetail) {
|
|||
}, reLaunchInterval);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isRetrieveLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.error + err.toString(),
|
||||
message: pt.get().button.submitText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@ export function submitComment(that: TicketDetail) {
|
|||
}, reLaunchInterval);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isCommentLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.error + err.toString(),
|
||||
message: pt.get().button.submitText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ export function submitTicket(that: RepairPage) {
|
|||
console.log(re);
|
||||
},
|
||||
fail: function (err) {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
},
|
||||
complete: function () {
|
||||
setTimeout(() => {
|
||||
|
|
@ -82,12 +82,12 @@ export function submitTicket(that: RepairPage) {
|
|||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.error + err.toString(),
|
||||
message: pt.get().button.submitText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,112 @@
|
|||
import TicketListPage from '@/pages/TicketList/TicketList';
|
||||
import { TicketListItem } from '@/components/TicketListItem/TicketListItem';
|
||||
import Taro from '@tarojs/taro';
|
||||
import moment from 'moment';
|
||||
import { FixStatus } from '@/common';
|
||||
import wechatUser from '@/wechat';
|
||||
import { getUrl } from '.';
|
||||
|
||||
export function getTicketList(that: TicketListPage) {
|
||||
Taro.request({
|
||||
url: getUrl('/tickets/list'),
|
||||
method: 'GET',
|
||||
data: {
|
||||
token: wechatUser.getToken(),
|
||||
pageId: that.state.currentPage,
|
||||
count: that.state.pageSize,
|
||||
querytype: 0,
|
||||
},
|
||||
})
|
||||
.then((res) => {
|
||||
let former = that.state.rs;
|
||||
const data = res.data.data;
|
||||
if (!res.data.success) {
|
||||
that.setState({
|
||||
rs: former.trans(false),
|
||||
});
|
||||
return;
|
||||
}
|
||||
that.setState({
|
||||
rs: former.trans(true),
|
||||
fixList: data.data.map(
|
||||
(item: {
|
||||
id: number;
|
||||
device: string;
|
||||
deviceModel: string;
|
||||
status: FixStatus;
|
||||
createdTime: moment.MomentInput;
|
||||
}) =>
|
||||
new TicketListItem(
|
||||
item.id,
|
||||
item.device,
|
||||
item.deviceModel,
|
||||
item.status,
|
||||
moment(item.createdTime),
|
||||
),
|
||||
),
|
||||
currentPage: data.pageIndex,
|
||||
pageSize: data.size,
|
||||
totalPage: data.pageCount,
|
||||
});
|
||||
})
|
||||
.catch((reason) => {
|
||||
let former = that.state.rs;
|
||||
that.setState({
|
||||
rs: former.trans(false),
|
||||
});
|
||||
console.log(reason);
|
||||
});
|
||||
}
|
||||
|
||||
export function searchTicketList(that: TicketListPage) {
|
||||
Taro.request({
|
||||
url: getUrl('/tickets/search'),
|
||||
method: 'GET',
|
||||
data: {
|
||||
token: wechatUser.getToken(),
|
||||
pageId: that.state.currentPage,
|
||||
count: that.state.pageSize,
|
||||
value: that.state.search,
|
||||
querytype: 0,
|
||||
},
|
||||
})
|
||||
.then((res) => {
|
||||
let former = that.state.rs;
|
||||
const data = res.data.data;
|
||||
if (!res.data.success) {
|
||||
that.setState({
|
||||
rs: former.trans(false),
|
||||
});
|
||||
return;
|
||||
}
|
||||
that.setState({
|
||||
rs: former.trans(true),
|
||||
fixList: data.data.map(
|
||||
(item: {
|
||||
id: number;
|
||||
device: string;
|
||||
deviceModel: string;
|
||||
status: FixStatus;
|
||||
createdTime: moment.MomentInput;
|
||||
}) =>
|
||||
new TicketListItem(
|
||||
item.id,
|
||||
item.device,
|
||||
item.deviceModel,
|
||||
item.status,
|
||||
moment(item.createdTime),
|
||||
),
|
||||
),
|
||||
currentPage: data.pageIndex,
|
||||
pageSize: data.size,
|
||||
totalPage: data.pageCount,
|
||||
});
|
||||
})
|
||||
.catch((reason) => {
|
||||
let former = that.state.rs;
|
||||
that.setState({
|
||||
rs: former.trans(false),
|
||||
});
|
||||
console.log(reason.errMsg);
|
||||
});
|
||||
}
|
||||
|
|
@ -81,6 +81,6 @@ export function getTicketInfo(that: DetailFramework, id: number) {
|
|||
that.setState({
|
||||
rs: former.trans(false),
|
||||
});
|
||||
console.error(reason);
|
||||
console.error(reason.errMsg);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,6 @@ export function getUncompletedTicketList(that: MainPage) {
|
|||
that.setState({
|
||||
rs: former.trans(false),
|
||||
});
|
||||
console.log(reason);
|
||||
console.log(reason.errMsg);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,12 +28,12 @@ export function updateUserInfo(that: InformPage) {
|
|||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
console.log(err.errMsg);
|
||||
that.setState({
|
||||
isLoading: false,
|
||||
});
|
||||
Taro.atMessage({
|
||||
message: pt.get().button.submitText.error + err.toString(),
|
||||
message: pt.get().button.submitText.error + err.errMsg,
|
||||
type: 'error',
|
||||
});
|
||||
});
|
||||
|
|
|
|||