田源
2024-05-25 fc31bda418c337ba9d3650186b8f1547ba9c5ad0
Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue
@@ -1,6 +1,7 @@
<template>
  <div>
    <div v-if="this.crudArrayFlag" class="app" style="display: flex;flex-wrap: wrap; display: inline-block">
    <div v-if="this.crudArrayFlag" class="app"
         style="display: flex;flex-wrap: wrap; display: inline-block;height: 80px">
      <el-button-group>
        <!--新增-->
        <span v-if="permissionList.busineStatus">
@@ -276,8 +277,8 @@
      </el-dialog>
      <!--        全屏编辑-->
      <el-dialog :before-close="escEdit" :visible.sync="attrEditVisible" append-to-body fullscreen="true">
        <attrCrud :ProData="this.ProData" :attrFlagChiledren="this.attrFlag" :crudArrayFlag="this.crudArrayFlag"
                  :editOpenFlag="editOpenFlag" :editStyleFlag="editStyleFlag"
        <attrCrud :ProData="this.ProData" :attrFlagChiledren="this.attrFlag" :btnAuthList="btnAuthList"
                  :crudArrayFlag="this.crudArrayFlag" :editOpenFlag="editOpenFlag" :editStyleFlag="editStyleFlag"
                  @editCloseChildren="editClose"></attrCrud>
      </el-dialog>
      <!--      组合规则-->
