|
|
|
@ -1,56 +1,81 @@ |
|
|
|
|
|
|
|
<template> |
|
|
|
<a-modal |
|
|
|
:title="form.positionId ? '编辑' : '添加'" |
|
|
|
width="600px" |
|
|
|
:open="visibleFlag" |
|
|
|
@cancel="onClose" |
|
|
|
:maskClosable="false" |
|
|
|
:destroyOnClose="true" |
|
|
|
forceRender |
|
|
|
:title="title" |
|
|
|
:open="visible" |
|
|
|
:width="1000" |
|
|
|
@ok="handleSubmit" |
|
|
|
@cancel="handleCancel" |
|
|
|
:confirmLoading="submitLoading" |
|
|
|
> |
|
|
|
<a-form ref="formRef" :model="form" :rules="rules" :label-col="{ span: 6 }"> |
|
|
|
<a-tabs v-model:activeKey="tabsValue"> |
|
|
|
<a-tab-pane key="1" tab="基础设置"/> |
|
|
|
<a-tab-pane key="2" tab="监听器" force-render/> |
|
|
|
</a-tabs> |
|
|
|
<div v-show="tabsValue === '1'"> |
|
|
|
<a-form ref="formRef" :model="form" class="dialogForm" :rules="rules" :label-col="{ style: { width: '150px' } }" :disabled="disabled"> |
|
|
|
<a-form-item label="流程编码" name="flowCode"> |
|
|
|
<a-input style="width: 100%" v-model:value="form.flowCode" placeholder="流程编码" /> |
|
|
|
<a-input v-model:value="form.flowCode" placeholder="请输入流程编码" :maxlength="40" show-count /> |
|
|
|
</a-form-item> |
|
|
|
|
|
|
|
<a-form-item label="流程名称" name="flowName"> |
|
|
|
<a-input style="width: 100%" v-model:value="form.flowName" placeholder="流程名称" /> |
|
|
|
<a-input v-model:value="form.flowName" placeholder="请输入流程名称" :maxlength="100" show-count @input="nameChange" /> |
|
|
|
</a-form-item> |
|
|
|
|
|
|
|
<a-form-item label="设计器模型" name="modelValue"> |
|
|
|
<a-radio-group v-model:value="form.modelValue" :disabled="!!definitionId" @change="modelValueChange"> |
|
|
|
<a-radio value="CLASSICS">经典模型</a-radio> |
|
|
|
<a-radio value="MIMIC">仿钉钉模型 |
|
|
|
<span style="color: #ff4949; margin-left: 50px;">切换后重置节点,保存后不支持修改!</span> |
|
|
|
</a-radio> |
|
|
|
</a-radio-group> |
|
|
|
</a-form-item> |
|
|
|
|
|
|
|
<a-form-item label="流程类别" name="category"> |
|
|
|
<a-input style="width: 100%" v-model:value="form.category" placeholder="流程类别" /> |
|
|
|
<a-tree-select |
|
|
|
v-model:value="form.category" |
|
|
|
:tree-data="categoryList" |
|
|
|
:field-names="{ value: 'id', label: 'name', children: 'children' }" |
|
|
|
placeholder="请选择流程类别" |
|
|
|
tree-checkable |
|
|
|
tree-check-strictly/> |
|
|
|
</a-form-item> |
|
|
|
<a-form-item label="审批表单" name="formCustom"> |
|
|
|
<a-select v-model:value="form.formCustom" style="width: 100%" :allowClear="true"> |
|
|
|
<a-select-option value="N">表单路径</a-select-option> |
|
|
|
</a-select> |
|
|
|
|
|
|
|
<a-form-item label="自定义表单" name="formCustom"> |
|
|
|
<a-radio-group v-model:value="form.formCustom"> |
|
|
|
<a-radio value="N"> |
|
|
|
<span class="flex-hc"> |
|
|
|
否 |
|
|
|
<a-tooltip placement="top" title="填写页面地址:如system/process/approve"> |
|
|
|
<ExclamationCircleOutlined style="font-size: 14px; margin-left: 5px;" /> |
|
|
|
</a-tooltip> |
|
|
|
</span> |
|
|
|
</a-radio> |
|
|
|
<a-radio value="Y"> |
|
|
|
<span class="flex-hc"> |
|
|
|
是 |
|
|
|
<a-tooltip placement="top" title="填写自定义表单的唯一标识:如formCode+version"> |
|
|
|
<ExclamationCircleOutlined style="font-size: 14px; margin-left: 5px;" /> |
|
|
|
</a-tooltip> |
|
|
|
</span> |
|
|
|
</a-radio> |
|
|
|
</a-radio-group> |
|
|
|
</a-form-item> |
|
|
|
<a-form-item label="审批表单路径" name="formPath" v-if="form.formCustom === 'N'"> |
|
|
|
<a-input style="width: 100%" v-model:value="form.formPath" placeholder="请输入审批表单路径" /> |
|
|
|
|
|
|
|
<a-form-item label="表单路径" name="formPath" v-if="form.formCustom === 'N'"> |
|
|
|
<a-input v-model:value="form.formPath" placeholder="请输入审批表单路径" :maxlength="100" show-count/> |
|
|
|
</a-form-item> |
|
|
|
</div> |
|
|
|
<div v-show="tabsValue === '2'"> |
|
|
|
|
|
|
|
<a-form-item label="自定义表单唯一标识" name="formPath" v-else-if="form.formCustom === 'Y'"> |
|
|
|
<a-tree-select |
|
|
|
v-model:value="form.formPath" |
|
|
|
:tree-data="formPathList" |
|
|
|
:field-names="{ value: 'id', label: 'name', children: 'children' }" |
|
|
|
placeholder="请选择流程类别" |
|
|
|
tree-checkable |
|
|
|
tree-check-strictly/> |
|
|
|
</a-form-item> |
|
|
|
|
|
|
|
<a-form-item name="listenerRows" class="listenerItem"> |
|
|
|
<a-table |
|
|
|
:dataSource="form.listenerRows" |
|
|
|
:columns="columns" |
|
|
|
:pagination="false" |
|
|
|
size="small" |
|
|
|
> |
|
|
|
<template #bodyCell="{ column, record, index }"> |
|
|
|
<template v-if="column.dataIndex === 'listenerType'"> |
|
|
|
<a-form-item |
|
|
|
:name="['listenerRows', index, 'listenerType']" |
|
|
|
:rules="rules.listenerType" |
|
|
|
> |
|
|
|
<a-select |
|
|
|
v-model:value="record.listenerType" |
|
|
|
placeholder="请选择类型" |
|
|
|
> |
|
|
|
<a-table v-if="form.listenerRows && form.listenerRows.length > 0" :key="form.listenerRows.length" :data-source="form.listenerRows" :pagination="false" style="width: 100%"> |
|
|
|
<a-table-column data-index="listenerType" :width="150" title="类型"> |
|
|
|
<template #default="{ index: scopeIndex, record }"> |
|
|
|
<a-form-item :name="['listenerRows', scopeIndex, 'listenerType']" :rules="rules.listenerType"> |
|
|
|
<a-select v-model:value="record.listenerType" placeholder="请选择类型"> |
|
|
|
<a-select-option value="start">开始</a-select-option> |
|
|
|
<a-select-option value="assignment">分派</a-select-option> |
|
|
|
<a-select-option value="finish">完成</a-select-option> |
|
|
|
@ -58,205 +83,288 @@ |
|
|
|
</a-select> |
|
|
|
</a-form-item> |
|
|
|
</template> |
|
|
|
</a-table-column> |
|
|
|
|
|
|
|
<template v-if="column.dataIndex === 'listenerPath'"> |
|
|
|
<a-form-item |
|
|
|
:name="['listenerRows', index, 'listenerPath']" |
|
|
|
:rules="rules.listenerPath" |
|
|
|
> |
|
|
|
<a-input |
|
|
|
v-model:value="record.listenerPath" |
|
|
|
placeholder="请输入路径" |
|
|
|
/> |
|
|
|
<a-table-column data-index="listenerPath" title="路径"> |
|
|
|
<template #default="{ index: scopeIndex, record }"> |
|
|
|
<a-form-item :name="['listenerRows', scopeIndex, 'listenerPath']" :rules="rules.listenerPath"> |
|
|
|
<a-input v-model:value="record.listenerPath" placeholder="请输入路径" /> |
|
|
|
</a-form-item> |
|
|
|
</template> |
|
|
|
</a-table-column> |
|
|
|
|
|
|
|
<template v-if="column.dataIndex === 'action'"> |
|
|
|
<a-button |
|
|
|
type="link" |
|
|
|
danger |
|
|
|
size="small" |
|
|
|
@click="handleDeleteRow(index)" |
|
|
|
> |
|
|
|
<template #icon><delete-outlined /></template> |
|
|
|
<a-table-column title="操作" :width="65" v-if="!disabled"> |
|
|
|
<template #default="{ index: scopeIndex }"> |
|
|
|
<a-button size="small" type="primary" danger @click="handleDeleteRow(scopeIndex)"> |
|
|
|
<template #icon><DeleteOutlined /></template> |
|
|
|
</a-button> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
</a-table-column> |
|
|
|
</a-table> |
|
|
|
|
|
|
|
<a-button |
|
|
|
type="primary" |
|
|
|
style="margin-top: 10px" |
|
|
|
@click="handleAddRow" |
|
|
|
> |
|
|
|
增加行 |
|
|
|
</a-button> |
|
|
|
<a-button v-if="!disabled" style="margin-top: 10px;" type="primary" @click="handleAddRow">增加行</a-button> |
|
|
|
</a-form-item> |
|
|
|
</div> |
|
|
|
</a-form> |
|
|
|
</a-modal> |
|
|
|
|
|
|
|
<template #footer> |
|
|
|
<a-space> |
|
|
|
<a-button @click="onClose">取消</a-button> |
|
|
|
<a-button type="primary" @click="onSubmit">保存</a-button> |
|
|
|
</a-space> |
|
|
|
</template> |
|
|
|
<a-modal title="流程设计" |
|
|
|
:open="designVisible" |
|
|
|
width="90%" |
|
|
|
:footer="null" |
|
|
|
@cancel="closeDesign"> |
|
|
|
<div style="height: 80vh" class="iframe-wrapper"> |
|
|
|
<iframe :src="designIframeUrl" style="width: 100%; height: 100%" frameborder="0" scrolling="no" class="custom-iframe" /> |
|
|
|
</div> |
|
|
|
</a-modal> |
|
|
|
</template> |
|
|
|
<script setup> |
|
|
|
import { reactive, ref, nextTick } from 'vue'; |
|
|
|
import _ from 'lodash'; |
|
|
|
|
|
|
|
<script setup name="BaseInfo"> |
|
|
|
import { ref, getCurrentInstance, watch } from "vue"; |
|
|
|
import { useRouter } from "vue-router"; |
|
|
|
import { ExclamationCircleOutlined, DeleteOutlined } from '@ant-design/icons-vue'; |
|
|
|
import { message } from 'ant-design-vue'; |
|
|
|
import { SmartLoading } from '/@/components/framework/smart-loading'; |
|
|
|
import { definitionApi } from '/@/api/flow/definition-api'; |
|
|
|
import { SmartLoading } from '/@/components/framework/smart-loading'; |
|
|
|
import { smartSentry } from '/@/lib/smart-sentry'; |
|
|
|
import { useUserStore } from "/@/store/modules/system/user.js"; |
|
|
|
|
|
|
|
// ------------------------ 事件 ------------------------ |
|
|
|
|
|
|
|
const emits = defineEmits(['reloadList']); |
|
|
|
const router = useRouter(); |
|
|
|
const { proxy } = getCurrentInstance(); |
|
|
|
const emit = defineEmits(['reloadList']); |
|
|
|
|
|
|
|
// ------------------------ 显示与隐藏 ------------------------ |
|
|
|
// 是否显示 |
|
|
|
const visibleFlag = ref(false); |
|
|
|
// 显示标签页 |
|
|
|
const tabsValue = ref('1'); |
|
|
|
|
|
|
|
const columns = [ |
|
|
|
{ |
|
|
|
title: '类型', |
|
|
|
dataIndex: 'listenerType', |
|
|
|
width: 150, |
|
|
|
const props = defineProps({ |
|
|
|
disabled: { |
|
|
|
type: Boolean, |
|
|
|
default: false |
|
|
|
}, |
|
|
|
{ |
|
|
|
title: '路径', |
|
|
|
dataIndex: 'listenerPath', |
|
|
|
logicJson: { |
|
|
|
type: Object, |
|
|
|
default () { |
|
|
|
return {} |
|
|
|
} |
|
|
|
}, |
|
|
|
{ |
|
|
|
title: '操作', |
|
|
|
dataIndex: 'action', |
|
|
|
width: 65, |
|
|
|
categoryList: { |
|
|
|
type: Array, |
|
|
|
default () { |
|
|
|
return [] |
|
|
|
} |
|
|
|
}, |
|
|
|
]; |
|
|
|
|
|
|
|
function handleAddRow() { |
|
|
|
form.listenerRows.push({ |
|
|
|
listenerType: undefined, // 初始未选择类型 |
|
|
|
listenerPath: '' // 初始空路径 |
|
|
|
}); |
|
|
|
formPathList: { |
|
|
|
type: Array, |
|
|
|
default () { |
|
|
|
return [] |
|
|
|
} |
|
|
|
function handleDeleteRow(index) { |
|
|
|
form.listenerRows.splice(index, 1); |
|
|
|
}, |
|
|
|
definitionId: { |
|
|
|
type: String, |
|
|
|
default () { |
|
|
|
return null |
|
|
|
} |
|
|
|
}, |
|
|
|
}); |
|
|
|
|
|
|
|
const visible = ref(false); |
|
|
|
const title = ref('新增流程定义'); |
|
|
|
const submitLoading = ref(false); |
|
|
|
|
|
|
|
function show(rowData) { |
|
|
|
Object.assign(form, formDefault); |
|
|
|
if (rowData && !_.isEmpty(rowData)) { |
|
|
|
Object.assign(form, rowData); |
|
|
|
const designVisible = ref(false); |
|
|
|
const designIframeUrl = ref(""); |
|
|
|
|
|
|
|
const form = ref({ |
|
|
|
id: null, |
|
|
|
flowCode: "", |
|
|
|
flowName: "", |
|
|
|
modelValue: "", |
|
|
|
category: "", |
|
|
|
formCustom: "N", |
|
|
|
formPath: "", |
|
|
|
listenerType: "", |
|
|
|
listenerPath: "", |
|
|
|
listenerRows: [] |
|
|
|
}); |
|
|
|
|
|
|
|
watch(() => props.logicJson, newValue => { |
|
|
|
if (newValue && Object.keys(newValue).length > 0) { |
|
|
|
Object.assign(form.value, newValue); |
|
|
|
setListenerData(); |
|
|
|
} |
|
|
|
if (rowData.listenerType) { |
|
|
|
const listenerTypes = rowData.listenerType.split(","); |
|
|
|
const listenerPaths = rowData.listenerPath.split("@@"); |
|
|
|
form.listenerRows = listenerTypes.map((type, index) => ({ |
|
|
|
}); |
|
|
|
|
|
|
|
const rules = { |
|
|
|
modelValue: [ |
|
|
|
{ required: true, message: "设计器模型不能为空", trigger: "blur" } |
|
|
|
], |
|
|
|
flowCode: [ |
|
|
|
{ required: true, message: "流程编码不能为空", trigger: "blur" } |
|
|
|
], |
|
|
|
flowName: [ |
|
|
|
{ required: true, message: "流程名称不能为空", trigger: "blur" } |
|
|
|
], |
|
|
|
formCustom: [ |
|
|
|
{ required: true, message: "请选择审批表单是否自定义", trigger: "change" } |
|
|
|
], |
|
|
|
listenerType: [ |
|
|
|
{ required: true, message: '监听器不能为空', trigger: ['change', 'blur'] } |
|
|
|
], |
|
|
|
listenerPath: [ |
|
|
|
{ required: true, message: '监听器不能为空', trigger: ['change', 'blur'] } |
|
|
|
] |
|
|
|
}; |
|
|
|
|
|
|
|
const formRef = ref(); |
|
|
|
|
|
|
|
function setListenerData() { |
|
|
|
if (form.value.listenerType) { |
|
|
|
const listenerTypes = form.value.listenerType.split(","); |
|
|
|
const listenerPaths = form.value.listenerPath.split("@@"); |
|
|
|
form.value.listenerRows = listenerTypes.map((type, index) => ({ |
|
|
|
listenerType: type, |
|
|
|
listenerPath: listenerPaths[index] |
|
|
|
})); |
|
|
|
} else { |
|
|
|
form.listenerRows = []; |
|
|
|
form.value.listenerRows = []; |
|
|
|
} |
|
|
|
visibleFlag.value = true; |
|
|
|
nextTick(() => { |
|
|
|
formRef.value.clearValidate(); |
|
|
|
|
|
|
|
// 解决弹窗错误信息显示,没有可忽略 |
|
|
|
const domArr = document.getElementsByClassName('ant-modal'); |
|
|
|
if (domArr && domArr.length > 0) { |
|
|
|
Array.from(domArr).forEach((item) => { |
|
|
|
if (item.childNodes && item.childNodes.length > 0) { |
|
|
|
Array.from(item.childNodes).forEach((child) => { |
|
|
|
if (child.setAttribute) { |
|
|
|
child.setAttribute('aria-hidden', 'false'); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
function handleAddRow() { |
|
|
|
form.value.listenerRows.push({ listenerType: "", listenerPath: "" }); |
|
|
|
formRef.value?.clearValidate("listenerRows"); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
function handleDeleteRow(index) { |
|
|
|
form.value.listenerRows.splice(index, 1); |
|
|
|
} |
|
|
|
|
|
|
|
function validate() { |
|
|
|
return new Promise((resolve) => { |
|
|
|
proxy.$nextTick(() => { |
|
|
|
proxy.$refs.formRef.validate(valid => { |
|
|
|
resolve(valid); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
function onClose() { |
|
|
|
Object.assign(form, formDefault); |
|
|
|
visibleFlag.value = false; |
|
|
|
function nameChange(flowName) { |
|
|
|
proxy.$emit('update:flow-name', flowName); |
|
|
|
} |
|
|
|
|
|
|
|
// ------------------------ 表单 ------------------------ |
|
|
|
|
|
|
|
// 组件ref |
|
|
|
const formRef = ref(); |
|
|
|
function modelValueChange() { |
|
|
|
proxy.$emit('update:model-value'); |
|
|
|
} |
|
|
|
|
|
|
|
const formDefault = { |
|
|
|
id: undefined, |
|
|
|
flowCode: undefined, |
|
|
|
flowName: undefined, |
|
|
|
category: undefined, |
|
|
|
formCustom: 'N', |
|
|
|
formPath: undefined, |
|
|
|
listenerRows: [], // 新增初始化监听器数组 |
|
|
|
}; |
|
|
|
function getFormData() { |
|
|
|
form.value.listenerType = form.value.listenerRows.map(row => row.listenerType).join(","); |
|
|
|
form.value.listenerPath = form.value.listenerRows.map(row => row.listenerPath).join("@@"); |
|
|
|
return form.value; |
|
|
|
} |
|
|
|
|
|
|
|
let form = reactive({ ...formDefault }); |
|
|
|
function show(data) { |
|
|
|
if (data && data.id) { |
|
|
|
title.value = '编辑流程定义'; |
|
|
|
Object.assign(form.value, data); |
|
|
|
setListenerData(); |
|
|
|
visible.value = true; |
|
|
|
} else { |
|
|
|
router.push({ path: "/flow/flow-design/index/new" }); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const rules = { |
|
|
|
flowCode: [{ required: true, message: '请输入流程编码' }], |
|
|
|
flowName: [{ required: true, message: '请输入流程名称' }], |
|
|
|
formCustom: [{ required: true, message: '请选择审批表单' }], |
|
|
|
listenerType: [{ required: true, message: '监听器不能为空', trigger: ['change', 'blur'] }], |
|
|
|
listenerPath: [{ required: true, message: '监听器不能为空', trigger: ['change', 'blur'] }] |
|
|
|
function resetForm() { |
|
|
|
form.value = { |
|
|
|
id: null, |
|
|
|
flowCode: "", |
|
|
|
flowName: "", |
|
|
|
modelValue: "", |
|
|
|
category: "", |
|
|
|
formCustom: "N", |
|
|
|
formPath: "", |
|
|
|
listenerType: "", |
|
|
|
listenerPath: "", |
|
|
|
listenerRows: [] |
|
|
|
}; |
|
|
|
|
|
|
|
// 点击确定,验证表单 |
|
|
|
async function onSubmit() { |
|
|
|
try { |
|
|
|
await formRef.value.validateFields(); |
|
|
|
form.listenerType = form.listenerRows.map(row => row.listenerType).join(",") |
|
|
|
form.listenerPath = form.listenerRows.map(row => row.listenerPath).join("@@") |
|
|
|
console.log(form) |
|
|
|
save(); |
|
|
|
} catch (err) { |
|
|
|
message.error('参数验证错误,请仔细填写表单数据!'); |
|
|
|
} |
|
|
|
|
|
|
|
function handleCancel() { |
|
|
|
visible.value = false; |
|
|
|
resetForm(); |
|
|
|
} |
|
|
|
|
|
|
|
// 新建、编辑API |
|
|
|
async function save() { |
|
|
|
SmartLoading.show(); |
|
|
|
async function handleSubmit() { |
|
|
|
try { |
|
|
|
if (form.id) { |
|
|
|
await definitionApi.update(form); |
|
|
|
const valid = await validate(); |
|
|
|
if (!valid) return; |
|
|
|
|
|
|
|
submitLoading.value = true; |
|
|
|
SmartLoading.show(); |
|
|
|
|
|
|
|
const formData = getFormData(); |
|
|
|
|
|
|
|
if (formData.id) { |
|
|
|
await definitionApi.update(formData); |
|
|
|
message.success('修改成功'); |
|
|
|
} else { |
|
|
|
await definitionApi.add(form); |
|
|
|
const result = await definitionApi.add(formData); |
|
|
|
message.success('新增成功'); |
|
|
|
|
|
|
|
visible.value = false; |
|
|
|
resetForm(); |
|
|
|
|
|
|
|
if (result.data && result.data.id) { |
|
|
|
designIframeUrl.value = import.meta.env.VITE_APP_API_URL + |
|
|
|
`/warm-flow-ui/index.html?id=${result.data.id}&disabled=false&Authorization=Bearer ` + |
|
|
|
useUserStore().getToken + |
|
|
|
'&clientid=' + import.meta.env.VITE_APP_CLIENT_ID; |
|
|
|
designVisible.value = true; |
|
|
|
} |
|
|
|
message.success('操作成功'); |
|
|
|
emits('reloadList'); |
|
|
|
onClose(); |
|
|
|
} catch (err) { |
|
|
|
smartSentry.captureError(err); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
visible.value = false; |
|
|
|
resetForm(); |
|
|
|
emit('reloadList'); |
|
|
|
} catch (e) { |
|
|
|
smartSentry.captureError(e); |
|
|
|
} finally { |
|
|
|
submitLoading.value = false; |
|
|
|
SmartLoading.hide(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
defineExpose({ |
|
|
|
show, |
|
|
|
}); |
|
|
|
function closeDesign() { |
|
|
|
designVisible.value = false; |
|
|
|
emit('reloadList'); |
|
|
|
} |
|
|
|
|
|
|
|
defineExpose({ getFormData, validate, show }); |
|
|
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
<style scoped> |
|
|
|
/* 关键优化点:覆盖表单项和表格边距 */ |
|
|
|
.listenerItem :deep() .ant-form-item { |
|
|
|
margin-top: 5px !important; |
|
|
|
margin-bottom: 5px !important; |
|
|
|
:deep(.Tabs) { |
|
|
|
margin-top: -20px; |
|
|
|
box-shadow: none; |
|
|
|
border-bottom: 0; |
|
|
|
} |
|
|
|
:deep(.Tabs .ant-tabs__content) { |
|
|
|
display: none; |
|
|
|
} |
|
|
|
:deep(.Tabs .ant-tabs__tab.ant-tabs__tab-active) { |
|
|
|
margin-left: 0; |
|
|
|
border-top: 1px solid var(--ant-border-color); |
|
|
|
margin-top: 0; |
|
|
|
} |
|
|
|
.dialogForm { |
|
|
|
border-top: 0; |
|
|
|
padding: 15px; |
|
|
|
width: 1000px; |
|
|
|
margin: 50px auto; |
|
|
|
} |
|
|
|
:deep(.listenerItem .ant-form-item-label) { |
|
|
|
float: none; |
|
|
|
display: inline-block; |
|
|
|
text-align: left; |
|
|
|
} |
|
|
|
.listenerItem :deep() .ant-table { |
|
|
|
margin-top: 5px !important; |
|
|
|
margin-bottom: 5px !important; |
|
|
|
:deep(.listenerItem .ant-form-item-control) { |
|
|
|
margin-left: 0 !important; |
|
|
|
} |
|
|
|
</style> |