merge
commit
12cfb51c78
|
|
@ -6,7 +6,7 @@
|
|||
<div class="anticon" :class="getAppLogoClass" @click="goHome">
|
||||
<img :src="VITE_GLOB_APP_LOGO" />
|
||||
<div class="ml-2 truncate md:opacity-100" :class="getTitleClass" v-show="showTitle">
|
||||
{{ title }}
|
||||
{{ subjectLogoTitle ? subjectLogoTitle : title }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -19,6 +19,8 @@
|
|||
import { PageEnum } from '@/enums/pageEnum';
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
import { getAppEnvConfig } from '@/utils/env';
|
||||
import { SUBJECT_LOGO_TITLE } from '@/enums/cacheEnum';
|
||||
import { getAuthCache } from '@/utils/auth';
|
||||
|
||||
const { VITE_GLOB_APP_LOGO } = getAppEnvConfig();
|
||||
|
||||
|
|
@ -41,6 +43,8 @@
|
|||
const { getCollapsedShowTitle } = useMenuSetting();
|
||||
const userStore = useUserStore();
|
||||
const { title } = useGlobSetting();
|
||||
const subjectLogoTitle = getAuthCache(SUBJECT_LOGO_TITLE);
|
||||
|
||||
const go = useGo();
|
||||
|
||||
const getAppLogoClass = computed(() => [
|
||||
|
|
|
|||
|
|
@ -41,6 +41,8 @@
|
|||
import { subTableStore } from '@/store/modules/subTable';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const emits = defineEmits(['changeRadioVal']);
|
||||
|
||||
const subTableDataStore = subTableStore();
|
||||
const props = defineProps({
|
||||
data: {
|
||||
|
|
@ -57,7 +59,7 @@
|
|||
},
|
||||
callModal: {
|
||||
type: Boolean,
|
||||
default: () => (false),
|
||||
default: () => false,
|
||||
},
|
||||
});
|
||||
const noTitleKey = ref(0);
|
||||
|
|
@ -70,16 +72,18 @@
|
|||
const nowTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'));
|
||||
const userName = localStorage.getItem('fireUserLoginName');
|
||||
const cardRef = ref<any>();
|
||||
if(props.callModal){
|
||||
tableData.ifShow = true
|
||||
if (props.callModal) {
|
||||
tableData.ifShow = true;
|
||||
}
|
||||
const [registerForm, { getFieldsValue, setFieldsValue, updateSchema, resetFields, validate }] =
|
||||
useForm({
|
||||
labelWidth: 100,
|
||||
schemas: formColumns.value,
|
||||
showActionButtonGroup: false,
|
||||
baseColProps: { lg: 24, md: 24 },
|
||||
});
|
||||
const [
|
||||
registerForm,
|
||||
{ getFieldsValue, setFieldsValue, updateSchema, resetFields, validate, clearValidate },
|
||||
] = useForm({
|
||||
labelWidth: 100,
|
||||
schemas: formColumns.value,
|
||||
showActionButtonGroup: false,
|
||||
baseColProps: { lg: 24, md: 24 },
|
||||
});
|
||||
watch(
|
||||
() => props.formData,
|
||||
(newVal) => {
|
||||
|
|
@ -100,6 +104,7 @@
|
|||
{ deep: true },
|
||||
);
|
||||
const onTabChange = (event, field) => {
|
||||
clearValidate();
|
||||
let value = event.target.value;
|
||||
subTableDataStore.setOneGroupData(field, value);
|
||||
noTitleKey.value = value;
|
||||
|
|
@ -111,20 +116,32 @@
|
|||
childItem.value = childGourp.value[currentIndex];
|
||||
}
|
||||
formColumns.value.forEach((element) => {
|
||||
if(element.component === 'CardGroup'){
|
||||
element.slot = 'CardGroup'
|
||||
if (element.component === 'CardGroup') {
|
||||
element.slot = 'CardGroup';
|
||||
}
|
||||
element.show = false;
|
||||
updateSchema([{ field: element.field, show: false }]);
|
||||
if (element.index == value) {
|
||||
element.show = true;
|
||||
if (element.requiredString) {
|
||||
element.itemProps.required = true;
|
||||
updateSchema([{ field: element.field, itemProps: { required: true } }]);
|
||||
}
|
||||
updateSchema([{ field: element.field, show: true }]);
|
||||
} else {
|
||||
element.itemProps.required = false;
|
||||
// delete element.itemProps.required;
|
||||
clearValidate(element.field);
|
||||
updateSchema([{ field: element.field, itemProps: { required: false } }]);
|
||||
// updateSchema([{ field: element.field, itemProps: element.itemProps }]);
|
||||
}
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
resetFields();
|
||||
setFieldsValue(subTableDataStore.getGroupData);
|
||||
}, 10);
|
||||
emits('changeRadioVal');
|
||||
};
|
||||
if (tableData.componentProps) {
|
||||
tableData.componentProps.options.forEach((element, index) => {
|
||||
|
|
@ -140,6 +157,7 @@
|
|||
...childElement,
|
||||
show: index == 0 ? true : false,
|
||||
index: element.value,
|
||||
requiredString: childElement.itemProps.required,
|
||||
});
|
||||
if (childElement.component == 'CardGroup') {
|
||||
childGourp.value.push({
|
||||
|
|
@ -159,6 +177,7 @@
|
|||
}
|
||||
});
|
||||
});
|
||||
|
||||
nextTick(() => {
|
||||
if (Object.keys(subTableDataStore.getGroupData).includes(tableData.field)) {
|
||||
noTitleKey.value = subTableDataStore.getGroupData[tableData.field];
|
||||
|
|
@ -184,13 +203,19 @@
|
|||
}
|
||||
|
||||
async function verify() {
|
||||
try {
|
||||
const data = await validate();
|
||||
console.log(data);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
return false;
|
||||
}
|
||||
const data = await validate()
|
||||
.then(async (data) => {
|
||||
return true;
|
||||
})
|
||||
.catch(async (err) => {
|
||||
console.log(err);
|
||||
if (err.errorFields.length > 0) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
return data;
|
||||
}
|
||||
defineExpose({
|
||||
verify,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div class="my-form-viewer">
|
||||
<template v-if="tabsColumns.length > 1">
|
||||
<div v-show="tabsColumns.length > 1">
|
||||
<a-tabs style="width: 100%" @change="tabsChange">
|
||||
<a-tab-pane v-for="(colItem, index) in tabsColumns" :tab="colItem.label" :key="index">
|
||||
<BasicForm ref="myDataBaseFormRef" @register="registerForm">
|
||||
|
|
@ -11,6 +11,7 @@
|
|||
:formData="cardGourpFormData"
|
||||
:parentValue="cardGroupData[index].field"
|
||||
ref="groupRef"
|
||||
@changeRadioVal="radioVal"
|
||||
/>
|
||||
</template>
|
||||
</BasicForm>
|
||||
|
|
@ -21,7 +22,7 @@
|
|||
</template>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</template>
|
||||
</div>
|
||||
<BasicForm
|
||||
ref="myDataBaseFormRef"
|
||||
@register="registerForm"
|
||||
|
|
@ -34,6 +35,7 @@
|
|||
:formData="cardGourpFormData"
|
||||
:parentValue="cardGroupData[0].field"
|
||||
ref="groupRef"
|
||||
@changeRadioVal="radioVal"
|
||||
/>
|
||||
</template>
|
||||
</BasicForm>
|
||||
|
|
@ -74,7 +76,7 @@
|
|||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref, defineProps, defineEmits } from 'vue';
|
||||
import { onMounted, ref, defineProps, defineEmits, getCurrentInstance, nextTick } from 'vue';
|
||||
import { BasicForm, useForm } from '@/components/Form';
|
||||
import { functionGetFormDataFormScheme, LoadFormScheme } from '@/api/demo/formScheme';
|
||||
import { PlusOutlined, DeleteOutlined } from '@ant-design/icons-vue';
|
||||
|
|
@ -86,6 +88,7 @@
|
|||
import { subTableStore } from '@/store/modules/subTable';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const emit = defineEmits(['getFormSuccess']);
|
||||
const subTableDataStore = subTableStore();
|
||||
|
||||
|
|
@ -130,15 +133,17 @@
|
|||
}
|
||||
});
|
||||
};
|
||||
const [registerForm, { getFieldsValue, setFieldsValue, updateSchema, resetFields, validate }] =
|
||||
useForm({
|
||||
labelWidth: 100,
|
||||
schemas: formColumns,
|
||||
showActionButtonGroup: false,
|
||||
actionColOptions: {
|
||||
span: 24,
|
||||
},
|
||||
});
|
||||
const [
|
||||
registerForm,
|
||||
{ getFieldsValue, setFieldsValue, updateSchema, resetFields, validate, clearValidate },
|
||||
] = useForm({
|
||||
labelWidth: 100,
|
||||
schemas: formColumns,
|
||||
showActionButtonGroup: false,
|
||||
actionColOptions: {
|
||||
span: 24,
|
||||
},
|
||||
});
|
||||
async function getFormHistory() {
|
||||
const data = await LoadFormScheme({
|
||||
schemeId: props.formVerison,
|
||||
|
|
@ -403,6 +408,24 @@
|
|||
const groupRef = ref();
|
||||
async function getForm() {
|
||||
try {
|
||||
//卡片组的值赋值给form,优化卡片组必填验证不通过
|
||||
setFieldsValue({
|
||||
...subTableDataStore.getGroupData,
|
||||
});
|
||||
// 验证卡片组必填项
|
||||
if (groupRef.value) {
|
||||
if (tabsColumns.value.length > 0) {
|
||||
if (!(await groupRef.value[0].verify())) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (!(await groupRef.value.verify())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 验证表单必填项
|
||||
let values = await validate();
|
||||
for (const key in values) {
|
||||
for (const fieKey in FieldsValue.value) {
|
||||
|
|
@ -444,6 +467,7 @@
|
|||
});
|
||||
});
|
||||
}
|
||||
console.log(query);
|
||||
return query;
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
|
@ -461,6 +485,14 @@
|
|||
getFormHistory();
|
||||
}
|
||||
});
|
||||
function radioVal() {
|
||||
console.log('radioVal');
|
||||
clearValidate();
|
||||
//切换卡片组选项时,卡片组的值赋值给form,优化卡片组必填验证不通过
|
||||
setFieldsValue({
|
||||
...subTableDataStore.getGroupData,
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
|
|
|
|||
|
|
@ -342,6 +342,7 @@
|
|||
|
||||
})
|
||||
props.mapConfig.baseLayers?.forEach((item,index)=>{
|
||||
console.log("baselayers",item);
|
||||
let layer = JSON.parse(item.style);
|
||||
let image = item.image.replace('\\','/');
|
||||
let layers = {
|
||||
|
|
@ -350,7 +351,7 @@
|
|||
fixed:false,
|
||||
// zoom:0,
|
||||
easeToOptions:{},
|
||||
active:false,
|
||||
active:item.checked,
|
||||
backgroundImage:VITE_GLOB_API_URL_VAR.value+image,
|
||||
backgroundImageActive:"",
|
||||
onVisibleChange:(visible:boolean)=>{
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<img id="zoomableImage" draggable="false" :src="imageUrl" />
|
||||
<div class="operation-container">
|
||||
<div>
|
||||
<UndoOutlined />
|
||||
<UndoOutlined @click="backTransFrom"/>
|
||||
</div>
|
||||
<div>
|
||||
<ZoomInOutlined @click="bigScale" />
|
||||
|
|
@ -40,6 +40,11 @@ let initialMouseX;
|
|||
let initialMouseY;
|
||||
let initialImageX;
|
||||
let initialImageY;
|
||||
var scale = 1;
|
||||
var minScale = 0.5;
|
||||
var maxScale = 3;
|
||||
var scaleFactor = 0.1;
|
||||
var rotate = 0;
|
||||
|
||||
|
||||
onMounted(()=>{
|
||||
|
|
@ -185,6 +190,14 @@ function bigScale():void {
|
|||
scale+=0.4;
|
||||
zoomableImage.style.transform = `scale(${scale})`;
|
||||
}
|
||||
function transform (){
|
||||
rotate += 90;
|
||||
zoomableImage.style.transform = `rotate(${rotate}deg)`;
|
||||
}
|
||||
function backTransFrom() {
|
||||
rotate -= 90;
|
||||
zoomableImage.style.transform = `rotate(${rotate}deg)`;
|
||||
}
|
||||
|
||||
function closePreview():void{
|
||||
emits("closeImagePreview");
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ export const TABLE_SETTING_KEY = 'TABLE__SETTING__KEY__';
|
|||
|
||||
// 专题设置
|
||||
export const SUBJECT_KEY = 'SUBJECT__';
|
||||
export const SUBJECT_LOGO_TITLE = 'SUBJECT_LOGO_TITLE__';
|
||||
|
||||
export enum CacheTypeEnum {
|
||||
SESSION,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,11 @@
|
|||
<template>
|
||||
<div :class="prefixCls">
|
||||
<Popover title="" trigger="click" :overlayClassName="`${prefixCls}__overlay`">
|
||||
<Popover
|
||||
v-model:visible="visible"
|
||||
title=""
|
||||
trigger="click"
|
||||
:overlayClassName="`${prefixCls}__overlay`"
|
||||
>
|
||||
<Badge :count="count" dot :numberStyle="numberStyle">
|
||||
<BellOutlined />
|
||||
</Badge>
|
||||
|
|
@ -45,16 +50,16 @@
|
|||
import { Look } from '@/views/demo/workflow/task/process/page';
|
||||
import { useModal } from '@/components/Modal';
|
||||
import NoticeList from './NoticeList.vue';
|
||||
import Message from './message.vue';
|
||||
import { signal } from '@/utils/signalR';
|
||||
import { getDetail } from '@/api/sys/WFSchemeInfo';
|
||||
import { flowStore } from '@/store/modules/flow';
|
||||
import DetailModal from '@/views/demo/message/msg/DetailModal.vue';
|
||||
|
||||
const flowWfDataStore = flowStore();
|
||||
const [registerModal, { openModal }] = useModal();
|
||||
const [registerModal, { openModal: openLookModal }] = useModal();
|
||||
const userStore = useUserStore();
|
||||
const userInfo: any = userStore.getUserInfo;
|
||||
|
||||
const visible = ref(false);
|
||||
const { prefixCls } = useDesign('header-notify');
|
||||
const { createMessage, notification } = useMessage();
|
||||
const listData = ref(tabListData);
|
||||
|
|
@ -73,6 +78,8 @@
|
|||
});
|
||||
|
||||
async function onNoticeClick(record) {
|
||||
console.log(record);
|
||||
visible.value = false;
|
||||
const index = listData.value[0].list.findIndex((item: any) => item.id === record.id);
|
||||
if (index !== -1) {
|
||||
listData.value[0].list.splice(index, 1);
|
||||
|
|
@ -91,17 +98,25 @@
|
|||
taskId.value = info.Id;
|
||||
type.value = info.Type;
|
||||
} else {
|
||||
openModal(true, {
|
||||
record,
|
||||
openLookModal(true, {
|
||||
record: {
|
||||
content: record.title,
|
||||
createDate: record.datetime,
|
||||
isRead: 0,
|
||||
},
|
||||
});
|
||||
}
|
||||
} else {
|
||||
openModal(true, {
|
||||
record,
|
||||
openLookModal(true, {
|
||||
record: {
|
||||
content: record.title,
|
||||
createDate: record.datetime,
|
||||
isRead: 0,
|
||||
},
|
||||
});
|
||||
}
|
||||
const data = await readMsg({
|
||||
id: record.msgId,
|
||||
id: record.id,
|
||||
});
|
||||
}
|
||||
async function getList() {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import { defineStore } from 'pinia';
|
|||
import { store } from '@/store';
|
||||
import { RoleEnum } from '@/enums/roleEnum';
|
||||
import { PageEnum } from '@/enums/pageEnum';
|
||||
import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY, SUBJECT_KEY } from '@/enums/cacheEnum';
|
||||
import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY, SUBJECT_KEY, SUBJECT_LOGO_TITLE } from '@/enums/cacheEnum';
|
||||
import { getAuthCache, setAuthCache } from '@/utils/auth';
|
||||
import { GetUserInfoModel, LoginParams } from '@/api/sys/model/userModel';
|
||||
import { doLogout, getUserInfo, loginApi } from '@/api/sys/user';
|
||||
|
|
@ -25,6 +25,7 @@ interface UserState {
|
|||
sessionTimeout?: boolean;
|
||||
lastUpdateTime: number;
|
||||
subject?: string;
|
||||
subjectLogoTitle?: string;
|
||||
}
|
||||
|
||||
export const useUserStore = defineStore({
|
||||
|
|
@ -41,6 +42,7 @@ export const useUserStore = defineStore({
|
|||
// Last fetch time
|
||||
lastUpdateTime: 0,
|
||||
subject: '',
|
||||
subjectLogoTitle: '',
|
||||
}),
|
||||
getters: {
|
||||
getUserInfo(state): UserInfo {
|
||||
|
|
@ -61,11 +63,15 @@ export const useUserStore = defineStore({
|
|||
getSubject(state): string {
|
||||
return state.subject || getAuthCache<string>(SUBJECT_KEY);
|
||||
},
|
||||
getSubjectLogoTitle(state): string {
|
||||
return state.subjectLogoTitle || getAuthCache<string>(SUBJECT_LOGO_TITLE);
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
async setSubject(subject: string | undefined, link: string) {
|
||||
async setSubject(subject: string | undefined, logoTitle: string | undefined, link: string) {
|
||||
this.subject = subject;
|
||||
setAuthCache(SUBJECT_KEY, subject);
|
||||
setAuthCache(SUBJECT_LOGO_TITLE, logoTitle);
|
||||
if (subject != undefined) {
|
||||
const permissionStore = usePermissionStore();
|
||||
await permissionStore.buildRoutesAction();
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import { createLocalStorage, createSessionStorage } from '@/utils/cache';
|
|||
import { Memory } from './memory';
|
||||
import {
|
||||
SUBJECT_KEY,
|
||||
SUBJECT_LOGO_TITLE,
|
||||
TOKEN_KEY,
|
||||
USER_INFO_KEY,
|
||||
ROLES_KEY,
|
||||
|
|
@ -22,6 +23,7 @@ import { pick, omit } from 'lodash-es';
|
|||
|
||||
interface BasicStore {
|
||||
[SUBJECT_KEY]: string | number | null | undefined;
|
||||
[SUBJECT_LOGO_TITLE]: string | number | null | undefined;
|
||||
[TOKEN_KEY]: string | number | null | undefined;
|
||||
[USER_INFO_KEY]: UserInfo;
|
||||
[ROLES_KEY]: string[];
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<BasicModal v-bind="$attrs" @register="registerModal" title="消息">
|
||||
<BasicModal v-bind="$attrs" @register="registerModal" title="消息" @ok="submit">
|
||||
<Description
|
||||
:collapseOptions="{ canExpand: true, helpMessage: 'help me' }"
|
||||
:column="1"
|
||||
|
|
@ -42,4 +42,7 @@
|
|||
label: '创建时间',
|
||||
},
|
||||
];
|
||||
function submit() {
|
||||
closeModal();
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -265,6 +265,16 @@
|
|||
dataChildItem.dbColumnName === childItem.componentProps.fieldName,
|
||||
);
|
||||
childItem.csType = element.data[currentIndex].csType;
|
||||
if (childItem.csType == 'int') {
|
||||
if (
|
||||
childItem.componentProps.options &&
|
||||
childItem.componentProps.options.length > 0
|
||||
) {
|
||||
childItem.componentProps.options.forEach((optionChild) => {
|
||||
optionChild.value = Number(optionChild.value);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
if (childItem.component === 'CardGroup') {
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ export const columns: BasicColumn[] = [
|
|||
},
|
||||
{
|
||||
title: '耕地面积',
|
||||
dataIndex: 'typeTuituCount',
|
||||
dataIndex: 'gengdiarea',
|
||||
},
|
||||
{
|
||||
title: '判定结果',
|
||||
|
|
@ -79,10 +79,6 @@ export const columns: BasicColumn[] = [
|
|||
title: '整改措施',
|
||||
dataIndex: 'measurename',
|
||||
},
|
||||
{
|
||||
title: '实际用途',
|
||||
dataIndex: 'qitauseto',
|
||||
},
|
||||
];
|
||||
|
||||
export const searchFormSchema: FormSchema[] = [
|
||||
|
|
|
|||
|
|
@ -17,13 +17,23 @@
|
|||
<a-input v-model:value="modalData.id" />
|
||||
</a-form-item>
|
||||
<a-form-item label="专栏名称" name="title">
|
||||
<a-textarea v-model:value="modalData.title" />
|
||||
<a-input v-model:value="modalData.title" />
|
||||
</a-form-item>
|
||||
<a-form-item label="LOGO名称" name="logoTitle">
|
||||
<a-input v-model:value="modalData.logoTitle" />
|
||||
</a-form-item>
|
||||
<a-form-item label="状态" name="isShow">
|
||||
<a-select v-model:value="modalData.isShow">
|
||||
<a-select-option :value="true">启用</a-select-option>
|
||||
<a-select-option :value="false">停用</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="是否开放" name="isDevelop">
|
||||
<a-switch
|
||||
v-model:checked="modalData.isDevelop"
|
||||
checked-children="开放"
|
||||
un-checked-children="不开放"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="流程分类" name="category">
|
||||
<a-select
|
||||
|
|
@ -39,10 +49,10 @@
|
|||
un-checked-children="否"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="外部链接" name="linkOrApi" v-if="modalData.isExternal">
|
||||
<a-form-item label="外部链接" name="linkOrApi" v-if="modalData.isExternal" :required="modalData.isDevelop">
|
||||
<a-input v-model:value="modalData.linkOrApi" />
|
||||
</a-form-item>
|
||||
<a-form-item label="跳转首页" name="linkOrApi" v-if="!modalData.isExternal">
|
||||
<a-form-item label="跳转首页" name="linkOrApi" v-if="!modalData.isExternal" :required="modalData.isDevelop">
|
||||
<a-input v-model:value="modalData.linkOrApi" />
|
||||
</a-form-item>
|
||||
<a-form-item label="排序号" name="sort">
|
||||
|
|
@ -95,7 +105,9 @@
|
|||
const modalData = ref({
|
||||
id: '' as string,
|
||||
title: '' as string,
|
||||
logoTitle: '' as string,
|
||||
isShow: true as boolean,
|
||||
isDevelop: false as boolean,
|
||||
isExternal: false as boolean,
|
||||
linkOrApi: '' as string,
|
||||
sort: 0 as number,
|
||||
|
|
@ -119,6 +131,7 @@
|
|||
getCategory();
|
||||
});
|
||||
|
||||
// 流程分类
|
||||
async function getCategory() {
|
||||
categoryOptions.value = await getLoad({ code: 'FlowSort' });
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,6 +17,11 @@ export const columns: BasicColumn[] = [
|
|||
dataIndex: 'title',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
title: 'LOGO名称',
|
||||
dataIndex: 'logoTitle',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
title: '类型',
|
||||
dataIndex: 'isExternal',
|
||||
|
|
@ -32,6 +37,11 @@ export const columns: BasicColumn[] = [
|
|||
dataIndex: 'isShow',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
title: '是否开放',
|
||||
dataIndex: 'isDevelop',
|
||||
width: 200,
|
||||
},
|
||||
{
|
||||
title: '排序',
|
||||
dataIndex: 'sort',
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div class="page-div categories-page">
|
||||
<div>
|
||||
<BasicTable @register="registerTable">
|
||||
<template #toolbar>
|
||||
<PermissionBtn @btnEvent="buttonClick"></PermissionBtn>
|
||||
|
|
@ -17,6 +17,10 @@
|
|||
@change="changeIsShow(record)"
|
||||
/>
|
||||
</template>
|
||||
<template v-if="column.key === 'isDevelop'">
|
||||
<a-tag color="yellow" v-if="record.isDevelop">开放</a-tag>
|
||||
<a-tag color="gray" v-else>不开放</a-tag>
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
<a-button v-if="record.sort > 1" type="dashed" @click="sortUp(record)">
|
||||
<template #icon>
|
||||
|
|
@ -63,7 +67,9 @@
|
|||
data: {
|
||||
id: '' as string,
|
||||
title: '' as string,
|
||||
logoTitle: '' as string,
|
||||
isShow: true as boolean,
|
||||
isDevelop: false as boolean,
|
||||
isExternal: false as boolean,
|
||||
linkOrApi: '' as string,
|
||||
sort: 0 as number,
|
||||
|
|
@ -128,9 +134,13 @@
|
|||
temp_add.data = {
|
||||
id: '',
|
||||
title: '',
|
||||
logoTitle: '',
|
||||
isShow: true,
|
||||
imgUrl: '',
|
||||
isDevelop: false,
|
||||
isExternal: false,
|
||||
linkOrApi: '',
|
||||
sort: sortNumber + 1,
|
||||
imgUrl: '',
|
||||
};
|
||||
openModal(true, temp_add);
|
||||
break;
|
||||
|
|
@ -141,7 +151,7 @@
|
|||
}
|
||||
let temp_edit = cloneDeep(modalData);
|
||||
temp_edit.title = '编辑';
|
||||
temp_edit.data = getSelectRows()[0];
|
||||
temp_edit.data = cloneDeep(getSelectRows()[0]);
|
||||
openModal(true, temp_edit);
|
||||
break;
|
||||
case 'btnDelete':
|
||||
|
|
@ -194,74 +204,3 @@
|
|||
reload();
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.page-div {
|
||||
position: relative;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
width: calc(100% - 20px);
|
||||
height: calc(100% - 20px);
|
||||
display: flex;
|
||||
.left-div {
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
.header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 10px;
|
||||
border-bottom: 1px solid #eee;
|
||||
.buttons-div {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.search-div {
|
||||
margin-top: 10px;
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
.content {
|
||||
border-radius: 5px;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
.showTree {
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
.right-div {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style lang="scss">
|
||||
.categories-page {
|
||||
.left-div {
|
||||
.h-full {
|
||||
height: auto;
|
||||
}
|
||||
.search-div {
|
||||
.ant-btn-primary {
|
||||
background-color: #2a7dc9;
|
||||
}
|
||||
.ant-input-search-button {
|
||||
width: 42px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.categories-modal {
|
||||
.ant-modal-footer > button {
|
||||
display: none;
|
||||
}
|
||||
.ant-modal-footer {
|
||||
margin-top: 0px;
|
||||
border-top: 0px;
|
||||
}
|
||||
}
|
||||
// ant-table-header
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -2,10 +2,10 @@
|
|||
<div class="screen-div">
|
||||
<div class="screen-row">
|
||||
<div class="screen-item">
|
||||
<div class="screen-item-label">年份</div>
|
||||
<div class="screen-item-label" style="margin-right:9px;">年份</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1"
|
||||
style="width: 103px"
|
||||
v-model:value="props.year"
|
||||
:options="yearOptions"
|
||||
@change=" (value) => {
|
||||
|
|
@ -13,11 +13,11 @@
|
|||
}"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item">
|
||||
<div class="screen-item-label" style="width: 85px;">图斑来源</div>
|
||||
<div class="screen-item" style="margin-left:20px;margin-right:17px;">
|
||||
<div class="screen-item-label" style="margin-right:11px;">图斑来源</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1"
|
||||
style="width: 142px"
|
||||
v-model:value="props.patchSource"
|
||||
:options="patchSourceOptions"
|
||||
@change="
|
||||
|
|
@ -28,10 +28,10 @@
|
|||
/>
|
||||
</div>
|
||||
<div class="screen-item">
|
||||
<div class="screen-item-label">批次</div>
|
||||
<div class="screen-item-label" style="margin-right:9px;">批次</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1"
|
||||
style="width: 117px"
|
||||
v-model:value="props.batch"
|
||||
:options="batchOptions"
|
||||
@change="
|
||||
|
|
@ -54,7 +54,8 @@
|
|||
v-if="dataList.length > 0"
|
||||
>
|
||||
<div class="name-div">
|
||||
<div class="item-mark"></div>
|
||||
<!-- <div class="item-mark"></div> -->
|
||||
<img src="/positioning.png" class="item-mark"/>
|
||||
<div class="item-label">{{ item.areaname }}</div>
|
||||
<div class="progress-div">
|
||||
<div class="progress-label progress-color">进度</div>
|
||||
|
|
@ -64,13 +65,13 @@
|
|||
</div>
|
||||
<div class="progress-div">
|
||||
<div class="progress-label extended-color">超期</div>
|
||||
<div class="progress-data" style="width:50px">
|
||||
<div class="progress-data" style="width:40px">
|
||||
<span style="color: #D03542">{{item.overduetask}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="progress-div">
|
||||
<div class="progress-label reviewed-color" style="width:70px;">待审核</div>
|
||||
<div class="progress-data" style="width:50px">
|
||||
<div class="progress-data" style="width:31px">
|
||||
<span style="color: #EC7908;">{{item.verifytask}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -80,18 +81,22 @@
|
|||
<div class="info-data-label">合法</div>
|
||||
<div class="info-data-data">{{item.legalcase}}</div>
|
||||
</div>
|
||||
<div style="width: 1px;margin-right:21px;margin-left:21px;background-color:#EDEDED;height: 15px;"></div>
|
||||
<div class="info-data-item">
|
||||
<div class="info-data-label">其他</div>
|
||||
<div class="info-data-data">{{item.ilegalcase}}</div>
|
||||
</div>
|
||||
<div style="width: 1px;margin-right:21px;margin-left:19px;background-color:#EDEDED;height: 15px;"></div>
|
||||
<div class="info-data-item">
|
||||
<div class="info-data-label">非粮化</div>
|
||||
<div class="info-data-data">{{item.nonfoodcase}}</div>
|
||||
</div>
|
||||
<div style="width: 1px;margin-right:17px;margin-left:21px;background-color:#EDEDED;height: 15px;"></div>
|
||||
<div class="info-data-item">
|
||||
<div class="info-data-label">复耕</div>
|
||||
<div class="info-data-data">{{item.rehabilitationcase}}</div>
|
||||
</div>
|
||||
<div style="width: 1px;margin-right:21px;margin-left:17px;background-color:#EDEDED;height: 15px;"></div>
|
||||
<div class="info-data-item">
|
||||
<div class="info-data-label">补手续</div>
|
||||
<div class="info-data-data">{{item.makeupcase}}</div>
|
||||
|
|
@ -125,32 +130,46 @@
|
|||
|
||||
<style lang="less" scoped>
|
||||
.screen-div {
|
||||
background: @component-background;
|
||||
padding: 10px;
|
||||
padding: 22px 12px 14px 13px;
|
||||
.screen-row {
|
||||
display: flex;
|
||||
height: 39px;
|
||||
.screen-item {
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 500;
|
||||
font-size: 17px;
|
||||
color: #000000;
|
||||
width: 33.3%;
|
||||
// width: 33.3%;
|
||||
display: flex;
|
||||
.screen-item-label {
|
||||
width: 56px;
|
||||
padding-left: 10px;
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 500;
|
||||
font-size: 17px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
:deep(.ant-select-selector){
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-family: HarmonyOS Sans;
|
||||
font-weight: 500;
|
||||
font-size: 19px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
height: 39px;
|
||||
box-shadow: 2px 3px 3px 1px rgba(13,13,13,0.05);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.data-list {
|
||||
height: calc(100% - 62px);
|
||||
height: calc(100% - 85px);
|
||||
// background: darkgoldenrod;
|
||||
// background: @component-background;
|
||||
margin-top: 10px;
|
||||
padding: 0px 10px;
|
||||
padding: 0px 11px 0px 13px;
|
||||
.data-title {
|
||||
height: 40px;
|
||||
background: #bab9b7;
|
||||
|
|
@ -167,38 +186,36 @@
|
|||
width: 100%;
|
||||
background: #fff;
|
||||
border-radius: 11px;
|
||||
padding: 10px;
|
||||
margin-bottom: 10px;
|
||||
padding: 0px 17px 0px 12px;
|
||||
margin-bottom: 8px;
|
||||
.name-div {
|
||||
display: flex;
|
||||
display: flex;
|
||||
height: 50px;
|
||||
display: flex;
|
||||
height: 50px;
|
||||
height: 57px;
|
||||
align-items: center;
|
||||
padding: 10px 0px;
|
||||
border-bottom: 1px solid #E5E5E5;
|
||||
}
|
||||
.info-data-div{
|
||||
height: 61px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
padding-left: 2px;
|
||||
// justify-content: space-between;
|
||||
// margin-top: 10px;
|
||||
.info-data-item{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
// flex: 1;
|
||||
justify-content: center;
|
||||
border-right: 1px solid #EDEDED;
|
||||
// border-right: 1px solid #EDEDED;
|
||||
.info-data-label{
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 400;
|
||||
font-size: 16px;
|
||||
color: #959494;
|
||||
display: flex;
|
||||
justify-content: end;
|
||||
flex: 1;
|
||||
padding-right: 5px;
|
||||
line-height: 30px;
|
||||
margin-right: 11px;
|
||||
}
|
||||
.info-data-data{
|
||||
font-family: HarmonyOS Sans;
|
||||
|
|
@ -206,10 +223,7 @@
|
|||
font-size: 16px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: start;
|
||||
padding-left: 5px;
|
||||
}
|
||||
}
|
||||
.info-data-item:nth-last-child(1){
|
||||
|
|
@ -221,23 +235,26 @@
|
|||
margin-right: 5px;
|
||||
}
|
||||
.item-mark {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
background: #086dec;
|
||||
margin-left: 7px;
|
||||
margin-right: 7px;
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
// background: #086dec;
|
||||
// margin-left: 7px;
|
||||
// margin-right: 7px;
|
||||
}
|
||||
.item-label {
|
||||
width: 100px;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
margin-left: 5px;
|
||||
width: 122px;
|
||||
padding-left: 9px;
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 500;
|
||||
font-size: 23px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
}
|
||||
.progress-div{
|
||||
display:flex;
|
||||
font-weight: 500;
|
||||
font-size: 16px;
|
||||
line-height: 30px;
|
||||
// font-weight: 500;
|
||||
// font-size: 16px;
|
||||
// line-height: 30px;
|
||||
margin-right: 17px;
|
||||
.progress-label{
|
||||
font-family: Alibaba PuHuiTi;
|
||||
|
|
@ -256,6 +273,11 @@
|
|||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 0px 0px 11px 0px;
|
||||
font-family: HarmonyOS Sans;
|
||||
font-weight: 500;
|
||||
font-size: 19px;
|
||||
// color: #086DEC;
|
||||
line-height: 30px;
|
||||
}
|
||||
.progress-color{
|
||||
background: #086DEC;
|
||||
|
|
|
|||
|
|
@ -1,48 +1,48 @@
|
|||
<template>
|
||||
<div class="map-list-content">
|
||||
<div class="screen-div">
|
||||
<div class="screen-item">
|
||||
<div class="screen-item" style="margin-right:20px;margin-bottom:15px;">
|
||||
<div class="screen-item-label">年份</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1"
|
||||
style="width:103px;"
|
||||
v-model:value="params.year"
|
||||
:options="props.yearOptions"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item">
|
||||
<div class="screen-item" style="margin-right:17px;margin-bottom:15px;">
|
||||
<div class="screen-item-label">图斑来源</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1"
|
||||
v-model:value="params.patchSource"
|
||||
style="width:142px;"
|
||||
v-model:value="params.tubanlaiyuan"
|
||||
:options="patchSourceOptions"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item">
|
||||
<div class="screen-item" style="margin-bottom:15px;">
|
||||
<div class="screen-item-label">批次</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1"
|
||||
v-model:value="params.batch"
|
||||
style="width:117px;"
|
||||
v-model:value="params.picihao"
|
||||
:options="props.batchOptions"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item" style="margin-bottom:0px;">
|
||||
<div class="screen-item" style="margin-right:13px;">
|
||||
<div class="screen-item-label">类型</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1"
|
||||
v-model:value="params.is_build_complete"
|
||||
style="width:136px;"
|
||||
v-model:value="params.is_build_name"
|
||||
:options="markTypeOptions"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item" style="width: 44.4%;margin-bottom:0px;">
|
||||
<div class="screen-item-label">图斑号</div>
|
||||
<a-input v-model:value="params.geomid" style="flex: 1" />
|
||||
<div class="screen-item" style="margin-right:51px;">
|
||||
<!-- <div class="screen-item-label">图斑号</div> -->
|
||||
<a-input v-model:value="params.geomid" class="item-input" placeholder="请输入图斑编号"/>
|
||||
</div>
|
||||
<div class="screen-item" style="width: 22.2%;display: flex; justify-content: end;margin-bottom: 0px;">
|
||||
<a-button type="primary" :icon="h(SearchOutlined)" @click="query">查询</a-button>
|
||||
<div class="screen-item" style="display: flex; justify-content: end;margin-bottom: 0px;">
|
||||
<a-button type="primary" class="item-button" :icon="h(SearchOutlined)" @click="query">查询</a-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sift-div">
|
||||
|
|
@ -139,7 +139,7 @@
|
|||
<div class="info-layout-div">
|
||||
<div>
|
||||
<Icon
|
||||
:style="`font-size: 30px; color: #314A8C; cursor: pointer;${item.isouttime === 0? 'color: #314A8C;': item.isouttime === 1? 'color: #F7710F;': 'color: #D03542;'}`"
|
||||
:style="`font-size: 30px; color: #314A8C; cursor: pointer;${item.isouttime === 2? 'color: #D03542;': item.isouttime === 1? 'color: #F7710F;': 'color: #314A8C;'}`"
|
||||
icon="icon-park-solid:timer"
|
||||
@click="()=>{}"
|
||||
/>
|
||||
|
|
@ -420,6 +420,9 @@
|
|||
}
|
||||
getTaskList();
|
||||
}
|
||||
const closeMolder = () => {
|
||||
getTaskList();
|
||||
}
|
||||
</script>
|
||||
<style lang="less">
|
||||
.full-modal {
|
||||
|
|
@ -450,26 +453,60 @@
|
|||
flex-direction: column;
|
||||
}
|
||||
.screen-div {
|
||||
padding: 10px 10px 19px 10px;
|
||||
padding: 22px 12px 19px 13px;
|
||||
display: flex;
|
||||
width: 590px;
|
||||
// margin-top: 10px;
|
||||
flex-wrap: wrap;
|
||||
// background: @component-background;
|
||||
.screen-item {
|
||||
width: 33.3%;
|
||||
// width: 33.3%;
|
||||
display: flex;
|
||||
margin-bottom: 15px;
|
||||
// margin-bottom: 15px;
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 500;
|
||||
font-size: 17px;
|
||||
color: #000000;
|
||||
height: 39px;
|
||||
.screen-item-label {
|
||||
width: 83px;
|
||||
padding-left: 10px;
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 500;
|
||||
font-size: 17px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
// font-size: 15px;
|
||||
margin-right: 9px;
|
||||
}
|
||||
:deep(.ant-select-selector){
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-family: HarmonyOS Sans;
|
||||
font-weight: 500;
|
||||
font-size: 19px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
height: 39px;
|
||||
box-shadow: 2px 3px 3px 1px rgba(13,13,13,0.05);
|
||||
}
|
||||
.item-input{
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 400;
|
||||
font-size: 19px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
width:223px;
|
||||
box-shadow: 2px 3px 3px 1px rgba(13,13,13,0.05);
|
||||
}
|
||||
.item-button{
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 400;
|
||||
font-size: 19px;
|
||||
color: #FFFFFF;
|
||||
line-height: 30px;
|
||||
height:39px;
|
||||
width: 97px;
|
||||
background:#086DEC;
|
||||
}
|
||||
}
|
||||
.screen-button-div {
|
||||
|
|
@ -608,7 +645,8 @@
|
|||
.data-list-info-div{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-top: 10px;
|
||||
margin-top: 10px;
|
||||
height: 40px;
|
||||
.info-layout-div{
|
||||
display:flex;
|
||||
align-items: center;
|
||||
|
|
@ -627,7 +665,7 @@
|
|||
width: 80px;
|
||||
border-radius: 7px;
|
||||
margin-right: 8px;
|
||||
height: 30px;
|
||||
height: 33px;
|
||||
justify-content: center;
|
||||
.info-label{
|
||||
font-family: Alibaba PuHuiTi;
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@
|
|||
level.value = item.level
|
||||
};
|
||||
function changeShowParent() {
|
||||
console.log('dedededede');
|
||||
getCountList()
|
||||
showParent.value = true;
|
||||
}
|
||||
async function getCountList() {
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@
|
|||
:label-col="labelCol"
|
||||
:wrapper-col="wrapperCol"
|
||||
>
|
||||
<a-form-item ref="name" label="案件编号">
|
||||
<a-form-item label="案件编号" name="case_no">
|
||||
<a-input v-model:value="formState.case_no" disabled />
|
||||
</a-form-item>
|
||||
<a-form-item ref="name" label="案件描述">
|
||||
<a-form-item label="案件描述" name="case_description">
|
||||
<a-input v-model:value="formState.case_description" disabled />
|
||||
</a-form-item>
|
||||
<a-form-item label="县区" name="countyid">
|
||||
|
|
@ -40,7 +40,9 @@
|
|||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
|
||||
<a-modal v-if="false" v-bind="$attrs" @register="registerModal" title="飞地调整" @ok="handleSubmit" >
|
||||
|
||||
<a-form
|
||||
ref="formRef"
|
||||
:model="formState"
|
||||
|
|
@ -48,10 +50,10 @@
|
|||
:label-col="labelCol"
|
||||
:wrapper-col="wrapperCol"
|
||||
>
|
||||
<a-form-item ref="name" label="案件编号">
|
||||
<a-form-item label="案件编号" name="case_no">
|
||||
<a-input v-model:value="formState.case_no" disabled />
|
||||
</a-form-item>
|
||||
<a-form-item ref="name" label="案件描述">
|
||||
<a-form-item label="案件描述" name="case_description">
|
||||
<a-input v-model:value="formState.case_description" disabled />
|
||||
</a-form-item>
|
||||
<a-form-item label="县区" name="countyid">
|
||||
|
|
@ -80,10 +82,10 @@
|
|||
/>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
</a-modal> -->
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref, reactive, onMounted,defineProps } from 'vue';
|
||||
import { ref, reactive, onMounted, defineProps, watch } from 'vue';
|
||||
import { BasicModal, useModalInner } from '@/components/Modal';
|
||||
import { useMessage } from '@/hooks/web/useMessage';
|
||||
import { updateDroneCaseInfo, getCaseInfoById } from '@/api/tiankongdi/index.ts';
|
||||
|
|
@ -91,18 +93,21 @@
|
|||
const { createMessage } = useMessage();
|
||||
defineOptions({ name: 'AccountModal' });
|
||||
const formRef = ref();
|
||||
const emit = defineEmits(['success', 'register',"closeModel"]);
|
||||
const emit = defineEmits(['success', 'register', 'closeModel']);
|
||||
const props = defineProps({
|
||||
modalShow:{
|
||||
type:Boolean,
|
||||
default:false,
|
||||
readonly:false,
|
||||
}
|
||||
modalShow: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
readonly: false,
|
||||
},
|
||||
modalRecord: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
});
|
||||
const labelCol = { span: 4 };
|
||||
const wrapperCol = { span: 14 };
|
||||
const formState: any = ref({});
|
||||
const case_no = ref();
|
||||
const rules = ref({
|
||||
countyid: [{ required: true, message: '县区不能为空', trigger: 'blur' }],
|
||||
streetid: [{ required: true, message: '乡镇不能为空', trigger: 'blur' }],
|
||||
|
|
@ -114,17 +119,20 @@
|
|||
communityOptions: [],
|
||||
});
|
||||
|
||||
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
|
||||
setModalProps({ confirmLoading: false });
|
||||
case_no.value = data.record.id;
|
||||
getDetail();
|
||||
getParent();
|
||||
});
|
||||
async function getDetail() {
|
||||
watch(
|
||||
() => props.modalShow,
|
||||
() => {
|
||||
if (props.modalShow) {
|
||||
getDetail(props.modalRecord.id);
|
||||
}
|
||||
},
|
||||
);
|
||||
async function getDetail(id) {
|
||||
const data = await getCaseInfoById({
|
||||
id: case_no.value,
|
||||
id: id,
|
||||
});
|
||||
formState.value = data;
|
||||
getParent();
|
||||
}
|
||||
async function handleCountyChange(value, option) {
|
||||
formState.value.countyid = value;
|
||||
|
|
@ -173,9 +181,8 @@
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
function handlerCloseModal(){
|
||||
emit("closeModel");
|
||||
function handlerCloseModal() {
|
||||
emit('closeModel');
|
||||
}
|
||||
async function handleSubmit() {
|
||||
try {
|
||||
|
|
@ -196,7 +203,7 @@
|
|||
console.log(data);
|
||||
if (data) {
|
||||
// closeModal();
|
||||
emit("closeModel");
|
||||
emit('closeModel');
|
||||
return createMessage.success(data);
|
||||
} else {
|
||||
return createMessage.error(data);
|
||||
|
|
@ -206,7 +213,7 @@
|
|||
console.log('error', error);
|
||||
});
|
||||
} finally {
|
||||
setModalProps({ confirmLoading: false });
|
||||
|
||||
}
|
||||
}
|
||||
onMounted(() => {
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@
|
|||
<a-descriptions-item label="项目主体">{{ xiangmuzhuti }}</a-descriptions-item>
|
||||
<a-descriptions-item label="实际用途">{{ actual_use_to }}</a-descriptions-item>
|
||||
<a-descriptions-item label="违法类型">{{ getLabel('weifaleixing',weifaleixing) }}</a-descriptions-item>
|
||||
<a-descriptions-item label="处理方式">{{ result_name }}</a-descriptions-item>
|
||||
<a-descriptions-item label="处理方式">{{ getLabel('result_name',result_name) }}</a-descriptions-item>
|
||||
<a-descriptions-item label="立案号">{{ registr_number }}</a-descriptions-item>
|
||||
<a-descriptions-item label="违法联系人">{{ illegal_contact }}</a-descriptions-item>
|
||||
<a-descriptions-item label="违法人身份证号">{{ illegal_shenfenzhenghao }}</a-descriptions-item>
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
'min-width': '250px',
|
||||
'word-break': 'break-all'
|
||||
}">
|
||||
<a-descriptions-item label="整改措施">{{ measure_name }}</a-descriptions-item>
|
||||
<a-descriptions-item label="整改措施">{{ getLabel('measure_name',measure_name) }}</a-descriptions-item>
|
||||
<a-descriptions-item label="验收表">
|
||||
<template v-for="(item, itemIndex) in yanshoubiaoList" :key="itemIndex" >
|
||||
<div v-if="item">
|
||||
|
|
@ -182,6 +182,7 @@ import {
|
|||
mapStatusOptions,
|
||||
markTypeOptions,
|
||||
illegalTypeList,
|
||||
resultOptions,
|
||||
} from '@/views/demo/tiankongdi/curbspotcity/util.ts'
|
||||
|
||||
const MapboxComponent = ref();
|
||||
|
|
@ -326,6 +327,12 @@ const getLabel = (type,value) => {
|
|||
case 'weifaleixing':
|
||||
result = illegalTypeList
|
||||
break;
|
||||
case 'measure_name':
|
||||
result = measureOptions
|
||||
break;
|
||||
case 'result_name':
|
||||
result = resultOptions
|
||||
break;
|
||||
}
|
||||
result.forEach(item => {
|
||||
if(item.value == value){
|
||||
|
|
|
|||
|
|
@ -11,80 +11,81 @@
|
|||
</a-radio-group>
|
||||
</div>
|
||||
<div class="screen-div">
|
||||
<div class="screen-item">
|
||||
<div class="screen-item" style="margin-right:20px;margin-bottom:12px;">
|
||||
<div class="screen-item-label">年份</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1;"
|
||||
style="width:103px;"
|
||||
v-model:value="props.infoScreenData.year"
|
||||
:options="yearOptions"
|
||||
@change="(value) => emits('mapListScreenChange',value,'year')"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item">
|
||||
<div class="screen-item-label" style="width:84px;">图斑来源</div>
|
||||
<div class="screen-item" style="margin-right:17px;margin-bottom:12px;">
|
||||
<div class="screen-item-label" style="margin-right: 11px;">图斑来源</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1;"
|
||||
style="width:142px;"
|
||||
v-model:value="props.infoScreenData.patchSource"
|
||||
:options="patchSourceOptions"
|
||||
@change="(value) => emits('mapListScreenChange',value,'patchSource')"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item">
|
||||
<div class="screen-item" style="margin-bottom:12px;">
|
||||
<div class="screen-item-label">批次</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1;"
|
||||
style="width:117px;"
|
||||
v-model:value="props.infoScreenData.batch"
|
||||
:options="batchOptions"
|
||||
@change="(value) => emits('mapListScreenChange',value,'batch')"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item">
|
||||
<div class="screen-item" style="margin-right:15px;margin-bottom:22px;">
|
||||
<div class="screen-item-label">标注</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1;"
|
||||
style="width:136px;"
|
||||
v-model:value="props.infoScreenData.markType"
|
||||
:options="markTypeOptions"
|
||||
@change="(value) => emits('mapListScreenChange',value,'markType')"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item" style="width:66.6%">
|
||||
<div class="screen-item-label" style="width:84px;">下发时间</div>
|
||||
<div class="screen-item" style="margin-bottom:22px;">
|
||||
<div class="screen-item-label" style="margin-right: 10px;">下发时间</div>
|
||||
<a-range-picker
|
||||
:format="'YYYY-MM-DD'"
|
||||
allowClear
|
||||
style="flex: 1;"
|
||||
style="width: 293px;"
|
||||
class="item-time-select"
|
||||
@change="(value) => emits('mapListScreenChange',value,'time')"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item">
|
||||
<div class="screen-item" style="margin-right: 13px;">
|
||||
<div class="screen-item-label">乡镇</div>
|
||||
<a-select
|
||||
allowClear
|
||||
style="flex: 1;"
|
||||
style="width:136px;"
|
||||
v-model:value="props.infoScreenData.streetId"
|
||||
:options="streetsAreaOptions"
|
||||
@change="(value) => emits('mapListScreenChange',value,'streetId')"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item" style="width:40%">
|
||||
<div class="screen-item" style="margin-right: 14px;">
|
||||
<a-input
|
||||
placeholder="请输入图斑编号"
|
||||
style="flex:1;margin-left: 10px;"
|
||||
class="item-input"
|
||||
v-model:value="props.infoScreenData.mapNo"
|
||||
@change="(value) => emits('mapListScreenChange',value.target.value,'mapNo')"
|
||||
/>
|
||||
</div>
|
||||
<div class="screen-item" style="width: 23.3%">
|
||||
<div class="screen-item">
|
||||
<a-button
|
||||
style="margin-left:10px;"
|
||||
class="item-button"
|
||||
type="primary"
|
||||
:icon="h(SearchOutlined)"
|
||||
@click="emits('getInfoList')">查询</a-button>
|
||||
<Icon style="font-size: 20px;margin-left: 10px;" icon="streamline:interface-time-reset-time-clock-reset-stopwatch-circle-measure-loading" @click="emits('resetScreenData')" />
|
||||
<Icon style="font-size: 25px;margin-left: 10px;" icon="streamline:interface-time-reset-time-clock-reset-stopwatch-circle-measure-loading" @click="emits('resetScreenData')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="sift-div">
|
||||
|
|
@ -490,6 +491,9 @@ const nextData = async () => {
|
|||
type.value = record.type;
|
||||
handoffShow.value = true
|
||||
}
|
||||
const closeMolder = () => {
|
||||
emits('getInfoList')
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
@ -534,25 +538,73 @@ const nextData = async () => {
|
|||
padding: 10px;
|
||||
}
|
||||
.screen-div{
|
||||
padding: 10px;
|
||||
padding: 10px 12px 20px 13px;
|
||||
display: flex;
|
||||
width:590px;
|
||||
flex-wrap: wrap;
|
||||
.screen-item{
|
||||
width: 33.3%;
|
||||
// width: 33.3%;
|
||||
display: flex;
|
||||
margin-bottom: 12px;
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 500;
|
||||
font-size: 17px;
|
||||
color: #000000;
|
||||
height: 39px;
|
||||
// margin-bottom: 12px;
|
||||
// font-family: Alibaba PuHuiTi;
|
||||
// font-weight: 500;
|
||||
// font-size: 17px;
|
||||
// color: #000000;
|
||||
.screen-item-label{
|
||||
width: 53px;
|
||||
padding-left: 10px;
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 500;
|
||||
font-size: 17px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
// width: 53px;
|
||||
// padding-left: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-right: 9px;
|
||||
// font-size: 15px;
|
||||
}
|
||||
:deep(.ant-select-selector){
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-family: HarmonyOS Sans;
|
||||
font-weight: 500;
|
||||
font-size: 19px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
height: 39px;
|
||||
box-shadow: 2px 3px 3px 1px rgba(13,13,13,0.05);
|
||||
}
|
||||
.item-input{
|
||||
width:223px;
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 500;
|
||||
font-size: 17px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
box-shadow: 2px 3px 3px 1px rgba(13,13,13,0.05);
|
||||
}
|
||||
.item-time-select{
|
||||
box-shadow: 2px 3px 3px 1px rgba(13,13,13,0.05);
|
||||
:deep(input){
|
||||
font-family: HarmonyOS Sans;
|
||||
font-weight: 500;
|
||||
font-size: 15px;
|
||||
color: #000000;
|
||||
line-height: 30px;
|
||||
}
|
||||
}
|
||||
.item-button{
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 400;
|
||||
font-size: 19px;
|
||||
color: #FFFFFF;
|
||||
line-height: 30px;
|
||||
height:39px;
|
||||
width: 97px;
|
||||
background: #086DEC;
|
||||
// margin-left:12px;
|
||||
}
|
||||
}
|
||||
.screen-button-div{
|
||||
display: flex;
|
||||
|
|
@ -565,16 +617,25 @@ const nextData = async () => {
|
|||
}
|
||||
.top-radio-button-div{
|
||||
width:100%;
|
||||
padding:33px 10px 8px 10px;
|
||||
padding: 33px 12px 8px 13px;
|
||||
:deep(.ant-radio-button-wrapper-checked){
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 500 !important;
|
||||
font-size: 20px;
|
||||
color: #FFFFFF !important;
|
||||
line-height: 40px;
|
||||
background: #086DEC;
|
||||
}
|
||||
.radio-item{
|
||||
width:50%;
|
||||
text-align: center;
|
||||
height: 40px;
|
||||
user-select: none;
|
||||
font-family: Alibaba PuHuiTi;
|
||||
font-weight: 400;
|
||||
font-size: 20px;
|
||||
height: 40px;
|
||||
color: #000000;
|
||||
line-height: 40px;
|
||||
user-select: none;
|
||||
}
|
||||
}
|
||||
.sift-div{
|
||||
|
|
@ -690,7 +751,8 @@ const nextData = async () => {
|
|||
.data-list-info-div{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
padding-top: 10px;
|
||||
margin-top: 10px;
|
||||
height: 40px;
|
||||
.info-layout-div{
|
||||
display:flex;
|
||||
align-items: center;
|
||||
|
|
@ -709,7 +771,7 @@ const nextData = async () => {
|
|||
width: 80px;
|
||||
border-radius: 7px;
|
||||
margin-right: 8px;
|
||||
height: 30px;
|
||||
height: 33px;
|
||||
justify-content: center;
|
||||
.info-label{
|
||||
font-family: Alibaba PuHuiTi;
|
||||
|
|
|
|||
|
|
@ -56,4 +56,10 @@ export const isOverdueOptions = [
|
|||
export const illegalTypeList = [
|
||||
{ label: '非农化违法用地', value: 0 },
|
||||
{ label: '非粮化违法用地', value: 1 },
|
||||
]
|
||||
export const resultOptions = [
|
||||
{ label: '立案', value: 0 },
|
||||
{ label: '非立案', value: 1 },
|
||||
{ label: '移交其他部门处理', value: 2 },
|
||||
{ label: '未处理', value: 3 },
|
||||
]
|
||||
|
|
@ -20,7 +20,12 @@
|
|||
<a-layout>
|
||||
<a-layout>
|
||||
<a-layout-content>
|
||||
<a-tabs v-model:activeKey="activeName" tabPosition="bottom" @change="changeActive" type="card">
|
||||
<a-tabs
|
||||
v-model:activeKey="activeName"
|
||||
tabPosition="bottom"
|
||||
@change="changeActive"
|
||||
type="card"
|
||||
>
|
||||
<a-tab-pane
|
||||
key="form"
|
||||
:tab="
|
||||
|
|
@ -31,7 +36,12 @@
|
|||
v-if="formVisble"
|
||||
>
|
||||
<div>
|
||||
<ImagePreview style="width:100%;height:" v-if="isShowImagePreview" :globalImagePreviewUrl="globalImagePreviewUrl" @closeImagePreview="closeImagePreview"></ImagePreview>
|
||||
<ImagePreview
|
||||
style="width: 100%; height:"
|
||||
v-if="isShowImagePreview"
|
||||
:globalImagePreviewUrl="globalImagePreviewUrl"
|
||||
@closeImagePreview="closeImagePreview"
|
||||
></ImagePreview>
|
||||
|
||||
<FormViewer
|
||||
ref="formBoxRef"
|
||||
|
|
@ -57,7 +67,7 @@
|
|||
<AsyncComponent ref="pcForm" />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="flow" tab="流程模板" force-render>
|
||||
<div class="process-design" style="display: flex; height: calc( 100vh - 350px)">
|
||||
<div class="process-design" style="display: flex; height: calc(100vh - 350px)">
|
||||
<process-viewer
|
||||
v-if="processVisble"
|
||||
:key="`designer-${id}`"
|
||||
|
|
@ -68,8 +78,7 @@
|
|||
/>
|
||||
</div>
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="record"
|
||||
tab="操作记录" force-render>
|
||||
<a-tab-pane key="record" tab="操作记录" force-render>
|
||||
<div :style="'padding:10px 0 40px 0;overflow:auto; height:' + designerData.height">
|
||||
<a-timeline>
|
||||
<a-timeline-item
|
||||
|
|
@ -201,7 +210,7 @@
|
|||
import { functionsaveForm, LoadFormScheme } from '@/api/demo/formScheme';
|
||||
import { FormViewer } from '@/components/FormViewer';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import ImagePreview from "@/components/Upload/src/components/image_preview.vue";
|
||||
import ImagePreview from '@/components/Upload/src/components/image_preview.vue';
|
||||
import { userFormFileStore } from '@/store/modules/formFileUrl';
|
||||
|
||||
import {
|
||||
|
|
@ -355,7 +364,9 @@
|
|||
let wfData = content.wfData;
|
||||
const map = new Map();
|
||||
const newArr = data.logs.filter((v) => !map.has(v.unitId) && map.set(v.unitId, v));
|
||||
rejectRelations.value = newArr.filter((item) => item.taskType == 1);
|
||||
// taskType == 1审核任务 7单任务
|
||||
rejectRelations.value = newArr.filter((item) => item.taskType == 1 || item.taskType == 7);
|
||||
|
||||
const auditNode = wfData.find((t) => t.id == data.task.unitId);
|
||||
if (auditNode.auditTitle) {
|
||||
auditTitleVal.value = auditNode.auditTitle;
|
||||
|
|
@ -368,12 +379,11 @@
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
let currentNode;
|
||||
|
||||
let currentMapNode = wfData.find((t) => t.type == 'bpmn:StartEvent');
|
||||
mapConfig.value = currentMapNode.mapConfig;
|
||||
console.log("MapCOnfig",mapConfig.value);
|
||||
console.log('MapCOnfig', mapConfig.value);
|
||||
if (auditNode.isInherit) {
|
||||
currentNode = wfData.find((t) => t.type == 'bpmn:StartEvent');
|
||||
mapConfig.value = currentNode.mapConfig;
|
||||
|
|
@ -709,12 +719,12 @@
|
|||
}
|
||||
break;
|
||||
}
|
||||
if (res) {
|
||||
closePage();
|
||||
return createMessage.success('成功');
|
||||
} else {
|
||||
return createMessage.error('失败');
|
||||
}
|
||||
// if (res) {
|
||||
// closePage();
|
||||
// return createMessage.success('成功');
|
||||
// } else {
|
||||
// return createMessage.error('失败');
|
||||
// }
|
||||
}
|
||||
async function auditFun() {
|
||||
// 获取接下来节点审核人
|
||||
|
|
@ -802,7 +812,7 @@
|
|||
}
|
||||
|
||||
function getFormSuccess(formData) {
|
||||
if(mapConfig.value.isShowMap){
|
||||
if (mapConfig.value.isShowMap) {
|
||||
handlerShowGeomtrys(designerData.formCurrentNode, formData);
|
||||
}
|
||||
}
|
||||
|
|
@ -888,10 +898,10 @@
|
|||
|
||||
// 图片预览
|
||||
const isShowImagePreview = ref<Boolean>(false);
|
||||
const closeImagePreview = ()=>{
|
||||
const closeImagePreview = () => {
|
||||
isShowImagePreview.value = false;
|
||||
}
|
||||
const globalImagePreviewUrl=ref<String>();
|
||||
};
|
||||
const globalImagePreviewUrl = ref<String>();
|
||||
const formFileStore = userFormFileStore();
|
||||
const formFileState = storeToRefs(formFileStore);
|
||||
watch(formFileState.url, (newValue, oldValue) => {
|
||||
|
|
@ -1006,6 +1016,4 @@
|
|||
.l-from-body {
|
||||
padding: 10px 30px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -273,7 +273,7 @@
|
|||
});
|
||||
mapConfig.value = currentNode.mapConfig;
|
||||
} else {
|
||||
if (auditNode.isInherit) {
|
||||
if (auditNode && auditNode.isInherit) {
|
||||
currentNode = wfData.find((t) => t.type == 'bpmn:StartEvent');
|
||||
mapConfig.value = currentNode.mapConfig;
|
||||
footerStyle.value.width = mapConfig.value?.isShowMap ? '60%' : '100%';
|
||||
|
|
@ -284,7 +284,7 @@
|
|||
footerStyle.value.width = mapConfig.value?.isShowMap ? '60%' : '100%';
|
||||
}
|
||||
}
|
||||
if (currentNode.authFields.length > 0) {
|
||||
if (currentNode && currentNode.authFields.length > 0) {
|
||||
formVisble.value = true;
|
||||
} else {
|
||||
activeName.value = 'flow';
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@
|
|||
const VITE_GLOB_API_URL_VAR = ref<String>(VITE_GLOB_API_URL + '/');
|
||||
const { t } = useI18n();
|
||||
|
||||
let loginUser = localStorage.getItem('fireUserLoginName');
|
||||
const loginUser: any = ref('');
|
||||
const contentArea = ref<HTMLElement | null>(null);
|
||||
const list: any = ref([]);
|
||||
const userStore = useUserStore();
|
||||
|
|
@ -102,6 +102,7 @@
|
|||
}
|
||||
});
|
||||
list.value = res;
|
||||
loginUser.value = localStorage.getItem('fireUserLoginName');
|
||||
// cardRotationLoop();
|
||||
}
|
||||
// 旋转动画
|
||||
|
|
@ -125,10 +126,6 @@
|
|||
});
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getData();
|
||||
});
|
||||
|
||||
// 按键控制滚动条
|
||||
const scrollToElement = async (type) => {
|
||||
if (contentArea.value) {
|
||||
|
|
@ -142,14 +139,14 @@
|
|||
};
|
||||
// 跳转
|
||||
async function getHome(item) {
|
||||
if (!item.linkOrApi) {
|
||||
if (!item.isDevelop) {
|
||||
message.warn('暂未开放!');
|
||||
return;
|
||||
}
|
||||
if (item.isExternal) {
|
||||
window.location.href = item.linkOrApi;
|
||||
} else {
|
||||
userStore.setSubject(item.id, item.linkOrApi);
|
||||
userStore.setSubject(item.id, item.logoTitle, item.linkOrApi);
|
||||
}
|
||||
}
|
||||
// 获取图片地址
|
||||
|
|
@ -172,6 +169,10 @@
|
|||
function handleLoginOut() {
|
||||
userStore.confirmLoginOut();
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getData();
|
||||
});
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
.subject {
|
||||
|
|
|
|||
Loading…
Reference in New Issue