2025-05-21 15:29:38 +08:00

404 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-form v-show="showSearch" ref="queryForm" :inline="true" :model="queryParams" label-width="" size="small">
<el-form-item label="安装包名称" prop="sysApkName">
<el-input v-model="queryParams.sysApkName" clearable placeholder="请输入安装包名称" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="版本号" prop="version">
<el-input v-model="queryParams.version" clearable placeholder="请输入版本号" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="安装包类型" prop="sysType">
<el-select v-model="queryParams.sysType" clearable placeholder="请选择安装包类型">
<el-option v-for="dict in dict.type.sys_apk_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="创建人" prop="created">
<el-input v-model="queryParams.created" clearable placeholder="请输入创建人" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button icon="el-icon-search" size="mini" type="primary" @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 v-hasPermi="['deployment:install:add']" icon="el-icon-plus" plain size="mini" type="primary"
@click="handleAdd">新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button v-hasPermi="['deploy:INFO:remove']" :disabled="multiple" icon="el-icon-delete" plain size="mini"
type="danger" @click="handleDelete">批量删除
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="INFOList" @selection-change="handleSelectionChange">
<el-table-column align="center" type="selection" width="55" />
<el-table-column align="center" label="安装包名称" prop="sysApkName" />
<el-table-column align="center" label="版本号" prop="version" />
<el-table-column align="center" label="安装包" prop="sysApk">
<template slot="header" slot-scope="scope">
<span>安装包</span>
<el-popover placement="top-start" width="180" trigger="hover">
<span slot="reference"><i class="el-icon-info ml10"></i></span>
<p class="tip">复制当前的安装包地址</p>
</el-popover>
</template>
<template slot-scope="scope">
<el-button icon="el-icon-copy" type="text" @click="copyIt(scope.row.sysApk)">复制</el-button>
</template>
</el-table-column>
<el-table-column align="center" label="安装包大小" prop="sysApkSize" />
<el-table-column align="center" label="安装包类型" prop="sysType" :filters="dict.type.sys_apk_type.map(item => ({
...item,
text: item.label
}))" :filter-method="filterTagSysType">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_apk_type" :value="scope.row.sysType" />
</template>
</el-table-column>
<el-table-column align="center" label="创建人" prop="created" />
<el-table-column align="center" class-name="small-padding fixed-width" fixed="right" label="操作">
<template slot-scope="scope">
<el-popover placement="left" width="" trigger="hover">
<div>
<div style="margin-bottom: 10px;color:#000;font-size:14px">操作</div>
<div style="text-align: right; margin: 0">
<el-button @click="handleDownload(scope.row)" size="mini">下载</el-button>
<el-button v-hasPermi="['deployment:install:edit']" plain size="mini"
@click="handleUpdate(scope.row)">修改</el-button>
<el-button v-hasPermi="['deployment:install:detail']" plain size="mini"
@click="handleDetail(scope.row)">详情</el-button>
<el-button v-hasPermi="['deployment:install:remove']" plain type="danger" size="mini"
@click="handleDelete(scope.row)">删除</el-button>
</div>
</div>
<el-button slot="reference" size="mini" type="text">更多<i class="el-icon-caret-right"></i></el-button>
</el-popover>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNum" :total="total"
@pagination="getList" />
<!-- 添加或修改安装包管理对话框 -->
<el-dialog :title="title" :visible.sync="open" append-to-body width="550px">
<el-form ref="form" :model="form" :rules="rules" label-width="100px" labelPosition="left">
<el-form-item label="安装包名称" prop="sysApkName">
<el-input v-model="form.sysApkName" 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="sysApk">
<file-upload v-model="form.sysApk" :accept="'.zip,.apk,.hap, .iap'" :fileSize="50"
:fileType="['apk', 'hap', 'iap', 'zip']" :limit="1" uploadFileUrl="/system/oss/upload" @getSize="getSize" />
</el-form-item>
<el-form-item label="安装包大小" prop="sysApkSize">
<el-input v-model="form.sysApkSize" placeholder="请输入安装包大小" readonly />
</el-form-item>
<el-form-item label="安装包类型" prop="sysType">
<el-select v-model="form.sysType" placeholder="请选择安装包类型">
<el-option v-for="dict in dict.type.sys_apk_type" :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 @click="cancel"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</div>
</el-dialog>
<el-dialog :title="title" :visible.sync="openDetail" append-to-body width="550px">
<el-form ref="form" :model="form" label-width="100px" labelPosition="left">
<el-form-item label="安装包名称" prop="moduleName" filters>
{{ form.sysApkName }}
</el-form-item>
<el-form-item label="版本号" prop="version">
{{ form.version }}
</el-form-item>
<el-form-item label="安装包">
<el-input v-model="form.sysApk" class="input-with-select" readonly>
<el-button slot="append" @click="copyIt(form.sysApk)">复制</el-button>
</el-input>
</el-form-item>
<el-form-item label="安装包大小" prop="moduleSize">
{{ form.sysApkSize }}
</el-form-item>
<el-form-item label="系统类型" prop="sysType">
{{ form.sysType }}
</el-form-item>
<el-form-item label="上传时间:">{{ form.createTime }}</el-form-item>
<el-form-item label="上传人员:">{{ form.created }}</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelDetail"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { addINFO, delINFO, getINFO, listINFO, updateINFO } from '@/api/FDS/installList'
export default {
name: 'INFO',
dicts: ['sys_apk_uploading_type', 'uploading_status', 'sys_apk_type'],
data () {
return {
form: {
uploadingType: 'OnLineUploading',
sysApkName: undefined,
version: undefined,
sysApk: null,
sysApkSize: undefined,
sysType: '',
},
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 安装包管理(新)表格数据
INFOList: [],
// 弹出层标题
title: '',
// 是否显示弹出层
open: false,
openDetail: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
uploadingType: null,
sysApkName: null,
version: null,
sysType: null,
uploadingStatus: null,
created: null
},
elDropdown: '',
// 表单校验
rules: {
uploadingType: [
{ required: true, message: '上传类型不能为空', trigger: 'change' }
],
sysApkName: [
{ required: true, message: '安装包名称不能为空', trigger: 'blur' }
],
version: [
{ required: true, message: '版本号不能为空', trigger: 'blur' }
],
sysType: [
{ required: true, message: '安装包类型不能为空', trigger: 'change' }
],
sysApk: [
{ required: true, message: '安装包不能为空', trigger: 'change' }
]
}
}
},
created () {
this.getList()
// const dropdownMenu = this.$refs['elDropdown'].$children[0] // 找到dropdown下面的dropdownMenu
// dropdownMenu.$data.currentPlacement = 'start'
// console.log(dropdownMenu.$data)
},
methods: {
/** 查询安装包管理(新)列表 */
getList () {
this.loading = true
listINFO(this.queryParams).then(response => {
this.INFOList = response.rows
this.total = response.total
this.loading = false
})
},
// 取消按钮
cancel () {
this.open = false
this.reset()
},
// 表单重置
reset () {
this.form = {
uploadingType: 'OnLineUploading',
sysApkName: undefined,
version: undefined,
sysApk: null,
sysApkSize: undefined,
sysType: '',
}
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.reset()
const id = row.id || this.ids
getINFO(id).then(response => {
this.form = response.data
this.open = true
this.title = '修改安装包'
})
},
/** 详情按钮操作 */
handleDetail (row) {
this.reset()
const id = row.id || this.ids
getINFO(id).then(response => {
this.form = response.data
this.openDetail = true
this.title = '安装包详情'
this.type = 'detail'
})
},
/** 提交按钮 */
submitForm () {
this.$refs['form'].validate(valid => {
if (valid) {
if (this.form.id != null) {
let data = Object.assign({}, this.form)
delete data.explain
updateINFO(data).then(response => {
this.$modal.msgSuccess('修改成功')
this.open = false
this.getList()
})
} else {
addINFO(this.form).then(response => {
this.$modal.msgSuccess('新增成功')
this.open = false
this.getList()
})
}
}
})
},
/** 删除按钮操作 */
handleDelete (row) {
const ids = row.id || this.ids
this.$modal.confirm('是否确认删除安装包管理编号为"' + ids + '"的数据项?').then(function () {
return delINFO(ids)
}).then(() => {
this.getList()
this.$modal.msgSuccess('删除成功')
}).catch(() => {
})
},
getSize (e) {
if (e && e.length > 0) {
this.form.sysApkSize = (e[0].size / 1024 / 1024).toFixed(2) + 'm'
} else {
this.form.sysApkSize = ''
}
},
/**下载安装包*/
handleDownload (row) {
window.open(row.sysApk)
},
cancelDetail () {
this.openDetail = false
this.reset()
},
copyIt (url) {
navigator.clipboard.writeText(url)
this.$message.success('复制成功')
},
// 筛选处理
filterTagSysType (value, row) {
return row.sysType === Number(value);
},
// 更多操作触发
handleCommand (command, row) {
switch (command) {
case "handleDownload":
this.handleDownload(row);
break;
case "handleUpdate":
this.handleUpdate(row);
break;
case "handleDetail":
this.handleDetail(row);
break;
case "handleDelete":
this.handleDelete(row);
break;
default:
break;
}
},
}
}
</script>
<style lang="scss" scoped>
::v-deep .el-dialog .el-form {
.el-input,
.el-select,
.el-textarea {
width: 100%
}
}
.dropDown {
position: relative;
}
.lang-select-dropdown {
position: absolute;
top: 30px;
left: 0px;
margin: 0px;
padding: 0px;
min-width: max-content;
text-align: center;
}
</style>