├── src
├── assets
│ ├── .gitkeep
│ ├── logo.png
│ └── favicon.ico
├── static
│ ├── .gitkeep
│ ├── css
│ │ └── wap.css
│ └── images
│ │ ├── sf.png
│ │ ├── back1.jpg
│ │ ├── icons.jpg
│ │ └── loading2.gif
├── settings.js
├── store
│ ├── index.js
│ └── modules
│ │ └── index.js
├── config
│ └── api.js
├── main.js
├── components
│ ├── WapPage.vue
│ ├── Wap
│ │ ├── Topbar.vue
│ │ ├── WapPage.vue
│ │ ├── CenterPage.vue
│ │ ├── Footerbar.vue
│ │ └── GoodsPage.vue
│ ├── DashboardPage.vue
│ ├── Common
│ │ ├── Navbar.vue
│ │ ├── Countdown.vue
│ │ └── Sidebar.vue
│ ├── Freight
│ │ ├── FreightPage.vue
│ │ ├── ExceptAreaPage.vue
│ │ └── ExceptAreaAddPage.vue
│ ├── Admin
│ │ ├── AdminPage.vue
│ │ └── AdminAddPage.vue
│ ├── GoodsGallery
│ │ └── GoodsGalleryEditPage.vue
│ ├── Keywords
│ │ ├── KeywordsAddPage.vue
│ │ └── KeywordsPage.vue
│ ├── ShopCart
│ │ └── ShopCartPage.vue
│ ├── Shipper
│ │ ├── ShipperAddPage.vue
│ │ ├── ShipperListPage.vue
│ │ └── ShipperPage.vue
│ ├── Showset
│ │ └── ShowSetPage.vue
│ ├── Ad
│ │ ├── AdPage.vue
│ │ └── AdAddPage.vue
│ ├── LoginPage.vue
│ ├── Comment
│ │ ├── ComPage.vue
│ │ └── ComAddPage.vue
│ ├── Settings
│ │ └── NoticePage.vue
│ ├── User
│ │ └── UserPage.vue
│ ├── Category
│ │ ├── CategoryPage.vue
│ │ └── CategoryAddPage.vue
│ ├── Specification
│ │ └── SpecificationAddPage.vue
│ ├── Nature
│ │ └── NaturePage.vue
│ └── WelcomePage.vue
├── App.vue
├── element.js
└── router
│ └── index.js
├── .browserslistrc
├── .env.development
├── .env.production
├── gitImg
├── cart.png
├── home.png
├── set.png
├── user.png
├── goods.png
├── order.png
├── weixin.jpeg
├── category.png
└── xzzshop.jpeg
├── public
├── favicon.ico
└── index.html
├── postcss.config.js
├── scripts
├── oss
│ ├── config.js
│ ├── index.js
│ ├── client.js
│ └── upload.js
└── plop
│ ├── util.js
│ └── view
│ ├── index.hbs
│ └── prompt.js
├── babel.config.js
├── .gitignore
├── .eslintrc.js
├── .prettierrc
├── package.json
├── README.md
└── vue.config.js
/src/assets/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/static/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/static/css/wap.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/.env.development:
--------------------------------------------------------------------------------
1 | ENV = 'development'
2 | VUE_APP_BASE_API = '/dev-api'
--------------------------------------------------------------------------------
/.env.production:
--------------------------------------------------------------------------------
1 | ENV = 'production'
2 | VUE_APP_BASE_API = '/prod-api'
3 |
4 |
--------------------------------------------------------------------------------
/gitImg/cart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/gitImg/cart.png
--------------------------------------------------------------------------------
/gitImg/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/gitImg/home.png
--------------------------------------------------------------------------------
/gitImg/set.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/gitImg/set.png
--------------------------------------------------------------------------------
/gitImg/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/gitImg/user.png
--------------------------------------------------------------------------------
/gitImg/goods.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/gitImg/goods.png
--------------------------------------------------------------------------------
/gitImg/order.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/gitImg/order.png
--------------------------------------------------------------------------------
/gitImg/weixin.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/gitImg/weixin.jpeg
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/gitImg/category.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/gitImg/category.png
--------------------------------------------------------------------------------
/gitImg/xzzshop.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/gitImg/xzzshop.jpeg
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {}
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/src/assets/logo.png
--------------------------------------------------------------------------------
/src/assets/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/src/assets/favicon.ico
--------------------------------------------------------------------------------
/src/static/images/sf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/src/static/images/sf.png
--------------------------------------------------------------------------------
/src/static/images/back1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/src/static/images/back1.jpg
--------------------------------------------------------------------------------
/src/static/images/icons.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/src/static/images/icons.jpg
--------------------------------------------------------------------------------
/src/settings.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | title: '小猪猪后台管理',
3 | fixedHeader: true,
4 | sidebarLogo: true
5 | }
6 |
--------------------------------------------------------------------------------
/src/static/images/loading2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zxb1655/xzzshop-admin/HEAD/src/static/images/loading2.gif
--------------------------------------------------------------------------------
/scripts/oss/config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | accessKeyId: 'LTAI5tFcn9fqRU54dov6RFvp',
3 | accessKeySecret: '5fc9pBQAigwg49FhQ8BZ03gIWF8lcz'
4 | }
5 |
--------------------------------------------------------------------------------
/scripts/plop/util.js:
--------------------------------------------------------------------------------
1 | exports.notEmpty = name => {
2 | return v => {
3 | if (!v || v.trim === '') {
4 | return `${name} is required`
5 | } else {
6 | return true
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 |
4 | import modules from './modules'
5 |
6 | Vue.use(Vuex)
7 |
8 | export default new Vuex.Store({
9 | modules,
10 | strict: process.env.NODE_ENV !== 'production'
11 | })
12 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"],
3 | plugins: [
4 | [
5 | "component",
6 | {
7 | libraryName: "element-ui",
8 | styleLibraryName: "theme-chalk",
9 | },
10 | ],
11 | ],
12 | };
13 |
--------------------------------------------------------------------------------
/scripts/oss/index.js:
--------------------------------------------------------------------------------
1 | const pwd = process.cwd()
2 | const path = require('path')
3 | const package = require('../../package.json')
4 | const { upload } = require('./upload')
5 |
6 | const ossBasePath = package.name
7 |
8 | function start() {
9 | upload(path.join(pwd, `/${package.entry}/`), `${ossBasePath}`)
10 | }
11 |
12 | start()
13 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/src/config/api.js:
--------------------------------------------------------------------------------
1 | const rootUrl = 'http://127.0.0.1:8360/admin/'
2 | // const rootUrl = 'https://shopserver.zxb66.top/admin/'
3 |
4 | const api = {
5 | rootUrl: rootUrl,
6 | qiniu: 'http://up.qiniu.com'
7 | // 请根据自己创建的七牛的区域进行设置:
8 | // https://developer.qiniu.com/kodo/manual/1671/region-endpoint
9 | }
10 |
11 | // import api from './config/api'
12 | // Axios.defaults.baseURL = api.rootUrl;
13 |
14 | export default api
15 |
--------------------------------------------------------------------------------
/src/store/modules/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * The file enables `@/store/index.js` to import all vuex modules
3 | * in a one-shot manner. There should not be any reason to edit this file.
4 | */
5 |
6 | const files = require.context('.', false, /\.js$/)
7 | const modules = {}
8 |
9 | files.keys().forEach(key => {
10 | if (key === './index.js') return
11 | modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default
12 | })
13 |
14 | export default modules
15 |
--------------------------------------------------------------------------------
/scripts/oss/client.js:
--------------------------------------------------------------------------------
1 | const OSS = require('ali-oss')
2 | const OSSConfig = require('./config')
3 |
4 | const BUILD_FOR = process.env.BUILD_FOR
5 |
6 | let client = new OSS({
7 | region: 'oss-cn-shenzhen',
8 | accessKeyId: OSSConfig.accessKeyId,
9 | accessKeySecret: OSSConfig.accessKeySecret
10 | })
11 |
12 | console.log(`mw${BUILD_FOR ? '-' + BUILD_FOR : ''}`)
13 | client.useBucket(`mw${BUILD_FOR ? '-' + BUILD_FOR : ''}`)
14 |
15 | module.exports = {
16 | client
17 | }
18 |
--------------------------------------------------------------------------------
/scripts/plop/view/index.hbs:
--------------------------------------------------------------------------------
1 | {{#if template}}
2 |
3 |
4 |
5 |
6 | {{/if}}
7 |
8 | {{#if script}}
9 |
13 | {{/if}}
14 |
15 | {{#if style}}
16 |
20 | {{/if}}
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: false,
3 | env: {
4 | browser: true,
5 | node: true,
6 | es6: true
7 | },
8 |
9 | extends: ['plugin:vue/essential', 'eslint:recommended', '@vue/prettier'],
10 |
11 | parserOptions: {
12 | parser: 'babel-eslint'
13 | },
14 |
15 | extends: ['plugin:vue/essential', 'eslint:recommended', '@vue/prettier'],
16 | rules: {
17 | 'no-console': 'off',
18 | 'no-debugger': 'off',
19 | 'no-unused-vars': 'off'
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 120,
3 | "tabWidth": 2,
4 | "singleQuote": true,
5 | "trailingComma": "none",
6 | "semi": false,
7 | "wrap_line_length": 120,
8 | "wrap_attributes": "auto",
9 | "proseWrap": "always",
10 | "arrowParens": "avoid",
11 | "bracketSpacing": true,
12 | "jsxBracketSameLine": true,
13 | "useTabs": false,
14 | "eslintIntegration": true,
15 | "overrides": [
16 | {
17 | "files": ".prettierrc",
18 | "options": {
19 | "parser": "json"
20 | }
21 | }
22 | ],
23 | "endOfLine": "auto"
24 | }
25 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <%= htmlWebpackPlugin.options.title %>
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/scripts/oss/upload.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs')
2 | const { client } = require('./client')
3 |
4 | function putOSS(src, dist) {
5 | return new Promise(async resolve => {
6 | try {
7 | await client.put(dist, src)
8 | resolve()
9 | } catch (e) {
10 | console.log(e)
11 | resolve()
12 | }
13 | })
14 | }
15 |
16 | function upload(src, dist) {
17 | var docs = fs.readdirSync(src)
18 | return new Promise(resolve => {
19 | docs.forEach(function (doc) {
20 | var _src = src + '/' + doc,
21 | _dist = dist + '/' + doc
22 | var st = fs.statSync(_src)
23 | // 判断是否为文件
24 | if (st.isFile() && doc !== '.DS_Store') {
25 | putOSS(_src, _dist)
26 | // console.log(_src+'是文件',_dist)
27 | }
28 | // 如果是目录则递归调用自身
29 | else if (st.isDirectory()) {
30 | // console.log(_src+'是文件夹')
31 | upload(_src, _dist)
32 | }
33 | })
34 | // console.log('上传结束');
35 | resolve()
36 | })
37 | }
38 |
39 | module.exports = {
40 | upload
41 | }
42 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Axios from 'axios'
3 | import VueAxios from 'vue-axios'
4 |
5 | import App from './App'
6 | import router from './router'
7 | import store from './store'
8 | import api from './config/api'
9 | import './element.js'
10 |
11 | import 'quill/dist/quill.core.css'
12 | import 'quill/dist/quill.snow.css'
13 | import 'quill/dist/quill.bubble.css'
14 |
15 | Vue.use(VueAxios, Axios)
16 |
17 | router.beforeEach((to, from, next) => {
18 | let token = localStorage.getItem('token') || ''
19 | //配置接口信息
20 | Axios.defaults.baseURL = api.rootUrl
21 | console.log(Axios.defaults.headers)
22 | Axios.defaults.headers.common['x-xzzshop-token'] = token
23 |
24 | if (!token && to.name !== 'login') {
25 | next({
26 | path: '/login',
27 | query: { redirect: to.fullPath }
28 | })
29 | } else {
30 | next()
31 | }
32 | })
33 |
34 | Vue.config.productionTip = false
35 |
36 | new Vue({
37 | el: '#app',
38 | router,
39 | store,
40 | render: h => h(App)
41 | })
42 |
--------------------------------------------------------------------------------
/src/components/WapPage.vue:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
51 |
--------------------------------------------------------------------------------
/src/components/Wap/Topbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
29 |
53 |
--------------------------------------------------------------------------------
/src/components/Wap/WapPage.vue:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
54 |
--------------------------------------------------------------------------------
/scripts/plop/view/prompt.js:
--------------------------------------------------------------------------------
1 | const { notEmpty } = require('../util.js')
2 |
3 | module.exports = {
4 | description: 'generate a view',
5 | prompts: [
6 | {
7 | type: 'input',
8 | name: 'name',
9 | message: '页面文件名',
10 | validate: notEmpty('name')
11 | },
12 | {
13 | type: 'checkbox',
14 | name: 'blocks',
15 | message: 'Blocks:',
16 | choices: [
17 | {
18 | name: '',
19 | value: 'template',
20 | checked: true
21 | },
22 | {
23 | name: '
62 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "xzzshop-admin",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "BUILD_FOR=production vue-cli-service build",
8 | "build:test": "BUILD_FOR=test vue-cli-service build",
9 | "new": "plop",
10 | "lint": "vue-cli-service lint",
11 | "upload:test": "BUILD_FOR=gitlab-test node scripts/oss/index.js",
12 | "upload": "BUILD_FOR=gitlab node scripts/oss/index.js"
13 | },
14 | "dependencies": {
15 | "axios": "^0.24.0",
16 | "clipboard": "^2.0.8",
17 | "core-js": "^3.6.5",
18 | "element-ui": "^2.15.6",
19 | "jquery": "^3.6.0",
20 | "normalize.css": "^8.0.1",
21 | "nprogress": "^0.2.0",
22 | "utility": "^1.17.0",
23 | "vue": "^2.6.11",
24 | "vue-axios": "^3.4.0",
25 | "vue-barcode": "^1.3.0",
26 | "vue-quill-editor": "^3.0.6",
27 | "vue-router": "^3.2.0",
28 | "vuex": "^3.4.0"
29 | },
30 | "devDependencies": {
31 | "@vue/cli-plugin-babel": "~4.5.0",
32 | "@vue/cli-plugin-eslint": "~4.5.0",
33 | "@vue/cli-plugin-router": "~4.5.0",
34 | "@vue/cli-plugin-vuex": "~4.5.0",
35 | "@vue/cli-service": "~4.5.0",
36 | "@vue/eslint-config-prettier": "^6.0.0",
37 | "babel-eslint": "^10.1.0",
38 | "babel-plugin-component": "^1.1.1",
39 | "eslint": "^6.7.2",
40 | "eslint-plugin-prettier": "^3.3.1",
41 | "eslint-plugin-vue": "^6.2.2",
42 | "plop": "^2.7.6",
43 | "prettier": "^2.2.1",
44 | "sass": "^1.26.5",
45 | "sass-loader": "^8.0.2",
46 | "script-ext-html-webpack-plugin": "^2.1.5",
47 | "svg-sprite-loader": "^6.0.11",
48 | "vue-template-compiler": "^2.6.11"
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ### 猪猪小店,开源微信商城(Element+Vue 后台管理端)
2 |
3 | - 基于开源项目 NideShop 和海风小店重建,参考的这两个项目的时间都有点久,有一些小问题,因此我精简了一些功能,同时完善修复
4 | 了一些 bug,并重新设计了 UI,目前已发布上线,使用中~
5 | - 服务端 api 基于 Node.js+ThinkJS+MySQL
6 | - 后台管理端 基于 VUE.js+element-ui、
7 | - 小程序端 基于原生小程序开发
8 | - 目前微信登录、支付,快递查询均正常使用
9 |
10 | ### 目前猪猪小店已经上线,可以扫码测试看看
11 |
12 |
13 |
14 | #### 本项目需要配合
15 |
16 | 服务端: https://github.com/zxb1655/xzzshop-server
17 | 微信小程序:https://github.com/zxb1655/xzzshop-miniprogram
18 |
19 | ### 项目截图
20 |
21 | - 后台首页
22 |
23 |
24 |
25 | - 订单
26 |
27 |
28 |
29 | - 商品管理
30 |
31 |
32 |
33 | - 商品分类
34 |
35 |
36 |
37 | - 购物车
38 |
39 |
40 |
41 | - 用户
42 |
43 |
44 |
45 | - 店铺设置
46 |
47 |
48 |
49 | ### 本地开发环境配置
50 |
51 | - 克隆项目到本地
52 |
53 | ```
54 | git clone https://github.com/zxb1655/xzzshop-admin
55 | ```
56 |
57 | - 安装依赖
58 |
59 | ```
60 | yarn
61 | ```
62 |
63 | - 启动
64 |
65 | ```
66 | yarn serve
67 | ```
68 |
69 | - build 打包成静态文件
70 |
71 | ```
72 | yarn build 或者 yarn build:test
73 | ```
74 |
75 | 生成的静态文件在 dist 文件夹中,上传到服务器就可以在浏览器中打开了。
76 |
77 | ### 功能列表
78 |
79 | - 订单管理:查看,修改订单价格,发货,生成电子面单,修改订单状态
80 | - 商品管理:添加、修改、删除商品,添加商品分类,添加商品评论
81 | - 购物车:可以看到用户加入购物车的情况
82 | - 用户列表:用户的一些使用踪迹
83 | - 店铺设置:显示设置,广告列表,公告管理,运费模板(可以根据地区设置相应的运费),快递设置,管理员
84 |
85 | ### 最后说明
86 |
87 | - 项目地址
88 |
89 | 后台管理:https://github.com/zxb1655/xzzshop-admin
90 | 服务端: https://github.com/zxb1655/xzzshop-server
91 | 微信小程序:https://github.com/zxb1655/xzzshop-miniprogram
92 |
93 | - 本项目会持续更新和维护,有问题可通过微信联系我,喜欢别忘了 Star 一下哦,谢谢您的关注。
94 |
95 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
14 |
15 |
100 |
--------------------------------------------------------------------------------
/src/components/Common/Navbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
32 |
33 |
85 |
--------------------------------------------------------------------------------
/src/components/Wap/CenterPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |

5 |
15 |
16 |
25 |
58 |
59 |
60 |
87 |
88 |
--------------------------------------------------------------------------------
/src/components/Common/Countdown.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{content}}
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/components/Freight/FreightPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 快递模板
6 |
7 |
8 |
9 | 偏远地区
10 | 添加快递模板
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | {{ scope.row.freight_type == 0 ? '按件' : '按重' }}
22 |
23 |
24 |
25 |
26 | 编辑
27 | 删除
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/src/components/Admin/AdminPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 管理员
6 |
7 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | 编辑
23 | 删除
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/src/components/Wap/Footerbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
21 |
22 |
23 |
24 |
57 |
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const defaultSettings = require('./src/settings.js')
4 |
5 | function resolve(dir) {
6 | return path.join(__dirname, dir)
7 | }
8 | const isProd = process.env.BUILD_FOR === 'production'
9 | const isTest = process.env.BUILD_FOR === 'test'
10 | const isOnline = isProd || isTest
11 | console.log(isProd, isTest, isOnline)
12 | process.env.VUE_APP_BUILD_FOR = isProd ? 'production' : isTest ? 'test' : 'local'
13 |
14 | const name = defaultSettings.title || '小猪猪后台管理' // page title
15 | const port = process.env.port || process.env.npm_config_port || 9528 // dev port
16 |
17 | module.exports = {
18 | publicPath: '/',
19 | outputDir: 'dist',
20 | assetsDir: 'static',
21 | // eslint-loader 是否在保存的时候检查
22 | lintOnSave: !isOnline,
23 | productionSourceMap: !isOnline,
24 | devServer: {
25 | port: port,
26 | open: true,
27 | overlay: {
28 | warnings: false,
29 | errors: true
30 | }
31 | },
32 | configureWebpack: {
33 | name: name,
34 | resolve: {
35 | alias: {
36 | '@': resolve('src'),
37 | static: resolve('src/static')
38 | }
39 | }
40 | },
41 | chainWebpack(config) {
42 | config.plugin('preload').tap(() => [
43 | {
44 | rel: 'preload',
45 | fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
46 | include: 'initial'
47 | }
48 | ])
49 |
50 | config.plugins.delete('prefetch')
51 |
52 | config.module.rule('svg').exclude.add(resolve('src/icons')).end()
53 | config.module
54 | .rule('icons')
55 | .test(/\.svg$/)
56 | .include.add(resolve('src/icons'))
57 | .end()
58 | .use('svg-sprite-loader')
59 | .loader('svg-sprite-loader')
60 | .options({
61 | symbolId: 'icon-[name]'
62 | })
63 | .end()
64 |
65 | config.when(process.env.NODE_ENV !== 'development', config => {
66 | config
67 | .plugin('ScriptExtHtmlWebpackPlugin')
68 | .after('html')
69 | .use('script-ext-html-webpack-plugin', [
70 | {
71 | inline: /runtime\..*\.js$/
72 | }
73 | ])
74 | .end()
75 | config.optimization.splitChunks({
76 | chunks: 'all',
77 | cacheGroups: {
78 | libs: {
79 | name: 'chunk-libs',
80 | test: /[\\/]node_modules[\\/]/,
81 | priority: 10,
82 | chunks: 'initial' // only package third parties that are initially dependent
83 | },
84 | elementUI: {
85 | name: 'chunk-elementUI', // split elementUI into a single package
86 | priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
87 | test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
88 | },
89 | commons: {
90 | name: 'chunk-commons',
91 | test: resolve('src/components'), // can customize your rules
92 | minChunks: 3, // minimum common number
93 | priority: 5,
94 | reuseExistingChunk: true
95 | }
96 | }
97 | })
98 | // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk
99 | config.optimization.runtimeChunk('single')
100 | })
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/src/element.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import {
3 | Pagination,
4 | Dialog,
5 | Autocomplete,
6 | Dropdown,
7 | DropdownMenu,
8 | DropdownItem,
9 | Menu,
10 | Submenu,
11 | MenuItem,
12 | MenuItemGroup,
13 | Input,
14 | InputNumber,
15 | Radio,
16 | RadioGroup,
17 | RadioButton,
18 | Checkbox,
19 | CheckboxButton,
20 | CheckboxGroup,
21 | Switch,
22 | Select,
23 | Option,
24 | OptionGroup,
25 | Button,
26 | ButtonGroup,
27 | Table,
28 | TableColumn,
29 | DatePicker,
30 | TimeSelect,
31 | TimePicker,
32 | Popover,
33 | Tooltip,
34 | Breadcrumb,
35 | BreadcrumbItem,
36 | Form,
37 | FormItem,
38 | Tabs,
39 | TabPane,
40 | Tag,
41 | Tree,
42 | Alert,
43 | Slider,
44 | Icon,
45 | Row,
46 | Col,
47 | Upload,
48 | Progress,
49 | Spinner,
50 | Badge,
51 | Card,
52 | Rate,
53 | Steps,
54 | Step,
55 | Carousel,
56 | CarouselItem,
57 | Collapse,
58 | CollapseItem,
59 | Cascader,
60 | ColorPicker,
61 | Transfer,
62 | Container,
63 | Header,
64 | Aside,
65 | Main,
66 | Footer,
67 | Timeline,
68 | TimelineItem,
69 | Link,
70 | Divider,
71 | Image,
72 | Calendar,
73 | Backtop,
74 | PageHeader,
75 | CascaderPanel,
76 | Loading,
77 | MessageBox,
78 | Message,
79 | Notification
80 | } from 'element-ui'
81 |
82 | Vue.use(Pagination)
83 | Vue.use(Dialog)
84 | Vue.use(Autocomplete)
85 | Vue.use(Dropdown)
86 | Vue.use(DropdownMenu)
87 | Vue.use(DropdownItem)
88 | Vue.use(Menu)
89 | Vue.use(Submenu)
90 | Vue.use(MenuItem)
91 | Vue.use(MenuItemGroup)
92 | Vue.use(Input)
93 | Vue.use(InputNumber)
94 | Vue.use(Radio)
95 | Vue.use(RadioGroup)
96 | Vue.use(RadioButton)
97 | Vue.use(Checkbox)
98 | Vue.use(CheckboxButton)
99 | Vue.use(CheckboxGroup)
100 | Vue.use(Switch)
101 | Vue.use(Select)
102 | Vue.use(Option)
103 | Vue.use(OptionGroup)
104 | Vue.use(Button)
105 | Vue.use(ButtonGroup)
106 | Vue.use(Table)
107 | Vue.use(TableColumn)
108 | Vue.use(DatePicker)
109 | Vue.use(TimeSelect)
110 | Vue.use(TimePicker)
111 | Vue.use(Popover)
112 | Vue.use(Tooltip)
113 | Vue.use(Breadcrumb)
114 | Vue.use(BreadcrumbItem)
115 | Vue.use(Form)
116 | Vue.use(FormItem)
117 | Vue.use(Tabs)
118 | Vue.use(TabPane)
119 | Vue.use(Tag)
120 | Vue.use(Tree)
121 | Vue.use(Alert)
122 | Vue.use(Slider)
123 | Vue.use(Icon)
124 | Vue.use(Row)
125 | Vue.use(Col)
126 | Vue.use(Upload)
127 | Vue.use(Progress)
128 | Vue.use(Spinner)
129 | Vue.use(Badge)
130 | Vue.use(Card)
131 | Vue.use(Rate)
132 | Vue.use(Steps)
133 | Vue.use(Step)
134 | Vue.use(Carousel)
135 | Vue.use(CarouselItem)
136 | Vue.use(Collapse)
137 | Vue.use(CollapseItem)
138 | Vue.use(Cascader)
139 | Vue.use(ColorPicker)
140 | Vue.use(Transfer)
141 | Vue.use(Container)
142 | Vue.use(Header)
143 | Vue.use(Aside)
144 | Vue.use(Main)
145 | Vue.use(Footer)
146 | Vue.use(Timeline)
147 | Vue.use(TimelineItem)
148 | Vue.use(Link)
149 | Vue.use(Divider)
150 | Vue.use(Image)
151 | Vue.use(Calendar)
152 | Vue.use(Backtop)
153 | Vue.use(PageHeader)
154 | Vue.use(CascaderPanel)
155 |
156 | Vue.use(Loading.directive)
157 |
158 | Vue.prototype.$loading = Loading.service
159 | Vue.prototype.$msgbox = MessageBox
160 | Vue.prototype.$alert = MessageBox.alert
161 | Vue.prototype.$confirm = MessageBox.confirm
162 | Vue.prototype.$prompt = MessageBox.prompt
163 | Vue.prototype.$notify = Notification
164 | Vue.prototype.$message = Message
165 |
--------------------------------------------------------------------------------
/src/components/GoodsGallery/GoodsGalleryEditPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 商品管理
7 | {{ infoForm.id ? '编辑商品标头图片' : '添加商品标头图片' }}
8 |
9 |
10 | 确定保存
11 |
12 | 返回列表
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
91 |
92 |
111 |
--------------------------------------------------------------------------------
/src/components/Keywords/KeywordsAddPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 数据管理
7 | {{infoForm.id ? '编辑热门搜索' : '添加热门搜索'}}
8 |
9 |
10 | 返回列表
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | 确定保存
28 | 取消
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
107 |
--------------------------------------------------------------------------------
/src/components/ShopCart/ShopCartPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 购物车列表
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | 查询
16 |
17 |
18 |
19 |
42 |
43 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
102 |
103 |
104 |
--------------------------------------------------------------------------------
/src/components/Shipper/ShipperAddPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 快递公司
7 | {{ infoForm.id ? '编辑快递公司' : '添加快递公司' }}
8 |
9 |
10 | 返回列表
11 |
12 |
13 |
40 |
41 |
42 |
43 |
118 |
--------------------------------------------------------------------------------
/src/components/Shipper/ShipperListPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 快递设置
6 | 快递列表
7 |
8 |
9 | 返回
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | 查询
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | 编辑
32 | 删除
33 |
34 |
35 |
36 |
37 |
38 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
121 |
122 |
123 |
--------------------------------------------------------------------------------
/src/components/Showset/ShowSetPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 显示设置
6 |
7 |
8 | 确定保存
9 |
10 |
11 |
58 |
59 |
60 |
61 |
118 |
131 |
--------------------------------------------------------------------------------
/src/components/Keywords/KeywordsPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 首页
6 | 数据管理
7 | 热门搜索
8 |
9 |
10 |
11 | 添加热门搜索
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | 查询
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | 编辑
37 | 删除
38 |
39 |
40 |
41 |
42 |
43 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/src/components/Freight/ExceptAreaPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 运费模板
6 | 偏远地区
7 |
8 |
9 | 添加偏远地区
10 | 返回
11 |
12 |
13 |
34 |
35 |
36 |
37 |
91 |
92 |
159 |
--------------------------------------------------------------------------------
/src/components/Common/Sidebar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |

5 |
6 |
83 |
84 |
85 |
86 |
120 |
178 |
--------------------------------------------------------------------------------
/src/components/Ad/AdPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 广告列表
6 |
7 |
8 |
9 | 添加广告
10 |
11 |
12 |
13 |
14 |
57 |
58 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
154 |
155 |
156 |
--------------------------------------------------------------------------------
/src/components/LoginPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |

6 |
7 |
8 |
猪猪小店
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | {{ loading ? '登录中...' : '登录' }}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
106 |
179 |
--------------------------------------------------------------------------------
/src/components/Wap/GoodsPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
41 |
42 |
43 |
44 |
129 |
194 |
--------------------------------------------------------------------------------
/src/components/Comment/ComPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 评论列表
6 |
7 |
8 |
9 | 添加评论
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | 查询
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
40 |
41 |
42 | {{ scope.row.enabled == 1 ? '启用' : '禁用' }}
43 |
44 |
45 |
46 |
47 |
53 |
54 |
55 |
56 |
57 |
58 | 编辑
59 | 删除
60 |
61 |
62 |
63 |
64 |
65 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
163 |
164 |
165 |
--------------------------------------------------------------------------------
/src/components/Settings/NoticePage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 公告管理
6 |
7 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | {{ scope.row.is_delete == 0 ? '启用中' : '已到期下线' }}
21 |
22 |
23 |
24 |
25 | 编辑
26 | 删除
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
55 |
56 |
57 |
58 |
59 |
182 |
183 |
184 |
--------------------------------------------------------------------------------
/src/components/User/UserPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 用户列表
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | 查询
24 |
25 |
26 |
27 |
62 |
63 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
169 |
170 |
171 |
--------------------------------------------------------------------------------
/src/components/Category/CategoryPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 商品设置
6 | 商品分类
7 |
8 |
9 |
10 | 添加分类
11 |
12 |
13 |
14 |
77 |
78 |
79 |
80 |
176 |
177 |
192 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | Vue.use(Router)
4 | export default new Router({
5 | scrollBehavior: () => ({ y: 0 }),
6 | routes: [
7 | {
8 | path: '/dashboard',
9 | name: 'dashboard',
10 | redirect: '/dashboard/welcome',
11 | component: () => import('@/components/DashboardPage'),
12 | children: [
13 | {
14 | path: 'welcome',
15 | name: 'welcome',
16 | component: () => import('@/components/WelcomePage')
17 | },
18 | {
19 | path: 'goods',
20 | name: 'goods',
21 | component: () => import('@/components/Goods/GoodsPage')
22 | },
23 | {
24 | path: 'goods/add',
25 | name: 'goods_add',
26 | component: () => import('@/components/Goods/GoodsAddPage')
27 | },
28 | {
29 | path: 'nature',
30 | name: 'nature',
31 | component: () => import('@/components/Nature/NaturePage')
32 | },
33 | {
34 | path: 'specification/detail',
35 | name: 'specification_detail',
36 | component: () => import('@/components/Specification/SpecificationAddPage')
37 | },
38 | {
39 | path: 'category',
40 | name: 'category',
41 | component: () => import('@/components/Category/CategoryPage')
42 | },
43 | {
44 | path: 'category/add',
45 | name: 'category_add',
46 | component: () => import('@/components/Category/CategoryAddPage')
47 | },
48 | {
49 | path: 'order',
50 | name: 'order',
51 | component: () => import('@/components/Order/OrderPage')
52 | },
53 | {
54 | path: 'order/detail',
55 | name: 'order_detail',
56 | component: () => import('@/components/Order/OrderDetailPage')
57 | },
58 | {
59 | path: 'user',
60 | name: 'user',
61 | component: () => import('@/components/User/UserPage')
62 | },
63 | {
64 | path: 'user/add',
65 | name: 'user_add',
66 | component: () => import('@/components/User/UserAddPage')
67 | },
68 | {
69 | path: 'shipper',
70 | name: 'shipper',
71 | component: () => import('@/components/Shipper/ShipperPage')
72 | },
73 | {
74 | path: 'shipper/list',
75 | name: 'shipper_list',
76 | component: () => import('@/components/Shipper/ShipperListPage')
77 | },
78 | {
79 | path: 'shipper/add',
80 | name: 'shipper_add',
81 | component: () => import('@/components/Shipper/ShipperAddPage')
82 | },
83 | {
84 | path: 'freight',
85 | name: 'freight',
86 | component: () => import('@/components/Freight/FreightPage')
87 | },
88 | {
89 | path: 'except_area',
90 | name: 'except_area',
91 | component: () => import('@/components/Freight/ExceptAreaPage')
92 | },
93 | {
94 | path: 'except_area/add',
95 | name: 'except_area_add',
96 | component: () => import('@/components/Freight/ExceptAreaAddPage')
97 | },
98 | {
99 | path: 'freight/add',
100 | name: 'freight_add',
101 | component: () => import('@/components/Freight/FreightAddPage')
102 | },
103 | {
104 | path: 'notice',
105 | name: 'notice',
106 | component: () => import('@/components/Settings/NoticePage')
107 | },
108 | {
109 | path: 'ad',
110 | name: 'ad',
111 | component: () => import('@/components/Ad/AdPage')
112 | },
113 | {
114 | path: 'ad/add',
115 | name: 'ad_add',
116 | component: () => import('@/components/Ad/AdAddPage')
117 | },
118 | {
119 | path: 'comment',
120 | name: 'comment',
121 | component: () => import('@/components/Comment/ComPage')
122 | },
123 | {
124 | path: 'comment/add',
125 | name: 'comment_add',
126 | component: () => import('@/components/Comment/ComAddPage')
127 | },
128 | {
129 | path: 'shopcart',
130 | name: 'shopcart',
131 | component: () => import('@/components/ShopCart/ShopCartPage')
132 | },
133 | {
134 | path: 'keywords',
135 | name: 'keywords',
136 | component: () => import('@/components/Keywords/KeywordsPage')
137 | },
138 | {
139 | path: 'keywords/add',
140 | name: 'keywords_add',
141 | component: () => import('@/components/Keywords/KeywordsAddPage')
142 | },
143 | {
144 | path: 'goodsgalleryedit',
145 | name: 'goodsgalleryedit',
146 | component: () => import('@/components/GoodsGallery/GoodsGalleryEditPage')
147 | },
148 | {
149 | path: 'admin',
150 | name: 'admin',
151 | component: () => import('@/components/Admin/AdminPage')
152 | },
153 | {
154 | path: 'admin/add',
155 | name: 'admin_add',
156 | component: () => import('@/components/Admin/AdminAddPage')
157 | },
158 | {
159 | path: 'settings/showset',
160 | name: 'showset',
161 | component: () => import('@/components/Showset/ShowSetPage')
162 | }
163 | ]
164 | },
165 | {
166 | path: '/wap',
167 | name: 'wap',
168 | component: () => import('@/components/WapPage'),
169 | children: [
170 | {
171 | path: '/',
172 | name: 'goods',
173 | component: () => import('@/components/Wap/GoodsPage')
174 | },
175 | {
176 | path: 'order',
177 | name: 'order',
178 | component: () => import('@/components/Wap/OrderPage')
179 | }
180 | ]
181 | },
182 | {
183 | path: '/login',
184 | name: 'login',
185 | component: () => import('@/components/LoginPage')
186 | },
187 | {
188 | path: '*',
189 | redirect: '/dashboard'
190 | }
191 | ]
192 | })
193 |
--------------------------------------------------------------------------------
/src/components/Shipper/ShipperPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 快递设置
6 |
7 |
8 |
9 | 快递公司列表
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 | 确定保存
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | 编辑
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
160 |
166 |
--------------------------------------------------------------------------------
/src/components/Specification/SpecificationAddPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 商品设置
6 | {{infoForm.id ? '编辑型号' : '添加型号'}}
7 |
8 |
9 | 返回列表
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | 确定保存
23 | 确定添加
24 | 删除
25 | 取消
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
157 |
158 |
191 |
--------------------------------------------------------------------------------
/src/components/Comment/ComAddPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 评论列表
6 | {{ infoForm.id ? '编辑评论' : '添加评论' }}
7 |
8 |
9 |
10 | 返回列表
11 |
12 |
13 |
80 |
81 |
82 |
83 |
195 |
196 |
228 |
--------------------------------------------------------------------------------
/src/components/Nature/NaturePage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 商品设置
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
93 |
94 |
95 |
96 |
232 |
233 |
263 |
--------------------------------------------------------------------------------
/src/components/Admin/AdminAddPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 管理员
6 | {{infoForm.id ? '编辑管理员' : '添加管理员'}}
7 |
8 |
9 | 返回列表
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | 确定保存
33 | 确定添加
34 | 取消
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
176 |
177 |
232 |
--------------------------------------------------------------------------------
/src/components/Category/CategoryAddPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 商品设置
6 | {{ infoForm.id ? '编辑分类' : '添加分类' }}
7 |
8 |
9 | 返回列表
10 |
11 |
12 |
76 |
77 |
78 |
79 |
237 |
238 |
270 |
--------------------------------------------------------------------------------
/src/components/Freight/ExceptAreaAddPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 运费模板
6 | {{ infoForm.id ? '编辑偏远地区' : '添加偏远地区' }}
7 |
8 |
9 | 返回列表
10 |
11 |
12 |
42 |
43 |
44 |
45 |
51 |
52 |
53 |
58 |
59 |
60 |
61 |
62 |
238 |
239 |
306 |
--------------------------------------------------------------------------------
/src/components/Ad/AdAddPage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 广告列表
6 | {{ infoForm.id ? '编辑广告' : '添加广告' }}
7 |
8 |
9 |
10 | 返回列表
11 |
12 |
13 |
80 |
81 |
82 |
83 |
252 |
253 |
269 |
--------------------------------------------------------------------------------
/src/components/WelcomePage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 后台主页
6 |
7 |
8 |
9 |
12 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
顾客
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | {{ scope.row.gender == 2 ? '女' : '男' }}
58 |
59 |
60 |
61 |
62 |
63 | 查看
66 |
67 |
68 |
69 | 新增
70 |
{{ mainInfo.newUser }}
71 |
72 |
73 | 老顾客
74 |
{{ mainInfo.oldUser }}
75 |
76 |
77 |
78 |
79 | 下单
80 |
81 |
82 | 加入购物车
83 |
{{ mainInfo.addCart }}
84 |
85 |
86 | 提交订单数/金额
87 |
{{ mainInfo.addOrderNum }} / {{ mainInfo.addOrderSum }}
88 |
89 |
90 |
91 |
92 | 支付
93 |
94 |
95 | 成交订单数
96 |
{{ mainInfo.payOrderNum }}
97 |
98 |
99 | 成交金额
100 |
{{ mainInfo.payOrderSum }}
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
客单价
109 |
110 | {{ (mainInfo.payOrderSum / mainInfo.payOrderNum) | numFilter }}
111 |
112 |
113 | 成交金额/成交订单数
114 |
115 |
116 |
117 |
下单转化率
118 |
119 | {{ (mainInfo.addOrderNum / (mainInfo.newUser + mainInfo.oldUser)) | numFilter }}
120 |
121 |
122 | 下单人数/访问人数
123 |
124 |
125 |
126 |
下单-支付转化率
127 |
128 | {{ (mainInfo.payOrderNum / mainInfo.addOrderNum) | numFilter }}
129 |
130 |
131 | 支付人数/下单人数
132 |
133 |
134 |
135 |
支付转化率
136 |
137 | {{ (mainInfo.payOrderNum / (mainInfo.newUser + mainInfo.oldUser)) | numFilter }}
138 |
139 |
140 | 支付人数/访问人数
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
234 |
235 |
381 |
--------------------------------------------------------------------------------