123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <template>
- <div class="panel-tab__content">
- <el-table :data="elementPropertyList" max-height="240" border fit show-overflow-tooltip>
- <el-table-column label="序号" width="50px" type="index" />
- <el-table-column label="属性名" prop="name" min-width="100px" />
- <el-table-column label="属性值" prop="value" min-width="100px" />
- <el-table-column label="操作" width="90px">
- <template v-slot="{ row, $index }">
- <el-button link type="" @click="openAttributesForm(row, $index)">编辑</el-button>
- <el-divider direction="vertical" />
- <el-button link type="" style="color: #ff4d4f" @click="removeAttributes(row, $index)">移除</el-button>
- </template>
- </el-table-column>
- </el-table>
- <div class="element-drawer__button">
- <el-button type="primary" @click="openAttributesForm(null, -1)">添加属性</el-button>
- </div>
- <el-dialog v-model="propertyFormModelVisible" title="属性配置" width="600px" append-to-body destroy-on-close>
- <el-form :model="propertyForm" label-width="80px" ref="attributeFormRef" @submit.prevent>
- <el-form-item label="属性名:" prop="name">
- <el-input v-model="propertyForm.name" clearable />
- </el-form-item>
- <el-form-item label="属性值:" prop="value">
- <el-input v-model="propertyForm.value" clearable />
- </el-form-item>
- </el-form>
- <template v-slot:footer>
- <el-button @click="propertyFormModelVisible = false">取 消</el-button>
- <el-button type="primary" @click="saveAttribute">确 定</el-button>
- </template>
- </el-dialog>
- </div>
- </template>
- <script>
- export default {
- name: "ElementProperties",
- props: {
- id: String,
- type: String
- },
- inject: {
- prefix: "prefix",
- width: "width"
- },
- data() {
- return {
- elementPropertyList: [],
- propertyForm: {},
- editingPropertyIndex: -1,
- propertyFormModelVisible: false
- };
- },
- watch: {
- id: {
- immediate: true,
- handler(val) {
- val && val.length && this.resetAttributesList();
- }
- }
- },
- methods: {
- resetAttributesList() {
- this.bpmnElement = window.bpmnInstances.bpmnElement;
- this.otherExtensionList = []; // 其他扩展配置
- this.bpmnElementProperties =
- this.bpmnElement.businessObject?.extensionElements?.values?.filter((ex) => {
- if (ex.$type !== `${this.prefix}:Properties`) {
- this.otherExtensionList.push(ex);
- }
- return ex.$type === `${this.prefix}:Properties`;
- }) ?? [];
- // 保存所有的 扩展属性字段
- this.bpmnElementPropertyList = this.bpmnElementProperties.reduce((pre, current) => pre.concat(current.values), []);
- // 复制 显示
- this.elementPropertyList = JSON.parse(JSON.stringify(this.bpmnElementPropertyList ?? []));
- },
- openAttributesForm(attr, index) {
- this.editingPropertyIndex = index;
- this.propertyForm = index === -1 ? {} : JSON.parse(JSON.stringify(attr));
- this.propertyFormModelVisible = true;
- this.$nextTick(() => {
- if (this.$refs["attributeFormRef"]) this.$refs["attributeFormRef"].clearValidate();
- });
- },
- removeAttributes(attr, index) {
- this.$confirm("确认移除该属性吗?", "提示", {
- confirmButtonText: "确 认",
- cancelButtonText: "取 消"
- })
- .then(() => {
- this.elementPropertyList.splice(index, 1);
- this.bpmnElementPropertyList.splice(index, 1);
- // 新建一个属性字段的保存列表
- const propertiesObject = window.bpmnInstances.moddle.create(`${this.prefix}:Properties`, {
- values: this.bpmnElementPropertyList
- });
- this.updateElementExtensions(propertiesObject);
- this.resetAttributesList();
- })
- .catch(() => console.info("操作取消"));
- },
- saveAttribute() {
- const { name, value } = this.propertyForm;
- console.log(this.bpmnElementPropertyList);
- if (this.editingPropertyIndex !== -1) {
- window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement, this.bpmnElementPropertyList[this.editingPropertyIndex], {
- name,
- value
- });
- } else {
- // 新建属性字段
- const newPropertyObject = window.bpmnInstances.moddle.create(`${this.prefix}:Property`, { name, value });
- // 新建一个属性字段的保存列表
- const propertiesObject = window.bpmnInstances.moddle.create(`${this.prefix}:Properties`, {
- values: this.bpmnElementPropertyList.concat([newPropertyObject])
- });
- this.updateElementExtensions(propertiesObject);
- }
- this.propertyFormModelVisible = false;
- this.resetAttributesList();
- },
- updateElementExtensions(properties) {
- const extensions = window.bpmnInstances.moddle.create("bpmn:ExtensionElements", {
- values: this.otherExtensionList.concat([properties])
- });
- window.bpmnInstances.modeling.updateProperties(this.bpmnElement, {
- extensionElements: extensions
- });
- }
- }
- };
- </script>
|