feat(mobile recipe list / recipe create / week recipe page): [A] 增加移动版页面
[A] 增加移动版页面 Signed-off-by: Ching <loooching@gmail.com>
This commit is contained in:
parent
07568e4337
commit
97f7345aa6
@ -1,5 +1,16 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
presets: [
|
presets: [
|
||||||
'@vue/cli-plugin-babel/preset'
|
'@vue/cli-plugin-babel/preset'
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
[
|
||||||
|
"import",
|
||||||
|
{
|
||||||
|
"libraryName": "vant",
|
||||||
|
"libraryDirectory": "es",
|
||||||
|
"style": true
|
||||||
|
}
|
||||||
]
|
]
|
||||||
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
2
frontend/dist/index.html
vendored
2
frontend/dist/index.html
vendored
@ -1 +1 @@
|
|||||||
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>frontend</title><link href="/css/app.0786e41a.css" rel="preload" as="style"><link href="/css/chunk-vendors.8823d44d.css" rel="preload" as="style"><link href="/js/app.06e83add.js" rel="preload" as="script"><link href="/js/chunk-vendors.bb844861.js" rel="preload" as="script"><link href="/css/chunk-vendors.8823d44d.css" rel="stylesheet"><link href="/css/app.0786e41a.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/js/chunk-vendors.bb844861.js"></script><script src="/js/app.06e83add.js"></script></body></html>
|
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>frontend</title><link href="/css/app.0786e41a.css" rel="preload" as="style"><link href="/css/chunk-vendors.8823d44d.css" rel="preload" as="style"><link href="/js/app.06e83add.js" rel="preload" as="script"><link href="/js/chunk-vendors.da99e88d.js" rel="preload" as="script"><link href="/css/chunk-vendors.8823d44d.css" rel="stylesheet"><link href="/css/app.0786e41a.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but frontend doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/js/chunk-vendors.da99e88d.js"></script><script src="/js/app.06e83add.js"></script></body></html>
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
155
frontend/package-lock.json
generated
155
frontend/package-lock.json
generated
@ -13,7 +13,9 @@
|
|||||||
"bootstrap": "^5.1.1",
|
"bootstrap": "^5.1.1",
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
"element-plus": "^1.0.2-beta.28",
|
"element-plus": "^1.0.2-beta.28",
|
||||||
|
"vant": "^3.2.4",
|
||||||
"vue": "^3.2.2",
|
"vue": "^3.2.2",
|
||||||
|
"vue-cli-plugin-vant": "^1.0.1",
|
||||||
"vue-router": "^4.0.11"
|
"vue-router": "^4.0.11"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@ -22,7 +24,7 @@
|
|||||||
"@vue/cli-service": "~4.5.0",
|
"@vue/cli-service": "~4.5.0",
|
||||||
"@vue/compiler-sfc": "^3.0.5",
|
"@vue/compiler-sfc": "^3.0.5",
|
||||||
"babel-eslint": "^10.1.0",
|
"babel-eslint": "^10.1.0",
|
||||||
"dotenv-webpack": "^7.0.3",
|
"babel-plugin-import": "^1.13.3",
|
||||||
"eslint": "^6.8.0",
|
"eslint": "^6.8.0",
|
||||||
"eslint-config-google": "^0.14.0",
|
"eslint-config-google": "^0.14.0",
|
||||||
"eslint-plugin-vue": "^7.17.0",
|
"eslint-plugin-vue": "^7.17.0",
|
||||||
@ -2093,6 +2095,34 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@vant/icons": {
|
||||||
|
"version": "1.7.1",
|
||||||
|
"resolved": "https://registry.nlark.com/@vant/icons/download/@vant/icons-1.7.1.tgz?cache=0&sync_timestamp=1631954488381&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vant%2Ficons%2Fdownload%2F%40vant%2Ficons-1.7.1.tgz",
|
||||||
|
"integrity": "sha1-Sa5CAwK1WB5U5olIkeWgW8dun4c="
|
||||||
|
},
|
||||||
|
"node_modules/@vant/lazyload": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vant/lazyload/download/@vant/lazyload-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-4FKTJpF9jLImTuLk6wjxoDqrLB0=",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@vant/use": "^1.3.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vant/popperjs": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npm.taobao.org/@vant/popperjs/download/@vant/popperjs-1.1.0.tgz?cache=0&sync_timestamp=1617712371368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vant%2Fpopperjs%2Fdownload%2F%40vant%2Fpopperjs-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-tO3uW7+m+xhwWYbjE9T9XxeUKg8=",
|
||||||
|
"dependencies": {
|
||||||
|
"@popperjs/core": "^2.9.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@vant/use": {
|
||||||
|
"version": "1.3.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vant/use/download/@vant/use-1.3.2.tgz?cache=0&sync_timestamp=1632970350432&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40vant%2Fuse%2Fdownload%2F%40vant%2Fuse-1.3.2.tgz",
|
||||||
|
"integrity": "sha1-1PIy8EQN88BYxlA3rm8g69DAatM=",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/@vue/babel-helper-vue-jsx-merge-props": {
|
"node_modules/@vue/babel-helper-vue-jsx-merge-props": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851122331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz",
|
"resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851122331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz",
|
||||||
@ -3613,6 +3643,16 @@
|
|||||||
"object.assign": "^4.1.0"
|
"object.assign": "^4.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/babel-plugin-import": {
|
||||||
|
"version": "1.13.3",
|
||||||
|
"resolved": "https://registry.nlark.com/babel-plugin-import/download/babel-plugin-import-1.13.3.tgz",
|
||||||
|
"integrity": "sha1-nbu6fRrHK9QSkXqDDUReAJQdJtc=",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-module-imports": "^7.0.0",
|
||||||
|
"@babel/runtime": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/babel-plugin-polyfill-corejs2": {
|
"node_modules/babel-plugin-polyfill-corejs2": {
|
||||||
"version": "0.2.2",
|
"version": "0.2.2",
|
||||||
"resolved": "https://registry.nlark.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.2.tgz?cache=0&sync_timestamp=1622023904181&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-polyfill-corejs2%2Fdownload%2Fbabel-plugin-polyfill-corejs2-0.2.2.tgz",
|
"resolved": "https://registry.nlark.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.2.tgz?cache=0&sync_timestamp=1622023904181&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-polyfill-corejs2%2Fdownload%2Fbabel-plugin-polyfill-corejs2-0.2.2.tgz",
|
||||||
@ -6107,15 +6147,6 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/dotenv-defaults": {
|
|
||||||
"version": "2.0.2",
|
|
||||||
"resolved": "https://registry.nlark.com/dotenv-defaults/download/dotenv-defaults-2.0.2.tgz",
|
|
||||||
"integrity": "sha1-az7C5DGar7cJQKvactOFZ3Dud6w=",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"dotenv": "^8.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/dotenv-expand": {
|
"node_modules/dotenv-expand": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.nlark.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz",
|
"resolved": "https://registry.nlark.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz",
|
||||||
@ -6123,21 +6154,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-2-Clause"
|
"license": "BSD-2-Clause"
|
||||||
},
|
},
|
||||||
"node_modules/dotenv-webpack": {
|
|
||||||
"version": "7.0.3",
|
|
||||||
"resolved": "https://registry.nlark.com/dotenv-webpack/download/dotenv-webpack-7.0.3.tgz?cache=0&sync_timestamp=1622697504782&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdotenv-webpack%2Fdownload%2Fdotenv-webpack-7.0.3.tgz",
|
|
||||||
"integrity": "sha1-9Q7Dxwg6aexgduEQVmcgADt7EHs=",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"dotenv-defaults": "^2.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"webpack": "^4 || ^5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/duplexer": {
|
"node_modules/duplexer": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.nlark.com/duplexer/download/duplexer-0.1.2.tgz",
|
"resolved": "https://registry.nlark.com/duplexer/download/duplexer-0.1.2.tgz",
|
||||||
@ -13850,6 +13866,20 @@
|
|||||||
"spdx-expression-parse": "^3.0.0"
|
"spdx-expression-parse": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/vant": {
|
||||||
|
"version": "3.2.4",
|
||||||
|
"resolved": "https://registry.npmmirror.com/vant/download/vant-3.2.4.tgz",
|
||||||
|
"integrity": "sha1-DZ/QxYoJ1WuRxNVBD+4M25icjrg=",
|
||||||
|
"dependencies": {
|
||||||
|
"@vant/icons": "^1.7.1",
|
||||||
|
"@vant/lazyload": "^1.3.0",
|
||||||
|
"@vant/popperjs": "^1.1.0",
|
||||||
|
"@vant/use": "^1.3.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"vue": "^3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/vary": {
|
"node_modules/vary": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.nlark.com/vary/download/vary-1.1.2.tgz",
|
"resolved": "https://registry.nlark.com/vary/download/vary-1.1.2.tgz",
|
||||||
@ -13914,6 +13944,11 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/vue-cli-plugin-vant": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npm.taobao.org/vue-cli-plugin-vant/download/vue-cli-plugin-vant-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-uPobVa/U2q8UDUHZa+NW5F2Pt78="
|
||||||
|
},
|
||||||
"node_modules/vue-eslint-parser": {
|
"node_modules/vue-eslint-parser": {
|
||||||
"version": "7.10.0",
|
"version": "7.10.0",
|
||||||
"resolved": "https://registry.nlark.com/vue-eslint-parser/download/vue-eslint-parser-7.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.10.0.tgz",
|
"resolved": "https://registry.nlark.com/vue-eslint-parser/download/vue-eslint-parser-7.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.10.0.tgz",
|
||||||
@ -16411,6 +16446,32 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@vant/icons": {
|
||||||
|
"version": "1.7.1",
|
||||||
|
"resolved": "https://registry.nlark.com/@vant/icons/download/@vant/icons-1.7.1.tgz?cache=0&sync_timestamp=1631954488381&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vant%2Ficons%2Fdownload%2F%40vant%2Ficons-1.7.1.tgz",
|
||||||
|
"integrity": "sha1-Sa5CAwK1WB5U5olIkeWgW8dun4c="
|
||||||
|
},
|
||||||
|
"@vant/lazyload": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vant/lazyload/download/@vant/lazyload-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-4FKTJpF9jLImTuLk6wjxoDqrLB0=",
|
||||||
|
"requires": {
|
||||||
|
"@vant/use": "^1.3.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vant/popperjs": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npm.taobao.org/@vant/popperjs/download/@vant/popperjs-1.1.0.tgz?cache=0&sync_timestamp=1617712371368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vant%2Fpopperjs%2Fdownload%2F%40vant%2Fpopperjs-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-tO3uW7+m+xhwWYbjE9T9XxeUKg8=",
|
||||||
|
"requires": {
|
||||||
|
"@popperjs/core": "^2.9.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@vant/use": {
|
||||||
|
"version": "1.3.2",
|
||||||
|
"resolved": "https://registry.npmmirror.com/@vant/use/download/@vant/use-1.3.2.tgz?cache=0&sync_timestamp=1632970350432&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40vant%2Fuse%2Fdownload%2F%40vant%2Fuse-1.3.2.tgz",
|
||||||
|
"integrity": "sha1-1PIy8EQN88BYxlA3rm8g69DAatM="
|
||||||
|
},
|
||||||
"@vue/babel-helper-vue-jsx-merge-props": {
|
"@vue/babel-helper-vue-jsx-merge-props": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851122331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz",
|
"resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851122331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz",
|
||||||
@ -17589,6 +17650,16 @@
|
|||||||
"object.assign": "^4.1.0"
|
"object.assign": "^4.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"babel-plugin-import": {
|
||||||
|
"version": "1.13.3",
|
||||||
|
"resolved": "https://registry.nlark.com/babel-plugin-import/download/babel-plugin-import-1.13.3.tgz",
|
||||||
|
"integrity": "sha1-nbu6fRrHK9QSkXqDDUReAJQdJtc=",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@babel/helper-module-imports": "^7.0.0",
|
||||||
|
"@babel/runtime": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"babel-plugin-polyfill-corejs2": {
|
"babel-plugin-polyfill-corejs2": {
|
||||||
"version": "0.2.2",
|
"version": "0.2.2",
|
||||||
"resolved": "https://registry.nlark.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.2.tgz?cache=0&sync_timestamp=1622023904181&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-polyfill-corejs2%2Fdownload%2Fbabel-plugin-polyfill-corejs2-0.2.2.tgz",
|
"resolved": "https://registry.nlark.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.2.tgz?cache=0&sync_timestamp=1622023904181&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-polyfill-corejs2%2Fdownload%2Fbabel-plugin-polyfill-corejs2-0.2.2.tgz",
|
||||||
@ -19586,30 +19657,12 @@
|
|||||||
"integrity": "sha1-Bhr2ZNGff02PxuT/m1hM4jety4s=sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
|
"integrity": "sha1-Bhr2ZNGff02PxuT/m1hM4jety4s=sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"dotenv-defaults": {
|
|
||||||
"version": "2.0.2",
|
|
||||||
"resolved": "https://registry.nlark.com/dotenv-defaults/download/dotenv-defaults-2.0.2.tgz",
|
|
||||||
"integrity": "sha1-az7C5DGar7cJQKvactOFZ3Dud6w=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"dotenv": "^8.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dotenv-expand": {
|
"dotenv-expand": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.nlark.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz",
|
"resolved": "https://registry.nlark.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz",
|
||||||
"integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
|
"integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"dotenv-webpack": {
|
|
||||||
"version": "7.0.3",
|
|
||||||
"resolved": "https://registry.nlark.com/dotenv-webpack/download/dotenv-webpack-7.0.3.tgz?cache=0&sync_timestamp=1622697504782&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdotenv-webpack%2Fdownload%2Fdotenv-webpack-7.0.3.tgz",
|
|
||||||
"integrity": "sha1-9Q7Dxwg6aexgduEQVmcgADt7EHs=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"dotenv-defaults": "^2.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"duplexer": {
|
"duplexer": {
|
||||||
"version": "0.1.2",
|
"version": "0.1.2",
|
||||||
"resolved": "https://registry.nlark.com/duplexer/download/duplexer-0.1.2.tgz",
|
"resolved": "https://registry.nlark.com/duplexer/download/duplexer-0.1.2.tgz",
|
||||||
@ -25756,6 +25809,17 @@
|
|||||||
"spdx-expression-parse": "^3.0.0"
|
"spdx-expression-parse": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vant": {
|
||||||
|
"version": "3.2.4",
|
||||||
|
"resolved": "https://registry.npmmirror.com/vant/download/vant-3.2.4.tgz",
|
||||||
|
"integrity": "sha1-DZ/QxYoJ1WuRxNVBD+4M25icjrg=",
|
||||||
|
"requires": {
|
||||||
|
"@vant/icons": "^1.7.1",
|
||||||
|
"@vant/lazyload": "^1.3.0",
|
||||||
|
"@vant/popperjs": "^1.1.0",
|
||||||
|
"@vant/use": "^1.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"vary": {
|
"vary": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.nlark.com/vary/download/vary-1.1.2.tgz",
|
"resolved": "https://registry.nlark.com/vary/download/vary-1.1.2.tgz",
|
||||||
@ -25809,6 +25873,11 @@
|
|||||||
"integrity": "sha1-2oKXdjc6rUJp/CO1e7OqBDvGd0Q=sha512-ctG5mynJIyGLFBhS2JpzXmBWT3JRXwzMm5AoANUmBlbZHTruct1xQF2OKM/mfJv6tSfqCcEfgH8rGCAY5ca83Q==",
|
"integrity": "sha1-2oKXdjc6rUJp/CO1e7OqBDvGd0Q=sha512-ctG5mynJIyGLFBhS2JpzXmBWT3JRXwzMm5AoANUmBlbZHTruct1xQF2OKM/mfJv6tSfqCcEfgH8rGCAY5ca83Q==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"vue-cli-plugin-vant": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npm.taobao.org/vue-cli-plugin-vant/download/vue-cli-plugin-vant-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-uPobVa/U2q8UDUHZa+NW5F2Pt78="
|
||||||
|
},
|
||||||
"vue-eslint-parser": {
|
"vue-eslint-parser": {
|
||||||
"version": "7.10.0",
|
"version": "7.10.0",
|
||||||
"resolved": "https://registry.nlark.com/vue-eslint-parser/download/vue-eslint-parser-7.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.10.0.tgz",
|
"resolved": "https://registry.nlark.com/vue-eslint-parser/download/vue-eslint-parser-7.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.10.0.tgz",
|
||||||
|
|||||||
@ -15,6 +15,7 @@
|
|||||||
"bootstrap": "^5.1.1",
|
"bootstrap": "^5.1.1",
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
"element-plus": "^1.0.2-beta.28",
|
"element-plus": "^1.0.2-beta.28",
|
||||||
|
"vant": "^3.2.4",
|
||||||
"vue": "^3.2.2",
|
"vue": "^3.2.2",
|
||||||
"vue-router": "^4.0.11"
|
"vue-router": "^4.0.11"
|
||||||
},
|
},
|
||||||
@ -24,10 +25,12 @@
|
|||||||
"@vue/cli-service": "~4.5.0",
|
"@vue/cli-service": "~4.5.0",
|
||||||
"@vue/compiler-sfc": "^3.0.5",
|
"@vue/compiler-sfc": "^3.0.5",
|
||||||
"babel-eslint": "^10.1.0",
|
"babel-eslint": "^10.1.0",
|
||||||
|
"babel-plugin-import": "^1.13.3",
|
||||||
"eslint": "^6.8.0",
|
"eslint": "^6.8.0",
|
||||||
"eslint-config-google": "^0.14.0",
|
"eslint-config-google": "^0.14.0",
|
||||||
"eslint-plugin-vue": "^7.17.0",
|
"eslint-plugin-vue": "^7.17.0",
|
||||||
"vue-cli-plugin-element-plus": "~0.0.13"
|
"vue-cli-plugin-element-plus": "~0.0.13",
|
||||||
|
"vue-cli-plugin-vant": "^1.0.1"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"root": true,
|
"root": true,
|
||||||
|
|||||||
87
frontend/src/components/recipe-mobile/recipe-list.vue
Normal file
87
frontend/src/components/recipe-mobile/recipe-list.vue
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<template>
|
||||||
|
<van-list
|
||||||
|
v-model:loading="loading"
|
||||||
|
:finished="finished"
|
||||||
|
finished-text="没有更多了"
|
||||||
|
@load="onLoad"
|
||||||
|
class="recipe-list"
|
||||||
|
>
|
||||||
|
<van-cell center v-for:="recipe in recipes" size="large" clickable>
|
||||||
|
<template #title>
|
||||||
|
<van-tag class="recipe-type-tag" plain type="primary">{{
|
||||||
|
constants.formatRecipeType(recipe.recipe_type)
|
||||||
|
}}</van-tag>
|
||||||
|
<span class="recipe-name"> {{ recipe.name }}</span>
|
||||||
|
</template>
|
||||||
|
<template #value>
|
||||||
|
{{ recipe.difficulty }} <van-icon name="star" /> · {{ recipe.rate }}
|
||||||
|
<van-icon name="like" />
|
||||||
|
</template>
|
||||||
|
</van-cell>
|
||||||
|
</van-list>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { Cell, List, Tag, Collapse, CollapseItem, Icon } from 'vant';
|
||||||
|
import axios from 'axios';
|
||||||
|
import config from '@/config/index.js';
|
||||||
|
import constants from '@/utils/constants';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'RecipeMobileRecipeList',
|
||||||
|
components: {
|
||||||
|
[Cell.name]: Cell,
|
||||||
|
[List.name]: List,
|
||||||
|
[Tag.name]: Tag,
|
||||||
|
[Collapse.name]: Collapse,
|
||||||
|
[CollapseItem.name]: CollapseItem,
|
||||||
|
[Icon.name]: Icon,
|
||||||
|
},
|
||||||
|
data: function() {
|
||||||
|
return {
|
||||||
|
loading: false,
|
||||||
|
finished: false,
|
||||||
|
page_count: 0,
|
||||||
|
total_count: 0,
|
||||||
|
page: 0,
|
||||||
|
recipes: [],
|
||||||
|
constants: constants,
|
||||||
|
is_link: true,
|
||||||
|
activeNames: ['1'],
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {
|
||||||
|
onLoad() {
|
||||||
|
this.getRecipes(this.page + 1);
|
||||||
|
this.page += 1;
|
||||||
|
if (this.page === this.page_count) {
|
||||||
|
this.finished = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getRecipes(page) {
|
||||||
|
axios
|
||||||
|
.get(config.publicPath + '/recipe/recipe/?page=' + page)
|
||||||
|
.then(
|
||||||
|
(response) => (
|
||||||
|
(this.page_count = response.data.page_count),
|
||||||
|
(this.total_count = response.data.count),
|
||||||
|
this.recipes.push(...response.data.results),
|
||||||
|
(this.page = page),
|
||||||
|
(this.loading = false)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.recipe-type-tag {
|
||||||
|
margin: 0 10px 0px 0px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
}
|
||||||
|
.recipe-list {
|
||||||
|
height: 50%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
30
frontend/src/components/recipe-mobile/tabbar.vue
Normal file
30
frontend/src/components/recipe-mobile/tabbar.vue
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<template>
|
||||||
|
<van-tabbar route fixed placeholder class="recipe-tabar">
|
||||||
|
<van-tabbar-item to="/recipe-mobile/week-recipe/" icon="calendar-o">
|
||||||
|
每周菜谱
|
||||||
|
</van-tabbar-item>
|
||||||
|
<van-tabbar-item to="/recipe-mobile/" icon="orders-o">
|
||||||
|
菜谱列表
|
||||||
|
</van-tabbar-item>
|
||||||
|
<van-tabbar-item to="/recipe-mobile/recipe/create/" icon="records">
|
||||||
|
创建菜谱
|
||||||
|
</van-tabbar-item>
|
||||||
|
</van-tabbar>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { Tabbar, TabbarItem } from 'vant';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'RecipeMobileTabbar',
|
||||||
|
components: {
|
||||||
|
[Tabbar.name]: Tabbar,
|
||||||
|
[TabbarItem.name]: TabbarItem,
|
||||||
|
},
|
||||||
|
data: function() {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
@ -79,32 +79,11 @@ import axios from 'axios';
|
|||||||
import router from '@/router/index';
|
import router from '@/router/index';
|
||||||
import config from '@/config/index';
|
import config from '@/config/index';
|
||||||
|
|
||||||
function formatDate(row, column, cellValue) {
|
|
||||||
if (cellValue === undefined) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var date_ = new Date(cellValue * 1000);
|
|
||||||
var days = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
|
|
||||||
return days[date_.getDay()];
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatMeal(row, column, cellValue) {
|
|
||||||
var data = ['/ '];
|
|
||||||
if (cellValue === undefined) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (let i = 0; i < cellValue.length; i++) {
|
|
||||||
data.push(cellValue[i].name + ' / ');
|
|
||||||
}
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
export default {
|
export default {
|
||||||
name: 'WeekRecipe',
|
name: 'WeekRecipe',
|
||||||
data: function() {
|
data: function() {
|
||||||
return {
|
return {
|
||||||
daily_recipes: [],
|
daily_recipes: [],
|
||||||
formatDate,
|
|
||||||
formatMeal,
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@ -125,6 +104,14 @@ export default {
|
|||||||
editDailyRecipe(row) {
|
editDailyRecipe(row) {
|
||||||
router.push({ name: 'DailyRecipeDetail', params: { id: row.id } });
|
router.push({ name: 'DailyRecipeDetail', params: { id: row.id } });
|
||||||
},
|
},
|
||||||
|
formatDate(row, column, cellValue) {
|
||||||
|
if (cellValue === undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var date_ = new Date(cellValue * 1000);
|
||||||
|
var days = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
|
||||||
|
return days[date_.getDay()];
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -4,9 +4,12 @@ import 'bootstrap/dist/css/bootstrap.min.css'
|
|||||||
import installElementPlus from './plugins/element'
|
import installElementPlus from './plugins/element'
|
||||||
import ElementPlus from 'element-plus'
|
import ElementPlus from 'element-plus'
|
||||||
// import 'element-plus/lib/theme-chalk/index.css'
|
// import 'element-plus/lib/theme-chalk/index.css'
|
||||||
|
// import Vant from 'vant';
|
||||||
|
// import 'vant/lib/index.css';
|
||||||
import router from './router'
|
import router from './router'
|
||||||
|
|
||||||
const app = createApp(App)
|
const app = createApp(App)
|
||||||
installElementPlus(app)
|
installElementPlus(app)
|
||||||
app.use(ElementPlus)
|
app.use(ElementPlus)
|
||||||
|
// app.use(Vant)
|
||||||
app.use(router).mount('#app')
|
app.use(router).mount('#app')
|
||||||
|
|||||||
@ -3,6 +3,9 @@ import Home from '@/views/home.vue'
|
|||||||
import RecipeDetail from '@/views/recipeDetail.vue'
|
import RecipeDetail from '@/views/recipeDetail.vue'
|
||||||
import WeekRecipe from '@/views/weekRecipe.vue'
|
import WeekRecipe from '@/views/weekRecipe.vue'
|
||||||
import DailyRecipeDetail from '@/views/dailyRecipeDetail.vue'
|
import DailyRecipeDetail from '@/views/dailyRecipeDetail.vue'
|
||||||
|
import RecipeMobileHome from '@/views/recipe-mobile/Home.vue'
|
||||||
|
import RecipeMobileRecipeCreate from '@/views/recipe-mobile/RecipeCreate.vue'
|
||||||
|
import RecipeMobileWeekRecipe from '@/views/recipe-mobile/WeekRecipe.vue'
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
@ -25,6 +28,23 @@ const routes = [
|
|||||||
name: "DailyRecipeDetail",
|
name: "DailyRecipeDetail",
|
||||||
component: DailyRecipeDetail
|
component: DailyRecipeDetail
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// mobile recipe
|
||||||
|
{
|
||||||
|
path: '/recipe-mobile/',
|
||||||
|
name: "RecipeMobileHome",
|
||||||
|
component: RecipeMobileHome
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/recipe-mobile/recipe/create/',
|
||||||
|
name: "RecipeMobileRecipeCreate",
|
||||||
|
component: RecipeMobileRecipeCreate
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/recipe-mobile/week-recipe/',
|
||||||
|
name: "RecipeMobileWeekRecipe",
|
||||||
|
component: RecipeMobileWeekRecipe
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
const type_map = {
|
const type_map = {
|
||||||
vegetable: '青菜',
|
vegetable: '菜',
|
||||||
meat: '肉',
|
meat: '肉',
|
||||||
soup: '汤',
|
soup: '汤',
|
||||||
};
|
};
|
||||||
|
|||||||
29
frontend/src/views/recipe-mobile/Home.vue
Normal file
29
frontend/src/views/recipe-mobile/Home.vue
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
1<template>
|
||||||
|
<recipe_list />
|
||||||
|
<tabbar />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// import { Tabbar, TabbarItem } from 'vant';
|
||||||
|
import recipe_list from '@/components/recipe-mobile/recipe-list.vue';
|
||||||
|
import tabbar from '@/components/recipe-mobile/tabbar.vue';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'RecipeMobileHome',
|
||||||
|
components: {
|
||||||
|
tabbar,
|
||||||
|
recipe_list,
|
||||||
|
},
|
||||||
|
data: function() {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #f7f8fa;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
117
frontend/src/views/recipe-mobile/RecipeCreate.vue
Normal file
117
frontend/src/views/recipe-mobile/RecipeCreate.vue
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
<template>
|
||||||
|
<van-form @submit="onSubmit" class="recipe-create-form">
|
||||||
|
<van-cell-group class="recipe-create" inset border>
|
||||||
|
<van-field
|
||||||
|
v-model="name"
|
||||||
|
name="name"
|
||||||
|
label="菜名"
|
||||||
|
placehoder="鱼香茄子..."
|
||||||
|
:rules="[{ required: true, message: '请填写菜名' }]"
|
||||||
|
/>
|
||||||
|
<van-field name="reicpe_type" label="类型">
|
||||||
|
<template #input>
|
||||||
|
<van-radio-group v-model="recipe_type" direction="horizontal">
|
||||||
|
<van-radio name="meat" shape="square">肉</van-radio>
|
||||||
|
<van-radio name="vegetable" shape="square">菜</van-radio>
|
||||||
|
<van-radio name="soup" shape="square">汤</van-radio>
|
||||||
|
</van-radio-group>
|
||||||
|
</template>
|
||||||
|
</van-field>
|
||||||
|
<van-field name="rate" label="评分">
|
||||||
|
<template #input>
|
||||||
|
<van-rate v-model="rate" void-icon="like-o" icon="like"></van-rate>
|
||||||
|
</template>
|
||||||
|
</van-field>
|
||||||
|
<van-field name="difficulty" label="难度">
|
||||||
|
<template #input>
|
||||||
|
<van-rate v-model="difficulty" color="#ffd21e"></van-rate>
|
||||||
|
</template>
|
||||||
|
</van-field>
|
||||||
|
</van-cell-group>
|
||||||
|
|
||||||
|
<van-cell-group class="recipe-create" inset border>
|
||||||
|
<van-field
|
||||||
|
v-model="note"
|
||||||
|
rows="2"
|
||||||
|
auto-size
|
||||||
|
label="备注"
|
||||||
|
type="textarea"
|
||||||
|
/>
|
||||||
|
</van-cell-group>
|
||||||
|
<div class="recipe-create">
|
||||||
|
<van-button
|
||||||
|
round
|
||||||
|
type="primary"
|
||||||
|
block
|
||||||
|
plain
|
||||||
|
@click="onSubmit"
|
||||||
|
:loading="loading"
|
||||||
|
>提交</van-button
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</van-form>
|
||||||
|
<tabbar />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import tabbar from '@/components/recipe-mobile/tabbar.vue';
|
||||||
|
import { Form, Field, CellGroup, Radio, RadioGroup, Rate, Button } from 'vant';
|
||||||
|
import axios from 'axios';
|
||||||
|
import config from '@/config/index';
|
||||||
|
import router from '@/router/index';
|
||||||
|
import constants from '@/utils/constants.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'RecipeMobileRecipeCreate',
|
||||||
|
components: {
|
||||||
|
[Form.name]: Form,
|
||||||
|
[Field.name]: Field,
|
||||||
|
[CellGroup.name]: CellGroup,
|
||||||
|
[Radio.name]: Radio,
|
||||||
|
[RadioGroup.name]: RadioGroup,
|
||||||
|
[Rate.name]: Rate,
|
||||||
|
[Button.name]: Button,
|
||||||
|
tabbar,
|
||||||
|
},
|
||||||
|
data: function() {
|
||||||
|
return {
|
||||||
|
name: null,
|
||||||
|
recipe_type: null,
|
||||||
|
rate: 0,
|
||||||
|
difficulty: 0,
|
||||||
|
note: null,
|
||||||
|
loading: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {
|
||||||
|
onSubmit() {
|
||||||
|
if (!this.name) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.loading = true;
|
||||||
|
|
||||||
|
let data = {
|
||||||
|
name: this.name,
|
||||||
|
recipe_type: this.recipe_type
|
||||||
|
? this.recipe_type
|
||||||
|
: constants.RECIPE_TYPE_META,
|
||||||
|
difficulty: this.difficulty ? this.difficulty : 1,
|
||||||
|
rate: this.rate ? this.rate : 1,
|
||||||
|
note: this.note ? this.note : null,
|
||||||
|
};
|
||||||
|
axios
|
||||||
|
.post(config.publicPath + '/recipe/recipe/', data)
|
||||||
|
.then(
|
||||||
|
(response) => (response, router.push({ name: 'RecipeMobileHome' }))
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.recipe-create {
|
||||||
|
margin: 20px 16px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
131
frontend/src/views/recipe-mobile/WeekRecipe.vue
Normal file
131
frontend/src/views/recipe-mobile/WeekRecipe.vue
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<template>
|
||||||
|
<van-pull-refresh v-model="loading" @refresh="onRefresh">
|
||||||
|
<van-cell-group
|
||||||
|
inset
|
||||||
|
v-for:="daily_recipe in daily_recipes"
|
||||||
|
:title="formatDate(daily_recipe.date)"
|
||||||
|
class="daily_recipes"
|
||||||
|
>
|
||||||
|
<van-row>
|
||||||
|
<van-col span="3">
|
||||||
|
<van-grid :column-num="1">
|
||||||
|
<van-grid-item text="肉" class="recipe_type"></van-grid-item>
|
||||||
|
</van-grid>
|
||||||
|
</van-col>
|
||||||
|
<van-col span="21">
|
||||||
|
<van-grid :column-num="3">
|
||||||
|
<van-grid-item
|
||||||
|
v-for:="recipe in daily_recipe.meat"
|
||||||
|
:text="recipe.name"
|
||||||
|
/>
|
||||||
|
</van-grid>
|
||||||
|
</van-col>
|
||||||
|
</van-row>
|
||||||
|
<van-row>
|
||||||
|
<van-col span="3">
|
||||||
|
<van-grid :column-num="1">
|
||||||
|
<van-grid-item text="菜" class="recipe_type"></van-grid-item>
|
||||||
|
</van-grid>
|
||||||
|
</van-col>
|
||||||
|
<van-col span="21">
|
||||||
|
<van-grid :column-num="3">
|
||||||
|
<van-grid-item
|
||||||
|
v-for:="recipe in daily_recipe.vegetable"
|
||||||
|
:text="recipe.name"
|
||||||
|
/>
|
||||||
|
</van-grid>
|
||||||
|
</van-col>
|
||||||
|
</van-row>
|
||||||
|
<van-row v-if="daily_recipe.soup.length > 0">
|
||||||
|
<van-col span="3">
|
||||||
|
<van-grid :column-num="1">
|
||||||
|
<van-grid-item text="汤" class="recipe_type"></van-grid-item>
|
||||||
|
</van-grid>
|
||||||
|
</van-col>
|
||||||
|
<van-col span="21">
|
||||||
|
<van-grid :column-num="1">
|
||||||
|
<van-grid-item
|
||||||
|
v-for:="recipe in daily_recipe.soup"
|
||||||
|
:text="recipe.name"
|
||||||
|
/>
|
||||||
|
</van-grid>
|
||||||
|
</van-col>
|
||||||
|
</van-row>
|
||||||
|
</van-cell-group>
|
||||||
|
</van-pull-refresh>
|
||||||
|
<tabbar />
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import tabbar from '@/components/recipe-mobile/tabbar.vue';
|
||||||
|
import {
|
||||||
|
Tag,
|
||||||
|
Cell,
|
||||||
|
CellGroup,
|
||||||
|
Col,
|
||||||
|
Row,
|
||||||
|
Button,
|
||||||
|
Grid,
|
||||||
|
GridItem,
|
||||||
|
PullRefresh,
|
||||||
|
} from 'vant';
|
||||||
|
import axios from 'axios';
|
||||||
|
import config from '@/config/index';
|
||||||
|
// import router from '@/router/index';
|
||||||
|
// import constants from '@/utils/constants.js';
|
||||||
|
export default {
|
||||||
|
name: 'RecipeMobileWeekRecipe',
|
||||||
|
components: {
|
||||||
|
[CellGroup.name]: CellGroup,
|
||||||
|
[Cell.name]: Cell,
|
||||||
|
[Col.name]: Col,
|
||||||
|
[Row.name]: Row,
|
||||||
|
[Tag.name]: Tag,
|
||||||
|
[Grid.name]: Grid,
|
||||||
|
[GridItem.name]: GridItem,
|
||||||
|
[Button.name]: Button,
|
||||||
|
[PullRefresh.name]: PullRefresh,
|
||||||
|
tabbar,
|
||||||
|
},
|
||||||
|
data: function() {
|
||||||
|
return {
|
||||||
|
daily_recipes: [],
|
||||||
|
loading: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
axios
|
||||||
|
.get(config.publicPath + '/recipe/week-recipe/')
|
||||||
|
.then((response) => (this.daily_recipes = response.data));
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
formatDate(date) {
|
||||||
|
if (date === undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var date_ = new Date(date * 1000);
|
||||||
|
var days = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
|
||||||
|
return days[date_.getDay()];
|
||||||
|
},
|
||||||
|
onRefresh() {
|
||||||
|
axios
|
||||||
|
.post(config.publicPath + '/recipe/week-recipe/')
|
||||||
|
.then(
|
||||||
|
(response) => (
|
||||||
|
(this.daily_recipes = response.data), (this.loading = false)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.recipe_type .van-grid-item__content {
|
||||||
|
background-color: #f2f3f5;
|
||||||
|
/* font-size: var(--van-font-size-lg); */
|
||||||
|
}
|
||||||
|
.daily_recipes:last-child {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -864,7 +864,7 @@
|
|||||||
"@babel/types" "^7.4.4"
|
"@babel/types" "^7.4.4"
|
||||||
"esutils" "^2.0.2"
|
"esutils" "^2.0.2"
|
||||||
|
|
||||||
"@babel/runtime@^7.11.0", "@babel/runtime@^7.8.4":
|
"@babel/runtime@^7.0.0", "@babel/runtime@^7.11.0", "@babel/runtime@^7.8.4":
|
||||||
"integrity" "sha1-/RfRa/34eObdAtGXU6OfqKjZyEo="
|
"integrity" "sha1-/RfRa/34eObdAtGXU6OfqKjZyEo="
|
||||||
"resolved" "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.15.4.tgz?cache=0&sync_timestamp=1630618785994&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.15.4.tgz"
|
"resolved" "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.15.4.tgz?cache=0&sync_timestamp=1630618785994&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.15.4.tgz"
|
||||||
"version" "7.15.4"
|
"version" "7.15.4"
|
||||||
@ -962,7 +962,7 @@
|
|||||||
"resolved" "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&sync_timestamp=1622792655362&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz"
|
"resolved" "https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-1.1.3.tgz?cache=0&sync_timestamp=1622792655362&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-1.1.3.tgz"
|
||||||
"version" "1.1.3"
|
"version" "1.1.3"
|
||||||
|
|
||||||
"@popperjs/core@^2.10.1", "@popperjs/core@^2.4.4":
|
"@popperjs/core@^2.10.1", "@popperjs/core@^2.4.4", "@popperjs/core@^2.9.2":
|
||||||
"integrity" "sha1-co7NlasgequKmk5CHwQi2zKSMr4="
|
"integrity" "sha1-co7NlasgequKmk5CHwQi2zKSMr4="
|
||||||
"resolved" "https://registry.nlark.com/@popperjs/core/download/@popperjs/core-2.10.1.tgz?cache=0&sync_timestamp=1630646750615&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40popperjs%2Fcore%2Fdownload%2F%40popperjs%2Fcore-2.10.1.tgz"
|
"resolved" "https://registry.nlark.com/@popperjs/core/download/@popperjs/core-2.10.1.tgz?cache=0&sync_timestamp=1630646750615&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40popperjs%2Fcore%2Fdownload%2F%40popperjs%2Fcore-2.10.1.tgz"
|
||||||
"version" "2.10.1"
|
"version" "2.10.1"
|
||||||
@ -1146,6 +1146,30 @@
|
|||||||
"anymatch" "^3.0.0"
|
"anymatch" "^3.0.0"
|
||||||
"source-map" "^0.6.0"
|
"source-map" "^0.6.0"
|
||||||
|
|
||||||
|
"@vant/icons@^1.7.1":
|
||||||
|
"integrity" "sha1-Sa5CAwK1WB5U5olIkeWgW8dun4c="
|
||||||
|
"resolved" "https://registry.nlark.com/@vant/icons/download/@vant/icons-1.7.1.tgz?cache=0&sync_timestamp=1631954488381&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40vant%2Ficons%2Fdownload%2F%40vant%2Ficons-1.7.1.tgz"
|
||||||
|
"version" "1.7.1"
|
||||||
|
|
||||||
|
"@vant/lazyload@^1.3.0":
|
||||||
|
"integrity" "sha1-4FKTJpF9jLImTuLk6wjxoDqrLB0="
|
||||||
|
"resolved" "https://registry.npmmirror.com/@vant/lazyload/download/@vant/lazyload-1.4.0.tgz"
|
||||||
|
"version" "1.4.0"
|
||||||
|
dependencies:
|
||||||
|
"@vant/use" "^1.3.2"
|
||||||
|
|
||||||
|
"@vant/popperjs@^1.1.0":
|
||||||
|
"integrity" "sha1-tO3uW7+m+xhwWYbjE9T9XxeUKg8="
|
||||||
|
"resolved" "https://registry.npm.taobao.org/@vant/popperjs/download/@vant/popperjs-1.1.0.tgz?cache=0&sync_timestamp=1617712371368&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vant%2Fpopperjs%2Fdownload%2F%40vant%2Fpopperjs-1.1.0.tgz"
|
||||||
|
"version" "1.1.0"
|
||||||
|
dependencies:
|
||||||
|
"@popperjs/core" "^2.9.2"
|
||||||
|
|
||||||
|
"@vant/use@^1.3.1", "@vant/use@^1.3.2":
|
||||||
|
"integrity" "sha1-1PIy8EQN88BYxlA3rm8g69DAatM="
|
||||||
|
"resolved" "https://registry.npmmirror.com/@vant/use/download/@vant/use-1.3.2.tgz?cache=0&sync_timestamp=1632970350432&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40vant%2Fuse%2Fdownload%2F%40vant%2Fuse-1.3.2.tgz"
|
||||||
|
"version" "1.3.2"
|
||||||
|
|
||||||
"@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
|
"@vue/babel-helper-vue-jsx-merge-props@^1.2.1":
|
||||||
"integrity" "sha1-MWJKelBfsU2h1YAjclpMXycOaoE=sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA=="
|
"integrity" "sha1-MWJKelBfsU2h1YAjclpMXycOaoE=sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA=="
|
||||||
"resolved" "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851122331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz"
|
"resolved" "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851122331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz"
|
||||||
@ -1988,6 +2012,14 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"object.assign" "^4.1.0"
|
"object.assign" "^4.1.0"
|
||||||
|
|
||||||
|
"babel-plugin-import@^1.13.3":
|
||||||
|
"integrity" "sha1-nbu6fRrHK9QSkXqDDUReAJQdJtc="
|
||||||
|
"resolved" "https://registry.nlark.com/babel-plugin-import/download/babel-plugin-import-1.13.3.tgz"
|
||||||
|
"version" "1.13.3"
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-module-imports" "^7.0.0"
|
||||||
|
"@babel/runtime" "^7.0.0"
|
||||||
|
|
||||||
"babel-plugin-polyfill-corejs2@^0.2.2":
|
"babel-plugin-polyfill-corejs2@^0.2.2":
|
||||||
"integrity" "sha1-6RJHheb9lPlLYYp5VOVpMFO/Uyc="
|
"integrity" "sha1-6RJHheb9lPlLYYp5VOVpMFO/Uyc="
|
||||||
"resolved" "https://registry.nlark.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.2.tgz?cache=0&sync_timestamp=1622023904181&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-polyfill-corejs2%2Fdownload%2Fbabel-plugin-polyfill-corejs2-0.2.2.tgz"
|
"resolved" "https://registry.nlark.com/babel-plugin-polyfill-corejs2/download/babel-plugin-polyfill-corejs2-0.2.2.tgz?cache=0&sync_timestamp=1622023904181&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fbabel-plugin-polyfill-corejs2%2Fdownload%2Fbabel-plugin-polyfill-corejs2-0.2.2.tgz"
|
||||||
@ -3412,25 +3444,11 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"is-obj" "^2.0.0"
|
"is-obj" "^2.0.0"
|
||||||
|
|
||||||
"dotenv-defaults@^2.0.2":
|
|
||||||
"integrity" "sha1-az7C5DGar7cJQKvactOFZ3Dud6w="
|
|
||||||
"resolved" "https://registry.nlark.com/dotenv-defaults/download/dotenv-defaults-2.0.2.tgz"
|
|
||||||
"version" "2.0.2"
|
|
||||||
dependencies:
|
|
||||||
"dotenv" "^8.2.0"
|
|
||||||
|
|
||||||
"dotenv-expand@^5.1.0":
|
"dotenv-expand@^5.1.0":
|
||||||
"integrity" "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA=="
|
"integrity" "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA=="
|
||||||
"resolved" "https://registry.nlark.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz"
|
"resolved" "https://registry.nlark.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz"
|
||||||
"version" "5.1.0"
|
"version" "5.1.0"
|
||||||
|
|
||||||
"dotenv-webpack@^7.0.3":
|
|
||||||
"integrity" "sha1-9Q7Dxwg6aexgduEQVmcgADt7EHs="
|
|
||||||
"resolved" "https://registry.nlark.com/dotenv-webpack/download/dotenv-webpack-7.0.3.tgz?cache=0&sync_timestamp=1622697504782&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdotenv-webpack%2Fdownload%2Fdotenv-webpack-7.0.3.tgz"
|
|
||||||
"version" "7.0.3"
|
|
||||||
dependencies:
|
|
||||||
"dotenv-defaults" "^2.0.2"
|
|
||||||
|
|
||||||
"dotenv@^8.2.0":
|
"dotenv@^8.2.0":
|
||||||
"integrity" "sha1-Bhr2ZNGff02PxuT/m1hM4jety4s=sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
|
"integrity" "sha1-Bhr2ZNGff02PxuT/m1hM4jety4s=sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g=="
|
||||||
"resolved" "https://registry.nlark.com/dotenv/download/dotenv-8.6.0.tgz"
|
"resolved" "https://registry.nlark.com/dotenv/download/dotenv-8.6.0.tgz"
|
||||||
@ -8496,6 +8514,16 @@
|
|||||||
"spdx-correct" "^3.0.0"
|
"spdx-correct" "^3.0.0"
|
||||||
"spdx-expression-parse" "^3.0.0"
|
"spdx-expression-parse" "^3.0.0"
|
||||||
|
|
||||||
|
"vant@^3.2.4":
|
||||||
|
"integrity" "sha1-DZ/QxYoJ1WuRxNVBD+4M25icjrg="
|
||||||
|
"resolved" "https://registry.npmmirror.com/vant/download/vant-3.2.4.tgz"
|
||||||
|
"version" "3.2.4"
|
||||||
|
dependencies:
|
||||||
|
"@vant/icons" "^1.7.1"
|
||||||
|
"@vant/lazyload" "^1.3.0"
|
||||||
|
"@vant/popperjs" "^1.1.0"
|
||||||
|
"@vant/use" "^1.3.1"
|
||||||
|
|
||||||
"vary@~1.1.2":
|
"vary@~1.1.2":
|
||||||
"integrity" "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
"integrity" "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
||||||
"resolved" "https://registry.nlark.com/vary/download/vary-1.1.2.tgz"
|
"resolved" "https://registry.nlark.com/vary/download/vary-1.1.2.tgz"
|
||||||
@ -8525,6 +8553,11 @@
|
|||||||
"resolved" "https://registry.npm.taobao.org/vue-cli-plugin-element-plus/download/vue-cli-plugin-element-plus-0.0.13.tgz"
|
"resolved" "https://registry.npm.taobao.org/vue-cli-plugin-element-plus/download/vue-cli-plugin-element-plus-0.0.13.tgz"
|
||||||
"version" "0.0.13"
|
"version" "0.0.13"
|
||||||
|
|
||||||
|
"vue-cli-plugin-vant@^1.0.1":
|
||||||
|
"integrity" "sha1-uPobVa/U2q8UDUHZa+NW5F2Pt78="
|
||||||
|
"resolved" "https://registry.npm.taobao.org/vue-cli-plugin-vant/download/vue-cli-plugin-vant-1.0.1.tgz"
|
||||||
|
"version" "1.0.1"
|
||||||
|
|
||||||
"vue-eslint-parser@^7.10.0":
|
"vue-eslint-parser@^7.10.0":
|
||||||
"integrity" "sha1-6k5LEP0QqjXIp5rHg0iNirzSm+g="
|
"integrity" "sha1-6k5LEP0QqjXIp5rHg0iNirzSm+g="
|
||||||
"resolved" "https://registry.nlark.com/vue-eslint-parser/download/vue-eslint-parser-7.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.10.0.tgz"
|
"resolved" "https://registry.nlark.com/vue-eslint-parser/download/vue-eslint-parser-7.10.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.10.0.tgz"
|
||||||
@ -8724,7 +8757,7 @@
|
|||||||
"source-list-map" "^2.0.0"
|
"source-list-map" "^2.0.0"
|
||||||
"source-map" "~0.6.1"
|
"source-map" "~0.6.1"
|
||||||
|
|
||||||
"webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", "webpack@^4 || ^5", "webpack@^4.0.0", "webpack@^4.0.0 || ^5.0.0", "webpack@^4.1.0 || ^5.0.0-0", "webpack@^4.4.0", "webpack@>=2", "webpack@>=2.0.0 <5.0.0", "webpack@>=4.0.0":
|
"webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^2.0.0 || ^3.0.0 || ^4.0.0", "webpack@^3.0.0 || ^4.1.0 || ^5.0.0-0", "webpack@^4.0.0", "webpack@^4.0.0 || ^5.0.0", "webpack@^4.1.0 || ^5.0.0-0", "webpack@^4.4.0", "webpack@>=2", "webpack@>=2.0.0 <5.0.0", "webpack@>=4.0.0":
|
||||||
"integrity" "sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI=sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q=="
|
"integrity" "sha1-v5tEBOogoHNgXgoBHRiNd8tq1UI=sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q=="
|
||||||
"resolved" "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz?cache=0&sync_timestamp=1630682912330&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.46.0.tgz"
|
"resolved" "https://registry.nlark.com/webpack/download/webpack-4.46.0.tgz?cache=0&sync_timestamp=1630682912330&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebpack%2Fdownload%2Fwebpack-4.46.0.tgz"
|
||||||
"version" "4.46.0"
|
"version" "4.46.0"
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import random
|
import random
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now, localtime
|
||||||
|
import datetime
|
||||||
from utils import const
|
from utils import const
|
||||||
import utils
|
import utils
|
||||||
|
|
||||||
@ -104,3 +105,18 @@ class DailyRecipe(models.Model):
|
|||||||
data['date'] = utils.timestamp_of(utils.day_start(date))
|
data['date'] = utils.timestamp_of(utils.day_start(date))
|
||||||
data['id'] = self.id
|
data['id'] = self.id
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_week_recipe_data(cls):
|
||||||
|
today = localtime()
|
||||||
|
week_start = (today - datetime.timedelta(days=today.weekday())).date()
|
||||||
|
week_end = week_start + datetime.timedelta(days=6)
|
||||||
|
daily_recipes = cls.objects.filter(
|
||||||
|
date__gte=week_start,
|
||||||
|
date__lte=week_end,
|
||||||
|
).order_by('date')
|
||||||
|
data = [{}] * (7 - len(daily_recipes))
|
||||||
|
|
||||||
|
for daily_recipe in daily_recipes:
|
||||||
|
data.append(daily_recipe.serialize())
|
||||||
|
return data
|
||||||
|
|||||||
@ -53,21 +53,11 @@ class WeekRecipeListAPI(rest_framework.generics.ListAPIView,
|
|||||||
)
|
)
|
||||||
daily_recipe.generate_recipe()
|
daily_recipe.generate_recipe()
|
||||||
recipes.append(daily_recipe.recipes.values_list('id', flat=True))
|
recipes.append(daily_recipe.recipes.values_list('id', flat=True))
|
||||||
return Response({}, status=status.HTTP_201_CREATED, headers={})
|
return Response(recipe.models.DailyRecipe.get_week_recipe_data(),
|
||||||
|
status=status.HTTP_201_CREATED, headers={})
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
today = localtime()
|
data = recipe.models.DailyRecipe.get_week_recipe_data()
|
||||||
week_start = (today - datetime.timedelta(days=today.weekday())).date()
|
|
||||||
week_end = week_start + datetime.timedelta(days=6)
|
|
||||||
daily_recipes = recipe.models.DailyRecipe.objects.filter(
|
|
||||||
date__gte=week_start,
|
|
||||||
date__lte=week_end,
|
|
||||||
).order_by('date')
|
|
||||||
data = [{}] * (7 - len(daily_recipes))
|
|
||||||
|
|
||||||
for daily_recipe in daily_recipes:
|
|
||||||
data.append(daily_recipe.serialize())
|
|
||||||
|
|
||||||
return Response(data)
|
return Response(data)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user