yuantianjiao 6 年前
父节点
当前提交
873e77325d

+ 13
- 3
package.json 查看文件

@@ -8,16 +8,24 @@
8 8
     "lint": "vue-cli-service lint"
9 9
   },
10 10
   "dependencies": {
11
-    "vue": "^2.5.17"
11
+    "iview": "^3.1.4",
12
+    "less": "^3.8.1",
13
+    "less-loader": "^4.1.0",
14
+    "vue": "^2.5.17",
15
+    "vue-router": "^3.0.1"
12 16
   },
13 17
   "devDependencies": {
14 18
     "@vue/cli-plugin-babel": "^3.0.1",
15 19
     "@vue/cli-plugin-eslint": "^3.0.1",
16 20
     "@vue/cli-service": "^3.0.1",
21
+    "axios": "^0.18.0",
17 22
     "babel-eslint": "^10.0.1",
18 23
     "eslint": "^5.8.0",
19 24
     "eslint-plugin-vue": "^5.0.0-0",
20
-    "vue-template-compiler": "^2.5.17"
25
+    "node-sass": "^4.10.0",
26
+    "sass-loader": "^7.1.0",
27
+    "vue-template-compiler": "^2.5.17",
28
+    "vuex": "^3.0.1"
21 29
   },
22 30
   "eslintConfig": {
23 31
     "root": true,
@@ -28,7 +36,9 @@
28 36
       "plugin:vue/essential",
29 37
       "eslint:recommended"
30 38
     ],
31
-    "rules": {},
39
+    "rules": {
40
+      "no-console": "off"
41
+    },
32 42
     "parserOptions": {
33 43
       "parser": "babel-eslint"
34 44
     }

+ 1
- 0
public/index.html 查看文件

@@ -5,6 +5,7 @@
5 5
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 6
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
7 7
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
8
+    <link rel="stylesheet" href="//at.alicdn.com/t/font_681879_s3guz2sk9xc.css">
8 9
     <title>menu</title>
9 10
   </head>
10 11
   <body>

+ 6
- 12
src/App.vue 查看文件

@@ -1,28 +1,22 @@
1 1
 <template>
2 2
   <div id="app">
3
-    <img alt="Vue logo" src="./assets/logo.png">
4
-    <HelloWorld msg="Welcome to Your Vue.js App"/>
3
+    <router-view/>
5 4
   </div>
6 5
 </template>
7 6
 
8 7
 <script>
9
-import HelloWorld from './components/HelloWorld.vue'
10
-
8
+import './assets/main.css'
11 9
 export default {
12
-  name: 'app',
13
-  components: {
14
-    HelloWorld
15
-  }
10
+  name: 'app'
16 11
 }
17 12
 </script>
18 13
 
19
-<style>
14
+<style lang="less" scoped>
20 15
 #app {
21 16
   font-family: 'Avenir', Helvetica, Arial, sans-serif;
22 17
   -webkit-font-smoothing: antialiased;
23 18
   -moz-osx-font-smoothing: grayscale;
24
-  text-align: center;
25
-  color: #2c3e50;
26
-  margin-top: 60px;
19
+  width: 100%;
20
+  height: 100%;
27 21
 }
28 22
 </style>

二进制
src/assets/login.jpg 查看文件


二进制
src/assets/logo.png 查看文件


+ 73
- 0
src/assets/main.css 查看文件

