Merge remote-tracking branch 'origin/master' into master_dev
正在显示
6 个修改的文件
包含
137 行增加
和
41 行删除
| 1 | import http from './http.js' | 1 | import http from './http.js' |
| 2 | import jsutil from "@/common/js/util"; | 2 | import jsutil from "@/common/js/util"; |
| 3 | let baseUrl = '/cloud-user-center/user' | 3 | let baseUrl = '/cloud-user-center/user' |
| 4 | +const serviceName = '/cloud-user-center' | ||
| 4 | // let baseUrl = '/cloud-kako-user-center/user' | 5 | // let baseUrl = '/cloud-kako-user-center/user' |
| 5 | // let baseCode = '/cloud-kako-user-center/randCode' | 6 | // let baseCode = '/cloud-kako-user-center/randCode' |
| 6 | export const getUserList = params => { return http.get(`${baseUrl}/list`, params); }; | 7 | export const getUserList = params => { return http.get(`${baseUrl}/list`, params); }; |
| 7 | 8 | ||
| 8 | -export const getRandCode = params => { return http.get(`${baseCode}`, params); }; | 9 | +export const getRandCode = params => { return http.get(`/cloud-user-center/anonymous/randCode`, params); }; |
| 9 | 10 | ||
| 10 | export const getUserListPage = params => { return http.get(`/user/list`,params) }; | 11 | export const getUserListPage = params => { return http.get(`/user/list`,params) }; |
| 11 | 12 | ||
| 12 | -export const removeUser = params => { return http.del(`${baseUrl}/del`,params)}; | 13 | +export const removeUser = params => { return http.post(`${baseUrl}/del`,params)}; |
| 13 | 14 | ||
| 14 | -export const batchRemoveUser = params => { return http.del(`${baseUrl}/batchremove`, { params: params }); }; | 15 | +export const batchRemoveUser = params => { return http.post(`${baseUrl}/batchremove`, { params: params }); }; |
| 15 | 16 | ||
| 16 | -export const editPass = params => { return http.put(`${baseUrl}/password`,params)}; | 17 | +export const editPass = params => { return http.post(`${baseUrl}/password`,params)}; |
| 17 | 18 | ||
| 18 | -export const editUser = params => { return http.put(`${baseUrl}/edit`,params)}; | 19 | +export const editUser = params => { return http.post(`${baseUrl}/edit`,params)}; |
| 19 | 20 | ||
| 20 | export const addUser = params => { return http.post(`${baseUrl}/add`,params)}; | 21 | export const addUser = params => { return http.post(`${baseUrl}/add`,params)}; |
| 21 | 22 | ||
| 22 | -export const setUserRole = params => { return http.put(`${baseUrl}/roleset`,params)}; | 23 | +export const heartBeat = params => { return http.post(`${serviceName}/heartbeat`,params)}; |
| 24 | + | ||
| 25 | +export const userLock = params => { return http.post(`${baseUrl}/lock`,params)}; | ||
| 26 | + | ||
| 27 | +export const setUserRole = params => { return http.post(`${baseUrl}/roleset`,params)}; | ||
| 28 | + | ||
| 29 | +export const resetToken = params => { return http.post(`${baseUrl}/resetToken`,params)}; | ||
| 30 | + | ||
| 23 | 31 | ||
| 24 | -export const resetToken = params => { return http.put(`${baseUrl}/resetToken`,params)}; | ||
| 25 | 32 | ||
| 26 | export const loginedUserInfo = () => { | 33 | export const loginedUserInfo = () => { |
| 27 | let session_user_info = sessionStorage.getItem('user'); | 34 | let session_user_info = sessionStorage.getItem('user'); |
| @@ -19,6 +19,11 @@ var axois_init = { | @@ -19,6 +19,11 @@ var axois_init = { | ||
| 19 | return res; | 19 | return res; |
| 20 | }, | 20 | }, |
| 21 | error => { | 21 | error => { |
| 22 | + // 抓取报错信息 | ||
| 23 | + let errmsg = ''; | ||
| 24 | + if (error.response.data.message){ | ||
| 25 | + errmsg += error.response.data.message | ||
| 26 | + } | ||
| 22 | // 用户登录的时候会拿到一个基础信息,比如用户名,token,过期时间戳 | 27 | // 用户登录的时候会拿到一个基础信息,比如用户名,token,过期时间戳 |
| 23 | // 直接丢sessionStorage | 28 | // 直接丢sessionStorage |
| 24 | if (!sessionStorage.getItem("token")) { | 29 | if (!sessionStorage.getItem("token")) { |
| @@ -33,7 +38,7 @@ var axois_init = { | @@ -33,7 +38,7 @@ var axois_init = { | ||
| 33 | if (error.response.status === 401) { | 38 | if (error.response.status === 401) { |
| 34 | message({ | 39 | message({ |
| 35 | // 饿了么的消息弹窗组件 | 40 | // 饿了么的消息弹窗组件 |
| 36 | - message: '授权超时,或访问未授权,请重新登录', | 41 | + message: errmsg + '授权超时,或访问未授权,请重新登录;', |
| 37 | type: "error" | 42 | type: "error" |
| 38 | }); | 43 | }); |
| 39 | } | 44 | } |
| @@ -80,7 +85,7 @@ var axois_init = { | @@ -80,7 +85,7 @@ var axois_init = { | ||
| 80 | } | 85 | } |
| 81 | // 返回 response 里的错误信息 | 86 | // 返回 response 里的错误信息 |
| 82 | 87 | ||
| 83 | - return Promise.reject(errorInfo); | 88 | + return Promise.reject(errorInfo + errmsg); |
| 84 | } | 89 | } |
| 85 | ); | 90 | ); |
| 86 | }, | 91 | }, |
| @@ -62,7 +62,7 @@ | @@ -62,7 +62,7 @@ | ||
| 62 | 62 | ||
| 63 | <script> | 63 | <script> |
| 64 | import rt from '../routes' | 64 | import rt from '../routes' |
| 65 | - import { editPass,resetToken,loginedUserInfo} from '../api/user'; | 65 | + import { editPass,resetToken,loginedUserInfo,heartBeat} from '../api/user'; |
| 66 | import ElFormItem from "element-ui/packages/form/src/form-item"; | 66 | import ElFormItem from "element-ui/packages/form/src/form-item"; |
| 67 | import TabMenu from "@/components/TabMenu" | 67 | import TabMenu from "@/components/TabMenu" |
| 68 | import NavMenu from "@/components/NavMenu" | 68 | import NavMenu from "@/components/NavMenu" |
| @@ -283,6 +283,16 @@ | @@ -283,6 +283,16 @@ | ||
| 283 | } | 283 | } |
| 284 | }) | 284 | }) |
| 285 | }, | 285 | }, |
| 286 | + heartBeatAPI:function () { | ||
| 287 | + heartBeat().then(response => { | ||
| 288 | + | ||
| 289 | + }).catch(e=>{ | ||
| 290 | + this.$notify.error({ | ||
| 291 | + title: '心跳', | ||
| 292 | + message: '心跳失败' | ||
| 293 | + }); | ||
| 294 | + }); | ||
| 295 | + } | ||
| 286 | }, | 296 | }, |
| 287 | 297 | ||
| 288 | computed: { | 298 | computed: { |
| @@ -304,6 +314,11 @@ | @@ -304,6 +314,11 @@ | ||
| 304 | setInterval(() => { | 314 | setInterval(() => { |
| 305 | this.checkUpdate(); | 315 | this.checkUpdate(); |
| 306 | }, 30000); | 316 | }, 30000); |
| 317 | + setInterval(() => { | ||
| 318 | + if (this.sysUserName){ | ||
| 319 | + this.heartBeatAPI(); | ||
| 320 | + } | ||
| 321 | + }, 90000); | ||
| 307 | this.$nextTick(function(){ | 322 | this.$nextTick(function(){ |
| 308 | this.initUserInfo(); | 323 | this.initUserInfo(); |
| 309 | // this.rowDrop(); //行拖拽效果 | 324 | // this.rowDrop(); //行拖拽效果 |
| @@ -8,9 +8,16 @@ | @@ -8,9 +8,16 @@ | ||
| 8 | <el-form-item prop="checkPass"> | 8 | <el-form-item prop="checkPass"> |
| 9 | <el-input type="password" v-model="ruleForm2.checkPass" placeholder="密码" @keydown.enter.native="keyDown" show-password></el-input> | 9 | <el-input type="password" v-model="ruleForm2.checkPass" placeholder="密码" @keydown.enter.native="keyDown" show-password></el-input> |
| 10 | </el-form-item> | 10 | </el-form-item> |
| 11 | -<!-- <el-form-item prop="checkPass">--> | ||
| 12 | -<!-- <el-input type="password" v-model="ruleForm2.checkPass" placeholder="密码" @keyup.enter.native="handleSubmit2"></el-input>--> | ||
| 13 | -<!-- </el-form-item>--> | 11 | + <el-form-item prop="verify"> |
| 12 | + <el-input type="text" v-model="ruleForm2.verify" placeholder="请在2分钟内输入下方图片中的答案" @keyup.enter.native="handleSubmit2"></el-input> | ||
| 13 | + </el-form-item> | ||
| 14 | + <el-form-item> | ||
| 15 | + <img | ||
| 16 | + style="width: 125px; height: 60px" | ||
| 17 | + :src="verifyImg" | ||
| 18 | + @click="getVerifyCode" | ||
| 19 | + > | ||
| 20 | + </el-form-item> | ||
| 14 | <el-checkbox v-model="checked" checked class="remeberme">记住密码</el-checkbox> | 21 | <el-checkbox v-model="checked" checked class="remeberme">记住密码</el-checkbox> |
| 15 | <el-form-item style="width:100%;"> | 22 | <el-form-item style="width:100%;"> |
| 16 | <el-button type="primary" style="width:100%;" @click.native.prevent="handleSubmit2" :loading="logining" :plain="true">登录</el-button> | 23 | <el-button type="primary" style="width:100%;" @click.native.prevent="handleSubmit2" :loading="logining" :plain="true">登录</el-button> |
| @@ -43,13 +50,16 @@ | @@ -43,13 +50,16 @@ | ||
| 43 | export default { | 50 | export default { |
| 44 | data() { | 51 | data() { |
| 45 | return { | 52 | return { |
| 53 | + verifyImg: "", | ||
| 46 | vedioCanPlay: true, | 54 | vedioCanPlay: true, |
| 47 | fixStyle: '', | 55 | fixStyle: '', |
| 48 | logining: false, | 56 | logining: false, |
| 49 | ruleForm2: { | 57 | ruleForm2: { |
| 50 | account: '', | 58 | account: '', |
| 51 | // checkPass: 'zzairport@kako2020' | 59 | // checkPass: 'zzairport@kako2020' |
| 52 | - checkPass: '' | 60 | + checkPass: '', |
| 61 | + verify: '', | ||
| 62 | + verifyToken: '' | ||
| 53 | }, | 63 | }, |
| 54 | rules2: { | 64 | rules2: { |
| 55 | account: [ | 65 | account: [ |
| @@ -59,6 +69,9 @@ | @@ -59,6 +69,9 @@ | ||
| 59 | checkPass: [ | 69 | checkPass: [ |
| 60 | { required: true, message: '请输入密码', trigger: 'blur' }, | 70 | { required: true, message: '请输入密码', trigger: 'blur' }, |
| 61 | //{ validator: validaePass2 } | 71 | //{ validator: validaePass2 } |
| 72 | + ], | ||
| 73 | + checkVerify: [ | ||
| 74 | + { required: false, message: '请输入验证码', trigger: 'blur' } | ||
| 62 | ] | 75 | ] |
| 63 | }, | 76 | }, |
| 64 | checked: true, | 77 | checked: true, |
| @@ -105,18 +118,20 @@ | @@ -105,18 +118,20 @@ | ||
| 105 | // 本地存储用户目录 ,防刷新目录丢失用 | 118 | // 本地存储用户目录 ,防刷新目录丢失用 |
| 106 | sessionStorage.setItem('menu', JSON.stringify(_this.$router.options.routes)); | 119 | sessionStorage.setItem('menu', JSON.stringify(_this.$router.options.routes)); |
| 107 | }, | 120 | }, |
| 108 | - randCode: function(){ | ||
| 109 | - getRandCode().then((res) =>{ | ||
| 110 | - | ||
| 111 | - }).catch({ | ||
| 112 | - | ||
| 113 | - }); | ||
| 114 | - }, | ||
| 115 | keyDown(e) { | 121 | keyDown(e) { |
| 116 | if(e.keyCode===13) { //用户点击了ctrl+enter触发 | 122 | if(e.keyCode===13) { //用户点击了ctrl+enter触发 |
| 117 | this.handleSubmit2() | 123 | this.handleSubmit2() |
| 118 | } | 124 | } |
| 119 | }, | 125 | }, |
| 126 | + getVerifyCode: function(){ | ||
| 127 | + getRandCode().then((res) =>{ | ||
| 128 | + let status = res.status; | ||
| 129 | + this.ruleForm2.verifyToken = res.data.jwtToken; | ||
| 130 | + this.verifyImg = res.data.data.verifyImg; | ||
| 131 | + }).catch({ | ||
| 132 | + | ||
| 133 | + }); | ||
| 134 | + }, | ||
| 120 | handleSubmit2: function (ev) { | 135 | handleSubmit2: function (ev) { |
| 121 | var _this = this; | 136 | var _this = this; |
| 122 | this.$refs.ruleForm2.validate((valid) => { | 137 | this.$refs.ruleForm2.validate((valid) => { |
| @@ -124,7 +139,12 @@ | @@ -124,7 +139,12 @@ | ||
| 124 | //_this.$router.replace('/table'); | 139 | //_this.$router.replace('/table'); |
| 125 | this.logining = true; | 140 | this.logining = true; |
| 126 | //NProgress.start(); | 141 | //NProgress.start(); |
| 127 | - var loginParams = {username: this.ruleForm2.account, password: this.ruleForm2.checkPass}; | 142 | + var loginParams = { |
| 143 | + username: this.ruleForm2.account, | ||
| 144 | + password: this.ruleForm2.checkPass, | ||
| 145 | + verify: this.ruleForm2.verify, | ||
| 146 | + verifyToken:this.ruleForm2.verifyToken | ||
| 147 | + }; | ||
| 128 | http.login(loginParams).then(res => { | 148 | http.login(loginParams).then(res => { |
| 129 | this.logining = false; | 149 | this.logining = false; |
| 130 | //NProgress.done(); | 150 | //NProgress.done(); |
| @@ -133,6 +153,7 @@ | @@ -133,6 +153,7 @@ | ||
| 133 | let token = authentication.token; | 153 | let token = authentication.token; |
| 134 | let loginUserMenus = res.data.loginUserMenus; | 154 | let loginUserMenus = res.data.loginUserMenus; |
| 135 | if (status !== 200) { | 155 | if (status !== 200) { |
| 156 | + this.getVerifyCode(); | ||
| 136 | let msg = "登录错误"; | 157 | let msg = "登录错误"; |
| 137 | this.$message({ | 158 | this.$message({ |
| 138 | message: msg, | 159 | message: msg, |
| @@ -147,19 +168,16 @@ | @@ -147,19 +168,16 @@ | ||
| 147 | //处理用户menu | 168 | //处理用户menu |
| 148 | _this.userMenus = loginUserMenus.list; | 169 | _this.userMenus = loginUserMenus.list; |
| 149 | let sysMenus = _this.$router.options.routes; | 170 | let sysMenus = _this.$router.options.routes; |
| 150 | - | ||
| 151 | - | ||
| 152 | _this.handleMenuList(_this.$router.options.routes,_this.userMenus); | 171 | _this.handleMenuList(_this.$router.options.routes,_this.userMenus); |
| 153 | - | ||
| 154 | - // console.log("user:"); | ||
| 155 | - // console.log(_this.$router.options.routes); | ||
| 156 | _this.$router.push({path: '/main'}); | 172 | _this.$router.push({path: '/main'}); |
| 157 | } | 173 | } |
| 158 | }).catch(error => { | 174 | }).catch(error => { |
| 159 | this.$message({ | 175 | this.$message({ |
| 160 | - message: error.toString()+"-登录验证失败", | 176 | + message: error.toString()+"-登录验证失败;", |
| 161 | type: "error" | 177 | type: "error" |
| 162 | }); | 178 | }); |
| 179 | + this.getVerifyCode(); | ||
| 180 | + }).finally(()=>{ | ||
| 163 | this.logining = false; | 181 | this.logining = false; |
| 164 | }); | 182 | }); |
| 165 | } else { | 183 | } else { |
| @@ -213,8 +231,10 @@ | @@ -213,8 +231,10 @@ | ||
| 213 | _this.handleSubmit2(); | 231 | _this.handleSubmit2(); |
| 214 | } | 232 | } |
| 215 | }; | 233 | }; |
| 216 | - // this.randCode(); | ||
| 217 | - } | 234 | + }, |
| 235 | + created(){ | ||
| 236 | + this.getVerifyCode() | ||
| 237 | + }, | ||
| 218 | } | 238 | } |
| 219 | 239 | ||
| 220 | </script> | 240 | </script> |
| @@ -38,19 +38,35 @@ | @@ -38,19 +38,35 @@ | ||
| 38 | </el-table-column> | 38 | </el-table-column> |
| 39 | <el-table-column prop="realname" label="姓名" width="120" sortable> | 39 | <el-table-column prop="realname" label="姓名" width="120" sortable> |
| 40 | </el-table-column> | 40 | </el-table-column> |
| 41 | - <el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable> | ||
| 42 | - </el-table-column> | ||
| 43 | - <el-table-column prop="mobilephone" label="电话" width="150"> | ||
| 44 | - </el-table-column> | ||
| 45 | - <el-table-column prop="creattime" label="创建时间" width="220" sortable> | ||
| 46 | - </el-table-column> | ||
| 47 | - <el-table-column prop="updatetime" label="更新时间" width="220" sortable> | ||
| 48 | - </el-table-column> | 41 | +<!-- <el-table-column prop="sex" label="性别" width="100" :formatter="formatSex" sortable>--> |
| 42 | +<!-- </el-table-column>--> | ||
| 43 | +<!-- <el-table-column prop="mobilephone" label="电话" width="150">--> | ||
| 44 | +<!-- </el-table-column>--> | ||
| 49 | <!-- <el-table-column prop="address" label="地址" min-width="180">--> | 45 | <!-- <el-table-column prop="address" label="地址" min-width="180">--> |
| 50 | <!-- </el-table-column>--> | 46 | <!-- </el-table-column>--> |
| 51 | <!-- <el-table-column prop="email" label="Email" min-width="180">--> | 47 | <!-- <el-table-column prop="email" label="Email" min-width="180">--> |
| 52 | <!-- </el-table-column>--> | 48 | <!-- </el-table-column>--> |
| 53 | <el-table-column prop="state" label="启用" width="100" :formatter="formatState" sortable> | 49 | <el-table-column prop="state" label="启用" width="100" :formatter="formatState" sortable> |
| 50 | + <template slot-scope="scope"> | ||
| 51 | + <el-tag type="success" v-if="scope.row.state">启用</el-tag> | ||
| 52 | + <el-tag type="danger" v-else>禁用</el-tag> | ||
| 53 | + | ||
| 54 | + <el-button type="text" @click="lockUser(scope.$index, scope.row, false)" v-if="scope.row.state">禁用</el-button> | ||
| 55 | + <el-button type="text" @click="lockUser(scope.$index, scope.row, true)" v-else>启用</el-button> | ||
| 56 | + </template> | ||
| 57 | + </el-table-column> | ||
| 58 | + <el-table-column prop="userStatus" label="状态" width="100"> | ||
| 59 | + <template slot-scope="scope"> | ||
| 60 | + <el-tag type="danger" v-if="scope.row.userStatus ===0">锁定</el-tag> | ||
| 61 | + <el-tag type="success" v-else-if="scope.row.userStatus ===1">在线</el-tag> | ||
| 62 | + <el-tag type="info" v-else-if="scope.row.userStatus ===2">离线</el-tag> | ||
| 63 | + <el-tag type="warning" v-else-if="scope.row.userStatus ===3">过期</el-tag> | ||
| 64 | + <el-tag type="warning" v-else>未知</el-tag> | ||
| 65 | + </template> | ||
| 66 | + </el-table-column> | ||
| 67 | + <el-table-column prop="creattime" label="创建时间" width="220" sortable> | ||
| 68 | + </el-table-column> | ||
| 69 | + <el-table-column prop="updatetime" label="更新时间" width="220" sortable> | ||
| 54 | </el-table-column> | 70 | </el-table-column> |
| 55 | <el-table-column label="操作" align="center" width="250" fixed="right"> | 71 | <el-table-column label="操作" align="center" width="250" fixed="right"> |
| 56 | <template slot-scope="scope"> | 72 | <template slot-scope="scope"> |
| @@ -215,7 +231,7 @@ | @@ -215,7 +231,7 @@ | ||
| 215 | <script> | 231 | <script> |
| 216 | import util from '../../common/js/util' | 232 | import util from '../../common/js/util' |
| 217 | import NProgress from 'nprogress' | 233 | import NProgress from 'nprogress' |
| 218 | - import { getUserList, removeUser, batchRemoveUser, editUser, addUser, setUserRole } from '../../api/user'; | 234 | + import { getUserList, removeUser, batchRemoveUser, editUser, addUser, setUserRole,userLock } from '../../api/user'; |
| 219 | import { getList} from '../../api/role_api'; | 235 | import { getList} from '../../api/role_api'; |
| 220 | import { getList as getRoleList} from '../../api/role_api'; | 236 | import { getList as getRoleList} from '../../api/role_api'; |
| 221 | import moment from 'moment' | 237 | import moment from 'moment' |
| @@ -327,7 +343,29 @@ | @@ -327,7 +343,29 @@ | ||
| 327 | }); | 343 | }); |
| 328 | 344 | ||
| 329 | }, | 345 | }, |
| 330 | - | 346 | + // 禁用与启用用户 |
| 347 | + lockUser: function(index, row, stateCode){ | ||
| 348 | + this.listLoading = true; | ||
| 349 | + let para = { | ||
| 350 | + userId: row.userId, | ||
| 351 | + username:row.username, | ||
| 352 | + state: stateCode | ||
| 353 | + }; | ||
| 354 | + userLock(para).then((res) => { | ||
| 355 | + this.$message({ | ||
| 356 | + message: '操作成功', | ||
| 357 | + type: 'success' | ||
| 358 | + }); | ||
| 359 | + this.getUsers(); | ||
| 360 | + }).catch((e) => { | ||
| 361 | + this.$message({ | ||
| 362 | + message: '操作失败', | ||
| 363 | + type: 'error' | ||
| 364 | + }); | ||
| 365 | + }).finally(()=>{ | ||
| 366 | + this.listLoading = false; | ||
| 367 | + }); | ||
| 368 | + }, | ||
| 331 | // 获取公司列表 | 369 | // 获取公司列表 |
| 332 | getCompanyNmae(){ | 370 | getCompanyNmae(){ |
| 333 | let para = { | 371 | let para = { |
| @@ -65,6 +65,16 @@ | @@ -65,6 +65,16 @@ | ||
| 65 | <el-row style="margin-top: -5px"> | 65 | <el-row style="margin-top: -5px"> |
| 66 | <el-col :span="6"> | 66 | <el-col :span="6"> |
| 67 | <el-form-item> | 67 | <el-form-item> |
| 68 | + <el-input clearable | ||
| 69 | + v-model="formTrn.billno" | ||
| 70 | + placeholder="提运单号" style="width: 214px" | ||
| 71 | + > | ||
| 72 | + <template slot="prepend">提运单号</template> | ||
| 73 | + </el-input> | ||
| 74 | + </el-form-item> | ||
| 75 | + </el-col> | ||
| 76 | + <el-col :span="6"> | ||
| 77 | + <el-form-item> | ||
| 68 | <el-input | 78 | <el-input |
| 69 | v-model="formTrn.customscode" | 79 | v-model="formTrn.customscode" |
| 70 | placeholder="关区" style="width: 210px" | 80 | placeholder="关区" style="width: 210px" |
| @@ -83,7 +93,7 @@ | @@ -83,7 +93,7 @@ | ||
| 83 | </el-input> | 93 | </el-input> |
| 84 | </el-form-item> | 94 | </el-form-item> |
| 85 | </el-col> | 95 | </el-col> |
| 86 | - <el-col :span="12"> | 96 | + <el-col :span="6"> |
| 87 | <el-form-item> | 97 | <el-form-item> |
| 88 | <el-input | 98 | <el-input |
| 89 | v-model="formTrn.unloadcode" | 99 | v-model="formTrn.unloadcode" |
| @@ -598,6 +608,7 @@ | @@ -598,6 +608,7 @@ | ||
| 598 | }] | 608 | }] |
| 599 | }, | 609 | }, |
| 600 | formTrn: { | 610 | formTrn: { |
| 611 | + billno: '', | ||
| 601 | customscode:'', | 612 | customscode:'', |
| 602 | username:'', | 613 | username:'', |
| 603 | trnmode:'', | 614 | trnmode:'', |
-
请 注册 或 登录 后发表评论