This commit is contained in:
2024-05-30 09:20:30 +08:00
parent a5a8a38989
commit 6c6c46ac0d
389 changed files with 18695 additions and 16139 deletions

File diff suppressed because one or more lines are too long

View File

@ -1,114 +1,155 @@
<template>
<div class="login">
<div class="zr">{{ message }}</div>
</div>
<div class="login">
<div class="zr">{{ message }}</div>
</div>
</template>
<script setup>
import { getCodeImg } from '@/api/login';
import Cookies from 'js-cookie';
import { encrypt, decrypt } from '@/utils/jsencrypt';
import useUserStore from '@/store/modules/user';
import { useRoute } from 'vue-router';
import axios from 'axios';
import { ref, onMounted, inject, reactive, watch } from 'vue';
import { ElMessage } from 'element-plus';
import { setToken, removeToken } from '@/utils/auth';
import { getCodeImg } from "@/api/login";
import Cookies from "js-cookie";
import { encrypt, decrypt } from "@/utils/jsencrypt";
import useUserStore from "@/store/modules/user";
import { useRoute } from "vue-router";
import axios from "axios";
import { ref, onMounted, inject, reactive, watch } from "vue";
import { ElMessage } from "element-plus";
import { setToken, removeToken } from "@/utils/auth";
import { getRouters } from "@/api/menu";
import ParentView from "@/components/ParentView";
const modules = import.meta.glob("@/views/**/*.vue");
const Route = useRoute();
const userStore = useUserStore();
const router = useRouter();
const { proxy } = getCurrentInstance();
let message = ref('加载中,请稍侯.....');
let message = ref("加载中,请稍侯.....");
let loginForm = ref({
ticket: '',
ticket: "",
});
onMounted(() => {
getName();
getName();
});
function getName(params) {
removeToken();
//获取当前URL
var url = document.location.href;
//声明一个对象
var getRequest = new Object();
//获取?的位置
var index = url.indexOf('?');
if (index != -1) {
//截取出?后面的字符串
var str = url.substr(index + 1);
//将截取出来的字符串按照&变成数组
let strs = str.split('&');
//将get传参存入对象中
for (var i = 0; i < strs.length; i++) {
getRequest[strs[i].split('=')[0]] = strs[i].split('=')[1];
}
}
// if (getRequest.ticket) {
// window.localStorage.setItem('ticket', getRequest.ticket);
// axios
// .get(
// `${serverAPI.baseUrl}/equipment/getUser?ticket=${getRequest.ticket}&url=${serverAPI.api}`
// )
// .then(response => {
// console.log(response);
// if (response.data.data.deptCode == '-1') {
// window.localStorage.setItem('divisions', '370211');
// window.localStorage.setItem('deptName', '青岛西海岸新区');
// window.localStorage.setItem('userName', response.data.data.userName);
// loginForm.value.username = response.data.data.userName;
// } else {
// window.localStorage.setItem('divisions', response.data.data.deptCode);
// window.localStorage.setItem(
// 'deptName',
// response.data.data.deptCode.length == 6
// ? '青岛西海岸新区'
// : response.data.data.deptName
// );
// window.localStorage.setItem('userName', response.data.data.userName);
// loginForm.value.username = response.data.data.userName;
// }
// });
// }
loginForm.value.ticket = getRequest.ticket;
userStore
.login(loginForm.value)
.then(response => {
if (response.data.deptCode == '-1') {
window.localStorage.setItem('divisions', '370211');
window.localStorage.setItem('deptName', '青岛西海岸新区');
window.localStorage.setItem('userName', response.data.userName);
} else {
window.localStorage.setItem('divisions', response.data.deptCode);
window.localStorage.setItem(
'deptName',
response.data.deptCode.length == 6
? '青岛西海岸新区'
: response.data.deptName
);
window.localStorage.setItem('userName', response.data.userName);
}
router.push({ path: redirect.value || '/' });
})
.catch(() => {
loading.value = false;
// 重新获取验证码
if (captchaEnabled.value) {
getCode();
}
// 遍历后台传来的路由字符串,转换为组件对象
import Layout from "@/layout/index";
function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
return asyncRouterMap.filter((route) => {
if (type && route.children) {
route.children = filterChildren(route.children);
}
if (route.component) {
// Layout ParentView 组件特殊处理
if (route.component === "Layout") {
route.component = Layout;
} else if (route.component === "ParentView") {
route.component = ParentView;
} else if (route.component === "InnerLink") {
route.component = InnerLink;
} else {
route.component = loadView(route.component);
}
}
if (route.children != null && route.children && route.children.length) {
route.children = filterAsyncRouter(route.children, route, type);
} else {
delete route["children"];
delete route["redirect"];
}
return true;
});
}
function getName(params) {
removeToken();
//获取当前URL
var url = document.location.href;
//声明一个对象
var getRequest = new Object();
//获取?的位置
var index = url.indexOf("?");
if (index != -1) {
//截取出?后面的字符串
var str = url.substr(index + 1);
//将截取出来的字符串按照&变成数组
let strs = str.split("&");
//将get传参存入对象中
for (var i = 0; i < strs.length; i++) {
getRequest[strs[i].split("=")[0]] = strs[i].split("=")[1];
}
}
// if (getRequest.ticket) {
// window.localStorage.setItem('ticket', getRequest.ticket);
// axios
// .get(
// `${serverAPI.baseUrl}/equipment/getUser?ticket=${getRequest.ticket}&url=${serverAPI.api}`
// )
// .then(response => {
// console.log(response);
// if (response.data.data.deptCode == '-1') {
// window.localStorage.setItem('divisions', '370211');
// window.localStorage.setItem('deptName', '青岛西海岸新区');
// window.localStorage.setItem('userName', response.data.data.userName);
// loginForm.value.username = response.data.data.userName;
// } else {
// window.localStorage.setItem('divisions', response.data.data.deptCode);
// window.localStorage.setItem(
// 'deptName',
// response.data.data.deptCode.length == 6
// ? '青岛西海岸新区'
// : response.data.data.deptName
// );
// window.localStorage.setItem('userName', response.data.data.userName);
// loginForm.value.username = response.data.data.userName;
// }
// });
// }
loginForm.value.ticket = getRequest.ticket;
userStore
.login(loginForm.value)
.then((response) => {
if (response.data.deptCode == "-1") {
window.localStorage.setItem("divisions", "370211");
window.localStorage.setItem("deptName", "青岛西海岸新区");
window.localStorage.setItem("userName", response.data.userName);
} else {
window.localStorage.setItem("divisions", response.data.deptCode);
window.localStorage.setItem(
"deptName",
response.data.deptCode.length == 6 ? "青岛西海岸新区" : response.data.deptName
);
window.localStorage.setItem("userName", response.data.userName);
}
getRouters().then((res) => {
const sdata = JSON.parse(JSON.stringify(res.data));
const rdata = JSON.parse(JSON.stringify(res.data));
const defaultData = JSON.parse(JSON.stringify(res.data));
const defaultRoutes = filterAsyncRouter(defaultData);
router.push({
path:
defaultRoutes[0]["path"] + "/" + defaultRoutes[0]["children"][0].path || defaultRoutes[0]["path"] || "/",
});
});
//router.push({ path: redirect.value || "/" });
})
.catch(() => {
loading.value = false;
// 重新获取验证码
if (captchaEnabled.value) {
getCode();
}
});
}
const loginRules = {
username: [{ required: true, trigger: 'blur', message: '请输入您的账号' }],
password: [{ required: true, trigger: 'blur', message: '请输入您的密码' }],
code: [{ required: true, trigger: 'change', message: '请输入验证码' }],
username: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
code: [{ required: true, trigger: "change", message: "请输入验证码" }],
};
const codeUrl = ref('');
const codeUrl = ref("");
const loading = ref(false);
// 验证码开关
const captchaEnabled = ref(true);
@ -117,57 +158,67 @@ const register = ref(false);
const redirect = ref(undefined);
function handleLogin() {
proxy.$refs.loginRef.validate(valid => {
if (valid) {
loading.value = true;
// 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码
if (loginForm.value.rememberMe) {
Cookies.set('username', loginForm.value.username, { expires: 30 });
Cookies.set('password', encrypt(loginForm.value.password), { expires: 30 });
Cookies.set('rememberMe', loginForm.value.rememberMe, { expires: 30 });
} else {
// 否则移除
Cookies.remove('username');
Cookies.remove('password');
Cookies.remove('rememberMe');
}
// 调用action的登录方法
userStore
.login(loginForm.value)
.then(() => {
router.push({ path: redirect.value || '/' });
})
.catch(() => {
loading.value = false;
// 重新获取验证码
if (captchaEnabled.value) {
getCode();
}
});
}
});
proxy.$refs.loginRef.validate((valid) => {
if (valid) {
loading.value = true;
// 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码
if (loginForm.value.rememberMe) {
Cookies.set("username", loginForm.value.username, { expires: 30 });
Cookies.set("password", encrypt(loginForm.value.password), { expires: 30 });
Cookies.set("rememberMe", loginForm.value.rememberMe, { expires: 30 });
} else {
// 否则移除
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove("rememberMe");
}
// 调用action的登录方法
userStore
.login(loginForm.value)
.then(() => {
router.push({ path: redirect.value || "/" });
})
.catch(() => {
loading.value = false;
// 重新获取验证码
if (captchaEnabled.value) {
getCode();
}
});
}
});
}
function getCode() {
getCodeImg().then(res => {
captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled;
if (captchaEnabled.value) {
codeUrl.value = 'data:image/gif;base64,' + res.img;
loginForm.value.uuid = res.uuid;
}
});
getCodeImg().then((res) => {
captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled;
if (captchaEnabled.value) {
codeUrl.value = "data:image/gif;base64," + res.img;
loginForm.value.uuid = res.uuid;
}
});
}
function getCookie() {
const username = Cookies.get('username');
const password = Cookies.get('password');
const rememberMe = Cookies.get('rememberMe');
loginForm.value = {
username: username === undefined ? loginForm.value.username : username,
password: password === undefined ? loginForm.value.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
};
const username = Cookies.get("username");
const password = Cookies.get("password");
const rememberMe = Cookies.get("rememberMe");
loginForm.value = {
username: username === undefined ? loginForm.value.username : username,
password: password === undefined ? loginForm.value.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
};
}
const loadView = (view) => {
let res;
for (const path in modules) {
const dir = path.split("views/")[1].split(".vue")[0];
if (dir === view) {
res = () => modules[path]();
}
}
return res;
};
getCode();
getCookie();
@ -175,75 +226,75 @@ getCookie();
<style lang="scss" scoped>
.login {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
background-image: url('../assets/images/login-background.jpg');
background-size: cover;
display: flex;
justify-content: center;
align-items: center;
height: 100%;
background-image: url("../assets/images/login-background.jpg");
background-size: cover;
}
.title {
margin: 0px auto 30px auto;
text-align: center;
color: #707070;
font-size: 16px;
font-weight: 400;
margin: 0px auto 30px auto;
text-align: center;
color: #707070;
font-size: 16px;
font-weight: 400;
}
.login-form {
border-radius: 6px;
background: #ffffff;
width: 400px;
padding: 25px 25px 5px 25px;
.el-input {
height: 40px;
input {
height: 40px;
}
}
.input-icon {
height: 39px;
width: 14px;
margin-left: 0px;
border-radius: 6px;
background: #ffffff;
width: 400px;
padding: 25px 25px 5px 25px;
.el-input {
height: 40px;
input {
height: 40px;
}
}
.input-icon {
height: 39px;
width: 14px;
margin-left: 0px;
}
}
.login-tip {
font-size: 13px;
text-align: center;
color: #bfbfbf;
font-size: 13px;
text-align: center;
color: #bfbfbf;
}
.login-code {
width: 33%;
height: 40px;
float: right;
img {
cursor: pointer;
vertical-align: middle;
}
width: 33%;
height: 40px;
float: right;
img {
cursor: pointer;
vertical-align: middle;
}
}
.zr {
position: absolute;
left: 50%;
top: 50%;
font-size: 48px;
color: #fff;
transform: translate(-50%);
position: absolute;
left: 50%;
top: 50%;
font-size: 48px;
color: #fff;
transform: translate(-50%);
}
.el-login-footer {
height: 40px;
line-height: 40px;
position: fixed;
bottom: 0;
width: 100%;
text-align: center;
color: #fff;
font-family: Arial;
font-size: 12px;
letter-spacing: 1px;
height: 40px;
line-height: 40px;
position: fixed;
bottom: 0;
width: 100%;
text-align: center;
color: #fff;
font-family: Arial;
font-size: 12px;
letter-spacing: 1px;
}
.login-code-img {
height: 40px;
padding-left: 12px;
height: 40px;
padding-left: 12px;
}
</style>

View File

@ -1,70 +1,65 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryRef"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="病害名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入病害名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryRef"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="病害名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入病害名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['system:chzl:add']"
>
新增
</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="chzlList"
max-height="75vh"
@selection-change="handleSelectionChange"
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['system:chzl:add']"
>
<el-table-column label="病害名称" align="center" prop="name" />
<el-table-column
label="防治方法"
align="center"
prop="fzff"
/>
<el-table-column
label="发病症状"
align="center"
prop="xttz"
/>
<el-table-column :key="index" align="center" label="详情">
<template #default="scope">
<span
class="Guidance"
style="cursor: pointer; color: rgba(100, 195, 164, 1)"
@click="GuidanceClick(scope.row)"
>
查看详情
</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
新增
</el-button>
</el-col>
<right-toolbar
v-model:showSearch="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="chzlList"
max-height="75vh"
@selection-change="handleSelectionChange"
>
<el-table-column label="病害名称" align="center" prop="name" />
<el-table-column label="防治方法" align="center" prop="fzff" />
<el-table-column label="发病症状" align="center" prop="xttz" />
<el-table-column :key="index" align="center" label="详情">
<template #default="scope">
<span
class="Guidance"
style="cursor: pointer; color: rgba(100, 195, 164, 1)"
@click="GuidanceClickss(scope.row)"
>
查看详情
</span>
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button
link
@ -76,75 +71,75 @@
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-table-column> -->
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改病害对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="chzlRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="病害名称" prop="name">
<el-input v-model="form.name" placeholder="请输入病害名称" />
</el-form-item>
<el-form-item label="防治方法" prop="fzff">
<el-input v-model="form.fzff" placeholder="请输入防治方法" />
</el-form-item>
<el-form-item label="发病症状" prop="xttz">
<el-input v-model="form.xttz" placeholder="请输入发病症状" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="GuidanceFlag" title="指导意见" width="50%" center>
<div class="titleDivs">
<div style="height: 60px; width: 6px; background: rgba(100, 195, 164, 1)"></div>
<div style="height: 60px; width: 6px; background: #fff"></div>
<div style="height: 60px; width: 3px; background: rgba(100, 195, 164, 0.6)"></div>
<h2
style="
background: #fff;
height: 60px;
padding: 20px;
font-size: 28px;
font-weight: 800;
"
>
{{ GuidanceTxt.name }}
</h2>
</div>
<div class="GuidanceDiv">
<div class="GuidanceContent">
<h3 style="color: rgba(100, 195, 164, 1); font-weight: 600; display: flex">
<img v-if="label3 == '虫情监测仪'" src="@/assets/images/chong.png" />
<img v-if="label3 == '大田视频病害监测'" src="@/assets/images/bing.png" />
&nbsp; 形态特征
</h3>
<p style="white-space: pre-line">&emsp;{{ GuidanceTxt.xttz }}</p>
<h3 style="color: rgba(100, 195, 164, 1); font-weight: 600; display: flex">
<img src="@/assets/images/fang.png" />
&nbsp; 防治方法
</h3>
<p style="white-space: pre-wrap">{{ GuidanceTxt.fzff }}</p>
</div>
</div>
</el-dialog>
</div>
<!-- 添加或修改病害对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="chzlRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="病害名称" prop="name">
<el-input v-model="form.name" placeholder="请输入病害名称" />
</el-form-item>
<el-form-item label="防治方法" prop="fzff">
<el-input v-model="form.fzff" placeholder="请输入防治方法" />
</el-form-item>
<el-form-item label="发病症状" prop="xttz">
<el-input v-model="form.xttz" placeholder="请输入发病症状" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="GuidanceFlags" title="指导意见" width="50%" center>
<div class="titleDivs">
<div style="height: 60px; width: 6px; background: rgba(100, 195, 164, 1)"></div>
<div style="height: 60px; width: 6px; background: #fff"></div>
<div style="height: 60px; width: 3px; background: rgba(100, 195, 164, 0.6)"></div>
<h2
style="
background: #fff;
height: 60px;
padding: 20px;
font-size: 28px;
font-weight: 800;
"
>
{{ GuidanceTxts.name }}
</h2>
</div>
<div class="GuidanceDiv">
<div class="GuidanceContent">
<h3 style="color: rgba(100, 195, 164, 1); font-weight: 600; display: flex">
<img v-if="label3 == '虫情监测仪'" src="@/assets/images/chong.png" />
<img v-if="label3 == '大田视频病害监测'" src="@/assets/images/bing.png" />
&nbsp; 形态特征
</h3>
<p style="white-space: pre-line">&emsp;{{ GuidanceTxts.xttz }}</p>
<h3 style="color: rgba(100, 195, 164, 1); font-weight: 600; display: flex">
<img src="@/assets/images/fang.png" />
&nbsp; 防治方法
</h3>
<p style="white-space: pre-wrap">{{ GuidanceTxts.fzff }}</p>
</div>
</div>
</el-dialog>
</div>
</template>
<script setup name="Chzl">
import { getChzl, listChzl, addChzl, delChzl } from '@/api/system/chzl.js';
import { getChzl, listChzl, addChzl, delChzl } from "@/api/system/chzl.js";
const { proxy } = getCurrentInstance();
@ -156,138 +151,138 @@ const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref('');
let GuidanceFlag = ref(false);
let GuidanceArr = ref([]);
let GuidanceTxt = ref([]);
const title = ref("");
let GuidanceFlags = ref(false);
let GuidanceTxts = ref([]);
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
id: null,
name: null,
bt: null,
nr: null,
},
rules: {},
const datas = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
id: null,
name: null,
bt: null,
nr: null,
},
rules: {},
});
const { queryParams, form, rules } = toRefs(data);
const { queryParams, form, rules } = toRefs(datas);
/** 查询病害列表 */
function getList() {
loading.value = true;
listChzl({...queryParams.value}).then(response => {
chzlList.value = response.data;
total.value = response.total;
loading.value = false;
});
loading.value = true;
listChzl({ ...queryParams.value }).then((response) => {
chzlList.value = response.data;
total.value = response.total;
loading.value = false;
});
}
// 取消按钮
function cancel() {
open.value = false;
reset();
open.value = false;
reset();
}
// 表单重置
function reset() {
form.value = {
name: null,
xttz: null,
fzff: null,
};
proxy.resetForm('chzlRef');
form.value = {
name: null,
xttz: null,
fzff: null,
};
proxy.resetForm("chzlRef");
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm('queryRef');
handleQuery();
proxy.resetForm("queryRef");
handleQuery();
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
function handleAdd() {
reset();
open.value = true;
title.value = '添加病害';
reset();
open.value = true;
title.value = "添加病害";
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
const _id = row.id || ids.value;
getChzl(_id).then(response => {
form.value = response.data;
open.value = true;
title.value = '修改病害';
});
reset();
const _id = row.id || ids.value;
getChzl(_id).then((response) => {
form.value = response.data;
open.value = true;
title.value = "修改病害";
});
}
/** 提交按钮 */
function submitForm() {
proxy.$refs['chzlRef'].validate(valid => {
if (valid) {
if (form.value.id != null) {
updateChzl(form.value).then(response => {
proxy.$modal.msgSuccess('修改成功');
open.value = false;
getList();
});
} else {
addChzl(form.value).then(response => {
proxy.$modal.msgSuccess(response.msg);
open.value = false;
getList();
});
}
}
});
proxy.$refs["chzlRef"].validate((valid) => {
if (valid) {
if (form.value.id != null) {
updateChzl(form.value).then((response) => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
addChzl(form.value).then((response) => {
proxy.$modal.msgSuccess(response.msg);
open.value = false;
getList();
});
}
}
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.name;
proxy.$modal
.confirm('是否确认删除"' + _ids + '"的数据项?')
.then(function () {
return delChzl({ name: _ids });
})
.then(() => {
getList();
proxy.$modal.msgSuccess('删除成功');
})
.catch(() => {});
const _ids = row.name;
proxy.$modal
.confirm('是否确认删除"' + _ids + '"的数据项?')
.then(function () {
return delChzl({ name: _ids });
})
.then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
})
.catch(() => {});
}
/** 导出按钮操作 */
function handleExport() {
proxy.download(
'system/chzl/export',
{
...queryParams.value,
},
`chzl_${new Date().getTime()}.xlsx`
);
proxy.download(
"system/chzl/export",
{
...queryParams.value,
},
`chzl_${new Date().getTime()}.xlsx`
);
}
const GuidanceClick = e => {
GuidanceFlag.value = true;
GuidanceTxt.value = e;
const GuidanceClickss = (e) => {
console.log("111");
GuidanceFlags.value = true;
GuidanceTxts.value = e;
};
getList();
@ -295,41 +290,41 @@ getList();
<style lang="scss" scoped>
:deep() th {
color: black !important;
color: black !important;
}
:deep().el-table__expand-icon {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
/*2.展开按钮未点击的样式是加号带边框*/
:deep().el-table__expand-icon {
content: url('/Users/luce/Desktop/数字三农/Agriculture-front-end/src/assets/images/zhankais.png') !important;
padding: 2px;
content: url("/Users/luce/Desktop/数字三农/Agriculture-front-end/src/assets/images/zhankais.png") !important;
padding: 2px;
}
/*3.展开按钮点击后的样式是减号带边框*/
:deep() .el-table__expand-icon--expanded {
content: url('/Users/luce/Desktop/数字三农/Agriculture-front-end/src/assets/images/shouqi.png') !important;
content: url("/Users/luce/Desktop/数字三农/Agriculture-front-end/src/assets/images/shouqi.png") !important;
}
.titleDivs {
display: flex;
height: 57px;
align-items: center;
background-image: url('@/assets/images/bgx.png');
background-repeat: no-repeat;
background-size: 100% 100%;
display: flex;
height: 57px;
align-items: center;
background-image: url("@/assets/images/bgx.png");
background-repeat: no-repeat;
background-size: 100% 100%;
}
:deep().el-table {
.cell {
.cell {
white-space: nowrap;
}
}
}
.GuidanceDiv {
width: 100%;
height: 300px;
overflow: hidden;
width: 100%;
height: 300px;
overflow: hidden;
overflow-y: auto;
.GuidanceContent {
overflow-y: auto;
.GuidanceContent {
overflow-y: auto;
}
}
}
</style>

View File

@ -32,7 +32,7 @@
<img src="@/assets/images/qx.png" />
</div> -->
</div>
<div v-show="tabrFlag" class="rightbottom">
<div v-if="tabrFlag" class="rightbottom">
<div class="title">
<div
style="
@ -266,6 +266,10 @@
<img src="@/assets/images/dow.png" alt="" />
下载
</el-button>
<el-button v-if="formInline.divisions == ''" type="primary" text @click="downGjsjxzqbcdsj">
<img src="@/assets/images/dow.png" alt="" />
下载所有村数据
</el-button>
</el-form-item>
</el-form>
<div class="modeDiv" @click="SwitchMode">
@ -371,6 +375,7 @@ import {
getlistMode,
getgarrison,
getAdministrativeChun,
gjsjxzqbcdsj
} from '@/api/crops/classify.js';
import axios from 'axios';
import * as xlsx from 'xlsx'; // Vue3 版本
@ -438,8 +443,8 @@ let highStandarditem = {
蓝莓: [],
茶叶: [],
马铃薯: [],
白菜和萝卜: [],
其他: [],
// 白菜和萝卜: [],
// 其他: [],
};
//搜索
let formInline = ref({
@ -464,9 +469,22 @@ watch(
window.document.querySelector('.tableBox').style.height = '83%';
} else {
window.document.querySelector('.tableBox').style.height = '90%';
}
}
);
watch(()=>router,(newVal, oldVal)=>{
if(newVal.currentRoute._value.fullPath !== '/crops/Classify'){
echarts.init(typesofDiv.value).dispose()
typeFlag.value= false
}else{
}
},{deep: true})
watch(
() => oldDatas.value,
(val, oldVal) => {
@ -525,16 +543,16 @@ watch(
name: `T${str1}_malingshu`,
time: `T${num3}malingshu${num3}nongzuowufenlei`,
},
白菜和萝卜: {
setOf: `${oldDatas.value.name}-nongzuowufenlei`,
name: `T${str1}_baicai_luobo`,
time: `T${num3}baicai_luobo${num3}nongzuowufenlei`,
},
其他: {
setOf: `${oldDatas.value.name}-nongzuowufenlei`,
name: `T${str1}_qitanongzuowu`,
time: `T${num3}qitanongzuowu${num3}nongzuowufenlei`,
},
// 白菜和萝卜: {
// setOf: `${oldDatas.value.name}-nongzuowufenlei`,
// name: `T${str1}_baicai_luobo`,
// time: `T${num3}baicai_luobo${num3}nongzuowufenlei`,
// },
// 其他: {
// setOf: `${oldDatas.value.name}-nongzuowufenlei`,
// name: `T${str1}_qitanongzuowu`,
// time: `T${num3}qitanongzuowu${num3}nongzuowufenlei`,
// },
};
}
);
@ -554,7 +572,7 @@ const onSubmit = () => {
amount.value = [
{
region: '高标准农田',
其他: res.data[res.data.length - 1].otherSum,
// 其他: res.data[res.data.length - 1].otherSum,
地瓜: res.data[res.data.length - 1].sweetPotatoSum,
大豆: res.data[res.data.length - 1].soyBeanSum,
小麦: res.data[res.data.length - 1].wheatSum,
@ -563,7 +581,7 @@ const onSubmit = () => {
蓝莓: res.data[res.data.length - 1].blueberrySum,
玉米: res.data[res.data.length - 1].cronSum,
马铃薯: res.data[res.data.length - 1].potatoSum,
白菜和萝卜: res.data[res.data.length - 1].turnipSum,
// 白菜和萝卜: res.data[res.data.length - 1].turnipSum,
合计: '合计',
},
];
@ -606,14 +624,14 @@ const onSubmit = () => {
lable: '马铃薯',
value: '马铃薯',
},
{
lable: '白菜和萝卜',
value: '白菜和萝卜',
},
{
lable: '其他',
value: '其他',
},
// {
// lable: '白菜和萝卜',
// value: '白菜和萝卜',
// },
// {
// lable: '其他',
// value: '其他',
// },
];
res.data.forEach(item => {
if (arr.indexOf(item.region) == -1) {
@ -718,14 +736,14 @@ const onSubmit = () => {
lable: '马铃薯',
value: '马铃薯',
},
{
lable: '白菜和萝卜',
value: '白菜和萝卜',
},
{
lable: '其他',
value: '其他',
},
// {
// lable: '白菜和萝卜',
// value: '白菜和萝卜',
// },
// {
// lable: '其他',
// value: '其他',
// },
];
res.data.forEach(item => {
if (arr.indexOf(item.tomeName) == -1) {
@ -965,6 +983,12 @@ const Deta4 = item => {
}
};
const downGjsjxzqbcdsj=()=>{
gjsjxzqbcdsj({yearMonth:formInline.value.yearMonth}).then(res=>{
downLoadFile(res.msg)
})
}
const download = item => {
downLoadFile(item.download);
};
@ -998,8 +1022,8 @@ const exportExcel = (tableData, fileName = '用户列表', pageName = 'Sheet1')
蓝莓: '蓝莓(亩)',
茶叶: '茶叶(亩)',
马铃薯: '马铃薯(亩)',
白菜和萝卜: '白菜和萝卜(亩)',
其他: '其他(亩)',
// 白菜和萝卜: '白菜和萝卜(亩)',
// 其他: '其他(亩)',
};
const list = changeTableHead(tableData, fieldNameObj);
// 创建工作表
@ -1020,8 +1044,8 @@ let dd = {
蓝莓: [],
茶叶: [],
马铃薯: [],
白菜和萝卜: [],
其他: [],
// 白菜和萝卜: [],
// 其他: [],
};
let time = ref(0);
let dic = ref({
@ -1033,8 +1057,8 @@ let dic = ref({
蓝莓: { color: 'rgba(50, 140, 254, 1)', disabled: false },
茶叶: { color: 'rgba(255, 204, 59, 1)', disabled: false },
马铃薯: { color: 'rgba(152, 255, 254, 1)', disabled: false },
白菜和萝卜: { color: 'rgba(255, 152, 153, 1)', disabled: false },
其他: { color: 'rgba(176, 161, 255, 1)', disabled: false },
// 白菜和萝卜: { color: 'rgba(255, 152, 153, 1)', disabled: false },
// 其他: { color: 'rgba(176, 161, 255, 1)', disabled: false },
});
// 图层字典
let layersDic = {
@ -1149,36 +1173,36 @@ let dictionaryArr = [
show: true,
},
},
{
// 数据项名称
name: '白菜和萝卜',
area: '',
value: 56,
itemStyle: {
// 透明度
opacity: 0.8,
// 扇形颜色
color: 'rgba(205, 236, 198, 1)',
},
label: {
show: true,
},
},
{
// 数据项名称
name: '其他',
area: '',
value: 56,
itemStyle: {
// 透明度
opacity: 0.8,
// 扇形颜色
color: 'rgba(255, 218, 44, 1)',
},
label: {
show: true,
},
},
// {
// // 数据项名称
// name: '白菜和萝卜',
// area: '',
// value: 56,
// itemStyle: {
// // 透明度
// opacity: 0.8,
// // 扇形颜色
// color: 'rgba(205, 236, 198, 1)',
// },
// label: {
// show: true,
// },
// },
// {
// // 数据项名称
// name: '其他',
// area: '',
// value: 56,
// itemStyle: {
// // 透明度
// opacity: 0.8,
// // 扇形颜色
// color: 'rgba(255, 218, 44, 1)',
// },
// label: {
// show: true,
// },
// },
];
let Pie3D = reactive({
arr: [],
@ -1226,6 +1250,7 @@ function initonMounted() {
rightWra.style.transform = 'translate(101%,0)';
localStorage.setItem(router.currentRoute.value.path, true);
}
let typeFlag = ref(false)
onUpdated(() => {
if (localStorage.getItem(router.currentRoute.value.path) == 'false') {
document.querySelector('.mode').style.display = 'block';
@ -1236,6 +1261,9 @@ onUpdated(() => {
document.querySelector('.mode').innerText = '列表模式';
window.document.querySelector('#screenfull').style.display = 'block';
}
if(typesofDiv.value){
typeFlag.value = true
}
});
/*-------------地图------------------------*/
let map = ref(null);
@ -1261,7 +1289,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection: serverAPI.tiandituLayers == 'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'?'EPSG:4326':'EPSG:3857',
projection: serverAPI.flag?'EPSG:4326':'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片
}),
@ -1865,8 +1893,8 @@ const getTownships = (city, time) => {
蓝莓: [],
茶叶: [],
马铃薯: [],
白菜和萝卜: [],
其他: [],
// 白菜和萝卜: [],
// 其他: [],
};
res.data.forEach((item, i) => {
for (let index = 0; index < Object.values(item).length; index++) {
@ -1939,8 +1967,8 @@ const getvillages = (city, time) => {
蓝莓: [],
茶叶: [],
马铃薯: [],
白菜和萝卜: [],
其他: [],
// 白菜和萝卜: [],
// 其他: [],
};
Township.brr = res.data;
let arr = [...res.data];
@ -2036,8 +2064,8 @@ const gethighStandards = time => {
蓝莓: [],
茶叶: [],
马铃薯: [],
白菜和萝卜: [],
其他: [],
// 白菜和萝卜: [],
// 其他: [],
};
highStandardArr.value = res.data;
highStandard.forEach((item, indexs) => {
@ -2491,6 +2519,11 @@ function areachar() {
});
}
}
watch(()=>[typesofDiv.value,typeFlag.value],()=>{
if(typesofDiv.value && typeFlag.value){
typesof()
}
})
function typesof() {
const typesofDivIntance = echarts.init(typesofDiv.value);
let isSelected = '';
@ -3117,70 +3150,70 @@ function farmland() {
},
},
},
{
name: '白菜和萝卜',
type: 'bar',
barWidth: 24,
stack: 'stack',
data: highStandarditem.白菜和萝卜,
itemStyle: {
normal: {
barBorderRadius: 0,
color: new echarts.graphic.LinearGradient(0, 0, 0.9, 0, [
{
offset: 1,
color: 'rgba(205, 236, 198, 1)',
},
{
offset: 0,
color: 'rgba(205, 236, 198, 1)',
},
]),
},
},
label: {
show: true,
position: 'inside',
formatter: '白菜和萝卜',
textStyle: {
fontSize: 12,
fontWeight: 'bolder',
color: 'rgba(119, 119, 119, 1)',
},
},
},
{
name: '其他',
type: 'bar',
barWidth: 24,
stack: 'stack',
data: highStandarditem.其他,
itemStyle: {
normal: {
barBorderRadius: 0,
color: new echarts.graphic.LinearGradient(0, 0, 0.9, 0, [
{
offset: 1,
color: 'rgba(255, 218, 44, 1)',
},
{
offset: 0,
color: 'rgba(255, 218, 44, 1)',
},
]),
},
},
label: {
show: true,
position: 'inside',
formatter: '其他',
textStyle: {
fontSize: 12,
fontWeight: 'bolder',
color: 'rgba(119, 119, 119, 1)',
},
},
},
// {
// name: '白菜和萝卜',
// type: 'bar',
// barWidth: 24,
// stack: 'stack',
// data: highStandarditem.白菜和萝卜,
// itemStyle: {
// normal: {
// barBorderRadius: 0,
// color: new echarts.graphic.LinearGradient(0, 0, 0.9, 0, [
// {
// offset: 1,
// color: 'rgba(205, 236, 198, 1)',
// },
// {
// offset: 0,
// color: 'rgba(205, 236, 198, 1)',
// },
// ]),
// },
// },
// label: {
// show: true,
// position: 'inside',
// formatter: '白菜和萝卜',
// textStyle: {
// fontSize: 12,
// fontWeight: 'bolder',
// color: 'rgba(119, 119, 119, 1)',
// },
// },
// },
// {
// name: '其他',
// type: 'bar',
// barWidth: 24,
// stack: 'stack',
// data: highStandarditem.其他,
// itemStyle: {
// normal: {
// barBorderRadius: 0,
// color: new echarts.graphic.LinearGradient(0, 0, 0.9, 0, [
// {
// offset: 1,
// color: 'rgba(255, 218, 44, 1)',
// },
// {
// offset: 0,
// color: 'rgba(255, 218, 44, 1)',
// },
// ]),
// },
// },
// label: {
// show: true,
// position: 'inside',
// formatter: '其他',
// textStyle: {
// fontSize: 12,
// fontWeight: 'bolder',
// color: 'rgba(119, 119, 119, 1)',
// },
// },
// },
],
};
@ -3702,82 +3735,82 @@ function ASdivision() {
},
data: dd.马铃薯, // 系列中的数据内容数组
},
{
type: 'bar', // 系列类型
name: '白菜和萝卜', // 系列名称, 用于tooltip的显示, legend 的图例筛选
// 数据堆叠同个类目轴上系列配置相同的stack值后后一个系列的值会在前一个系列的值上相加
stack: '总量',
barMaxWidth: 30, // 柱条的最大宽度,不设时自适应
// 图形上的文本标签
label: {
show: true,
position: 'inside',
formatter: '白菜和萝卜',
textStyle: {
fontSize: 12,
fontWeight: 'bolder',
color: 'rgba(119, 119, 119, 1)',
},
},
// 图形样式
itemStyle: {
barBorderRadius: [0, 0, 0, 0],
barBorderRadius: [0, 0, 0, 0], //
borderWidth: 1, // 设置边框宽度
borderColor: 'rgba(205, 236, 198, 1)', // 设置边框颜色
color: {
colorStops: [
{
offset: 0,
color: ' rgba(205, 236, 198, 1)', // 0% 处的颜色
},
{
offset: 1,
color: ' rgba(205, 236, 198, 1)', // 100% 处的颜色
},
],
},
},
data: dd.白菜和萝卜, // 系列中的数据内容数组
},
{
type: 'bar', // 系列类型
name: '其他', // 系列名称, 用于tooltip的显示, legend 的图例筛选
// 数据堆叠同个类目轴上系列配置相同的stack值后后一个系列的值会在前一个系列的值上相加
stack: '总量',
barMaxWidth: 30, // 柱条的最大宽度,不设时自适应
// 图形上的文本标签
label: {
show: true,
position: 'inside',
formatter: '其他',
textStyle: {
fontSize: 12,
fontWeight: 'bolder',
color: 'rgba(119, 119, 119, 1)',
},
},
// 图形样式
itemStyle: {
barBorderRadius: [0, 0, 0, 0],
barBorderRadius: [0, 0, 0, 0], //
borderWidth: 1, // 设置边框宽度
borderColor: 'rgba(255, 218, 44, 1)', // 设置边框颜色
color: {
colorStops: [
{
offset: 0,
color: 'rgba(255, 218, 44, 1)', // 0% 处的颜色
},
{
offset: 1,
color: 'rgba(255, 218, 44, 1)', // 100% 处的颜色
},
],
},
},
data: dd.其他, // 系列中的数据内容数组
},
// {
// type: 'bar', // 系列类型
// name: '白菜和萝卜', // 系列名称, 用于tooltip的显示, legend 的图例筛选
// // 数据堆叠同个类目轴上系列配置相同的stack值后后一个系列的值会在前一个系列的值上相加
// stack: '总量',
// barMaxWidth: 30, // 柱条的最大宽度,不设时自适应
// // 图形上的文本标签
// label: {
// show: true,
// position: 'inside',
// formatter: '白菜和萝卜',
// textStyle: {
// fontSize: 12,
// fontWeight: 'bolder',
// color: 'rgba(119, 119, 119, 1)',
// },
// },
// // 图形样式
// itemStyle: {
// barBorderRadius: [0, 0, 0, 0],
// barBorderRadius: [0, 0, 0, 0], //
// borderWidth: 1, // 设置边框宽度
// borderColor: 'rgba(205, 236, 198, 1)', // 设置边框颜色
// color: {
// colorStops: [
// {
// offset: 0,
// color: ' rgba(205, 236, 198, 1)', // 0% 处的颜色
// },
// {
// offset: 1,
// color: ' rgba(205, 236, 198, 1)', // 100% 处的颜色
// },
// ],
// },
// },
// data: dd.白菜和萝卜, // 系列中的数据内容数组
// },
// {
// type: 'bar', // 系列类型
// name: '其他', // 系列名称, 用于tooltip的显示, legend 的图例筛选
// // 数据堆叠同个类目轴上系列配置相同的stack值后后一个系列的值会在前一个系列的值上相加
// stack: '总量',
// barMaxWidth: 30, // 柱条的最大宽度,不设时自适应
// // 图形上的文本标签
// label: {
// show: true,
// position: 'inside',
// formatter: '其他',
// textStyle: {
// fontSize: 12,
// fontWeight: 'bolder',
// color: 'rgba(119, 119, 119, 1)',
// },
// },
// // 图形样式
// itemStyle: {
// barBorderRadius: [0, 0, 0, 0],
// barBorderRadius: [0, 0, 0, 0], //
// borderWidth: 1, // 设置边框宽度
// borderColor: 'rgba(255, 218, 44, 1)', // 设置边框颜色
// color: {
// colorStops: [
// {
// offset: 0,
// color: 'rgba(255, 218, 44, 1)', // 0% 处的颜色
// },
// {
// offset: 1,
// color: 'rgba(255, 218, 44, 1)', // 100% 处的颜色
// },
// ],
// },
// },
// data: dd.其他, // 系列中的数据内容数组
// },
],
};
// ASdivisionDivIntance.on('click', param => ChartClickRB(param));
@ -3814,8 +3847,8 @@ function chartModes() {
item.蓝莓 !== undefined && Blueberries.push(item.蓝莓);
item.茶叶 !== undefined && Tea.push(item.茶叶);
item.马铃薯 !== undefined && Potatoes.push(item.马铃薯);
item.白菜和萝卜 !== undefined && Cabbage.push(item.白菜和萝卜);
item.其他 !== undefined && Other.push(item.其他);
// item.白菜和萝卜 !== undefined && Cabbage.push(item.白菜和萝卜);
// item.其他 !== undefined && Other.push(item.其他);
});
let ends = (10 / arr.length) * 100;
let option = {
@ -4003,26 +4036,26 @@ function chartModes() {
},
data: Potatoes,
},
{
name: '白菜和萝卜',
type: 'bar',
barWidth: 13,
stack: '分类',
itemStyle: {
color: 'rgba(229, 150, 255, 1)',
},
data: Cabbage,
},
{
name: '其他',
type: 'bar',
barWidth: 13,
stack: '分类',
itemStyle: {
color: 'rgba(189, 243, 255, 1)',
},
data: Other,
},
// {
// name: '白菜和萝卜',
// type: 'bar',
// barWidth: 13,
// stack: '分类',
// itemStyle: {
// color: 'rgba(229, 150, 255, 1)',
// },
// data: Cabbage,
// },
// {
// name: '其他',
// type: 'bar',
// barWidth: 13,
// stack: '分类',
// itemStyle: {
// color: 'rgba(189, 243, 255, 1)',
// },
// data: Other,
// },
{
name: '合计',
type: 'bar',

View File

@ -464,7 +464,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection: serverAPI.tiandituLayers == 'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'?'EPSG:4326':'EPSG:3857',
projection: serverAPI.flag?'EPSG:4326':'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片
}),

View File

@ -457,7 +457,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection: serverAPI.tiandituLayers == 'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'?'EPSG:4326':'EPSG:3857',
projection: serverAPI.flag?'EPSG:4326':'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片
}),

View File

@ -458,7 +458,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection: serverAPI.tiandituLayers == 'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'?'EPSG:4326':'EPSG:3857',
projection: serverAPI.flag?'EPSG:4326':'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片
}),

