jiangping
2025-06-06 a2299a6d4a6f99e9c11132138f5d3e9ec68f03ea
admin/src/views/contract/contractList.vue
@@ -0,0 +1,155 @@
<template>
  <div class="main_app">
    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear">
      <template #btns>
<!--        <el-button @click="exportData">导出</el-button>-->
      </template>
    </QueryForm>
    <div class="mt10">
      <el-button @click="$refs.ContractEditRef.open('创建合同')" icon="el-icon-plus" type="primary">新建</el-button>
    </div>
    <el-table v-loading="loading" :data="list" stripe>
      <el-table-column prop="renterName" label="客户名称" min-width="100" show-overflow-tooltip />
      <el-table-column prop="startDate" label="开始日期" min-width="100" show-overflow-tooltip />
      <el-table-column prop="endDate" label="结束日期" min-width="100" show-overflow-tooltip />
        <el-table-column prop="zlFirstPrice" label="租赁单价" min-width="100" show-overflow-tooltip>
            <template slot-scope="{row}">
                <div style="display: flex; align-items: center;">
                    <span>{{row.zlFirstPrice || row.wyFirstPrice}}</span>
                    <span>{{row.zlFirstCircleStr || row.wyFirstCircleStr}}</span>
                </div>
            </template>
        </el-table-column>
        <el-table-column label="租赁面积" min-width="100" show-overflow-tooltip>
            <template slot-scope="{row}">
                {{row.totalArea}}㎡
            </template>
        </el-table-column>
      <el-table-column prop="signDate" label="签订日" min-width="100" show-overflow-tooltip />
      <el-table-column prop="code" label="合同编号" min-width="100" show-overflow-tooltip />
      <el-table-column label="合同状态" min-width="90" fixed="right" show-overflow-tooltip>
        <template slot-scope="{row}">
          <span class="primaryColor" v-if="row.status === 0">待执行</span>
          <span class="green" v-if="row.status === 1">正常执行中</span>
          <span class="gary" v-if="row.status === 2">已到期</span>
          <span class="gary" v-if="row.status === 3">退租结算中</span>
          <span class="gary" v-if="row.status === 4">已退租</span>
        </template>
      </el-table-column>
      <el-table-column label="操作" min-width="90" fixed="right" show-overflow-tooltip>
        <template v-slot="scope">
          <span class="primaryColor cu" @click="handleDetail(scope.row.id)">查看详情</span>
        </template>
      </el-table-column>
    </el-table>
    <div class="mt20">
      <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
    </div>
    <ContractDetail ref="ContractDetailRef" />
    <ContractEdit ref="ContractEditRef" @success="getList(1)" />
  </div>
</template>
<script>
import Pagination from '@/components/common/Pagination'
import QueryForm from '@/components/common/QueryForm'
import ContractDetail from './components/contractDetail'
import ContractEdit from './components/contractEdit.vue'
import { fetchList } from '@/api/contract'
import dayjs from 'dayjs'
import duration from 'dayjs/plugin/duration'
dayjs.extend(duration)
export default {
  components: {
    Pagination,
    QueryForm,
    ContractEdit,
    ContractDetail
  },
  data () {
    return {
      loading: false,
      pagination: {
        pageSize: 10,
        page: 1,
        total: 0
      },
      filters: {},
      list: [],
      total: 0,
      queryFormConfig: {
        formItems: [
          {
            filed: 'renterName',
            type: 'input',
            label: '客户名称'
          },
          {
            filed: 'code',
            type: 'input',
            label: '合同编号'
          },
          {
            filed: 'status',
            type: 'select',
            label: '合同状态',
            options: [
              { value: 0, label: '待执行' },
              { value: 1, label: '正常执行中' },
              { value: 2, label: '已到期' },
              { value: 3, label: '退租结算中' },
              { value: 4, label: '已退租' },
            ]
          },
          {
            filed: 'selDate',
            type: 'datetimerange',
            label: '合同日期',
            placeholder: '合同日期'
          }
        ],
        online: true
      }
    }
  },
  created () {
    this.getList()
  },
  methods: {
    handleDetail (id) {
      this.$refs.ContractDetailRef.open('合同详情', id)
    },
    getList (page) {
      const { pagination, filters } = this
      this.loading = true
      fetchList({
        model: {
          ...filters
        },
        sorts: [{ direction: 'DESC', property: 'param1' }],
        capacity: pagination.pageSize,
        page: page || pagination.page
      }).then(res => {
        this.loading = false
        this.list = res.records || []
        this.pagination.total = res.total || 0
      }, () => {
        this.loading = false
      })
    },
    clear () {
      this.filters = {}
      this.pagination.pageSize = 10
      this.pagination.page = 1
      this.getList()
    },
    handleSizeChange (capacity) {
      this.pagination.pageSize = capacity
    },
    exportData () {
    }
  }
}
</script>