MrShi
2024-11-13 b496da6315314d9bd048ac2214d8bc95d2f1df02
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<template>
    <TableLayout :permissions="['business:contract:query']">
        <!-- 搜索表单 -->
        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
            <el-form-item label="合同名称" prop="name">
                <el-input v-model="searchForm.name" placeholder="请输入合同名称" @keypress.enter.native="search"></el-input>
            </el-form-item>
            <el-form-item label="合同类型" prop="signType">
                <el-select v-model="searchForm.signType" placeholder="请选择" @change="search">
                    <el-option label="平台-商户" :value="0"></el-option>
                    <el-option label="平台-企业" :value="1"></el-option>
                    <el-option label="商户-企业" :value="2"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="状态" prop="queryStatus">
                <el-select v-model="searchForm.queryStatus" placeholder="请选择" @change="search">
                    <el-option label="待平台签署" :value="0"></el-option>
                    <el-option label="待商户签署" :value="1"></el-option>
                    <el-option label="待企业签署" :value="2"></el-option>
                    <el-option label="已完成" :value="3"></el-option>
                    <el-option label="已取消" :value="4"></el-option>
                    <el-option label="已关闭" :value="5"></el-option>
                </el-select>
            </el-form-item>
            <section>
                <el-button type="primary" @click="search">搜索</el-button>
                <el-button @click="reset">重置</el-button>
            </section>
        </el-form>
        <!-- 表格和分页 -->
        <template v-slot:table-wrap>
            <ul class="toolbar" v-permissions="['business:contract:create']" v-if="userInfo.type === 0">
                <li><el-button type="primary" @click="$refs.operaContractWindow.open('新建合同信息表')" icon="el-icon-plus" v-permissions="['business:contract:create']">新建</el-button></li>
            </ul>
            <el-table
                v-loading="isWorking.search"
                :data="tableData.list"
                stripe
            >
                <el-table-column label="序号" width="80px">
                    <template slot-scope="scope">
                        <span>{{scope.$index + 1}}</span>
                    </template>
                </el-table-column>
                <el-table-column prop="name" label="合同名称" min-width="100px"></el-table-column>
                <el-table-column label="合同类型" min-width="100px">
                    <template slot-scope="{row}">
                        <template v-if="row.signType === 0">平台-商户</template>
                        <template v-else-if="row.signType === 1">平台-企业</template>
                        <template v-else-if="row.signType === 2">商户-企业</template>
                    </template>
                </el-table-column>
                <el-table-column prop="companyName" label="甲乙方名称" min-width="100px">
                    <template slot-scope="{row}">
                        {{ row.partyCompanyName }} / {{ row.companyName }}
                    </template>
                </el-table-column>
                <el-table-column label="合同开始时间" min-width="100px">
                    <template slot-scope="{row}">
                        {{ row.startTime }} - {{ row.endTime }}
                    </template>
                </el-table-column>
                <el-table-column label="状态" min-width="100px">
                    <template slot-scope="{row}">
                        <template v-if="row.queryStatus === 0">待平台签署</template>
                        <template v-else-if="row.queryStatus === 1">待商户签署</template>
                        <template v-else-if="row.queryStatus === 2">待企业签署</template>
                        <template v-else-if="row.queryStatus === 3">已完成</template>
                        <template v-else-if="row.queryStatus === 4">已取消</template>
                        <template v-else-if="row.queryStatus === 5">已关闭</template>
                    </template>
                </el-table-column>
                <el-table-column
                    v-if="containPermissions(['business:contract:update', 'business:contract:delete'])"
                    label="操作"
                    min-width="220"
                    fixed="right"
                >
                    <template slot-scope="{row}">
                        <el-button type="text" @click="$refs.operaContractDescWindow.open('合同详情', row.id)" icon="el-icon-view">查看详情</el-button>
                        <template v-if="userInfo.type === 0">
                            <template v-if="(row.signType === 0 && row.status === 0) || (row.signType === 1 && row.status === 0)">
                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">签署</el-button>
                            </template>
                        </template>
                        <template v-if="userInfo.type === 1">
                            <template v-if="(row.signType === 1 && row.status === 1) || (row.signType === 2 && row.status === 1)">
                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">签署</el-button>
                            </template>
                        </template>
                        <template v-if="userInfo.type === 2">
                            <template v-if="(row.signType === 0 && row.status === 1) || (row.signType === 2 && row.status === 0)">
                                <el-button type="text" @click="sign(row)" icon="el-icon-document-checked">签署</el-button>
                            </template>
                        </template>
                        <el-button type="text" icon="el-icon-document-remove" v-if="row.status === 0" @click="cancelHT(row.id)">取消</el-button>
                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:contract:delete']" v-if="row.status === 4">删除</el-button>
                    </template>
                </el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange"
                @current-change="handlePageChange"
                :pagination="tableData.pagination"
            >
            </pagination>
        </template>
        <!-- 新建/修改 -->
        <OperaContractWindow ref="operaContractWindow" @success="handlePageChange"/>
        <!--    详情    -->
        <OperaContractDescWindow ref="operaContractDescWindow" />
    </TableLayout>
</template>
 
<script>
  import BaseTable from '@/components/base/BaseTable'
  import TableLayout from '@/layouts/TableLayout'
  import Pagination from '@/components/common/Pagination'
  import OperaContractWindow from '@/components/business/OperaContractWindow'
  import OperaContractDescWindow from '@/components/business/OperaContractDescWindow'
  import { cancel, getSignLink } from '@/api/business/contract'
  import { mapState } from 'vuex'
  export default {
    name: 'Contract',
    extends: BaseTable,
    components: { TableLayout, Pagination, OperaContractWindow, OperaContractDescWindow },
    computed: {
      ...mapState(['userInfo'])
    },
    data () {
      return {
        // 搜索
        searchForm: {
          name: '',
          signType: '',
          queryStatus: ''
        }
      }
    },
    created () {
      this.config({
        module: '合同信息表',
        api: '/business/contract',
        'field.id': 'id',
        'field.main': 'id'
      })
      this.search()
    },
    methods: {
      // 签署
      sign(row) {
        getSignLink(row.id)
          .then(res => {
            window.open(res)
          })
      },
      // 取消合同
      cancelHT(id) {
        this.$confirm('确认取消当前合同吗?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          cancel(id).then(res => {
            this.search()
          })
        }).catch(() => {
 
        });
      }
    }
  }
</script>