kcw-wx-web/src/views/app-update/index.vue

217 lines
7.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" :tableKey="this.$options.name">
<!-- 新增 -->
<el-button
slot="left"
v-permission="['admin','sysAppUpdate:add']"
class="filter-item"
size="mini"
type="primary"
icon="el-icon-upload"
@click="crud.toAdd"
>上传
</el-button>
</crudOperation>
<!--表单组件-->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.add ? '文件上传' : '编辑文件'" width="500px">
<el-form ref="form" :model="form" size="small" label-width="80px">
<el-form-item label="项目名称">
<el-input v-model="form.appName" style="width: 370px;" />
</el-form-item>
<el-form-item label="版本代码">
<el-input v-model="form.versionCode" style="width: 370px;" />
</el-form-item>
<el-form-item label="版本名称">
<el-input v-model="form.versionName" style="width: 370px;" />
</el-form-item>
<el-form-item label="更新内容">
<el-input v-model="form.modifyContent" style="width: 370px;" type="textarea" />
</el-form-item>
<!-- 上传文件 -->
<el-form-item v-if="crud.status.add" label="上传">
<el-upload
ref="upload"
:limit="1"
:before-upload="beforeUpload"
:auto-upload="false"
:headers="headers"
:on-success="handleSuccess"
:on-error="handleError"
:action="appUploadApi + '?versionCode='+form.versionCode+'&appName='+form.appName+'&versionName='+form.versionName+'&modifyContent='+form.modifyContent"
>
<div class="eladmin-upload"><i class="el-icon-upload" /> 添加文件</div>
<div slot="tip" class="el-upload__tip">可上传任意格式文件且不超过200M</div>
</el-upload>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button v-if="crud.status.add" :loading="loading" type="primary" @click="upload">确认</el-button>
<el-button v-else :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
</div>
</el-dialog>
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="small" style="width: 100%;" @selection-change="crud.selectionChangeHandler">
<el-table-column type="selection" width="55" />
<el-table-column prop="id" label="id" />
<el-table-column prop="appName" label="项目名称" />
<el-table-column prop="updateStatus" label="更新状态" />
<el-table-column prop="versionCode" label="版本代码" />
<el-table-column prop="versionName" label="版本名称" />
<el-table-column prop="modifyContent" label="修改内容" />
<el-table-column prop="downloadUrl" label="下载网站">
<template slot-scope="scope">
<el-popover
:content="scope.row.downloadUrl"
placement="top-start"
title="路径"
width="200"
trigger="hover"
>
<vue-qrcode
:value="getQrContent(baseApi + scope.row.downloadUrl)"
:options="qrOptions"
tag="img"
class="qr-code"
/>
<a
slot="reference"
:href="baseApi + scope.row.downloadUrl "
class="el-link--primary"
style="word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color: #1890ff;font-size: 13px;"
target="_blank"
>
{{ scope.row.downloadUrl }}
</a>
</el-popover>
</template>
</el-table-column>
<el-table-column prop="apkSize" label="程序大小">
<template slot-scope="scope">
<span v-if="scope.row.apkSize < 1024">{{ Number(scope.row.apkSize).toFixed(2) }}K</span>
<span v-if="scope.row.apkSize > 1024">{{ Number(scope.row.apkSize/1024).toFixed(2) }}M</span>
</template>
</el-table-column>
<el-table-column prop="apkMd5" label="APKMD5" />
<el-table-column v-if="checkPer(['admin','sysAppUpdate:edit','sysAppUpdate:del'])" label="操作" width="150px" align="center">
<template slot-scope="scope">
<udOperation
:data="scope.row"
:permission="permission"
/>
</template>
</el-table-column>
</el-table>
<!--分页组件2-->
<pagination />
</div>
</div>
</template>
<script>
import crudSysAppUpdate from '@/api/sysAppUpdate'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation'
import pagination from '@crud/Pagination'
import { mapGetters } from 'vuex'
import { getToken } from '@/utils/auth'
import VueQrcode from '@chenfengyuan/vue-qrcode'
const defaultForm = { id: null, name: '', versionCode: '', versionName: '', modifyContent: '' }
export default {
name: 'AppUpdate',
components: { VueQrcode, pagination, crudOperation, udOperation },
mixins: [presenter(), header(), form(defaultForm), crud()],
cruds() {
return CRUD({ title: 'app_update', url: 'api/sysAppUpdate', idField: 'id', sort: 'id,desc', crudMethod: { ...crudSysAppUpdate }})
},
data() {
return {
headers: { 'Authorization': getToken() },
qrOptions: {
width: 160, // 二维码宽度
margin: 0, // 边距
errorCorrectionLevel: 'H' // 容错级别(高)
},
permission: {
edit: ['admin', 'sysAppUpdate:edit'],
del: ['admin', 'sysAppUpdate:del']
},
rules: {
updateStatus: [
{ required: true, message: '更新状态.不能为空', trigger: 'blur' }
],
versionCode: [
{ required: true, message: '版本代码.不能为空', trigger: 'blur' }
]
}
}
},
computed: {
...mapGetters([
'baseApi',
'appUploadApi'
])
},
created() {
this.crud.optShow.add = false
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
return true
},
getQrContent(location) {
// 自定义二维码内容,这里用箱种和品番组合
return `${location}`
// 如果只需要箱种,可以直接用:
// return location.boxType;
},
upload() {
this.$refs.upload.submit()
},
beforeUpload(file) {
let isLt2M = true
isLt2M = file.size / 1024 / 1024 < 200
if (!isLt2M) {
this.loading = false
this.$message.error('上传文件大小不能超过 200MB!')
}
return isLt2M
},
handleSuccess(response, file, fileList) {
this.crud.notify('上传成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
this.$refs.upload.clearFiles()
this.crud.status.add = CRUD.STATUS.NORMAL
this.crud.resetForm()
this.crud.toQuery()
},
// 监听上传失败
handleError(e, file, fileList) {
const msg = JSON.parse(e.message)
this.$notify({
title: msg.message,
type: 'error',
duration: 2500
})
this.loading = false
}
}
}
</script>
<style scoped>
</style>