@@ -0,0 +1,73 @@
1
+@charset "utf-8";
2
+html,
3
+body {
4
+  width: 100%;
5
+  height: 100%;
6
+  -webkit-text-size-adjust: 100%;
7
+  position: relative;
8
+  color: #000;
9
+  overflow-x: hidden;
10
+  font-size: 13px;
11
+  background: #fff;
12
+}
13
+* {
14
+  margin: 0;
15
+  padding: 0;
16
+  color: #000;
17
+  font-family: '微软雅黑';
18
+  -webkit-tap-highlight-color: rgba(255, 0, 0, 0);
19
+  -webkit-font-smoothing: antialiased;
20
+}
21
+body * {
22
+  font-size: 13px;
23
+}
24
+a {
25
+  text-decoration: none;
26
+}
27
+a:hover {
28
+  cursor: pointer;
29
+}
30
+em {
31
+  font-style: normal;
32
+}
33
+li {
34
+  list-style: none;
35
+}
36
+img {
37
+  border: 0;
38
+  vertical-align: middle;
39
+}
40
+table {
41
+  border-collapse: collapse;
42
+  border-spacing: 0;
43
+}
44
+p {
45
+  word-wrap: break-word;
46
+}
47
+b {
48
+  font-weight: normal;
49
+}
50
+input,
51
+textarea {
52
+  border: 0;
53
+  -webkit-appearance: none;
54
+}
55
+input[type='input'] {
56
+  -webkit-appearance: none;
57
+}
58
+input[type='checkbox'] {
59
+  -webkit-appearance: checkbox;
60
+}
61
+.text-overflow-ellipsis {
62
+  overflow: hidden;
63
+  white-space: nowrap;
64
+  text-overflow: ellipsis;
65
+}
66
+.centerLabel {
67
+  display: block;
68
+  position: absolute;
69
+  left: 50%;
70
+  top: 50%;
71
+  transform: translate(-50%, -50%);
72
+  -webkit-transform: translate(-50%, -50%);
73
+}

+ 0
- 58
src/components/HelloWorld.vue 查看文件

@@ -1,58 +0,0 @@
1
-<template>
2
-  <div class="hello">
3
-    <h1>{{ msg }}</h1>
4
-    <p>
5
-      For guide and recipes on how to configure / customize this project,<br>
6
-      check out the
7
-      <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
8
-    </p>
9
-    <h3>Installed CLI Plugins</h3>
10
-    <ul>
11
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
12
-      <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
13
-    </ul>
14
-    <h3>Essential Links</h3>
15
-    <ul>
16
-      <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
17
-      <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
18
-      <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
19
-      <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
20
-      <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
21
-    </ul>
22
-    <h3>Ecosystem</h3>
23
-    <ul>
24
-      <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
25
-      <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
26
-      <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
27
-      <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
28
-      <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
29
-    </ul>
30
-  </div>
31
-</template>
32
-
33
-<script>
34
-export default {
35
-  name: 'HelloWorld',
36
-  props: {
37
-    msg: String
38
-  }
39
-}
40
-</script>
41
-
42
-<!-- Add "scoped" attribute to limit CSS to this component only -->
43
-<style scoped>
44
-h3 {
45
-  margin: 40px 0 0;
46
-}
47
-ul {
48
-  list-style-type: none;
49
-  padding: 0;
50
-}
51
-li {
52
-  display: inline-block;
53
-  margin: 0 10px;
54
-}
55
-a {
56
-  color: #42b983;
57
-}
58
-</style>

+ 12
- 5
src/main.js 查看文件

@@ -1,8 +1,15 @@
1
-import Vue from 'vue'
2
-import App from './App.vue'
1
+import Vue from 'vue';
2
+import App from './App';
3
+import router from './router';
4
+import iView from 'iview';
5
+import store from './store';
6
+import 'iview/dist/styles/iview.css';
3 7
 
4
-Vue.config.productionTip = false
8
+Vue.use(iView);
5 9
 
6 10
 new Vue({
7
-  render: h => h(App),
8
-}).$mount('#app')
11
+    el: '#app',
12
+    router,
13
+    store,
14
+    render: h => h(App)
15
+});

+ 3
- 0
src/pages/index/index.vue 查看文件

@@ -0,0 +1,3 @@
1
+<template>
2
+  <div>aaaaa</div>
3
+</template>

+ 56
- 0
src/pages/login/login.vue 查看文件

