Compare commits

...

2 Commits

10 changed files with 247 additions and 145 deletions

View File

@ -9,6 +9,6 @@ enum Api {
* @description: Get user menu based on id
*/
export const getMenuList = () => {
return defHttp.get<getMenuListResultModel>({ url: Api.GetMenuList });
export const getMenuList = (params) => {
return defHttp.get<getMenuListResultModel>({ url: Api.GetMenuList, params });
};

View File

@ -246,24 +246,45 @@
:pagination="false"
v-if="node.formType == 1"
>
<template #headerCell="{ column }">
<template v-if="column.dataIndex === 'required'">
<a-checkbox v-model:checked="requiredCheck" @change="handleChangeCheck('required',$event)">{{column.title}}</a-checkbox>
<template #headerCell="{ column }">
<template v-if="column.dataIndex === 'upShow'">
<a-checkbox
v-model:checked="upShowCheck"
@change="handleChangeCheck('upShow', $event)"
>{{ column.title }}</a-checkbox
>
</template>
<template v-if="column.dataIndex === 'required'">
<a-checkbox
v-model:checked="requiredCheck"
@change="handleChangeCheck('required', $event)"
>{{ column.title }}</a-checkbox
>
</template>
<template v-if="column.dataIndex === 'disabled'">
<a-checkbox
v-model:checked="disabledCheck"
@change="handleChangeCheck('disabled', $event)"
>{{ column.title }}</a-checkbox
>
</template>
<template v-if="column.dataIndex === 'ifShow'">
<a-checkbox
v-model:checked="ifShowCheck"
@change="handleChangeCheck('ifShow', $event)"
>{{ column.title }}</a-checkbox
>
</template>
</template>
<template v-if="column.dataIndex === 'disabled'">
<a-checkbox v-model:checked="disabledCheck" @change="handleChangeCheck('disabled',$event)">{{column.title}}</a-checkbox>
</template>
<template v-if="column.dataIndex === 'ifShow'">
<a-checkbox v-model:checked="ifShowCheck" @change="handleChangeCheck('ifShow',$event)">{{column.title}}</a-checkbox>
</template>
</template>
<template #bodyCell="{ column, text, record }">
<template v-if="['label', 'fieldName'].includes(column.dataIndex)">
<!-- <div> -->
{{ text }}
{{ text }}
<!-- </div> -->
</template>
<template v-else-if="['required', 'disabled', 'ifShow'].includes(column.dataIndex)">
<template
v-else-if="['upShow', 'required', 'disabled', 'ifShow'].includes(column.dataIndex)"
>
<div>
<a-switch v-model:checked="record[column.dataIndex]" size="small" />
</div>
@ -283,7 +304,9 @@
<a-input v-model:value="record[column.dataIndex]" placeholder="请输入" />
</div>
</template>
<template v-else-if="['required', 'disabled', 'ifShow'].includes(column.dataIndex)">
<template
v-else-if="['upShow', 'required', 'disabled', 'ifShow'].includes(column.dataIndex)"
>
<div>
<a-switch v-model:checked="record[column.dataIndex]" size="small" />
</div>
@ -552,7 +575,7 @@
import { cardNestStructure } from '@/views/demo/onlineform/util.ts';
import { fun_GetPageList } from '@/api/demo/formModule';
import { SelectIssueForm } from '@/components/SelectIssueForm/index';
import { getRFields } from '@/views/demo/workflow/scheme/util.ts'
import { getRFields } from '@/views/demo/workflow/scheme/util.ts';
const flowWfDataStore = flowStore();
const labelCol = { span: 7 };
@ -560,9 +583,10 @@
const activeKey = ref('1');
const nodeId = ref('');
let node: any = ref({});
const requiredCheck = ref(false)
const disabledCheck = ref(false)
const ifShowCheck = ref(false)
const upShowCheck = ref(false);
const requiredCheck = ref(false);
const disabledCheck = ref(false);
const ifShowCheck = ref(false);
const props = defineProps({
element: {
type: Object,
@ -635,6 +659,11 @@
dataIndex: 'fieldName',
ellipsis: true,
},
{
title: '上提',
dataIndex: 'upShow',
width: 85,
},
{
title: '必填',
dataIndex: 'required',
@ -949,9 +978,9 @@
}[] = [];
scheme.formInfo.tabList = cardNestStructure(scheme.formInfo.tabList);
scheme.formInfo.tabList.forEach((tabElement) => {
const {rFieldList, fieldList} = getRFields(tabElement.schemas,rfields,fields)
rfields = rFieldList
fields = fieldList
const { rFieldList, fieldList } = getRFields(tabElement.schemas, rfields, fields);
rfields = rFieldList;
fields = fieldList;
});
data.formRelations = rfields;
if (isChange) {
@ -972,8 +1001,8 @@
//
async function getIssueFormList() {
const list = await fun_GetPageList({
page:1,
limit:1000,
page: 1,
limit: 1000,
});
list.items.forEach((element) => {
if (element.id == node.value.issueId) {
@ -985,6 +1014,7 @@
node.value.authFields.push({
field: '',
label: '',
upShow: false,
required: true,
disabled: true,
ifShow: true,
@ -994,21 +1024,24 @@
node.value.authFields = node.value.authFields.filter((item) => item.field !== key);
}
const handleChangeCheck = (type: string, data) => {
let checked = data.target.checked
node.value.authFields.forEach(item => {
let checked = data.target.checked;
node.value.authFields.forEach((item) => {
switch (type) {
case 'required':
item.required = checked
break
item.required = checked;
break;
case 'disabled':
item.disabled = checked
break
item.disabled = checked;
break;
case 'ifShow':
item.ifShow = checked
break
item.ifShow = checked;
break;
case 'upShow':
item.upShow = checked;
break;
}
})
}
});
};
defineExpose({});
</script>
@ -1029,7 +1062,7 @@
padding: 0 !important;
}
:deep(.ant-checkbox+span){
:deep(.ant-checkbox + span) {
padding-inline-end: 0px;
}

View File

@ -29,6 +29,9 @@ export const APP_SESSION_CACHE_KEY = 'COMMON__SESSION__KEY__';
// table 列设置
export const TABLE_SETTING_KEY = 'TABLE__SETTING__KEY__';
// 专题设置
export const SUBJECT_KEY = 'SUBJECT__';
export enum CacheTypeEnum {
SESSION,
LOCAL,

View File

@ -7,5 +7,7 @@ export enum PageEnum {
ERROR_PAGE = '/exception',
// error log page path
ERROR_LOG_PAGE = '/error-log/list',
// 专题
SUBJECT_HOME = '/subject',
}
export const PageWrapperFixedHeightKey = 'PageWrapperFixedHeight';

View File

@ -0,0 +1,16 @@
import type { AppRouteModule } from '@/router/types';
import { t } from '@/hooks/web/useI18n';
const subject: AppRouteModule = {
path: '/subject',
name: 'Subject',
component: () => import('@/views/subject/index.vue'),
meta: {
orderNo: 10,
title: t('routes.dashboard.dashboard'),
},
};
export default subject;

View File

@ -314,13 +314,13 @@ export const usePermissionStore = defineStore({
//通过后端获取菜单
const _this = this;
async function buildMenusByServer(list) {
const data = await getMenuList();
console.log(userStore.getSubject);
const data = await getMenuList({ subject: userStore.getSubject });
const moduleRoutes = list;
await data.forEach((value) => {
moduleRoutes.push(normalizeMenu(value));
registeredRoute(value);
});
await Promise.all(moduleRoutes);
// 设置菜单列表
_this.setFrontMenuList(moduleRoutes);

View File

@ -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 } from '@/enums/cacheEnum';
import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY, SUBJECT_KEY } 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';
@ -24,6 +24,7 @@ interface UserState {
roleList: RoleEnum[];
sessionTimeout?: boolean;
lastUpdateTime: number;
subject?: string;
}
export const useUserStore = defineStore({
@ -39,6 +40,7 @@ export const useUserStore = defineStore({
sessionTimeout: false,
// Last fetch time
lastUpdateTime: 0,
subject: '',
}),
getters: {
getUserInfo(state): UserInfo {
@ -56,8 +58,20 @@ export const useUserStore = defineStore({
getLastUpdateTime(state): number {
return state.lastUpdateTime;
},
getSubject(state): string {
return state.subject || getAuthCache<string>(SUBJECT_KEY);
},
},
actions: {
async setSubject(subject: string | undefined) {
this.subject = subject;
setAuthCache(SUBJECT_KEY, subject);
if (subject) {
const permissionStore = usePermissionStore();
await permissionStore.buildRoutesAction();
await router.replace(PageEnum.BASE_HOME);
}
},
setToken(info: string | undefined) {
this.token = info ? info : ''; // for null or undefined value
//临时设置token给大屏使用
@ -93,7 +107,7 @@ export const useUserStore = defineStore({
): Promise<GetUserInfoModel | null> {
try {
const { goHome = true, mode, ...loginParams } = params;
loginParams.password = md5(loginParams.password)
loginParams.password = md5(loginParams.password);
const data = await loginApi(loginParams, mode);
const { token } = data;
@ -122,7 +136,8 @@ export const useUserStore = defineStore({
router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
permissionStore.setDynamicAddedRoute(true);
}
goHome && (await router.replace(userInfo?.homePath || PageEnum.BASE_HOME));
// goHome && (await router.replace(userInfo?.homePath || PageEnum.BASE_HOME));
goHome && (await router.replace(userInfo?.homePath || PageEnum.SUBJECT_HOME));
}
return userInfo;
},
@ -152,6 +167,7 @@ export const useUserStore = defineStore({
}
}
this.setToken(undefined);
this.setSubject(undefined);
this.setSessionTimeout(false);
this.setUserInfo(null);
goLogin && router.push(PageEnum.BASE_LOGIN);

View File

@ -5,6 +5,7 @@ import type { RouteLocationNormalized } from 'vue-router';
import { createLocalStorage, createSessionStorage } from '@/utils/cache';
import { Memory } from './memory';
import {
SUBJECT_KEY,
TOKEN_KEY,
USER_INFO_KEY,
ROLES_KEY,
@ -20,6 +21,7 @@ import { toRaw } from 'vue';
import { pick, omit } from 'lodash-es';
interface BasicStore {
[SUBJECT_KEY]: string | number | null | undefined;
[TOKEN_KEY]: string | number | null | undefined;
[USER_INFO_KEY]: UserInfo;
[ROLES_KEY]: string[];

View File

@ -1,116 +1,127 @@
export const getRFields = (dataList, rFieldList,fieldList) => {
dataList.forEach((element: { label?: string; field?: string; component: any; itemProps: any }) => {
if (['InputGuid'].includes(element.component)) {
rFieldList.push({
label: element.label,
// value:element.prop
value: element.field,
});
}else if (
![
'Divider',
'Grid',
'Card',
'CreateUser',
'CreateTime',
'ModifyUser',
'ModifyTime',
'CardGroup',
].includes(element.component) &&
!element.itemProps.hidden
) {
let obj: any = element;
obj.required = element.itemProps.required;
// obj.componentProps.disabled = false;
obj.disabled = true;
obj.ifShow = true;
obj.fieldName = element.componentProps.fieldName;
fieldList.push(obj);
} else if (['Grid'].includes(element.component) || element.type == 'subTable') {
console.log('gridtable');
fieldList.push({
field: `${element.field}_add`,
label: `${element.label || '表格'}-添加按钮`,
required: false,
disabled: true,
ifShow: false,
type: 'grid',
});
fieldList.push({
field: `${element.field}_remove`,
label: `${element.label || '表格'}-删除按钮`,
required: false,
disabled: true,
ifShow: false,
type: 'grid',
});
export const getRFields = (dataList, rFieldList, fieldList) => {
dataList.forEach(
(element: { label?: string; field?: string; component: any; itemProps: any }) => {
if (['InputGuid'].includes(element.component)) {
rFieldList.push({
label: element.label,
// value:element.prop
value: element.field,
});
} else if (
![
'Divider',
'Grid',
'Card',
'CreateUser',
'CreateTime',
'ModifyUser',
'ModifyTime',
'CardGroup',
].includes(element.component) &&
!element.itemProps.hidden
) {
let obj: any = element;
obj.required = element.itemProps.required;
// obj.componentProps.disabled = false;
obj.disabled = true;
obj.ifShow = true;
obj.upShow = false;
obj.fieldName = element.componentProps.fieldName;
fieldList.push(obj);
} else if (['Grid'].includes(element.component) || element.type == 'subTable') {
console.log('gridtable');
fieldList.push({
field: `${element.field}_add`,
label: `${element.label || '表格'}-添加按钮`,
required: false,
disabled: true,
upShow: false,
ifShow: false,
type: 'grid',
});
fieldList.push({
field: `${element.field}_remove`,
label: `${element.label || '表格'}-删除按钮`,
required: false,
disabled: true,
upShow: false,
ifShow: false,
type: 'grid',
});
fieldList.push({
field: `${element.field}_required`,
label: `${element.label || '表格'}-数据`,
required: element.itemProps.required,
disabled: false,
ifShow: false,
type: 'gridrequired',
});
element.columns.forEach((child) => {
child.children.forEach((t) => {
fieldList.push({
gridprop: element.field,
field: t.field,
label: `${element.label || '表格'}-${t.label}`,
required: t.itemProps.required,
disabled: true,
ifShow: true,
fieldName: t.componentProps.fieldName,
...t,
fieldList.push({
field: `${element.field}_required`,
label: `${element.label || '表格'}-数据`,
required: element.itemProps.required,
disabled: false,
upShow: false,
ifShow: false,
type: 'gridrequired',
});
element.columns.forEach((child) => {
child.children.forEach((t) => {
fieldList.push({
gridprop: element.field,
field: t.field,
label: `${element.label || '表格'}-${t.label}`,
required: t.itemProps.required,
disabled: true,
upShow: false,
ifShow: true,
fieldName: t.componentProps.fieldName,
...t,
});
});
});
});
} else if (['Card'].includes(element.component)) {
console.log(3);
element.columns.forEach((child) => {
child.children.forEach((t) => {
fieldList.push({
gridprop: element.field,
field: t.field,
required: t.itemProps.required,
disabled: true,
ifShow: true,
fieldName: t.componentProps.fieldName,
...t,
} else if (['Card'].includes(element.component)) {
console.log(3);
element.columns.forEach((child) => {
child.children.forEach((t) => {
fieldList.push({
gridprop: element.field,
field: t.field,
required: t.itemProps.required,
disabled: true,
ifShow: true,
upShow: false,
fieldName: t.componentProps.fieldName,
...t,
});
});
});
});
} else if (
['CreateUser', 'CreateTime', 'ModifyUser', 'ModifyTime'].includes(element.component) &&
element.display
) {
let obj: any = element;
obj.required = element.itemProps.required;
// obj.componentProps.disabled = false;
obj.disabled = true;
obj.ifShow = true;
obj.fieldName = element.componentProps.fieldName;
fieldList.push(obj);
} else if (['CardGroup'].includes(element.component)) {
let obj: any = element;
obj.required = element.itemProps.required;
// obj.componentProps.disabled = false;
obj.disabled = true;
obj.ifShow = true;
obj.fieldName = element.componentProps.fieldName;
obj.label = `卡片组-${element.label}`;
fieldList.push(obj);
fieldList = cardComponentChild(element.componentProps.options, fieldList);
}
},);
return {rFieldList,fieldList}
}
} else if (
['CreateUser', 'CreateTime', 'ModifyUser', 'ModifyTime'].includes(element.component) &&
element.display
) {
let obj: any = element;
obj.upShow = false;
obj.required = element.itemProps.required;
// obj.componentProps.disabled = false;
obj.disabled = true;
obj.ifShow = true;
obj.fieldName = element.componentProps.fieldName;
fieldList.push(obj);
} else if (['CardGroup'].includes(element.component)) {
let obj: any = element;
obj.upShow = false;
obj.required = element.itemProps.required;
// obj.componentProps.disabled = false;
obj.disabled = true;
obj.ifShow = true;
obj.fieldName = element.componentProps.fieldName;
obj.label = `卡片组-${element.label}`;
fieldList.push(obj);
fieldList = cardComponentChild(element.componentProps.options, fieldList);
}
},
);
return { rFieldList, fieldList };
};
const cardComponentChild = (data, result) => {
data.forEach((optionsElement) => {
optionsElement.children.forEach((childrenElement) => {
let obj: any = childrenElement;
obj.upShow = false;
obj.required = childrenElement.itemProps.required;
obj.disabled = true;
obj.ifShow = true;

View File

@ -0,0 +1,19 @@
<template>
<div>
<a-button @click="goHome('林业专题')"> </a-button>
<a-button @click="goHome('矿产专题')"> </a-button>
</div>
</template>
<script setup lang="ts">
import { PageEnum } from '@/enums/pageEnum';
import { router } from '@/router';
import { useUserStore } from '@/store/modules/user';
const userStore = useUserStore();
async function goHome(name) {
console.log(name);
userStore.setSubject(name);
}
</script>
<style lang="scss" scoped></style>