tianyun 2 vuotta sitten
vanhempi
commit
e6ebd55382
4 muutettua tiedostoa jossa 305 lisäystä ja 0 poistoa
  1. 2 0
      readme.md
  2. 62 0
      simple-demo/excalidraw_all.html
  3. 47 0
      simple-demo/js/login.js
  4. 194 0
      simple-demo/user.html

+ 2 - 0
readme.md

@@ -0,0 +1,2 @@
+[web-base - excalidraw](https://excalidraw.tianyunperfect.cn/?a=28187784075&title=web-base)
+

+ 62 - 0
simple-demo/excalidraw_all.html

@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <title>页面标题</title>
+    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
+    <script src="js/login.js"></script>
+</head>
+<body>
+<label for="name">选择name:</label>
+<select id="name">
+    <option value="">加载中...</option>
+</select>
+<ul id="list"></ul>
+<script>
+
+    $(function() {
+        if (!checkLogin()) {
+            return;
+        }
+        $.getJSON('https://api.tianyunperfect.cn/excalidraw/all_name', function(result) {
+            if (result.code === 1) {
+                let names = result.data;
+                let selectHtml = '';
+                for (let i = 0; i < names.length; i++) {
+                    selectHtml += '<option value="' + names[i].name + '">' + names[i].name + '</option>';
+                }
+                $('#name').html(selectHtml);
+                $('#name').val(names[0].name);
+                loadList(names[0].name);
+            } else {
+                alert(result.message);
+            }
+        });
+
+        $('#name').change(function() {
+            let name = $(this).val();
+            loadList(name);
+        });
+
+        function loadList(name) {
+            $.getJSON('https://api.tianyunperfect.cn/excalidraw/get_by_name?name=' + name, function(result) {
+                if (result.code === 1) {
+                    let data = result.data;
+                    let listHtml = '';
+                    for (let i = 0; i < data.length; i++) {
+                        let a = data[i].id;
+                        let title = data[i].name;
+                        let version = data[i].version;
+                        let url = 'https://excalidraw.tianyunperfect.cn/?a=' + a + '&title=' + title + '&version=' + version;
+                        listHtml += '<li><a href="' + url + '" target="_blank">' + title + '_' + version + '</a></li>';
+                    }
+                    $('#list').html(listHtml);
+                } else {
+                    alert(result.message);
+                }
+            });
+        }
+    });
+</script>
+</body>
+</html>

+ 47 - 0
simple-demo/js/login.js

@@ -0,0 +1,47 @@
+function checkLogin() {
+    const loginId = getCookie('loginId');
+    if (loginId) {
+        // 如果 cookie 中有 loginId,说明用户已经登录,直接放行
+        return true;
+    } else {
+        // 如果没有 loginId,弹出登录框
+        const username = prompt('请输入用户名');
+        const password = prompt('请输入密码');
+        // 发送登录请求
+        const xhr = new XMLHttpRequest();
+        xhr.open('POST', 'https://api.tianyunperfect.cn/user/login', false);
+        xhr.setRequestHeader('Content-Type', 'application/json');
+        xhr.send(JSON.stringify({
+            username,
+            password
+        }));
+        const response = JSON.parse(xhr.responseText);
+        if (response.code === 1) {
+            // 登录成功,设置 loginId 的 cookie,并放行
+            setCookie('loginId', response.data.token, 30);
+            return true;
+        } else {
+            // 登录失败,弹出错误提示
+            alert(response.message);
+            return false;
+        }
+    }
+}
+
+function getCookie(name) {
+    const cookies = document.cookie.split(';');
+    for (let i = 0; i < cookies.length; i++) {
+        const cookie = cookies[i].trim();
+        if (cookie.startsWith(name + '=')) {
+            return cookie.substring(name.length + 1);
+        }
+    }
+    return null;
+}
+
+function setCookie(name, value, days) {
+    const expires = new Date();
+    expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);
+    document.cookie = name + '=' + value + ';expires=' + expires.toUTCString();
+}
+checkLogin();

+ 194 - 0
simple-demo/user.html