@@ -0,0 +1,56 @@
1
+<template>
2
+  <div class="bg-img">
3
+    <img :src="bg" alt="">
4
+    <div class="login-box">
5
+      <div class="title">微信信息管理平台</div>
6
+      <div class="user">
7
+        <i class="iconfont icon-yonghu1"></i>
8
+        <input type="text" >
9
+      </div>
10
+      <div class="password"></div>
11
+      <div>记住用户名和密码</div>
12
+      <div class="submit">登陆</div>
13
+    </div>
14
+  </div>
15
+</template>
16
+
17
+<script>
18
+import bg from '@/assets/login.jpg'
19
+export default {
20
+  data () {
21
+    return {
22
+      bg
23
+    }
24
+  },
25
+  created () {
26
+    // this.$Message.info('This is a info tip')
27
+  }
28
+}
29
+</script>
30
+
31
+<style lang="scss" scoped>
32
+.bg-img {
33
+  width: 100%;
34
+  height: 100%;
35
+  position: relative;
36
+  img {
37
+    width: 100%;
38
+    height: 100%;
39
+    object-fit: cover;
40
+  }
41
+  .login-box {
42
+    position: absolute;
43
+    top: 50%;
44
+    left: 50%;
45
+    transform: translate(-50%, -50%);
46
+    width: 450px;
47
+    height: 300px;
48
+    .title{
49
+      font-size: 24px;
50
+      color: white;
51
+      letter-spacing: 4px;
52
+      text-align: center;
53
+    }
54
+  }
55
+}
56
+</style>

+ 11
- 0
src/pages/staticRouter.js 查看文件

@@ -0,0 +1,11 @@
1
+import index from '@/pages/index/index.vue'
2
+
3
+export default {
4
+  router: [
5
+    {
6
+      path: '/index',
7
+      name: 'index',
8
+      component: index
9
+    }
10
+  ],
11
+}

+ 42
- 0
src/router/index.js 查看文件

@@ -0,0 +1,42 @@
1
+
2
+import Vue from 'vue'
3
+import Router from 'vue-router'
4
+import routerData from './router'
5
+// import store from './../store/index'
6
+
7
+Vue.use(Router)
8
+
9
+const flatten = (parent, data) => {
10
+  return data.reduce((acc, { path, name, component, MenuName, children }) => {
11
+    const pth = [parent, path].join('/').replace('//', '/')
12
+    const item = { path: pth, name, component, MenuName, children: [] }
13
+    // console.log('children:', children)
14
+    if (children && children.length) {
15
+      return acc.concat(item, flatten(pth, children))
16
+    }
17
+
18
+    return acc.concat(item)
19
+  }, [])
20
+}
21
+
22
+// route 数据, 展平二级路由
23
+const routes = routerData.reduce((acc, r) => {
24
+  const { children, ...rest } = r
25
+  if (children && children.length) {
26
+    return acc.concat({ ...rest, children: flatten('', children) })
27
+  }
28
+
29
+  return acc.concat(r)
30
+}, [])
31
+
32
+const router = new Router({
33
+  routes,
34
+  linkActiveClass: 'active',
35
+})
36
+
37
+router.beforeEach((to, from, next) => {
38
+  // store.commit('updateBread', { routerData, Url: to.name })
39
+  next()
40
+})
41
+
42
+export default router

+ 12
- 0
src/router/router.js 查看文件

@@ -0,0 +1,12 @@
1
+import login from '@/pages/login/login.vue'
2
+import staticRouter from '@/pages/staticRouter.js'
3
+
4
+const routerArr = [
5
+  {
6
+    path: '/',
7
+    name: 'login',
8
+    component: login
9
+  },
10
+  ...staticRouter.router
11
+]
12
+export default routerArr

+ 25
- 0
src/store/index.js 查看文件

@@ -0,0 +1,25 @@
1
+import Vue from 'vue'
2
+import Vuex from 'vuex'
3
+import Ajax from '../util/ajax'
4
+import api from '../util/api'
5
+
6
+Vue.use(Vuex)
7
+
8
+const store = new Vuex.Store({
9
+  state: {
10
+    loadding: false,
11
+    pageSize: 10,
12
+  }
13
+})
14
+Vuex.Store.prototype.$api = api
15
+Vuex.Store.prototype.$ajax = Ajax
16
+export const modules = {
17
+}
18
+
19
+Object.keys(modules).forEach((modKey) => {
20
+  const modNS = modKey.split('/')
21
+  const getMod = modules[modKey]
22
+  store.registerModule(...modNS, getMod())
23
+})
24
+
25
+export default store

