主頁 > 前端設計 > SpringBoot+MyBatisPlus+Vue 前后端分離專案快速搭建【前端篇】【快速生成后端代碼、封裝結果集、增刪改查、模糊查找】【畢設基礎框架】

SpringBoot+MyBatisPlus+Vue 前后端分離專案快速搭建【前端篇】【快速生成后端代碼、封裝結果集、增刪改查、模糊查找】【畢設基礎框架】

2021-05-03 15:40:20 前端設計

前后端分離專案快速搭建【前端篇】

  • 后端篇
  • 前端篇
    • 創建vue專案
    • 安裝所需工具
    • 開始編碼
      • 1、在根目錄下添加vue.config.js檔案
      • 2、撰寫main.js
      • 3、撰寫App.vue
      • 4、撰寫axiosutils.js
      • 5、在components目錄下撰寫menu.vue
      • 7、在router目錄下撰寫router.js
      • 8、在src目錄下創建vuex
      • 9、撰寫home.vue
      • 10、撰寫user相關代碼(前端核心邏輯代碼、增刪改查還有模糊查詢,包括邏輯洗掉和物理洗掉)
        • 撰寫index.vue
        • 撰寫edit.vue
    • 啟動前后端測驗效果
      • 啟動后端
      • 啟動前端
      • 測驗
        • 添加測驗
        • 洗掉測驗(物理洗掉)
        • 禁用測驗(邏輯洗掉)
        • 模糊查找測驗

后端篇

SpringBoot+MyBatisPlus+Vue 前后端分離專案快速搭建【后端篇】【快速生成后端代碼、封裝結果集、增刪改查、模糊查找】【畢設基礎框架】

前端篇

創建vue專案

1、找個檔案夾進入命令列,輸入:vue create vue-front

在這里插入圖片描述

2、直接回車,等待片刻,稍微有點小久

在這里插入圖片描述

3、根據提示指令測驗

在這里插入圖片描述
在這里插入圖片描述
打開瀏覽器輸入:http://localhost:8080/
在這里插入圖片描述

安裝所需工具

安裝的工具會有點多,為了提供更好的拓展性,可以自主選擇安裝(不建議),后面的代碼中都是使用到了,不安裝然后按照我的代碼寫可能會報錯,建議安裝,這樣拓展性更高,

1、安裝vue-router

npm install vue-router

在這里插入圖片描述
在這里插入圖片描述

2、安裝 element-ui

npm i element-ui -S

在這里插入圖片描述
在這里插入圖片描述

3、安裝axios

npm install axios

在這里插入圖片描述

在這里插入圖片描述

4、安裝 vuex

npm install vuex --save

在這里插入圖片描述
在這里插入圖片描述

5、安裝 axios-utils

npm i axios-utils

在這里插入圖片描述
在這里插入圖片描述
6、安裝vuex-persistedstate

npm i -S vuex-persistedstate

在這里插入圖片描述
在這里插入圖片描述

開始編碼

在這里插入圖片描述

1、在根目錄下添加vue.config.js檔案

在這里插入圖片描述
vue.config.js:

module.exports = {
    lintOnSave:false, //關閉代碼格式化校驗工具
    devServer:{
        port: 81//修改啟動埠
    }
}

2、撰寫main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router/router.js'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import axios from '@/utils/axiosutils.js'
import store from '@/vuex'
Vue.use(ElementUI);
Vue.config.productionTip = false
Vue.prototype.axios = axios
new Vue({
	router,
  render: h => h(App),
}).$mount('#app')

3、撰寫App.vue

<template>
  <div id="app">
   <router-view></router-view>
  </div>
</template>

<script>


export default {
	
  name: 'App',
  components: {   }
}
</script>

<style>
*{
	padding: 0;
	margin: 0; 
}
</style>

4、撰寫axiosutils.js

在src目錄下創建utils目錄,并在utils目錄創建axiosutils.js

