提交 eb51695b 编写于 作者: Y yao_wang

0917

上级 b84bcc6f
......@@ -9,10 +9,10 @@
"version": "0.0.0",
"dependencies": {
"axios": "^1.5.0",
<<<<<<< HEAD
"element-plus": "^2.3.12",
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"vue": "^3.3.4",
"vue-router": "^4.2.4",
"vuex": "^4.1.0"
......@@ -34,7 +34,7 @@
"node": ">=6.0.0"
}
},
<<<<<<< HEAD
"node_modules/@ctrl/tinycolor": {
"version": "3.6.1",
"resolved": "https://r.cnpmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
......@@ -51,8 +51,8 @@
"vue": "^3.2.0"
}
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/@esbuild/android-arm": {
"version": "0.18.20",
"resolved": "https://r.cnpmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
......@@ -405,7 +405,7 @@
"node": ">=12"
}
},
<<<<<<< HEAD
"node_modules/@floating-ui/core": {
"version": "1.4.1",
"resolved": "https://r.cnpmjs.org/@floating-ui/core/-/core-1.4.1.tgz",
......@@ -428,14 +428,14 @@
"resolved": "https://r.cnpmjs.org/@floating-ui/utils/-/utils-0.1.2.tgz",
"integrity": "sha512-ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://r.cnpmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
<<<<<<< HEAD
"node_modules/@popperjs/core": {
"name": "@sxzz/popperjs-es",
"version": "2.11.7",
......@@ -460,8 +460,8 @@
"resolved": "https://r.cnpmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/@vitejs/plugin-vue": {
"version": "4.3.4",
"resolved": "https://r.cnpmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz",
......@@ -582,7 +582,7 @@
"resolved": "https://r.cnpmjs.org/@vue/shared/-/shared-3.3.4.tgz",
"integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
},
<<<<<<< HEAD
"node_modules/@vueuse/core": {
"version": "9.13.0",
"resolved": "https://r.cnpmjs.org/@vueuse/core/-/core-9.13.0.tgz",
......@@ -651,8 +651,8 @@
}
}
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://r.cnpmjs.org/anymatch/-/anymatch-3.1.3.tgz",
......@@ -666,14 +666,14 @@
"node": ">= 8"
}
},
<<<<<<< HEAD
"node_modules/async-validator": {
"version": "4.2.5",
"resolved": "https://r.cnpmjs.org/async-validator/-/async-validator-4.2.5.tgz",
"integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://r2.cnpmjs.org/asynckit/-/asynckit-0.4.0.tgz",
......@@ -747,14 +747,14 @@
"resolved": "https://r.cnpmjs.org/csstype/-/csstype-3.1.2.tgz",
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
},
<<<<<<< HEAD
"node_modules/dayjs": {
"version": "1.11.9",
"resolved": "https://r.cnpmjs.org/dayjs/-/dayjs-1.11.9.tgz",
"integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://r2.cnpmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
......@@ -763,7 +763,7 @@
"node": ">=0.4.0"
}
},
<<<<<<< HEAD
"node_modules/element-plus": {
"version": "2.3.12",
"resolved": "https://r.cnpmjs.org/element-plus/-/element-plus-2.3.12.tgz",
......@@ -789,8 +789,8 @@
"vue": "^3.2.0"
}
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/esbuild": {
"version": "0.18.20",
"resolved": "https://r.cnpmjs.org/esbuild/-/esbuild-0.18.20.tgz",
......@@ -828,14 +828,14 @@
"@esbuild/win32-x64": "0.18.20"
}
},
<<<<<<< HEAD
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://r2.cnpmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://r2.cnpmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
......@@ -953,7 +953,7 @@
"node": ">=0.12.0"
}
},
<<<<<<< HEAD
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://r2.cnpmjs.org/lodash/-/lodash-4.17.21.tgz",
......@@ -974,8 +974,8 @@
"lodash-es": "*"
}
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/magic-string": {
"version": "0.30.3",
"resolved": "https://r.cnpmjs.org/magic-string/-/magic-string-0.30.3.tgz",
......@@ -987,14 +987,14 @@
"node": ">=12"
}
},
<<<<<<< HEAD
"node_modules/memoize-one": {
"version": "6.0.0",
"resolved": "https://r2.cnpmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/mime-db": {
"version": "1.52.0",
"resolved": "https://r.cnpmjs.org/mime-db/-/mime-db-1.52.0.tgz",
......@@ -1034,14 +1034,14 @@
"node": ">=0.10.0"
}
},
<<<<<<< HEAD
"node_modules/normalize-wheel-es": {
"version": "1.2.0",
"resolved": "https://r.cnpmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
"integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://r2.cnpmjs.org/picocolors/-/picocolors-1.0.0.tgz",
......@@ -1232,7 +1232,7 @@
"resolved": "https://r.cnpmjs.org/@babel/parser/-/parser-7.22.15.tgz",
"integrity": "sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA=="
},
<<<<<<< HEAD
"@ctrl/tinycolor": {
"version": "3.6.1",
"resolved": "https://r.cnpmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
......@@ -1244,8 +1244,8 @@
"integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==",
"requires": {}
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"@esbuild/android-arm": {
"version": "0.18.20",
"resolved": "https://r.cnpmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
......@@ -1400,7 +1400,7 @@
"dev": true,
"optional": true
},
<<<<<<< HEAD
"@floating-ui/core": {
"version": "1.4.1",
"resolved": "https://r.cnpmjs.org/@floating-ui/core/-/core-1.4.1.tgz",
......@@ -1423,14 +1423,14 @@
"resolved": "https://r.cnpmjs.org/@floating-ui/utils/-/utils-0.1.2.tgz",
"integrity": "sha512-ou3elfqG/hZsbmF4bxeJhPHIf3G2pm0ujc39hYEZrfVqt7Vk/Zji6CXc3W0pmYM8BW1g40U+akTl9DKZhFhInQ=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://r.cnpmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
<<<<<<< HEAD
"@popperjs/core": {
"version": "npm:@sxzz/popperjs-es@2.11.7",
"resolved": "https://r.cnpmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
......@@ -1454,8 +1454,8 @@
"resolved": "https://r.cnpmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"@vitejs/plugin-vue": {
"version": "4.3.4",
"resolved": "https://r.cnpmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz",
......@@ -1567,7 +1567,7 @@
"resolved": "https://r.cnpmjs.org/@vue/shared/-/shared-3.3.4.tgz",
"integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
},
<<<<<<< HEAD
"@vueuse/core": {
"version": "9.13.0",
"resolved": "https://r.cnpmjs.org/@vueuse/core/-/core-9.13.0.tgz",
......@@ -1608,8 +1608,8 @@
}
}
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"anymatch": {
"version": "3.1.3",
"resolved": "https://r.cnpmjs.org/anymatch/-/anymatch-3.1.3.tgz",
......@@ -1620,14 +1620,14 @@
"picomatch": "^2.0.4"
}
},
<<<<<<< HEAD
"async-validator": {
"version": "4.2.5",
"resolved": "https://r.cnpmjs.org/async-validator/-/async-validator-4.2.5.tgz",
"integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"asynckit": {
"version": "0.4.0",
"resolved": "https://r2.cnpmjs.org/asynckit/-/asynckit-0.4.0.tgz",
......@@ -1687,20 +1687,20 @@
"resolved": "https://r.cnpmjs.org/csstype/-/csstype-3.1.2.tgz",
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
},
<<<<<<< HEAD
"dayjs": {
"version": "1.11.9",
"resolved": "https://r.cnpmjs.org/dayjs/-/dayjs-1.11.9.tgz",
"integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://r2.cnpmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
<<<<<<< HEAD
"element-plus": {
"version": "2.3.12",
"resolved": "https://r.cnpmjs.org/element-plus/-/element-plus-2.3.12.tgz",
......@@ -1723,8 +1723,8 @@
"normalize-wheel-es": "^1.2.0"
}
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"esbuild": {
"version": "0.18.20",
"resolved": "https://r.cnpmjs.org/esbuild/-/esbuild-0.18.20.tgz",
......@@ -1755,14 +1755,14 @@
"@esbuild/win32-x64": "0.18.20"
}
},
<<<<<<< HEAD
"escape-html": {
"version": "1.0.3",
"resolved": "https://r2.cnpmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"estree-walker": {
"version": "2.0.2",
"resolved": "https://r2.cnpmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
......@@ -1844,7 +1844,7 @@
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true
},
<<<<<<< HEAD
"lodash": {
"version": "4.17.21",
"resolved": "https://r2.cnpmjs.org/lodash/-/lodash-4.17.21.tgz",
......@@ -1861,8 +1861,8 @@
"integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
"requires": {}
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"magic-string": {
"version": "0.30.3",
"resolved": "https://r.cnpmjs.org/magic-string/-/magic-string-0.30.3.tgz",
......@@ -1871,14 +1871,14 @@
"@jridgewell/sourcemap-codec": "^1.4.15"
}
},
<<<<<<< HEAD
"memoize-one": {
"version": "6.0.0",
"resolved": "https://r2.cnpmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"mime-db": {
"version": "1.52.0",
"resolved": "https://r.cnpmjs.org/mime-db/-/mime-db-1.52.0.tgz",
......@@ -1903,14 +1903,14 @@
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
<<<<<<< HEAD
"normalize-wheel-es": {
"version": "1.2.0",
"resolved": "https://r.cnpmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
"integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"picocolors": {
"version": "1.0.0",
"resolved": "https://r2.cnpmjs.org/picocolors/-/picocolors-1.0.0.tgz",
......
......@@ -10,10 +10,7 @@
},
"dependencies": {
"axios": "^1.5.0",
<<<<<<< HEAD
"element-plus": "^2.3.12",
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
"vue": "^3.3.4",
"vue-router": "^4.2.4",
"vuex": "^4.1.0"
......
......@@ -17,8 +17,38 @@ export default {
<style lang="scss">
.container {
padding: 0 80px;
//margin-top: 30px;
}
@keyframes upMove {
0% {
opacity: 0;
transform: translateY(50px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
@keyframes leftIn {
0% {
transform: translateX(-30px);
opacity: 0;
}
100% {
transform: translateX(0);
opacity: 1;
}
}
@keyframes downIn {
0% {
transform: translateY(-30px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
</style>
......@@ -53,12 +53,19 @@ $bgColor: #ECFBFB;
.tit {
padding-top: 50px;
color: $aColor;
animation: leftIn .5s ease-in forwards;
font: {
size: 50px;
weight: bold;
}
}
.des{
opacity: 0;
animation: downIn .5s ease-in forwards;
animation-delay: .6s;
}
div {
padding-top: 30px;
}
......@@ -77,20 +84,13 @@ $bgColor: #ECFBFB;
.middle {
transition: all .4s ease;
transform: scale(1.2);
animation: upMove .5s linear forwards;
&:hover{
transform: scale(1.1);
}
}
}
.image:hover .middle {
transform: scale(1);
}
.image:hover .right {
transform: scale(1.1);
}
.image:hover .left {
transform: scale(1.1);
}
}
......
......@@ -14,11 +14,7 @@ export default {
},
{
id: 2,
<<<<<<< HEAD
name: "热门必读",
=======
name: "书目",
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
href: "/bookList"
},
{
......@@ -29,23 +25,9 @@ export default {
{
id: 4,
name: "查询和申报",
<<<<<<< HEAD
href: "/table"
},
// {
// id: 5,
// name: "书籍购买",
// href: "/buyBook"
// },
=======
href: "#"
},
{
id: 5,
name: "书籍购买",
href: "#"
},
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
]
}
},
......@@ -212,14 +194,5 @@ $bgColor: #ECFBFB;
}
}
@keyframes leftIn {
0% {
transform: translateX(-100%);
opacity: 0;
}
100% {
transform: translateX(0);
opacity: 1;
}
}
</style>
\ No newline at end of file
......@@ -45,32 +45,38 @@ export default {
console.log("数据请求失败" + err)
})
},
fixPage(type){
// console.log(type)
// console.log(this.page)
if(type === 'up'){
if(this.page === 1){
fixPage(type) {
console.log(type)
console.log(this.page)
if (type === 'up') {
if (this.page === 1) {
return false
}else {
this.page = this.page -1
} else {
this.page = this.page - 1
}
}else if(type === 'down'){
<<<<<<< HEAD
if(this.page === this.pagination_info.total_pages){
=======
if(this.page === 3){
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
return false
}else {
this.page = this.page + 1
} else if (type === 'down') {
if (this.page === this.pagination_info.total_pages) {
if (this.page === 3) {
return false
} else {
this.page = this.page + 1
}
}
}else{
} else {
this.page = type
}
},
open(item){
// console.log(item)
let isbn = item.fields.isbn
this.$router.push(`/details/?isbn=${isbn}`)
}
},
watch:{
page(newValue){
watch: {
page(newValue) {
this.getBooks()
}
},
......@@ -80,6 +86,7 @@ export default {
mounted() {
this.getBooks()
}
}
</script>
......@@ -87,7 +94,7 @@ export default {
<div class="container">
<div class="bg">
<div class="box">
<div class="line" v-for="item in books" key="item.id">
<div class="line" v-for="item in books" key="item.id" @click="open(item)">
<img :src="item.fields.pic" :alt="item.fields.bookname">
<div class="text">
<div class="name">{{ item.fields.bookname }}</div>
......@@ -130,14 +137,14 @@ $bgColor: #ECFBFB;
.line {
display: flex;
margin-bottom: 40px;
<<<<<<< HEAD
animation: leftIn .5s linear forwards;
//overflow: hidden;
//box-sizing: border-box;
box-shadow: 1px 1px 12px transparent;
=======
overflow: hidden;
box-sizing: border-box;
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
transition: all .3s ease;
img {
......@@ -169,10 +176,10 @@ $bgColor: #ECFBFB;
.line:hover {
box-shadow: 1px 1px 12px $aColor;
<<<<<<< HEAD
transform: scale(1.1);
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
border-radius: 10px;
padding: 5px;
}
......
<<<<<<< HEAD
<script>
import {mapState} from "vuex";
import axios from "axios";
......@@ -62,6 +61,11 @@ export default {
,
methods: {
check() {
/**
* 书籍检索
* way 检索的方式,作者,书名,,,
* name 书籍的信息
* */
const url = this.baseUrl + '/books/query/';
let data = new FormData();
let index = this.$refs.sel.selectedIndex
......@@ -93,7 +97,14 @@ export default {
},
add(book, type) {
console.log(book)
/**
* 通过用户操作添加到书籍为当前用户的记录(借入或者购买)
*
* 参数:
* book 书籍的ISBN
* type 借书或者是购买
* */
// console.log(book)
const url = this.baseUrl + '/record/borrow/'
let formData = new FormData()
formData.append('isbn', book);
......@@ -119,16 +130,13 @@ export default {
}
}
}
=======
<script setup>
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
</script>
<template>
<div class="container">
<div class="bg">
<<<<<<< HEAD
<div class="box">
<form :action="this.baseUrl+'books/query/'" method="post" @submit.prevent="check">
<p>
......@@ -180,33 +188,32 @@ export default {
</div>
</div>
=======
<h2>图书借阅</h2>
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
</div>
</div>
</template>
<style scoped lang="scss">
<<<<<<< HEAD
// 颜色变量
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
$aColor: #1A535E;
$btnColor: #38B081;
$bgColor: #ECFBFB;
<<<<<<< HEAD
// 公共背景样式
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
.bg {
background: $bgColor;
border-radius: 20px;
padding: 60px 100px;
}
<<<<<<< HEAD
// 标题样式
h2 {
margin-bottom: 30px;
......@@ -241,7 +248,8 @@ h2 {
font-size: 16px;
&[disabled] {
background: #eeaaaa;
background: #e8e8e8;
color: #000;
}
}
}
......@@ -338,6 +346,6 @@ h2 {
}
}
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
</style>
\ No newline at end of file
<script>
import axios from "axios";
import {mapState} from "vuex";
import MessageTip from "../nav/messageTip.vue";
export default {
components: {MessageTip},
data() {
return {
isbn: '',
buttonText1: '借阅', // 第一个子组件的按钮文字
buttonText2: '购买', // 第二个子组件的按钮文字
book: {
Listing_time: '',
author: "",
bookname: '',
intro: '',
isbn: "",
lang: "",
pic: "",
price: "",
publisher: "",
type: "",
updated_time: "",
}
}
},
computed: {
...mapState(['baseUrl'])
},
methods: {
getData() {
/**
* 获取指定的ISBN的书籍信息
* way,指定搜索的方式为ISBN
*
* */
const url = this.baseUrl + '/books/query/'
let formData = new FormData();
formData.append('name', this.isbn)
formData.append('way', 'isbn')
axios.post(url, formData)
.then((res) => {
console.log(res.data)
this.book = res.data.books[0].fields;
})
.catch((err) => {
console.log(err)
})
},
add(book, type) {
/**
* 通过用户操作添加到书籍为当前用户的记录(借入或者购买)
*
* 参数:
* book 书籍的ISBN
* type 借书或者是购买
* */
console.log(book)
const url = this.baseUrl + '/record/borrow/'
let formData = new FormData()
formData.append('isbn', book);
formData.append('type', type)
axios.post(url, formData)
.then((res) => {
console.log(res.data)
if (type === 'borrow') {
this.$store.commit('setBorrStatus', true)
} else {
this.$store.commit('setBuyStatus', true)
}
})
.catch((err) => {
if (type === 'borrow') {
this.$store.commit('setBorrStatus', false)
} else {
this.$store.commit('setBuyStatus', false)
}
console.log(err)
})
}
},
mounted() {
this.isbn = this.$route.query.isbn
// console.log(this.isbn)
this.getData()
}
}
</script>
<template>
<div class="container">
<div class="bg">
<div class="box">
<div class="op">
<div class="bor" @click.stop="add(this.isbn,'borrow')">
<message-tip :buttonText="buttonText1"></message-tip>
</div>
<div class="buy" @click.stop="add(this.isbn,'buy')">
<message-tip :buttonText="buttonText2"></message-tip>
</div>
</div>
<div class="block">
<img :src="book.pic" alt="">
<div class="text">
<p>书名:<span>{{ book.bookname }}</span></p>
<p>作者:<span>{{ book.author }}</span></p>
<p>语言:<span>{{ book.lang }}</span></p>
<p>定价:<span>{{ book.price }}</span></p>
<p>类型:<span>{{ book.type }}</span></p>
<p>出版社:<span>{{ book.publisher }}</span></p>
<p>ISBN:<span>{{ book.isbn }}</span></p>
<p>出版日期:<span>{{ book.Listing_time }}</span></p>
</div>
</div>
<p class="intro">介绍:<span>{{ book.intro }}</span></p>
</div>
</div>
</div>
</template>
<style scoped lang="scss">
$aColor: #1A535E;
$btnColor: #38B081;
$bgColor: #ECFBFB;
.bg {
background: $bgColor;
border-radius: 20px;
padding: 50px 80px;
}
.box {
position: relative;
top: 0;
left: 0;
.block {
display: flex;
img {
border-radius: 5px;
margin-right: 30px;
}
.text {
margin-top: 20px;
font-size: 22px;
p {
margin: 8px 0;
font-weight: bold;
color: $aColor;
span {
font-weight: 400;
}
}
}
}
.intro {
margin-top: 30px;
font-size: 24px;
font-weight: bold;
color: $aColor;
span {
font-weight: 400;
}
}
.op{
width: 200px;
height: 200px;
border-radius: 10px;
display:flex;
flex-direction: column;
position: absolute;
top: 20px;
right: 80px;
.bor{
text-align: center;
line-height: 100px;
flex: 1;
background: #9bdec9;
border-radius: 8px;
}
.buy{
text-align: center;
line-height: 100px;
flex: 1;
background: #79dbea;
border-radius: 8px;
}
}
}
</style>
\ No newline at end of file
......@@ -2,11 +2,10 @@
// import Vue from 'vue'
import {mapState} from "vuex";
<<<<<<< HEAD
import axios from "axios";
=======
import axios, {formToJSON, toFormData} from "axios";
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
export default {
computed: {
......@@ -30,15 +29,9 @@ export default {
},
methods: {
clear() {
<<<<<<< HEAD
this.uname = '';
this.password = '';
this.password2 = ''
=======
// this.uname = '';
// this.password = '';
// this.password2 = ''
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
},
Jump() {
this.login = !this.login;
......@@ -89,13 +82,13 @@ export default {
axiosLogin(url, formData) {
axios
// .post(url, formData, {withCredentials: true})
.post(url,formData)
.post(url, formData)
.then(res => {
<<<<<<< HEAD
// console.log(res.data)
=======
console.log(res.data)
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
if (res.data.code === 200) {
localStorage.setItem('token', res.data.token);
localStorage.setItem('pic', res.data.pic)
......@@ -111,33 +104,33 @@ export default {
})
},
axiosRegister(url, formData) {
<<<<<<< HEAD
// console.log(url,formData)
axios
.post(url, formData)
.then(res => {
.then((res) => {
// console.log(res)
if (res.data.code === 201)
{
=======
axios
.post(url, formData)
.then(res => {
if (res.data.code === 201) {
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
if (confirm(res.data.msg + ",是否直接登录")) {
this.submitForm('login')
} else {
this.clear();
this.login = false;
}
} else {
alert(res.data.msg)
axios
.post(url, formData)
.then(res => {
if (res.data.code === 201) {
if (confirm(res.data.msg + ",是否直接登录")) {
this.submitForm('login')
} else {
this.clear();
this.login = false;
}
} else {
alert(res.data.msg)
}
})
.catch(err => {
console.log("数据提交失败" + err)
})
}
})
.catch(err => {
console.log("数据提交失败" + err)
})
}
},
watch: {
......@@ -191,11 +184,9 @@ export default {
<h2 v-if="login">用户登录</h2>
<h2 v-else>注册新用户</h2>
</div>
<<<<<<< HEAD
<form :action="this.baseUrl+'/user/login/'" ref="login" method="post" v-if="login"
=======
<form :action="baseUrl+'/user/login/'" ref="login" method="post" v-if="login"
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
@submit.prevent="check('login')">
<div class="box">
<label>
......@@ -218,11 +209,9 @@ export default {
<button id="submit" type="submit">登录</button>
</label>
</form>
<<<<<<< HEAD
<form :action="this.baseUrl+'/user/register/'" ref="register" method="post" v-else
=======
<form :action="baseUrl+'/user/register/'" ref="register" method="post" v-else
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
@submit.prevent="check('register')">
<div class="box">
<label>
......@@ -267,18 +256,22 @@ $btnColor: #38B081;
$bgColor: #ECFBFB;
.container {
width: 100%;
height: 100vh;
background: #9bdec9;
//width: 100%;
//height: calc(100vh - 80px);
////background: #9bdec9;
//position: relative;
//top: 0;
//left: 0;
}
.mid {
position: absolute;
top: 50%;
left: 50%;
margin-top: 30px;
display: flex;
width: 1200px;
height: 600px;
height: 520px;
background: $bgColor;
//box-shadow: 1px 1px 10px rgb(128, 128, 128);
border-radius: 20px;
......@@ -288,8 +281,14 @@ $bgColor: #ECFBFB;
}
.res_mid {
height: 700px;
height: 620px;
transition: all .5s linear;
.right{
.login_bg{
height: 480px;
}
}
}
.left {
......@@ -313,11 +312,12 @@ $bgColor: #ECFBFB;
.login_bg {
width: 400px;
height: 500px;
padding: 30px;
height: 420px;
padding: 30px 30px 0;
background: rgb(248, 248, 248, 0.6);
box-shadow: -6px 6px 20px 1px #d2eff1;
border-radius: 20px;
transition: all .5s linear;
.top {
.head {
......@@ -411,14 +411,5 @@ $bgColor: #ECFBFB;
}
}
@keyframes upMove {
0% {
opacity: 0;
transform: translateY(50px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
</style>
\ No newline at end of file
......@@ -13,7 +13,7 @@ export default {
book: {
title: '',
author: '',
price: 0,
price: '',
publisher: '',
isbn: ''
}
......@@ -48,8 +48,8 @@ export default {
axios
.post(url, formData)
.then((res) => {
console.log(res.data)
console.log(res.data.records)
// console.log(res.data)
// console.log(res.data.records)
this.borrowData = res.data.records
})
.catch((err) => {
......@@ -69,7 +69,7 @@ export default {
<div class="block bg">
<h2 :class="{'active':borrow}" @click="toggle('borrow')">我的借阅</h2>
<h2 :class="{'active':buy}" @click="toggle('buy')">购书记录</h2>
<h2 :class="{'active':fix}" @click="toggle('fix')">错误申报</h2>
<h2 :class="{'active':fix}" @click="toggle('fix')">错误修订</h2>
</div>
</div>
......
......@@ -3,21 +3,35 @@ import './style.css'
import App from './App.vue'
import router from "./router/router.js";
import store from "./store/store.js";
<<<<<<< HEAD
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import axios from "axios";
// axios.interceptors.request.use(
// (config) => {
// const token = localStorage.getItem('token');
// if (token) {
// config.headers.Authorization = `Token ${token}`;
// } else {
// // 如果没有令牌,您可以选择在此处执行适当的处理,例如重定向到登录页面或抛出错误
// // 这里是一个示例,您可以根据您的需求进行更改
// throw new Error('No token found. Please log in.');
// }
// return config;
// },
// (error) => {
// return Promise.reject(error);
// }
// );
// 在请求中包含 token ,如果没有token 同样也会正常发送,
// 需要登录的页面将会在当前页面进行拦截
axios.interceptors.request.use(
(config) => {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Token ${token}`;
} else {
// 如果没有令牌,您可以选择在此处执行适当的处理,例如重定向到登录页面或抛出错误
// 这里是一个示例,您可以根据您的需求进行更改
throw new Error('No token found. Please log in.');
}
return config;
},
......@@ -30,13 +44,6 @@ const app = createApp(App)
app.use(store)
app.use(router)
app.use(ElementPlus)
=======
const app = createApp(App)
app.use(store)
app.use(router)
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
app.mount('#app')
......@@ -3,11 +3,8 @@ import Home from "../components/Home.vue";
import Login from "../components/secondary/login.vue";
import BookList from "../components/secondary/bookList.vue";
import Borrowing from "../components/secondary/borrowing.vue";
<<<<<<< HEAD
import Table from "../components/secondary/table.vue"
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
import Details from "../components/secondary/details.vue";
const router = createRouter({
......@@ -16,13 +13,24 @@ const router = createRouter({
{path: '/', component: Home},
{path: '/login', component: Login},
{path: '/bookList', component: BookList},
{path: '/borrowing', component: Borrowing},
<<<<<<< HEAD
{path: '/table', component: Table},
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
{path: '/borrowing', component: Borrowing,meta: {requiresAuth: true}},
{path: '/table', component: Table, meta: {requiresAuth: true}},
// meta: {requiresAuth: true} 需要身份认证的路由
{path:'/details',component:Details,meta:{requiresAuth: true}}
],
})
// 创建导航守卫
router.beforeEach((to, from, next) => {
const token = localStorage.getItem('token');
// 如果路由需要身份验证,但没有令牌,则重定向到登录页面
if (to.meta.requiresAuth && !token) {
alert("请先进行登录...")
next('/login'); // 这里的'/login'应该是您的登录页面路由
} else {
next(); // 继续导航
}
});
export default router;
\ No newline at end of file
......@@ -4,16 +4,12 @@ import {createStore} from 'vuex'
const store = createStore({
state() {
return {
// baseUrl: "http://127.0.0.1:8000"
baseUrl: "http://localhost:8000",
baseUrl: "http://127.0.0.1:8000",
// baseUrl: "http://localhost:8000",
name:"",
<<<<<<< HEAD
picUrl:"",
borrowStatus:true,
buyStatus:true,
=======
picUrl:""
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
}
},
mutations: {
......@@ -22,15 +18,12 @@ const store = createStore({
},
setPicUrl(state,value){
state.picUrl = value
<<<<<<< HEAD
},
setBorrStatus(state,value){
state.borrowStatus = value
},
setBuyStatus(state,value){
state.buyStatus = value
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
}
}
})
......
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/last.iml" filepath="$PROJECT_DIR$/.idea/last.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<<<<<<< HEAD
# Generated by Django 4.2.5 on 2023-09-15 06:11
=======
# Generated by Django 4.2.5 on 2023-09-10 11:05
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
# Generated by Django 4.2.5 on 2023-09-17 14:29
from django.db import migrations, models
......@@ -22,22 +18,14 @@ class Migration(migrations.Migration):
('bookname', models.CharField(max_length=64, verbose_name='书名')),
('author', models.CharField(max_length=64, verbose_name='作者')),
('isbn', models.CharField(max_length=20, unique=True, verbose_name='ISBN')),
<<<<<<< HEAD
('Listing_time', models.DateTimeField(verbose_name='出版时间')),
('updated_time', models.DateTimeField(auto_now_add=True, verbose_name='添加时间')),
=======
('Listing_time', models.DateTimeField(auto_now_add=True, verbose_name='出版时间')),
('updated_time', models.DateTimeField(auto_now=True, verbose_name='添加时间')),
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
('type', models.CharField(max_length=32, verbose_name='类型')),
('lang', models.CharField(max_length=32, verbose_name='语言')),
('publisher', models.CharField(max_length=32, verbose_name='出版社')),
('price', models.DecimalField(decimal_places=2, max_digits=8, verbose_name='定价')),
('intro', models.CharField(default='', max_length=512, verbose_name='描述')),
<<<<<<< HEAD
('pic', models.CharField(default='', max_length=64, verbose_name='封面')),
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
],
),
]
# Generated by Django 4.2.5 on 2023-09-10 11:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('books', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='book',
name='Listing_time',
field=models.DateTimeField(verbose_name='出版时间'),
),
migrations.AlterField(
model_name='book',
name='updated_time',
field=models.DateTimeField(auto_now_add=True, verbose_name='添加时间'),
),
]
# Generated by Django 4.2.5 on 2023-09-10 12:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('books', '0002_alter_book_listing_time_alter_book_updated_time'),
]
operations = [
migrations.AddField(
model_name='book',
name='pic',
field=models.CharField(default='', max_length=64, verbose_name='封面'),
),
]
......@@ -2,10 +2,6 @@ from django.urls import path
from . import views
urlpatterns = [
<<<<<<< HEAD
path('all/', views.all_view),
path('query/',views.query_view)
=======
path('all/', views.all_view)
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
path('query/',views.query_view),
]
from books.models import Book
from django.core import serializers
from django.core.paginator import Paginator
<<<<<<< HEAD
from django.http import JsonResponse, HttpResponse
=======
from django.http import JsonResponse
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
import json
# def all_view(request):
# """
# :param request: None
# :return: books[]
# """
# if request.method == 'GET':
# books = list(Book.objects.all().values())
# data = {
# 'code': 200,
# 'books': books
# }
# return JsonResponse(data, safe=False, json_dumps_params={'ensure_ascii': False})
def all_view(request):
books = Book.objects.all()
paginator = Paginator(books, 4)
......@@ -43,13 +29,19 @@ def all_view(request):
}
return JsonResponse({"data": data, "pagination_info": pagination_info}, safe=False)
<<<<<<< HEAD
def query_view(request):
# 书籍查询,
# 参数:
# name
# 书籍的某个信息
# way
# 书籍信息参数
name = request.POST.get('name')
way = request.POST.get('way')
print(name,way)
# print(name, way)
if way == 'bookname':
books = Book.objects.filter(bookname=name)
......@@ -66,8 +58,5 @@ def query_view(request):
book_data = serializers.serialize('json', books)
book_data = json.loads(book_data)
# 使用JsonResponse返回数据
return JsonResponse({'books': book_data}, safe=False)
=======
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
......@@ -40,12 +40,8 @@ INSTALLED_APPS = [
'rest_framework',
'rest_framework.authtoken',
'user',
<<<<<<< HEAD
'books',
'record'
=======
'books'
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
]
MIDDLEWARE = [
......
from django.contrib import admin
from django.urls import path, include
# from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('user/', include('user.urls')),
<<<<<<< HEAD
path('books/', include('books.urls')),
path('record/',include('record.urls'))
=======
path('books/', include('books.urls'))
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
path('record/', include('record.urls')),
]
# Generated by Django 4.2.5 on 2023-09-15 06:11
# Generated by Django 4.2.5 on 2023-09-17 14:29
from django.db import migrations, models
import django.db.models.deletion
......
# Generated by Django 4.2.5 on 2023-09-15 06:11
# Generated by Django 4.2.5 on 2023-09-17 14:29
from django.conf import settings
from django.db import migrations, models
......@@ -10,8 +10,8 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('record', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
......
# Generated by Django 4.2.5 on 2023-09-15 06:57
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('books', '0001_initial'),
('record', '0002_initial'),
]
operations = [
migrations.AlterField(
model_name='record',
name='book',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='books.book', unique=True),
),
]
......@@ -5,6 +5,6 @@ class Record(models.Model):
user = models.ForeignKey('user.UserInfo', on_delete=models.CASCADE)
# 使用ForeignKey关联User模型中的id字段
type = models.CharField("记录类型", max_length=12)
book = models.ForeignKey('books.Book', on_delete=models.CASCADE, unique=True)
book = models.ForeignKey('books.Book', on_delete=models.CASCADE)
status = models.BooleanField("状态", default=True)
addTime = models.DateTimeField("添加时间", auto_now_add=True)
......@@ -30,6 +30,7 @@ def borrow_view(request):
isbn = request.data.get('isbn')
type = request.data.get('type')
user_id = request.user.id # 从令牌中解析出user_id
print(isbn,type,user_id)
# 在Book模型中查找具有匹配ISBN的书籍记录
try:
......
<<<<<<< HEAD
# Generated by Django 4.2.5 on 2023-09-15 06:11
=======
# Generated by Django 4.2.5 on 2023-09-10 06:33
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
# Generated by Django 4.2.5 on 2023-09-17 14:29
import django.contrib.auth.models
import django.contrib.auth.validators
......@@ -33,12 +29,8 @@ class Migration(migrations.Migration):
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
<<<<<<< HEAD
('career', models.CharField(default='', max_length=24, verbose_name='职业')),
('pic', models.CharField(default='', max_length=64, verbose_name='头像')),
=======
('career', models.CharField(default='', max_length=24)),
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
('picHead', models.CharField(default='', max_length=64, verbose_name='头像')),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
],
......
# Generated by Django 4.2.5 on 2023-09-11 02:11
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('user', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='userinfo',
name='pic',
field=models.CharField(default='', max_length=64, verbose_name='头像'),
),
migrations.AlterField(
model_name='userinfo',
name='career',
field=models.CharField(default='', max_length=24, verbose_name='职业'),
),
]
......@@ -4,4 +4,4 @@ from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
career = models.CharField("职业", max_length=24, default="")
pic = models.CharField("头像", max_length=64, default="")
picHead = models.CharField("头像", max_length=64, default="")
......@@ -4,13 +4,8 @@ from django.contrib.auth import authenticate, login
from django.http import JsonResponse
from rest_framework.authtoken.models import Token
<<<<<<< HEAD
from rest_framework.decorators import api_view
=======
from rest_framework.decorators import api_view, permission_classes
>>>>>>> 326b59aa53e211a6e29b8a033e45707b234981e4
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
@api_view(['POST'])
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册