+ 160
- 0
src/util/LodopFuncs.js 查看文件

@@ -0,0 +1,160 @@
1
+/* eslint-disable */
2
+var CreatedOKLodop7766 = null, CLodopIsLocal
3
+
4
+// ====判断是否需要 Web打印服务CLodop:===
5
+// ===(不支持插件的浏览器版本需要用它)===
6
+export function needCLodop () {
7
+    try {
8
+        let ua = navigator.userAgent
9
+        if (ua.match(/Windows\sPhone/i)) {
10
+            return true
11
+        }
12
+        if (ua.match(/iPhone|iPod/i)) {
13
+            return true
14
+        }
15
+        if (ua.match(/Android/i)) {
16
+            return true
17
+
18
+        }
19
+        if (ua.match(/Edge\D?\d+/i)) {
20
+            return true
21
+        }
22
+
23
+        let verTrident = ua.match(/Trident\D?\d+/i)
24
+        let verIE = ua.match(/MSIE\D?\d+/i)
25
+        let verOPR = ua.match(/OPR\D?\d+/i)
26
+        let verFF = ua.match(/Firefox\D?\d+/i)
27
+        let x64 = ua.match(/x64/i)
28
+        if ((!verTrident) && (!verIE) && (x64)) {
29
+            return true
30
+        }
31
+        else if (verFF) {
32
+            verFF = verFF[0].match(/\d+/)
33
+            if ((verFF[0] >= 41) || (x64)) {
34
+                return true
35
+            }
36
+        } else if (verOPR) {
37
+            verOPR = verOPR[0].match(/\d+/)
38
+            if (verOPR[0] >= 32) {
39
+                return true
40
+            }
41
+
42
+        } else if ((!verTrident) && (!verIE)) {
43
+            let verChrome = ua.match(/Chrome\D?\d+/i)
44
+            if (verChrome) {
45
+                verChrome = verChrome[0].match(/\d+/)
46
+                if (verChrome[0] >= 41) {
47
+                    return true
48
+                }
49
+            }
50
+        }
51
+        return false
52
+    } catch (err) {
53
+        return true
54
+    }
55
+}
56
+
57
+// ====页面引用CLodop云打印必须的JS文件,用双端口(8000和18000)避免其中某个被占用:====
58
+if (needCLodop()) {
59
+    let src1 = 'http://localhost:8000/CLodopfuncs.js?priority=1'
60
+    let src2 = 'http://localhost:18000/CLodopfuncs.js?priority=0'
61
+    let head = document.head || document.getElementsByTagName('head')[0] || document.documentElement
62
+    let oscript = document.createElement('script')
63
+    oscript.src = src1
64
+    head.insertBefore(oscript, head.firstChild)
65
+    oscript = document.createElement('script')
66
+    oscript.src = src2
67
+    head.insertBefore(oscript, head.firstChild)
68
+    CLodopIsLocal = !!((src1 + src2).match(/\/\/localho|\/\/127.0.0./i))
69
+}
70
+
71
+// ====获取LODOP对象的主过程:====
72
+export function getLodop (oOBJECT, oEMBED) {
73
+    let strHtmInstall = `<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='install_lodop32.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>`
74
+    let strHtmUpdate = `<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='install_lodop32.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>`
75
+    let strHtm64_Install = `<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='install_lodop64.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>`
76
+    let strHtm64_Update = `<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='install_lodop64.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>`
77
+    let strHtmFireFox = `<br><br><font color='#FF00FF'>(注意:如曾安装过Lodop旧版附件npActiveXPLugin,请在【工具】->【附加组件】->【扩展】中先卸它)</font>`
78
+    let strHtmChrome = `<br><br><font color='#FF00FF'>(如果此前正常,仅因浏览器升级或重安装而出问题,需重新执行以上安装)</font>`
79
+    let strCLodopInstall_1 = `<br><font color='#FF00FF'>Web打印服务CLodop未安装启动,点击这里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>下载执行安装</a>`
80
+    let strCLodopInstall_2 = `<br>(若此前已安装过,可<a href='CLodop.protocol:setup' target='_self'>点这里直接再次启动</a>)`
81
+    let strCLodopInstall_3 = `,成功后请刷新本页面。</font>`
82
+    // let strCLodopUpdate = `<br><font color='#FF00FF'>Web打印服务CLodop需升级!点击这里<a href='CLodop_Setup_for_Win32NT.exe' target='_self'>执行升级</a>,升级后请刷新页面。</font>`
83
+    let LODOP
84
+    try {
85
+        let ua = navigator.userAgent
86
+        let isIE = !!(ua.match(/MSIE/i)) || !!(ua.match(/Trident/i))
87
+        if (needCLodop()) {
88
+            try {
89
+                LODOP = getCLodop()
90
+            } catch (err) { }
91
+            if (!LODOP && document.readyState !== 'complete') {
92
+                console.log(LODOP)
93
+                alert('网页还没下载完毕,请稍等一下再操作.')
94
+                return
95
+            }
96
+            if (!LODOP) {
97
+                document.body.innerHTML = strCLodopInstall_1 + (CLodopIsLocal ? strCLodopInstall_2 : '') + strCLodopInstall_3 + document.body.innerHTML
98
+                return
99
+            } else {
100
+                // if (CLODOP.CVERSION < '3.0.4.8') {
101
+                //     document.body.innerHTML = strCLodopUpdate + document.body.innerHTML
102
+                // }
103
+                if (oEMBED && oEMBED.parentNode) {
104
+                    oEMBED.parentNode.removeChild(oEMBED)
105
+                }
106
+
107
+                if (oOBJECT && oOBJECT.parentNode) {
108
+                    oOBJECT.parentNode.removeChild(oOBJECT)
109
+                }
110
+            }
111
+        } else {
112
+            let is64IE = isIE && !!(ua.match(/x64/i))
113
+            // =====如果页面有Lodop就直接使用,没有则新建:==========
114
+            if (oOBJECT || oEMBED) {
115
+                if (isIE) {
116
+                    LODOP = oOBJECT
117
+                } else {
118
+                    LODOP = oEMBED
119
+                }
120
+            } else if (!CreatedOKLodop7766) {
121
+                LODOP = document.createElement('object')
122
+                LODOP.setAttribute('width', 0)
123
+                LODOP.setAttribute('height', 0)
124
+                LODOP.setAttribute('style', 'position:absoluteleft:0pxtop:-100pxwidth:0pxheight:0px')
125
+                if (isIE) {
126
+                    LODOP.setAttribute('classid', 'clsid:2105C259-1E0C-4534-8141-A753534CB4CA')
127
+                } else {
128
+                    LODOP.setAttribute('type', 'application/x-print-lodop')
129
+                }
130
+                document.documentElement.appendChild(LODOP)
131
+                CreatedOKLodop7766 = LODOP
132
+            } else {
133
+                LODOP = CreatedOKLodop7766
134
+            }
135
+            // =====Lodop插件未安装时提示下载地址:==========
136
+            if ((!LODOP) || (!LODOP.VERSION)) {
137
+                if (ua.indexOf('Chrome') >= 0) {
138
+                    document.body.innerHTML = strHtmChrome + document.body.innerHTML
139
+                }
140
+                if (ua.indexOf('Firefox') >= 0) {
141
+                    document.body.innerHTML = strHtmFireFox + document.body.innerHTML
142
+                }
143
+                document.body.innerHTML = (is64IE ? strHtm64_Install : strHtmInstall) + document.body.innerHTML
144
+                return LODOP
145
+            }
146
+        }
147
+        if (LODOP.VERSION < '6.2.2.3') {
148
+            if (!needCLodop()) {
149
+                document.body.innerHTML = (is64IE ? strHtm64_Update : strHtmUpdate) + document.body.innerHTML
150
+            }
151
+            return LODOP
152
+        }
153
+        // ===如下空白位置适合调用统一功能(如注册语句、语言选择等):===
154
+
155
+        // =======================================================
156
+        return LODOP
157
+    } catch (err) {
158
+        alert('getLodop出错:' + err)
159
+    }
160
+}