import axios from 'axios'
import store from '../vuex'
axios.defaults.baseURL = 'http://127.0.0.1:80'
if (store.getters.getToken) {
  axios.defaults.headers.common['token'] = store.getters.getToken
}
axios.defaults.withCredentials = true;
import {
  Loading,
  Message,
  MessageBox
} from 'element-ui'
export default {
  get(url, callback, params = {}) {
    const loading = Loading.service({
      lock: true,
      text: '資料加載中',
      spinner: 'el-icon-loading',
      background: 'rgba(255, 255, 255, 0.7)'
    })
    axios.get(url, {
      params: params
    }).then(response => { 
      if (response.data.code === 200) {
        callback(response.data)
      } else {
        Message.error(response.data.message)
      }
    }).catch(err => {
      Message.error(err);
    }).finally(() => {
      loading.close()
    })
  },
  post(url, callback, params = {},msg) {
    const formData = new FormData()
    for (let key in params) {
      formData.append(key, params[key])
    }
    const loading = Loading.service({
      lock: true,
      text: '資料提交中',
      spinner: 'el-icon-loading',
      background: 'rgba(255, 255, 255, 0.7)'
    })
    setTimeout(() => {
      loading.close()
    }, 10000)
    axios.post(url, formData)
      .then(response => {
        if (response.data.code === 200) {

          if(msg===undefined  ){
              Message.success(response.data.message)
          }else if(msg != null && msg.length != 0 ){
            Message.success(msg)
          }

 
          callback(response.data)
        } else {
          Message.error(response.data.message)
        }
      }).catch(err => {
        Message.error(err)
      }).finally(() => {
        loading.close()
      })
  },
  setToken(token) {
    axios.defaults.headers.common['token'] = token
  }
}

5、在components目錄下撰寫menu.vue

<template>
	<div>
		<el-menu default-active="2" class="el-menu-vertical-demo" router background-color="#545c64" text-color="#fff"
			active-text-color="#ffd04b">
			<el-submenu index="1">
				<template slot="title">
					<i class="el-icon-location"></i>
					<span>系統管理</span>
				</template>
				<el-menu-item-group>
					<el-menu-item index="/user">用戶管理</el-menu-item>
				</el-menu-item-group>
			</el-submenu>
			
		</el-menu>



	</div>
</template>

<script>
	export default {
		name: 'Menu',
		components: {

		},
		data() {
			return {}
		},
		methods: {

		},
		created() {}
	}
</script>

<style>
</style>

7、在router目錄下撰寫router.js

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

export default new VueRouter({

	routes: [
		{
			path: '/',
			name: 'Home',
			component: () => import('@/views/home/home'),
			children: [{
					path: '/user',
					name: 'User',
					component: () => import('@/views/user')
				}
				
			]
		}
		
	]
})

8、在src目錄下創建vuex

1、撰寫getters.js

export default {
  getToken: state => {return state.token}
}

2、撰寫index.js

import Vuex from 'vuex'

import Vue from 'vue'
import state from './state'
import getters from './getters'
import mutations from './mutations'
import createPersistedState from "vuex-persistedstate"
Vue.use(Vuex)
export default new Vuex.Store({
  plugins: [createPersistedState({
    storage: window.sessionStorage
  })],
  state,
  mutations,
  getters
})

3、撰寫mutations.js

export default {
  setToken: (state,token) => {state.token = token}
}

4、撰寫state.js

export default {
  token: ''
}

9、撰寫home.vue

在views目錄下創建home目錄,在home目錄下創建home.vue

<template>
  <div>
  <el-container class="wrap" >
    <el-header class="header" >牛哄哄的柯南</el-header>
    <el-container>
      <el-aside width="260px" class="aside">
		    
		  <Menu></Menu>
		 
	  </el-aside>
      <el-main class="main">
		  
		  <router-view></router-view>
		  	  
	  </el-main>
    </el-container>
  </el-container>
  	
  
  </div>
</template>

