|
@@ -1,8 +1,7 @@
|
|
|
<script lang="ts" setup>
|
|
<script lang="ts" setup>
|
|
|
-import { ref, watch, reactive, onMounted, h, computed } from 'vue';
|
|
|
|
|
|
|
+import { ref, watch, reactive, onMounted, h, computed, nextTick } from 'vue';
|
|
|
import { message } from 'ant-design-vue';
|
|
import { message } from 'ant-design-vue';
|
|
|
import { PlusOutlined } from '@ant-design/icons-vue'; // 确保导入
|
|
import { PlusOutlined } from '@ant-design/icons-vue'; // 确保导入
|
|
|
-import { notification } from 'ant-design-vue';
|
|
|
|
|
import VxeUI from 'vxe-table';
|
|
import VxeUI from 'vxe-table';
|
|
|
import { useRequest } from 'alova/client';
|
|
import { useRequest } from 'alova/client';
|
|
|
import { getDictionaryMethod, cpMedicinesMethod } from '@/request/api/dictionary.api';
|
|
import { getDictionaryMethod, cpMedicinesMethod } from '@/request/api/dictionary.api';
|
|
@@ -21,10 +20,13 @@ const formRef = ref<FormInstance>();
|
|
|
const typeOptionsLoading = ref<boolean>(false);
|
|
const typeOptionsLoading = ref<boolean>(false);
|
|
|
const typeOptions = ref<{ label: string; value: string }[]>([]);
|
|
const typeOptions = ref<{ label: string; value: string }[]>([]);
|
|
|
|
|
|
|
|
|
|
+// 统一提升消息提示层级,避免被弹窗遮挡
|
|
|
|
|
+message.config({ zIndex: 5000, top: 80, maxCount: 3, duration: 2 });
|
|
|
|
|
+
|
|
|
const supplierOptions = ref<{ label: string; value: string }[]>([]);
|
|
const supplierOptions = ref<{ label: string; value: string }[]>([]);
|
|
|
|
|
|
|
|
const isRequired = ref<boolean>(true);
|
|
const isRequired = ref<boolean>(true);
|
|
|
-
|
|
|
|
|
|
|
+// 使用单位
|
|
|
const unitOptions = [
|
|
const unitOptions = [
|
|
|
{ label: '袋', value: '袋' },
|
|
{ label: '袋', value: '袋' },
|
|
|
{ label: '包', value: '包' },
|
|
{ label: '包', value: '包' },
|
|
@@ -100,17 +102,36 @@ const checkedList = ref<string[]>(['1']); // 默认选中第一个
|
|
|
const onlineArr = ref<string[]>([]);
|
|
const onlineArr = ref<string[]>([]);
|
|
|
const deliverArr = ref<string[]>([]);
|
|
const deliverArr = ref<string[]>([]);
|
|
|
|
|
|
|
|
|
|
+// 添加推导逻辑编辑状态
|
|
|
|
|
+const isDerivationModalOpen = ref(false);
|
|
|
|
|
+
|
|
|
const rules = {
|
|
const rules = {
|
|
|
name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
|
|
name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
|
|
|
conditioningProgramType: [{ required: true, message: '请选择方案类型', trigger: 'change' }],
|
|
conditioningProgramType: [{ required: true, message: '请选择方案类型', trigger: 'change' }],
|
|
|
- institutionId: [{ required: true, message: '请选择机构名称', trigger: 'change' }],
|
|
|
|
|
|
|
+ institutionId: [{
|
|
|
|
|
+ required: true,
|
|
|
|
|
+ message: '请选择机构名称',
|
|
|
|
|
+ trigger: 'blur',
|
|
|
|
|
+ validator: (rule: any, value: any, callback: any) => {
|
|
|
|
|
+ // 如果推导逻辑弹窗打开,跳过验证
|
|
|
|
|
+ if (isDerivationModalOpen.value) {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!value) {
|
|
|
|
|
+ callback(new Error('请选择机构名称'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }],
|
|
|
|
|
+ isOffline: [{ required: true, message: '请选择线下项目', trigger: 'change' }],
|
|
|
|
|
+ isDelivery: [{ required: true, message: '请选择是否配送', trigger: 'change' }],
|
|
|
};
|
|
};
|
|
|
const isShowOnline = ref<boolean>(false);
|
|
const isShowOnline = ref<boolean>(false);
|
|
|
const isShowDelivery = ref<boolean>(false);
|
|
const isShowDelivery = ref<boolean>(false);
|
|
|
const supplierArr = ref<any[]>([]);
|
|
const supplierArr = ref<any[]>([]);
|
|
|
|
|
|
|
|
-// 弹层容器:避免模板中直接引用 document 导致类型检查报错
|
|
|
|
|
-const getBodyContainer = () => document.body as HTMLElement;
|
|
|
|
|
|
|
|
|
|
// 获取所有的供应商
|
|
// 获取所有的供应商
|
|
|
async function getSupplier(params: any) {
|
|
async function getSupplier(params: any) {
|
|
@@ -223,23 +244,19 @@ function removeHerb(idx: number) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 新增:处理自定义药材输入
|
|
|
|
|
-function handleCustomHerb(value: string, idx: number) {
|
|
|
|
|
- if (form.cpMedicines && form.cpMedicines[idx]) {
|
|
|
|
|
- form.cpMedicines[idx].name = value;
|
|
|
|
|
- form.cpMedicines[idx].id = value; // 自定义选项使用输入值作为ID
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
function cancel() {
|
|
function cancel() {
|
|
|
VxeUI.modal.close(`add-items-modal`);
|
|
VxeUI.modal.close(`add-items-modal`);
|
|
|
}
|
|
}
|
|
|
function doSubmit() {
|
|
function doSubmit() {
|
|
|
|
|
+ // 手动验证方案类型
|
|
|
|
|
+ if (!form.conditioningProgramType) {
|
|
|
|
|
+ message.error('请选择方案类型');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 自定义验证:检查项目应用是否已选择
|
|
// 自定义验证:检查项目应用是否已选择
|
|
|
if (!checkedList.value || checkedList.value.length === 0) {
|
|
if (!checkedList.value || checkedList.value.length === 0) {
|
|
|
- notification.error({
|
|
|
|
|
- message: '请选择项目应用',
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ message.error('请选择项目应用');
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
form.isForWrap = checkedList.value.includes('1') ? 'Y' : null;
|
|
form.isForWrap = checkedList.value.includes('1') ? 'Y' : null;
|
|
@@ -248,9 +265,7 @@ function doSubmit() {
|
|
|
if ((form.addType === 'itemsList' && checkedList.value.includes('1')) || form.addType === 'system') {
|
|
if ((form.addType === 'itemsList' && checkedList.value.includes('1')) || form.addType === 'system') {
|
|
|
// 计价规则
|
|
// 计价规则
|
|
|
if (!form.pricingType) {
|
|
if (!form.pricingType) {
|
|
|
- notification.error({
|
|
|
|
|
- message: '请选择计价规则',
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ message.error('请选择计价规则');
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
// 计价规则相关字段校验
|
|
// 计价规则相关字段校验
|
|
@@ -258,9 +273,7 @@ function doSubmit() {
|
|
|
const { unitPrice, pricingUnit, convertDose, convertUnit } = form.cpFixedPricingRule || {};
|
|
const { unitPrice, pricingUnit, convertDose, convertUnit } = form.cpFixedPricingRule || {};
|
|
|
const allFilled = (unitPrice !== '' && unitPrice !== null && unitPrice !== undefined) && pricingUnit && (convertDose !== '' && convertDose !== null && convertDose !== undefined) && convertUnit;
|
|
const allFilled = (unitPrice !== '' && unitPrice !== null && unitPrice !== undefined) && pricingUnit && (convertDose !== '' && convertDose !== null && convertDose !== undefined) && convertUnit;
|
|
|
if (!allFilled) {
|
|
if (!allFilled) {
|
|
|
- notification.error({
|
|
|
|
|
- message: '请将单价、计价单位、相当于、使用单位全部填写',
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ message.error('请将单价、计价单位、相当于、使用单位全部填写');
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
form.cpDynamicPricingRule = undefined;
|
|
form.cpDynamicPricingRule = undefined;
|
|
@@ -272,21 +285,20 @@ function doSubmit() {
|
|
|
rule1.max = 0;
|
|
rule1.max = 0;
|
|
|
rule2.min = 0;
|
|
rule2.min = 0;
|
|
|
if (!(allFilled1 && allFilled2)) {
|
|
if (!(allFilled1 && allFilled2)) {
|
|
|
- notification.error({
|
|
|
|
|
- message: '请将按穴位/经络/部位的所有计价字段全部填写',
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ message.error('请将按穴位/经络/部位的所有计价字段全部填写');
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
// 按穴位模式:清空一口价数据
|
|
// 按穴位模式:清空一口价数据
|
|
|
form.cpFixedPricingRule = undefined;
|
|
form.cpFixedPricingRule = undefined;
|
|
|
}
|
|
}
|
|
|
// 供应商
|
|
// 供应商
|
|
|
- if (form.addType === 'itemsList' && checkedList.value.includes('1')) {
|
|
|
|
|
- if (!form.conditioningProgramSupplierId) {
|
|
|
|
|
- message.error('请选择供应商');
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- } else if (form.addType === 'system') {
|
|
|
|
|
|
|
+ // if (form.addType === 'itemsList' && checkedList.value.includes('1')) {
|
|
|
|
|
+ // // if (!form.conditioningProgramSupplierId) {
|
|
|
|
|
+ // // message.error('请选择供应商');
|
|
|
|
|
+ // // return;
|
|
|
|
|
+ // // }
|
|
|
|
|
+ // } else
|
|
|
|
|
+ if (form.addType === 'system') {
|
|
|
form.isOffline = 'N';
|
|
form.isOffline = 'N';
|
|
|
form.isDelivery = 'N';
|
|
form.isDelivery = 'N';
|
|
|
}
|
|
}
|
|
@@ -360,11 +372,6 @@ function doSubmit() {
|
|
|
}
|
|
}
|
|
|
submit(form);
|
|
submit(form);
|
|
|
});
|
|
});
|
|
|
- // .catch((error: any) => {
|
|
|
|
|
- // notification.error({
|
|
|
|
|
- // message: error.message || '必填内容请填写完整',
|
|
|
|
|
- // });
|
|
|
|
|
- // });
|
|
|
|
|
}
|
|
}
|
|
|
// 获取方案类型
|
|
// 获取方案类型
|
|
|
async function getConditioningProgramType() {
|
|
async function getConditioningProgramType() {
|
|
@@ -375,9 +382,7 @@ async function getConditioningProgramType() {
|
|
|
typeOptions.value = res; // 直接使用返回的数据
|
|
typeOptions.value = res; // 直接使用返回的数据
|
|
|
}
|
|
}
|
|
|
} catch (error: any) {
|
|
} catch (error: any) {
|
|
|
- notification.error({
|
|
|
|
|
- message: error.message,
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ message.error(error.message);
|
|
|
} finally {
|
|
} finally {
|
|
|
typeOptionsLoading.value = false;
|
|
typeOptionsLoading.value = false;
|
|
|
}
|
|
}
|
|
@@ -393,9 +398,7 @@ async function getJumpType() {
|
|
|
jumpTypeOptions.value = res;
|
|
jumpTypeOptions.value = res;
|
|
|
}
|
|
}
|
|
|
} catch (error: any) {
|
|
} catch (error: any) {
|
|
|
- notification.error({
|
|
|
|
|
- message: error.message,
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ message.error(error.message);
|
|
|
} finally {
|
|
} finally {
|
|
|
jumpTypeOptionsLoading.value = false;
|
|
jumpTypeOptionsLoading.value = false;
|
|
|
}
|
|
}
|
|
@@ -409,12 +412,6 @@ function handleSelectClick() {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 搜索过滤函数
|
|
|
|
|
-function filterOption(input: string, option: any) {
|
|
|
|
|
- const searchText = input.toLowerCase();
|
|
|
|
|
- const optionText = option.label?.toLowerCase() || '';
|
|
|
|
|
- return optionText.includes(searchText);
|
|
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
|
const deptId = localStorage.getItem('deptId');
|
|
const deptId = localStorage.getItem('deptId');
|
|
@@ -550,10 +547,26 @@ const uploading = ref(false);
|
|
|
const progress = ref(0);
|
|
const progress = ref(0);
|
|
|
const videoFileList = ref<UploadFile[]>([]);
|
|
const videoFileList = ref<UploadFile[]>([]);
|
|
|
|
|
|
|
|
-// 供应商校验规则:仅在“项目应用 勾选 服务包”且“新增项目(itemsList)”时必填
|
|
|
|
|
|
|
+// 供应商校验规则:仅在"项目应用 勾选 服务包"且"新增项目(itemsList)"时必填
|
|
|
const supplierRules = computed(() => {
|
|
const supplierRules = computed(() => {
|
|
|
const need = checkedList.value.includes('1') && form.addType === 'itemsList';
|
|
const need = checkedList.value.includes('1') && form.addType === 'itemsList';
|
|
|
- return need ? [{ required: true, message: '请选择供应商', trigger: ['change', 'blur'] }] : [];
|
|
|
|
|
|
|
+ return need ? [{
|
|
|
|
|
+ required: true,
|
|
|
|
|
+ message: '请选择供应商',
|
|
|
|
|
+ trigger: 'blur',
|
|
|
|
|
+ validator: (rule: any, value: any, callback: any) => {
|
|
|
|
|
+ // 如果推导逻辑弹窗打开,跳过验证
|
|
|
|
|
+ if (isDerivationModalOpen.value) {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!value) {
|
|
|
|
|
+ callback(new Error('请选择供应商'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }] : [];
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 上传前校验
|
|
// 上传前校验
|
|
@@ -714,10 +727,6 @@ watch(
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
);
|
|
);
|
|
|
-function bindchange(e: any) {
|
|
|
|
|
- form.conditioningProgramSupplierId = '';
|
|
|
|
|
- form.isOffline = null;
|
|
|
|
|
-}
|
|
|
|
|
function onlineChange(value: any) {
|
|
function onlineChange(value: any) {
|
|
|
form.isOffline = value[value.length - 1];
|
|
form.isOffline = value[value.length - 1];
|
|
|
deliverArr.value = [];
|
|
deliverArr.value = [];
|
|
@@ -733,15 +742,6 @@ function getConditioningProgramSupplier(value: any) {
|
|
|
form.isDelivery = null;
|
|
form.isDelivery = null;
|
|
|
isShowDelivery.value = false;
|
|
isShowDelivery.value = false;
|
|
|
}
|
|
}
|
|
|
-function handleSelect(value: any, node: any) {
|
|
|
|
|
- form.institutionId = value;
|
|
|
|
|
- if (node && node.label) {
|
|
|
|
|
- form.institutionName = node.label;
|
|
|
|
|
- } else if (node && node.title) {
|
|
|
|
|
- form.institutionName = node.title;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
// 项目应用数据
|
|
// 项目应用数据
|
|
|
const plainOptions = [
|
|
const plainOptions = [
|
|
|
{ id: '1', name: '服务包项目' },
|
|
{ id: '1', name: '服务包项目' },
|
|
@@ -764,6 +764,9 @@ const isDerivationEmpty = computed(() => {
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
function handleDerivation() {
|
|
function handleDerivation() {
|
|
|
|
|
+ // 设置推导逻辑弹窗打开状态
|
|
|
|
|
+ isDerivationModalOpen.value = true;
|
|
|
|
|
+
|
|
|
VxeUI.modal.open({
|
|
VxeUI.modal.open({
|
|
|
title: `推导逻辑`,
|
|
title: `推导逻辑`,
|
|
|
height: 750,
|
|
height: 750,
|
|
@@ -773,6 +776,13 @@ function handleDerivation() {
|
|
|
id: `derivation-modal`,
|
|
id: `derivation-modal`,
|
|
|
remember: true,
|
|
remember: true,
|
|
|
storage: true,
|
|
storage: true,
|
|
|
|
|
+ onClose: () => {
|
|
|
|
|
+ // 弹窗关闭时清除验证状态并重置状态
|
|
|
|
|
+ isDerivationModalOpen.value = false;
|
|
|
|
|
+ nextTick(() => {
|
|
|
|
|
+ formRef.value?.clearValidate(['institutionId', 'conditioningProgramSupplierId']);
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
slots: {
|
|
slots: {
|
|
|
default() {
|
|
default() {
|
|
|
return h(Derivation, {
|
|
return h(Derivation, {
|
|
@@ -785,6 +795,19 @@ function handleDerivation() {
|
|
|
onSubmit: (data: any) => {
|
|
onSubmit: (data: any) => {
|
|
|
derivationData.value = data;
|
|
derivationData.value = data;
|
|
|
hasDerivationLogic.value = true; // 设置推导逻辑已编辑
|
|
hasDerivationLogic.value = true; // 设置推导逻辑已编辑
|
|
|
|
|
+
|
|
|
|
|
+ // 重置状态并清除验证状态
|
|
|
|
|
+ isDerivationModalOpen.value = false;
|
|
|
|
|
+ nextTick(() => {
|
|
|
|
|
+ formRef.value?.clearValidate(['institutionId', 'conditioningProgramSupplierId']);
|
|
|
|
|
+ });
|
|
|
|
|
+ },
|
|
|
|
|
+ onCancel: () => {
|
|
|
|
|
+ // 取消时重置状态并清除验证状态
|
|
|
|
|
+ isDerivationModalOpen.value = false;
|
|
|
|
|
+ nextTick(() => {
|
|
|
|
|
+ formRef.value?.clearValidate(['institutionId', 'conditioningProgramSupplierId']);
|
|
|
|
|
+ });
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
},
|
|
},
|
|
@@ -796,11 +819,21 @@ function handleDerivation() {
|
|
|
<template>
|
|
<template>
|
|
|
<div class="form-container">
|
|
<div class="form-container">
|
|
|
<a-form ref="formRef" :model="form" :rules="rules" layout="horizontal">
|
|
<a-form ref="formRef" :model="form" :rules="rules" layout="horizontal">
|
|
|
- <a-form-item label="项目名称:" name="name" required>
|
|
|
|
|
|
|
+ <a-form-item label="项目名称:" name="name">
|
|
|
<a-input v-model:value="form.name" placeholder="请输入" />
|
|
<a-input v-model:value="form.name" placeholder="请输入" />
|
|
|
</a-form-item>
|
|
</a-form-item>
|
|
|
- <a-form-item label="方案类型:" name="conditioningProgramType" required style="width: 100%">
|
|
|
|
|
- <vxe-select v-model="form.conditioningProgramType" :options="typeOptions" placeholder="请选择" clearable filterable transfer @change="bindchange" style="width: 100%" />
|
|
|
|
|
|
|
+ <a-form-item label="方案类型:" name="conditioningProgramType" style="width: 100%" required>
|
|
|
|
|
+ <vxe-select
|
|
|
|
|
+ v-model="form.conditioningProgramType"
|
|
|
|
|
+ :options="typeOptions"
|
|
|
|
|
+ placeholder="请选择方案类型"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ filterable
|
|
|
|
|
+ transfer
|
|
|
|
|
+ empty-text="暂无数据"
|
|
|
|
|
+ @focus="handleSelectClick"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ />
|
|
|
</a-form-item>
|
|
</a-form-item>
|
|
|
<a-form-item label="项目应用:" required v-if="form.addType === 'itemsList'">
|
|
<a-form-item label="项目应用:" required v-if="form.addType === 'itemsList'">
|
|
|
<a-checkbox-group v-model:value="checkedList">
|
|
<a-checkbox-group v-model:value="checkedList">
|
|
@@ -1080,15 +1113,18 @@ function handleDerivation() {
|
|
|
></a-tree-select>
|
|
></a-tree-select>
|
|
|
</a-form-item>
|
|
</a-form-item>
|
|
|
<a-form-item label="供应商:" name="conditioningProgramSupplierId" :rules="supplierRules" style="width: 100%">
|
|
<a-form-item label="供应商:" name="conditioningProgramSupplierId" :rules="supplierRules" style="width: 100%">
|
|
|
- <vxe-select
|
|
|
|
|
- v-model="form.conditioningProgramSupplierId"
|
|
|
|
|
|
|
+ <a-select
|
|
|
|
|
+ v-model:value="form.conditioningProgramSupplierId"
|
|
|
:options="supplierOptions"
|
|
:options="supplierOptions"
|
|
|
placeholder="请选择"
|
|
placeholder="请选择"
|
|
|
- clearable
|
|
|
|
|
- filterable
|
|
|
|
|
- transfer
|
|
|
|
|
- @change="getConditioningProgramSupplier"
|
|
|
|
|
|
|
+ allow-clear
|
|
|
|
|
+ show-search
|
|
|
|
|
+ :getPopupContainer="getSafePopupContainer"
|
|
|
|
|
+ :dropdownMatchSelectWidth="false"
|
|
|
|
|
+ :dropdownStyle="{ zIndex: 5000 }"
|
|
|
style="width: 100%"
|
|
style="width: 100%"
|
|
|
|
|
+ @change="getConditioningProgramSupplier"
|
|
|
|
|
+ not-found-content="暂无数据"
|
|
|
/>
|
|
/>
|
|
|
</a-form-item>
|
|
</a-form-item>
|
|
|
<a-form-item label="线下项目:" name="isOffline" v-if="isShowOnline" :required="checkedList.includes('1')">
|
|
<a-form-item label="线下项目:" name="isOffline" v-if="isShowOnline" :required="checkedList.includes('1')">
|
|
@@ -1129,9 +1165,12 @@ function handleDerivation() {
|
|
|
|
|
|
|
|
<style scoped>
|
|
<style scoped>
|
|
|
.form-container {
|
|
.form-container {
|
|
|
- width: 760px;
|
|
|
|
|
|
|
+ width: 95%;
|
|
|
margin: 0 auto;
|
|
margin: 0 auto;
|
|
|
padding: 10px 0px 0 0;
|
|
padding: 10px 0px 0 0;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ /* max-height: 80vh; */
|
|
|
}
|
|
}
|
|
|
.per-rule {
|
|
.per-rule {
|
|
|
margin-bottom: 16px;
|
|
margin-bottom: 16px;
|
|
@@ -1185,6 +1224,16 @@ function handleDerivation() {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
justify-content: center;
|
|
justify-content: center;
|
|
|
gap: 16px;
|
|
gap: 16px;
|
|
|
|
|
+ position: sticky;
|
|
|
|
|
+ bottom: 0;
|
|
|
|
|
+ background: #fff;
|
|
|
|
|
+ padding: 12px 0;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.form-container .ant-form {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ overflow: auto;
|
|
|
}
|
|
}
|
|
|
.slider-section {
|
|
.slider-section {
|
|
|
margin-bottom: 16px;
|
|
margin-bottom: 16px;
|
|
@@ -1482,3 +1531,9 @@ function handleDerivation() {
|
|
|
font-size: 10px;
|
|
font-size: 10px;
|
|
|
}
|
|
}
|
|
|
</style>
|
|
</style>
|
|
|
|
|
+<style>
|
|
|
|
|
+/* 提升 AntD Select 下拉层级,避免被弹窗/遮罩遮挡 */
|
|
|
|
|
+.ant-select-dropdown {
|
|
|
|
|
+ z-index: 5000 !important;
|
|
|
|
|
+}
|
|
|
|
|
+</style>
|