View File

@ -373,7 +373,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection: serverAPI.tiandituLayers == 'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'?'EPSG:4326':'EPSG:3857',
projection: serverAPI.flag?'EPSG:4326':'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片
}),

View File

@ -693,10 +693,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection:
serverAPI.tiandituLayers ==
'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'
? 'EPSG:4326'
projection:serverAPI.flag? 'EPSG:4326'
: 'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片

File diff suppressed because one or more lines are too long

331
src/views/insect/insect.vue Normal file
View File

@ -0,0 +1,331 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryRef"
:inline="true"
v-show="showSearch"
label-width="68px"
@submit.native.prevent
>
<el-form-item label="虫害名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入虫害名称"
clearable
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="Plus"
@click="handleAdd"
v-hasPermi="['system:insect:add']"
>
新增
</el-button>
</el-col>
<right-toolbar
v-model:showSearch="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="chzlList"
max-height="73vh"
@selection-change="handleSelectionChange"
>
<el-table-column label="虫害名称" align="center" prop="name" />
<el-table-column label="防治方法" align="center" prop="fzff" />
<el-table-column label="发病症状" align="center" prop="xttz" />
<el-table-column :key="index" align="center" label="详情">
<template #default="scope">
<span
class="Guidance"
style="cursor: pointer; color: rgba(100, 195, 164, 1)"
@click="GuidanceClickss(scope.row)"
>
查看详情
</span>
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:chzl:remove']"
>
删除
</el-button>
</template>
</el-table-column> -->
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改病害对话框 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="chzlRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="虫害名称" prop="name">
<el-input v-model="form.name" placeholder="请输入虫害名称" />
</el-form-item>
<el-form-item label="防治方法" prop="fzff">
<el-input :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" v-model="form.fzff" placeholder="请输入防治方法" />
</el-form-item>
<el-form-item label="发病症状" prop="xttz">
<el-input :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" v-model="form.xttz" placeholder="请输入发病症状" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="GuidanceFlags" title="指导意见" width="50%" center>
<div class="titleDivs">
<div style="height: 60px; width: 6px; background: rgba(100, 195, 164, 1)"></div>
<div style="height: 60px; width: 6px; background: #fff"></div>
<div style="height: 60px; width: 3px; background: rgba(100, 195, 164, 0.6)"></div>
<h2
style="
background: #fff;
height: 60px;
padding: 20px;
font-size: 28px;
font-weight: 800;
"
>
{{ GuidanceTxts.name }}
</h2>
</div>
<div class="GuidanceDiv">
<div class="GuidanceContent">
<h3 style="color: rgba(100, 195, 164, 1); font-weight: 600; display: flex">
<img v-if="label3 == '虫情监测仪'" src="@/assets/images/chong.png" />
<img v-if="label3 == '大田视频病害监测'" src="@/assets/images/bing.png" />
&nbsp; 形态特征
</h3>
<p style="white-space: pre-line">&emsp;{{ GuidanceTxts.xttz }}</p>
<h3 style="color: rgba(100, 195, 164, 1); font-weight: 600; display: flex">
<img src="@/assets/images/fang.png" />
&nbsp; 防治方法
</h3>
<p style="white-space: pre-wrap">{{ GuidanceTxts.fzff }}</p>
</div>
</div>
</el-dialog>
</div>
</template>
<script setup name="insect">
import { getChzl, listChzl, addChzl, delChzl } from "@/api/system/insect.js";
const { proxy } = getCurrentInstance();
const chzlList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const title = ref("");
let GuidanceFlags = ref(false);
let GuidanceTxts = ref([]);
const datas = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
id: null,
name: null,
bt: null,
nr: null,
},
rules: {},
});
const { queryParams, form, rules } = toRefs(datas);
/** 查询病害列表 */
function getList() {
loading.value = true;
listChzl({ ...queryParams.value }).then((response) => {
chzlList.value = response.data;
total.value = response.total;
loading.value = false;
});
}
// 取消按钮
function cancel() {
open.value = false;
reset();
}
// 表单重置
function reset() {
form.value = {
name: null,
xttz: null,
fzff: null,
};
proxy.resetForm("chzlRef");
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef");
handleQuery();
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
}
/** 新增按钮操作 */
function handleAdd() {
reset();
open.value = true;
title.value = "添加虫害";
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset();
const _id = row.id || ids.value;
getChzl(_id).then((response) => {
form.value = response.data;
open.value = true;
title.value = "修改虫害";
});
}
/** 提交按钮 */
function submitForm() {
proxy.$refs["chzlRef"].validate((valid) => {
if (valid) {
if (form.value.id != null) {
updateChzl(form.value).then((response) => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
addChzl(form.value).then((response) => {
proxy.$modal.msgSuccess(response.msg);
open.value = false;
getList();
});
}
}
});
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.name;
proxy.$modal
.confirm('是否确认删除"' + _ids + '"的数据项?')
.then(function () {
return delChzl({ name: _ids });
})
.then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
})
.catch(() => {});
}
/** 导出按钮操作 */
function handleExport() {
proxy.download(
"system/insect/export",
{
...queryParams.value,
},
`insect_${new Date().getTime()}.xlsx`
);
}
const GuidanceClickss = (e) => {
console.log("111");
GuidanceFlags.value = true;
GuidanceTxts.value = e;
};
getList();
</script>
<style lang="scss" scoped>
:deep() th {
color: black !important;
}
:deep().el-table__expand-icon {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
/*2.展开按钮未点击的样式是加号带边框*/
:deep().el-table__expand-icon {
content: url("/Users/luce/Desktop/数字三农/Agriculture-front-end/src/assets/images/zhankais.png") !important;
padding: 2px;
}
/*3.展开按钮点击后的样式是减号带边框*/
:deep() .el-table__expand-icon--expanded {
content: url("/Users/luce/Desktop/数字三农/Agriculture-front-end/src/assets/images/shouqi.png") !important;
}
.titleDivs {
display: flex;
height: 57px;
align-items: center;
background-image: url("@/assets/images/bgx.png");
background-repeat: no-repeat;
background-size: 100% 100%;
}
:deep().el-table {
.cell {
white-space: nowrap;
}
}
.GuidanceDiv {
width: 100%;
height: 300px;
overflow: hidden;
overflow-y: auto;
.GuidanceContent {
overflow-y: auto;
}
}
</style>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -235,15 +235,14 @@ const initLeafletMap = () => {
doubleClickZoom: false, // 禁用双击放大
attributionControl: false, // 移除右下角leaflet标识
maxZoom: 16,
crs: serverAPI.tiandituzhuji=='http://59.206.203.34/tileservice/SDRasterPubMapDJ?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdcia&STYLE=default&TILEMATRIXSET=sdcia&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng' ? L.CRS.EPSG4326 : L.CRS.EPSG3857
crs: serverAPI.flag ? L.CRS.EPSG4326 : L.CRS.EPSG3857
});
// 渲染底图
// 创建底图图层
let imgBaseLayer = null;
let ciaBaseLayer = null;
if (
serverAPI.tiandituzhuji ==
'http://59.206.203.34/tileservice/SDRasterPubMapDJ?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdcia&STYLE=default&TILEMATRIXSET=sdcia&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'
serverAPI.flag
) {
imgBaseLayer = L.tileLayer(serverAPI.tiandituLayers, {
maxZoom: 20,
@ -956,6 +955,7 @@ $height: calc(100vh - 100px);
font-size: 14px;
color: rgba(0, 0, 0, 1);
padding: 10px 20px;
overflow-y: auto;
}
.cesiumContainersDiv {
width: 30%;

View File

@ -472,11 +472,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection:
serverAPI.tiandituLayers ==
'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'
? 'EPSG:4326'
: 'EPSG:3857',
projection: serverAPI.flag ? 'EPSG:4326' : 'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片
}),
@ -2574,7 +2570,7 @@ $height: calc(100vh - 100px);
height: calc(40% - 25px);
.areaDiv {
width: 100%;
height:calc(100% - 67px);
height: calc(100% - 67px);
opacity: 1;
display: flex;
padding: 1px;
@ -2709,7 +2705,7 @@ $height: calc(100vh - 100px);
flex-direction: column;
padding: 5px 10px 5px 10px;
color: rgba(255, 255, 255, 1);
height:calc(100% - 67px);
height: calc(100% - 67px);
:deep(.el-table--fit) {
height: 100%;
}

View File

@ -274,7 +274,7 @@
</el-select>
</el-form-item>
<el-form-item label="面积(亩)>">
<el-input-number v-model="num" :min="1" @change="handleChange" />
<el-input-number v-model="num" :min="0" @change="handleChange" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">查询</el-button>
@ -449,7 +449,7 @@ let totalArea = ref(0); //总面积
let checkListdata = ref([]);
let SwitchFlag = ref(true);
let timeArr = ref([]); //年数组
const num = ref(1);
const num = ref(0);
let dataSource = ref([]);
let oldDatas = ref('');
let alterArr = ref([]);
@ -619,11 +619,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection:
serverAPI.tiandituLayers ==
'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'
? 'EPSG:4326'
: 'EPSG:3857',
projection: serverAPI.flag ? 'EPSG:4326' : 'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片
}),
@ -1446,7 +1442,7 @@ const resetForm = () => {
(formInline.value.statistical = '镇'),
(formInline.value.droughtRating = ''),
(formInline.value.area = 0),
(num.value = 1),
(num.value = 0),
(operate.value = true);
onSubmit();
};
@ -2433,39 +2429,39 @@ function farmland() {
var rule = /^(([-\u4E00-\u9FA5a-z0-9]{1,63})\.)+([\u4E00-\u9FA5a-z]{2,63})\.?$/;
if (!rule.test(domain)) {
document.querySelector('.tool').style.display = 'block';
paramCode.value = param.name;
let arr = ['XJQY3702112019WGS84', 'CJQY3702112019WGS84'];
SQLData(param.name);
arr.forEach(item => {
map.getLayers()
.getArray()
.forEach((ite, index) => {
if (ite.A.name == item) {
map.getLayers().removeAt(index);
}
});
});
let arrs = ['2019-2022gaobiaozhunnongtian', 'gbz', 'dianjigaoliang', 'dianjigaoliangs'];
arrs.forEach(item => {
map.getLayers()
.getArray()
.forEach((ite, index) => {
if (ite.A.name == item || ite.A.id == item) {
map.getLayers().removeAt(index);
}
});
});
layers = new ol.layer.Tile({
source: new ol.source.TileSuperMapRest({
url: `${serverAPI.geoserverUrl}/map-2019-2022gaobiaozhunnongtian/rest/maps/T2019_2022%E9%AB%98%E6%A0%87%E5%87%86%E5%86%9C%E7%94%B0%E7%89%87%E5%8C%BA@2019-2022gaobiaozhunnongtian`,
//rasterfunction: new SuperMap.NDVIParameter({ redIndex: 0, nirIndex: 2 }),
cacheEnabled: false,
}),
name: '2019-2022gaobiaozhunnongtian',
projection: 'EPSG:4326', //3857
zIndex: 9999,
});
map.addLayer(layers);
paramCode.value = param.name;
let arr = ['XJQY3702112019WGS84', 'CJQY3702112019WGS84'];
SQLData(param.name);
arr.forEach(item => {
map.getLayers()
.getArray()
.forEach((ite, index) => {
if (ite.A.name == item) {
map.getLayers().removeAt(index);
}
});
});
let arrs = ['2019-2022gaobiaozhunnongtian', 'gbz', 'dianjigaoliang', 'dianjigaoliangs'];
arrs.forEach(item => {
map.getLayers()
.getArray()
.forEach((ite, index) => {
if (ite.A.name == item || ite.A.id == item) {
map.getLayers().removeAt(index);
}
});
});
layers = new ol.layer.Tile({
source: new ol.source.TileSuperMapRest({
url: `${serverAPI.geoserverUrl}/map-2019-2022gaobiaozhunnongtian/rest/maps/T2019_2022%E9%AB%98%E6%A0%87%E5%87%86%E5%86%9C%E7%94%B0%E7%89%87%E5%8C%BA@2019-2022gaobiaozhunnongtian`,
//rasterfunction: new SuperMap.NDVIParameter({ redIndex: 0, nirIndex: 2 }),
cacheEnabled: false,
}),
name: '2019-2022gaobiaozhunnongtian',
projection: 'EPSG:4326', //3857
zIndex: 9999,
});
map.addLayer(layers);
}
});
option && farmlandDivIntance.setOption(option, { notMerge: true, grid: { bottom: 20 } });

