w-vue-middle
Version:
统一公共服务组件
209 lines (205 loc) • 6.14 kB
JavaScript
/*
* @Author: Jason Liu
* @Date: 2023-01-10 10:20:24
* @Desc:
*/
export default {
name: "fieldSettings",
props: {
value: {
type: Array,
default: () => {
return [];
},
},
loading: {
type: Boolean,
default: false,
},
type: {
type: Number,
default: 0,
},
dimensionList: { //维度列表
type: Array,
default: () => {
return [];
},
},
talbeKey: {
type: Number,
default: 0,
},
},
data() {
return {
tables: this.value,
dataList: [],
dataKey: this.talbeKey,
choiceDimensionList: []
};
},
created() {
this.parseDimension();
this.parseTable();
},
methods: {
/**
* @Author: Jason Liu
* @description: 获取表组信息行效果
*/
getTablesRow({ row }) {
if (row.isTable) {
if (row.type == "2") {
return "compound_column";
} else {
return "table_column";
}
} else {
if (!row.visible) {
return "column_hide";
} else {
return "";
}
}
},
/**
* @Author: Jason Liu
* @description: 合并单元格
*/
rowspanMethod({ row, _rowIndex, column, visibleData }) {
if (column.type == "seq" || column.field == "option") {
return { rowspan: 1, colspan: 1 };
} else if (row.isTable) {
if (column.field == "code") {
return { rowspan: 1, colspan: 14 };
} else {
return { rowspan: 0, colspan: 0 };
}
} else {
return { rowspan: 1, colspan: 1 };
}
},
/**
* @Author: Jason Liu
* @description: 显示复合字段
*/
viewCompoundField(row = undefined) {
this.$emit("compound", row);
},
/**
* @Author: Jason Liu
* @description: 删除表格column信息
*/
deleteTableColumns(row) {
let index = this.dataList.findIndex(col => { return col.id == row.id });
if (index > -1) {
this.dataList.splice(index, 1);
}
this.$emit("delete", row);
},
/**
* @Author: Jason Liu
* @description: 查询表内容信息
*/
search(val) {
const xTable = this.$refs.table;
const column = xTable.getColumnByField("code");
// 修改第二个选项为勾选状态
const option = column.filters[0];
option.data = val;
option.checked = !!val;
// 修改条件之后,需要手动调用 updateData 处理表格数据
xTable.updateData();
},
/**
* @Author: Jason Liu
* @description: 搜索表格列信息
*/
filterName({ option, row }) {
let val = option.data.toLocaleLowerCase();
let name = row.name || "";
let code = row.code || "";
if (name) {
name = row.name.toLocaleLowerCase();
}
if (code) {
code = row.code.toLocaleLowerCase();
}
return (name.indexOf(val) > -1) || (code.indexOf(val) > -1)
},
/**
* @Author: Jason Liu
* @description: 标准化表格
*/
parseTable() {
this.dataList = [];
this.tables.forEach((table) => {
table.columns.forEach((column) => {
if (!column.parentId) {
column.parentId = table.tableId;
}
column.visible = !!column.visible;
this.dataList.push(column);
});
this.dataList.push({
...table,
isTable: true,
});
});
this.dataKey++;
},
/**
* @Author: Jason Liu
* @description: 标准化维度
*/
parseDimension() {
this.choiceDimensionList = this.dimensionList.map(item => {
let column = item.modelTable.columns[0];
return {
key: item.id,
name: `${item.name}`,
options: [{
value: `${item.id}.${item.modelTable.id}.${column.code}`,
label: `${column.name}`,
}]
}
})
},
/**
* @Author: Jason Liu
* @description: 设置维度key内容
*/
setDimensionKey(row) {
this.dimensionList.forEach(item => {
let column = item.modelTable.columns[0];
if (`${item.id}.${item.modelTable.id}.${column.code}` == row.dimkey) {
row.dimName = `${item.name}.${column.name}`;
}
})
},
/**
* @Author: Jason Liu
* @description: 字段追加脚本
*/
viewScript(row) {
this.$emit("changeScript", row)
}
},
watch: {
value(val) {
this.tables = this.value;
this.parseTable();
this.parseDimension();
},
tables(val) {
this.$emit("input", val);
},
dimensionList() {
this.parseDimension();
},
talbeKey() {
this.parseTable();
}
},
};