最新dev分支合并到master分支 master分支已备份
@ -4,9 +4,11 @@ VITE_APP_NAME = 'daimp-front-main'
|
|||||||
VITE_APP_TITLE = '数字农业产业管理平台'
|
VITE_APP_TITLE = '数字农业产业管理平台'
|
||||||
VITE_APP_SUB_OS = '//localhost:9526/sub-operation-service/'
|
VITE_APP_SUB_OS = '//localhost:9526/sub-operation-service/'
|
||||||
VITE_APP_SUB_OA = '//localhost:9527/sub-operation-admin/'
|
VITE_APP_SUB_OA = '//localhost:9527/sub-operation-admin/'
|
||||||
|
# VITE_APP_SUB_GAS = 'http://192.168.18.128:9528/sub-government-affairs-service/'
|
||||||
VITE_APP_SUB_GAS = '//localhost:9528/sub-government-affairs-service/'
|
VITE_APP_SUB_GAS = '//localhost:9528/sub-government-affairs-service/'
|
||||||
VITE_APP_SUB_GAA = '//localhost:9525/sub-government-affairs-admin/'
|
VITE_APP_SUB_GAA = '//localhost:9525/sub-government-admin/'
|
||||||
VITE_APP_SUB_GSS = '//localhost:9529/sub-government-screen-service/'
|
VITE_APP_SUB_GSS = '//localhost:9529/sub-government-screen-service/'
|
||||||
|
VITE_APP_SUB_GSR = '//localhost:9530/new-digital-agriculture-screen/'
|
||||||
# 接口
|
# 接口
|
||||||
VITE_APP_BASE_API = '/apis'
|
VITE_APP_BASE_API = '/apis'
|
||||||
VITE_APP_BASE_URL = 'http://192.168.18.99:8080'
|
VITE_APP_BASE_URL = 'http://192.168.18.99:8080'
|
||||||
|
13
main/.env.pre
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# 本地环境
|
||||||
|
VITE_APP_NAME = 'daimp-front-main'
|
||||||
|
VITE_APP_TITLE = '数字农业产业管理平台'
|
||||||
|
VITE_APP_SUB_OS = '//localhost:8090/sub-operation-service/'
|
||||||
|
VITE_APP_SUB_OA = '//localhost:8090/sub-operation-admin/'
|
||||||
|
VITE_APP_SUB_GAS = '//localhost:8090/sub-government-affairs-service/'
|
||||||
|
VITE_APP_SUB_GAA = '//localhost:8090/sub-government-admin/'
|
||||||
|
VITE_APP_SUB_GSS = '//localhost:8090/sub-government-screen-service/'
|
||||||
|
# 接口
|
||||||
|
VITE_APP_BASE_API = '/apis'
|
||||||
|
VITE_APP_BASE_URL = ''
|
||||||
|
VITE_APP_UPLOAD_API = '/uploadApis'
|
||||||
|
VITE_APP_UPLOAD_URL = ''
|
@ -6,6 +6,7 @@ VITE_APP_SUB_OA = '//http://47.109.205.240:88/sub-operation-admin/'
|
|||||||
VITE_APP_SUB_GAS = '//http://47.109.205.240:88/sub-government-affairs-service/'
|
VITE_APP_SUB_GAS = '//http://47.109.205.240:88/sub-government-affairs-service/'
|
||||||
VITE_APP_SUB_GAA = '//http://47.109.205.240:88/sub-government-affairs-admin/'
|
VITE_APP_SUB_GAA = '//http://47.109.205.240:88/sub-government-affairs-admin/'
|
||||||
VITE_APP_SUB_GSS = '//http://47.109.205.240:88/sub-government-screen-service/'
|
VITE_APP_SUB_GSS = '//http://47.109.205.240:88/sub-government-screen-service/'
|
||||||
|
VITE_APP_SUB_GSR = '//http://47.109.205.240:88/new-digital-agriculture-screen/'
|
||||||
# 接口
|
# 接口
|
||||||
VITE_APP_BASE_API = '/apis'
|
VITE_APP_BASE_API = '/apis'
|
||||||
VITE_APP_BASE_URL = ''
|
VITE_APP_BASE_URL = ''
|
||||||
|
@ -4,8 +4,9 @@ VITE_APP_TITLE = '数字农业产业管理平台'
|
|||||||
VITE_APP_SUB_OS = '//192.168.18.99:88/sub-operation-service/'
|
VITE_APP_SUB_OS = '//192.168.18.99:88/sub-operation-service/'
|
||||||
VITE_APP_SUB_OA = '//192.168.18.99:88/sub-operation-admin/'
|
VITE_APP_SUB_OA = '//192.168.18.99:88/sub-operation-admin/'
|
||||||
VITE_APP_SUB_GAS = '//192.168.18.99:88/sub-government-affairs-service/'
|
VITE_APP_SUB_GAS = '//192.168.18.99:88/sub-government-affairs-service/'
|
||||||
VITE_APP_SUB_GAA = '//192.168.18.99:88/sub-government-affairs-admin/'
|
VITE_APP_SUB_GAA = '//192.168.18.99:88/sub-government-admin/'
|
||||||
VITE_APP_SUB_GSS = '//192.168.18.99:88/sub-government-screen-service/'
|
VITE_APP_SUB_GSS = '//192.168.18.99:88/sub-government-screen-service/'
|
||||||
|
VITE_APP_SUB_GSR = '//192.168.18.99:88/new-digital-agriculture-screen/'
|
||||||
# 接口
|
# 接口
|
||||||
VITE_APP_BASE_API = '/apis'
|
VITE_APP_BASE_API = '/apis'
|
||||||
VITE_APP_BASE_URL = ''
|
VITE_APP_BASE_URL = ''
|
||||||
|
@ -7,13 +7,13 @@
|
|||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title></title>
|
<title></title>
|
||||||
<script>
|
<script>
|
||||||
window._AMapSecurityConfig = {
|
// window._AMapSecurityConfig = {
|
||||||
securityJsCode: 'f09302d3ed65110614bdb26e44717ddf',
|
// securityJsCode: 'f09302d3ed65110614bdb26e44717ddf',
|
||||||
};
|
// };
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript"
|
<!-- <script type="text/javascript"
|
||||||
src="https://webapi.amap.com/maps?v=2.0&key=c843a50db7157faf295c6fa37c48719f&plugin=AMap.PlaceSearch,AMap.Geocoder"></script>
|
src="https://webapi.amap.com/maps?v=2.0&key=c843a50db7157faf295c6fa37c48719f&plugin=AMap.PlaceSearch,AMap.Geocoder"></script>
|
||||||
<script src="https://webapi.amap.com/ui/1.1/main.js?v=1.0.11"></script>
|
<script src="https://webapi.amap.com/ui/1.1/main.js?v=1.0.11"></script> -->
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
@ -37,10 +37,20 @@ export default {
|
|||||||
emits: ['click'],
|
emits: ['click'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const chartRef = ref(null);
|
const chartRef = ref(null);
|
||||||
const { setOptions, getInstance } = useEcharts(chartRef);
|
const { setOptions, getInstance, startAutoPlay } = useEcharts(chartRef);
|
||||||
const option = reactive({
|
const option = reactive({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
tooltip: {
|
||||||
|
backgroundColor: 'rgba(12, 36, 56, 0.9)', // 背景颜色(支持RGBA格式)
|
||||||
|
borderColor: '#2cf4fd', // 边框颜色
|
||||||
|
borderWidth: 1, // 边框宽度
|
||||||
|
textStyle: {
|
||||||
|
color: '#fff', // 文字颜色
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
|
formatter: '{b}:{c}',
|
||||||
|
},
|
||||||
axisPointer: {
|
axisPointer: {
|
||||||
type: 'shadow',
|
type: 'shadow',
|
||||||
label: {
|
label: {
|
||||||
@ -97,6 +107,11 @@ export default {
|
|||||||
option.series = props.isSeries && option.series.length > 0 ? option.series : seriesData;
|
option.series = props.isSeries && option.series.length > 0 ? option.series : seriesData;
|
||||||
option.xAxis.data = xAxisData;
|
option.xAxis.data = xAxisData;
|
||||||
setOptions(option);
|
setOptions(option);
|
||||||
|
startAutoPlay({
|
||||||
|
interval: 2000,
|
||||||
|
seriesIndex: 0,
|
||||||
|
showTooltip: true,
|
||||||
|
});
|
||||||
getInstance()?.off('click', onClick);
|
getInstance()?.off('click', onClick);
|
||||||
getInstance()?.on('click', onClick);
|
getInstance()?.on('click', onClick);
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ export default {
|
|||||||
emits: ['click'],
|
emits: ['click'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const chartRef = ref(null);
|
const chartRef = ref(null);
|
||||||
const { setOptions, getInstance, resize } = useEcharts(chartRef);
|
const { setOptions, getInstance, resize, startAutoPlay } = useEcharts(chartRef);
|
||||||
const optionVal = reactive({});
|
const optionVal = reactive({});
|
||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
@ -55,6 +55,11 @@ export default {
|
|||||||
Object.assign(optionVal, cloneDeep(props.option));
|
Object.assign(optionVal, cloneDeep(props.option));
|
||||||
}
|
}
|
||||||
setOptions(props.option);
|
setOptions(props.option);
|
||||||
|
startAutoPlay({
|
||||||
|
interval: 2000,
|
||||||
|
seriesIndex: 0,
|
||||||
|
showTooltip: true,
|
||||||
|
});
|
||||||
resize();
|
resize();
|
||||||
getInstance()?.off('click', onClick);
|
getInstance()?.off('click', onClick);
|
||||||
getInstance()?.on('click', onClick);
|
getInstance()?.on('click', onClick);
|
||||||
|
@ -34,7 +34,7 @@ export default {
|
|||||||
emits: ['click'],
|
emits: ['click'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const chartRef = ref(null);
|
const chartRef = ref(null);
|
||||||
const { setOptions, getInstance } = useEcharts(chartRef);
|
const { setOptions, getInstance, startAutoPlay } = useEcharts(chartRef);
|
||||||
const option = reactive({
|
const option = reactive({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
@ -138,6 +138,11 @@ export default {
|
|||||||
option.series = seriesData;
|
option.series = seriesData;
|
||||||
option.xAxis.data = xAxisData;
|
option.xAxis.data = xAxisData;
|
||||||
setOptions(option);
|
setOptions(option);
|
||||||
|
startAutoPlay({
|
||||||
|
interval: 2000,
|
||||||
|
seriesIndex: 0,
|
||||||
|
showTooltip: true,
|
||||||
|
});
|
||||||
getInstance()?.off('click', onClick);
|
getInstance()?.off('click', onClick);
|
||||||
getInstance()?.on('click', onClick);
|
getInstance()?.on('click', onClick);
|
||||||
}
|
}
|
||||||
|
@ -29,10 +29,17 @@ export default {
|
|||||||
},
|
},
|
||||||
setup(props) {
|
setup(props) {
|
||||||
const chartRef = ref(null);
|
const chartRef = ref(null);
|
||||||
const { setOptions } = useEcharts(chartRef);
|
const { setOptions, startAutoPlay } = useEcharts(chartRef);
|
||||||
const option = reactive({
|
const option = reactive({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
trigger: 'axis',
|
trigger: 'axis',
|
||||||
|
backgroundColor: 'rgba(12, 36, 56, 0.9)', // 背景颜色(支持RGBA格式)
|
||||||
|
borderColor: '#2cf4fd', // 边框颜色
|
||||||
|
borderWidth: 1, // 边框宽度
|
||||||
|
textStyle: {
|
||||||
|
color: '#fff', // 文字颜色
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
axisPointer: {
|
axisPointer: {
|
||||||
type: 'shadow',
|
type: 'shadow',
|
||||||
label: {
|
label: {
|
||||||
@ -84,6 +91,11 @@ export default {
|
|||||||
option.series = seriesData;
|
option.series = seriesData;
|
||||||
option.xAxis.data = xAxisData;
|
option.xAxis.data = xAxisData;
|
||||||
setOptions(option);
|
setOptions(option);
|
||||||
|
startAutoPlay({
|
||||||
|
interval: 2000,
|
||||||
|
seriesIndex: 0,
|
||||||
|
showTooltip: true,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return { chartRef };
|
return { chartRef };
|
||||||
},
|
},
|
||||||
|
@ -33,7 +33,7 @@ export default {
|
|||||||
emits: ['click'],
|
emits: ['click'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const chartRef = ref(null);
|
const chartRef = ref(null);
|
||||||
const { setOptions, getInstance, resize } = useEcharts(chartRef);
|
const { setOptions, getInstance, resize, startAutoPlay } = useEcharts(chartRef);
|
||||||
const option = reactive({
|
const option = reactive({
|
||||||
grid: {
|
grid: {
|
||||||
left: '3%',
|
left: '3%',
|
||||||
@ -42,9 +42,6 @@ export default {
|
|||||||
top: '11%',
|
top: '11%',
|
||||||
containLabel: true,
|
containLabel: true,
|
||||||
},
|
},
|
||||||
tooltip: {
|
|
||||||
formatter: '{b}',
|
|
||||||
},
|
|
||||||
series: [
|
series: [
|
||||||
{
|
{
|
||||||
type: 'pictorialBar',
|
type: 'pictorialBar',
|
||||||
@ -104,6 +101,11 @@ export default {
|
|||||||
Object.assign(option, cloneDeep(props.option));
|
Object.assign(option, cloneDeep(props.option));
|
||||||
}
|
}
|
||||||
setOptions(option);
|
setOptions(option);
|
||||||
|
startAutoPlay({
|
||||||
|
interval: 2000,
|
||||||
|
seriesIndex: 0,
|
||||||
|
showTooltip: true,
|
||||||
|
});
|
||||||
resize();
|
resize();
|
||||||
getInstance()?.off('click', onClick);
|
getInstance()?.off('click', onClick);
|
||||||
getInstance()?.on('click', onClick);
|
getInstance()?.on('click', onClick);
|
||||||
|
@ -33,9 +33,16 @@ export default {
|
|||||||
emits: ['click'],
|
emits: ['click'],
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const chartRef = ref(null);
|
const chartRef = ref(null);
|
||||||
const { setOptions, getInstance, resize } = useEcharts(chartRef);
|
const { setOptions, getInstance, resize, startAutoPlay } = useEcharts(chartRef);
|
||||||
const option = reactive({
|
const option = reactive({
|
||||||
tooltip: {
|
tooltip: {
|
||||||
|
backgroundColor: 'rgba(12, 36, 56, 0.9)', // 背景颜色(支持RGBA格式)
|
||||||
|
borderColor: '#2cf4fd', // 边框颜色
|
||||||
|
borderWidth: 1, // 边框宽度
|
||||||
|
textStyle: {
|
||||||
|
color: '#fff', // 文字颜色
|
||||||
|
fontSize: 12,
|
||||||
|
},
|
||||||
formatter: '{b} ({c})',
|
formatter: '{b} ({c})',
|
||||||
},
|
},
|
||||||
series: [
|
series: [
|
||||||
@ -74,6 +81,11 @@ export default {
|
|||||||
}
|
}
|
||||||
option.series[0].data = props.chartData;
|
option.series[0].data = props.chartData;
|
||||||
setOptions(option);
|
setOptions(option);
|
||||||
|
startAutoPlay({
|
||||||
|
interval: 2000,
|
||||||
|
seriesIndex: 0,
|
||||||
|
showTooltip: true,
|
||||||
|
});
|
||||||
resize();
|
resize();
|
||||||
getInstance()?.off('click', onClick);
|
getInstance()?.off('click', onClick);
|
||||||
getInstance()?.on('click', onClick);
|
getInstance()?.on('click', onClick);
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
<el-dialog
|
<el-dialog
|
||||||
v-model="state.visible"
|
v-model="state.visible"
|
||||||
draggable
|
draggable
|
||||||
title="文件导入"
|
append-to-body
|
||||||
|
:title="title"
|
||||||
width="50%"
|
width="50%"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
:close-on-press-escape="false"
|
:close-on-press-escape="false"
|
||||||
@ -16,7 +17,7 @@
|
|||||||
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
||||||
<div class="el-upload__text">将文件放在此处或单击上传</div>
|
<div class="el-upload__text">将文件放在此处或单击上传</div>
|
||||||
<template #tip>
|
<template #tip>
|
||||||
<div class="el-upload__tip">excel文件大小小于500kb</div>
|
<div class="el-upload__tip">仅允许导入xls、xlsx格式文件,excel文件大小小于500kb</div>
|
||||||
</template>
|
</template>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@ -29,6 +30,10 @@
|
|||||||
import { reactive, ref, shallowRef } from 'vue';
|
import { reactive, ref, shallowRef } from 'vue';
|
||||||
import { isEmpty } from '@/utils';
|
import { isEmpty } from '@/utils';
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: '文件导入',
|
||||||
|
},
|
||||||
tips: {
|
tips: {
|
||||||
type: String,
|
type: String,
|
||||||
default: '提示:导入前请先下载模板填写信息,然后再导入!',
|
default: '提示:导入前请先下载模板填写信息,然后再导入!',
|
||||||
|
144
main/src/components/custom-number-select-double/index.vue
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
<template>
|
||||||
|
<section class="custom_number_select_" style="">
|
||||||
|
<el-input-number
|
||||||
|
v-model="data.num"
|
||||||
|
:precision="_numberSet.precision"
|
||||||
|
:step="_numberSet.step"
|
||||||
|
:min="_numberSet.min"
|
||||||
|
:controls-position="_numberSet.controlsPosition"
|
||||||
|
@change="handleChange"
|
||||||
|
>
|
||||||
|
</el-input-number>
|
||||||
|
<el-select v-model="data.value1" class="_center" @change="handleChange">
|
||||||
|
<el-option
|
||||||
|
v-for="item in props.options1"
|
||||||
|
:key="'custom_' + Date.now() + item[props.prop.value]"
|
||||||
|
:label="item[props.prop.label]"
|
||||||
|
:value="item[props.prop.value]"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
<el-select v-model="data.value2" @change="handleChange">
|
||||||
|
<el-option
|
||||||
|
v-for="item in props.options2"
|
||||||
|
:key="'custom_' + Date.now() + item[props.prop.value]"
|
||||||
|
:label="item[props.prop.label]"
|
||||||
|
:value="item[props.prop.value]"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, watchEffect } from 'vue';
|
||||||
|
|
||||||
|
const emit = defineEmits(['update:value']);
|
||||||
|
const props = defineProps({
|
||||||
|
value: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {
|
||||||
|
num: 1,
|
||||||
|
value1: '1',
|
||||||
|
value2: '1',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
options1: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [
|
||||||
|
{
|
||||||
|
value: '1',
|
||||||
|
label: 'value1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '2',
|
||||||
|
label: 'value2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '3',
|
||||||
|
label: 'value3',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
options2: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [
|
||||||
|
{
|
||||||
|
value: '1',
|
||||||
|
label: '_value1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '2',
|
||||||
|
label: '_value2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '3',
|
||||||
|
label: '_value3',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
set: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
numberSet: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
prop: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return { label: 'label', value: 'value' };
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const _numberSet = ref({
|
||||||
|
precision: 2,
|
||||||
|
step: 1,
|
||||||
|
min: 1,
|
||||||
|
controlsPosition: 'right',
|
||||||
|
});
|
||||||
|
const data = ref({
|
||||||
|
num: 1,
|
||||||
|
value1: '1',
|
||||||
|
value2: '1',
|
||||||
|
});
|
||||||
|
watchEffect(() => {
|
||||||
|
data.value = Object.assign(data.value, props.value);
|
||||||
|
_numberSet.value = Object.assign(_numberSet.value, props.numberSet);
|
||||||
|
if (data.value.num === null) {
|
||||||
|
data.value.num = _numberSet.value.min;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
function handleChange() {
|
||||||
|
emit('update:value', data.value);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.custom_number_select_ {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 56% 22% 22%;
|
||||||
|
::v-deep() {
|
||||||
|
.el-input-number {
|
||||||
|
width: 100%;
|
||||||
|
.el-input__wrapper {
|
||||||
|
border-radius: 4px 0 0 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-select__wrapper {
|
||||||
|
border-radius: 0 4px 4px 0 !important;
|
||||||
|
border-left: none;
|
||||||
|
}
|
||||||
|
._center {
|
||||||
|
.el-select__wrapper {
|
||||||
|
border-radius: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
112
main/src/components/custom-number-select/index.vue
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
<template>
|
||||||
|
<section class="custom_number_select_" style="">
|
||||||
|
<el-input-number
|
||||||
|
v-model="data.num"
|
||||||
|
:precision="_numberSet.precision"
|
||||||
|
:step="_numberSet.step"
|
||||||
|
:min="_numberSet.min"
|
||||||
|
:controls-position="_numberSet.controlsPosition"
|
||||||
|
@change="handleChange"
|
||||||
|
>
|
||||||
|
</el-input-number>
|
||||||
|
<el-select v-model="data.type" @change="handleChange">
|
||||||
|
<el-option
|
||||||
|
v-for="item in props.options"
|
||||||
|
:key="'custom_' + Date.now() + item[props.prop.value]"
|
||||||
|
:label="item[props.prop.label]"
|
||||||
|
:value="item[props.prop.value]"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, watchEffect } from 'vue';
|
||||||
|
|
||||||
|
const emit = defineEmits(['update:value']);
|
||||||
|
const props = defineProps({
|
||||||
|
value: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {
|
||||||
|
num: 1,
|
||||||
|
type: '1',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
options: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [
|
||||||
|
{
|
||||||
|
value: '1',
|
||||||
|
label: 'value1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '2',
|
||||||
|
label: 'value2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: '3',
|
||||||
|
label: 'value3',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
set: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
numberSet: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
prop: {
|
||||||
|
type: Object,
|
||||||
|
default: () => {
|
||||||
|
return { label: 'label', value: 'value' };
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const _numberSet = ref({
|
||||||
|
precision: 2,
|
||||||
|
step: 1,
|
||||||
|
min: 1,
|
||||||
|
controlsPosition: 'right',
|
||||||
|
});
|
||||||
|
const data = ref({
|
||||||
|
num: 1,
|
||||||
|
type: '1',
|
||||||
|
});
|
||||||
|
watchEffect(() => {
|
||||||
|
data.value = Object.assign(data.value, props.value);
|
||||||
|
_numberSet.value = Object.assign(_numberSet.value, props.numberSet);
|
||||||
|
if (data.value.num === null) {
|
||||||
|
data.value.num = _numberSet.value.min;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
function handleChange() {
|
||||||
|
emit('update:value', data.value);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.custom_number_select_ {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 75% 25%;
|
||||||
|
::v-deep() {
|
||||||
|
.el-input-number {
|
||||||
|
width: 100%;
|
||||||
|
.el-input__wrapper {
|
||||||
|
border-radius: 4px 0 0 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-select__wrapper {
|
||||||
|
border-radius: 0 4px 4px 0 !important;
|
||||||
|
border-left: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -19,6 +19,8 @@ import CustomEchartPieGauge from './custom-echart-pie-gauge';
|
|||||||
import CustomEchartWordCloud from './custom-echart-word-cloud';
|
import CustomEchartWordCloud from './custom-echart-word-cloud';
|
||||||
import customEchartScatterBlister from './custom-echart-scatter-blister';
|
import customEchartScatterBlister from './custom-echart-scatter-blister';
|
||||||
import customEchartMaps from './custom-echart-maps';
|
import customEchartMaps from './custom-echart-maps';
|
||||||
|
import customNumberSelect from './custom-number-select';
|
||||||
|
import customNumberSelectDouble from './custom-number-select-double';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
SvgIcon,
|
SvgIcon,
|
||||||
@ -42,4 +44,6 @@ export {
|
|||||||
CustomEchartWordCloud,
|
CustomEchartWordCloud,
|
||||||
customEchartScatterBlister,
|
customEchartScatterBlister,
|
||||||
customEchartMaps,
|
customEchartMaps,
|
||||||
|
customNumberSelect,
|
||||||
|
customNumberSelectDouble,
|
||||||
};
|
};
|
||||||
|
@ -6,6 +6,57 @@ import { useBreakpoint } from './useBreakpoint';
|
|||||||
import echarts from '../utils/echarts';
|
import echarts from '../utils/echarts';
|
||||||
|
|
||||||
export const useEcharts = (elRef, theme = 'default') => {
|
export const useEcharts = (elRef, theme = 'default') => {
|
||||||
|
// 新增轮播相关状态
|
||||||
|
const autoPlayTimer = ref(null);
|
||||||
|
const currentIndex = ref(-1);
|
||||||
|
const dataLength = ref(0);
|
||||||
|
|
||||||
|
// 新增方法 - 启动轮播
|
||||||
|
const startAutoPlay = (options = {}) => {
|
||||||
|
const {
|
||||||
|
interval = 2000, // 轮播间隔(ms)
|
||||||
|
seriesIndex = 0, // 默认操作第一个系列
|
||||||
|
showTooltip = true, // 是否显示提示框
|
||||||
|
} = options;
|
||||||
|
|
||||||
|
stopAutoPlay(); // 先停止已有轮播
|
||||||
|
|
||||||
|
// 获取数据长度
|
||||||
|
const seriesData = unref(getOptions).series?.[seriesIndex]?.data;
|
||||||
|
dataLength.value = seriesData?.length || 0;
|
||||||
|
if (dataLength.value === 0) return;
|
||||||
|
|
||||||
|
autoPlayTimer.value = setInterval(() => {
|
||||||
|
currentIndex.value = (currentIndex.value + 1) % dataLength.value;
|
||||||
|
|
||||||
|
// 执行轮播动作
|
||||||
|
chartInstance?.dispatchAction({
|
||||||
|
type: 'downplay',
|
||||||
|
seriesIndex: seriesIndex,
|
||||||
|
});
|
||||||
|
chartInstance?.dispatchAction({
|
||||||
|
type: 'highlight',
|
||||||
|
seriesIndex: seriesIndex,
|
||||||
|
dataIndex: currentIndex.value,
|
||||||
|
});
|
||||||
|
if (showTooltip) {
|
||||||
|
chartInstance?.dispatchAction({
|
||||||
|
type: 'showTip',
|
||||||
|
seriesIndex: seriesIndex,
|
||||||
|
dataIndex: currentIndex.value,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, interval);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 新增方法 - 停止轮播
|
||||||
|
const stopAutoPlay = () => {
|
||||||
|
if (autoPlayTimer.value) {
|
||||||
|
clearInterval(autoPlayTimer.value);
|
||||||
|
autoPlayTimer.value = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const getDarkMode = computed(() => {
|
const getDarkMode = computed(() => {
|
||||||
return theme === 'default' ? 'dark' : theme;
|
return theme === 'default' ? 'dark' : theme;
|
||||||
});
|
});
|
||||||
@ -31,6 +82,12 @@ export const useEcharts = (elRef, theme = 'default') => {
|
|||||||
if (!el || !unref(el)) {
|
if (!el || !unref(el)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
nextTick(() => {
|
||||||
|
if (el.offsetWidth === 0 || el.offsetHeight === 0) {
|
||||||
|
// console.warn('图表容器不可见,延迟初始化');
|
||||||
|
useTimeoutFn(() => initCharts(t), 100);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
chartInstance = echarts.init(el, t);
|
chartInstance = echarts.init(el, t);
|
||||||
const { removeEvent } = useEventListener({
|
const { removeEvent } = useEventListener({
|
||||||
@ -45,9 +102,19 @@ export const useEcharts = (elRef, theme = 'default') => {
|
|||||||
resizeFn();
|
resizeFn();
|
||||||
}, 30);
|
}, 30);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function setOptions(options = {}, clear = true) {
|
function setOptions(options = {}, clear = true) {
|
||||||
|
const mergedOptions = {
|
||||||
|
animation: true,
|
||||||
|
animationDuration: 3000,
|
||||||
|
animationEasing: 'cubicOut',
|
||||||
|
...unref(options),
|
||||||
|
animationThreshold: 2000, // 数据量超过2000自动关闭动画
|
||||||
|
animationDelayUpdate: (idx) => idx * 50, // 数据项延迟
|
||||||
|
};
|
||||||
|
cacheOptions.value = mergedOptions;
|
||||||
cacheOptions.value = options;
|
cacheOptions.value = options;
|
||||||
if (unref(elRef)?.offsetHeight === 0) {
|
if (unref(elRef)?.offsetHeight === 0) {
|
||||||
useTimeoutFn(() => {
|
useTimeoutFn(() => {
|
||||||
@ -98,6 +165,7 @@ export const useEcharts = (elRef, theme = 'default') => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
tryOnUnmounted(() => {
|
tryOnUnmounted(() => {
|
||||||
|
stopAutoPlay(); // 清理定时器
|
||||||
if (!chartInstance) return;
|
if (!chartInstance) return;
|
||||||
removeResizeFn();
|
removeResizeFn();
|
||||||
chartInstance.dispose();
|
chartInstance.dispose();
|
||||||
@ -115,7 +183,9 @@ export const useEcharts = (elRef, theme = 'default') => {
|
|||||||
setOptions,
|
setOptions,
|
||||||
resize,
|
resize,
|
||||||
echarts,
|
echarts,
|
||||||
getInstance,
|
getInstance: () => chartInstance,
|
||||||
registerMap,
|
registerMap,
|
||||||
|
startAutoPlay, // 暴露轮播方法
|
||||||
|
stopAutoPlay,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import actions from './actions';
|
import actions from './actions';
|
||||||
|
|
||||||
const { VITE_APP_SUB_OS, VITE_APP_SUB_ADMIN, VITE_APP_SUB_GAS, VITE_APP_SUB_GSS } = import.meta.env;
|
const { VITE_APP_SUB_OS, VITE_APP_SUB_ADMIN, VITE_APP_SUB_GAS, VITE_APP_SUB_GSS, VITE_APP_SUB_GSR } = import.meta.env;
|
||||||
|
|
||||||
export const leftApps = [
|
export const leftApps = [
|
||||||
{
|
{
|
||||||
@ -11,23 +11,23 @@ export const leftApps = [
|
|||||||
icon: 'images/platform/icon-home.png',
|
icon: 'images/platform/icon-home.png',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sub-admin',
|
name: 'sub-operation-admin',
|
||||||
entry: VITE_APP_SUB_ADMIN,
|
entry: VITE_APP_SUB_OS,
|
||||||
activeRule: '/sub-admin',
|
activeRule: '/sub-operation-admin',
|
||||||
title: '管理后台',
|
title: '管理后台',
|
||||||
icon: 'images/platform/icon-admin.png',
|
icon: 'images/platform/icon-admin.png',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sub-app',
|
name: 'sub-app',
|
||||||
entry: VITE_APP_SUB_ADMIN,
|
entry: VITE_APP_SUB_GAS,
|
||||||
activeRule: '/sub-app',
|
activeRule: '/sub-app',
|
||||||
title: 'APP',
|
title: 'APP',
|
||||||
icon: 'images/platform/icon-app.png',
|
icon: 'images/platform/icon-app.png',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sub-screen',
|
name: 'sub-government-screen-service',
|
||||||
entry: VITE_APP_SUB_ADMIN,
|
entry: VITE_APP_SUB_GSS,
|
||||||
activeRule: '/sub-screen',
|
activeRule: '/sub-government-screen-service',
|
||||||
title: '数据大屏',
|
title: '数据大屏',
|
||||||
icon: 'images/platform/icon-screen.png',
|
icon: 'images/platform/icon-screen.png',
|
||||||
},
|
},
|
||||||
@ -43,28 +43,45 @@ export const rightApps = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sub-government-admin',
|
name: 'sub-government-admin',
|
||||||
entry: VITE_APP_SUB_ADMIN,
|
entry: VITE_APP_SUB_GAS,
|
||||||
activeRule: '/sub-government-admin',
|
activeRule: '/sub-government-affairs-service',
|
||||||
title: '管理后台',
|
title: '管理后台',
|
||||||
icon: 'images/platform/icon-admin.png',
|
icon: 'images/platform/icon-admin.png',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sub-government-app',
|
name: 'sub-app',
|
||||||
entry: VITE_APP_SUB_ADMIN,
|
entry: VITE_APP_SUB_GAS,
|
||||||
activeRule: '/sub-government-app',
|
activeRule: '/sub-app',
|
||||||
title: 'APP',
|
title: 'APP',
|
||||||
icon: 'images/platform/icon-app.png',
|
icon: 'images/platform/icon-app.png',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sub-government-screen-service',
|
// name: 'sub-government-screen-service',
|
||||||
entry: VITE_APP_SUB_GSS,
|
name: 'new-digital-agriculture-screen',
|
||||||
activeRule: '/sub-government-screen-service',
|
// entry: VITE_APP_SUB_GSS,
|
||||||
|
entry: VITE_APP_SUB_GSR,
|
||||||
|
// activeRule: '/sub-government-screen-service',
|
||||||
|
activeRule: '/new-digital-agriculture-screen',
|
||||||
title: '数据大屏',
|
title: '数据大屏',
|
||||||
icon: 'images/platform/icon-screen.png',
|
icon: 'images/platform/icon-screen.png',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export const defaultApps = [
|
export const defaultApps = [
|
||||||
|
{
|
||||||
|
name: 'sub-operation-service',
|
||||||
|
entry: VITE_APP_SUB_OS,
|
||||||
|
activeRule: '/sub-operation-service',
|
||||||
|
title: '运营服务',
|
||||||
|
icon: 'images/platform/icon-home.png',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'sub-operation-admin',
|
||||||
|
entry: VITE_APP_SUB_OS,
|
||||||
|
activeRule: '/sub-operation-admin',
|
||||||
|
title: '运营管理后台',
|
||||||
|
icon: 'images/platform/icon-admin.png',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'sub-government-affairs-service',
|
name: 'sub-government-affairs-service',
|
||||||
entry: VITE_APP_SUB_GAS,
|
entry: VITE_APP_SUB_GAS,
|
||||||
@ -74,23 +91,28 @@ export const defaultApps = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sub-government-screen-service',
|
name: 'sub-government-screen-service',
|
||||||
|
// name: 'new-digital-agriculture-screen',
|
||||||
entry: VITE_APP_SUB_GSS,
|
entry: VITE_APP_SUB_GSS,
|
||||||
|
// entry: VITE_APP_SUB_GSR,
|
||||||
activeRule: '/sub-government-screen-service',
|
activeRule: '/sub-government-screen-service',
|
||||||
|
// activeRule: '/new-digital-agriculture-screen',
|
||||||
title: '数据大屏',
|
title: '数据大屏',
|
||||||
icon: 'images/platform/icon-screen.png',
|
icon: 'images/platform/icon-screen.png',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'sub-operation-service',
|
// name: 'sub-government-screen-service',
|
||||||
entry: VITE_APP_SUB_OS,
|
name: 'new-digital-agriculture-screen',
|
||||||
activeRule: '/sub-operation-service',
|
// entry: VITE_APP_SUB_GSS,
|
||||||
title: '运营服务',
|
entry: VITE_APP_SUB_GSR,
|
||||||
icon: 'images/platform/icon-home.png',
|
// activeRule: '/sub-government-screen-service',
|
||||||
|
activeRule: '/new-digital-agriculture-screen',
|
||||||
|
title: '数据大屏',
|
||||||
|
icon: 'images/platform/icon-screen.png',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
// export const microApps = [...defaultApps, ...leftApps, ...rightApps];
|
|
||||||
export const microApps = [...defaultApps];
|
export const microApps = [...defaultApps];
|
||||||
|
console.log(microApps);
|
||||||
const apps = microApps.map((item) => {
|
const apps = microApps.map((item) => {
|
||||||
return {
|
return {
|
||||||
...item,
|
...item,
|
||||||
|
@ -2,18 +2,6 @@
|
|||||||
<div class="platform">
|
<div class="platform">
|
||||||
<h2 class="platform-title">数字农业产业管理平台</h2>
|
<h2 class="platform-title">数字农业产业管理平台</h2>
|
||||||
<div class="platform-panel">
|
<div class="platform-panel">
|
||||||
<div class="platform-panel-item">
|
|
||||||
<div class="icon"><img :src="getAssetsFile('images/platform/icon-yy.png')" /></div>
|
|
||||||
<b>农业产业运营服务平台</b>
|
|
||||||
<ul class="entry">
|
|
||||||
<li v-for="item in leftApps" :key="item.name" @click="gotoPage(item)">
|
|
||||||
<span class="entry-icon">
|
|
||||||
<img :src="getAssetsFile(item.icon)" />
|
|
||||||
</span>
|
|
||||||
<span class="entry-name">{{ item.title }} </span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="platform-panel-item">
|
<div class="platform-panel-item">
|
||||||
<div class="icon"><img :src="getAssetsFile('images/platform/icon-zw.png')" /></div>
|
<div class="icon"><img :src="getAssetsFile('images/platform/icon-zw.png')" /></div>
|
||||||
<b>农业产业政务服务平台</b>
|
<b>农业产业政务服务平台</b>
|
||||||
@ -26,16 +14,29 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="platform-panel-item">
|
||||||
|
<div class="icon"><img :src="getAssetsFile('images/platform/icon-yy.png')" /></div>
|
||||||
|
<b>农业产业运营服务平台</b>
|
||||||
|
<ul class="entry">
|
||||||
|
<li v-for="item in leftApps" :key="item.name" @click="gotoPage(item)">
|
||||||
|
<span class="entry-icon">
|
||||||
|
<img :src="getAssetsFile(item.icon)" />
|
||||||
|
</span>
|
||||||
|
<span class="entry-name">{{ item.title }} </span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { leftApps, rightApps, microApps } from '@/micro/app';
|
import { leftApps, rightApps } from '@/micro/app';
|
||||||
import actions from '@/micro/actions';
|
|
||||||
import { getAssetsFile } from '@/utils';
|
import { getAssetsFile } from '@/utils';
|
||||||
|
|
||||||
const gotoPage = (row) => {
|
const gotoPage = (row) => {
|
||||||
|
console.log(row);
|
||||||
|
console.log(window.history.pushState({}, row.name, row.activeRule));
|
||||||
window.history.pushState({}, row.name, row.activeRule);
|
window.history.pushState({}, row.name, row.activeRule);
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
9
new-digital-agriculture-screen/.editorconfig
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*.{js,jsx,ts,tsx,vue}]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
end_of_line = auto
|
19
new-digital-agriculture-screen/.env.development
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# 开发环境
|
||||||
|
# VITE_PORT = 9530
|
||||||
|
# VITE_APP_NAME = 'new-digital-agriculture-screen'
|
||||||
|
# VITE_APP_TITLE = '政务云数字农业智慧大屏'
|
||||||
|
# VITE_APP_BASE_API = '/apis'
|
||||||
|
# VITE_APP_BASE_URL = 'http://192.168.18.99:8080'
|
||||||
|
|
||||||
|
|
||||||
|
# 开发环境
|
||||||
|
VITE_PORT = 9530
|
||||||
|
VITE_MODE = 'DEV'
|
||||||
|
VITE_APP_TITLE = '政务云数字农业智慧大屏'
|
||||||
|
VITE_APP_MIAN = 'daimp-front-main'
|
||||||
|
VITE_APP_MIAN_URL = 'http://localhost:9530'
|
||||||
|
VITE_APP_NAME = 'new-digital-agriculture-screen'
|
||||||
|
VITE_APP_BASE_API = '/apis'
|
||||||
|
VITE_APP_BASE_URL = 'http://192.168.18.99:8080'
|
||||||
|
VITE_APP_UPLOAD_API = '/uploadApis'
|
||||||
|
VITE_APP_UPLOAD_URL = 'http://192.168.18.99:9300'
|
14
new-digital-agriculture-screen/.env.production
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# 生产环境
|
||||||
|
# VITE_APP_NAME = 'new-digital-agriculture-screen'
|
||||||
|
# VITE_APP_TITLE = '政务云数字农业智慧大屏'
|
||||||
|
# VITE_APP_BASE_API = '/apis'
|
||||||
|
# VITE_APP_BASE_URL = ''
|
||||||
|
|
||||||
|
VITE_APP_MIAN = 'daimp-front-main'
|
||||||
|
VITE_APP_MIAN_URL = 'http://47.109.205.240:88'
|
||||||
|
VITE_APP_NAME = 'new-digital-agriculture-screen'
|
||||||
|
# 接口
|
||||||
|
VITE_APP_BASE_API = '/apis'
|
||||||
|
VITE_APP_BASE_URL = ''
|
||||||
|
VITE_APP_UPLOAD_API = '/uploadApis'
|
||||||
|
VITE_APP_UPLOAD_URL = ''
|
14
new-digital-agriculture-screen/.eslintignore
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
*.sh
|
||||||
|
*.md
|
||||||
|
*.woff
|
||||||
|
*.ttf
|
||||||
|
.vscode
|
||||||
|
.idea
|
||||||
|
.husky
|
||||||
|
.local
|
||||||
|
dist
|
||||||
|
src/assets
|
||||||
|
node_modules
|
||||||
|
Dockerfile
|
||||||
|
stats.html
|
||||||
|
tailwind.config.js
|
62
new-digital-agriculture-screen/.eslintrc.cjs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: .eslintrc.cjs
|
||||||
|
* 在VSCode中安装ESLint插件,编写过程中检测代码质量
|
||||||
|
* ESLint 代码质量校验相关配置
|
||||||
|
* 这里使用prettier作为代码格式化工具,用ESLint做代码质检
|
||||||
|
* 相关配置使用下面extends扩展先做默认设置
|
||||||
|
* 在.prettierrc.cjs文件中配置好后,格式化规则会以.prettierrc.cjs作为最终格式,所以不建议在本文件中做代码格式化相关配置
|
||||||
|
* 相关prettier配置ESLint会默认加载为代码质检 格式化以prettier为主
|
||||||
|
* 在本配置文件中只做代码质量约束规范配置
|
||||||
|
* @Author: zenghua.wang
|
||||||
|
* @Date: 2022-09-22 15:53:58
|
||||||
|
* @LastEditors: zenghua.wang
|
||||||
|
* @LastEditTime: 2024-03-22 10:19:39
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
es2021: true,
|
||||||
|
node: true,
|
||||||
|
},
|
||||||
|
extends: [
|
||||||
|
'eslint-config-prettier',
|
||||||
|
'eslint:recommended',
|
||||||
|
// 'plugin:@typescript-eslint/recommended',
|
||||||
|
'plugin:vue/vue3-recommended',
|
||||||
|
'plugin:vue/vue3-essential',
|
||||||
|
'plugin:prettier/recommended',
|
||||||
|
],
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
env: {
|
||||||
|
node: true,
|
||||||
|
},
|
||||||
|
files: ['.eslintrc.{js,cjs}'],
|
||||||
|
parserOptions: {
|
||||||
|
sourceType: 'script',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
parserOptions: {
|
||||||
|
ecmaVersion: 'latest',
|
||||||
|
sourceType: 'module',
|
||||||
|
requireConfigFile: false,
|
||||||
|
parser: '@babel/eslint-parser',
|
||||||
|
// parser: '@typescript-eslint/parser',
|
||||||
|
},
|
||||||
|
plugins: ['vue', 'prettier'],
|
||||||
|
globals: {
|
||||||
|
defineProps: 'readonly',
|
||||||
|
defineEmits: 'readonly',
|
||||||
|
defineExpose: 'readonly',
|
||||||
|
withDefaults: 'readonly',
|
||||||
|
},
|
||||||
|
// 这里时配置规则的,自己看情况配置
|
||||||
|
rules: {
|
||||||
|
'prettier/prettier': 'error',
|
||||||
|
'no-debugger': 'off',
|
||||||
|
'no-unused-vars': 'off',
|
||||||
|
'vue/no-unused-vars': 'off',
|
||||||
|
'vue/multi-word-component-names': 'off',
|
||||||
|
},
|
||||||
|
};
|
115
new-digital-agriculture-screen/.gitignore
vendored
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# Snowpack dependency directory (https://snowpack.dev/)
|
||||||
|
web_modules/
|
||||||
|
|
||||||
|
# TypeScript cache
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Microbundle cache
|
||||||
|
.rpt2_cache/
|
||||||
|
.rts2_cache_cjs/
|
||||||
|
.rts2_cache_es/
|
||||||
|
.rts2_cache_umd/
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
# .env
|
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
.cache
|
||||||
|
.parcel-cache
|
||||||
|
|
||||||
|
# Next.js build output
|
||||||
|
.next
|
||||||
|
out
|
||||||
|
|
||||||
|
# Nuxt.js build / generate output
|
||||||
|
.nuxt
|
||||||
|
dist
|
||||||
|
|
||||||
|
# Gatsby files
|
||||||
|
.cache/
|
||||||
|
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||||
|
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||||
|
# public
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
.serverless/
|
||||||
|
|
||||||
|
# FuseBox cache
|
||||||
|
.fusebox/
|
||||||
|
|
||||||
|
# DynamoDB Local files
|
||||||
|
.dynamodb/
|
||||||
|
|
||||||
|
# TernJS port file
|
||||||
|
.tern-port
|
||||||
|
|
||||||
|
# Stores VSCode versions used for testing VSCode extensions
|
||||||
|
.vscode-test
|
||||||
|
|
||||||
|
# yarn v2
|
||||||
|
.yarn/cache
|
||||||
|
.yarn/unplugged
|
||||||
|
.yarn/build-state.yml
|
||||||
|
.yarn/install-state.gz
|
||||||
|
.pnp.*
|
@ -4,7 +4,6 @@ node_modules
|
|||||||
.idea
|
.idea
|
||||||
.editorconfig
|
.editorconfig
|
||||||
package-lock.json
|
package-lock.json
|
||||||
yarn.lock
|
|
||||||
.npmrc
|
.npmrc
|
||||||
|
|
||||||
# Ignored suffix
|
# Ignored suffix
|
52
new-digital-agriculture-screen/.prettierrc.cjs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: .prettierrc.cjs
|
||||||
|
* 在VSCode中安装prettier插件 打开插件配置填写`.prettierrc.js` 将本文件作为其代码格式化规范
|
||||||
|
* 在本文件中修改格式化规则,不会同时触发改变ESLint代码检查,所以每次修改本文件需要重启VSCode,ESLint检查才能同步代码格式化
|
||||||
|
* 需要相应的代码格式化规范请自行查阅配置,下面为默认项目配置
|
||||||
|
* @Author: zenghua.wang
|
||||||
|
* @Date: 2022-09-22 15:53:58
|
||||||
|
* @LastEditors: zenghua.wang
|
||||||
|
* @LastEditTime: 2024-01-24 19:22:25
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
// 一行最多多少个字符
|
||||||
|
printWidth: 150,
|
||||||
|
// 指定每个缩进级别的空格数
|
||||||
|
tabWidth: 2,
|
||||||
|
// 使用制表符而不是空格缩进行
|
||||||
|
useTabs: false,
|
||||||
|
// 在语句末尾是否需要分号
|
||||||
|
semi: true,
|
||||||
|
// 是否使用单引号
|
||||||
|
singleQuote: true,
|
||||||
|
// 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
|
||||||
|
quoteProps: 'as-needed',
|
||||||
|
// 在JSX中使用单引号而不是双引号
|
||||||
|
jsxSingleQuote: false,
|
||||||
|
// 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none
|
||||||
|
trailingComma: 'es5',
|
||||||
|
// 在对象文字中的括号之间打印空格
|
||||||
|
bracketSpacing: true,
|
||||||
|
// jsx 标签的反尖括号需要换行
|
||||||
|
jsxBracketSameLine: false,
|
||||||
|
// 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x
|
||||||
|
arrowParens: 'always',
|
||||||
|
// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
|
||||||
|
rangeStart: 0,
|
||||||
|
rangeEnd: Infinity,
|
||||||
|
// 指定要使用的解析器,不需要写文件开头的 @prettier
|
||||||
|
requirePragma: false,
|
||||||
|
// 不需要自动在文件开头插入 @prettier
|
||||||
|
insertPragma: false,
|
||||||
|
// 使用默认的折行标准 always\never\preserve
|
||||||
|
proseWrap: 'preserve',
|
||||||
|
// 指定HTML文件的全局空格敏感度 css\strict\ignore
|
||||||
|
htmlWhitespaceSensitivity: 'css',
|
||||||
|
// Vue文件脚本和样式标签缩进
|
||||||
|
vueIndentScriptAndStyle: false,
|
||||||
|
//在 windows 操作系统中换行符通常是回车 (CR) 加换行分隔符 (LF),也就是回车换行(CRLF),
|
||||||
|
//然而在 Linux 和 Unix 中只使用简单的换行分隔符 (LF)。
|
||||||
|
//对应的控制字符为 "\n" (LF) 和 "\r\n"(CRLF)。auto意为保持现有的行尾
|
||||||
|
// 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
|
||||||
|
endOfLine: 'auto',
|
||||||
|
};
|
17
new-digital-agriculture-screen/.stylelintignore
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# .stylelintignore
|
||||||
|
# 旧的不需打包的样式库
|
||||||
|
*.min.css
|
||||||
|
|
||||||
|
# 其他类型文件
|
||||||
|
*.js
|
||||||
|
*.jpg
|
||||||
|
*.png
|
||||||
|
*.eot
|
||||||
|
*.ttf
|
||||||
|
*.woff
|
||||||
|
*.json
|
||||||
|
|
||||||
|
# 测试和打包目录
|
||||||
|
/dist/*
|
||||||
|
/node_modules/*
|
||||||
|
/src/assets/*
|
131
new-digital-agriculture-screen/.stylelintrc.cjs
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
/*
|
||||||
|
* @Descripttion: .stylelintrc.cjs
|
||||||
|
* @Author: zenghua.wang
|
||||||
|
* @Date: 2022-09-22 15:53:58
|
||||||
|
* @LastEditors: zenghua.wang
|
||||||
|
* @LastEditTime: 2024-01-24 18:49:26
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
plugins: ['stylelint-order', 'stylelint-scss'],
|
||||||
|
extends: [
|
||||||
|
'stylelint-config-standard',
|
||||||
|
'stylelint-config-standard-scss',
|
||||||
|
'stylelint-config-prettier',
|
||||||
|
'stylelint-config-html/vue',
|
||||||
|
'stylelint-config-recommended-vue',
|
||||||
|
'stylelint-config-recommended-scss'
|
||||||
|
],
|
||||||
|
overrides: [
|
||||||
|
{
|
||||||
|
files: ['**/*.{html,vue}'],
|
||||||
|
customSyntax: 'postcss-html'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
indentation: 2,
|
||||||
|
'selector-pseudo-element-no-unknown': [
|
||||||
|
true,
|
||||||
|
{
|
||||||
|
ignorePseudoElements: ['v-deep', ':deep']
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'number-leading-zero': 'always',
|
||||||
|
'no-descending-specificity': null,
|
||||||
|
'function-url-quotes': 'always',
|
||||||
|
'string-quotes': 'single',
|
||||||
|
'unit-case': null,
|
||||||
|
'color-hex-case': 'lower',
|
||||||
|
'color-hex-length': 'long',
|
||||||
|
'rule-empty-line-before': 'never',
|
||||||
|
'font-family-no-missing-generic-family-keyword': null,
|
||||||
|
'selector-type-no-unknown': null,
|
||||||
|
'block-opening-brace-space-before': 'always',
|
||||||
|
'at-rule-no-unknown': null,
|
||||||
|
'no-duplicate-selectors': null,
|
||||||
|
'property-no-unknown': null,
|
||||||
|
'no-empty-source': null,
|
||||||
|
'selector-class-pattern': null,
|
||||||
|
'keyframes-name-pattern': null,
|
||||||
|
'selector-pseudo-class-no-unknown': [true, { ignorePseudoClasses: ['global', 'deep'] }],
|
||||||
|
'function-no-unknown': null,
|
||||||
|
'order/properties-order': [
|
||||||
|
'position',
|
||||||
|
'top',
|
||||||
|
'right',
|
||||||
|
'bottom',
|
||||||
|
'left',
|
||||||
|
'z-index',
|
||||||
|
'display',
|
||||||
|
'justify-content',
|
||||||
|
'align-items',
|
||||||
|
'float',
|
||||||
|
'clear',
|
||||||
|
'overflow',
|
||||||
|
'overflow-x',
|
||||||
|
'overflow-y',
|
||||||
|
'margin',
|
||||||
|
'margin-top',
|
||||||
|
'margin-right',
|
||||||
|
'margin-bottom',
|
||||||
|
'margin-left',
|
||||||
|
'padding',
|
||||||
|
'padding-top',
|
||||||
|
'padding-right',
|
||||||
|
'padding-bottom',
|
||||||
|
'padding-left',
|
||||||
|
'width',
|
||||||
|
'min-width',
|
||||||
|
'max-width',
|
||||||
|
'height',
|
||||||
|
'min-height',
|
||||||
|
'max-height',
|
||||||
|
'font-size',
|
||||||
|
'font-family',
|
||||||
|
'font-weight',
|
||||||
|
'border',
|
||||||
|
'border-style',
|
||||||
|
'border-width',
|
||||||
|
'border-color',
|
||||||
|
'border-top',
|
||||||
|
'border-top-style',
|
||||||
|
'border-top-width',
|
||||||
|
'border-top-color',
|
||||||
|
'border-right',
|
||||||
|
'border-right-style',
|
||||||
|
'border-right-width',
|
||||||
|
'border-right-color',
|
||||||
|
'border-bottom',
|
||||||
|
'border-bottom-style',
|
||||||
|
'border-bottom-width',
|
||||||
|
'border-bottom-color',
|
||||||
|
'border-left',
|
||||||
|
'border-left-style',
|
||||||
|
'border-left-width',
|
||||||
|
'border-left-color',
|
||||||
|
'border-radius',
|
||||||
|
'text-align',
|
||||||
|
'text-justify',
|
||||||
|
'text-indent',
|
||||||
|
'text-overflow',
|
||||||
|
'text-decoration',
|
||||||
|
'white-space',
|
||||||
|
'color',
|
||||||
|
'background',
|
||||||
|
'background-position',
|
||||||
|
'background-repeat',
|
||||||
|
'background-size',
|
||||||
|
'background-color',
|
||||||
|
'background-clip',
|
||||||
|
'opacity',
|
||||||
|
'filter',
|
||||||
|
'list-style',
|
||||||
|
'outline',
|
||||||
|
'visibility',
|
||||||
|
'box-shadow',
|
||||||
|
'text-shadow',
|
||||||
|
'resize',
|
||||||
|
'transition'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
2
new-digital-agriculture-screen/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
{
|
||||||
|
}
|
1
new-digital-agriculture-screen/.yarnrc.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
nodeLinker: node-modules
|
0
new-digital-agriculture-screen/README.md
Normal file
75
new-digital-agriculture-screen/auto-imports.d.ts
vendored
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
/* prettier-ignore */
|
||||||
|
// @ts-nocheck
|
||||||
|
// noinspection JSUnusedGlobalSymbols
|
||||||
|
// Generated by unplugin-auto-import
|
||||||
|
export {}
|
||||||
|
declare global {
|
||||||
|
const EffectScope: typeof import('vue')['EffectScope']
|
||||||
|
const computed: typeof import('vue')['computed']
|
||||||
|
const createApp: typeof import('vue')['createApp']
|
||||||
|
const customRef: typeof import('vue')['customRef']
|
||||||
|
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
|
||||||
|
const defineComponent: typeof import('vue')['defineComponent']
|
||||||
|
const effectScope: typeof import('vue')['effectScope']
|
||||||
|
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
||||||
|
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
||||||
|
const h: typeof import('vue')['h']
|
||||||
|
const inject: typeof import('vue')['inject']
|
||||||
|
const isProxy: typeof import('vue')['isProxy']
|
||||||
|
const isReactive: typeof import('vue')['isReactive']
|
||||||
|
const isReadonly: typeof import('vue')['isReadonly']
|
||||||
|
const isRef: typeof import('vue')['isRef']
|
||||||
|
const markRaw: typeof import('vue')['markRaw']
|
||||||
|
const nextTick: typeof import('vue')['nextTick']
|
||||||
|
const onActivated: typeof import('vue')['onActivated']
|
||||||
|
const onBeforeMount: typeof import('vue')['onBeforeMount']
|
||||||
|
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
|
||||||
|
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
|
||||||
|
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
|
||||||
|
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
||||||
|
const onDeactivated: typeof import('vue')['onDeactivated']
|
||||||
|
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
||||||
|
const onMounted: typeof import('vue')['onMounted']
|
||||||
|
const onRenderTracked: typeof import('vue')['onRenderTracked']
|
||||||
|
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
|
||||||
|
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
||||||
|
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
||||||
|
const onUnmounted: typeof import('vue')['onUnmounted']
|
||||||
|
const onUpdated: typeof import('vue')['onUpdated']
|
||||||
|
const onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
|
||||||
|
const provide: typeof import('vue')['provide']
|
||||||
|
const reactive: typeof import('vue')['reactive']
|
||||||
|
const readonly: typeof import('vue')['readonly']
|
||||||
|
const ref: typeof import('vue')['ref']
|
||||||
|
const resolveComponent: typeof import('vue')['resolveComponent']
|
||||||
|
const shallowReactive: typeof import('vue')['shallowReactive']
|
||||||
|
const shallowReadonly: typeof import('vue')['shallowReadonly']
|
||||||
|
const shallowRef: typeof import('vue')['shallowRef']
|
||||||
|
const toRaw: typeof import('vue')['toRaw']
|
||||||
|
const toRef: typeof import('vue')['toRef']
|
||||||
|
const toRefs: typeof import('vue')['toRefs']
|
||||||
|
const toValue: typeof import('vue')['toValue']
|
||||||
|
const triggerRef: typeof import('vue')['triggerRef']
|
||||||
|
const unref: typeof import('vue')['unref']
|
||||||
|
const useAttrs: typeof import('vue')['useAttrs']
|
||||||
|
const useCssModule: typeof import('vue')['useCssModule']
|
||||||
|
const useCssVars: typeof import('vue')['useCssVars']
|
||||||
|
const useId: typeof import('vue')['useId']
|
||||||
|
const useLink: typeof import('vue-router')['useLink']
|
||||||
|
const useModel: typeof import('vue')['useModel']
|
||||||
|
const useRoute: typeof import('vue-router')['useRoute']
|
||||||
|
const useRouter: typeof import('vue-router')['useRouter']
|
||||||
|
const useSlots: typeof import('vue')['useSlots']
|
||||||
|
const useTemplateRef: typeof import('vue')['useTemplateRef']
|
||||||
|
const watch: typeof import('vue')['watch']
|
||||||
|
const watchEffect: typeof import('vue')['watchEffect']
|
||||||
|
const watchPostEffect: typeof import('vue')['watchPostEffect']
|
||||||
|
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
|
||||||
|
}
|
||||||
|
// for type re-export
|
||||||
|
declare global {
|
||||||
|
// @ts-ignore
|
||||||
|
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
|
||||||
|
import('vue')
|
||||||
|
}
|
@ -7,7 +7,13 @@ export {}
|
|||||||
|
|
||||||
declare module 'vue' {
|
declare module 'vue' {
|
||||||
export interface GlobalComponents {
|
export interface GlobalComponents {
|
||||||
|
<<<<<<< HEAD
|
||||||
CenterMap: typeof import('./src/components/centerMap.vue')['default']
|
CenterMap: typeof import('./src/components/centerMap.vue')['default']
|
||||||
|
=======
|
||||||
|
BaseBg: typeof import('./src/components/baseBg.vue')['default']
|
||||||
|
CenterMap: typeof import('./src/components/centerMap.vue')['default']
|
||||||
|
'CenterMap copy': typeof import('./src/components/centerMap copy.vue')['default']
|
||||||
|
>>>>>>> maps
|
||||||
CodeDialog: typeof import('./src/components/code-dialog/index.vue')['default']
|
CodeDialog: typeof import('./src/components/code-dialog/index.vue')['default']
|
||||||
Components: typeof import('./src/components/index.js')['default']
|
Components: typeof import('./src/components/index.js')['default']
|
||||||
copy: typeof import('./src/components/centerMap copy.vue')['default']
|
copy: typeof import('./src/components/centerMap copy.vue')['default']
|
||||||
|
16
new-digital-agriculture-screen/index.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/logo.png" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>政务云数字农业智慧大屏</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script type="module" src="/src/main.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
13213
new-digital-agriculture-screen/package-lock.json
generated
Normal file
84
new-digital-agriculture-screen/package.json
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
{
|
||||||
|
"name": "digital-agriculture-screen",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.1",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite --mode development",
|
||||||
|
"build": "vite build --mode production",
|
||||||
|
"test": "vite build --mode test",
|
||||||
|
"preview": "vite preview",
|
||||||
|
"format": "prettier --write 'src/**/*.{vue,ts,tsx,js,jsx,css,less,scss,json,md}'",
|
||||||
|
"eslint": "npx eslint --init",
|
||||||
|
"lint": "npm run lint:script && npm run lint:style",
|
||||||
|
"lint:style": "stylelint 'src/**/*.{vue,scss,css,sass,less}' --fix",
|
||||||
|
"lint:script": "eslint --ext .js,.ts,.tsx,.vue --fix --quiet ./src"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@element-plus/icons-vue": "^2.3.1",
|
||||||
|
"@smallwei/avue": "^3.6.2",
|
||||||
|
"@vuemap/vue-amap": "^2.0",
|
||||||
|
"@vuemap/vue-amap-loca": "^2.0",
|
||||||
|
"@wangeditor/editor": "^5.1.23",
|
||||||
|
"@wangeditor/editor-for-vue": "^5.1.12",
|
||||||
|
"animate.css": "^4.1.1",
|
||||||
|
"axios": "^1.6.5",
|
||||||
|
"echarts": "^5.6.0",
|
||||||
|
"echarts-gl": "^2.0.9",
|
||||||
|
"echarts-liquidfill": "^3.1.0",
|
||||||
|
"echarts-wordcloud": "^2.1.0",
|
||||||
|
"element-plus": "^2.7.2",
|
||||||
|
"js-base64": "^3.7.6",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
|
"moment": "^2.30.1",
|
||||||
|
"nprogress": "^0.2.0",
|
||||||
|
"path-browserify": "^1.0.1",
|
||||||
|
"pinia": "^2.1.7",
|
||||||
|
"pinia-plugin-persistedstate": "^3.2.1",
|
||||||
|
"screenfull": "^6.0.2",
|
||||||
|
"vue": "^3.3.11",
|
||||||
|
"vue-cesium": "^3.2.9",
|
||||||
|
"vue-echarts": "^7.0.3",
|
||||||
|
"vue-router": "^4.2.5",
|
||||||
|
"vue3-scroll-seamless": "^1.0.6"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.23.7",
|
||||||
|
"@babel/eslint-parser": "^7.23.3",
|
||||||
|
"@types/path-browserify": "^1.0.2",
|
||||||
|
"@vitejs/plugin-vue": "^4.5.2",
|
||||||
|
"autoprefixer": "^10.4.17",
|
||||||
|
"eslint": "^8.56.0",
|
||||||
|
"eslint-config-prettier": "^9.1.0",
|
||||||
|
"eslint-plugin-prettier": "^5.1.3",
|
||||||
|
"eslint-plugin-vue": "^9.20.1",
|
||||||
|
"mockjs": "^1.1.0",
|
||||||
|
"postcss": "^8.4.33",
|
||||||
|
"postcss-html": "^1.6.0",
|
||||||
|
"postcss-import": "^16.0.0",
|
||||||
|
"prettier": "^3.2.4",
|
||||||
|
"sass": "^1.70.0",
|
||||||
|
"stylelint": "^16.2.0",
|
||||||
|
"stylelint-config-html": "^1.1.0",
|
||||||
|
"stylelint-config-prettier": "^9.0.5",
|
||||||
|
"stylelint-config-rational-order": "^0.1.2",
|
||||||
|
"stylelint-config-recommended": "^14.0.0",
|
||||||
|
"stylelint-config-recommended-scss": "^14.0.0",
|
||||||
|
"stylelint-config-recommended-vue": "^1.5.0",
|
||||||
|
"stylelint-config-standard": "^36.0.0",
|
||||||
|
"stylelint-config-standard-scss": "^13.0.0",
|
||||||
|
"stylelint-order": "^6.0.4",
|
||||||
|
"stylelint-scss": "^6.1.0",
|
||||||
|
"terser": "^5.27.0",
|
||||||
|
"unplugin-auto-import": "^0.17.3",
|
||||||
|
"unplugin-vue-components": "^0.26.0",
|
||||||
|
"vite": "^5.0.8",
|
||||||
|
"vite-plugin-compression": "^0.5.1",
|
||||||
|
"vite-plugin-eslint": "^1.8.1",
|
||||||
|
"vite-plugin-mock": "^3.0.1",
|
||||||
|
"vite-plugin-progress": "^0.0.7",
|
||||||
|
"vite-plugin-qiankun": "^1.0.15",
|
||||||
|
"vite-plugin-svg-icons": "^2.0.1",
|
||||||
|
"vite-plugin-vue-setup-extend": "^0.4.0"
|
||||||
|
}
|
||||||
|
}
|
BIN
new-digital-agriculture-screen/public/images/avatar.gif
Normal file
After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
21
new-digital-agriculture-screen/src/App.vue
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<template>
|
||||||
|
<el-config-provider :size="size" :locale="zhCn">
|
||||||
|
<router-view />
|
||||||
|
</el-config-provider>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="app">
|
||||||
|
import { computed, ref, onMounted, onUnmounted } from 'vue';
|
||||||
|
import { useSettingStore } from '@/store/modules/setting';
|
||||||
|
// 配置element中文
|
||||||
|
import zhCn from 'element-plus/es/locale/lang/zh-cn';
|
||||||
|
import { createApp } from 'vue';
|
||||||
|
import App from './App.vue';
|
||||||
|
|
||||||
|
const SettingStore = useSettingStore();
|
||||||
|
// 配置全局组件大小
|
||||||
|
const size = computed(() => SettingStore.themeConfig.globalComSize);
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
@import './styles/style';
|
||||||
|
</style>
|
35
new-digital-agriculture-screen/src/apis/index.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// import request from '@/utils/axios';
|
||||||
|
// import { isEmpty } from '@/utils';
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * @Title: 获取字典
|
||||||
|
// */
|
||||||
|
// export function CommonDicData(params = { pageNum: 1, pageSize: 20, dictType: null }) {
|
||||||
|
// if (isEmpty(params?.dictType)) return;
|
||||||
|
// return request(`/system/dict/data/list`, {
|
||||||
|
// method: 'GET',
|
||||||
|
// apisType: 'dicData',
|
||||||
|
// params,
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * @Title: 上传图片
|
||||||
|
// */
|
||||||
|
// export function CommonUpload(data, params) {
|
||||||
|
// return request(`/upload`, {
|
||||||
|
// method: 'POST',
|
||||||
|
// apisType: 'upload',
|
||||||
|
// uploadType: 'multipart/form-data',
|
||||||
|
// data,
|
||||||
|
// params,
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //云南省所有区域信息
|
||||||
|
// export function getRegion(code) {
|
||||||
|
// let codeVal = code ? code : '530000';
|
||||||
|
// return request('/system/area/region?areaCode=' + codeVal, {
|
||||||
|
// method: 'GET',
|
||||||
|
// });
|
||||||
|
// }
|
11
new-digital-agriculture-screen/src/apis/inputs.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import request from '@/utils/axios';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title: 获取投入品信息
|
||||||
|
* https://doc.apipost.net/docs/detail/4516a8efdce0000?target_id=f010812312008&locale=zh-cn
|
||||||
|
*/
|
||||||
|
export function GetInputsInfo(code) {
|
||||||
|
return request('/inputGoods/inputView/getData', {
|
||||||
|
method: 'GET',
|
||||||
|
});
|
||||||
|
}
|
11
new-digital-agriculture-screen/src/apis/land.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import request from '@/utils/axios';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Title: 获取土地信息
|
||||||
|
* https://doc.apipost.net/docs/detail/4516a8efdce0000?target_id=f010812312008&locale=zh-cn
|
||||||
|
*/
|
||||||
|
export function GetLandInfo(code) {
|
||||||
|
return request('/inputGoods/inputView/getData', {
|
||||||
|
method: 'GET',
|
||||||
|
});
|
||||||
|
}
|
15
new-digital-agriculture-screen/src/assets/fonts/font.css
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: 'JinBuTi';
|
||||||
|
/* 自定义字体名称 */
|
||||||
|
src: url('./DingTalk JinBuTi.ttf') format('truetype');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Sans';
|
||||||
|
/* 自定义字体名称 */
|
||||||
|
src: url('./DingTalk Sans.ttf') format('truetype');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
After Width: | Height: | Size: 2.9 MiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 517 B |
After Width: | Height: | Size: 5.9 KiB |
After Width: | Height: | Size: 517 B |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 8.6 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/basic/tagBG.png
Normal file
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 601 KiB |
After Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 601 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 326 KiB |
After Width: | Height: | Size: 431 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/early/back1.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/early/back2.png
Normal file
After Width: | Height: | Size: 702 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/early/back3.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/early/bg5.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/early/icon1.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/early/icon2.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/early/icon3.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/early/icon5.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/early/icon6.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/early/icon7.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/entities/1.jpg
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
new-digital-agriculture-screen/src/assets/images/entities/2.jpg
Normal file
After Width: | Height: | Size: 853 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/entities/3.jpg
Normal file
After Width: | Height: | Size: 502 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/entities/4.jpg
Normal file
After Width: | Height: | Size: 1.7 MiB |
BIN
new-digital-agriculture-screen/src/assets/images/entities/5.jpg
Normal file
After Width: | Height: | Size: 448 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/entities/6.jpg
Normal file
After Width: | Height: | Size: 828 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/entities/7.jpg
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
new-digital-agriculture-screen/src/assets/images/entities/8.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 16 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/inputs/1.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/inputs/2.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/inputs/3.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/inputs/4.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/inputs/5.png
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/inputs/6.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 223 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/land/提示边框1.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
new-digital-agriculture-screen/src/assets/images/land/矩形 45.png
Normal file
After Width: | Height: | Size: 101 B |
After Width: | Height: | Size: 101 B |