main
userName 7 months ago
parent 247e18f49d
commit d49456b413

@ -50,7 +50,7 @@
const searchAddress = ()=>{
axios({
method: 'get',
url: `https://restapi.amap.com/v3/geocode/geo?key=4f992c089f9496201f6e4ea39ff3ab60&address=`+address.value,
url: `https://restapi.amap.com/v3/geocode/geo?key=ed310f0b1f6cfd93edfba42f1a09d4d9&address=`+address.value,
}).then((res) => {
if(res.data){
let location = res.data.geocodes[0].location.split(',')

@ -1,7 +1,7 @@
<template>
<div>
<div class="flex">
<a-input v-model:value="address" placeholder="" />
<a-input v-model:value="address" @change="inpChange" placeholder="" />
<a-button type="primary" style="margin-left: 10px;" @click="showMaps"></a-button>
</div>
@ -49,12 +49,16 @@ const geomData = ref()
const location = ref()
const showMaps = ()=>{
mapsVisible.value = true
console.log('paramsData',paramsData)
if(paramsData.value.length>0){
location.value = paramsData.value[0].center
geomData.value = paramsData.value
}
}
const inpChange = ()=>{
console.log('address',address)
paramsData.value[0].address = address.value
FormItemData.value = JSON.stringify(paramsData.value);
}
const handleCancel = ()=>{
paramsData.value = null
}
@ -63,7 +67,7 @@ const handleOk = ()=>{
lngLat.value = paramsData.value[0].center
axios({
method: 'get',
url: `https://restapi.amap.com/v3/geocode/regeo?output=json&location=`+lngLat.value+`&key=4f992c089f9496201f6e4ea39ff3ab60&radius=1000&extensions=base`,
url: `https://restapi.amap.com/v3/geocode/regeo?output=json&location=`+lngLat.value+`&key=ed310f0b1f6cfd93edfba42f1a09d4d9&radius=1000&extensions=base`,
}).then((res) => {
if(res.data){
address.value = res.data.regeocode.formatted_address

@ -39,9 +39,9 @@
<div style="margin-top: 8px">{{ t('component.upload.upload') }}</div>
</div>
</Upload>
<!-- <Modal :open="previewOpen" :title="previewTitle" :footer="null" @cancel="handleCancel">
<img alt="" style="width: 100%" :src="previewImage" />
</Modal> -->
<Modal :open="previewOpen" title="预览" :footer="null" @cancel="handleCancel">
<img alt="" style="width: 100%" :src="globalImagePreviewUrl" />
</Modal>
</div>
</template>
@ -291,13 +291,14 @@
// return props.multiple ? list : list.length > 0 ? list[0] : '';
}
const globalImagePreviewUrl = ref<Number>();
const globalImagePreviewUrl = ref();
function handlerPreviewImage(item,index): void {
console.log('aaaa', )
const { azimuth} = props;
// if(azimuth){
globalImagePreviewUrl.value = index
globalImagePreviewUrl.value = item.url
previewOpen.value = true
// }
// globalImagePreviewUrl.value = url + '?' + Math.random();
formFileStore.setUrl(item.url);

@ -108,8 +108,6 @@
label="选项"
v-if="
[
'CheckboxGroup',
'RadioGroup',
'TreeSelect',
'Cascader',
'Transfer',
@ -121,7 +119,7 @@
>
<FormOptions />
</FormItem>
<FormItem label="选项" v-if="['Select'].includes(formConfig.currentItem.component)">
<FormItem label="选项" v-if="['Select','CheckboxGroup','RadioGroup'].includes(formConfig.currentItem.component)">
<div class="select-radio">
<a-radio-group v-model:value="formConfig.currentItem.dataType" button-style="solid">
<a-radio-button value="1">静态数据</a-radio-button>

@ -195,6 +195,8 @@ export const commonComponents: IVFormComponent[] = [
label: '单选框-组',
icon: 'bi:ui-radios-grid',
field: '',
dataType:"1",
dataCode: '',
colProps: { span: 24 },
componentProps: {
options: [
@ -222,6 +224,8 @@ export const commonComponents: IVFormComponent[] = [
label: '复选框-组',
icon: 'bi:ui-checks-grid',
field: '',
dataType:"1",
dataCode: '',
colProps: { span: 24 },
componentProps: {
options: [

@ -32,15 +32,27 @@
<template v-if="column.component=='AddressDetails'">
{{ addressModification(column, record) }}
</template>
<template v-if="column.component=='CheckboxGroup'">
{{ checkFroupModification(column, record) }}
</template>
<template
v-if="
['TreeSelect', 'Cascader', 'CheckboxGroup', 'Transfer', 'RangePicker'].includes(
['TreeSelect', 'Cascader', 'Transfer', 'RangePicker'].includes(
column.component,
)
"
>
{{ dataModification(column, record) }}
</template>
<template v-if="column.key === 'action'">
<div class="flex ai-c jc-c linebtnbox">
<div class="linebtnboxli" v-for="(item, index) in linebtnArr" :key="index">
<a-button size="small" v-if="item.isRowBtn" :type="item.class" @click="handleClickForm(item.prop,record)">{{
item.label
}}</a-button>
</div>
</div>
</template>
</template>
</BasicTable>
@ -165,6 +177,7 @@
{ label: '删除', prop: 'Delete', class: 'error' },
{ label: '详情', prop: 'Details', class: 'default' },
]);
const linebtnArr = ref([])
const mapSetData = ref({
width: 100,
});
@ -309,7 +322,7 @@
const [registerMapFormModal, { openModal: openMapFormModal }] = useModal();
const [registerTable, { reload, setColumns, getSelectRows, clearSelectedRowKeys }] = useTable({
const [registerTable, { reload, setColumns,setProps, getSelectRows, clearSelectedRowKeys }] = useTable({
title: '表单列表',
api: getFormsPageData,
// rowKey: 'f_Id',
@ -326,6 +339,12 @@
useSearchForm: true,
showTableSetting: true,
bordered: true,
actionColumn: {
ifShow: false,
width: 200,
title: '操作',
dataIndex: 'action',
},
beforeFetch: (data) => {
//
const querys = JSON.parse(JSON.stringify(data));
@ -455,9 +474,15 @@
FiledValue: Array<any>;
}
const handleClickForm = (status) => {
const handleClickForm = (status,record) => {
console.log('aaaa', record)
const config = cloneDeep(formConfig.value);
const rows = getSelectRows();
const rows = ref([])
if(record){
rows.value.push(record)
}else{
rows.value = getSelectRows()
}
const query: any = ref({
id: paramsId.value,
key: designData.value.primaryKey,
@ -472,8 +497,8 @@
}
});
if (rows.length > 0) {
query.value.keyValue = rows[0][str.value];
if (rows.value.length > 0) {
query.value.keyValue = rows.value[0][str.value];
}
console.log('config', config);
switch (status) {
@ -514,10 +539,9 @@
break;
case 'Edit':
if (rows.length == 0) {
if (rows.value.length == 0) {
return createMessage.warn('请选择一条数据进行编辑');
}
// console.log('rowsrows',formConfig,rows);
btnList.value.forEach((element) => {
if (element.prop === 'Edit' && element.isWFlow) {
@ -529,7 +553,7 @@
isDetail: false,
isUpdate: true,
tab: config.schemas,
record: rows[0],
record: rows.value[0],
recordChildren: formData.value,
query: query.value,
btnList: btnList.value,
@ -553,7 +577,7 @@
// );
// openModal(true, toProps);
// previewOpen.value = true;
// flowFormData.value = rows[0];
// flowFormData.value = rows.value[0];
// isUpdate.value = true;
openModal(true, toProps);
} else {
@ -561,12 +585,12 @@
}
} else {
previewOpen.value = true;
flowFormData.value = rows[0];
flowFormData.value = rows.value[0];
isUpdate.value = true;
}
break;
case 'Delete':
if (rows.length == 0) {
if (rows.value.length == 0) {
return createMessage.warn('请选择一条数据进行删除');
}
createConfirm({
@ -589,14 +613,14 @@
});
break;
case 'Details':
if (rows.length == 0) {
if (rows.value.length == 0) {
return createMessage.warn('请选择一条数据查看详情');
}
let toProps = {
isDetail: true,
isUpdate: false,
tab: config.schemas,
record: rows[0],
record: rows.value[0],
recordChildren: formData.value,
query: query.value,
btnList: btnList.value,
@ -610,11 +634,9 @@
// showFormModalData.value = toProps;
// openShowFormModal.value = true;
// ids
console.log(rows);
console.log("formConfig");
try {
console.log('formConfig', formConfig);
handlerShowGeomtrys(formConfig, rows[0]);
handlerShowGeomtrys(formConfig, rows.value[0]);
} catch (e) {
createMessage.error('当前数据没有图斑!');
}
@ -778,7 +800,7 @@
// 使options
formObj.formInfo.tabList.forEach((childTab) => {
childTab.schemas.forEach(async (item) => {
if (item.component === 'Select' && item.dataType === '2') {
if (item.component === 'Select' || item.component === 'CheckboxGroup' || item.component === 'RadioGroup' && item.dataType === '2') {
item.componentProps.options = await formCallStore.getDictionaryOptions(item.dataCode);
}
});
@ -831,6 +853,22 @@
paramsId.value = res.formScheme.id;
btnList.value = columnObj.table.btns;
btnArr.value = columnObj.table.btns;
linebtnArr.value = []
columnObj.table.btns.forEach(item =>{
if(item.isRowBtn){
linebtnArr.value.push(item)
}
})
if(linebtnArr.value.length>0){
setProps({
actionColumn: {
ifShow: true,
width: 200,
title: '操作',
dataIndex: 'action',
}
})
}
if (columnObj.table.columns) {
columnObj.table.columns.forEach((item) => {
callColumns.push({
@ -865,6 +903,12 @@
}
});
}
searchFormSchema.forEach(item =>{
if(item.component == 'Input'){
item.componentProps.disabled = false
}
})
console.log('searchFormSchema',searchFormSchema)
callColumns.forEach((item) => {
formObj.formInfo.schemas.forEach((val) => {
if (item.dataIndex == val.field && val.componentProps.options) {
@ -1033,7 +1077,16 @@
}else{
return null
}
}
const checkFroupModification = (column, record) => {
let arr = JSON.parse(
record[column.dataIndex]?.replace(/\r\n/g, '') || '[]',
);
if(arr){
return arr.join(',')
}else{
return null
}
}
//
@ -1120,10 +1173,6 @@
}
});
} else {
// console.log(1080);
// console.log(column);
// console.log(record);
// console.log(searchFormSchema);
res = record[column.dataIndex];
}
return res;
@ -1199,4 +1248,16 @@
height: 750px;
overflow: auto;
}
.ai-c{
align-items: center;
}
.jc-c{
justify-content: center;
}
.linebtnbox{
flex-wrap: wrap;
}
.linebtnboxli{
margin: 0 3px;
}
</style>

@ -299,7 +299,7 @@
if (schems) {
schems.formInfo.tabList.forEach((childTab) => {
childTab.schemas.forEach(async (item) => {
if (item.component === 'Select' && item.dataType === '2') {
if (item.component === 'Select' || item.component === 'CheckboxGroup' || item.component === 'RadioGroup' && item.dataType === '2') {
item.componentProps.options = await formCallStore.getDictionaryOptions(item.dataCode);
}
});

@ -1,4 +1,16 @@
<template>
<div class="addressbox">
<div class="search-input">
<a-input
placeholder="请输入地址"
v-model:value="address"
allow-clear
></a-input>
</div>
<div class="search-button" @click="searchAddress">
<img src="/statistical/search-btn.png" alt="" />
</div>
</div>
<div class="search-container">
<div class="search-input">
<a-input
@ -11,6 +23,7 @@
<div class="search-button" @click="searchArea">
<img src="/statistical/search-btn.png" alt="" />
</div>
<div class="search-result-container" v-if="showSearchResult">
<div class="result-item" v-for="(item, index) in searchResult" @click="toPosition(item)">
<div class="search-icon">
@ -50,7 +63,7 @@
import { transformGCJ2WGS } from '@/utils/EpsgTransform';
import { getPageList, getPolygonCenter } from '@/api/tiankongdi/index'
const emits = defineEmits(['toPosition', 'handlerFilter']);
const emits = defineEmits(['toPosition', 'handlerFilter', 'flyToLocation']);
const props = defineProps(['layer', 'layerSettings']);
watch(
() => props.layerSettings,
@ -89,6 +102,7 @@
const showSearchResult = ref(false);
const showFilterOptions = ref(false);
const address = ref()
onMounted(() => {});
@ -99,7 +113,17 @@
function onInputBlue() {
showSearchResult.value = false;
}
async function searchAddress(){
axios({
method: 'get',
url: `https://restapi.amap.com/v3/geocode/geo?key=ed310f0b1f6cfd93edfba42f1a09d4d9&address=`+address.value,
}).then((res) => {
if(res.data){
let location = res.data.geocodes[0].location.split(',')
emits('flyToLocation', location);
}
});
}
const keyword = ref('');
async function searchArea() {
@ -173,6 +197,29 @@
</script>
<style type="less" scoped>
.addressbox{
width: 100%;
height: 100%;
display: flex;
background-image: url('/statistical/search-bg.png');
background-size: 100% 100%;
border-top-right-radius: 8px;
position: relative;
.search-input {
flex: auto;
height: 100%;
}
.search-button {
width: 62px;
height: 36px;
border-top-right-radius: 8px;
background: #0a62c6;
text-align: center;
line-height: 36px;
cursor: pointer;
}
}
.search-container {
width: 100%;
height: 100%;

@ -2,6 +2,7 @@
<div :id="mapContainerName" class="map-container">
<div class="search-container-box">
<SearchComponent
@flyToLocation="flyToLocation"
@toPosition="toPosition"
@handlerFilter="handlerFilter"
:layerSettings="layerSettings"
@ -355,7 +356,7 @@
source: 'streetSource',
paint: {
'line-color': '#42befb', // 线
'line-width': 2, // 线
'line-width': 1, // 线
},
minzoom: 10,
maxzoom: 24,
@ -420,6 +421,20 @@
},
});
}
function flyToLocation(e){
map.flyTo({
center: e,
zoom: 12,
bearing: 0,
speed: 1, //
curve: 2, // 线
essential: true,
easing(t) {
//
return t;
},
});
}
//
const handlerLoadPanelLayer = (geojson) => {
if (map.getSource('countyPanelLayer')) {
@ -492,8 +507,28 @@
source: 'countySource',
paint: {
'line-color': '#6f7ff4', // 线
'line-width': 3, // 线
'line-width': 4, // 线
},
minzoom: 1,
maxzoom: 24,
});
map.addLayer({
id: 'countyLabelLayer',
type: 'symbol',
source: 'countySource',
layout: {
'text-field': ['get', 'xzqmc_1'],
'text-font': ['Open Sans Bold', 'Arial Unicode MS Bold'],
'text-size': 12,
'text-anchor': 'center',
},
paint: {
'text-color': '#041B36',
'text-halo-color': '#fff',
'text-halo-width': 2,
},
minzoom: 1,
maxzoom: 10,
});
if (map.getLayer('countyPanelLayer')) {
map.moveLayer('countyLayer', 'countyPanelLayer');

@ -49,6 +49,11 @@
name:"农业生产设施",
checked:false,
},
{
id:4,
name:"农机组织",
checked:false,
},
])
const layerChange = (item,type)=>{

@ -0,0 +1,66 @@
// vite.config.ts
import { defineApplicationConfig } from "file:///F:/%E9%A1%B9%E7%9B%AE/%E5%86%9C%E5%8F%91%E8%B0%83%E6%9F%A5%E9%87%87%E9%9B%86/NONG_FA_DIAO_CHA_CAI_JI/internal/vite-config/dist/index.mjs";
var vite_config_default = defineApplicationConfig({
overrides: {
optimizeDeps: {
include: [
"echarts/core",
"echarts/charts",
"echarts/components",
"echarts/renderers",
"qrcode",
"@iconify/iconify",
"ant-design-vue/es/locale/zh_CN",
"ant-design-vue/es/locale/en_US",
"@/../lib/vform/designer.umd.js"
]
},
build: {
/* 其他build生产打包配置省略 */
//...
target: "esnext",
commonjsOptions: {
include: /node_modules|lib/
//这里记得把lib目录加进来否则生产打包会报错
}
},
server: {
proxy: {
"/basic-api": {
target: "http://localhost:3000",
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(new RegExp(`^/basic-api`), "")
// only https
// secure: false
},
"/upload": {
target: "http://localhost:3300/upload",
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(new RegExp(`^/upload`), "")
}
},
warmup: {
clientFiles: ["./index.html", "./src/{views,components}/*"]
}
},
define: {
"process.env": {
BASE_URL: "/"
}
},
css: {
preprocessorOptions: {
less: {
javascriptEnabled: true
}
}
},
plugins: []
}
});
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJGOlxcXFxcdTk4NzlcdTc2RUVcXFxcXHU1MTlDXHU1M0QxXHU4QzAzXHU2N0U1XHU5MUM3XHU5NkM2XFxcXE5PTkdfRkFfRElBT19DSEFfQ0FJX0pJXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJGOlxcXFxcdTk4NzlcdTc2RUVcXFxcXHU1MTlDXHU1M0QxXHU4QzAzXHU2N0U1XHU5MUM3XHU5NkM2XFxcXE5PTkdfRkFfRElBT19DSEFfQ0FJX0pJXFxcXHZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9GOi8lRTklQTElQjklRTclOUIlQUUvJUU1JTg2JTlDJUU1JThGJTkxJUU4JUIwJTgzJUU2JTlGJUE1JUU5JTg3JTg3JUU5JTlCJTg2L05PTkdfRkFfRElBT19DSEFfQ0FJX0pJL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IHsgZGVmaW5lQXBwbGljYXRpb25Db25maWcgfSBmcm9tICdAdmJlbi92aXRlLWNvbmZpZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUFwcGxpY2F0aW9uQ29uZmlnKHtcbiAgb3ZlcnJpZGVzOiB7XG4gICAgb3B0aW1pemVEZXBzOiB7XG4gICAgICBpbmNsdWRlOiBbXG4gICAgICAgICdlY2hhcnRzL2NvcmUnLFxuICAgICAgICAnZWNoYXJ0cy9jaGFydHMnLFxuICAgICAgICAnZWNoYXJ0cy9jb21wb25lbnRzJyxcbiAgICAgICAgJ2VjaGFydHMvcmVuZGVyZXJzJyxcbiAgICAgICAgJ3FyY29kZScsXG4gICAgICAgICdAaWNvbmlmeS9pY29uaWZ5JyxcbiAgICAgICAgJ2FudC1kZXNpZ24tdnVlL2VzL2xvY2FsZS96aF9DTicsXG4gICAgICAgICdhbnQtZGVzaWduLXZ1ZS9lcy9sb2NhbGUvZW5fVVMnLFxuICAgICAgICAnQC8uLi9saWIvdmZvcm0vZGVzaWduZXIudW1kLmpzJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBidWlsZDoge1xuICAgICAgLyogXHU1MTc2XHU0RUQ2YnVpbGRcdTc1MUZcdTRFQTdcdTYyNTNcdTUzMDVcdTkxNERcdTdGNkVcdTc3MDFcdTc1NjUgKi9cbiAgICAgIC8vLi4uXG4gICAgICB0YXJnZXQ6ICdlc25leHQnLFxuICAgICAgY29tbW9uanNPcHRpb25zOiB7XG4gICAgICAgIGluY2x1ZGU6IC9ub2RlX21vZHVsZXN8bGliLywgLy9cdThGRDlcdTkxQ0NcdThCQjBcdTVGOTdcdTYyOEFsaWJcdTc2RUVcdTVGNTVcdTUyQTBcdThGREJcdTY3NjVcdUZGMENcdTU0MjZcdTUyMTlcdTc1MUZcdTRFQTdcdTYyNTNcdTUzMDVcdTRGMUFcdTYyQTVcdTk1MTlcdUZGMDFcdUZGMDFcbiAgICAgIH0sXG4gICAgfSxcbiAgICBzZXJ2ZXI6IHtcbiAgICAgIHByb3h5OiB7XG4gICAgICAgICcvYmFzaWMtYXBpJzoge1xuICAgICAgICAgIHRhcmdldDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMCcsXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlLFxuICAgICAgICAgIHdzOiB0cnVlLFxuICAgICAgICAgIHJld3JpdGU6IChwYXRoKSA9PiBwYXRoLnJlcGxhY2UobmV3IFJlZ0V4cChgXi9iYXNpYy1hcGlgKSwgJycpLFxuICAgICAgICAgIC8vIG9ubHkgaHR0cHNcbiAgICAgICAgICAvLyBzZWN1cmU6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgICcvdXBsb2FkJzoge1xuICAgICAgICAgIHRhcmdldDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzMwMC91cGxvYWQnLFxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICB3czogdHJ1ZSxcbiAgICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKG5ldyBSZWdFeHAoYF4vdXBsb2FkYCksICcnKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB3YXJtdXA6IHtcbiAgICAgICAgY2xpZW50RmlsZXM6IFsnLi9pbmRleC5odG1sJywgJy4vc3JjL3t2aWV3cyxjb21wb25lbnRzfS8qJ10sXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmaW5lOiB7XG4gICAgICAncHJvY2Vzcy5lbnYnOiB7XG4gICAgICAgIEJBU0VfVVJMOiAnLycsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY3NzOiB7XG4gICAgICBwcmVwcm9jZXNzb3JPcHRpb25zOiB7XG4gICAgICAgIGxlc3M6IHtcbiAgICAgICAgICBqYXZhc2NyaXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBwbHVnaW5zOiBbXSxcbiAgfSxcbn0pO1xuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUFzVyxTQUFTLCtCQUErQjtBQUU5WSxJQUFPLHNCQUFRLHdCQUF3QjtBQUFBLEVBQ3JDLFdBQVc7QUFBQSxJQUNULGNBQWM7QUFBQSxNQUNaLFNBQVM7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBQ0EsT0FBTztBQUFBO0FBQUE7QUFBQSxNQUdMLFFBQVE7QUFBQSxNQUNSLGlCQUFpQjtBQUFBLFFBQ2YsU0FBUztBQUFBO0FBQUEsTUFDWDtBQUFBLElBQ0Y7QUFBQSxJQUNBLFFBQVE7QUFBQSxNQUNOLE9BQU87QUFBQSxRQUNMLGNBQWM7QUFBQSxVQUNaLFFBQVE7QUFBQSxVQUNSLGNBQWM7QUFBQSxVQUNkLElBQUk7QUFBQSxVQUNKLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLE9BQU8sYUFBYSxHQUFHLEVBQUU7QUFBQTtBQUFBO0FBQUEsUUFHL0Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNULFFBQVE7QUFBQSxVQUNSLGNBQWM7QUFBQSxVQUNkLElBQUk7QUFBQSxVQUNKLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLE9BQU8sVUFBVSxHQUFHLEVBQUU7QUFBQSxRQUM1RDtBQUFBLE1BQ0Y7QUFBQSxNQUNBLFFBQVE7QUFBQSxRQUNOLGFBQWEsQ0FBQyxnQkFBZ0IsNEJBQTRCO0FBQUEsTUFDNUQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixlQUFlO0FBQUEsUUFDYixVQUFVO0FBQUEsTUFDWjtBQUFBLElBQ0Y7QUFBQSxJQUNBLEtBQUs7QUFBQSxNQUNILHFCQUFxQjtBQUFBLFFBQ25CLE1BQU07QUFBQSxVQUNKLG1CQUFtQjtBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLFNBQVMsQ0FBQztBQUFBLEVBQ1o7QUFDRixDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo=
Loading…
Cancel
Save