valuationModel.vue 7 KB
<script lang="ts" setup name="valuationModel">
import TableTools from "@/components/Tools/table_tools.vue";
import { commonPageConfig } from '@/components/PageNav/index';
import {
  getValuationModelList,
  deleteValuationMode
} from '@/api/modules/dataEntry';
import { TableColumnWidth } from "@/utils/enum";
import { changeNum } from "@/utils/common";
import useEntryStore from "@/store/modules/dataEntry";

const entryStore = useEntryStore();

const router = useRouter()

const { proxy } = getCurrentInstance() as any;

/** 头部搜索框配置 */
const searchItemList = ref([
  {
    type: "input",
    label: "",
    field: "damName",
    default: "",
    placeholder: "数据产品名称",
    clearable: true,
  },
  {
    type: "select",
    label: "",
    field: "evaluateMethod",
    default: "",
    placeholder: "评估方法",
    options: [
      { label: "成本法", value: "1" },
      { label: "收益法", value: "2" },
    ],
    clearable: true,
  }
]);

/** 分页及搜索传参信息配置。 */
const page = ref({
  ...commonPageConfig,
  damName: '',
  evaluateMethod: ''
});

const tableSelectRowData: any = ref([]);

const tableInfo = ref({
  id: 'valuation-model-table',
  multiple: true,
  fields: [
    { label: "序号", type: "index", width: TableColumnWidth.INDEX, align: "center" },
    { label: "数据产品名称", field: "damName", width: 160 },
    {
      label: "评估方法", field: "evaluateMethod", width: 140, getName: (scope) => {
        return scope.row.evaluateMethod == '1' ? '成本法' : '收益法';
      }
    },
    { label: "评估基准日", field: "evaluateBaseDate", width: TableColumnWidth.DATE, },
    {
      label: "评估价值(元)", field: "damValuation", width: 160, align: 'right'
    },
    { label: "修改人", field: "updateUserName", width: TableColumnWidth.USERNAME },
    { label: "修改时间", field: "updateTime", width: TableColumnWidth.DATETIME },
  ],
  data: [],
  page: {
    type: "normal",
    rows: 0,
    ...page.value,
  },
  actionInfo: {
    label: "操作",
    type: "btn",
    width: 140,
    fixed: 'right',
    btns: (scope) => {
      let btnsArr: any = [];
      btnsArr.push({
        label: "编辑", value: "edit", click: (scope) => {
          router.push({
            name: 'valuationModelCreate',
            query: {
              guid: scope.row.guid,
              name: scope.row.damName
            }
          })
        }
      });
      btnsArr.push({
        label: "删除", value: "delete", click: (scope) => {
          proxy.$openMessageBox('此操作将永久删除, 是否继续?', () => {
            deleteValuationMode([scope.row.guid]).then((res: any) => {
              if (res.code == proxy.$passCode) {
                page.value.curr = 1;
                getTableData();
                proxy.$ElMessage({
                  type: "success",
                  message: "删除成功",
                });
              } else {
                proxy.$ElMessage({
                  type: 'error',
                  message: res.msg,
                })
              }
            })
          }, () => {
            proxy.$ElMessage.info("已取消删除");
          })
        }
      });
      return btnsArr
    },
  },
  loading: false
})

const toSearch = (val: any, clear: boolean = false) => {
  if (clear) {
    searchItemList.value.map((item) => (item.default = ""));
    page.value.damName = '';
    page.value.evaluateMethod = "";
  } else {
    page.value.damName = val.damName;
    page.value.evaluateMethod = val.evaluateMethod;
  }
  getTableData();
};

const getTableData = () => {
  tableInfo.value.loading = true
  getValuationModelList({
    pageIndex: page.value.curr,
    pageSize: page.value.limit,
    damName: page.value.damName,
    evaluateMethod: page.value.evaluateMethod
  }).then((res: any) => {
    if (res.code == proxy.$passCode) {
      const data = res.data || {}
      tableInfo.value.data = data.records || []
      tableInfo.value.page.limit = data.pageSize
      tableInfo.value.page.curr = data.pageIndex
      tableInfo.value.page.rows = data.totalRows
    } else {
      proxy.$ElMessage({
        type: 'error',
        message: res.msg,
      })
    }
    tableInfo.value.loading = false
  }).catch(() => {
    tableInfo.value.loading = false
  })
};

const tablePageChange = (info) => {
  page.value.curr = Number(info.curr);
  page.value.limit = Number(info.limit);
  tableInfo.value.page.curr = page.value.curr;
  tableInfo.value.page.limit = page.value.limit;
  getTableData();
};

const tableSelectionChange = (val) => {
  tableSelectRowData.value = val;
};

const newCreate = () => {
  router.push({
    name: 'valuationModelCreate'
  });
}

const batchDelete = () => {
  if (tableSelectRowData.value.length == 0) {
    proxy.$ElMessage({
      type: 'error',
      message: '请选择需要删除的数据',
    })
    return
  }
  proxy.$openMessageBox('此操作将永久删除, 是否继续?', () => {
    deleteValuationMode(tableSelectRowData.value.map(d => d.guid)).then((res: any) => {
      if (res.code == proxy.$passCode) {
        page.value.curr = 1;
        getTableData();
        proxy.$ElMessage.success('删除成功');
      } else {
        proxy.$ElMessage.error(res.msg);
      }
    })
  }, () => {
    proxy.$ElMessage.info("已取消删除");
  })
}

onBeforeMount(() => {
  // toSearch({})
})

onActivated(() => {
  if (entryStore.isRefresh) {
    getTableData();
    entryStore.setIsRefresh(false);
  }
})

</script>

<template>
  <div class="container_wrap">
    <div class="table_tool_wrap">
      <!-- 头部搜索 -->
      <TableTools :searchItems="searchItemList" :searchId="'data-source-search'" @search="toSearch" />
      <div class="tools_btns">
        <el-button type="primary" @click="newCreate">新建</el-button>
        <el-button @click="batchDelete">批量删除</el-button>
      </div>
    </div>
    <div class="v-tip">
      <div class="tip-icon"></div>
      <div class="tip-des">
        本工具提供的估值评估结果仅为初步测算参考,基于用户输入参数及预设的模型生成,不代表最终估值金额。实际估值金额则需专业的资产评估机构进行评估确认后方可生效。
      </div>
    </div>
    <div class="table_panel_wrap">
      <Table :tableInfo="tableInfo" @tablePageChange="tablePageChange" @tableSelectionChange="tableSelectionChange" />
    </div>
  </div>
</template>

<style lang="scss" scoped>
.table_tool_wrap {
  width: 100%;
  height: 84px !important;
  padding: 0 8px;

  .tools_btns {
    padding: 0px 0 0;
  }
}

.v-tip {
  display: flex;
  height: 40px;
  align-items: center;
  background: #FFFBF2;
  border: 1px solid rgba(255, 241, 212, 1);
  border-radius: 4px;
  margin: 0px 8px 8px 8px;

  .tip-icon {
    width: 16px;
    height: 16px;
    background: url('@/assets/icons/waring.svg') no-repeat;
    background-size: 100% 100%;
    margin: 0 10px;
  }

  .tip-des {
    font-size: 14px;
    color: #FF991C;
    line-height: 20px;
    font-weight: 400;
  }
}

.table_panel_wrap {
  width: 100%;
  height: calc(100% - 132px);
  padding: 0px 8px 0;
}
</style>