<script>
	
	import Menu from '@/components/menu'
	
  export default {
    name: 'Home',
    components: {
		Menu
    },
    data() {
      return {
      }
    },
    methods: {

    },
    created() { }
  }
</script>

<style >
	
	.wrap{
			height: 80vh;
			
		}
		.header{
			background-color: grey;
		}
		
		.aside{
			background-color: black;
		}
		.main{
			background-color: white;
		}
	
	
</style>

10、撰寫user相關代碼(前端核心邏輯代碼、增刪改查還有模糊查詢,包括邏輯洗掉和物理洗掉)

在views目錄下創建user目錄,在home目錄下創建index.vue和edit.vue

撰寫index.vue

<template>
	<div>

		<el-row>

			<el-col :span="5">
				<el-button type="danger" icon="el-icon-delete" circle @click="batchdel"></el-button>
			</el-col>
			<el-col :span="9">
				<el-input v-model="search.name" placeholder="請輸入賬號查找"></el-input>
			</el-col>
			<el-col :span="6">
				<el-button type="primary"   @click="searchData">查詢</el-button>
				<el-tooltip class="item" effect="dark" content="添加資料" placement="top-start">
					<el-button type="primary" @click="add">添加</el-button>
				</el-tooltip>
			</el-col>
		</el-row>
		<el-divider><i ></i></el-divider>

		<el-table :data="tableData" style="width: 100% ;" stripe
			@selection-change="handleSelectionChange">

			<el-table-column type="selection">
			</el-table-column>
			<el-table-column label="序號"  prop="userId">
			
			</el-table-column>
			<el-table-column label="賬號" prop="userName">
			
			</el-table-column>

			<el-table-column label="密碼" prop="password">

			</el-table-column>

			

			<el-table-column label="狀態" prop="userState" fixed="right">
				<template slot-scope="scope">
			
					<el-tag v-if="scope.row.userState == 1">正常</el-tag>
					<el-tag type="danger" v-else-if="scope.row.userState == 0">禁用中</el-tag>
			
				</template>
			</el-table-column>
			
			




			 
			<el-table-column label="操作" fixed="right" width="150">
				<template slot-scope="scope">
					
						<el-button size="mini" @click="edit(scope.row.userId)">編輯</el-button>
					
					<el-button size="mini" type="danger" @click="del(scope.row.userId)">禁用</el-button>
				</template>
			</el-table-column>

		</el-table>





		<el-pagination @current-change="currentChange" :current-page.sync="query.current" :page-size="query.pageSize"
			background layout="total,  prev, pager, next, jumper" :total="total" style="text-align: center;">
		</el-pagination>
		
		<el-dialog title="編輯" :visible.sync="showEdit" :key="showNum">
			<UserEdit :showEdit.sync="showEdit" @list="list" :id="id"></UserEdit>
		</el-dialog>


	</div>
</template>


