Commit da7b0e06 by 李宁

1

1 parent 525f13f3
......@@ -4,7 +4,6 @@ html{
html,body{
width: 100%;
height: 100%;
background: red;
}
body{
min-height: 100vh;
......
......@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登录</title>
<link rel="stylesheet" href="css/login.css?9941">
<link rel="stylesheet" href="css/login.css?99341">
</head>
<body>
<div id="app" v-cloak>
......
......@@ -5,8 +5,8 @@
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>视频质检系统</title>
<script type="module" crossorigin src="./assets/index-BJJz899K.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-KGZYoaHH.css">
<script type="module" crossorigin src="./assets/index-DqoDLtuq.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-Ck6T8htw.css">
</head>
<body>
<div id="app"></div>
......
......@@ -192,7 +192,17 @@
<h3 class="section-title">质检详情</h3>
<el-table :data="detailForm.data.items" border style="width: 100%;">
<el-table-column prop="dec" label="检查项" width="200"></el-table-column>
<el-table-column prop="result" label="检查结果" width="150"></el-table-column>
<el-table-column prop="result" label="检查结果" width="150">
<template #default="scope">
<span>{{scope.row.result}}</span>
<el-button v-if="scope.row.result=='noShow'" size="small" type="text" @click="checkReason(scope.row.content)">查看原因</el-button>
</template>
</el-table-column>
<el-table-column prop="robot" label="识别方式" width="200">
<template #default="scope">
<span>{{scope.row.robot=='auto'?'自动识别':'手动填写'}}</span>
</template>
</el-table-column>
<el-table-column prop="picUrl" label="现场快照">
<template #default="scope">
<el-image
......@@ -235,7 +245,7 @@
<script setup>
import { ref, reactive, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import { ElMessage ,ElMessageBox} from 'element-plus'
import { getQualityResults , getQualityResultsDetail} from '../utils/api'
const router = useRouter()
......@@ -346,6 +356,12 @@ const getResultText = (result,status) => {
return ret
}
const checkReason = (value) =>{
ElMessageBox.alert(value, '提示', {
confirmButtonText: '知道了',
})
}
const getResultTagType = (result,status) => {
const typeMap = {
0: 'info',
......@@ -367,7 +383,6 @@ const viewDetail = async (row) => {
res.data.items.forEach(item=>{
item.picArr = item.picUrl.split(',')
//item.picArr = ['https://hhzj.lgyzpt.com/huaiHuaPc/assets/logo-D9UGterv.png','https://hhzj.lgyzpt.com/huaiHuaPc/assets/bg-C097ZT0U.png']
item.furl = item.picArr[0]||''
})
......@@ -381,6 +396,12 @@ const handlePageChange = (page) => {
}
const handleClose = () => {
const videos = document.querySelectorAll('video');
videos.forEach(video => {
video.pause();
video.currentTime = 0;
});
detailForm.isShow = false
}
......
......@@ -397,7 +397,7 @@ html,body{
left: 0;
top: 0;
background: rgb(0, 0, 0, 0.5);
z-index: 99999;
z-index: 999;
display: none;
}
.waittingDiv .inner{
......
......@@ -7,7 +7,7 @@
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>江苏移动</title>
<link rel="stylesheet" href="https://xpo.oss-cn-beijing.aliyuncs.com/huaian/css/vant.css"/>
<link rel="stylesheet" href="css/demo.css?0909019011131">
<link rel="stylesheet" href="css/demo.css?67676">
</head>
<body>
......
import request from '../../request'
/**
*
*/
export function queryAllMissionRecord() {
return request({
url: 'hallserver/companyJob/queryAllCompanyJob',
data: {}
})
}
\ No newline at end of file
import request from '../../request'
/**
* 全部商机-列表查询
*/
export function queryAllBusi(data) {
return request({
url: '/compass/api/opportunity/page',
data,
})
}
/**
* 全部商机-数据统计
*/
export function queryAllBusiStatistics(data) {
return request({
url: '/compass/api/opportunity/statistics',
data,
})
}
/**
* 全部商机-查询商机标签列表
*/
export function queryBusiLabel(data) {
return request({
url: '/compass/api/opportunity/tag/page',
data,
})
}
\ No newline at end of file
import request from '../../request'
/**
* 查询区域列表
* 1-省级,2-市级,3-区级,4-网格级
*/
export function queryAllArea(data) {
return request({
url: '/compass/api/common/areas/level?areaLevel='+data.areaLevel+'&parentAreaCode='+data.parentAreaCode,
method: 'GET'
})
}
/**
* 当前用户权限获取下级区域层级结构
*/
export function queryUserArea(data) {
return request({
url: '/compass/api/system/area/permission/hierarchy',
data,
})
}
/**
* 商机状态列表
*/
export function queryBusiStatus(data) {
return request({
url: '/compass/api/common/enums/opportunity-statuses',
method: 'GET',
data,
})
}
\ No newline at end of file
import request from '../../request'
/**
* 资金管理-发票管理-开票订单查询
* @returns {AxiosPromise}
*/
export function queryTicketOrderList() {
return request({
url: 'hallserver/v1/invoiceApply/queryCompanyOrder',
data: {}
})
}
\ No newline at end of file
import * as business from './business'
import * as grid from './grid'
import * as person from './person'
import * as account from './account'
import * as login from '../login'
import * as common from './common'
export default {
...account,
...business,
...person,
...login,
...grid,
...common
}
\ No newline at end of file
import request from '../../request'
/**
*
*/
export function companyInfoQuery(companyId) {
return request({
url: 'hallserver/hallCompanyInfo/getCompanyInfo',
data: {
'companyId': companyId
}
})
}
import request from './request'
/**
* 退出登录
*/
export function logout() {
return request({
url: 'hallserver/admin/logout',
data: {}
})
}
/**
* 登录
* @param loginName
* @param password
*/
export function login(data) {
return request({
url: 'compass/api/auth/login',
data,
})
}
/**
* 获取登录验证码
* @param loginName
* @param password
*/
export function loginCode(data) {
return request({
url: 'hallserver/admin/loginCode',
data,
})
}
/**
* 获取路由权限
* @returns {AxiosPromise}
*/
export function getMenus() {
return request({
url: 'hallserver/admin/function',
data: {}
})
}
import axios from "axios";
import { MessageBox } from "element-ui";
import router from "@/router";
const service = axios.create({
baseURL: '/',
method: "post",
timeout: 150000,
withCredentials: true,
});
//请求拦截
service.interceptors.request.use(
(config) => {
if (!config.headers["Content-Type"])
config.headers["Content-Type"] = "application/json;charset=utf-8";
if (localStorage.pcUserInfo) {
let userInfo = JSON.parse(localStorage.pcUserInfo);
config.headers["x-access-token"] = userInfo.token
}
return config;
},
(error) => {
Promise.reject(error);
}
);
let ifCanShow = true; //为了防止页面有异常情况时,多个接口请求导致弹窗多次的问题
let catchFun = function (msg) {
if (!ifCanShow) {
return;
}
ifCanShow = false;
MessageBox.confirm(msg, "提示", {
showClose: false,
closeOnPressEscape: false,
closeOnClickModal: false,
showCancelButton: false,
}).then(() => {
ifCanShow = true;
router.push({ path: "/login" });
});
};
//响应拦截
service.interceptors.response.use(
(response) => {
console.log(response);
if (response.status === 200) {
if (response.data.code == "401") {
//登陆失效,重新登陆
catchFun("账户状态异常");
} else if (response.data.code == "133") {
//灰名单
MessageBox.alert(response.data.msg, "状态异常/错误提示", {
dangerouslyUseHTMLString: true,
});
} else {
if (response.data instanceof Blob) {
return new Promise(function (resolve, reject) {
var r = new FileReader();
var resData = response.data;
if (response.config.url.indexOf("poster/createPoster") >= 0) {
if (resData.type == "application/json") {
r.readAsText(resData);
} else {
r.readAsDataURL(resData);
}
} else {
r.readAsText(resData);
}
r.onload = function () {
let res = {};
//PK 为二进制压缩包(ZIP)导出数据流
if (
escape(r.result).indexOf("%u") == 0 ||
escape(r.result).indexOf("PK") == 0 ||
r.result.indexOf("pdf") >= 0 ||
r.result.indexOf("PDF") >= 0 ||
r.result.indexOf("data:image") >= 0
) {
res.type = "blob";
res.value = resData;
} else {
res.type = "object";
res.value = JSON.parse(r.result);
}
resolve(res);
};
}).catch((e) => {});
} else {
return {
url: response.config.url,
...response.data,
};
}
}
} else if (response.status === 302) {
catchFun("登陆失效,请重新登陆");
} else if (response.status === 401 || response.status == 403) {
catchFun("账户状态异常");
} else {
if (sessionStorage.notFirstIn) {
catchFun("网络异常,请稍后再试");
}
}
},
(error) => {
if (sessionStorage.notFirstIn) {
catchFun("网络异常,请稍后再试");
}
}
);
export default service;
......@@ -60,7 +60,7 @@
<el-dialog
:title="editingAccount ? '编辑账号' : '添加账号'"
:visible.sync="isAddDialogOpen"
width="600px"
width="800px"
>
<el-form :model="accountForm" :rules="accountRules" ref="accountForm" label-width="100px">
<el-row :gutter="20">
......@@ -95,11 +95,11 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属区域" prop="region">
<el-input
v-model="accountForm.region"
placeholder="请输入所属区域"
></el-input>
<el-form-item label="状态" prop="region">
<el-select v-model="accountForm.status">
<el-option label="启用" value="active"></el-option>
<el-option label="禁用" value="inactive"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
......@@ -124,12 +124,58 @@
</el-col>
</el-row>
<el-form-item label="状态" prop="status">
<el-select v-model="accountForm.status" style="width: 100%;">
<el-option label="启用" value="active"></el-option>
<el-option label="禁用" value="inactive"></el-option>
</el-select>
</el-form-item>
<el-row :gutter="20">
<el-col :span="30">
<el-form-item label="所属区域" prop="region">
<template v-if="accountForm.cityArr.length>0">
<el-select
v-model="accountForm.city"
placeholder="选择地市"
@change="(value)=>{cityChange(value,'person')}"
:disabled="getData.city!=''"
style="margin-right: 10px"
clearable>
<el-option
v-for="item in accountForm.cityArr"
:key="item.value"
:label="item.name"
:value="item.value"
></el-option>
</el-select>
</template>
<template v-if="accountForm.countyArr.length>0">
<el-select
v-model="accountForm.county"
placeholder="选择区县"
@change="(value)=>{countyChange(value,'person')}"
:disabled="getData.county!=''"
style="margin-right: 10px"
clearable>
<el-option
v-for="item in accountForm.countyArr"
:key="item.value"
:label="item.name"
:value="item.value"
></el-option>
</el-select>
</template>
<template v-if="accountForm.gridArr.length>0">
<el-select
v-model="accountForm.grid"
placeholder="选择网格"
:disabled="getData.grid!=''"
clearable>
<el-option
v-for="item in accountForm.gridArr"
:key="item.value"
:label="item.name"
:value="item.value"
></el-option>
</el-select>
</template>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -162,6 +208,14 @@ export default {
region: '',
phone: '',
email: '',
city: '',
cityArr: this.addressStoreData,
county: '',
countyArr: [],
grid: '',
gridArr: [],
status: 'active'
},
accountRules: {
......@@ -174,10 +228,75 @@ export default {
region: [
{ required: true, message: '请输入所属区域', trigger: 'blur' }
]
}
},
getData:{
city: '',
cityName: '',
county: '',
countyName: '',
grid: '',
gridName: '',
},
}
},
created(){
this.setAddressShow()
},
methods: {
setAddressShow(){
let ad = this.accountForm
let gd = this.getData
if(gd.city){
ad.city = gd.city
ad.cityArr.forEach(item=>{
if(item.value == ad.city){
ad.countyArr = item.children
}
})
if(gd.county){
ad.county = gd.county
ad.countyArr.forEach(item=>{
if(item.value == ad.county){
ad.gridArr = item.children
}
})
if(ad.gridArr.length == 1){
gd.grid = 'moren'
}
if(gd.grid){
ad.grid = gd.grid
}
}
}
},
cityChange(value){
let ad = this.accountForm
ad.city = value
ad.county = ''
ad.grid = ''
ad.cityArr.forEach(item=>{
if(item.value == ad.city){
ad.countyArr = item.children
}
})
},
countyChange(value){
let ad = this.accountForm
ad.county = value
ad.grid = ''
ad.countyArr.forEach(item=>{
if(item.value == ad.county){
ad.gridArr = item.children
}
})
},
editAccount(account) {
this.editingAccount = account
this.accountForm = { ...account }
......
......@@ -18,8 +18,13 @@ Vue.component('Pagination', Pagination)
Vue.component('CascadingRegionSelector', CascadingRegionSelector)
Vue.component('ThreeLevelRegionSelector', ThreeLevelRegionSelector)
import addressData from '@/assets/js/stores/addressData'
Vue.prototype.addressStoreData = addressData
import storesData from '@/assets/js/stores/index'
import apiInterface from '@/assets/js/api/interface'
import common from '@/assets/js/const/common'
Vue.prototype.storesData = storesData
Vue.prototype.apiReq = apiInterface
Vue.prototype.common = common
Vue.config.productionTip = false
......
......@@ -73,7 +73,7 @@ const router = new VueRouter({
// 路由守卫
router.beforeEach((to, from, next) => {
// 检查是否已登录(演示模式下允许访问)
const isAuthenticated = localStorage.getItem('user') || sessionStorage.getItem('demoMode')
const isAuthenticated = localStorage.getItem('tokenInfo')
if (to.path !== '/login' && !isAuthenticated) {
next('/login')
......
......@@ -22,17 +22,6 @@
<div class="filter-content">
<el-row :gutter="24">
<el-col :span="3">
<el-cascader
v-model="selectedRegion"
:options="regionOptions"
:props="{ checkStrictly: true, value: 'name', label: 'name' }"
placeholder="请选择区域"
clearable
class="region-cascader"
></el-cascader>
</el-col>
<el-col :span="3">
<div class="search-wrapper">
<el-input
v-model="selectedGridName"
......@@ -53,6 +42,37 @@
/>
</div>
</el-col>
<el-col :span="3" v-if="addressStore.cityArr.length>0">
<el-select
v-model="addressStore.city"
placeholder="选择地市"
@change="cityChange"
:disabled="getData.city!=''"
clearable>
<el-option
v-for="item in addressStore.cityArr"
:key="item.value"
:label="item.name"
:value="item.value"
></el-option>
</el-select>
</el-col>
<el-col :span="3" v-if="addressStore.countyArr.length>0">
<el-select
v-model="addressStore.county"
placeholder="选择区县"
@change="countyChange"
:disabled="getData.county!=''"
clearable>
<el-option
v-for="item in addressStore.countyArr"
:key="item.value"
:label="item.name"
:value="item.value"
></el-option>
</el-select>
</el-col>
</el-row>
</div>
</el-card>
......@@ -96,11 +116,25 @@ export default {
name: 'GridQuery',
data() {
return {
addressStore:{
city: '',
cityName: '',
cityArr: this.addressStoreData,
county: '',
countyName: '',
countyArr: [],
},
getData:{
city: '',
cityName: '',
county: '',
countyName: ''
},
selectedRegion: [],
selectedGrid: '',
selectedGridName: '',
tableData: [],
pageStore:{
currentPage: 1,
......@@ -110,9 +144,52 @@ export default {
}
},
created(){
this.regionOptions = this.addressStoreData
},
methods: {
setAddressShow(){
let ad = this.addressStore
let gd = this.getData
if(gd.city){
ad.city = gd.city
ad.cityArr.forEach(item=>{
if(item.value == ad.city){
ad.countyArr = item.children
}
})
if(gd.county){
ad.county = gd.county
ad.countyArr.forEach(item=>{
if(item.value == ad.county){
ad.gridArr = item.children
}
})
if(ad.gridArr.length == 1){
gd.grid = 'moren'
}
if(gd.grid){
ad.grid = gd.grid
}
}
}
},
cityChange(value){
let ad = this.addressStore
ad.city = value
ad.county = ''
ad.grid = ''
ad.cityArr.forEach(item=>{
if(item.value == ad.city){
ad.countyArr = item.children
}
})
},
handleQuery() {
this.currentPage = 1
this.$message.success('查询成功')
......
......@@ -233,24 +233,6 @@
<el-button @click="isForgotPasswordDialogVisible = false">确定</el-button>
</span>
</el-dialog>
<div class="login-demo-info">
<p class="login-demo-title">测试账号:</p>
<div class="login-demo-accounts">
<p>网格管理员: grid001 / 123456</p>
<p>区县管理员: county001 / 123456</p>
<p>地市管理员: city001 / 123456</p>
<p>省级管理员: province001 / 123456</p>
</div>
<p class="login-demo-title" style="margin-top: 16px;">手机验证码登录:</p>
<div class="login-demo-accounts">
<p>手机号: 13812345678 (对应网格管理员)</p>
<p>手机号: 13887654321 (对应区县管理员)</p>
<p>手机号: 13765432109 (对应地市管理员)</p>
<p>手机号: 13654321098 (对应省级管理员)</p>
<p style="color: #E6A23C;">验证码统一为: 123456</p>
</div>
</div>
</div>
</div>
</div>
......@@ -323,20 +305,27 @@ export default {
methods: {
...mapActions(['login']),
async handleLogin() {
let ld = this.loginForm
try {
await this.$refs.loginForm.validate()
this.loading = true
await this.login({
username: this.loginForm.username,
password: this.loginForm.password
})
this.$message.success('登录成功')
this.$router.push('/')
this.apiReq.login({
username: ld.username,
password: ld.password
}).then(res=>{
if(res.code == '200'){
localStorage.setItem('accountInfo',JSON.stringify(res.data.account))
localStorage.setItem('tokenInfo',JSON.stringify(res.data.tokenInfo))
this.$router.push('/')
}else{
this.$message.error(res.message)
}
})
} catch (error) {
console.error('Login error:', error)
this.$message.error(error.message || '登录失败,请稍后重试')
} finally {
this.loading = false
}
......@@ -730,28 +719,6 @@ export default {
font-weight: 500;
}
.login-demo-info {
padding: 20px;
background-color: #f5f7fa;
border-radius: 8px;
.login-demo-title {
font-size: 14px;
margin: 0 0 10px 0;
color: #606266;
}
.login-demo-accounts {
font-size: 12px;
color: #909399;
line-height: 1.8;
p {
margin: 0 0 5px 0;
}
}
}
// 忘记密码弹窗样式
.forgot-password-content {
text-align: center;
......
......@@ -8,12 +8,19 @@ module.exports = {
lintOnSave: process.env.NODE_ENV === 'development',
productionSourceMap: false,
devServer: {
port: 8080,
open: true,
overlay: {
warnings: false,
errors: true
}
proxy: {
'/compass': {
target: 'http://39.107.104.220:8899',
//target: 'https://hall.51xinpai.cn',
changeOrigin: true,
pathRewrite: {
'^/compass': 'compass'
}
}
},
host: '0.0.0.0',
port: '8080',
open: false
},
configureWebpack: {
resolve: {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!