@@ -318,89 +319,111 @@
        :referConfigOption="referConfigOption"
        @setReferConfigValue="setReferConfigValue"
      ></refer-config-dialog>
      <!--近义词查询规则      -->
      <el-dialog :visible.sync="synonymVisible" append-to-body title="近义词查询规则">
        <avue-crud v-loading="sysonymLoading" :data="synonymData" :option="synonymOption" @selection-change="sysChange">
          <template slot="lcStatus" slot-scope="{row}">
            <el-tag v-if="row.lcStatus === 'Released'" type="success">启用</el-tag>
            <el-tag v-else type="danger">停用</el-tag>
          </template>
        </avue-crud>
        <div slot="footer" class="dialog-footer">
          <el-button type="info" @click="sysClear">清空</el-button>
          <el-button type="primary" @click="sysnonymSubmit">确定</el-button>
          <el-button @click="sysnonymCancel">取消</el-button>
        </div>
      </el-dialog>
    </div>
      <el-table v-if="this.crudArrayFlag"
                ref="referAttrCrud"
                v-loading="loading"
                :data="ProData"
                :height="this.tableHeight"
                :header-cell-style="{background:'#FAFAFA',color:'#505050'}"
                border
                style="width: 100%"
                @select="selectHandle"
                @cell-click="handleCellClicks"
                @selection-change="selectionChange"
                @row-click="rowClick"
    <el-table v-if="this.crudArrayFlag"
              ref="referAttrCrud"
              v-loading="loading"
              :data="ProData"
              :header-cell-style="{background:'#FAFAFA',color:'#505050'}"
              :height="this.tableHeight"
              border
              style="width: 100%"
              @select="selectHandle"
              @cell-click="handleCellClicks"
              @selection-change="selectionChange"
              @row-click="rowClick"
    >
      <el-table-column
        :fixed="!editStyleFlag ? 'left' : undefined"
        type="selection" width="55">
      </el-table-column>
      <!--<el-table-column fixed label="序号" type="index" width="55"></el-table-column>-->
      <el-table-column v-for="(item,index) in this.option.column" v-if="item.edit !='referName'"
                       :key="item.id"
                       :fixed="!editStyleFlag ? item.fixed : undefined"
                       :formatter="formAttr"
                       :label="item.label"
                       :prop="item.prop"
                       :show-overflow-tooltip="true"
                       :sortable="item.sortable"
                       :width="item.width||(item.label.length >=4 ?'160':item.label.length==3 ?'130':'100')"
                       align="center"
      >
        <el-table-column
          :fixed="!editStyleFlag ? 'left' : undefined"
          type="selection" width="55">
        </el-table-column>
        <!--<el-table-column fixed label="序号" type="index" width="55"></el-table-column>-->
        <el-table-column v-for="(item,index) in this.option.column" v-if="item.edit !='referName'"
                         :key="item.id"
                         :fixed="!editStyleFlag ? item.fixed : undefined"
                         :formatter="formAttr"
                         :label="item.label"
                         :prop="item.prop"
                         :show-overflow-tooltip="true"
                         :sortable="item.sortable"
                         :width="item.width||(item.label.length >=4 ?'160':item.label.length==3 ?'130':'100')"
                         align="center"
        >
          <template slot-scope="{ row }">
            <el-input
              v-if="editingRows === row && editShows== item.prop && item.prop != 'codeDateFormat' && (item.edit == 'text'  ||item.edit == 'refer' )"
              v-show="!AddCellFlag"
              :ref="'input' + row.oid"
              v-model="row[item.prop]"
              @blur="saveRows(row)"
            ></el-input>
            <el-input-number v-if="editingRows === row && editShows== item.prop && item.edit == 'number'"
                             v-show="!AddCellFlag"
                             v-model="row[item.prop]"
                             :style="{width:(item.width-10)+'px'}"
                             controls-position="right"
                             size="small" @blur="saveRows"></el-input-number>
            <el-select v-if="editingRows === row && editShows== item.prop && item.edit == 'select' " slot="prepend" :clearable="true"
                       v-model="row[item.prop]" allow-create default-first-option
                       filterable v-show="!AddCellFlag"
                       @blur="selectChangeHandler(item.editConfig,index)">
              <el-option
                v-for="optionItem in item.data"
                :key="optionItem.dictValue"
                :label="optionItem.dictValue"
                :value="optionItem.dictValue">
              </el-option>
            </el-select>
            <el-switch
              v-if="item.edit === 'switch'" v-model="row[item.prop]" :disabled="!editOpenFlag" active-value="true" v-show="!AddCellFlag"
              inactive-value="false">
            </el-switch>
            <span v-else>{{ row[item.prop] }}</span>
          </template>
        </el-table-column>
        <el-table-column
          fixed="right"
          label="操作"
          width="70">
          <template slot-scope="scope">
            <el-button
              size="small"
              type="text"
              @click.native.prevent="CrudRowDel(scope.$index)">
              移除
            </el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
        <template slot-scope="{ row }">
          <el-input
            v-if="editingRows === row && editShows== item.prop && item.prop != 'codeDateFormat' && (item.edit == 'text'  ||item.edit == 'refer' )"
            v-show="!AddCellFlag"
            :ref="'input' + row.oid"
            v-model="row[item.prop]"
            @blur="saveRows(row)"
          ></el-input>
          <el-input-number v-if="editingRows === row && editShows== item.prop && item.edit == 'number'"
                           v-show="!AddCellFlag"
                           v-model="row[item.prop]"
                           :style="{width:(item.width-10)+'px'}"
                           controls-position="right"
                           size="small" @blur="saveRows"></el-input-number>
          <el-select v-if="editingRows === row && editShows== item.prop && item.edit == 'select' " v-show="!AddCellFlag"
                     slot="prepend"
                     v-model="row[item.prop]" :clearable="true" allow-create
                     default-first-option filterable
                     @blur="selectChangeHandler(item.editConfig,index)">
            <el-option
              v-for="optionItem in item.data"
              :key="optionItem.dictValue"
              :label="optionItem.dictValue"
              :value="optionItem.dictValue">
            </el-option>
          </el-select>
          <el-switch
            v-if="item.edit === 'switch'" v-model="row[item.prop]" :disabled="!editOpenFlag" active-value="true"
            inactive-value="false">
          </el-switch>
          <span v-else>{{ row[item.prop] }}</span>
        </template>
      </el-table-column>
      <el-table-column
        fixed="right"
        label="操作"
        width="70">
        <template slot-scope="scope">
          <el-button
            size="small"
            type="text"
            @click.native.prevent="CrudRowDel(scope.$index)">
            移除
          </el-button>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script>