<script>
	import UserEdit from '@/views/user/edit';

	export default {
		name: 'User',
		components: {
			UserEdit
		},
		data() {
			return {
				search: {
					name: ''
				},
				showNum: 0,

				total: 0,
				id: null,
				showEdit: false,
				query: {
					pageSize: 10,
					current: 1,
					userName: ''
				},

				tableData: [],
				selectedrow: [],
				title: ''


			}
		},
		methods: {
			list() {
				// console.log("list")
				// console.log("=========")
				// console.log(this.query)
				// console.log("=========")

				this.axios.get('/user/list', response => {
					let page = response.obj;
					// console.log(page.records);
					this.tableData = page.records;
					this.current = page.current;
					this.pageSize = page.size;
					// console.log(this.tableData)
					this.total = page.total;
				}, this.query);


			},
			searchData() {
				this.query.userName = this.search.name;
				this.query.current = 1;
				this.list();
			},
			add() {
				this.title = '添加基礎資料';
				this.id = null;
				this.showNum++;
				this.showEdit = true;
			},
			edit(id) {
				this.title = '修改基礎資料';
				this.id = id;
				// console.log(this.id);
				this.showNum++;
				this.showEdit = true;
			},
			currentChange() {

				this.list();
			},
			del(id) {
				// console.log("========")
				// console.log(id)
				// console.log("========")
				this.axios.get('/user/del', response => {
					if (response) {
						this.$alert("洗掉成功", "提示", {
							type: 'success'
						});
						//重繪頁面
						this.list();
					}
				}, {
					id: id
				});
			},
			handleSelectionChange(val) {
				this.selectedrow = val
			},
			batchdel() {
				console.log(this.selectedrow);
				if (this.selectedrow.length === 0) {
					this.$message('沒有任何被選中的資料');
				} else {
					const ids = []
					console.log("選中了一些!")
					console.log("選中個數:"+this.selectedrow.length)
					for (let i = 0; i < this.selectedrow.length; i++) {
						ids.push(this.selectedrow[i].userId)
					}
					this.axios.get('/user/delByIds', response => {
						this.list();
					}, {
						id: ids.join(",")
					});
				}
			}
		},
		created() {
			this.list();
		}
	}
</script>

<style>

</style>

撰寫edit.vue

<template>
	<div>
		<el-form ref="form" :model="form" label-width="80px">
			
			<el-form-item label="賬號">
				<el-input v-model="form.userName"></el-input>
			</el-form-item>
			<el-form-item label="密碼">
				<el-input v-model="form.password"></el-input>
			</el-form-item>
			<!-- <el-form-item label="狀態">
				<el-input v-model="form.packageState"></el-input>
			</el-form-item> -->
			
			<el-form-item>
				<el-button type="primary" @click="save('form')" style="font-size: 20px;">保存</el-button>
			</el-form-item>
		</el-form>
	</div>
</template>

<script>
	import axios from 'axios';
	axios.defaults.baseURL = 'http://127.0.0.1:80';
	
	export default {
		name: 'UserEdit',
		components: {
			
		},
		props: [
			'showEdit',
			'id'
		],
		data() {
			return {
				form: {
					userName:'',
					password:'',
					
				},
				value: ''
			}
		},
		methods: {
				save(form1) {
					this.$refs[form1].validate((valid) => {
						if (valid) {
							this.axios.post('/user/save', response => {
								this.$emit("update:showEdit", false);
								this.$emit('list')
							}, this.form)
						} else {
							console.log('error submit!!');
							return false;
						}
					});
					
		
				}
			},
			created() {
				// alert(this.id)
				if (this.id) {
		
					this.axios.get('/user/getById', response => {
						let page = response.obj;
						this.form = page;
					}, {
						id: this.id
					});
		
				}
			}
		}
</script>

<style>
</style>


啟動前后端測驗效果

啟動后端

在這里插入圖片描述

啟動前端

在這里插入圖片描述

測驗

訪問:http://127.0.0.1:81/,點擊系統管理中的用戶管理

在這里插入圖片描述

注意:不能訪問:http://localhost:81/,因為在后端解決跨域請求哪里寫的是:127.0.0.1:81

添加測驗

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

洗掉測驗(物理洗掉)

在這里插入圖片描述
在這里插入圖片描述

禁用測驗(邏輯洗掉)

在這里插入圖片描述
在這里插入圖片描述

模糊查找測驗

在這里插入圖片描述

以上就是SpringBoot+MyBatisPlus+Vue 前后端分離專案快速搭建【前端篇】【快速生成后端代碼、封裝結果集、增刪改查、模糊查找】【畢設基礎框架】的全部內容,

看完如果對你有幫助,感謝點贊支持!
如果你是電腦端,看到右下角的 “一鍵三連” 了嗎,沒錯點它[哈哈]

在這里插入圖片描述
加油!

共同努力!

Keafmd

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/282426.html

標籤:其他

上一篇:vue里面使用echarts

下一篇:初次使用Layui formSelects組件 在多級聯動時報錯!

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more