Elements-SY

Merge branch 'uat' into fix-issues

1 -{
2 - "name": "IMAC",
3 - "version": "3.5.0",
4 - "description": "IMAC管理系统",
5 - "author": "IMAC",
6 - "license": "MIT",
7 - "scripts": {
8 - "dev": "vue-cli-service serve",
9 - "build:prod": "vue-cli-service build",
10 - "build:stage": "vue-cli-service build --mode staging",
11 - "preview": "node build/index.js --preview",
12 - "lint": "eslint --ext .js,.vue src"
13 - },
14 - "husky": {
15 - "hooks": {
16 - "pre-commit": "lint-staged"
17 - }
18 - },
19 - "lint-staged": {
20 - "src/**/*.{js,vue}": [
21 - "eslint --fix",
22 - "git add"
23 - ]
24 - },
25 - "keywords": [
26 - "vue",
27 - "admin",
28 - "dashboard",
29 - "element-ui",
30 - "boilerplate",
31 - "admin-template",
32 - "management-system"
33 - ],
34 - "repository": {
35 - "type": "git",
36 - "url": "https://gitee.com/y_project/RuoYi-Vue.git"
37 - },
38 - "dependencies": {
39 - "@riophae/vue-treeselect": "0.4.0",
40 - "axios": "0.21.1",
41 - "clipboard": "2.0.8",
42 - "core-js": "3.8.3",
43 - "echarts": "4.9.0",
44 - "element-ui": "2.15.3",
45 - "file-saver": "2.0.5",
46 - "fuse.js": "6.4.6",
47 - "highlight.js": "9.18.5",
48 - "js-beautify": "1.13.13",
49 - "js-cookie": "2.2.1",
50 - "jsencrypt": "3.0.3",
51 - "nprogress": "0.2.0",
52 - "quill": "1.3.7",
53 - "screenfull": "5.0.2",
54 - "sortablejs": "1.10.2",
55 - "vue": "2.6.14",
56 - "vue-count-to": "1.0.13",
57 - "vue-cropper": "0.5.6",
58 - "vue-router": "3.5.2",
59 - "vuedraggable": "2.24.3",
60 - "vuex": "3.6.2"
61 - },
62 - "devDependencies": {
63 - "@vue/cli-plugin-babel": "4.5.13",
64 - "@vue/cli-plugin-eslint": "4.5.13",
65 - "@vue/cli-service": "4.5.13",
66 - "babel-eslint": "10.1.0",
67 - "chalk": "4.1.1",
68 - "connect": "3.6.6",
69 - "eslint": "7.30.0",
70 - "eslint-plugin-vue": "7.12.1",
71 - "lint-staged": "10.5.4",
72 - "runjs": "4.4.2",
73 - "sass": "1.35.1",
74 - "sass-loader": "10.2.0",
75 - "script-ext-html-webpack-plugin": "2.1.5",
76 - "svg-sprite-loader": "5.2.1",
77 - "vue-template-compiler": "2.6.14"
78 - },
79 - "engines": {
80 - "node": ">=8.9",
81 - "npm": ">= 3.0.0"
82 - },
83 - "browserslist": [
84 - "> 1%",
85 - "last 2 versions"
86 - ]
87 -}
...@@ -143,9 +143,15 @@ export function delFlight(data) { ...@@ -143,9 +143,15 @@ export function delFlight(data) {
143 143
144 //查询航线 144 //查询航线
145 /** 145 /**
146 +<<<<<<< HEAD
146 * @param fltNo 航班号 147 * @param fltNo 航班号
147 * @param page 页数 148 * @param page 页数
148 * @param size 页长 149 * @param size 页长
150 +=======
151 + * @param fltNo 航班号
152 + * @param page 页数
153 + * @param size 页长
154 +>>>>>>> test
149 */ 155 */
150 export function queryRoute(data) { 156 export function queryRoute(data) {
151 return request({ 157 return request({
......
1 +var en = {
2 + "common": {
3 + "risk": "risk",
4 + "exit": "exit",
5 + "index":"index"
6 + }
7 +
8 +}
9 +export default en
1 +var zh = {
2 + "common": {
3 + "risk": "风险",
4 + "exit": "退出",
5 + "index":"首页"
6 + }
7 +
8 +}
9 +export default zh
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
4 @click="visibleOpen"> 4 @click="visibleOpen">
5 </el-button> 5 </el-button>
6 <el-dialog title="表格显示设置" :visible.sync="open" width="40%" :close-on-click-modal="false" :show-close="false" 6 <el-dialog title="表格显示设置" :visible.sync="open" width="40%" :close-on-click-modal="false" :show-close="false"
7 - append-to-body center> 7 + append-to-body center @close="close">
8 <div style="text-align: center"> 8 <div style="text-align: center">
9 <el-transfer style="text-align: left; display: inline-block" :data="transferData" 9 <el-transfer style="text-align: left; display: inline-block" :data="transferData"
10 :right-default-checked="rightDefaultChecked" v-model="transferValue" :titles="transferTitle" 10 :right-default-checked="rightDefaultChecked" v-model="transferValue" :titles="transferTitle"
......
1 <template> 1 <template>
2 <div class="component-upload-image"> 2 <div class="component-upload-image">
3 - <el-upload 3 + <el-upload :action="uploadImgUrl" list-type="picture-card" :on-success="handleUploadSuccess"
4 - :action="uploadImgUrl" 4 + :before-upload="handleBeforeUpload" :on-error="handleUploadError" name="file" :show-file-list="false"
5 - list-type="picture-card" 5 + :headers="headers" style="display: inline-block; vertical-align: top">
6 - :on-success="handleUploadSuccess"
7 - :before-upload="handleBeforeUpload"
8 - :on-error="handleUploadError"
9 - name="file"
10 - :show-file-list="false"
11 - :headers="headers"
12 - style="display: inline-block; vertical-align: top"
13 - >
14 <el-image v-if="!value" :src="value"> 6 <el-image v-if="!value" :src="value">
15 <div slot="error" class="image-slot"> 7 <div slot="error" class="image-slot">
16 <i class="el-icon-plus" /> 8 <i class="el-icon-plus" />
17 </div> 9 </div>
18 </el-image> 10 </el-image>
19 <div v-else class="image"> 11 <div v-else class="image">
20 - <el-image :src="value" :style="`width:150px;height:150px;`" fit="fill"/> 12 + <el-image :src="value" :style="`width:150px;height:150px;`" fit="fill" />
21 <div class="mask"> 13 <div class="mask">
22 <div class="actions"> 14 <div class="actions">
23 <span title="预览" @click.stop="dialogVisible = true"> 15 <span title="预览" @click.stop="dialogVisible = true">
...@@ -30,7 +22,7 @@ ...@@ -30,7 +22,7 @@
30 </div> 22 </div>
31 </div> 23 </div>
32 </el-upload> 24 </el-upload>
33 - <el-dialog :visible.sync="dialogVisible" title="预览" width="800" append-to-body> 25 + <el-dialog :visible.sync="dialogVisible" title="预览" width="800" append-to-body :close-on-press-escape="false">
34 <img :src="value" style="display: block; max-width: 100%; margin: 0 auto;"> 26 <img :src="value" style="display: block; max-width: 100%; margin: 0 auto;">
35 </el-dialog> 27 </el-dialog>
36 </div> 28 </div>
...@@ -85,6 +77,7 @@ export default { ...@@ -85,6 +77,7 @@ export default {
85 <style scoped lang="scss"> 77 <style scoped lang="scss">
86 .image { 78 .image {
87 position: relative; 79 position: relative;
80 +
88 .mask { 81 .mask {
89 opacity: 0; 82 opacity: 0;
90 position: absolute; 83 position: absolute;
...@@ -93,6 +86,7 @@ export default { ...@@ -93,6 +86,7 @@ export default {
93 background-color: rgba(0, 0, 0, 0.5); 86 background-color: rgba(0, 0, 0, 0.5);
94 transition: all 0.3s; 87 transition: all 0.3s;
95 } 88 }
89 +
96 &:hover .mask { 90 &:hover .mask {
97 opacity: 1; 91 opacity: 1;
98 } 92 }
......
...@@ -37,13 +37,8 @@ ...@@ -37,13 +37,8 @@
37 /> 37 />
38 </el-tooltip> 38 </el-tooltip>
39 </el-row> 39 </el-row>
40 - <el-dialog :title="title" :visible.sync="open" append-to-body> 40 + <el-dialog :title="title" :visible.sync="open" append-to-body :close-on-press-escape="false">
41 - <el-transfer 41 + <el-transfer :titles="['显示', '隐藏']" v-model="value" :data="columns" @change="dataChange"></el-transfer>
42 - :titles="['显示', '隐藏']"
43 - v-model="value"
44 - :data="columns"
45 - @change="dataChange"
46 - ></el-transfer>
47 </el-dialog> 42 </el-dialog>
48 </div> 43 </div>
49 </template> 44 </template>
...@@ -111,6 +106,7 @@ export default { ...@@ -111,6 +106,7 @@ export default {
111 display: block; 106 display: block;
112 margin-left: 0px; 107 margin-left: 0px;
113 } 108 }
109 +
114 ::v-deep .el-transfer__button:first-child { 110 ::v-deep .el-transfer__button:first-child {
115 margin-bottom: 10px; 111 margin-bottom: 10px;
116 } 112 }
......
1 import router from './router' 1 import router from './router'
2 import store from './store' 2 import store from './store'
3 import { Message } from 'element-ui' 3 import { Message } from 'element-ui'
4 -import { getToken, removeToken } from '@/utils/auth' 4 +import { getToken, setToken, removeToken } from '@/utils/auth'
5 +import settings from "@/settings"
5 6
6 7
7 const whiteList = ['/login', '/auth-redirect', '/bind', '/register'] 8 const whiteList = ['/login', '/auth-redirect', '/bind', '/register']
9 +
8 router.beforeEach((to, from, next) => { 10 router.beforeEach((to, from, next) => {
9 if (getToken()) { 11 if (getToken()) {
10 /* has token*/ 12 /* has token*/
...@@ -14,16 +16,19 @@ router.beforeEach((to, from, next) => { ...@@ -14,16 +16,19 @@ router.beforeEach((to, from, next) => {
14 if (store.getters.roles.length === 0) { 16 if (store.getters.roles.length === 0) {
15 // 判断当前用户是否已拉取完user_info信息 17 // 判断当前用户是否已拉取完user_info信息
16 store.dispatch('GetInfo').then(() => { 18 store.dispatch('GetInfo').then(() => {
17 - //获取用户表头
18 store.dispatch('GetTableHeaders').then(() => { 19 store.dispatch('GetTableHeaders').then(() => {
19 - // 根据roles权限生成可访问的路由表
20 store.dispatch('GenerateRoutes').then(accessRoutes => { 20 store.dispatch('GenerateRoutes').then(accessRoutes => {
21 + // 根据roles权限生成可访问的路由表
21 router.addRoutes(accessRoutes) // 动态添加可访问路由表 22 router.addRoutes(accessRoutes) // 动态添加可访问路由表
22 next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 23 next({ ...to, replace: true }) // hack方法 确保addRoutes已完成
23 }) 24 })
24 }) 25 })
25 }).catch(err => { 26 }).catch(err => {
26 - 27 + Message.error(err)
28 + // store.dispatch('LogOut').then(() => {
29 + // // next({ path: '/' })
30 + // window.location.href = settings.loginURL;//wsso系统跳转
31 + // })
27 }) 32 })
28 } else { 33 } else {
29 next() 34 next()
...@@ -32,11 +37,18 @@ router.beforeEach((to, from, next) => { ...@@ -32,11 +37,18 @@ router.beforeEach((to, from, next) => {
32 } else { 37 } else {
33 removeToken() 38 removeToken()
34 // 没有token 39 // 没有token
40 + //wsso登录时对后端重定向带来的token进行记录
41 + let token = location.search.split("token=")[1]
42 + if (token != undefined && token != '' && token != null) {
43 + setToken(token)
44 + next({ path: '/' })
45 + } else {
35 if (whiteList.indexOf(to.path) !== -1) { 46 if (whiteList.indexOf(to.path) !== -1) {
36 // 在免登录白名单,直接进入 47 // 在免登录白名单,直接进入
37 next() 48 next()
38 } else { 49 } else {
39 - next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 50 + window.location.href = settings.loginURL;//wsso系统跳转
51 + }
40 } 52 }
41 } 53 }
42 }) 54 })
......
...@@ -39,11 +39,11 @@ export const constantRoutes = [ ...@@ -39,11 +39,11 @@ export const constantRoutes = [
39 }, 39 },
40 ], 40 ],
41 }, 41 },
42 - { 42 + // {
43 - path: "/login", 43 + // path: "/login",
44 - component: (resolve) => require(["@/views/login"], resolve), 44 + // component: (resolve) => require(["@/views/login"], resolve),
45 - hidden: true, 45 + // hidden: true,
46 - }, 46 + // },
47 { 47 {
48 path: "/404", 48 path: "/404",
49 component: (resolve) => require(["@/views/error/404"], resolve), 49 component: (resolve) => require(["@/views/error/404"], resolve),
......
...@@ -42,19 +42,19 @@ module.exports = { ...@@ -42,19 +42,19 @@ module.exports = {
42 /** 42 /**
43 * logout 43 * logout
44 */ 44 */
45 - loginURL: 'http://47.103.140.98/test/login', 45 + loginURL: 'https://test-myapps.secure.fedex.com/L2/iMAC/',
46 - logoutURL: 'http://47.103.140.98/test/login', 46 + logoutURL: 'https://test-myapps.secure.fedex.com/logout',
47 47
48 /** 48 /**
49 * 后端接口 49 * 后端接口
50 */ 50 */
51 - baseURL: `http://47.103.140.98:7001/iMAC`, 51 + baseURL: `https://imacuat.zmd.apac.fedex.com/iMAC`,
52 - downLoadURL: `http://47.103.140.98:7001/iMAC`, 52 + downLoadURL: `https://imacuat.zmd.apac.fedex.com/iMAC`,//下载、导出地址
53 53
54 /** 54 /**
55 * 项目存放地址 55 * 项目存放地址
56 */ 56 */
57 - routerBase: '/test', 57 + routerBase: '/imacuat',
58 58
59 /** 59 /**
60 * 版本号 60 * 版本号
......
...@@ -40,6 +40,13 @@ const permission = { ...@@ -40,6 +40,13 @@ const permission = {
40 REMOVE_FILGHTALL: (state, name) => { 40 REMOVE_FILGHTALL: (state, name) => {
41 delete state.filghtAllData[name]; 41 delete state.filghtAllData[name];
42 }, 42 },
43 + SET_FILGHTALL: (state, data) => {
44 + let name = data.name;
45 + state.filghtAllData[name] = data.data;
46 + },
47 + REMOVE_FILGHTALL: (state, name) => {
48 + delete state.filghtAllData[name]
49 + }
43 }, 50 },
44 actions: { 51 actions: {
45 // 生成路由 52 // 生成路由
......
...@@ -3,6 +3,7 @@ import { getTableHeader } from '@/api/menu' ...@@ -3,6 +3,7 @@ import { getTableHeader } from '@/api/menu'
3 import { changeCurrentPort } from "@/api/system/user.js"; 3 import { changeCurrentPort } from "@/api/system/user.js";
4 import { getToken, setToken, removeToken } from '@/utils/auth' 4 import { getToken, setToken, removeToken } from '@/utils/auth'
5 import { Message } from 'element-ui' 5 import { Message } from 'element-ui'
6 +import settings from "@/settings"
6 7
7 const user = { 8 const user = {
8 state: { 9 state: {
......
...@@ -4,19 +4,19 @@ const TokenKey = 'iMac-Token' ...@@ -4,19 +4,19 @@ const TokenKey = 'iMac-Token'
4 4
5 export function getToken() { 5 export function getToken() {
6 //return Cookies.get(TokenKey) 6 //return Cookies.get(TokenKey)
7 - return localStorage.getItem(TokenKey) 7 + // return localStorage.getItem(TokenKey)
8 - // return sessionStorage.getItem(TokenKey) 8 + return sessionStorage.getItem(TokenKey)
9 } 9 }
10 10
11 export function setToken(token) { 11 export function setToken(token) {
12 //return Cookies.set(TokenKey, token) 12 //return Cookies.set(TokenKey, token)
13 - return localStorage.setItem(TokenKey, token) 13 + // return localStorage.setItem(TokenKey, token)
14 - // return sessionStorage.setItem(TokenKey, token) 14 + return sessionStorage.setItem(TokenKey, token)
15 } 15 }
16 16
17 export function removeToken() { 17 export function removeToken() {
18 //return Cookies.remove(TokenKey) 18 //return Cookies.remove(TokenKey)
19 + // return localStorage.removeItem(TokenKey)
19 sessionStorage.removeItem('portName') 20 sessionStorage.removeItem('portName')
20 - return localStorage.removeItem(TokenKey) 21 + return sessionStorage.removeItem(TokenKey)
21 - // return sessionStorage.removeItem(TokenKey)
22 } 22 }
......
...@@ -9,16 +9,17 @@ axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' ...@@ -9,16 +9,17 @@ axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
9 // 创建axios实例 9 // 创建axios实例
10 const service = axios.create({ 10 const service = axios.create({
11 // axios中请求配置有baseURL选项,表示请求URL公共部分 11 // axios中请求配置有baseURL选项,表示请求URL公共部分
12 - baseURL: settings.baseURL, //接口地址 12 + baseURL: settings.baseURL,
13 // 超时 13 // 超时
14 - timeout: 30000 14 + timeout: 90000,
15 }) 15 })
16 +
16 // request拦截器 17 // request拦截器
17 service.interceptors.request.use(config => { 18 service.interceptors.request.use(config => {
18 // 是否需要设置 token 19 // 是否需要设置 token
19 const isToken = (config.headers || {}).isToken === false 20 const isToken = (config.headers || {}).isToken === false
20 if (getToken() && !isToken) { 21 if (getToken() && !isToken) {
21 - config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 22 + config.headers['Authorization'] = decodeURIComponent(getToken()) // 让每个请求携带自定义token 请根据实际情况自行修改
22 } 23 }
23 // get请求映射params参数 24 // get请求映射params参数
24 if (config.method === 'get' && config.params) { 25 if (config.method === 'get' && config.params) {
...@@ -51,14 +52,14 @@ service.interceptors.request.use(config => { ...@@ -51,14 +52,14 @@ service.interceptors.request.use(config => {
51 // 响应拦截器 52 // 响应拦截器
52 service.interceptors.response.use(res => { 53 service.interceptors.response.use(res => {
53 if (res.headers['token']) { 54 if (res.headers['token']) {
54 - setToken(decodeURI(res.headers['token'])) 55 + setToken(res.headers['token'])
55 } 56 }
56 // 未设置状态码则默认成功状态 57 // 未设置状态码则默认成功状态
57 const code = res.data.code || 200; 58 const code = res.data.code || 200;
58 // 获取错误信息 59 // 获取错误信息
59 const msg = errorCode[code] || res.data.msg || errorCode['default'] 60 const msg = errorCode[code] || res.data.msg || errorCode['default']
60 if (code === 301) { 61 if (code === 301) {
61 - MessageBox.confirm('登录状态已过期,需重新登录', '系统提示', { 62 + MessageBox.confirm('登录状态已过期,需重新登录!msg:' + msg, '系统提示', {
62 closeOnClickModal: false, 63 closeOnClickModal: false,
63 showCancelButton: false, 64 showCancelButton: false,
64 confirmButtonText: '重新登录', 65 confirmButtonText: '重新登录',
...@@ -66,9 +67,10 @@ service.interceptors.response.use(res => { ...@@ -66,9 +67,10 @@ service.interceptors.response.use(res => {
66 } 67 }
67 ).then(() => { 68 ).then(() => {
68 store.dispatch('LogOut').then(() => { 69 store.dispatch('LogOut').then(() => {
69 - location.href = settings.routerBase + '/index'; 70 + // location.href = '/';
70 - }) 71 + window.location.href = settings.loginURL;//wsso系统跳转
71 }) 72 })
73 + });
72 } else if (code === 403) { 74 } else if (code === 403) {
73 //无权限页面 75 //无权限页面
74 location.href = '/401'; 76 location.href = '/401';
......
...@@ -71,7 +71,7 @@ export default { ...@@ -71,7 +71,7 @@ export default {
71 const username = localStorage.getItem("username"); 71 const username = localStorage.getItem("username");
72 const password = localStorage.getItem("password"); 72 const password = localStorage.getItem("password");
73 const rememberMe = localStorage.getItem("rememberMe"); 73 const rememberMe = localStorage.getItem("rememberMe");
74 - console.log("rememberMe:", rememberMe) 74 + // console.log("rememberMe:", rememberMe)
75 this.loginForm = { 75 this.loginForm = {
76 username: username === undefined ? this.loginForm.username : username, 76 username: username === undefined ? this.loginForm.username : username,
77 password: password === undefined ? this.loginForm.password : password, 77 password: password === undefined ? this.loginForm.password : password,
......
...@@ -56,7 +56,6 @@ ...@@ -56,7 +56,6 @@
56 </Tables> 56 </Tables>
57 </div> 57 </div>
58 </template> 58 </template>
59 -
60 <script> 59 <script>
61 import { 60 import {
62 downLoadTemplate, 61 downLoadTemplate,
...@@ -171,7 +170,7 @@ export default { ...@@ -171,7 +170,7 @@ export default {
171 }); 170 });
172 } else if (res.code === 201) { 171 } else if (res.code === 201) {
173 this.msgWarning(res.msg); 172 this.msgWarning(res.msg);
174 - this.errorData = res.data.data; 173 + this.errorData = res.data;
175 this.$router.push({ name: 'UpDateResult', query: { data: this.errorData, from: 'FlightToArea' } }) 174 this.$router.push({ name: 'UpDateResult', query: { data: this.errorData, from: 'FlightToArea' } })
176 } else { 175 } else {
177 this.msgWarning(res.msg); 176 this.msgWarning(res.msg);
......
...@@ -67,7 +67,6 @@ ...@@ -67,7 +67,6 @@
67 <Chart :className="'chart' + index.toString()" :chartData="item" height="350px" style="margin-bottom:10px" 67 <Chart :className="'chart' + index.toString()" :chartData="item" height="350px" style="margin-bottom:10px"
68 :loading="loading" /> 68 :loading="loading" />
69 </div> 69 </div>
70 -
71 </div> 70 </div>
72 </div> 71 </div>
73 </template> 72 </template>
......
...@@ -58,7 +58,6 @@ ...@@ -58,7 +58,6 @@
58 </Tables> 58 </Tables>
59 </div> 59 </div>
60 </template> 60 </template>
61 -
62 <script> 61 <script>
63 import { 62 import {
64 downLoadTemplate, 63 downLoadTemplate,
......
...@@ -33,9 +33,9 @@ ...@@ -33,9 +33,9 @@
33 <el-input type="text" v-model="newDictionary.route" placeholder="请输入航线" maxlength="40"> 33 <el-input type="text" v-model="newDictionary.route" placeholder="请输入航线" maxlength="40">
34 </el-input> 34 </el-input>
35 </el-form-item> 35 </el-form-item>
36 - <el-form-item label="是否为ET86航线"> 36 + <!-- <el-form-item label="是否为ET86航线">
37 <el-checkbox v-model="newDictionary.isEtesRoute"></el-checkbox> 37 <el-checkbox v-model="newDictionary.isEtesRoute"></el-checkbox>
38 - </el-form-item> 38 + </el-form-item> -->
39 <el-form-item> 39 <el-form-item>
40 <div style="color:#ff4949;line-height: 30px;">注意:此处不能添加虚拟航班!</div> 40 <div style="color:#ff4949;line-height: 30px;">注意:此处不能添加虚拟航班!</div>
41 </el-form-item> 41 </el-form-item>
...@@ -205,7 +205,7 @@ export default { ...@@ -205,7 +205,7 @@ export default {
205 let obj = { 205 let obj = {
206 fltNo: this.upCase(this.newDictionary.fltNo), 206 fltNo: this.upCase(this.newDictionary.fltNo),
207 route: this.upCase(this.newDictionary.route), 207 route: this.upCase(this.newDictionary.route),
208 - isEtesRoute: this.newDictionary.isEtesRoute == true ? "Y" : "N" 208 + // isEtesRoute: this.newDictionary.isEtesRoute == true ? "Y" : "N"
209 } 209 }
210 addRoute(obj).then(res => { 210 addRoute(obj).then(res => {
211 this.loading = false 211 this.loading = false
......