import {AttrByBtm, gridCodeClassifyTemplateAttr, batchAddSave, copyto, listByFlag} from '@/api/template/templateAttr'
import {
  AttrByBtm,
  gridCodeClassifyTemplateAttr,
  batchAddSave,
  copyto,
  listByFlag,
  codeSynonym
} from '@/api/template/templateAttr'
import {getList} from "@/api/refer/table";
import func from "@/util/func";
import {getCurrentInstance} from "vue";
@@ -451,6 +474,9 @@
      type: Boolean,
      default: false
    },
    btnAuthList: {
      type: Array
    }
  },
  watch: {
    crudOid: {
@@ -515,6 +541,48 @@
  },
  data() {
    return {
      sysSelectData: [],
      sysonymLoading: false,
      synonymOption: {
        addBtn: false,
        editBtn: false,
        delBtn: false,
        refreshBtn: false,
        columnBtn: false,
        menu: false,
        selection: true,
        column: [
          {
            label: '编码',
            prop: 'id',
            align: 'center'
          },
          {
            label: '名称',
            prop: 'name',
            align: 'center'
          },
          {
            label: '源值',
            prop: 'sourceValue',
            align: 'center'
          },
          {
            label: '同义词',
            prop: 'synonymValue',
            align: 'center'
          },
          {
            label: '启停状态',
            prop: 'lcStatus',
            align: 'center',
            slot: true
          },
        ]
      },
      synonymData: [],
      //近义词查询规则
      synonymVisible: false,
      //表格高度
      dynamicHeight: '',
      // 保存单元格状态
@@ -808,7 +876,7 @@
          },
          {
            label: "只读",
            prop: "readonlyFlag",
            prop: "readOnlyFlag",
          },
          {
            label: "列表排序",
@@ -1107,8 +1175,10 @@
        indexClassName: "序号",
        indexLabelClassName: '序号',
        index: true,
        indexFixed:false,
        selectionFixed:false,
        indexFixed: false,
        selectionFixed: false,
        columnBtn: false,
        refreshBtn: false,
        border: true,
        addBtn: false,
        menu: false,
@@ -1284,6 +1354,12 @@
            edit: "switch"
          },
          {
            label: '近义词查询规则',
            prop: 'sysonymRuleOidsText',
            cell: false,
            edit: 'refer'
          },
          {
            label: "相似查重属性",
            prop: "sameRepeatAttrFlag",
            width: 110,
@@ -1310,7 +1386,7 @@
          },
          {
            label: "只读",
            prop: "readonlyFlag",
            prop: "readOnlyFlag",
            cell: false,
            edit: "switch"
          },
@@ -1322,7 +1398,7 @@
          },
          {
            label: "多行文本",
            prop: "textareaFlag",
            prop: "textAreaFlag",
            cell: false,
            edit: "switch"
          },
@@ -1537,13 +1613,13 @@
        value: 'tableDisplayFlag',
        label: '列表显示'
      }, {
        value: 'readonlyFlag',
        value: 'readOnlyFlag',
        label: '只读'
      }, {
        value: 'sortAttrFlag',
        label: '列表排序'
      }, {
        value: 'textareaFlag',
        value: 'textAreaFlag',
        label: '多行文本'
      }, {
        value: 'imageFlag',
@@ -1558,20 +1634,20 @@
    ...mapGetters(["permission"]),
    permissionList() {
      return {
        busineStatus: this.vaildData(this.permission.classifyTree.attr_add, false),
        fullscreenStatus: this.vaildData(this.permission.classifyTree.attr_view_edit, false),
        ruleStatus: this.vaildData(this.permission.classifyTree.attr_rule, false),
        attrStatus: this.vaildData(this.permission.classifyTree.attr_group, false),
        saveStatus: this.vaildData(this.permission.classifyTree.attr_save, false),
        resetStatus: this.vaildData(this.permission.classifyTree.attr_reset, false),
        injectStatus: this.vaildData(this.permission.classifyTree.attr_inject, false),
        isShowStatus: this.vaildData(this.permission.classifyTree.attr_formrule, false),
        enumStatus: this.vaildData(this.permission.classifyTree.attr_enum, false),
        cascadStatus: this.vaildData(this.permission.classifyTree.attr_parentcode, false),
        syncStatus: this.vaildData(this.permission.classifyTree.attr_sync, false),
        applicationStatus: this.vaildData(this.permission.classifyTree.attr_application, false),
        orderStatus: this.vaildData(this.permission.classifyTree.attr_sort, false),
        removeStatus: this.vaildData(this.permission.classifyTree.attr_delete, false),
        busineStatus: this.vaildData(this.btnAuthList.attr_add, false),
        fullscreenStatus: this.vaildData(this.btnAuthList.attr_view_edit, false),
        ruleStatus: this.vaildData(this.btnAuthList.attr_rule, false),
        attrStatus: this.vaildData(this.btnAuthList.attr_group, false),
        saveStatus: this.vaildData(this.btnAuthList.attr_save, false),
        resetStatus: this.vaildData(this.btnAuthList.attr_reset, false),
        injectStatus: this.vaildData(this.btnAuthList.attr_inject, false),
        isShowStatus: this.vaildData(this.btnAuthList.attr_formrule, false),
        enumStatus: this.vaildData(this.btnAuthList.attr_enum, false),
        cascadStatus: this.vaildData(this.btnAuthList.attr_parentcode, false),
        syncStatus: this.vaildData(this.btnAuthList.attr_sync, false),
        applicationStatus: this.vaildData(this.btnAuthList.attr_application, false),
        orderStatus: this.vaildData(this.btnAuthList.attr_sort, false),
        removeStatus: this.vaildData(this.btnAuthList.attr_delete, false),
      }
    },
    attrOids() {
@@ -1592,7 +1668,7 @@
      if (this.editStyleFlag) {
        return '800px'
      } else {
        return 'calc(100vh - 595px)'
        return 'calc(100vh - 602px)'
      }
    }
  },
