Compare commits
4 Commits
aeff3844d7
...
201ec0e895
Author | SHA1 | Date |
---|---|---|
z9130 | 201ec0e895 | |
z9130 | 49011f6812 | |
z9130 | d921b78951 | |
z9130 | 0ed2928c19 |
|
@ -144,7 +144,6 @@ export function getFormSchema(params: any = {}) {
|
|||
vModel: 'value',
|
||||
class: 'w-full',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
disabled: readOnly,
|
||||
},
|
||||
},
|
||||
|
|
|
@ -92,7 +92,6 @@ export function getFormSchema(params: any = {}) {
|
|||
vModel: 'value',
|
||||
class: 'w-full',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
},
|
||||
},
|
||||
priceType: {
|
||||
|
|
|
@ -108,7 +108,6 @@ export function getFormSchema(params: any = {}) {
|
|||
vModel: 'value',
|
||||
class: 'w-full',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
},
|
||||
},
|
||||
priceType: {
|
||||
|
|
|
@ -98,7 +98,6 @@ export function getFormSchema(params: any = {}) {
|
|||
vModel: 'value',
|
||||
class: 'w-full',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
disabled: true,
|
||||
},
|
||||
},
|
||||
|
|
|
@ -221,7 +221,6 @@ export function getFormSchema(params: any = {}): any {
|
|||
vModel: 'value',
|
||||
class: 'w-full',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
},
|
||||
conditionalRender: {
|
||||
match({ form }) {
|
||||
|
|
|
@ -236,7 +236,6 @@ export function getFormSchema(params: any = {}) {
|
|||
vModel: 'value',
|
||||
class: 'w-full',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
},
|
||||
conditionalRender: {
|
||||
match({ form }) {
|
||||
|
|
|
@ -249,7 +249,6 @@ export function getFormSchemaByBusiness(params: any = {}) {
|
|||
vModel: 'value',
|
||||
class: 'w-full',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
},
|
||||
conditionalRender: {
|
||||
match({ form }) {
|
||||
|
|
|
@ -95,7 +95,6 @@ const formBinding = ref({
|
|||
name: 'a-input-number',
|
||||
allowClear: true,
|
||||
min: 0,
|
||||
max: 9999,
|
||||
},
|
||||
},
|
||||
status: {
|
||||
|
|
|
@ -9,5 +9,6 @@ export const overridesPreferences = defineOverridesPreferences({
|
|||
app: {
|
||||
name: import.meta.env.VITE_APP_TITLE,
|
||||
authPageLayout: 'panel-center',
|
||||
enablePreferences:true
|
||||
},
|
||||
});
|
||||
|
|
|
@ -89,9 +89,9 @@ const routes: RouteRecordRaw[] = [
|
|||
},
|
||||
component: () => import('#/views/meeting/edit/index.vue'),
|
||||
meta: {
|
||||
hideInMenu: true,
|
||||
hideInTab: true,
|
||||
activePath: '/meeting/list',
|
||||
// hideInMenu: true,
|
||||
// hideInTab: true,
|
||||
activePath: '/meeting/edit/:id?',
|
||||
icon: 'lucide:area-chart',
|
||||
title: '会议填报',
|
||||
},
|
||||
|
|
|
@ -134,7 +134,6 @@ function openModal(type) {
|
|||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
addonAfter: '元',
|
||||
},
|
||||
},
|
||||
|
@ -152,7 +151,6 @@ function openModal(type) {
|
|||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
addonAfter: '元',
|
||||
},
|
||||
},
|
||||
|
@ -171,7 +169,6 @@ function openModal(type) {
|
|||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
addonAfter: '元',
|
||||
},
|
||||
},
|
||||
|
@ -189,7 +186,6 @@ function openModal(type) {
|
|||
name: 'a-input-number',
|
||||
vModel: 'value',
|
||||
min: 0,
|
||||
max: 9999,
|
||||
addonAfter: '元',
|
||||
},
|
||||
},
|
||||
|
|
|
@ -35,7 +35,7 @@ const [SpokenPersonEditModal, spokenPersonEditModalApi] = useVbenModal({
|
|||
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const id = route.params.id;
|
||||
const id = ref(route.params.id);
|
||||
|
||||
let sortable2: any;
|
||||
const showHelpTip = ref(false);
|
||||
|
@ -466,10 +466,15 @@ const currData = ref({});
|
|||
|
||||
onMounted(async () => {
|
||||
isLoading.value = true;
|
||||
console.log(id);
|
||||
|
||||
console.log(id.value)
|
||||
if(id.value === ':id'){
|
||||
id.value = ''
|
||||
}
|
||||
|
||||
try {
|
||||
if (id) {
|
||||
let data = await Apis.meeting.get_page({ params: { guid: id } });
|
||||
if (id.value) {
|
||||
let data = await Apis.meeting.get_page({ params: { guid: id.value } });
|
||||
data = data.rows[0];
|
||||
|
||||
console.log(data);
|
||||
|
@ -522,7 +527,7 @@ onMounted(async () => {
|
|||
let initTime: any;
|
||||
nextTick(() => {
|
||||
// 加载完成之后在绑定拖动事件
|
||||
if (id) {
|
||||
if (id.value) {
|
||||
initTime = setTimeout(() => {
|
||||
rowDrop();
|
||||
}, 500);
|
||||
|
|
|
@ -83,6 +83,7 @@ export function getColumns(params: any = {}): VxeGridPropTypes.Columns {
|
|||
|
||||
if (params.type !== 'taizhang') {
|
||||
columns.unshift({
|
||||
field: 'radio',
|
||||
type: 'radio',
|
||||
width: 40,
|
||||
slots: { radio: 'radio_cell' },
|
||||
|
|
|
@ -106,6 +106,9 @@ function handleExport() {
|
|||
if ($grid) {
|
||||
$grid.exportData({
|
||||
type: 'xlsx',
|
||||
columnFilterMethod: ({ column }) => {
|
||||
return column.type === 'radio' ? false : true;
|
||||
},
|
||||
});
|
||||
message.success('导出成功');
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ export function getColumns(params: any = {}): VxeGridPropTypes.Columns {
|
|||
},
|
||||
},
|
||||
{
|
||||
field: 'meetingDate',
|
||||
field: 'meetingInfo',
|
||||
title: '会议信息',
|
||||
width: 200,
|
||||
slots: { default: 'meetingInfoSlot' },
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<script setup lang="ts">
|
||||
import { computed, onMounted, ref } from 'vue';
|
||||
import { computed, nextTick, onMounted, ref, watch } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
|
||||
import { message, Modal } from 'ant-design-vue';
|
||||
|
@ -34,6 +34,9 @@ const textColor = ref('text-gray-700');
|
|||
const bgColor = ref('bg-gray-50');
|
||||
const isBold = ref(false);
|
||||
|
||||
const textContainerRef = ref();
|
||||
let alignItemsValue = ref('center');
|
||||
|
||||
const currData = ref({
|
||||
guid: '',
|
||||
meetingTheme: '',
|
||||
|
@ -46,6 +49,11 @@ const currData = ref({
|
|||
fileUuidAfter: '',
|
||||
});
|
||||
|
||||
|
||||
watch(textSize, () => {
|
||||
checkOverflow()
|
||||
});
|
||||
|
||||
async function loadDataByMeeting() {
|
||||
try {
|
||||
const data = await Apis.meeting.get_page({
|
||||
|
@ -147,6 +155,7 @@ const startMeeting = () => {
|
|||
// 判断有无发言人员
|
||||
if (addressorData.value.length > 0) {
|
||||
meetingStarted.value = true;
|
||||
checkOverflow();
|
||||
} else {
|
||||
message.warning('暂无发言人员,请先添加发言人员后再试');
|
||||
}
|
||||
|
@ -156,12 +165,14 @@ const nextSpeaker = () => {
|
|||
if (currentIndex.value < addressorData.value.length - 1) {
|
||||
currentIndex.value++;
|
||||
}
|
||||
checkOverflow();
|
||||
};
|
||||
|
||||
const prevSpeaker = () => {
|
||||
if (currentIndex.value > 0) {
|
||||
currentIndex.value--;
|
||||
}
|
||||
checkOverflow();
|
||||
};
|
||||
|
||||
const endMeeting = () => {
|
||||
|
@ -179,6 +190,23 @@ function downloadFile(fileUrl) {
|
|||
link.click();
|
||||
link.remove();
|
||||
}
|
||||
|
||||
function checkOverflow() {
|
||||
nextTick(() => {
|
||||
const container = textContainerRef.value;
|
||||
if (container) {
|
||||
const containerHeight = container.clientHeight; // 可视区域高度
|
||||
const contentHeight = container.scrollHeight; // 内容实际高度
|
||||
console.log(containerHeight, contentHeight);
|
||||
// 如果内容高度超出容器高度,调整 `align-items`
|
||||
if (contentHeight > containerHeight) {
|
||||
alignItemsValue.value = 'flex-start'; // 内容太多时,靠顶部对齐
|
||||
} else {
|
||||
alignItemsValue.value = 'center'; // 内容太多时,靠顶部对齐
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -372,15 +400,16 @@ function downloadFile(fileUrl) {
|
|||
class="content-area mb-4 flex h-[50vh] items-center overflow-y-auto rounded-lg p-4"
|
||||
>
|
||||
<div
|
||||
ref="textContainerRef"
|
||||
:class="[textColor, textSize, { 'font-bold': isBold }]"
|
||||
class="text-left"
|
||||
style="
|
||||
white-space: pre-line;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
"
|
||||
:style="{
|
||||
whiteSpace: 'pre-line',
|
||||
display: 'flex',
|
||||
alignItems: alignItemsValue, // 动态绑定 align-items
|
||||
justifyContent: 'center',
|
||||
height: '100%',
|
||||
}"
|
||||
>
|
||||
{{ currentSpeaker.abstracts }}
|
||||
</div>
|
||||
|
|
|
@ -95,7 +95,6 @@ const formBinding = ref({
|
|||
name: 'a-input-number',
|
||||
allowClear: true,
|
||||
min: 0,
|
||||
max: 9999,
|
||||
},
|
||||
},
|
||||
status: {
|
||||
|
|
|
@ -30,14 +30,14 @@ export default defineConfig(async () => {
|
|||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/api\/app/, '/'),
|
||||
// target: `http://10.71.220.24:8083/rl`,
|
||||
target: `http://192.168.147.164:8083/rl`,
|
||||
target: `http://192.168.148.88:8083/rl`,
|
||||
ws: true,
|
||||
},
|
||||
'/api/uc': {
|
||||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/api\/uc/, '/'),
|
||||
// target: `http://10.71.220.24:8082`,
|
||||
target: `http://192.168.147.164:8082`,
|
||||
target: `http://192.168.148.88:8082`,
|
||||
ws: true,
|
||||
},
|
||||
'/api/czg/app': {
|
||||
|
@ -51,7 +51,7 @@ export default defineConfig(async () => {
|
|||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/api\/czg\/uc/, '/'),
|
||||
// mock代理目标地址
|
||||
target: `http://192.168.147.164:8082`,
|
||||
target: `http://192.168.148.88:8082`,
|
||||
ws: true,
|
||||
},
|
||||
'/api/zp/app': {
|
||||
|
@ -65,7 +65,7 @@ export default defineConfig(async () => {
|
|||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/api\/zp\/uc/, '/'),
|
||||
// mock代理目标地址
|
||||
target: `http://192.168.147.164:8082`,
|
||||
target: `http://192.168.148.88:8082`,
|
||||
ws: true,
|
||||
},
|
||||
'/api/xmh/app': {
|
||||
|
@ -80,7 +80,7 @@ export default defineConfig(async () => {
|
|||
changeOrigin: true,
|
||||
rewrite: (path) => path.replace(/^\/api\/xmh\/uc/, '/'),
|
||||
// mock代理目标地址
|
||||
target: `http://192.168.147.164:8082`,
|
||||
target: `http://192.168.148.88:8082`,
|
||||
ws: true,
|
||||
},
|
||||
},
|
||||
|
|
|
@ -24,7 +24,7 @@ export const overridesPreferences = defineOverridesPreferences({
|
|||
enablePreferences: false,
|
||||
enableRefreshToken: false,
|
||||
isMobile: false,
|
||||
layout: 'sidebar-nav',
|
||||
layout: 'sidebar-topbar',
|
||||
locale: 'zh-CN',
|
||||
loginExpiredMode: 'page',
|
||||
preferencesButtonPosition: 'auto',
|
||||
|
|
|
@ -3,7 +3,8 @@ type LayoutType =
|
|||
| 'header-nav'
|
||||
| 'mixed-nav'
|
||||
| 'sidebar-mixed-nav'
|
||||
| 'sidebar-nav';
|
||||
| 'sidebar-nav'
|
||||
| 'sidebar-topbar';
|
||||
|
||||
type ThemeModeType = 'auto' | 'dark' | 'light';
|
||||
|
||||
|
|
|
@ -104,6 +104,8 @@ interface HeaderPreferences {
|
|||
hidden: boolean;
|
||||
/** header显示模式 */
|
||||
mode: LayoutHeaderModeType;
|
||||
/** header高度,适用于 layout 为 sidebar-topbar 模式 */
|
||||
height: number;
|
||||
}
|
||||
|
||||
interface LogoPreferences {
|
||||
|
|
|
@ -97,6 +97,7 @@ interface VbenLayoutProps {
|
|||
* header-nav 顶部菜单布局
|
||||
* mixed-nav 侧边&顶部菜单布局
|
||||
* sidebar-mixed-nav 侧边混合菜单布局
|
||||
* sidebar-topbar 侧边菜单+顶部栏布局
|
||||
* full-content 全屏内容布局
|
||||
* @default sidebar-nav
|
||||
*/
|
||||
|
|
|
@ -120,7 +120,11 @@ const sidebarEnableState = computed(() => {
|
|||
*/
|
||||
const sidebarMarginTop = computed(() => {
|
||||
const { headerHeight, isMobile } = props;
|
||||
return isMixedNav.value && !isMobile ? headerHeight : 0;
|
||||
console.log(props);
|
||||
return (isMixedNav.value && !isMobile) ||
|
||||
currentLayout.value === 'sidebar-topbar'
|
||||
? headerHeight
|
||||
: 0;
|
||||
});
|
||||
|
||||
/**
|
||||
|
@ -167,7 +171,8 @@ const isSideMode = computed(
|
|||
() =>
|
||||
currentLayout.value === 'mixed-nav' ||
|
||||
currentLayout.value === 'sidebar-mixed-nav' ||
|
||||
currentLayout.value === 'sidebar-nav',
|
||||
currentLayout.value === 'sidebar-nav' ||
|
||||
currentLayout.value === 'sidebar-topbar',
|
||||
);
|
||||
|
||||
/**
|
||||
|
@ -199,6 +204,7 @@ const mainStyle = computed(() => {
|
|||
headerFixed.value &&
|
||||
currentLayout.value !== 'header-nav' &&
|
||||
currentLayout.value !== 'mixed-nav' &&
|
||||
currentLayout.value !== 'sidebar-topbar' &&
|
||||
showSidebar.value &&
|
||||
!props.isMobile
|
||||
) {
|
||||
|
@ -291,7 +297,10 @@ const headerWrapperStyle = computed((): CSSProperties => {
|
|||
const fixed = headerFixed.value;
|
||||
return {
|
||||
height: isFullContent.value ? '0' : `${headerWrapperHeight.value}px`,
|
||||
left: isMixedNav.value ? 0 : mainStyle.value.sidebarAndExtraWidth,
|
||||
left:
|
||||
isMixedNav.value || currentLayout.value === 'sidebar-topbar'
|
||||
? 0
|
||||
: mainStyle.value.sidebarAndExtraWidth,
|
||||
position: fixed ? 'fixed' : 'static',
|
||||
top:
|
||||
headerIsHidden.value || isFullContent.value
|
||||
|
@ -335,12 +344,18 @@ const showHeaderToggleButton = computed(() => {
|
|||
isSideMode.value &&
|
||||
!isSidebarMixedNav.value &&
|
||||
!isMixedNav.value &&
|
||||
!props.isMobile)
|
||||
!props.isMobile &&
|
||||
currentLayout.value !== 'sidebar-topbar')
|
||||
);
|
||||
});
|
||||
|
||||
const showHeaderLogo = computed(() => {
|
||||
return !isSideMode.value || isMixedNav.value || props.isMobile;
|
||||
return (
|
||||
!isSideMode.value ||
|
||||
isMixedNav.value ||
|
||||
props.isMobile ||
|
||||
currentLayout.value === 'sidebar-topbar'
|
||||
);
|
||||
});
|
||||
|
||||
watch(
|
||||
|
@ -454,7 +469,10 @@ function handleHeaderToggle() {
|
|||
:z-index="sidebarZIndex"
|
||||
@leave="() => emit('sideMouseLeave')"
|
||||
>
|
||||
<template v-if="isSideMode && !isMixedNav" #logo>
|
||||
<template
|
||||
v-if="isSideMode && !isMixedNav && currentLayout !== 'sidebar-topbar'"
|
||||
#logo
|
||||
>
|
||||
<slot name="logo"></slot>
|
||||
</template>
|
||||
|
||||
|
|
|
@ -153,6 +153,7 @@ const headerSlots = computed(() => {
|
|||
<VbenAdminLayout
|
||||
v-model:sidebar-extra-visible="sidebarExtraVisible"
|
||||
:content-compact="preferences.app.contentCompact"
|
||||
:header-height="preferences.header.height"
|
||||
:footer-enable="preferences.footer.enable"
|
||||
:footer-fixed="preferences.footer.fixed"
|
||||
:header-hidden="preferences.header.hidden"
|
||||
|
@ -211,6 +212,7 @@ const headerSlots = computed(() => {
|
|||
#breadcrumb
|
||||
>
|
||||
<Breadcrumb
|
||||
v-if="preferences.app.layout !== 'sidebar-topbar'"
|
||||
:hide-when-only-one="preferences.breadcrumb.hideOnlyOne"
|
||||
:show-home="preferences.breadcrumb.showHome"
|
||||
:show-icon="preferences.breadcrumb.showIcon"
|
||||
|
|
|
@ -33,6 +33,7 @@ const components: Record<LayoutType, Component> = {
|
|||
'mixed-nav': MixedNav,
|
||||
'sidebar-mixed-nav': SidebarMixedNav,
|
||||
'sidebar-nav': SidebarNav,
|
||||
'sidebar-topbar': MixedNav,
|
||||
};
|
||||
|
||||
const PRESET = computed((): PresetItem[] => [
|
||||
|
@ -61,6 +62,11 @@ const PRESET = computed((): PresetItem[] => [
|
|||
tip: $t('preferences.fullContentTip'),
|
||||
type: 'full-content',
|
||||
},
|
||||
{
|
||||
name: '侧边菜单 + 顶部栏布局',
|
||||
tip: '顶部栏仅用于显示全局信息或操作,不包含菜单。',
|
||||
type: 'sidebar-topbar',
|
||||
},
|
||||
]);
|
||||
|
||||
function activeClass(theme: string): string[] {
|
||||
|
|
|
@ -31,7 +31,7 @@ function mergeDeep(target: any, source: any) {
|
|||
*/
|
||||
|
||||
function defineOverridesPreferences(preferences: DeepPartial<Preferences>) {
|
||||
return mergeDeep(preferences, {
|
||||
let defaultPreferences: DeepPartial<Preferences> = {
|
||||
app: {
|
||||
accessMode: 'frontend',
|
||||
colorGrayMode: false,
|
||||
|
@ -59,6 +59,9 @@ function defineOverridesPreferences(preferences: DeepPartial<Preferences>) {
|
|||
semiDarkHeader: false,
|
||||
semiDarkSidebar: true,
|
||||
},
|
||||
header: {
|
||||
height: 50,
|
||||
},
|
||||
footer: {
|
||||
enable: false,
|
||||
fixed: false,
|
||||
|
@ -75,7 +78,9 @@ function defineOverridesPreferences(preferences: DeepPartial<Preferences>) {
|
|||
languageToggle: false,
|
||||
themeToggle: false,
|
||||
},
|
||||
});
|
||||
};
|
||||
console.log('页面配置信息:', mergeDeep(defaultPreferences, preferences));
|
||||
return mergeDeep(defaultPreferences, preferences);
|
||||
}
|
||||
|
||||
export { defineOverridesPreferences };
|
||||
|
|
Loading…
Reference in New Issue