Parcourir la source

1.网站管理相关代码提交

master
wangqiang il y a 2 mois
Parent
révision
aeb2201d6b

+ 44
- 0
src/api/system/article.js Voir le fichier

@@ -0,0 +1,44 @@
import request from '@/utils/request'

// 查询站点文章管理列表
export function listArticle(query) {
return request({
url: '/system/article/list',
method: 'get',
params: query
})
}

// 查询站点文章管理详细
export function getArticle(id) {
return request({
url: '/system/article/' + id,
method: 'get'
})
}

// 新增站点文章管理
export function addArticle(data) {
return request({
url: '/system/article',
method: 'post',
data: data
})
}

// 修改站点文章管理
export function updateArticle(data) {
return request({
url: '/system/article',
method: 'put',
data: data
})
}

// 删除站点文章管理
export function delArticle(id) {
return request({
url: '/system/article/' + id,
method: 'delete'
})
}

+ 44
- 0
src/api/system/articleCategory.js Voir le fichier

@@ -0,0 +1,44 @@
import request from '@/utils/request'

// 查询站点文章分类管理列表
export function listArticleCategory(query) {
return request({
url: '/system/articleCategory/list',
method: 'get',
params: query
})
}

// 查询站点文章分类管理详细
export function getArticleCategory(id) {
return request({
url: '/system/articleCategory/' + id,
method: 'get'
})
}

// 新增站点文章分类管理
export function addArticleCategory(data) {
return request({
url: '/system/articleCategory',
method: 'post',
data: data
})
}

// 修改站点文章分类管理
export function updateArticleCategory(data) {
return request({
url: '/system/articleCategory',
method: 'put',
data: data
})
}

// 删除站点文章分类管理
export function delArticleCategory(id) {
return request({
url: '/system/articleCategory/' + id,
method: 'delete'
})
}

+ 44
- 0
src/api/system/banner.js Voir le fichier

@@ -0,0 +1,44 @@
import request from '@/utils/request'

// 查询站点banner管理列表
export function listBanner(query) {
return request({
url: '/system/banner/list',
method: 'get',
params: query
})
}

// 查询站点banner管理详细
export function getBanner(id) {
return request({
url: '/system/banner/' + id,
method: 'get'
})
}

// 新增站点banner管理
export function addBanner(data) {
return request({
url: '/system/banner',
method: 'post',
data: data
})
}

// 修改站点banner管理
export function updateBanner(data) {
return request({
url: '/system/banner',
method: 'put',
data: data
})
}

// 删除站点banner管理
export function delBanner(id) {
return request({
url: '/system/banner/' + id,
method: 'delete'
})
}

+ 44
- 0
src/api/system/column.js Voir le fichier

@@ -0,0 +1,44 @@
import request from '@/utils/request'

// 查询站点栏目管理列表
export function listColumn(query) {
return request({
url: '/system/column/list',
method: 'get',
params: query
})
}

// 查询站点栏目管理详细
export function getColumn(id) {
return request({
url: '/system/column/' + id,
method: 'get'
})
}

// 新增站点栏目管理
export function addColumn(data) {
return request({
url: '/system/column',
method: 'post',
data: data
})
}

// 修改站点栏目管理
export function updateColumn(data) {
return request({
url: '/system/column',
method: 'put',
data: data
})
}

// 删除站点栏目管理
export function delColumn(id) {
return request({
url: '/system/column/' + id,
method: 'delete'
})
}

+ 44
- 0
src/api/system/product.js Voir le fichier

@@ -0,0 +1,44 @@
import request from '@/utils/request'

// 查询站点产品管理列表
export function listProduct(query) {
return request({
url: '/system/product/list',
method: 'get',
params: query
})
}

// 查询站点产品管理详细
export function getProduct(id) {
return request({
url: '/system/product/' + id,
method: 'get'
})
}

// 新增站点产品管理
export function addProduct(data) {
return request({
url: '/system/product',
method: 'post',
data: data
})
}

// 修改站点产品管理
export function updateProduct(data) {
return request({
url: '/system/product',
method: 'put',
data: data
})
}

// 删除站点产品管理
export function delProduct(id) {
return request({
url: '/system/product/' + id,
method: 'delete'
})
}

+ 44
- 0
src/api/system/productCategory.js Voir le fichier

@@ -0,0 +1,44 @@
import request from '@/utils/request'

// 查询站点产品分类管理列表
export function listProductCategory(query) {
return request({
url: '/system/productCategory/list',
method: 'get',
params: query
})
}

// 查询站点产品分类管理详细
export function getProductCategory(id) {
return request({
url: '/system/productCategory/' + id,
method: 'get'
})
}

// 新增站点产品分类管理
export function addProductCategory(data) {
return request({
url: '/system/productCategory',
method: 'post',
data: data
})
}

// 修改站点产品分类管理
export function updateProductCategory(data) {
return request({
url: '/system/productCategory',
method: 'put',
data: data
})
}

// 删除站点产品分类管理
export function delProductCategory(id) {
return request({
url: '/system/productCategory/' + id,
method: 'delete'
})
}

+ 44
- 0
src/api/system/purpose.js Voir le fichier

@@ -0,0 +1,44 @@
import request from '@/utils/request'

// 查询站点产品用途管理列表
export function listPurpose(query) {
return request({
url: '/system/purpose/list',
method: 'get',
params: query
})
}

// 查询站点产品用途管理详细
export function getPurpose(id) {
return request({
url: '/system/purpose/' + id,
method: 'get'
})
}

// 新增站点产品用途管理
export function addPurpose(data) {
return request({
url: '/system/purpose',
method: 'post',
data: data
})
}

// 修改站点产品用途管理
export function updatePurpose(data) {
return request({
url: '/system/purpose',
method: 'put',
data: data
})
}

