mirror of
https://gitee.com/hzchunfen/erp.git
synced 2025-11-30 22:20:45 +00:00
171 lines
5.2 KiB
Vue
171 lines
5.2 KiB
Vue
<!-- 搜索表单 -->
|
||
<template>
|
||
<div class="ces-form">
|
||
<section class="header" v-if="Handle">
|
||
<el-button type="primary" size="mini" @click="addTable">新增</el-button>
|
||
<el-button type="danger" size="mini" @click="del">删除</el-button>
|
||
</section>
|
||
<el-form :rules="formTable.rules" :model="formTable" ref="ruleForm">
|
||
<el-table
|
||
:data="formTable.data"
|
||
border
|
||
@select="select"
|
||
@select-all="selectAll"
|
||
:header-cell-class-name="headRuleStyle"
|
||
:header-cell-style="{backgroundColor: '#f5f7fa',fontWeight: 'bold',color: '#909399'}">
|
||
<el-table-column v-if="isSelection" type="selection" align="center"></el-table-column>
|
||
<el-table-column
|
||
v-for="item in formTable.cols"
|
||
:size="size"
|
||
:key="item.id"
|
||
:prop="item.prop"
|
||
:label="item.label"
|
||
:width="item.width"
|
||
:align="item.align||'center'"
|
||
:fixed="item.fixed"
|
||
:show-overflow-tooltip="item.overflow">
|
||
<template slot-scope="scope">
|
||
<el-form-item :prop="`data.${scope.$index}.${[item.prop]}`" :rules="formTable.rules[item.prop]" >
|
||
<!-- 默认 -->
|
||
<span
|
||
v-if="!item.type"
|
||
:style="item.itemStyle && item.itemStyle(scope.row)"
|
||
:class="item.itemClass && item.item.itemClass(scope.row)"
|
||
>{{(item.formatter && item.formatter(scope.row)) || scope.row[item.prop] || '-'}}</span>
|
||
<!-- 输入框 -->
|
||
<el-input v-if="item.type==='input'" v-model="scope.row[item.prop]" :size="item.size || size"></el-input>
|
||
<!-- 下拉框 -->
|
||
<el-select
|
||
v-if="item.type==='select'"
|
||
v-model="scope.row[item.prop]"
|
||
:size="item.size || size"
|
||
filterable
|
||
:multiple="item.multiple"
|
||
:placeholder="item.placeholder || '请选择'"
|
||
@change="item.change && item.change(scope.row[item.prop])"
|
||
@focus="item.focus && item.focus(scope.row[item.prop])"
|
||
:disabled="item.isDisabled && item.isDisabled(scope.row[item.prop])"
|
||
@remove-tag="item.remove && item.remove(scope.row[item.prop])">
|
||
<el-option v-for="op in item.options" :label="op.label" :value="op.value" :key="op.value"></el-option>
|
||
</el-select>
|
||
<!-- 级联省市区 -->
|
||
<el-cascader
|
||
v-if="item.type==='cascader'"
|
||
:placeholder="item.placeholder || '请选择'"
|
||
:options="item.options || []"
|
||
v-model="scope.row[item.prop]"
|
||
:size="item.size || size"
|
||
@focus="item.focus && item.focus(scope.row[item.prop])"
|
||
filterable
|
||
clearable
|
||
:show-all-levels="item.showAll && item.showAll(scope.row[item.prop])"
|
||
:props="{ expandTrigger: 'hover',checkStrictly: item.checkStrictly && item.checkStrictly(scope.row[item.prop]),value:item.value?item.value:'vaule' }"
|
||
@change="item.change && item.change(scope.row[item.prop])"
|
||
ref="cascaderAddr">
|
||
</el-cascader>
|
||
<span v-if="item.type==='button'">
|
||
<el-button
|
||
v-for="(btn,idx) in item.btnList"
|
||
:key="idx"
|
||
:size="item.size || size"
|
||
:disabled="btn.disabled && btn.disabled(scope.row)"
|
||
:type="btn.type"
|
||
:icon="btn.icon"
|
||
@click="btn.handle(scope.row,scope.$index)"
|
||
>{{btn.label}}</el-button>
|
||
</span>
|
||
</el-form-item>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</el-form>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
props: {
|
||
// 表格型号:mini,medium,small
|
||
size: {
|
||
type: String,
|
||
default: "mini",
|
||
},
|
||
formTable: {
|
||
type: Object,
|
||
default: () => {}
|
||
},
|
||
isSelection: {
|
||
type: Boolean,
|
||
default: true,
|
||
},
|
||
Handle: {
|
||
type: Boolean,
|
||
default: true,
|
||
},
|
||
addTable:Function
|
||
},
|
||
name: 'FormTable',
|
||
data() {
|
||
return {
|
||
checkBox:[]
|
||
};
|
||
},
|
||
created() {
|
||
|
||
},
|
||
methods: {
|
||
select(rows, row) {
|
||
this.$emit("select", rows, row);
|
||
this.checkBox = rows
|
||
},
|
||
// 全选
|
||
selectAll(rows) {
|
||
this.$emit("select", rows);
|
||
this.checkBox = rows
|
||
},
|
||
del(){
|
||
if(this.checkBox&&this.checkBox.length>0){
|
||
let arr = this.formTable.data.filter(item => !this.checkBox.some(ele => ele === item))
|
||
this.checkBox = []
|
||
this.formTable.data = arr
|
||
}else{
|
||
this.$message({
|
||
message: '请先选择好需要删除的表格',
|
||
type: 'warning'
|
||
});
|
||
}
|
||
},
|
||
headRuleStyle(row, rowIndex){
|
||
if(row.column.property){
|
||
let idx = row.row.findIndex(item=>{
|
||
return item.property == Object.keys(this.formTable.rules)[0]
|
||
})
|
||
// console.log(row.column.property)
|
||
// console.log(Object.keys(this.formTable.rules)[row.columnIndex-idx])
|
||
if(Object.keys(this.formTable.rules)[row.columnIndex-idx] == row.column.property && row.column.property && Object.keys(this.formTable.rules).length!=1){
|
||
return 'rules';
|
||
}else if(Object.keys(this.formTable.rules).toString() == row.column.property){
|
||
return 'rules';
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
<style scoped>
|
||
.header{
|
||
background-color: #f5f7fa;
|
||
font-weight:bold ;
|
||
padding: 10px 10px;
|
||
border: 1px solid #EBEEF5;
|
||
border-bottom: none;
|
||
}
|
||
.el-form >>> .rules .cell:before{
|
||
content: '*';
|
||
color: #f00;
|
||
margin-right: 5px;
|
||
display: inline-block;
|
||
}
|
||
/* .el-form >>>.el-form-item {margin-bottom: 0;} */
|
||
</style>
|