From 1b19cc612672386c7f7c8d1a9c61b97439eb7559 Mon Sep 17 00:00:00 2001
From: Admin <978517621@qq.com>
Date: 星期四, 22 九月 2022 14:39:25 +0800
Subject: [PATCH] Default Changelist
---
src/views/system/appVersion/index.vue | 396 +++++++++++++++++++++++++-----------------------
src/api/systemManage/appVersion/index.ts | 59 +++++++
2 files changed, 264 insertions(+), 191 deletions(-)
diff --git a/src/api/systemManage/appVersion/index.ts b/src/api/systemManage/appVersion/index.ts
new file mode 100644
index 0000000..915bdee
--- /dev/null
+++ b/src/api/systemManage/appVersion/index.ts
@@ -0,0 +1,59 @@
+import request from '/@/utils/request';
+
+export function appVersionApi() {
+ return {
+
+ //app版本分页列表
+ getRecordPage: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/appVersion/page/list`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ //获取最新版本
+ getRecordByNew: () => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/appVersion/lastest-release`,
+ method: 'get'
+ });
+ },
+
+ // app版本新增
+ addRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/appVersion/add`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // app版本修改
+ updateRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/appVersion/mod`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // app版本删除
+ deleteRecord: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/appVersion/del`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ // 获取上传路径
+ getUploadUrl: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/appVersion/presign`,
+ method: 'post',
+ data: data
+ });
+ },
+ };
+}
diff --git a/src/views/system/appVersion/index.vue b/src/views/system/appVersion/index.vue
index 83f918e..6912b55 100644
--- a/src/views/system/appVersion/index.vue
+++ b/src/views/system/appVersion/index.vue
@@ -2,38 +2,56 @@
<div class="home-container">
<div style="height: 100%">
<el-row class="homeCard">
- <el-col :span="8">
+ <el-col :span="5" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">app类型:</span>
<div class="grid-content topInfo">
- <el-input v-model="searchWord" placeholder="版本名称"></el-input>
- <el-button type="primary" @click="searchRecord">查询</el-button>
- <el-button plain @click="clearSearch">重置</el-button>
+ <el-select v-model="searchType">
+ <el-option
+ v-for="item in appTypeList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ />
+ </el-select>
</div>
</el-col>
+ <el-col :span="5" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">版本号:</span>
+ <div class="grid-content topInfo">
+ <el-input v-model="searchVersion"/>
+ </div>
+ </el-col>
+ <el-col :span="5" style="display:flex;align-items: center">
+ <span style="white-space: nowrap">APP名称:</span>
+ <div class="grid-content topInfo">
+ <el-input v-model="searchName"/>
+ </div>
+ </el-col>
+ <el-button style="margin-left: 20px" type="primary" @click="searchRecord">查询</el-button>
+ <el-button plain @click="clearSearch">重置</el-button>
</el-row>
<div class="homeCard">
<div class="main-card">
<el-row class="cardTop">
<el-col :span="12" class="mainCardBtn">
<el-button type="primary" :icon="Plus" size="default" @click="dialogAddRecord = true">新增</el-button>
- <!-- <el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>-->
-<!-- <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button>-->
</el-col>
<el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
</el-row>
<el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="100" />-->
<el-table-column type="index" label="排序" width="80" align="center"/>
- <el-table-column property="fileType" label="文件类型" align="center" :show-overflow-tooltip="true"/>
- <el-table-column property="fileName" label="文件名称" align="center" :show-overflow-tooltip="true"/>
- <el-table-column property="link" label="文件链接" align="center"/>
- <el-table-column property="version" label="版本号" align="center">
+ <el-table-column property="appTypeDesc" label="文件类型" align="center" :show-overflow-tooltip="true"/>
+ <el-table-column property="name" label="app名称" align="center" :show-overflow-tooltip="true"/>
+ <el-table-column property="objectUrl" label="文件链接" align="center" :show-overflow-tooltip="true"/>
+ <el-table-column property="customVersion" label="版本号" align="center">
<template #default="scope">
- <el-tag>{{ scope.row.version }}</el-tag>
+ <el-tag>{{ scope.row.customVersion }}</el-tag>
</template>
</el-table-column>
- <el-table-column property="info" label="备注" align="center"/>
- <el-table-column property="createTime" label="创建时间" align="center"/>
- <el-table-column property="updateTime" label="更新时间" align="center"/>
+ <el-table-column property="info" label="备注" align="center" :show-overflow-tooltip="true"/>
+ <el-table-column property="gmtCreate" label="创建时间" align="center"/>
+ <el-table-column property="gmtModified" label="更新时间" align="center"/>
<el-table-column fixed="right" label="操作" align="center" width="250">
<template #default="scope">
<el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
@@ -50,26 +68,26 @@
</div>
<el-dialog v-model="dialogDetails" title="APP版本信息">
<el-form :model="details" label-width="120px">
- <el-form-item label="文件类型">
- <el-input v-model="details.fileType" readonly />
+ <el-form-item label="类型">
+ <el-input v-model="details.appTypeDesc" readonly />
</el-form-item>
- <el-form-item label="文件名称">
- <el-input v-model="details.fileName" readonly />
+ <el-form-item label="app名称">
+ <el-input v-model="details.name" readonly />
</el-form-item>
<el-form-item label="文件链接">
- <el-input v-model="details.link" type="textarea" readonly />
+ <el-input v-model="details.objectUrl" type="textarea" autosize readonly />
</el-form-item>
<el-form-item label="版本号">
- <el-input v-model="details.version" type="textarea" readonly />
+ <el-input v-model="details.customVersion" type="textarea" readonly />
</el-form-item>
<el-form-item label="备注">
<el-input v-model="details.info" type="textarea" readonly />
</el-form-item>
<el-form-item label="创建时间">
- <el-input v-model="details.createTime" readonly />
+ <el-input v-model="details.gmtCreate" readonly />
</el-form-item>
<el-form-item label="更新时间">
- <el-input v-model="details.updateTime" readonly />
+ <el-input v-model="details.gmtModified" readonly />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>
@@ -78,24 +96,39 @@
</el-dialog>
<el-dialog v-model="dialogAddRecord" title="APP版本信息编辑" @close="closeAdd" @open="openAdd">
<el-form :model="addRecord" label-width="150px" ref="addRef" :rules="addRules">
- <el-form-item label="文件类型" prop="fileType">
- <el-input v-model="addRecord.fileType"> </el-input>
+ <el-form-item label="类型" prop="appType">
+ <el-select v-model="addRecord.appType">
+ <el-option
+ v-for="item in appTypeList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id"
+ />
+ </el-select>
</el-form-item>
- <el-form-item label="文件名称" prop="fileName">
- <el-input v-model="addRecord.fileName"> </el-input>
+ <el-form-item label="app名称" prop="name">
+ <el-input v-model="addRecord.name"/>
</el-form-item>
- <el-form-item label="上传文件" prop="link">
- <el-upload accept=".apk" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='fileLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">
+ <el-form-item v-if="chosenIndex == null" label="上传文件" prop="objectName">
+ <el-upload :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='fileLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">
<el-button type="primary" plain>选择文件</el-button>
<template #tip>
<div class="el-upload__tip">上传新版APP</div>
</template>
</el-upload>
</el-form-item>
- <el-form-item label="版本号" prop="version">
- <el-input v-model="addRecord.version"> </el-input>
+ <el-form-item v-else label="上传文件">
+ <el-upload :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='fileLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">
+ <el-button type="primary" plain>选择文件</el-button>
+ <template #tip>
+ <div class="el-upload__tip">上传新版APP(不上传则默认使用当前版本)</div>
+ </template>
+ </el-upload>
</el-form-item>
- <el-form-item label="备注">
+ <el-form-item label="自定义版本号" prop="customVersion">
+ <el-input v-model="addRecord.customVersion"> </el-input>
+ </el-form-item>
+ <el-form-item label="备注" prop="info">
<el-input v-model="addRecord.info" type="textarea"> </el-input>
</el-form-item>
<el-form-item>
@@ -132,15 +165,15 @@
import { useUserInfo } from '/@/stores/userInfo';
import { Session } from '/@/utils/storage';
import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
-import { ElMessage, ElTable } from 'element-plus'
+import { ElMessage, ElMessageBox } from 'element-plus';
import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
-import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
+import { appVersionApi } from '/@/api/systemManage/appVersion';
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import axios from "axios";
// 定义接口来定义对象的类型
interface stateType {
tableData: Array<any>;
- departmentList: Array<any>;
- casProps: {};
multipleSelection: Array<any>;
deleteArr: Array<any>;
dialogDetails: boolean;
@@ -151,24 +184,20 @@
pageSize: number;
chosenIndex: null | number;
deleteId: null | number;
- searchWord: string;
+ searchType: number;
+ appTypeList: Array<any>;
+ searchVersion: string;
+ searchName: string;
totalSize: number;
- addRecord: {
- groupName: string;
- department: number | null;
- depId: number | null;
- groupMembers: Array<any>;
- groupInfo: string;
- };
- details: {
- groupName: string;
- department: number | null;
- groupMembers: Array<any>;
- groupInfo: string;
- };
- fileLimit: number
+ addRecord: {};
+ details: {};
+ fileLimit: number;
+ uploadUrl: string;
+ fileList: Array<file>
}
-
+interface file {
+ url: string;
+}
export default {
name: 'appVersion',
components: {},
@@ -181,116 +210,35 @@
pageSize: 10,
totalSize: 0,
chosenIndex: null,
- searchWord: '',
- tableData: [
+ searchType: 1,
+ appTypeList: [
{
- fileType: '国泰APP',
- fileName: '4',
- link: 'http',
- version: '4.0',
- info: '最新',
- createTime: '2022-09-10',
- updateTime: '2022-09-19'
+ name: '国泰app',
+ id: 1
},
{
- fileType: '国泰APP',
- fileName: '3',
- link: 'http',
- version: '3.0',
- info: '',
- createTime: '2022-09-10',
- updateTime: '2022-09-19'
- },
- {
- fileType: '国泰APP',
- fileName: '2',
- link: 'http',
- version: '2.0',
- info: '',
- createTime: '2022-09-10',
- updateTime: '2022-09-19'
- },
- {
- fileType: '国泰APP',
- fileName: '1',
- link: 'http',
- version: '1.0',
- info: '',
- createTime: '2022-09-10',
- updateTime: '2022-09-19'
+ name: '其他',
+ id: 0
}
],
+ searchVersion: '',
+ searchName: '',
+ tableData: [],
fileLimit: 1,
- departmentList: [],
- department: '',
- workTypeList: [
- {
- label: "动火作业",
- value: 1
- },
- {
- label: "受限空间作业",
- value: 2
- },
- {
- label: "吊装作业",
- value: 3
- },
- {
- label: "动土作业",
- value: 4
- },
- {
- label: "断路作业",
- value: 5
- },
- {
- label: "高处作业",
- value: 6
- },
- {
- label: "临时用电作业",
- value: 7
- },
- {
- label: "盲板抽堵作业",
- value: 8
- }
- ],
- casProps: {
- expandTrigger: 'hover',
- emitPath: false,
- value: 'depId',
- label: 'depName'
- },
+ uploadUrl: '',
multipleSelection: [],
dialogDetails: false,
dialogAddRecord: false,
deleteDialog: false,
deleteSetDialog: false,
- addRecord: {
- groupName: '',
- department: null,
- groupMembers: [],
- depId: null,
- groupInfo: ''
- },
- details: {
- groupName: '',
- department: null,
- groupMembers: [],
- depId: null,
- groupInfo: ''
- },
+ addRecord: {},
+ details: {},
deleteId: null,
- deleteArr: []
+ deleteArr: [],
+ fileList: []
});
interface User {
- groupName: string;
- department: number | null;
- depId: number;
- groupMembers: Array<any>;
- groupInfo: string;
+
}
// const multipleTableRef = ref<InstanceType<typeof ElTable>>();
// const toggleSelection = (rows?: User[]) => {
@@ -317,31 +265,24 @@
const addRef = ref<FormInstance>();
const addRules = reactive<FormRules>({
- fileType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- fileName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- link: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- version: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
+ appType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ name: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ objectName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ customVersion: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ info: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
});
// 页面载入时执行方法
onMounted(() => {
- // getListByPage();
- // getAllDepartment();
+ getListByPage();
});
// 分页获取物资标准列表
const getListByPage = async () => {
- const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { groupName: state.searchWord, containGroupMemberEnable: true } };
- let res = await teamManageApi().getRecordPage(data);
+ const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { appType: state.searchType, customVersion: state.searchVersion, appName: state.searchName} };
+ let res = await appVersionApi().getRecordPage(data);
if (res.data.code === '200') {
- state.tableData = res.data.data.map((item) => {
- if (!item.groupMembers || item.groupMembers == null) {
- item.groupMembers = [];
- } else {
- item.groupMembers = Array.from(item.groupMembers, ({ username }) => username);
- }
- return item;
- });
+ state.tableData = JSON.parse(JSON.stringify(res.data.data))
state.totalSize = res.data.total;
} else {
ElMessage({
@@ -351,23 +292,11 @@
}
};
- // 获取部门列表
- const getAllDepartment = async () => {
- let res = await teamManageApi().getAllDepartment();
- if (res.data.code === '200') {
- state.departmentList = res.data.data;
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
// const handleChange = async (value) => {
// state.addRecord.depId = value;
// console.log(state.addRecord.department, 'de');
- // let res = await teamManageApi().getAllMember(value);
+ // let res = await appVersionApi().getAllMember(value);
// if (res.data.code === '200') {
// state.workerList = res.data.data;
// } else {
@@ -380,7 +309,7 @@
// 关键词查询记录
const searchRecord = async () => {
- if (state.searchWord == '') {
+ if (state.searchType == null && state.searchVersion == '' && state.searchName == '') {
ElMessage({
type: 'warning',
message: '请输入查询关键词'
@@ -391,18 +320,89 @@
};
const clearSearch = async () => {
- state.searchWord = '';
+ state.searchType = 1
+ state.searchVersion = ''
+ state.searchName = ''
getListByPage();
};
+ const showTip =()=>{
+ ElMessage({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ }
+
+ const getUploadUrl = async (rawFile: any) => {
+ const res = await appVersionApi().getUploadUrl({ filename: rawFile.name });
+ state.addRecord.objectName = res.data.data.objectName
+ state.uploadUrl = res.data.data.presignedUrl;
+ };
+
+ const upload = async (params: any) => {
+ // const formData = new FormData();
+ // formData.append('file', state.fileList[0].raw);
+ let reader = new FileReader();
+ reader.readAsArrayBuffer(params.file);
+ reader.onload = async () => {
+ axios
+ .put(state.uploadUrl, reader.result, {
+ header: { 'Content-Type': 'multipart/form-data' }
+ })
+ .then(() => {
+ // if (state.fileList.length === 2) {
+ // state.fileList.splice(0, 1);
+ // }
+ // console.log(state.form.workDetail.gbPath,'gbpath')
+ });
+ };
+ };
+
+ const beforeRemove = (file: {}, fileList: []) => {
+ const result = new Promise((resolve, reject) => {
+ ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(() => {
+ // console.log(state.workDetail.gbPath,'path')
+ state.fileList = []
+ // 请求删除接口
+ deletePic(state.addRecord.objectName)
+ state.addRecord.objectName = null
+ })
+ .catch(() => {
+ reject(false);
+ });
+ });
+ return result;
+ };
+ // 删除图片接口
+ const deletePic = async(fileName:string)=>{
+ const res = await workApplyApi().deleteFile({fileName: fileName})
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: '删除成功!'
+ });
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+
// 添加班组管理方法
const addRecord = async (data: any) => {
- let res = await teamManageApi().addRecord(data);
+ let res = await appVersionApi().addRecord(data);
if (res.data.code === '200') {
ElMessage({
type: 'success',
message: '添加成功!'
});
+ state.fileList = []
getListByPage();
} else {
ElMessage({
@@ -414,15 +414,14 @@
// 修改工作时段方法
const editRecordBtn = async (index, row) => {
+ console.log(row,'row')
state.addRecord = JSON.parse(JSON.stringify(row));
- state.addRecord.department = '';
- state.addRecord.groupMembers = [];
state.dialogAddRecord = true;
state.chosenIndex = index;
};
const editRecord = async (data: any) => {
- let res = await teamManageApi().updateRecord(data);
+ let res = await appVersionApi().updateRecord(data);
if (res.data.code === '200') {
ElMessage({
type: 'success',
@@ -443,15 +442,16 @@
await formEl.validate(async (valid, fields) => {
if (valid) {
const data = {
- groupName: state.addRecord.groupName,
- groupInfo: state.addRecord.groupInfo,
- depId: state.addRecord.depId,
- groupMemberIds: state.addRecord.groupMembers
+ appType: state.addRecord.appType,
+ appName: state.addRecord.name,
+ objectName: state.addRecord.objectName,
+ info: state.addRecord.info,
+ customVersion: state.addRecord.customVersion
};
if (state.chosenIndex == null) {
await addRecord(data);
} else {
- data.groupId = JSON.stringify(state.addRecord.groupId);
+ data.id = JSON.stringify(state.addRecord.id);
await editRecord(data);
}
state.dialogAddRecord = false;
@@ -463,7 +463,7 @@
// 删除工作时间组方法
const deleteRecord = async (data: any) => {
- let res = await teamManageApi().deleteRecord(data);
+ let res = await appVersionApi().deleteRecord(data);
if (res.data.code === '200') {
ElMessage({
type: 'success',
@@ -480,12 +480,12 @@
const deleteRecordBtn = (row) => {
console.log(row, 'row');
- state.deleteId = row.groupId;
+ state.deleteId = row.id;
state.deleteDialog = true;
};
const conFirmDelete = () => {
- deleteRecord({ groupId: state.deleteId });
+ deleteRecord({ id: state.deleteId });
state.deleteDialog = false;
};
@@ -506,7 +506,7 @@
// };
// const conFirmDeleteBatch = async () => {
- // let res = await teamManageApi().deletBatchRecord({ids: state.deleteArr});
+ // let res = await appVersionApi().deletBatchRecord({ids: state.deleteArr});
// if (res.data.code === '200') {
// state.deleteSetDialog = false
// ElMessage({
@@ -545,6 +545,8 @@
const closeAdd = () => {
state.addRecord = {};
+ state.uploadUrl = ''
+ state.fileList = []
state.chosenIndex = null;
};
const openAdd = () => {
@@ -578,6 +580,10 @@
getListByPage,
reLoadData,
deleteRecord,
+ showTip,
+ getUploadUrl,
+ upload,
+ beforeRemove,
handleSizeChange,
handleCurrentChange,
confirmAddRecord,
@@ -647,6 +653,7 @@
}
.topInfo {
+ width: 100%;
display: flex;
align-items: center;
font-size: 16px;
@@ -671,4 +678,11 @@
.el-tabs{
width: 100%;
}
+::v-deep(.el-date-editor){
+ width: 100%;
+}
+
+:deep(.el-cascader){
+ width: 100% !important;
+}
</style>
--
Gitblit v1.9.2