@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <title>管理员页面</title>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>
+    <script src="https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
+    <script src="js/login.js"></script>
+</head>
+<body>
+<div id="app">
+    <div>
+        <h2>用户列表</h2>
+        <table>
+            <thead>
+            <tr>
+                <th>ID</th>
+                <th>姓名</th>
+                <th>备注</th>
+                <th>操作</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr v-for="user in userList" :key="user.id">
+                <td>{{ user.id }}</td>
+                <td>{{ user.name }}</td>
+                <td>{{ user.introduction }}</td>
+                <td>
+                    <button @click="editUser(user)">编辑</button>
+                    <button @click="deleteUser(user)">删除</button>
+                </td>
+            </tr>
+            </tbody>
+        </table>
+        <br>
+        <button @click="addUser">新增用户</button>
+    </div>
+    <div v-if="showAddUser">
+        <h2>新增用户</h2>
+        <form @submit.prevent="submitAddUser">
+            <label for="name">姓名:</label>
+            <input type="text" id="name" v-model="newUser.name" required>
+            <br>
+            <label for="introduction">备注:</label>
+            <input type="text" id="introduction" v-model="newUser.introduction" required>
+            <br>
+            <label for="password">密码:</label>
+            <input type="password" id="password" v-model="newUser.password" required>
+            <br>
+            <button type="submit">提交</button>
+        </form>
+    </div>
+    <div v-if="showEditUser">
+        <h2>编辑用户</h2>
+        <form @submit.prevent="submitEditUser">
+            <label for="name">姓名:</label>
+            <input type="text" id="name" v-model="selectedUser.name" required>
+            <br>
+            <label for="introduction">备注:</label>
+            <input type="text" id="introduction" v-model="selectedUser.introduction" required>
+            <br>
+            <label for="password">密码:</label>
+            <input type="password" id="password" v-model="selectedUser.password" required>
+            <br>
+            <button type="submit">提交</button>
+        </form>
+    </div>
+</div>
+<script>
+    var app = new Vue({
+        el: '#app',
+        data: {
+            username: '',
+            password: '',
+            isLoggedIn: false,
+            userList: [],
+            showAddUser: false,
+            showEditUser: false,
+            newUser: {
+                name: '',
+                introduction: '',
+                password: ''
+            },
+            selectedUser: {
+                id: '',
+                name: '',
+                introduction: '',
+                password: ''
+            }
+        },
+        methods: {
+            getUserList: function() {
+                axios.get('https://api.tianyunperfect.cn/user/user_list', {
+                    headers: {
+                        'Authorization': 'Bearer ' + localStorage.getItem('token')
+                    }
+                })
+                    .then(response => {
+                        if (response.data.code === 1) {
+                            this.userList = response.data.data;
+                        } else {
+                            alert(response.data.message);
+                        }
+                    })
+                    .catch(error => {
+                        alert(error);
+                    });
+            },
+            addUser: function() {
+                this.showAddUser = true;
+            },
+            submitAddUser: function() {
+                axios.post('https://api.tianyunperfect.cn/user/register', {
+                    name: this.newUser.name,
+                    introduction: this.newUser.introduction,
+                    password: this.newUser.password
+                }, {
+                    headers: {
+                        'Authorization': 'Bearer ' + localStorage.getItem('token')
+                    }
+                })
+                    .then(response => {
+                        if (response.data.code === 1) {
+                            this.showAddUser = false;
+                            this.getUserList();
+                        } else {
+                            alert(response.data.message);
+                        }
+                    })
+                    .catch(error => {
+                        alert(error);
+                    });
+            },
+            editUser: function(user) {
+                this.showEditUser = true;
+                this.selectedUser.id = user.id;
+                this.selectedUser.name = user.name;
+                this.selectedUser.introduction = user.introduction;
+                this.selectedUser.password = '';
+            },
+            submitEditUser: function() {
+                axios.post('https://api.tianyunperfect.cn/user/update_password', {
+                    id: this.selectedUser.id,
+                    password: this.selectedUser.password
+                }, {
+                    headers: {
+                        'Authorization': 'Bearer ' + localStorage.getItem('token')
+                    }
+                })
+                    .then(response => {
+                        if (response.data.code === 1) {
+                            this.showEditUser = false;
+                            this.getUserList();
+                        } else {
+                            alert(response.data.message);
+                        }
+                    })
+                    .catch(error => {
+                        alert(error);
+                    });
+            },
+            deleteUser: function(user) {
+                if (confirm('确定删除该用户?')) {
+                    axios.post('https://api.tianyunperfect.cn/user/delete', {
+                        id: user.id
+                    }, {
+                        headers: {
+                            'Authorization': 'Bearer ' + localStorage.getItem('token')
+                        }
+                    })
+                        .then(response => {
+                            if (response.data.code === 1) {
+                                this.getUserList();
+                            } else {
+                                alert(response.data.message);
+                            }
+                        })
+                        .catch(error => {
+                            alert(error);
+                        });
+                }
+            }
+        },
+        created: function() {
+            if (checkLogin()) {
+                this.isLoggedIn = true;
+                this.getUserList();
+            }
+        }
+    });
+</script>
+</body>
+</html>