+ 82
- 0
src/util/ajax.js 查看文件

@@ -0,0 +1,82 @@
1
+import axios from 'axios'
2
+import qs from 'qs'
3
+import router from '../router'
4
+import { Message } from 'iview'
5
+
6
+// const token = function (headers) { // token注释
7
+//   let JWT
8
+//   if (headers) {
9
+//     localStorage.setItem('JWT', headers.authorization)
10
+//     JWT = headers.authorization
11
+//   }
12
+//   return JWT ? JWT : localStorage.getItem('JWT') // eslint-disable-line
13
+// }
14
+
15
+const Axios = axios.create({
16
+  timeout: 60000,
17
+  responseType: 'json',
18
+  withCredentials: true,
19
+  queryData: {},
20
+  urlData: {},
21
+  headers: {
22
+    'Content-Type': 'multipart/form-data',
23
+    // 'authorization': token() // token注释
24
+  }
25
+})
26
+
27
+Axios.interceptors.request.use((config) => {
28
+  // config.headers.authorization = token()  // token注释
29
+  let urlData = qs.stringify(config.urlData)
30
+  let queryData = qs.stringify(config.queryData)
31
+  if (config.url.indexOf(':') > -1) {
32
+    if (typeof config.urlData === 'object') {
33
+      config.url = replaceURLParams(config.url, config.urlData)
34
+    } else {
35
+      config.url = config.url.slice(0, config.url.indexOf(':')) + urlData
36
+    }
37
+  }
38
+  if (queryData) {
39
+    config.url += '?' + queryData
40
+  }
41
+  let fm = new FormData()
42
+  for (let k in config.data) {
43
+    if (Array.isArray(config.data[k])) {
44
+      config.data[k].forEach((v) => {
45
+        fm.append(k, v)
46
+      })
47
+    } else {
48
+      fm.append(k, config.data[k])
49
+    }
50
+  }
51
+  config.data = fm
52
+  return config
53
+})
54
+
55
+const ajax = (...args) => {
56
+  return new Promise((resolve, reject) => {
57
+    Axios(...args).then(({ data }) => {
58
+      // if (headers.authorization) { // token注释
59
+      //   token(headers)
60
+      // }
61
+      const { code, message, result } = data
62
+      if (code === 200) {
63
+        resolve(result)
64
+      } else if (code === 401) {
65
+        router.push({ name: 'login' })
66
+      } else {
67
+        Message.error(message)
68
+        reject(data)
69
+      }
70
+    }).catch(reject)
71
+  })
72
+}
73
+
74
+export default ajax
75
+
76
+export function replaceURLParams (url, params) {
77
+  const args = { ...(params || {}), org: 'MQ' }
78
+  return Object.keys(args).reduce((acc, k) => { // 此方法对每个元素进行处理
79
+    const re = new RegExp(`:${k}(?!w)`, 'i')
80
+    return acc.replace(re, args[k])
81
+  }, url)
82
+}