@@ -1606,6 +1682,35 @@
    })
  },
  methods: {
    //近义词查询规则取消
    sysnonymCancel() {
      this.synonymVisible = false;
    },
    //近义词查询规则确定
    sysnonymSubmit() {
      if (this.sysSelectData.length <= 0) {
        this.$message.warning('请至少选择一条数据!')
      } else {
        const newArray = this.sysSelectData.map(obj => obj.oid);
        const newString = newArray.join(',');
        const newArrayName = this.sysSelectData.map(obj => obj.name);
        const newStringName = newArrayName.join(',')
        this.$set(this.CurrentCell, 'sysonymRuleOids', newString)
        //text
        this.$set(this.CurrentCell, 'sysonymRuleOidsText', newStringName)
        this.$set(this.CurrentCell, 'sysonymRuleOidsData', this.sysSelectData)
        this.AddCellFlag = true;
        this.synonymVisible = false;
      }
    },
    sysClear(){
      this.CurrentCell.sysonymRuleOidsText = "";
      this.CurrentCell.sysonymRuleOidsData = "";
      this.AddCellFlag = true;
    },
    sysChange(row) {
      this.sysSelectData = row;
    },
    //新增搜索
    AddFindHandler() {
      if (this.SelectValue == 'id') {
@@ -1718,7 +1823,10 @@
            attrTableWidth: 120,
            ts: ""
          })
          this.ProData.push(JSON.parse(JSON.stringify(this.busineAddList)))
          // 将英文编号转换为小写
          let {id, ...res} = this.busineAddList;
          this.busineAddList = {id: id.toLowerCase(), ...res};
          this.ProData.push(JSON.parse(JSON.stringify(this.busineAddList)));
        }
      })
      this.addVisible = false;
@@ -1867,6 +1975,7 @@
    //表格行编辑
    handleCellClicks(row, column) {
      if (this.editOpenFlag) {
        this.AddCellFlag = false;
        this.editingRows = row;
        this.editShows = column.property;
        this.rowOid = row.oid;
@@ -1932,6 +2041,17 @@
            if (this.CurrentCell.attributeGroup !== '') {
              this.attrModel = this.CurrentCell.attributeGroup
            }
          },
          sysonymRuleOidsText: () => {
            this.sysonymLoading = true
            codeSynonym('1', '-1', 'Released').then(res => {
              this.synonymData = res.data.data.records;
              this.sysonymLoading = false;
            }).catch(() => {
              this.$message.error('请检查控制台错误信息!')
            })
            this.synonymVisible = true;
          }
        };
@@ -2064,16 +2184,24 @@
      const regex = new RegExp(this.rulesData.ruleRowBds);
      if (regex.test(this.RulesForm.TestContent)) {
        this.$message.success('校验成功')
      } else {
        this.$message.error('校验失败')
      }
    },
    //点击分类注入按钮
    injectBtn() {
      if (this.attrSelectList.length > 1) {
        this.$message.warning('只能选择一条模板数据')
      } else if (this.attrSelectList.length < 1) {
        return;
      }
      if (this.attrSelectList.length < 1) {
        this.$message.warning('请选择一条模板数据')
      } else if (this.attrSelectList.length === 1) {
        return;
        ;
      }
      if (this.attrSelectList.length === 1) {
        this.injectVisible = true;
        return;
      }
    },
    //分类注入保存
@@ -2227,9 +2355,16 @@
</script>
<style lang="scss" scoped>
/deep/ .el-table__fixed-body-wrapper {
  .el-table__body {
    padding-bottom: 15px;
  }
}
//固定列高度
/deep/ .el-table__fixed {
  height: calc(100vh - 612px) !important;
  height: calc(100vh - 618px) !important;
}
///deep/ .el-table__fixed[v-if='editStyleFlag'] {