qlrCommonTable.vue 8.24 KB
<!--
 * @Description:
 * @Autor: renchao
 * @LastEditTime: 2023-09-21 16:02:53
-->
<template>
  <div>
    <lb-table
      :column="column"
      :pagination="false"
      :key="key"
      :heightNumSetting="true"
      :minHeight="150"
      :data="tableDataList">
    </lb-table>
    <addQlr
      v-model="dialog"
      :details="details"
      :showButton="showButton"
      @updateDetail="handleupdateDetail" />
  </div>
</template>
<script>
  import { mapGetters } from "vuex";
  import addQlr from "./dialog/addQlr.vue";
  import { getIdCardInfo } from '@/utils/operation.js'
  export default {
    components: {
      addQlr,
    },
    computed: {
      ...mapGetters(["dictData"]),
    },
    props: {
      tableData: {
        type: Array,
        default: function () {
          return [];
        },
      },
      ableOperation: {
        type: Boolean,
        default: false,
      },
      gyfs: {
        type: String,
        default: "1",
      },
    },
    data () {
      return {
        key: 0,
        dataIndex: 0,
        dialog: false,
        isaddupdate: false,
        showButton: this.ableOperation,
        details: {},
        tableDataList: [],
        InformationTable: [
          {
            width: "50",
            renderHeader: (h, scope) => {
              return (
                <div>
                  {" "}
                  {!this.ableOperation ? (
                    "序号"
                  ) : (
                    <i
                      class="el-icon-plus pointer"
                      onClick={() => {
                        this.addClick();
                      }}
                    ></i>
                  )}
                </div>
              );
            },
            render: (h, scope) => {
              return (
                <div>
                  {!this.ableOperation ? (
                    <span>{scope.$index + 1}</span>
                  ) : (
                    <i
                      class="el-icon-minus pointer"
                      onClick={() => {
                        this.deleClick(scope.$index, scope.row);
                      }}
                    ></i>
                  )}
                </div>
              );
            },
          },
          {
            label: "身份证读卡器",
            align: "center",
            render: (h, scope) => {
              return (
                <el-button
                  type="text"
                  icon="el-icon-tickets"
                  disabled={!this.ableOperation}
                  onClick={() => {
                    this.readClick(scope.row)
                  }}
                >
                  读取
                </el-button>
              );
            },
          },
          {
            prop: "qlrmc",
            label: "姓名/名称",
          },
          {
            prop: "zjzl",
            label: "证件种类",
            render: (h, scope) => {
              return (
                this.dictData["A30"] &&
                this.dictData["A30"].map((option) => {
                  if (option.dcode == scope.row.zjzl) {
                    return <span>{option.dname}</span>;
                  }
                })
              );
            },
          },
          {
            prop: "zjh",
            label: "证件号",
          },
          {
            prop: "dh",
            label: "联系电话",
          },
          {
            label: "操作",
            render: (h, scope) => {
              return (
                <div>
                  {!this.showButton ? (
                    <el-button
                      icon="el-icon-view"
                      type="text"
                      onClick={() => {
                        this.queryViewClick(scope.$index, scope.row);
                      }}
                    >
                      {" "}
                      查看
                    </el-button>
                  ) : (
                    <el-button
                      icon="el-icon-edit-outline"
                      type="text"
                      onClick={() => {
                        this.editClick(scope.$index, scope.row);
                      }}
                    >
                      编辑
                    </el-button>
                  )}
                </div>
              );
            },
          },
        ],
        column: [],
      };
    },
    watch: {
      tableData: {
        handler: function (val, oldVal) {
          let that = this;
          this.$nextTick(() => {
            if (val.length == 0 || !val) {
              that.tableDataList = _.cloneDeep([
                // {
                //   qlrmc: "",
                //   dlrzjlx: "",
                //   dlrzjh: "",
                //   fr: "",
                // },
              ]);
            } else {
              that.tableDataList = _.cloneDeep(val);
            }
          });
        },
        immediate: true,
        deep: true,
      },
      gyfs: {
        handler (newVal, oldValue) {
          let dataList = _.cloneDeep(this.InformationTable);
          if (newVal == 0) {
            this.column = _.cloneDeep(dataList);
            this.tableDataList = _.cloneDeep(this.tableData);
          } else if (newVal == "1" || newVal == "3") {
            this.column = dataList;
          } else {
            this.column = _.cloneDeep(dataList);
            this.column.splice(2, 0, {
              prop: "qlbl",
              label: "份数",
            });
          }
        },
        immediate: true,
        deep: true,
      },
    },
    methods: {
      /**
       * @handleupdateDetail: 删除
       * @param {*} value
       * @author: renchao
       */
      handleupdateDetail (value) {
        if (this.isaddupdate) {
          if (!_.isEqual(value, this.tableData)) {
            this.tableDataList[this.tableDataList.length] = _.cloneDeep(value);
            this.$emit("upDateQlrxxList", this.tableDataList);
          }
        } else {
          if (!_.isEqual(value, this.tableData)) {
            this.tableDataList[this.dataIndex] = _.cloneDeep(value);
            this.$emit("upDateQlrxxList", this.tableDataList);
          }
        }
        this.key++;
      },
      /**
       * @description: 新增
       * @author: renchao
       */
      addClick () {
        if (this.gyfs == "0" && this.tableDataList.length > 0) {
          this.$message.warning("当前共有方式为单独所有,无法添加多个权利人");
        } else {
          this.dialog = true;
          this.isaddupdate = true;
        }
      },
      /**
       * @description: 删除
       * @param {*} index
       * @param {*} row
       * @author: renchao
       */
      deleClick (index, row) {
        this.tableDataList.splice(index, 1);
        this.$emit("upDateQlrxxList", this.tableDataList);
      },
      /**
       * @description: 身份证读取
       * @author: renchao
       */
      readClick (row) {
        getIdCardInfo().then(res => {
          if (res.data.code == 0) {
            let data = res.data.IDCardInfo
            row.qlrmc = data.name
            row.zjzl = '1'
            row.zjh = data.cardID
            row.xb = data.sexCode
            row.dz = data.address
            row.fzjg = data.issueOrgan
            this.$message({
              message: '读取成功!',
              type: 'success'
            })
          } else {
            this.$message({
              message: res.data.message,
              type: 'warning'
            })
          }
        })
      },
      /**
       * @description: 身份证读取按钮禁用
       * @author: renchao
       */
      onreadClick () {
        this.$message.error("此阶段不可编辑");
      },
      // 修改
      /**
       * @description: 修改
       * @param {*} index
       * @param {*} row
       * @author: renchao
       */
      editClick (index, row) {
        this.details.gyfs = this.gyfs
        this.dataIndex = index;
        this.details = row;
        this.dialog = true;
        this.isaddupdate = false;
      },
      /**
       * @description: queryViewClick
       * @param {*} index
       * @param {*} row
       * @author: renchao
       */
      queryViewClick (index, row) {
        this.dialog = true;
        this.details = row;
      },
    },
  };
</script>
<style scoped lang="scss"></style>