+ 8
- 0
src/util/api.js 查看文件

@@ -0,0 +1,8 @@
1
+// const baseUrl = '/api'
2
+// const common = '/common/:org'
3
+// const guest = '/guest/:org'
4
+
5
+const $api = {
6
+  
7
+}
8
+export default $api

+ 13
- 0
src/util/upload.js 查看文件

@@ -0,0 +1,13 @@
1
+import api from './api'
2
+import ajax from './ajax'
3
+
4
+export default function upload (file) {
5
+  return new Promise((resolve, reject) => {
6
+    ajax({
7
+      ...api.file.image,
8
+      data: { file: file },
9
+    }).then(({ url }) => {
10
+      resolve(url)
11
+    }).catch(reject)
12
+  })
13
+}

+ 88
- 0
src/util/util.js 查看文件

@@ -0,0 +1,88 @@
1
+import Ajax from './ajax'
2
+import api from './api'
3
+// import { Message } from 'element-ui'
4
+// import store from '../store'
5
+const toolClass = {
6
+  dateFormat: (timestamp, fmt) => {
7
+    if (!fmt) {
8
+      fmt = 'yyyy-MM-dd hh:mm'
9
+    }
10
+
11
+    let date = new Date(timestamp)
12
+    var o = {
13
+      'M+': date.getMonth() + 1,
14
+      'd+': date.getDate(),
15
+      'h+': date.getHours(),
16
+      'm+': date.getMinutes(),
17
+      's+': date.getSeconds(),
18
+      'q+': Math.floor((date.getMonth() + 3) / 3),
19
+      'S': date.getMilliseconds()
20
+    }
21
+    if (/(y+)/.test(fmt)) {
22
+      fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
23
+    }
24
+    for (var k in o) {
25
+      if (new RegExp('(' + k + ')').test(fmt)) {
26
+        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
27
+      }
28
+    }
29
+    return fmt
30
+  },
31
+  ReplaceOrg (url) {
32
+    return url.replace(':org', 'MQ')
33
+  },
34
+  upload (item) {
35
+    return new Promise((resolve, reject) => {
36
+      Ajax({
37
+        ...api.file.image,
38
+        data: { file: item.file },
39
+      }).then((res) => {
40
+        let result = {
41
+          result: res
42
+        }
43
+        item.onSuccess(result, item.file)
44
+        console.log(result)
45
+        resolve(result)
46
+      }).catch(reject)
47
+    })
48
+  },
49
+  beforeUpload (file) {
50
+    return true
51
+    // return new Promise((resolve, reject) => {
52
+    //   let w = store.state.app.picSize.w
53
+    //   let h = store.state.app.picSize.h
54
+    //   if ('image'.indexOf(file.type) > -1) {
55
+    //     Message({
56
+    //       type: 'error',
57
+    //       message: `请上传${w}像素*${h}像素尺寸的图片`
58
+    //     })
59
+    //     reject(new Error('error'))
60
+    //   }
61
+    //   var reader = new FileReader()
62
+    //   reader.onload = function (e) {
63
+    //     var data = e.target.result
64
+    //     // 加载图片获取图片真实宽度和高度
65
+    //     var image = new Image()
66
+    //     image.onload = function () {
67
+    //       var width = image.width
68
+    //       var height = image.height
69
+    //       console.log(width)
70
+    //       console.log(height)
71
+    //       if (width === w && height === h) {
72
+    //         resolve()
73
+    //       } else {
74
+    //         Message({
75
+    //           type: 'error',
76
+    //           message: `请上传${w}像素*${h}像素尺寸的图片`
77
+    //         })
78
+    //         reject(new Error('error'))
79
+    //       }
80
+    //     }
81
+    //     image.src = data
82
+    //   }
83
+    //   reader.readAsDataURL(file)
84
+    // })
85
+  }
86
+}
87
+
88
+export default toolClass

+ 23
- 0
vue.config.js 查看文件

@@ -0,0 +1,23 @@
1
+module.exports = {
2
+  baseUrl: './',
3
+  // 生产环境是否生成 sourceMap 文件
4
+  productionSourceMap: true,
5
+  chainWebpack: config => config.plugins.delete('named-chunks'),
6
+  devServer: {
7
+    proxy: {
8
+      '/api': {
9
+        // target: 'https://dp.huiju360.com.cn/hj_operations',
10
+        target: 'http://192.168.0.62:8080', // wf
11
+        // target: 'http://192.168.0.125:8080', // hyq
12
+        // target: 'http://192.168.0.11', // ys
13
+        // target: 'http://dev.ycjcjy.com', // frp
14
+        changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
15
+        // pathRewrite: {
16
+        //   '^/api': '/api-v2/api'
17
+        // },
18
+      },
19
+    },
20
+    // compress: true,
21
+    disableHostCheck: true,   // That solved it
22
+  }
23
+}