| <template> | 
|     <div class="node-filter-container"> | 
|         <!-- <div class="add-btn"> | 
|           <span class="name">条件设置</span>  <el-button @click="addItem" link><i>+</i>添加字段</el-button> | 
|         </div> --> | 
|         <!-- {{ $store.getters.data().flowTable.WorkTable }} --> | 
|         <div class="ef-node-pmenu-item" style="display: flex;"> | 
|             <div style="flex:1;"> | 
|                 <span class="name"><i class="el-icon-news"></i>条件设置</span> | 
|             </div> | 
|             <div><el-button link size="small" @click="addItem" type="primary" v-if="!disabled"> | 
|                     + 添加字段</el-button></div> | 
|         </div> | 
|   | 
|         <div> | 
|             <table> | 
|                 <tr> | 
|                     <td>字段</td> | 
|                     <td style="width:90px">条件</td> | 
|                     <td class="value">值</td> | 
|                     <td style="width: 40px;" v-if="!disabled">操作</td> | 
|                 </tr> | 
|                 <tr v-for="(item, index) in filters" :key="index"> | 
|   | 
|                     <td><el-select @change="(field) => { fieldChange(field, index) }" size="small" v-model="item.field" | 
|                             placeholder="请选择" :disabled="disabled"> | 
|                             <el-option v-for="data in fieldsOptions" :key="data.field" :label="data.name" | 
|                                 :value="data.field" /> | 
|                         </el-select></td> | 
|                     <td><el-select size="small" v-model="item.filterType" placeholder="请选择" :disabled="disabled"> | 
|                             <el-option v-for="data in filterType" :key="data.value" :label="data.name" | 
|                                 :value="data.value" /> | 
|                         </el-select></td> | 
|                     <td> | 
|                         <template v-if="item.data"> | 
|                             <el-select v-if="item.data.length >= 300" multiple size="small" v-model="item.value" | 
|                                 placeholder="请选择"> | 
|                                 <el-option v-for="data in item.data" :key="data.key" :label="data.value" | 
|                                     :value="data.key" :disabled="disabled" /> | 
|                             </el-select> | 
|                             <el-select-v2 style="width: 100%;" v-else multiple size="small" :options="item.data" | 
|                                 v-model="item.value" placeholder="请选择" :disabled="disabled"> | 
|                             </el-select-v2> | 
|                         </template> | 
|                         <el-input v-else v-model="item.value" size="small" :disabled="disabled"></el-input> | 
|                     </td> | 
|                     <td @click="delItem(index)" class="item-del" v-if="!disabled"><i class="el-icon-delete"></i></td> | 
|                 </tr> | 
|             </table> | 
|         </div> | 
|         <!-- <div> | 
|             <label>自定义sql</label> | 
|             <div><el-input type="textarea" v-model="customSql"></el-input></div> | 
|         </div> --> | 
|     </div> | 
| </template> | 
|   | 
| <script> | 
| let _this = this; | 
| export default { | 
|     props: { | 
|         tableName: { | 
|             type: String, | 
|             default: "" | 
|         }, | 
|         filters: { | 
|             type: Array, | 
|             default: () => { | 
|                 return [] | 
|             } | 
|         }, | 
|         disabled:{ | 
|             typeof:Boolean, | 
|             default:false | 
|         } | 
|     }, | 
|     data() { | 
|         return { | 
|             filter: this.$store.getters.data().flowTable, | 
|             customSql: "", | 
|             value: "", | 
|             //{ field: "名称", value: "", filterType: "=" }, | 
|             //  filters: [], | 
|             fieldsOptions: [ | 
|   | 
|             ], | 
|             t: [], | 
|             filterType: [{ name: "等于(=)", value: "=" }, | 
|             { name: "不等于(!=)", value: "!=" }, | 
|             { name: "大于(>)", value: ">" }, | 
|             { name: "大于等于(>=)", value: ">=" }, | 
|             { name: "小于(<)", value: "<" }, | 
|             { name: "小于等于(<=)", value: "<=" }, | 
|             { name: "包括(in)", value: "in" }, | 
|             // { name: "不包括(not in)", value: "notin" }, | 
|             { name: "模糊匹配(like)", value: "like" }, | 
|             { name: "或者(or)", value: "or" } | 
|             ] | 
|         } | 
|     }, | 
|     methods: { | 
|         delItem(index) { | 
|             this.$confirm('确认要删除字配置条件配置吗?', '警告', { | 
|                 confirmButtonText: '确定', | 
|                 cancelButtonText: '取消', | 
|                 type: 'warning', | 
|                 center: true | 
|             }).then(() => { | 
|                 this.filters.splice(index, 1); | 
|             }); | 
|         }, | 
|         addItem() { | 
|             this.filters.push({ field: "", value: "", filterType: "", data: null }) | 
|         }, | 
|         fieldChange(field, index) { | 
|             let option = this.fieldsOptions.find(x => { return x.field == field }); | 
|             this.filters[index].field = option.field; | 
|             this.filters[index].value = option.data ? [] : null; | 
|             this.filters[index].data = option.data;; | 
|         }, | 
|         convertOptions(result) { | 
|   | 
|         }, | 
|         getOptions(tableName) { | 
|             const url = 'api/Sys_WorkFlow/getFields?table=' + tableName; | 
|             this.http.post(url, {}, false).then(result => { | 
|                 result.forEach(c => { | 
|                     if (c.data && c.data.length < 300) { | 
|                         c.data = c.data.map(x => { | 
|                             return { | 
|                                 value: x.key, | 
|                                 label: x.value, | 
|                                 key: x.key | 
|                             } | 
|                         }) | 
|                     } | 
|                 }) | 
|                 _this.fieldsOptions = result; | 
|             }) | 
|         } | 
|     }, | 
|     watch: { | 
|         'filter.WorkTable': { | 
|             handler(newvalue, oldvalue) { | 
|                 if (newvalue) { | 
|                     this.getOptions(newvalue); | 
|                 } else { | 
|                     //  this.fieldsOptions.splice(0) | 
|                 } | 
|             } | 
|         } | 
|         // deep:true, | 
|         // filter(newVal,oldVal){ | 
|         //    alert(1) | 
|         // } | 
|     }, | 
|     created() { | 
|         _this = this; | 
|     }, | 
| } | 
| </script> | 
|   | 
| <style lang="less" scoped> | 
| .node-filter-container { | 
|     margin-top: 15px; | 
|   | 
|     table { | 
|         width: 100%; | 
|         padding-left: 6px; | 
|   | 
|         td { | 
|             font-size: 13px; | 
|             padding: 5px; | 
|   | 
|         } | 
|   | 
|         tr:first-child { | 
|             font-size: 12px; | 
|             font-weight: bolder; | 
|         } | 
|   | 
|         .item-del { | 
|             text-align: center; | 
|             color: rgb(226, 4, 4); | 
|             cursor: pointer; | 
|         } | 
|   | 
|         .value { | 
|             width: 150px; | 
|         } | 
|     } | 
|   | 
|     .add-btn { | 
|         text-align: right; | 
|         padding-right: 10px; | 
|         border-bottom: 1px solid #e8e8e8; | 
|         padding-bottom: 5px; | 
|     } | 
|   | 
|     .node-filter-item {} | 
| }</style> |