View File

@ -525,7 +525,7 @@ const pickerChangeFn = e => {
let mapOption = null;
if (serverAPI.flag) {
mapOption = {
url: 'http://59.206.203.34/tileservice/SdRasterPubMap?tilematrixset=img2017',
url: `${serverAPI.url}/tileservice/SdRasterPubMap?tilematrixset=img2017`,
layer: 'sdimg2017',
style: 'default',
tileMatrixSetID: 'img2017',

View File

@ -281,7 +281,7 @@
</el-select>
</el-form-item>
<el-form-item label="面积(亩)>">
<el-input-number v-model="num" :min="1" @change="handleChange" />
<el-input-number v-model="num" :min="0" @change="handleChange" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">查询</el-button>
@ -427,7 +427,7 @@ let totalArea = ref(0); //总面积
let currentPage = ref(1); //当前页
let pageSize = ref(12); //每页条数
const insectarr = ref([]);
const num = ref(1);
const num = ref(0);
let timeArr = ref([]); //年数组
let tableItem = ref([]);
let operate = ref(true);
@ -629,11 +629,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection:
serverAPI.tiandituLayers ==
'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'
? 'EPSG:4326'
: 'EPSG:3857',
projection: serverAPI.flag ? 'EPSG:4326' : 'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片
}),

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -177,6 +177,10 @@
<div class="label">非农化:</div>
<span>{{ Number(item.nonFarm).toFixed(2) }}()</span>
</p>
<p class="perform_children">
<div class="label">经纬度</div>
<span>{{ position[0].toFixed(6) }},{{ position[1].toFixed(6) }}</span>
</p>
</div>
</div>
<div id="popup-pagination"></div>
@ -216,6 +220,7 @@ let rightWraFlag = ref(false);
const checkList = ref([]);
let checkListdata = ref([]);
let alterArr = ref([]);
let position = ref([]);
let dataSource = ref([]);
let oldDatas = ref('');
let allCount = ref([]);
@ -351,7 +356,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection: serverAPI.tiandituLayers == 'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'?'EPSG:4326':'EPSG:3857',
projection: serverAPI.flag?'EPSG:4326':'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片
}),
@ -579,6 +584,7 @@ const addwms = name => {
};
function QueryData(e, name, url, item) {
position.value = e.Tn;
let newDataZh = [];
var point = new ol.geom.Point(e.coordinate);
var param = new ol.supermap.QueryByGeometryParameters({
@ -1833,7 +1839,7 @@ $height: calc(100vh - 100px);
width: max-content;
opacity: 1;
.perform_children {
width: 195px;
width: 250px;
height: 28px;
line-height: 28px;
font-size: 14px;
@ -1846,7 +1852,7 @@ $height: calc(100vh - 100px);
span {
color: rgba(51, 51, 51, 1);
display: block;
min-width: 100px;
min-width: 150px;
background: rgba(100, 195, 164, 0.1);
box-shadow: inset 0px 1px 1px rgba(100, 195, 164, 0.5);
text-align: center;

View File

@ -4,13 +4,15 @@
<div class="rightWra">
<div class="rightTop">
<div class="title">
<div style="
<div
style="
width: 3px;
height: 19px;
opacity: 1;
background: rgba(100, 195, 164, 1);
margin-right: 12px;
"></div>
"
></div>
<span>位置定位</span>
</div>
<div class="depth">
@ -21,36 +23,78 @@
</div>
<div class="rightCenter">
<div class="zoning" v-if="active == '2'">
<el-select @change="selectCity()" popper-class="select_city" v-model="value" placeholder="请选择镇">
<el-option v-for="item in cityData" :key="item.cjqydm" :label="item.cjqymc"
:value="item.cjqydm" />
<el-select
@change="selectCity()"
popper-class="select_city"
v-model="value"
placeholder="请选择镇"
>
<el-option
v-for="item in cityData"
:key="item.cjqydm"
:label="item.cjqymc"
:value="item.cjqydm"
/>
</el-select>
<el-select popper-class="select_city" v-model="villageValue" placeholder="请选择村">
<el-option v-for="item in villageData" :key="item.cjqydm" :label="item.cjqymc"
:value="item.cjqymc" />
<el-select
popper-class="select_city"
v-model="villageValue"
placeholder="请选择村"
>
<el-option
v-for="item in villageData"
:key="item.cjqydm"
:label="item.cjqymc"
:value="item.cjqymc"
/>
</el-select>
</div>
<div v-if="active == '3'" class="LonAndLat">
<div class="LonAndLatDiv">
经度
<el-input class="seach_input" v-model="LonAndLaInput.Lon" placeholder="请输入经度" clearable />
<el-input
class="seach_input"
v-model="LonAndLaInput.Lon"
placeholder="请输入经度"
clearable
/>
</div>
<div class="LonAndLatDiv">
纬度
<el-input class="seach_input" v-model="LonAndLaInput.Lat" placeholder="请输入纬度" clearable />
<el-input
class="seach_input"
v-model="LonAndLaInput.Lat"
placeholder="请输入纬度"
clearable
/>
</div>
</div>
<div v-if="active == '4'" class="LonAndLat">
<div class="LonDiv">
经度
<div class="inputDiv">
<el-input class="seach_input" v-model="LonAndLa.Lon.londu" placeholder="度" clearable>
<el-input
class="seach_input"
v-model="LonAndLa.Lon.londu"
placeholder="度"
clearable
>
<template #append>°</template>
</el-input>
<el-input class="seach_input" v-model="LonAndLa.Lon.lonfen" placeholder="分" clearable>
<el-input
class="seach_input"
v-model="LonAndLa.Lon.lonfen"
placeholder="分"
clearable
>
<template #append></template>
</el-input>
<el-input class="seach_input" v-model="LonAndLa.Lon.lonmiao" placeholder="秒" clearable>
<el-input
class="seach_input"
v-model="LonAndLa.Lon.lonmiao"
placeholder="秒"
clearable
>
<template #append></template>
</el-input>
</div>
@ -58,13 +102,28 @@
<div class="LatDiv">
纬度
<div class="inputDiv">
<el-input class="seach_input" v-model="LonAndLa.Lat.latdu" placeholder="度" clearable>
<el-input
class="seach_input"
v-model="LonAndLa.Lat.latdu"
placeholder="度"
clearable
>
<template #append>°</template>
</el-input>
<el-input class="seach_input" v-model="LonAndLa.Lat.latfen" placeholder="分" clearable>
<el-input
class="seach_input"
v-model="LonAndLa.Lat.latfen"
placeholder="分"
clearable
>
<template #append></template>
</el-input>
<el-input class="seach_input" v-model="LonAndLa.Lat.latmiao" placeholder="秒" clearable>
<el-input
class="seach_input"
v-model="LonAndLa.Lat.latmiao"
placeholder="秒"
clearable
>
<template #append></template>
</el-input>
</div>
@ -80,59 +139,127 @@
</div>
<div class="rightbottom">
<div class="title">
<div style="
<div
style="
width: 3px;
height: 19px;
opacity: 1;
background: rgba(100, 195, 164, 1);
margin-right: 12px;
"></div>
"
></div>
<span>信息统计</span>
</div>
<div class="overview" @click="e => onTab(e)">
<el-row :gutter="10">
<el-col :span="8">
<div :id="SelectedText == 1 ? 'overviewItemSelect' : ''" class="overviewItem">
<img v-if="SelectedText == 1" style="width: 14px" src="@/assets/images/triangle2.png" />
<div
:id="SelectedText == 1 ? 'overviewItemSelect' : ''"
class="overviewItem"
>
<img
v-if="SelectedText == 1"
style="width: 14px"
src="@/assets/images/triangle2.png"
/>
高标准农田
<img v-if="SelectedText == 1" style="width: 14px" src="@/assets/images/triangle.png" />
<img
v-if="SelectedText == 1"
style="width: 14px"
src="@/assets/images/triangle.png"
/>
</div>
</el-col>
<el-col :span="8">
<div :id="SelectedText == 2 ? 'overviewItemSelect' : ''" class="overviewItem">
<img v-if="SelectedText == 2" style="width: 14px" src="@/assets/images/triangle2.png" />
<div
:id="SelectedText == 2 ? 'overviewItemSelect' : ''"
class="overviewItem"
>
<img
v-if="SelectedText == 2"
style="width: 14px"
src="@/assets/images/triangle2.png"
/>
永久基本农田
<img v-if="SelectedText == 2" style="width: 14px" src="@/assets/images/triangle.png" />
<img
v-if="SelectedText == 2"
style="width: 14px"
src="@/assets/images/triangle.png"
/>
</div>
</el-col>
<el-col :span="8">
<div :id="SelectedText == 3 ? 'overviewItemSelect' : ''" class="overviewItem">
<img v-if="SelectedText == 3" style="width: 14px" src="@/assets/images/triangle2.png" />
<div
:id="SelectedText == 3 ? 'overviewItemSelect' : ''"
class="overviewItem"
>
<img
v-if="SelectedText == 3"
style="width: 14px"
src="@/assets/images/triangle2.png"
/>
耕地
<img v-if="SelectedText == 3" style="width: 14px" src="@/assets/images/triangle.png" />
<img
v-if="SelectedText == 3"
style="width: 14px"
src="@/assets/images/triangle.png"
/>
</div>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="8">
<div :id="SelectedText == 4 ? 'overviewItemSelect' : ''" class="overviewItem">
<img v-if="SelectedText == 4" style="width: 14px" src="@/assets/images/triangle2.png" />
<div
:id="SelectedText == 4 ? 'overviewItemSelect' : ''"
class="overviewItem"
>
<img
v-if="SelectedText == 4"
style="width: 14px"
src="@/assets/images/triangle2.png"
/>
片块信息
<img v-if="SelectedText == 4" style="width: 14px" src="@/assets/images/triangle.png" />
<img
v-if="SelectedText == 4"
style="width: 14px"
src="@/assets/images/triangle.png"
/>
</div>
</el-col>
<el-col :span="8">
<div :id="SelectedText == 5 ? 'overviewItemSelect' : ''" class="overviewItem">
<img v-if="SelectedText == 5" style="width: 14px" src="@/assets/images/triangle2.png" />
<div
:id="SelectedText == 5 ? 'overviewItemSelect' : ''"
class="overviewItem"
>
<img
v-if="SelectedText == 5"
style="width: 14px"
src="@/assets/images/triangle2.png"
/>
地块信息
<img v-if="SelectedText == 5" style="width: 14px" src="@/assets/images/triangle.png" />
<img
v-if="SelectedText == 5"
style="width: 14px"
src="@/assets/images/triangle.png"
/>
</div>
</el-col>
<el-col :span="8">
<div :id="SelectedText == 6 ? 'overviewItemSelect' : ''" class="overviewItem">
<img v-if="SelectedText == 6" style="width: 14px" src="@/assets/images/triangle2.png" />
<div
:id="SelectedText == 6 ? 'overviewItemSelect' : ''"
class="overviewItem"
>
<img
v-if="SelectedText == 6"
style="width: 14px"
src="@/assets/images/triangle2.png"
/>
土地确权
<img v-if="SelectedText == 6" style="width: 14px" src="@/assets/images/triangle.png" />
<img
v-if="SelectedText == 6"
style="width: 14px"
src="@/assets/images/triangle.png"
/>
</div>
</el-col>
</el-row>
@ -142,8 +269,10 @@
<span>{{ titleText }}</span>
<p @click="Deta()">
下载 &nbsp;
<img src="@/assets/icons/svg/downloads.svg"
style="width: 14px; height: 14px; cursor: pointer" />
<img
src="@/assets/icons/svg/downloads.svg"
style="width: 14px; height: 14px; cursor: pointer"
/>
</p>
</div>
<div v-if="SelectedText !== 1" class="Involution">
@ -162,14 +291,30 @@
</div>
</div>
<div class="rightFoldDiv" @click="rightFoldClick()">
<el-tooltip :disabled="!rightWraFlag" hide-after="0" :show-arrow="false" show-after="200" class="box-item"
effect="dark" content="收起" placement="top">
<el-tooltip
:disabled="!rightWraFlag"
hide-after="0"
:show-arrow="false"
show-after="200"
class="box-item"
effect="dark"
content="收起"
placement="top"
>
<el-icon v-if="rightWraFlag">
<img src="@/assets/images/shouhuis.png" />
</el-icon>
</el-tooltip>
<el-tooltip :disabled="rightWraFlag" hide-after="0" :show-arrow="false" show-after="200" class="box-item"
effect="dark" content="展开" placement="top">
<el-tooltip
:disabled="rightWraFlag"
hide-after="0"
:show-arrow="false"
show-after="200"
class="box-item"
effect="dark"
content="展开"
placement="top"
>
<el-icon v-if="!rightWraFlag">
<img src="@/assets/images/zhankaiss.png" />
</el-icon>
@ -180,39 +325,77 @@
<span><img src="@/assets/images/amplify.png" alt="" /></span>
<span><img src="@/assets/images/reduce.png" alt="" /></span> -->
<span @click="onMeasureLength">
<el-tooltip class="box-item" :disabled="leftWraFlag" :show-arrow="false" hide-after="0" show-after="200"
effect="dark" content="测量线" placement="left" offset="1">
<el-tooltip
class="box-item"
:disabled="leftWraFlag"
:show-arrow="false"
hide-after="0"
show-after="200"
effect="dark"
content="测量线"
placement="left"
offset="1"
>
<img src="@/assets/images/measure.png" alt="" />
</el-tooltip>
</span>
<span @click="onMeasureArea">
<el-tooltip class="box-item" :disabled="leftWraFlag" :show-arrow="false" hide-after="0" show-after="200"
effect="dark" content="测量面" placement="left" offset="1">
<el-tooltip
class="box-item"
:disabled="leftWraFlag"
:show-arrow="false"
hide-after="0"
show-after="200"
effect="dark"
content="测量面"
placement="left"
offset="1"
>
<img src="@/assets/images/face.png" alt="" />
</el-tooltip>
</span>
<span @click="removeGongju">
<el-tooltip class="box-item" :disabled="leftWraFlag" :show-arrow="false" hide-after="0" show-after="200"
effect="dark" content="清除" placement="left" offset="1">
<el-tooltip
class="box-item"
:disabled="leftWraFlag"
:show-arrow="false"
hide-after="0"
show-after="200"
effect="dark"
content="清除"
placement="left"
offset="1"
>
<img src="@/assets/images/shanchu.png" alt="" />
</el-tooltip>
</span>
</div>
</div>
<div class="treeDiv">
<el-tree :props="props" :data="datas" @check="layerCheckChang" :render-content="renderCustomNode"
show-checkbox />
<el-tree
:props="props"
:data="datas"
@check="layerCheckChang"
:render-content="renderCustomNode"
show-checkbox
/>
</div>
<div class="farmlandTimeDiv" :id="timeFlage ? 'appear' : ''" @click="e => tabTime(e)">
<div class="farmlandTimeDivCenter">
<div v-for="(value, key) in layersGbz" :class="{ flag: flagObj[key] == true }" :key="value">
<div
v-for="(value, key) in layersGbz"
:class="{ flag: flagObj[key] == true }"
:key="value"
>
{{ key }}
</div>
</div>
</div>
<div id="popup" class="ol-popup">
<div class="pophead" style="width: 100%">
<div id="popup-title" style="
<div
id="popup-title"
style="
font-size: 20px;
font-weight: 400;
letter-spacing: 1px;
@ -221,7 +404,8 @@
border-radius: 8px;
margin: 20px;
background: rgba(100, 195, 164, 0.05);
"></div>
"
></div>
<a href="#" id="popup-closer" class="ol-popup-closer"></a>
</div>
<div id="popup-background">
@ -322,13 +506,13 @@ watch(
});
newData.forEach(item => {
if (layersGbz[item]) {
if (['土地确权', '三调'].includes(item)) {
if (['土地确权', '土地利用现状'].includes(item)) {
addUgcv(layersDicS[item]);
} else {
addwms(layersGbz[item]);
}
} else if (layersDic[item]) {
if (['土地确权', '三调'].includes(item)) {
if (['土地确权', '土地利用现状'].includes(item)) {
addUgcv(layersDicS[item]);
} else {
addwms(layersDic[item]);
@ -354,7 +538,7 @@ watch(
}
}
});
} else if (layersDic[item] && !['土地确权', '三调'].includes(item)) {
} else if (layersDic[item] && !['土地确权', '土地利用现状'].includes(item)) {
map.getLayers()
.getArray()
.forEach((ite, index) => {
@ -428,10 +612,10 @@ const datas = [
],
},
{
label: '三调',
label: '土地利用现状',
children: [
{
label: '三调',
label: '土地利用现状',
},
],
},
@ -505,7 +689,7 @@ let layersDicS = {
name: 'DK3702112022WGS84',
setOf: 'tudiquequanxk',
},
三调: {
土地利用现状: {
name: 'T2021DLTB',
setOf: 'sandiaoshujuWGS84',
},
@ -532,7 +716,7 @@ let layersDic = {
setOf: 'DK3702112022WGS84@tudiquequanxk',
name: 'map-tudiquequanxk',
},
三调: {
土地利用现状: {
setOf: 'T2021DLTB@sandiaoshujuWGS84',
name: 'map-sandiaoshujuWGS84',
},
@ -591,11 +775,7 @@ function initmap() {
new ol.layer.Tile({
source: new ol.source.XYZ({
url: `${serverAPI.tiandituLayers}`,
projection:
serverAPI.tiandituLayers ==
'http://59.206.203.34/tileservice/SdRasterPubMap?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=sdimg2017&STYLE=default&TILEMATRIXSET=img2017&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=application%2Fpng'
? 'EPSG:4326'
: 'EPSG:3857',
projection: serverAPI.flag ? 'EPSG:4326' : 'EPSG:3857',
}),
preload: 20, // 设置预加载的瓦片数这里是预加载当前级别和2个级别更低的瓦片
}),
@ -1127,8 +1307,8 @@ function QueryData(e, name, url, item) {
'</div>';
disab.value = false;
});
} else if (alterData.value[0].name == '三调') {
titleDiv.innerHTML = '三调';
} else if (alterData.value[0].name == '土地利用现状') {
titleDiv.innerHTML = '土地利用现状';
content.innerHTML =
'<div class="content-children">' +
'<p>标识码: ' +
@ -1677,8 +1857,8 @@ function QueryData(e, name, url, item) {
'</div>';
disab.value = false;
});
} else if (attr.name == '三调') {
titleDiv.innerHTML = '三调';
} else if (attr.name == '土地利用现状') {
titleDiv.innerHTML = '土地利用现状';
content.innerHTML =
'<div class="content-children">' +
'<p>标识码: ' +
@ -2150,7 +2330,7 @@ const renderCustomNode = (h, { node, data }) => {
},
node.label
);
case '三调':
case '土地利用现状':
return h(
'span',
{
@ -2771,7 +2951,7 @@ function farmland() {
barBorderRadius: [100, 100, 0, 0],
},
},
renderItem: function (params, api) { },
renderItem: function (params, api) {},
data: sumData,
},
];
@ -2821,7 +3001,7 @@ function farmland() {
barBorderRadius: [100, 100, 0, 0],
},
},
renderItem: function (params, api) { },
renderItem: function (params, api) {},
data: quantityData,
});
} else if (SelectedText.value == '4') {
@ -2857,7 +3037,7 @@ function farmland() {
barBorderRadius: [100, 100, 0, 0],
},
},
renderItem: function (params, api) { },
renderItem: function (params, api) {},
data: quantityData,
});
} else if (SelectedText.value == '5') {
@ -2893,7 +3073,7 @@ function farmland() {
barBorderRadius: [100, 100, 0, 0],
},
},
renderItem: function (params, api) { },
renderItem: function (params, api) {},
data: quantityData,
});
} else if (SelectedText.value == '6') {
@ -2929,7 +3109,7 @@ function farmland() {
barBorderRadius: [100, 100, 0, 0],
},
},
renderItem: function (params, api) { },
renderItem: function (params, api) {},
data: quantityData,
});
}
@ -3306,9 +3486,8 @@ $height: calc(100vh - 100px);
:deep() .el-tree {
.el-tree-node {
// css 让父级不现实checkbox
.is-leaf+.el-checkbox .el-checkbox__inner {
.is-leaf + .el-checkbox .el-checkbox__inner {
display: inline-block;
}
@ -3537,9 +3716,11 @@ $height: calc(100vh - 100px);
height: 28px;
line-height: 28px;
font-size: 14px;
background: linear-gradient(270deg,
rgba(19, 92, 98, 0) 0%,
rgba(33, 169, 169, 0.36) 100%);
background: linear-gradient(
270deg,
rgba(19, 92, 98, 0) 0%,
rgba(33, 169, 169, 0.36) 100%
);
padding-left: 18px;
display: flex;
background-image: url('@/assets/images/duande.png') !important;
@ -3571,9 +3752,11 @@ $height: calc(100vh - 100px);
height: 28px;
opacity: 1;
border-radius: 4px;
background: linear-gradient(180deg,
rgba(30, 143, 105, 1) 0%,
rgba(100, 195, 164, 1) 100%);
background: linear-gradient(
180deg,
rgba(30, 143, 105, 1) 0%,
rgba(100, 195, 164, 1) 100%
);
border: 1.5px solid rgba(23, 194, 180, 1);
@ -3589,9 +3772,11 @@ $height: calc(100vh - 100px);
height: 28px;
opacity: 1;
border-radius: 4px;
background: linear-gradient(180deg,
rgba(30, 143, 105, 1) 0%,
rgba(100, 195, 164, 1) 100%);
background: linear-gradient(
180deg,
rgba(30, 143, 105, 1) 0%,
rgba(100, 195, 164, 1) 100%
);
border: 1.5px solid rgba(23, 194, 180, 1);
display: flex;
@ -3715,9 +3900,11 @@ $height: calc(100vh - 100px);
align-items: center;
justify-content: space-around;
opacity: 1;
background: linear-gradient(90deg,
rgba(21, 173, 148, 0.1) 0%,
rgba(21, 173, 148, 0) 100%);
background: linear-gradient(
90deg,
rgba(21, 173, 148, 0.1) 0%,
rgba(21, 173, 148, 0) 100%
);
div {
display: flex;
@ -4059,9 +4246,11 @@ $height: calc(100vh - 100px);
height: 29px;
margin: 0 auto;
border-radius: 4px;
background: linear-gradient(90deg,
rgba(208, 245, 233, 1) 0%,
rgba(255, 255, 255, 1) 100%);
background: linear-gradient(
90deg,
rgba(208, 245, 233, 1) 0%,
rgba(255, 255, 255, 1) 100%
);
color: rgba(100, 195, 164, 1);
font-size: 18px;
font-weight: 700;
@ -4211,11 +4400,11 @@ $height: calc(100vh - 100px);
cursor: pointer;
}
&>div {
& > div {
display: flex;
margin-bottom: 10px;
&>div:nth-child(1) {
& > div:nth-child(1) {
font-weight: 400;
letter-spacing: 0px;
color: rgba(255, 255, 255, 1);
@ -4224,7 +4413,7 @@ $height: calc(100vh - 100px);
margin-right: 10px;
}
&>div:nth-child(2) {
& > div:nth-child(2) {
color: rgba(255, 255, 255, 1);
width: 129px;
height: 24px;