Authored by xwx

系统配置-【无】-页面

<title>系统配置</title>
<iframe class="layadmin-iframe" src="/vue3/index.html#/vue3/systemConf" style="height: 99%!important;"/>
... ...
... ... @@ -40,6 +40,10 @@
width: 93px;
}
.upload-demo-systemConf {
width: 280px;
}
.logo-img {
width: 400px;
padding: 10px;
... ...
... ... @@ -30,6 +30,8 @@ Promise.all([
.component('cm-res-type-tree-view', Vue.defineAsyncComponent(() => myImport('components/common/restypetree/index')))
// 资源类型树
.component('cm-table-page', Vue.defineAsyncComponent(() => myImport('components/common/table-page/index')))
// 表格
.component('cm-table-page-column', Vue.defineAsyncComponent(() => myImport('components/common/table-page-column/index')))
// 弹框
.component('cm-dialog', Vue.defineAsyncComponent(() => myImport('components/common/dialog/index')))
// 用户授权
... ...
<div class="container" :style="{'height':height+'px','max-height':height+'px','padding':'10px 0 10px 10px','background':'#fff','box-sizing':'border-box'}">
<div class="cm-card" :style="{'min-height':height+'px','max-height':height+'px','height':'100%','padding-top':'3px'}">
<el-row>
<el-col :span="4">
<div class="search-input flex-div-start">
<el-tooltip placement="bottom-start">
<template #content>名称<br/>编码</template>
<el-input :size="$global.elementConfig.size.input" v-model="search.keyword" placeholder="请输入关键字(回车搜索)" class="fault-book-input-text" />
</el-tooltip>
<el-button :size="$global.elementConfig.size.button" type="primary" @click="getDataList()">查询</el-button>
</div>
</el-col>
<el-col :span="1">
<el-button :size="$global.elementConfig.size.button" @click="openAddFile()">新增</el-button>
</el-col>
</el-row>
<div class="search-table"style="margin-top: 6px">
<cm-table-page :columns="columns" :dataList="tableDataList" :height="(height - 130)"
:loading="false" :pageSize="pageSize" :showBorder="true"
:showIndex="true" :showPage="true" :showSelection="true"
:showTools="true" :total="count" @loaddata="loadTableDataList">
<template #default="{row,prop,column}">
<div v-if="prop == 'type'">
<div v-if="row.type == 'img'">
<el-tag>图片</el-tag>
</div>
<div v-if="row.type == 'file'">
<el-tag>文件</el-tag>
</div>
</div>
<div v-if="prop == 'img'">
<div v-if="row.type == 'img'">
<el-image style="width: 100px; height: 100px" :src="domainName+row.code" />
</div>
</div>
</template>
<template #tools="{scope}">
<div class="list-handle">
<span class="icon-bg">
<i @click="download(scope.row)" class="el-icon-download" title="下载"></i>
</span>
<span class="icon-bg">
<i @click="handleUpdate(scope.row)" class="el-icon-edit-outline" title="修改"></i>
</span>
<span class="icon-bg">
<i @click="handleDelete(scope.row)" class="el-icon-delete" title="删除"></i>
</span>
</div>
</template>
</cm-table-page>
</div>
</div>
</div>
<!--新增编辑弹框-->
<cm-dialog :showDialogVisible="cacheVisible" :showFooter="false" :title="titleName" @hidedialog="cancelBtn"
width="400px">
<template v-slot>
<el-form
:model="fileFrom"
:rules="docRulesForm"
label-position="right"
label-width="100px"
label-width="120px"
ref="ruleForm">
<el-form-item label="名称" prop="name">
<el-input :size="$global.elementConfig.size.input" clearable v-model="fileFrom.name"></el-input>
</el-form-item>
<el-form-item label="编码" prop="code">
<el-input :size="$global.elementConfig.size.input" clearable v-model="fileFrom.code"></el-input>
</el-form-item>
<el-form-item label="文件" prop="img">
<el-upload
:auto-upload="true"
:before-upload="beforeAvatarUpload"
:http-request="getFile"
:multiple="false"
:show-file-list="false">
<el-input :size="$global.elementConfig.size.input" placeholder="请上传文件" v-model="fileFrom.fileName" class="upload-demo-systemConf"></el-input>
</el-upload>
</el-form-item>
<el-form-item>
<el-button :size="$global.elementConfig.size.button" @click="addFrom()" type="primary">保存
</el-button>
<el-button :size="$global.elementConfig.size.button" @click="cancelBtn">取消</el-button>
</el-form-item>
</el-form>
</template>
</cm-dialog>
... ...
export default {
name: 'systemConf',
template: '',
components: {},
data() {
return {
radio: '0',
docRulesForm: {
name: [{
required: true,
message: '请填写名称!',
trigger: 'blur',
}],
code: [{
required: true,
message: '请填写编码!',
trigger: 'blur',
}],
}
}
},
props: {},
setup: function (props, {attrs, slots, emit}) {
const {proxy} = Vue.getCurrentInstance();
let height = Vue.ref(window.innerHeight);
let search = Vue.ref({
keyword: '',
type: '',
groupId:'',
page: 1,
limit: 10,
});
let count = Vue.ref(0);
let columns = Vue.ref([
{
prop: 'name',
label: '名称',
sortable: true,
align: 'center'
},
{
prop: 'img',
label: '图片',
sortable: true,
align: 'center',
width: '300'
},
{
prop: 'type',
label: '类型',
sortable: true,
align: 'center',
width: '200'
},
{
prop: 'createTime',
label: '创建时间',
sortable: true,
align: 'center',
width: '230'
}
])
let activeName = Vue.ref('default');
//刷新页面
let hasRefresh = Vue.ref(true);
//ip地址
let domainName = Vue.ref(sessionStorage.getItem('domainName') + "/api-web/file/down?code=");
let fileFrom = Vue.ref({
id: '',
pid: '',
name: '',
fileName: '',
code: '',
groupId: '',
type: '',
file: '',
createTime: '',
uploadFile:''
});
//上传完后的图片预览
let imageUrl = Vue.ref('');
let tableDataList = Vue.ref([]);
let isAdd = Vue.ref(true);
let beforeAvatarUpload = (file) => {
const isJPG = file.type.indexOf('image/') != -1
if (!isJPG) {
fileFrom.value.type ='file';
}else {
fileFrom.value.type ='img';
}
return isJPG
}
//获取配置列表
let getDataList = () => {
let params = {
page: search.value.page,
limit: search.value.limit,
groupId:search.value.groupId,
type: search.value.type,
keywords: search.value.keyword
}
proxy.$http.get(`/api-web/file/page`, params, function (res) {
if (res && res.data) {
count.value = res.count;
tableDataList.value = res.data;
} else {
count.value = 0;
tableDataList.value = '暂无数据';
}
});
}
//删除
let handleDelete = (row) => {
let param = {
idList: row.id
}
proxy.$http.get(`/api-web/file/delete`, param, function (res) {
if (res && res.success == true) {
proxy.$global.showMsg('删除成功','success');
getDataList();
}else {
proxy.$global.showMsg('删除失败','warning');
}
})
}
// 下载
let download = (row) => {
let params={
code:row.code
}
proxy.$http.downloadFile('/api-web/file/down',params);
}
let getFile = (param) => {
fileFrom.value.uploadFile = param.file;
fileFrom.value.fileName = param.file.name;
}
let cacheVisible = Vue.ref(false);
let openAddFile = () => {
cacheVisible.value = true;
}
//保存
let addFile = () => {
}
//关闭弹框
let cancelBtn = () => {
cacheVisible.value = false;
}
//修改
let handleUpdate = (row) => {
cacheVisible.value = true;
fileFrom.value = row;
isAdd.value = false;
}
let addFrom = () => {
let params = fileFrom.value;
debugger
if (isAdd.value){
proxy.$http.uploadFile("/api-web/file/add", params, function (res) {
hasRefresh.value = false;
if (res && res.success) {
proxy.$global.showMsg("新增成功!");
cacheVisible.value = false;
getDataList();
}
})
}else {
proxy.$http.uploadFile("/api-web/file/update", params, function (res) {
hasRefresh.value = false;
if (res && res.success) {
proxy.$global.showMsg("修改成功!");
cacheVisible.value = false;
getDataList();
}
})
}
}
// 挂载完
Vue.onMounted(() => {
getDataList();
})
return {
hasRefresh,
height,
activeName,
beforeAvatarUpload,
imageUrl,
getFile,
domainName,
tableDataList,
getDataList,
search,
count,
columns,
handleDelete,
download,
fileFrom,
cacheVisible,
openAddFile,
addFile,
cancelBtn,
addFrom,
handleUpdate,
isAdd
}
}
}
... ...
... ... @@ -238,6 +238,12 @@ const routes = [{
name: 'logoConfig',
component: () => myImport('views/logoConfig/index')
},
//系统配置
{
path: '/vue3/systemConf',
name: 'systemConf',
component: () => myImport('views/systemConf/index')
},
//忙时配置
{
path: '/vue3/busyConfig',
... ...