dts-shop/admin-ui/src/views/mall/keyword.vue

231 lines
8.1 KiB
Vue

<template>
<div class="app-container">
<!-- 查询和其他操作 -->
<div class="filter-container">
<el-input v-model="listQuery.keyword" clearable size="mini" class="filter-item" style="width: 200px;" placeholder="请输入关键字"/>
<el-input v-model="listQuery.url" clearable size="mini" class="filter-item" style="width: 200px;" placeholder="请输入跳转链接"/>
<el-button v-permission="['GET /admin/keyword/list']" size="mini" class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">查找</el-button>
<el-button v-permission="['POST /admin/keyword/create']" size="mini" class="filter-item" type="primary" icon="el-icon-edit" @click="handleCreate">添加</el-button>
<el-button :loading="downloadLoading" size="mini" class="filter-item" type="warning" icon="el-icon-download" @click="handleDownload">导出</el-button>
</div>
<!-- 查询结果 -->
<el-table v-loading="listLoading" :data="list" size="small" element-loading-text="正在查询中。。。" border fit highlight-current-row>
<el-table-column align="center" width="150px" label="关键词ID" prop="id" sortable/>
<el-table-column align="center" min-width="100px" label="关键词" prop="keyword"/>
<el-table-column align="center" min-width="300px" label="跳转链接" prop="url"/>
<el-table-column align="center" min-width="100px" label="是否推荐" prop="isHot">
<template slot-scope="scope">
<el-tag :type="scope.row.isHot ? 'success' : 'error' ">{{ scope.row.isHot ? '是' : '否' }}</el-tag>
</template>
</el-table-column>
<el-table-column align="center" min-width="100px" label="是否默认" prop="isDefault">
<template slot-scope="scope">
<el-tag :type="scope.row.isDefault ? 'success' : 'error' ">{{ scope.row.isDefault ? '是' : '否' }}</el-tag>
</template>
</el-table-column>
<el-table-column align="center" label="操作" width="250" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-permission="['POST /admin/keyword/update']" type="primary" size="mini" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button v-permission="['POST /admin/keyword/delete']" type="danger" size="mini" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
<!-- 添加或修改对话框 -->
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
<el-form ref="dataForm" :rules="rules" :model="dataForm" status-icon label-position="left" label-width="100px" style="width: 400px; margin-left:50px;">
<el-form-item label="关键词" prop="keyword">
<el-input v-model="dataForm.keyword"/>
</el-form-item>
<el-form-item label="跳转链接" prop="url">
<el-input v-model="dataForm.url"/>
</el-form-item>
<el-form-item label="是否推荐" prop="isHot">
<el-select v-model="dataForm.isHot" placeholder="请选择">
<el-option :value="true" label="推荐"/>
<el-option :value="false" label="普通"/>
</el-select>
</el-form-item>
<el-form-item label="是否默认" prop="isDefault">
<el-select v-model="dataForm.isDefault" placeholder="请选择">
<el-option :value="true" label="默认"/>
<el-option :value="false" label="非默认"/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">取消</el-button>
<el-button v-if="dialogStatus=='create'" type="primary" @click="createData">确定</el-button>
<el-button v-else type="primary" @click="updateData">确定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listKeyword, createKeyword, updateKeyword, deleteKeyword } from '@/api/business/keyword'
import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
export default {
name: 'Keyword',
components: { Pagination },
data() {
return {
list: undefined,
total: 0,
listLoading: true,
listQuery: {
page: 1,
limit: 20,
keyword: undefined,
url: undefined,
sort: 'add_time',
order: 'desc'
},
dataForm: {
id: undefined,
keyword: undefined,
url: undefined,
isHot: undefined,
isDefault: undefined
},
dialogFormVisible: false,
dialogStatus: '',
textMap: {
update: '编辑',
create: '创建'
},
rules: {
keyword: [{ required: true, message: '关键词不能为空', trigger: 'blur' }]
},
downloadLoading: false
}
},
created() {
this.getList()
},
methods: {
getList() {
this.listLoading = true
listKeyword(this.listQuery).then(response => {
this.list = response.data.data.items
this.total = response.data.data.total
this.listLoading = false
}).catch(() => {
this.list = []
this.total = 0
this.listLoading = false
})
},
handleFilter() {
this.listQuery.page = 1
this.getList()
},
resetForm() {
this.dataForm = {
id: undefined,
keyword: undefined,
url: undefined,
isHot: undefined,
isDefault: undefined
}
},
handleCreate() {
this.resetForm()
this.dialogStatus = 'create'
this.dialogFormVisible = true
this.$nextTick(() => {
this.$refs['dataForm'].clearValidate()
})
},
createData() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
createKeyword(this.dataForm).then(response => {
this.list.unshift(response.data.data)
this.dialogFormVisible = false
this.$notify.success({
title: '成功',
message: '创建成功'
})
}).catch(response => {
this.$notify.error({
title: '失败',
message: response.data.errmsg
})
})
}
})
},
handleUpdate(row) {
this.dataForm = Object.assign({}, row)
this.dialogStatus = 'update'
this.dialogFormVisible = true
this.$nextTick(() => {
this.$refs['dataForm'].clearValidate()
})
},
updateData() {
this.$refs['dataForm'].validate((valid) => {
if (valid) {
updateKeyword(this.dataForm).then(() => {
for (const v of this.list) {
if (v.id === this.dataForm.id) {
const index = this.list.indexOf(v)
this.list.splice(index, 1, this.dataForm)
break
}
}
this.dialogFormVisible = false
this.$notify.success({
title: '成功',
message: '更新成功'
})
}).catch(response => {
this.$notify.error({
title: '失败',
message: response.data.errmsg
})
})
}
})
},
handleDelete(row) {
deleteKeyword(row).then(response => {
this.$notify.success({
title: '成功',
message: '删除成功'
})
const index = this.list.indexOf(row)
this.list.splice(index, 1)
}).catch(response => {
this.$notify.error({
title: '失败',
message: response.data.errmsg
})
})
},
handleDownload() {
this.downloadLoading = true
import('@/vendor/Export2Excel').then(excel => {
const tHeader = ['关键词ID', '关键词', '跳转链接', '是否推荐', '是否默认']
const filterVal = ['id', 'keyword', 'url', 'isHot', 'isDefault']
excel.export_json_to_excel2(tHeader, this.list, filterVal, '关键词设置')
this.downloadLoading = false
})
}
}
}
</script>