// 删除站点产品用途管理
export function delPurpose(id) {
return request({
url: '/system/purpose/' + id,
method: 'delete'
})
}

+ 44
- 0
src/api/system/website.js Voir le fichier

@@ -0,0 +1,44 @@
import request from '@/utils/request'

// 查询站点信息列表
export function listWebsite(query) {
return request({
url: '/system/website/list',
method: 'get',
params: query
})
}

// 查询站点信息详细
export function getWebsite(id) {
return request({
url: '/system/website/' + id,
method: 'get'
})
}

// 新增站点信息
export function addWebsite(data) {
return request({
url: '/system/website',
method: 'post',
data: data
})
}

// 修改站点信息
export function updateWebsite(data) {
return request({
url: '/system/website',
method: 'put',
data: data
})
}

// 删除站点信息
export function delWebsite(id) {
return request({
url: '/system/website/' + id,
method: 'delete'
})
}

+ 450
- 0
src/views/system/article/index.vue Voir le fichier

@@ -0,0 +1,450 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="网站名称" prop="websiteName">
<el-input
v-model="queryParams.websiteName"
placeholder="请输入网站名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="queryParams.languageCode" placeholder="请选择语言编码" clearable>
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="文章标题" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入文章标题"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="发布状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择发布状态" clearable>
<el-option
v-for="dict in dict.type.zs_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="是否启用" prop="isDisabled">
<el-select v-model="queryParams.isDisabled" placeholder="请选择是否启用" clearable>
<el-option
v-for="dict in dict.type.zs_is_disabled"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>

<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:article:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:article:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:article:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:article:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>

<el-table v-loading="loading" :data="articleList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键ID" align="center" prop="id" v-if="false"/>
<el-table-column label="网站名称" align="center" prop="websiteName" />
<el-table-column label="语言编码" align="center" prop="languageCode">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_sys_language" :value="scope.row.languageCode"/>
</template>
</el-table-column>
<el-table-column label="文章标题" align="center" prop="title" />
<el-table-column label="摘要" align="center" prop="excerpt" />
<el-table-column label="文章内容" align="center" prop="content" />
<el-table-column label="封面图" align="center" prop="cover" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.cover" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="外链地址" align="center" prop="blankLink" />
<el-table-column label="图集" align="center" prop="galleryList" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.galleryList" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="文章标签" align="center" prop="articleTag" />
<el-table-column label="SEO标题" align="center" prop="seoTitle" />
<el-table-column label="SEO关键词" align="center" prop="seoKeyword" />
<el-table-column label="SEO描述" align="center" prop="seoDescripetion" />
<el-table-column label="发布状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="是否启用" align="center" prop="isDisabled">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_is_disabled" :value="scope.row.isDisabled"/>
</template>
</el-table-column>
<el-table-column label="发布时间" align="center" prop="publishTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.publishTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="更新人" align="center" prop="updateBy" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:article:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:article:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>

<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>

<!-- 添加或修改站点文章管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="网站ID" prop="websiteId">
<el-input v-model="form.websiteId" placeholder="请输入网站ID" />
</el-form-item>
<el-form-item label="网站名称" prop="websiteName">
<el-input v-model="form.websiteName" placeholder="请输入网站名称" />
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="form.languageCode" placeholder="请选择语言编码">
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="栏目ID" prop="columnId">
<el-input v-model="form.columnId" placeholder="请输入栏目ID" />
</el-form-item>
<el-form-item label="分类IDs" prop="categoryIds">
<el-input v-model="form.categoryIds" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="文章标题" prop="title">
<el-input v-model="form.title" placeholder="请输入文章标题" />
</el-form-item>
<el-form-item label="摘要" prop="excerpt">
<el-input v-model="form.excerpt" placeholder="请输入摘要" />
</el-form-item>
<el-form-item label="文章内容">
<editor v-model="form.content" :min-height="192"/>
</el-form-item>
<el-form-item label="封面图" prop="cover">
<image-upload v-model="form.cover"/>
</el-form-item>
<el-form-item label="外链地址" prop="blankLink">
<el-input v-model="form.blankLink" placeholder="请输入外链地址" />
</el-form-item>
<el-form-item label="图集" prop="galleryList">
<image-upload v-model="form.galleryList"/>
</el-form-item>
<el-form-item label="文章标签" prop="articleTag">
<el-input v-model="form.articleTag" placeholder="请输入文章标签" />
</el-form-item>
<el-form-item label="SEO标题" prop="seoTitle">
<el-input v-model="form.seoTitle" placeholder="请输入SEO标题" />
</el-form-item>
<el-form-item label="SEO关键词" prop="seoKeyword">
<el-input v-model="form.seoKeyword" placeholder="请输入SEO关键词" />
</el-form-item>
<el-form-item label="SEO描述" prop="seoDescripetion">
<el-input v-model="form.seoDescripetion" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="发布状态" prop="status">
<el-select v-model="form.status" placeholder="请选择发布状态">
<el-option
v-for="dict in dict.type.zs_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="是否启用" prop="isDisabled">
<el-select v-model="form.isDisabled" placeholder="请选择是否启用">
<el-option
v-for="dict in dict.type.zs_is_disabled"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="发布时间" prop="publishTime">
<el-date-picker clearable
v-model="form.publishTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择发布时间">
</el-date-picker>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>

<script>
import { listArticle, getArticle, delArticle, addArticle, updateArticle } from "@/api/system/article";

