chengyu 2 weeks ago
commit 58eee70cfb
  1. 3
      folder-alias.json
  2. BIN
      web/src/assets/images/datatopbj.png
  3. 1
      web/src/main.js
  4. 5
      web/src/router/index.js
  5. 28
      web/src/router/routes.js
  6. 15
      web/src/utils/rem.js
  7. 17
      web/src/views/large-screen/forward.vue
  8. 40
      web/src/views/large-screen/index.vue
  9. 55
      web/src/views/sitePersonnel/access-control/api.js
  10. 81
      web/src/views/sitePersonnel/access-control/index.vue
  11. 101
      web/src/views/sitePersonnel/access-control/options.js
  12. 55
      web/src/views/sitePersonnel/work-attendance/api.js
  13. 84
      web/src/views/sitePersonnel/work-attendance/index.vue
  14. 81
      web/src/views/sitePersonnel/work-attendance/options.js
  15. 10
      web/src/views/vehicleMachinery/api.js
  16. 28
      web/src/views/vehicleMachinery/car-manage/index.vue
  17. 25
      web/src/views/vehicleMachinery/construction-achinery/index.vue
  18. 98
      web/src/views/vehicleMachinery/map.vue
  19. 1
      web/vite.config.js

@ -13,5 +13,8 @@
},
"web/src/views/sitePersonnel/realName": {
"description": "实名制与信息管理"
},
"web/src/views/sitePersonnel/access-control": {
"description": "门禁"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

@ -3,6 +3,7 @@ import Cookies from 'js-cookie'
import App from './App'
import store from './store'
import router from './router'
import "@/utils/rem";
import directive from './directive' // directive
import '@/assets/styles/index.scss' // global css
// 注册指令

@ -36,6 +36,11 @@ export const constantRoutes = [
component: () => import('@/views/error/401'),
hidden: true
},
{
path: '/largeScreen',
component: () => import('@/views/large-screen/index'),
hidden: true
},
// {
// path: '',
// component: Layout,

@ -36,6 +36,34 @@ export default [
link: "https://www.zilber.cn/doc/rp/"
}
},
{
name: "public",
path: "/public",
hidden: true,
redirect: "noRedirect",
component: "Layout",
alwaysShow: false,
meta: {
title: "详情",
icon: "tree-table",
noCache: false,
link: null
},
children: [{
name: "map",
path: "map",
hidden: true,
component: "vehicleMachinery/map",
meta: {
title: "设备详情",
breadcrumb: false,
icon: "tree-table",
noCache: false,
link: null
}
},
]
},
{
name: "form",
path: "/form",

@ -0,0 +1,15 @@
// rem等比适配配置文件
// 基准大小
const baseSize = 16;
// 设置 rem 函数
function setRem() {
// let rem = vW * basePc; // 以默认比例值乘以当前窗口宽度,得到该宽度下的相应font-size值
document.documentElement.style.fontSize = window.innerWidth / 1920 * baseSize + "px"
}
// 初始化
setRem();
// 改变窗口大小时重新设置 rem
window.addEventListener('resize', () => {
setRem();
})
//存放在utils文件夹,在main.js中引入

@ -0,0 +1,17 @@
<template>
</template>
<script setup>
import { onBeforeMount } from 'vue'
import { useRouter } from 'vue-router'
const router = useRouter()
onBeforeMount(() => {
router.replace({
path: '/largeScreen',
})
})
</script>
<style scoped lang='scss'></style>

@ -0,0 +1,40 @@
<template>
<div class="data-screen" element-loading-text="加载中请稍后..." >
<div class="topheader">
<div class="gradient">
智慧工地数据大屏
</div>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, reactive, nextTick } from 'vue'
const state = reactive({
loading: false
})
</script>
<style scoped lang='scss'>
.topheader {
width: 100%;
height: 158px;
background: url('../../assets/images/datatopbj.png') no-repeat;
background-size: 100% 100%;
display: flex;
justify-content: center;
font-weight: 400;
font-size: 52px;
padding-top: 20px;
}
.gradient {
background: linear-gradient(270.0000000000008deg, #F2F7FF 0%, #D4F7FF 50%, #F2F7FF 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.data-screen {
width: 100%;
height: 100vh;
background: #040614;
}
</style>

@ -0,0 +1,55 @@
import axios from '@/utils/request'
// 查询分页数据:
export const getRecordPage = (arg) => {
return axios.request({
url: '/dahua/accessControl/getRecordPage',
method: 'post',
data: {
...arg,
pageNum:arg.current,
pageSize:arg.limit,
},
dataType: 'json'
})
}
// 查询详情数据:
export const iuserGetById = (arg) => {
return axios.request({
url: `/iuser/getById`,
method: 'get',
params: arg,
dataType: 'json'
})
}
// 添加数据:
export const iuserAdd = (arg) => {
return axios.request({
url: '/iuser/add',
method: 'post',
data: arg,
dataType: 'json'
})
}
// 修改数据:
export const IuserUpdate = (arg) => {
return axios.request({
url: '/iuser/update',
method: 'put',
data: arg,
dataType: 'json'
})
}
// 删除数据:
export const iuserDelete = (arg) => {
return axios.request({
url: '/iuser/delete',
method: 'delete',
params: {
id: arg.id[0]
},
dataType: 'json'
})
}

@ -0,0 +1,81 @@
<script setup>
import { onMounted, reactive } from 'vue'
import { getRecordPage, iuserAdd, IuserUpdate, iuserDelete, iuserGetById } from './api'
import { baseModelOptions, baseFilterOptions, stausList } from './options'
// const { proxy } = getCurrentInstance();
const state = reactive({
baseModelOptions: baseModelOptions(),
baseFilterOptions: baseFilterOptions(),
title: "实名管理",
baseModelName: '实名信息',
addBtnName: '新增人员',
editBtnName: '',
delBtnName: '',
primaryKey: 'id',
getTableFn: getRecordPage,
addFn: iuserAdd,
editFn: IuserUpdate,
deleteFn: iuserDelete,
detailFn: iuserGetById,
showEditBtn: false,
showDeleteBtn: false,
columnCount: 1,
hideControl: true,
showAddBtn: false,
hideselection: true,
rowControl: {
showEditBtn: false,
showDelBtn: false
},
permission: {//
add: 'accessControl:page:list',
edit: 'accessControl:page:list',
delete: 'accessControl:page:list',
detail: 'accessControl:page:list',
},
pageInfo: { total: 0, base: { limit: 8, current: 1 } },
tableDataFormatter: function (params, res) {
res.data.total = res.data.totalRows
res.data.list = res.data.pageData
return res.data.list
},
})
onMounted(() => {
})
</script>
<template>
<div class="app-container">
<BaseTablePage :tableOptions="state">
<template v-slot:column>
<el-table-column type="index" align="center" label="序号" width="70" />
<el-table-column label="姓名" align="center" prop="personName" />
<el-table-column label="进出门类型" align="center" prop="enterOrExit">
<template #default="scope">
<span>{{ stausList().find((item) =>
item.value == scope.row.openType)?.label || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="刷卡时间" align="center" prop="startSwingTime" />
<el-table-column label="人员类型" align="center" prop="imageType">
<template #default="scope">
<span>{{ scope.row.imageType == 1 ? '内部人员' : scope.row.imageType == 2 ? '访客' : '-' }}</span>
</template>
</el-table-column>
<el-table-column label="是否佩戴口罩" align="center" prop="createTime">
<template #default="scope">
<span>{{ scope.row.maskState == 3 ? '带口罩' : scope.row.maskState == 2 ? '没带口罩' : '未识别' }}</span>
</template>
</el-table-column>
<el-table-column label="是否超温" align="center" prop="overTemp">
<span>{{ scope.row.overTemp ? '是' : '否' }}</span>
</el-table-column>
</template>
</BaseTablePage>
</div>
</template>
<style scoped></style>

@ -0,0 +1,101 @@
export const baseModelOptions = () => {
return [
]
}
export const stausList = () => {
return [
{ "value": 42, "label": "合法密码开门" },
{ "value": 43, "label": "非法密码开门" },
{ "value": 45, "label": "合法指纹开门" },
{ "value": 46, "label": "非法指纹开门" },
{ "value": 48, "label": "远程开门" },
{ "value": 49, "label": "按钮开门" },
{ "value": 50, "label": "钥匙开门" },
{ "value": 51, "label": "合法刷卡开门" },
{ "value": 52, "label": "非法刷卡开门" },
{ "value": 53, "label": "门磁事件" },
{ "value": 54, "label": "异常开门" },
{ "value": 55, "label": "异常关门" },
{ "value": 56, "label": "正常关门" },
{ "value": 57, "label": "正常开门" },
{ "value": 59, "label": "对讲请求事件" },
{ "value": 61, "label": "人脸合法开门" },
{ "value": 62, "label": "人脸非法开门" },
{ "value": 1421, "label": "RFID有源合法" },
{ "value": 1422, "label": "RFID无源合法" },
{ "value": 1423, "label": "RFID有源非法" },
{ "value": 1424, "label": "RFID无源非法" },
{ "value": 1433, "label": "黑名单事件" },
{ "value": 1436, "label": "人证合法开门" },
{ "value": 1437, "label": "人证非法开门" },
{ "value": 1438, "label": "人证和身份证非法开门" },
{ "value": 1439, "label": "人证和身份证合法开门" },
{ "value": 1448, "label": "RFID感应事件" },
{ "value": 1449, "label": "RFID非法感应事件" },
{ "value": 1450, "label": "RFID按键事件" },
{ "value": 1451, "label": "RFID非法按键事件" },
{ "value": 1455, "label": "先刷卡后密码合法开门" },
{ "value": 1456, "label": "先刷卡后密码非法开门" },
{ "value": 1461, "label": "刷卡+指纹组合合法开门" },
{ "value": 1462, "label": "刷卡+指纹组合非法开门" },
{ "value": 1463, "label": "多人合法开门" },
{ "value": 1464, "label": "多人非法开门" },
{ "value": 1467, "label": "人员编号+密码合法开门" },
{ "value": 1468, "label": "人员编号+密码非法开门" },
{ "value": 1469, "label": "人脸+密码合法开门" },
{ "value": 1470, "label": "人脸+密码非法开门" },
{ "value": 1471, "label": "指纹+密码合法开门" },
{ "value": 1472, "label": "指纹+密码非法开门" },
{ "value": 1473, "label": "指纹+人脸合法开门" },
{ "value": 1474, "label": "指纹+人脸非法开门" },
{ "value": 1475, "label": "刷卡+人脸合法开门" },
{ "value": 1476, "label": "刷卡+人脸非法开门" },
{ "value": 1487, "label": "指纹+人脸+密码合法开门" },
{ "value": 1488, "label": "指纹+人脸+密码非法开门" },
{ "value": 1489, "label": "刷卡+人脸+密码合法开门" },
{ "value": 1490, "label": "刷卡+人脸+密码非法开门" },
{ "value": 1491, "label": "刷卡+指纹+密码合法开门" },
{ "value": 1492, "label": "刷卡+指纹+密码非法开门" },
{ "value": 1493, "label": "卡+指纹+人脸组合合法开门" },
{ "value": 1494, "label": "卡+指纹+人脸组合非法开门" },
{ "value": 4603, "label": "卡+指纹+人脸+密码组合合法开门" },
{ "value": 4604, "label": "卡+指纹+人脸+密码组合非法开门" },
{ "value": 4626, "label": "人脸+安全帽合法开门" },
{ "value": 4627, "label": "人脸+安全帽非法开门" },
{ "value": 10001, "label": "健康码合法开门" },
{ "value": 10002, "label": "异常健康码开门" }
]
}
export const baseFilterOptions = () => {
return [
{
tag: 'el-input',
label: '姓名:',
key: 'personName',
value: '',
default: '',
rules: [
{ required: true, message: '请输入姓名', trigger: 'blur' },
],
attribute: {//属性
type: 'text',
placeholder: '请输入姓名',
},
},
{
tag: 'BaseSelect',
label: '开门类型:',
key: 'openType',
value: '',
default: '',
rules: [
{ required: true, message: '请选择开门类型', trigger: 'blur' },
],
attribute: { //属性
placeholder: '请选择开门类型',
options: stausList()
},
},
]
}

@ -0,0 +1,55 @@
import axios from '@/utils/request'
// 查询分页数据:
export const getRecordPage = (arg) => {
return axios.request({
url: '/dahua/attendance/getRecordPage',
method: 'post',
data: {
...arg,
pageNum:arg.current,
pageSize:arg.limit,
},
dataType: 'json'
})
}
// 查询详情数据:
export const iuserGetById = (arg) => {
return axios.request({
url: `/iuser/getById`,
method: 'get',
params: arg,
dataType: 'json'
})
}
// 添加数据:
export const iuserAdd = (arg) => {
return axios.request({
url: '/iuser/add',
method: 'post',
data: arg,
dataType: 'json'
})
}
// 修改数据:
export const IuserUpdate = (arg) => {
return axios.request({
url: '/iuser/update',
method: 'put',
data: arg,
dataType: 'json'
})
}
// 删除数据:
export const iuserDelete = (arg) => {
return axios.request({
url: '/iuser/delete',
method: 'delete',
params: {
id: arg.id[0]
},
dataType: 'json'
})
}

@ -0,0 +1,84 @@
<script setup>
import { onMounted, reactive } from 'vue'
import { getRecordPage, iuserAdd, IuserUpdate, iuserDelete, iuserGetById } from './api'
import { baseModelOptions, baseFilterOptions, stausList } from './options'
// const { proxy } = getCurrentInstance();
const state = reactive({
baseModelOptions: baseModelOptions(),
baseFilterOptions: baseFilterOptions(),
title: "实名管理",
baseModelName: '实名信息',
addBtnName: '新增人员',
editBtnName: '',
delBtnName: '',
primaryKey: 'id',
getTableFn: getRecordPage,
addFn: iuserAdd,
editFn: IuserUpdate,
deleteFn: iuserDelete,
detailFn: iuserGetById,
showEditBtn: false,
showDeleteBtn: false,
columnCount: 1,
hideControl: true,
showAddBtn: false,
hideselection: true,
rowControl: {
showEditBtn: false,
showDelBtn: false
},
permission: {//
add: 'workAttendance:page:list',
edit: 'workAttendance:page:list',
delete: 'workAttendance:page:list',
detail: 'workAttendance:page:list',
},
pageInfo: { total: 0, base: { limit: 8, current: 1 } },
beforeFilter: (params) => {
//1. 使
return new Promise((resolve) => {
//dosomething...
resolve({
attendanceType:params.attendanceType,
personName: params.personName,
actionTimeAfter:params.params && params.params.length>0?params.params[0]:null,
actionTimeBefore:params.params && params.params.length>0?params.params[1]:null,
})
})
},
tableDataFormatter: function (params, res) {
res.data.total = res.data.totalRows
res.data.list = res.data.pageData
return res.data.list
},
})
onMounted(() => {
})
</script>
<template>
<div class="app-container">
<BaseTablePage :tableOptions="state">
<template v-slot:column>
<el-table-column type="index" align="center" label="序号" width="70" />
<el-table-column label="姓名" align="center" prop="personName" />
<el-table-column label="考勤方式" align="center" prop="enterOrExit">
<template #default="scope">
<span>{{ stausList().find(item => item.value === scope.row.attendanceType)?.label || '-' }}</span>
</template>
</el-table-column>
<el-table-column label="刷卡时间" align="center" prop="reportTime" />
<el-table-column label="考勤点名称" align="center" prop="imageType">
<template #default="scope">
<span>{{ scope.row.siteName }}</span>
</template>
</el-table-column>
</template>
</BaseTablePage>
</div>
</template>
<style scoped></style>

@ -0,0 +1,81 @@
export const baseModelOptions = () => {
return [
]
}
export const stausList = () => {
return [
{ "value": 42, "label": "密码" },
{ "value": 45, "label": "指纹" },
{ "value": 51, "label": "刷卡" },
{ "value": 61, "label": "人脸" },
{ "value": 1436, "label": "人证" },
{ "value": 1439, "label": "人证+身份证" },
{ "value": 1455, "label": "刷卡+密码" },
{ "value": 1461, "label": "刷卡+指纹" },
{ "value": 1463, "label": "多人考勤" },
{ "value": 1467, "label": "人员编号+密码" },
{ "value": 1469, "label": "人脸+密码" },
{ "value": 1471, "label": "指纹+密码" },
{ "value": 1473, "label": "指纹+人脸" },
{ "value": 1475, "label": "刷卡+人脸" },
{ "value": 1487, "label": "指纹+人脸+密码" },
{ "value": 1489, "label": "刷卡+人脸+密码" },
{ "value": 1491, "label": "刷卡+指纹+密码" },
{ "value": 1493, "label": "刷卡+指纹+人脸" },
{ "value": 4603, "label": "刷卡+指纹+人脸+密码" },
{ "value": 4626, "label": "人脸+安全帽" },
{ "value": 10001, "label": "健康码" },
{ "value": 1434, "label": "二维码" },
{ "value": 1441, "label": "蓝牙" },
{ "value": 8888, "label": "车牌" },
{ "value": 8889, "label": "移动打卡" },
{ "value": 8890, "label": "异地打卡" }
]
}
export const baseFilterOptions = () => {
return [
{
tag: 'el-input',
label: '姓名:',
key: 'personName',
value: '',
default: '',
rules: [
{ required: true, message: '请输入姓名', trigger: 'blur' },
],
attribute: {//属性
type: 'text',
placeholder: '请输入姓名',
},
},
{
tag: 'BaseSelect',
label: '考勤类型:',
key: 'attendanceType',
value: '',
default: '',
rules: [
{ required: true, message: '请选择考勤类型', trigger: 'blur' },
],
attribute: { //属性
placeholder: '请选择考勤类型',
options: stausList()
},
},
{
tag: 'el-date-picker',
label: '时间:',
key: 'params',
value: '',
default: '',
attribute: {//属性
valueFormat: "YYYY-MM-DD HH:mm:ss",
type: "datetimerange",
rangeSeparator: "-",
startPlaceholder: "开始时间",
endPlaceholder: "结束时间",
},
},
]
}

@ -0,0 +1,10 @@
import axios from '@/utils/request'
export const vehicletoken = (arg) => {
return axios.request({
url: '/vehicle/token',
method: 'get',
params: arg,
dataType: 'json',
})
}

@ -2,9 +2,10 @@
import { reactive } from 'vue'
import { vehicleList, vehicleAdd, vehicleUpdate, vehicleDelete, vehicleGetById, iproductionplanList } from './api'
import { baseModelOptions, baseFilterOptions } from './options'
import { useRouter } from 'vue-router';
const { proxy } = getCurrentInstance();
const router = useRouter()
const state = reactive({
baseModelOptions: baseModelOptions(),
baseFilterOptions: baseFilterOptions(),
@ -39,6 +40,14 @@ const state = reactive({
pageInfo: { total: 0, base: { limit: 8, current: 1 } },
})
function View(item) {
router.push({
path: "/public/map",
query: {
item:JSON.stringify(item)
}
})
}
</script>
<template>
@ -54,11 +63,11 @@ const state = reactive({
{{ scope.row.equipType == 'WIRED' ? '有线' : scope.row.equipType == 'WIRELESS' ? '无线' : '-' }}
</template>
</el-table-column>
<el-table-column label="司机姓名" align="center" prop="driverName" />
<el-table-column label="司机电话" align="center" prop="driverPhone" />
<el-table-column label="车牌号" align="center" prop="vehicleNumber" />
<el-table-column label="车架号" align="center" prop="carFrame" />
<!-- <el-table-column label="车架号" align="center" prop="carFrame" /> -->
<el-table-column label="激活时间" align="center" prop="activationTime" />
<el-table-column label="设备SIM卡号" align="center" prop="sim" />
<el-table-column label="平台到期时间" align="center" prop="expiration" />
@ -70,18 +79,15 @@ const state = reactive({
</el-table-column>
<el-table-column label="备注" align="center" prop="reMark" />
</template>
<!-- <template #control="baseScope">
<el-table-column label="操作" align="center" width="200" fixed="right">
<template #control="baseScope">
<el-table-column label="操作" align="center" width="150" fixed="right">
<template #default="scope">
<el-button v-hasPermi="['constructionAchinery:page:edit']" type="text" icon="EditPen"
@click="baseScope.handleEdit(scope.$index, scope.row)">
修改
<el-button type="text" icon="View" @click="View(scope.row)">
查看
</el-button>
<el-button v-hasPermi="['constructionAchinery:page:remove']" type="text" icon="Delete"
@click="baseScope.deleteTableData(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</template> -->
</template>
</BaseTablePage>
</div>
</template>

@ -4,7 +4,7 @@ import { vehicleList, vehicleAdd, vehicleUpdate, vehicleDelete, vehicleGetById,
import { baseModelOptions, baseFilterOptions } from './options'
const { proxy } = getCurrentInstance();
const router = useRouter()
const state = reactive({
baseModelOptions: baseModelOptions(),
baseFilterOptions: baseFilterOptions(),
@ -39,6 +39,14 @@ const state = reactive({
pageInfo: { total: 0, base: { limit: 8, current: 1 } },
})
function View(item) {
router.push({
path: "/public/map",
query: {
item:JSON.stringify(item)
}
})
}
</script>
<template>
@ -58,7 +66,7 @@ const state = reactive({
<el-table-column label="司机姓名" align="center" prop="driverName" />
<el-table-column label="司机电话" align="center" prop="driverPhone" />
<el-table-column label="车牌号" align="center" prop="vehicleNumber" />
<el-table-column label="车架号" align="center" prop="carFrame" />
<!-- <el-table-column label="车架号" align="center" prop="carFrame" /> -->
<el-table-column label="激活时间" align="center" prop="activationTime" />
<el-table-column label="设备SIM卡号" align="center" prop="sim" />
<el-table-column label="平台到期时间" align="center" prop="expiration" />
@ -70,18 +78,15 @@ const state = reactive({
</el-table-column>
<el-table-column label="备注" align="center" prop="reMark" />
</template>
<!-- <template #control="baseScope">
<el-table-column label="操作" align="center" width="200" fixed="right">
<template #control="baseScope">
<el-table-column label="操作" align="center" width="150" fixed="right">
<template #default="scope">
<el-button v-hasPermi="['constructionAchinery:page:edit']" type="text" icon="EditPen"
@click="baseScope.handleEdit(scope.$index, scope.row)">
修改
<el-button type="text" icon="View" @click="View(scope.row)">
查看
</el-button>
<el-button v-hasPermi="['constructionAchinery:page:remove']" type="text" icon="Delete"
@click="baseScope.deleteTableData(scope.$index, scope.row)">删除</el-button>
</template>
</el-table-column>
</template> -->
</template>
</BaseTablePage>
</div>
</template>

@ -0,0 +1,98 @@
<script setup>
import { onMounted, reactive } from 'vue'
import { useRoute, useRouter } from 'vue-router';
import { vehicletoken } from './api'
const { proxy } = getCurrentInstance();
const route = useRoute()
const router = useRouter()
const state = reactive({
url: "",
item: JSON.parse(route.query.item),
showLoading: true
})
onMounted(() => {
vehicletoken().then((res) => {
state.showLoading = false
state.url = `https://openh5.aichezaixian.com/?token=${res.msg}&imei=${state.item.imei}&appKey=8FB345B8693CCD00BA15086EBAA101736574BC1ECEB825E0`;
})
})
// &activeTab=CCC
</script>
<template>
<div class="app-container" v-if="state.url" v-loading="state.showLoading" :element-loading-text="'Loading...'"
:element-loading-background="'rgb(34, 58, 106, 0.5)'">
<div style="display: flex;align-items: center;height: 40px;">
<el-button icon="Back" @click="router.back()">
返回</el-button>
</div>
<div style="display: flex;align-items: center;height: calc(100% - 40px);width: 100%;">
<div class="left-detail">
<div>{{ state.item.vehicleNumber ? state.item.vehicleNumber : '-' }}</div>
<div class="left-detail-item">
<span>设备型号</span>
<span>{{ state.item.mcType ? state.item.mcType : '-' }}</span>
</div>
<div class="left-detail-item">
<span>设备类型</span>
<span> {{ state.item.equipType == 'WIRED' ? '有线' : state.item.equipType == 'WIRELESS' ? '无线' : '-'
}}</span>
</div>
<div class="left-detail-item">
<span>司机姓名</span>
<span>{{ state.item.driverName ? state.item.driverName : '-' }}</span>
</div>
<div class="left-detail-item">
<span>司机电话</span>
<span>{{ state.item.driverPhone ? state.item.driverPhone : '-' }}</span>
</div>
</div>
<iframe style="width: calc(100% - 242px);height: 100%;border: none;" :src="state.url"></iframe>
</div>
</div>
</template>
<style scoped lang="scss">
.app-container {
width: 100%;
height: calc(100vh - 50px);
}
.left-detail-item {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 14px;
>span:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
font-size: 14px;
color: #666666;
}
>span:nth-child(2) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 400;
color: #333333;
font-size: 14px;
}
}
.left-detail {
padding: 24px;
height: 100%;
background: red;
width: 242px;
background: #fff;
border-radius: 0px 0px 0px 0px;
>div:nth-child(1) {
font-family: Source Han Sans CN, Source Han Sans CN;
font-weight: 500;
font-size: 16px;
color: #333333;
}
}
</style>

@ -43,6 +43,7 @@ export default defineConfig(({ mode, command }) => {
},
proxy: {
'/dev-api': {
// target: 'http://192.168.2.39:8080',
target: 'http://192.168.2.223:8080',
// target: 'http://39.100.74.100:8080',
changeOrigin: true,

Loading…
Cancel
Save