Compare commits
128 Commits
main
...
fix/modify
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
@ -1,98 +1,128 @@
|
|||||||
<template>
|
|
||||||
<div class="header_wrap">
|
|
||||||
<div v-for="(item, index) in data" :key="index" class="header_item">
|
|
||||||
<img :src="item.link" />
|
|
||||||
<div class="data_wrap">
|
|
||||||
<div class="data_title">{{ item.count }}</div>
|
|
||||||
<div class="data_content">{{ item.title }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<SvgIcon size="14px" style="cursor: pointer" name="setting"></SvgIcon>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { defineProps, onMounted } from 'vue'
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
hasColor: {
|
||||||
|
type: Boolean,
|
||||||
|
default: () => false,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
function initRem() {
|
||||||
|
const designWidth = 1440
|
||||||
|
const rempPx = 16
|
||||||
|
const scale = window.innerWidth / designWidth
|
||||||
|
document.documentElement.style.fontSize = `${scale * rempPx}px`
|
||||||
|
}
|
||||||
|
onMounted(() => {
|
||||||
|
initRem()
|
||||||
|
})
|
||||||
|
|
||||||
const data = [
|
const data = [
|
||||||
{
|
{
|
||||||
link: "/src/assets/images/taskCount.png",
|
link: 'count',
|
||||||
title: "任务包总数",
|
title: '任务总数',
|
||||||
count: 6399,
|
count: 6399,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
link: "/src/assets/images/nocheck.png",
|
link: 'wait',
|
||||||
title: "未标记",
|
title: '待审批',
|
||||||
count: 6290,
|
count: 6290,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
link: "/src/assets/images/check.png",
|
link: 'done',
|
||||||
title: "已标记",
|
title: '已审批',
|
||||||
count: 109,
|
count: 109,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
link: "/src/assets/images/status.png",
|
link: 'resolve',
|
||||||
title: "真",
|
title: '通过',
|
||||||
count: 3290,
|
count: 3290,
|
||||||
|
color: '#03c984',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
link: "/src/assets/images/status.png",
|
link: 'reject',
|
||||||
title: "假",
|
title: '不通过',
|
||||||
count: 3000,
|
count: 3000,
|
||||||
|
color: '#ff8b8b',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
link: "/src/assets/images/pic.png",
|
link: 'reimg',
|
||||||
title: "相似度100%图",
|
title: '图片重复数',
|
||||||
count: 230,
|
count: 230,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
link: "/src/assets/images/xiaojie.png",
|
link: 'breakcount',
|
||||||
title: "小结重复数",
|
title: '小结重复数',
|
||||||
count: 365,
|
count: 365,
|
||||||
},
|
},
|
||||||
];
|
]
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="header_wrap">
|
||||||
|
<div v-for="(item, index) in data" :key="index" class="header_item">
|
||||||
|
<SvgIcon :name="item.link" />
|
||||||
|
<div class="data_wrap">
|
||||||
|
<div class="data_title" :style="hasColor ? `color:${item.color || ''}` : ''">
|
||||||
|
{{ item.count }}
|
||||||
|
</div>
|
||||||
|
<div class="data_content">
|
||||||
|
{{ item.title }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<SvgIcon size="14px" style="cursor: pointer" name="setting" class="settingSvg" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
<style scoped lang="less">
|
<style scoped lang="less">
|
||||||
.header_wrap {
|
.header_wrap {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row nowrap;
|
flex-flow: row nowrap;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: 20px 30px;
|
padding: 1rem 1rem 1rem 3.125rem;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
|
||||||
.header_item {
|
.header_item {
|
||||||
width: 10%;
|
min-width: 10%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: row nowrap;
|
flex-flow: row nowrap;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
img{
|
svg {
|
||||||
width: 50px;
|
width: 2.75rem !important;
|
||||||
height: 50px
|
height: 2.75rem !important;
|
||||||
}
|
}
|
||||||
.data_wrap {
|
.data_wrap {
|
||||||
|
margin-left: .8125rem;
|
||||||
.data_title {
|
.data_title {
|
||||||
font-size: 20px;
|
font-size: 1.125rem;
|
||||||
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC-Bold;
|
font-family: HarmonyOS Sans SC, HarmonyOS Sans SC-Bold;
|
||||||
font-weight: Bold;
|
font-weight: 900;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
color: #202020;
|
color: #202020;
|
||||||
line-height: 23px;
|
line-height: 1.4375rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
.data_content {
|
.data_content {
|
||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
font-size: 14px;
|
font-size: .75rem;
|
||||||
font-family: PingFang SC, PingFang SC-Regular;
|
font-family: PingFang SC, PingFang SC-Regular;
|
||||||
font-weight: Regular;
|
font-weight: 500;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #202020;
|
color: #202020;
|
||||||
line-height: 16px;
|
line-height: 1rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.settingSvg{
|
||||||
|
width: 1rem !important;
|
||||||
|
height: 1rem !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -0,0 +1,30 @@
|
|||||||
|
<template>
|
||||||
|
<div class="ip_box" :style="canClick?'cursor: pointer;':''">
|
||||||
|
<img :src="IPImg" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import IPImg from "@/assets/images/IP.png";
|
||||||
|
import { defineProps } from "vue";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
canClick: {
|
||||||
|
type: Boolean,
|
||||||
|
default: () => false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.ip_box {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 80px;
|
||||||
|
right: 20px;
|
||||||
|
z-index: 1000;
|
||||||
|
img {
|
||||||
|
width: 80px;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
<script lang="ts" setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import { useConfig } from '@/store/modules/asideConfig'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
value: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
(e: 'update:value', value: boolean): void
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const configStore = useConfig()
|
||||||
|
|
||||||
|
const download = ref(props.value)
|
||||||
|
|
||||||
|
function onChange(value: boolean) {
|
||||||
|
emit('update:value', value)
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="download">
|
||||||
|
<span class="download-title">{{ label }}</span>
|
||||||
|
<n-switch v-model:value="download" @update:value="onChange" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.download {
|
||||||
|
display: flex;
|
||||||
|
padding: 10px;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
|
&-title {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
|
||||||
|
<script>
|
||||||
|
import { reactive, toRefs, onMounted } from "vue";
|
||||||
|
export default {
|
||||||
|
setup() {
|
||||||
|
let state = reactive({});
|
||||||
|
|
||||||
|
let methods = {
|
||||||
|
init() {
|
||||||
|
function getQueryParamsNew() {
|
||||||
|
const params = new URLSearchParams(window.location.search);
|
||||||
|
let paramsObj = {};
|
||||||
|
for (const [key, value] of params.entries()) {
|
||||||
|
if (paramsObj.hasOwnProperty(key)) {
|
||||||
|
if (Array.isArray(paramsObj[key])) {
|
||||||
|
paramsObj[key].push(value);
|
||||||
|
} else {
|
||||||
|
paramsObj[key] = [paramsObj[key], value];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
paramsObj[key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return paramsObj;
|
||||||
|
}
|
||||||
|
var queryParamsNew = getQueryParamsNew();
|
||||||
|
state.queryParamsNew = queryParamsNew;
|
||||||
|
|
||||||
|
const lng = queryParamsNew.lng; //经度
|
||||||
|
const lat = queryParamsNew.lat; // 纬度
|
||||||
|
// 初始化地图
|
||||||
|
const center = new qq.maps.LatLng(lat, lng);
|
||||||
|
const map = new qq.maps.Map(document.getElementById("map-container"), {
|
||||||
|
center,
|
||||||
|
zoom: 15,
|
||||||
|
});
|
||||||
|
|
||||||
|
// 创建坐标点
|
||||||
|
const marker = new qq.maps.Marker({
|
||||||
|
position: center,
|
||||||
|
map: map,
|
||||||
|
});
|
||||||
|
// 创建信息窗口
|
||||||
|
const infoWin = new qq.maps.InfoWindow({
|
||||||
|
map: map,
|
||||||
|
position: center,
|
||||||
|
});
|
||||||
|
infoWin.setContent(
|
||||||
|
`<div class="detailshow" >${queryParamsNew.name}</div>`
|
||||||
|
);
|
||||||
|
infoWin.open();
|
||||||
|
qq.maps.event.addListener(marker, "click", function () {
|
||||||
|
infoWin.open();
|
||||||
|
infoWin.setContent(
|
||||||
|
`<div class="detailshow" >${queryParamsNew.name}</div>`
|
||||||
|
);
|
||||||
|
infoWin.setPosition(centerLatLng);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
onMounted(() => {
|
||||||
|
methods.init();
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
...toRefs(state),
|
||||||
|
...methods,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
components: {},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<div class="mapmain">
|
||||||
|
<div id="map-container" style="width: 100%; height: 100%"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style >
|
||||||
|
.layout-sider {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.layout-main-header {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.mapmain {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.detailshow {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||