export default {
name: "Article",
dicts: ['zs_is_disabled', 'zs_status', 'zs_sys_language'],
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 站点文章管理表格数据
articleList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
websiteName: undefined,
languageCode: undefined,
title: undefined,
status: undefined,
isDisabled: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询站点文章管理列表 */
getList() {
this.loading = true;
listArticle(this.queryParams).then(response => {
this.articleList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
websiteId: undefined,
websiteName: undefined,
languageCode: undefined,
columnId: undefined,
categoryIds: undefined,
title: undefined,
excerpt: undefined,
content: undefined,
cover: undefined,
blankLink: undefined,
galleryList: undefined,
articleTag: undefined,
seoTitle: undefined,
seoKeyword: undefined,
seoDescripetion: undefined,
status: undefined,
isDisabled: undefined,
publishTime: undefined,
createTime: undefined,
updateTime: undefined,
createBy: undefined,
updateBy: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加站点文章管理";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getArticle(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改站点文章管理";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateArticle(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addArticle(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除站点文章管理编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delArticle(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/article/export', {
...this.queryParams
}, `article_${new Date().getTime()}.xlsx`)
}
}
};
</script>

+ 353
- 0
src/views/system/articleCategory/index.vue Voir le fichier

@@ -0,0 +1,353 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="网站名称" prop="websiteName">
<el-input
v-model="queryParams.websiteName"
placeholder="请输入网站名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="queryParams.languageCode" placeholder="请选择语言编码" clearable>
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="分类名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入分类名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>

<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:articleCategory:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-sort"
size="mini"
@click="toggleExpandAll"
>展开/折叠</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>

<el-table
v-if="refreshTable"
v-loading="loading"
:data="articleCategoryList"
row-key="id"
:default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column label="网站名称" align="center" prop="websiteName" />
<el-table-column label="语言编码" align="center" prop="languageCode">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_sys_language" :value="scope.row.languageCode"/>
</template>
</el-table-column>
<el-table-column label="分类层级" align="center" prop="level" />
<el-table-column label="分类名称" align="center" prop="name" />
<el-table-column label="分类描述" align="center" prop="descripetion" />
<el-table-column label="分类标签" align="center" prop="tag" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="更新人" align="center" prop="updateBy" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:articleCategory:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)"
v-hasPermi="['system:articleCategory:add']"
>新增</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:articleCategory:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>

<!-- 添加或修改站点文章分类管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="网站ID" prop="websiteId">
<el-input v-model="form.websiteId" placeholder="请输入网站ID" />
</el-form-item>
<el-form-item label="网站名称" prop="websiteName">
<el-input v-model="form.websiteName" placeholder="请输入网站名称" />
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="form.languageCode" placeholder="请选择语言编码">
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="父分类ID" prop="parentId">
<treeselect v-model="form.parentId" :options="articleCategoryOptions" :normalizer="normalizer" placeholder="请选择父分类ID" />
</el-form-item>
<el-form-item label="分类层级" prop="level">
<el-input v-model="form.level" placeholder="请输入分类层级" />
</el-form-item>
<el-form-item label="分类名称" prop="name">
<el-input v-model="form.name" placeholder="请输入分类名称" />
</el-form-item>
<el-form-item label="分类描述" prop="descripetion">
<el-input v-model="form.descripetion" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="分类标签" prop="tag">
<el-input v-model="form.tag" placeholder="请输入分类标签" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>

<script>
import { listArticleCategory, getArticleCategory, delArticleCategory, addArticleCategory, updateArticleCategory } from "@/api/system/articleCategory";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";

export default {
name: "ArticleCategory",
dicts: ['zs_sys_language'],
components: {
Treeselect
},
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 站点文章分类管理表格数据
articleCategoryList: [],
// 站点文章分类管理树选项
articleCategoryOptions: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 是否展开,默认全部展开
isExpandAll: true,
// 重新渲染表格状态
refreshTable: true,
// 查询参数
queryParams: {
websiteName: undefined,
languageCode: undefined,
name: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
websiteId: [
{ required: true, message: "网站ID不能为空", trigger: "blur" }
],
languageCode: [
{ required: true, message: "语言编码不能为空", trigger: "change" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询站点文章分类管理列表 */
getList() {
this.loading = true;
listArticleCategory(this.queryParams).then(response => {
this.articleCategoryList = this.handleTree(response.data, "id", "parentId");
this.loading = false;
});
},
/** 转换站点文章分类管理数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
children: node.children
};
},
/** 查询站点文章分类管理下拉树结构 */
getTreeselect() {
listArticleCategory().then(response => {
this.articleCategoryOptions = [];
const data = { id: 0, name: '顶级节点', children: [] };
data.children = this.handleTree(response.data, "id", "parentId");
this.articleCategoryOptions.push(data);
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
websiteId: null,
websiteName: null,
languageCode: null,
parentId: null,
level: null,
name: null,
descripetion: null,
tag: null,
createTime: null,
updateTime: null,
createBy: null,
updateBy: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
this.getTreeselect();
if (row != null && row.id) {
this.form.parentId = row.id;
} else {
this.form.parentId = 0;
}
this.open = true;
this.title = "添加站点文章分类管理";
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
this.getTreeselect();
if (row != null) {
this.form.parentId = row.id;
}
getArticleCategory(row.id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改站点文章分类管理";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateArticleCategory(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addArticleCategory(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除站点文章分类管理编号为"' + row.id + '"的数据项?').then(() => {
this.loading = true;
return delArticleCategory(row.id);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
}
}
};
</script>

+ 418
- 0
src/views/system/banner/index.vue Voir le fichier

@@ -0,0 +1,418 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="网站名称" prop="websiteName">
<el-input
v-model="queryParams.websiteName"
placeholder="请输入网站名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="queryParams.languageCode" placeholder="请选择语言编码" clearable>
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="标题" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入标题"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="启用状态" prop="isDisabled">
<el-select v-model="queryParams.isDisabled" placeholder="请选择启用状态" clearable>
<el-option
v-for="dict in dict.type.zs_is_disabled"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>

<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:banner:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:banner:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:banner:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:banner:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>

<el-table v-loading="loading" :data="bannerList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键ID" align="center" prop="id" v-if="false"/>
<el-table-column label="网站名称" align="center" prop="websiteName" />
<el-table-column label="语言编码" align="center" prop="languageCode">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_sys_language" :value="scope.row.languageCode"/>
</template>
</el-table-column>
<el-table-column label="图片" align="center" prop="galleryList" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.galleryList" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="位置" align="center" prop="local">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_local" :value="scope.row.local"/>
</template>
</el-table-column>
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="描述" align="center" prop="descripetion" />
<el-table-column label="链接URL" align="center" prop="hrefUrl" />
<el-table-column label="排序值" align="center" prop="sort" />
<el-table-column label="启用状态" align="center" prop="isDisabled">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_is_disabled" :value="scope.row.isDisabled"/>
</template>
</el-table-column>
<el-table-column label="轮播类型" align="center" prop="isSider">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_is_sider" :value="scope.row.isSider"/>
</template>
</el-table-column>
<el-table-column label="图片ALT文本" align="center" prop="altText" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="更新人" align="center" prop="updateBy" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:banner:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:banner:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>

<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>

<!-- 添加或修改站点banner管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="网站ID" prop="websiteId">
<el-input v-model="form.websiteId" placeholder="请输入网站ID" />
</el-form-item>
<el-form-item label="网站名称" prop="websiteName">
<el-input v-model="form.websiteName" placeholder="请输入网站名称" />
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="form.languageCode" placeholder="请选择语言编码">
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="图片" prop="galleryList">
<image-upload v-model="form.galleryList"/>
</el-form-item>
<el-form-item label="位置" prop="local">
<el-select v-model="form.local" placeholder="请选择位置">
<el-option
v-for="dict in dict.type.zs_local"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="标题" prop="title">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="描述" prop="descripetion">
<el-input v-model="form.descripetion" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="链接URL" prop="hrefUrl">
<el-input v-model="form.hrefUrl" placeholder="请输入链接URL" />
</el-form-item>
<el-form-item label="排序值" prop="sort">
<el-input v-model="form.sort" placeholder="请输入排序值" />
</el-form-item>
<el-form-item label="启用状态" prop="isDisabled">
<el-select v-model="form.isDisabled" placeholder="请选择启用状态">
<el-option
v-for="dict in dict.type.zs_is_disabled"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="轮播类型" prop="isSider">
<el-select v-model="form.isSider" placeholder="请选择轮播类型">
<el-option
v-for="dict in dict.type.zs_is_sider"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="图片ALT文本" prop="altText">
<el-input v-model="form.altText" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>

<script>
import { listBanner, getBanner, delBanner, addBanner, updateBanner } from "@/api/system/banner";

export default {
name: "Banner",
dicts: ['zs_is_disabled', 'zs_local', 'zs_is_sider', 'zs_sys_language'],
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 站点banner管理表格数据
bannerList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
websiteName: undefined,
languageCode: undefined,
title: undefined,
isDisabled: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
websiteId: [
{ required: true, message: "网站ID不能为空", trigger: "blur" }
],
languageCode: [
{ required: true, message: "语言编码不能为空", trigger: "change" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询站点banner管理列表 */
getList() {
this.loading = true;
listBanner(this.queryParams).then(response => {
this.bannerList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
websiteId: undefined,
websiteName: undefined,
languageCode: undefined,
galleryList: undefined,
local: undefined,
title: undefined,
descripetion: undefined,
hrefUrl: undefined,
sort: undefined,
isDisabled: undefined,
isSider: undefined,
altText: undefined,
createTime: undefined,
updateTime: undefined,
createBy: undefined,
updateBy: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加站点banner管理";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getBanner(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改站点banner管理";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateBanner(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addBanner(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除站点banner管理编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delBanner(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/banner/export', {
...this.queryParams
}, `banner_${new Date().getTime()}.xlsx`)
}
}
};
</script>

+ 440
- 0
src/views/system/column/index.vue Voir le fichier

@@ -0,0 +1,440 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="网站名称" prop="websiteName">
<el-input
v-model="queryParams.websiteName"
placeholder="请输入网站名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="queryParams.languageCode" placeholder="请选择语言编码" clearable>
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="栏目名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入栏目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="发布状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择发布状态" clearable>
<el-option
v-for="dict in dict.type.zs_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>

<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:column:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-sort"
size="mini"
@click="toggleExpandAll"
>展开/折叠</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>

<el-table
v-if="refreshTable"
v-loading="loading"
:data="columnList"
row-key="id"
:default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column label="网站名称" align="center" prop="websiteName" />
<el-table-column label="语言编码" align="center" prop="languageCode">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_sys_language" :value="scope.row.languageCode"/>
</template>
</el-table-column>
<el-table-column label="栏目名称" align="center" prop="name" />
<el-table-column label="栏目描述" align="center" prop="descripetion" />
<el-table-column label="栏目层级" align="center" prop="level" />
<el-table-column label="URL别名" align="center" prop="urlAlias" />
<el-table-column label="栏目类型" align="center" prop="columnType">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_column_type" :value="scope.row.columnType"/>
</template>
</el-table-column>
<el-table-column label="单页内容" align="center" prop="columnSingleContent" />
<el-table-column label="导航显示" align="center" prop="navigationDisplay">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_navigation_display" :value="scope.row.navigationDisplay"/>
</template>
</el-table-column>
<el-table-column label="导航排序" align="center" prop="navigationSort" />
<el-table-column label="外链地址" align="center" prop="blankLink" />
<el-table-column label="SEO标题" align="center" prop="seoTitle" />
<el-table-column label="SEO关键词" align="center" prop="seoKeyword" />
<el-table-column label="SEO描述" align="center" prop="seoDescripetion" />
<el-table-column label="模板ID" align="center" prop="templateId" />
<el-table-column label="发布状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="更新人" align="center" prop="updateBy" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:column:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)"
v-hasPermi="['system:column:add']"
>新增</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:column:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>

<!-- 添加或修改站点栏目管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="网站ID" prop="websiteId">
<el-input v-model="form.websiteId" placeholder="请输入网站ID" />
</el-form-item>
<el-form-item label="网站名称" prop="websiteName">
<el-input v-model="form.websiteName" placeholder="请输入网站名称" />
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="form.languageCode" placeholder="请选择语言编码">
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="栏目名称" prop="name">
<el-input v-model="form.name" placeholder="请输入栏目名称" />
</el-form-item>
<el-form-item label="栏目描述" prop="descripetion">
<el-input v-model="form.descripetion" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="父栏目ID" prop="parentId">
<treeselect v-model="form.parentId" :options="columnOptions" :normalizer="normalizer" placeholder="请选择父栏目ID" />
</el-form-item>
<el-form-item label="栏目层级" prop="level">
<el-input v-model="form.level" placeholder="请输入栏目层级" />
</el-form-item>
<el-form-item label="URL别名" prop="urlAlias">
<el-input v-model="form.urlAlias" placeholder="请输入URL别名" />
</el-form-item>
<el-form-item label="栏目类型" prop="columnType">
<el-select v-model="form.columnType" placeholder="请选择栏目类型">
<el-option
v-for="dict in dict.type.zs_column_type"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="单页内容">
<editor v-model="form.columnSingleContent" :min-height="192"/>
</el-form-item>
<el-form-item label="导航显示" prop="navigationDisplay">
<el-select v-model="form.navigationDisplay" placeholder="请选择导航显示">
<el-option
v-for="dict in dict.type.zs_navigation_display"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="导航排序" prop="navigationSort">
<el-input v-model="form.navigationSort" placeholder="请输入导航排序" />
</el-form-item>
<el-form-item label="外链地址" prop="blankLink">
<el-input v-model="form.blankLink" placeholder="请输入外链地址" />
</el-form-item>
<el-form-item label="SEO标题" prop="seoTitle">
<el-input v-model="form.seoTitle" placeholder="请输入SEO标题" />
</el-form-item>
<el-form-item label="SEO关键词" prop="seoKeyword">
<el-input v-model="form.seoKeyword" placeholder="请输入SEO关键词" />
</el-form-item>
<el-form-item label="SEO描述" prop="seoDescripetion">
<el-input v-model="form.seoDescripetion" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="模板ID" prop="templateId">
<el-input v-model="form.templateId" placeholder="请输入模板ID" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>

<script>
import { listColumn, getColumn, delColumn, addColumn, updateColumn } from "@/api/system/column";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";

export default {
name: "Column",
dicts: ['zs_navigation_display', 'zs_status', 'zs_sys_language', 'zs_column_type'],
components: {
Treeselect
},
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 站点栏目管理表格数据
columnList: [],
// 站点栏目管理树选项
columnOptions: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 是否展开,默认全部展开
isExpandAll: true,
// 重新渲染表格状态
refreshTable: true,
// 查询参数
queryParams: {
websiteName: undefined,
languageCode: undefined,
name: undefined,
status: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
websiteId: [
{ required: true, message: "网站ID不能为空", trigger: "blur" }
],
languageCode: [
{ required: true, message: "语言编码不能为空", trigger: "change" }
],
name: [
{ required: true, message: "栏目名称不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询站点栏目管理列表 */
getList() {
this.loading = true;
listColumn(this.queryParams).then(response => {
this.columnList = this.handleTree(response.data, "id", "parentId");
this.loading = false;
});
},
/** 转换站点栏目管理数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
children: node.children
};
},
/** 查询站点栏目管理下拉树结构 */
getTreeselect() {
listColumn().then(response => {
this.columnOptions = [];
const data = { id: 0, name: '顶级节点', children: [] };
data.children = this.handleTree(response.data, "id", "parentId");
this.columnOptions.push(data);
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
websiteId: null,
websiteName: null,
languageCode: null,
name: null,
descripetion: null,
parentId: null,
level: null,
urlAlias: null,
columnType: null,
columnSingleContent: null,
navigationDisplay: null,
navigationSort: null,
blankLink: null,
seoTitle: null,
seoKeyword: null,
seoDescripetion: null,
templateId: null,
status: null,
createTime: null,
updateTime: null,
createBy: null,
updateBy: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
this.getTreeselect();
if (row != null && row.id) {
this.form.parentId = row.id;
} else {
this.form.parentId = 0;
}
this.open = true;
this.title = "添加站点栏目管理";
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
this.getTreeselect();
if (row != null) {
this.form.parentId = row.id;
}
getColumn(row.id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改站点栏目管理";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateColumn(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addColumn(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除站点栏目管理编号为"' + row.id + '"的数据项?').then(() => {
this.loading = true;
return delColumn(row.id);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
}
}
};
</script>

+ 449
- 0
src/views/system/product/index.vue Voir le fichier

@@ -0,0 +1,449 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="网站名称" prop="websiteName">
<el-input
v-model="queryParams.websiteName"
placeholder="请输入网站名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="queryParams.languageCode" placeholder="请选择语言编码" clearable>
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="产品名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入产品名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="是否启用" prop="isDisabled">
<el-select v-model="queryParams.isDisabled" placeholder="请选择是否启用" clearable>
<el-option
v-for="dict in dict.type.zs_is_disabled"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>

<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:product:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:product:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:product:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:product:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>

<el-table v-loading="loading" :data="productList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键ID" align="center" prop="id" v-if="false"/>
<el-table-column label="网站名称" align="center" prop="websiteName" />
<el-table-column label="语言编码" align="center" prop="languageCode">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_sys_language" :value="scope.row.languageCode"/>
</template>
</el-table-column>
<el-table-column label="产品分类ID" align="center" prop="categoryId" />
<el-table-column label="用途IDs" align="center" prop="purposeIds" />
<el-table-column label="产品名称" align="center" prop="name" />
<el-table-column label="描述1" align="center" prop="descripetion1" />
<el-table-column label="描述2" align="center" prop="descripetion2" />
<el-table-column label="产品封面" align="center" prop="cover" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.cover" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="产品详情" align="center" prop="intro" />
<el-table-column label="图片相册" align="center" prop="galleryList" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.galleryList" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="产品信息" align="center" prop="productInfo" />
<el-table-column label="附件集合" align="center" prop="attachmentListJson" />
<el-table-column label="SEO标题" align="center" prop="seoTitle" />
<el-table-column label="SEO关键词" align="center" prop="seoKeyword" />
<el-table-column label="SEO描述" align="center" prop="seoDescripetion" />
<el-table-column label="是否启用" align="center" prop="isDisabled">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_is_disabled" :value="scope.row.isDisabled"/>
</template>
</el-table-column>
<el-table-column label="第三方平台" align="center" prop="platformIds" />
<el-table-column label="是否推荐" align="center" prop="isRecommend">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_recommend" :value="scope.row.isRecommend"/>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="更新人" align="center" prop="updateBy" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:product:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:product:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>

<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>

<!-- 添加或修改站点产品管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="网站ID" prop="websiteId">
<el-input v-model="form.websiteId" placeholder="请输入网站ID" />
</el-form-item>
<el-form-item label="网站名称" prop="websiteName">
<el-input v-model="form.websiteName" placeholder="请输入网站名称" />
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="form.languageCode" placeholder="请选择语言编码">
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="产品分类ID" prop="categoryId">
<el-input v-model="form.categoryId" placeholder="请输入产品分类ID" />
</el-form-item>
<el-form-item label="用途IDs" prop="purposeIds">
<el-input v-model="form.purposeIds" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="产品名称" prop="name">
<el-input v-model="form.name" placeholder="请输入产品名称" />
</el-form-item>
<el-form-item label="描述1" prop="descripetion1">
<el-input v-model="form.descripetion1" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="描述2" prop="descripetion2">
<el-input v-model="form.descripetion2" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="产品封面" prop="cover">
<image-upload v-model="form.cover"/>
</el-form-item>
<el-form-item label="产品详情">
<editor v-model="form.intro" :min-height="192"/>
</el-form-item>
<el-form-item label="图片相册" prop="galleryList">
<image-upload v-model="form.galleryList"/>
</el-form-item>
<el-form-item label="产品信息">
<editor v-model="form.productInfo" :min-height="192"/>
</el-form-item>
<el-form-item label="附件集合" prop="attachmentListJson">
<file-upload v-model="form.attachmentListJson"/>
</el-form-item>
<el-form-item label="SEO标题" prop="seoTitle">
<el-input v-model="form.seoTitle" placeholder="请输入SEO标题" />
</el-form-item>
<el-form-item label="SEO关键词" prop="seoKeyword">
<el-input v-model="form.seoKeyword" placeholder="请输入SEO关键词" />
</el-form-item>
<el-form-item label="SEO描述" prop="seoDescripetion">
<el-input v-model="form.seoDescripetion" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="是否启用" prop="isDisabled">
<el-select v-model="form.isDisabled" placeholder="请选择是否启用">
<el-option
v-for="dict in dict.type.zs_is_disabled"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="第三方平台" prop="platformIds">
<el-input v-model="form.platformIds" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="是否推荐" prop="isRecommend">
<el-select v-model="form.isRecommend" placeholder="请选择是否推荐">
<el-option
v-for="dict in dict.type.zs_recommend"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>

<script>
import { listProduct, getProduct, delProduct, addProduct, updateProduct } from "@/api/system/product";

export default {
name: "Product",
dicts: ['zs_is_disabled', 'zs_recommend', 'zs_sys_language'],
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 站点产品管理表格数据
productList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
websiteName: undefined,
languageCode: undefined,
name: undefined,
isDisabled: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
websiteId: [
{ required: true, message: "网站ID不能为空", trigger: "blur" }
],
languageCode: [
{ required: true, message: "语言编码不能为空", trigger: "change" }
],
categoryId: [
{ required: true, message: "产品分类ID不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询站点产品管理列表 */
getList() {
this.loading = true;
listProduct(this.queryParams).then(response => {
this.productList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
websiteId: undefined,
websiteName: undefined,
languageCode: undefined,
categoryId: undefined,
purposeIds: undefined,
name: undefined,
descripetion1: undefined,
descripetion2: undefined,
cover: undefined,
intro: undefined,
galleryList: undefined,
productInfo: undefined,
attachmentListJson: undefined,
seoTitle: undefined,
seoKeyword: undefined,
seoDescripetion: undefined,
isDisabled: undefined,
platformIds: undefined,
isRecommend: undefined,
createTime: undefined,
updateTime: undefined,
createBy: undefined,
updateBy: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加站点产品管理";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getProduct(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改站点产品管理";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateProduct(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addProduct(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除站点产品管理编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delProduct(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/product/export', {
...this.queryParams
}, `product_${new Date().getTime()}.xlsx`)
}
}
};
</script>

+ 367
- 0
src/views/system/productCategory/index.vue Voir le fichier

@@ -0,0 +1,367 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="网站名称" prop="websiteName">
<el-input
v-model="queryParams.websiteName"
placeholder="请输入网站名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="queryParams.languageCode" placeholder="请选择语言编码" clearable>
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="分类名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入分类名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>

<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:productCategory:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-sort"
size="mini"
@click="toggleExpandAll"
>展开/折叠</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>

<el-table
v-if="refreshTable"
v-loading="loading"
:data="productCategoryList"
row-key="id"
:default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column label="网站名称" align="center" prop="websiteName" />
<el-table-column label="语言编码" align="center" prop="languageCode">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_sys_language" :value="scope.row.languageCode"/>
</template>
</el-table-column>
<el-table-column label="分类层级" align="center" prop="level" />
<el-table-column label="分类名称" align="center" prop="name" />
<el-table-column label="分类描述" align="center" prop="descripetion" />
<el-table-column label="栏目封面" align="center" prop="cover" width="100">
<template #default="scope">
<image-preview :src="scope.row.cover" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="外链地址" align="center" prop="blankUrl" />
<el-table-column label="排序权重" align="center" prop="sort" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="更新人" align="center" prop="updateBy" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:productCategory:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)"
v-hasPermi="['system:productCategory:add']"
>新增</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:productCategory:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>

<!-- 添加或修改站点产品分类管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="网站ID" prop="websiteId">
<el-input v-model="form.websiteId" placeholder="请输入网站ID" />
</el-form-item>
<el-form-item label="网站名称" prop="websiteName">
<el-input v-model="form.websiteName" placeholder="请输入网站名称" />
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="form.languageCode" placeholder="请选择语言编码">
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="父分类ID" prop="parentId">
<treeselect v-model="form.parentId" :options="productCategoryOptions" :normalizer="normalizer" placeholder="请选择父分类ID" />
</el-form-item>
<el-form-item label="分类层级" prop="level">
<el-input v-model="form.level" placeholder="请输入分类层级" />
</el-form-item>
<el-form-item label="分类名称" prop="name">
<el-input v-model="form.name" placeholder="请输入分类名称" />
</el-form-item>
<el-form-item label="分类描述" prop="descripetion">
<el-input v-model="form.descripetion" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="栏目封面" prop="cover">
<image-upload v-model="form.cover"/>
</el-form-item>
<el-form-item label="外链地址" prop="blankUrl">
<el-input v-model="form.blankUrl" placeholder="请输入外链地址" />
</el-form-item>
<el-form-item label="排序权重" prop="sort">
<el-input v-model="form.sort" placeholder="请输入排序权重" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>

<script>
import { listProductCategory, getProductCategory, delProductCategory, addProductCategory, updateProductCategory } from "@/api/system/productCategory";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";

export default {
name: "ProductCategory",
dicts: ['zs_sys_language'],
components: {
Treeselect
},
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 站点产品分类管理表格数据
productCategoryList: [],
// 站点产品分类管理树选项
productCategoryOptions: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 是否展开,默认全部展开
isExpandAll: true,
// 重新渲染表格状态
refreshTable: true,
// 查询参数
queryParams: {
websiteName: undefined,
languageCode: undefined,
name: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
websiteId: [
{ required: true, message: "网站ID不能为空", trigger: "blur" }
],
languageCode: [
{ required: true, message: "语言编码不能为空", trigger: "change" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询站点产品分类管理列表 */
getList() {
this.loading = true;
listProductCategory(this.queryParams).then(response => {
this.productCategoryList = this.handleTree(response.data, "id", "parentId");
this.loading = false;
});
},
/** 转换站点产品分类管理数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.id,
label: node.name,
children: node.children
};
},
/** 查询站点产品分类管理下拉树结构 */
getTreeselect() {
listProductCategory().then(response => {
this.productCategoryOptions = [];
const data = { id: 0, name: '顶级节点', children: [] };
data.children = this.handleTree(response.data, "id", "parentId");
this.productCategoryOptions.push(data);
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
websiteId: null,
websiteName: null,
languageCode: null,
parentId: null,
level: null,
name: null,
descripetion: null,
cover: null,
blankUrl: null,
sort: null,
createTime: null,
updateTime: null,
createBy: null,
updateBy: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
this.getTreeselect();
if (row != null && row.id) {
this.form.parentId = row.id;
} else {
this.form.parentId = 0;
}
this.open = true;
this.title = "添加站点产品分类管理";
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
this.getTreeselect();
if (row != null) {
this.form.parentId = row.id;
}
getProductCategory(row.id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改站点产品分类管理";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateProductCategory(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addProductCategory(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除站点产品分类管理编号为"' + row.id + '"的数据项?').then(() => {
this.loading = true;
return delProductCategory(row.id);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
}
}
};
</script>

+ 331
- 0
src/views/system/purpose/index.vue Voir le fichier

@@ -0,0 +1,331 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="网站名称" prop="websiteName">
<el-input
v-model="queryParams.websiteName"
placeholder="请输入网站名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="queryParams.languageCode" placeholder="请选择语言编码" clearable>
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="用途名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入用途名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>

<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:purpose:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:purpose:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:purpose:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:purpose:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>

<el-table v-loading="loading" :data="purposeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键ID" align="center" prop="id" v-if="false"/>
<el-table-column label="网站名称" align="center" prop="websiteName" />
<el-table-column label="语言编码" align="center" prop="languageCode">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_sys_language" :value="scope.row.languageCode"/>
</template>
</el-table-column>
<el-table-column label="用途名称" align="center" prop="name" />
<el-table-column label="用途描述" align="center" prop="descripetion" />
<el-table-column label="排序权重" align="center" prop="sort" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="更新人" align="center" prop="updateBy" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:purpose:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:purpose:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>

<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>

<!-- 添加或修改站点产品用途管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="网站ID" prop="websiteId">
<el-input v-model="form.websiteId" placeholder="请输入网站ID" />
</el-form-item>
<el-form-item label="网站名称" prop="websiteName">
<el-input v-model="form.websiteName" placeholder="请输入网站名称" />
</el-form-item>
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="form.languageCode" placeholder="请选择语言编码">
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="用途名称" prop="name">
<el-input v-model="form.name" placeholder="请输入用途名称" />
</el-form-item>
<el-form-item label="用途描述" prop="descripetion">
<el-input v-model="form.descripetion" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="排序权重" prop="sort">
<el-input v-model="form.sort" placeholder="请输入排序权重" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>

<script>
import { listPurpose, getPurpose, delPurpose, addPurpose, updatePurpose } from "@/api/system/purpose";

export default {
name: "Purpose",
dicts: ['zs_sys_language'],
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 站点产品用途管理表格数据
purposeList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
websiteName: undefined,
languageCode: undefined,
name: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
},
methods: {
/** 查询站点产品用途管理列表 */
getList() {
this.loading = true;
listPurpose(this.queryParams).then(response => {
this.purposeList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
websiteId: undefined,
websiteName: undefined,
languageCode: undefined,
name: undefined,
descripetion: undefined,
sort: undefined,
createTime: undefined,
updateTime: undefined,
createBy: undefined,
updateBy: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加站点产品用途管理";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getPurpose(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改站点产品用途管理";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updatePurpose(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addPurpose(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除站点产品用途管理编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delPurpose(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/purpose/export', {
...this.queryParams
}, `purpose_${new Date().getTime()}.xlsx`)
}
}
};
</script>

+ 385
- 0
src/views/system/website/index.vue Voir le fichier

@@ -0,0 +1,385 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="queryParams.languageCode" placeholder="请选择语言编码" clearable>
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="名称" prop="siteName">
<el-input
v-model="queryParams.siteName"
placeholder="请输入名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>

<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:website:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:website:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:website:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:website:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>

<el-table v-loading="loading" :data="websiteList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键ID" align="center" prop="id" v-if="false"/>
<el-table-column label="语言编码" align="center" prop="languageCode">
<template slot-scope="scope">
<dict-tag :options="dict.type.zs_sys_language" :value="scope.row.languageCode"/>
</template>
</el-table-column>
<el-table-column label="网站地址" align="center" prop="url" />
<el-table-column label="名称" align="center" prop="siteName" />
<el-table-column label="口号" align="center" prop="slogan" />
<el-table-column label="Logo" align="center" prop="logo" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.logo" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="icon" align="center" prop="icon" width="100">
<template slot-scope="scope">
<image-preview :src="scope.row.icon" :width="50" :height="50"/>
</template>
</el-table-column>
<el-table-column label="备案" align="center" prop="record" />
<el-table-column label="版本号" align="center" prop="version" />
<el-table-column label="邮箱" align="center" prop="email" />
<el-table-column label="SEO标题" align="center" prop="seoTitle" />
<el-table-column label="SEO关键字" align="center" prop="seoKeyword" />
<el-table-column label="SEO描述" align="center" prop="seoDescription" />
<el-table-column label="robots" align="center" prop="robotsRule" />
<el-table-column label="sitemap" align="center" prop="sitemapGule" />
<el-table-column label="统计编码" align="center" prop="statisticsCode" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy" />
<el-table-column label="更新人" align="center" prop="updateBy" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:website:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:website:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>

<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>

<!-- 添加或修改站点信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="语言编码" prop="languageCode">
<el-select v-model="form.languageCode" placeholder="请选择语言编码">
<el-option
v-for="dict in dict.type.zs_sys_language"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="网站地址" prop="url">
<el-input v-model="form.url" placeholder="请输入网站地址" />
</el-form-item>
<el-form-item label="名称" prop="siteName">
<el-input v-model="form.siteName" placeholder="请输入名称" />
</el-form-item>
<el-form-item label="口号" prop="slogan">
<el-input v-model="form.slogan" placeholder="请输入口号" />
</el-form-item>
<el-form-item label="Logo" prop="logo">
<image-upload v-model="form.logo"/>
</el-form-item>
<el-form-item label="icon" prop="icon">
<image-upload v-model="form.icon"/>
</el-form-item>
<el-form-item label="备案" prop="record">
<el-input v-model="form.record" placeholder="请输入备案" />
</el-form-item>
<el-form-item label="版本号" prop="version">
<el-input v-model="form.version" placeholder="请输入版本号" />
</el-form-item>
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" />
</el-form-item>
<el-form-item label="SEO标题" prop="seoTitle">
<el-input v-model="form.seoTitle" placeholder="请输入SEO标题" />
</el-form-item>
<el-form-item label="SEO关键字" prop="seoKeyword">
<el-input v-model="form.seoKeyword" placeholder="请输入SEO关键字" />
</el-form-item>
<el-form-item label="SEO描述" prop="seoDescription">
<el-input v-model="form.seoDescription" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="robots" prop="robotsRule">
<el-input v-model="form.robotsRule" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="sitemap" prop="sitemapGule">
<el-input v-model="form.sitemapGule" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="统计编码" prop="statisticsCode">
<el-input v-model="form.statisticsCode" placeholder="请输入统计编码" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
</div>
</template>

<script>
import { listWebsite, getWebsite, delWebsite, addWebsite, updateWebsite } from "@/api/system/website";

export default {
name: "Website",
dicts: ['zs_sys_language'],
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 站点信息表格数据
websiteList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
languageCode: undefined,
siteName: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
languageCode: [
{ required: true, message: "语言编码不能为空", trigger: "change" }
],
siteName: [
{ required: true, message: "名称不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询站点信息列表 */
getList() {
this.loading = true;
listWebsite(this.queryParams).then(response => {
this.websiteList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: undefined,
languageCode: undefined,
url: undefined,
siteName: undefined,
slogan: undefined,
logo: undefined,
icon: undefined,
record: undefined,
version: undefined,
email: undefined,
seoTitle: undefined,
seoKeyword: undefined,
seoDescription: undefined,
robotsRule: undefined,
sitemapGule: undefined,
statisticsCode: undefined,
createTime: undefined,
updateTime: undefined,
createBy: undefined,
updateBy: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加站点信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getWebsite(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改站点信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateWebsite(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addWebsite(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除站点信息编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delWebsite(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/website/export', {
...this.queryParams
}, `website_${new Date().getTime()}.xlsx`)
}
}
};
</script>

Chargement…
Annuler
Enregistrer