From 09de14bc21f2feb7c799db8b9b14499fdbc7c0c9 Mon Sep 17 00:00:00 2001
From: "YEJIAXING-PC\\lenovo" <591141169@qq.com>
Date: Fri, 21 Feb 2025 18:43:23 +0800
Subject: [PATCH] =?UTF-8?q?APP=E8=87=AA=E5=8A=A8=E6=9B=B4=E6=96=B0?=
 =?UTF-8?q?=E7=A8=8B=E5=BA=8F=EF=BC=8C=E4=B8=8D=E8=A6=81=E6=AF=8F=E4=B8=80?=
 =?UTF-8?q?=E6=AC=A1=E9=83=BD=E9=87=8D=E6=96=B0=E5=AE=89=E8=A3=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/api/system/systemInstallPackage/index.ts  |  57 +++++
 .../system/systemInstallPackage/index.vue     | 212 ++++++++++++++++++
 .../systemInstallPackage.data.ts              | 133 +++++++++++
 3 files changed, 402 insertions(+)
 create mode 100644 src/api/system/systemInstallPackage/index.ts
 create mode 100644 src/views/system/systemInstallPackage/index.vue
 create mode 100644 src/views/system/systemInstallPackage/systemInstallPackage.data.ts

diff --git a/src/api/system/systemInstallPackage/index.ts b/src/api/system/systemInstallPackage/index.ts
new file mode 100644
index 0000000..4b2793e
--- /dev/null
+++ b/src/api/system/systemInstallPackage/index.ts
@@ -0,0 +1,57 @@
+import request from '@/config/axios'
+
+export interface SystemInstallPackageVO {
+  id: number
+  installPackageName: string
+  installPackageVersion: number
+  installPackageUrl: string
+  isForcedUpdate: string
+  updateContent: string
+  remark: string
+}
+
+// 查询安装包信息列表
+export const getSystemInstallPackagePage = async (params) => {
+  if (params.isSearch) {
+    delete params.isSearch
+    const data = {...params}
+    return await request.post({ url: '/eam/system-install-package/senior', data })
+  } else {
+    return await request.get({ url: `/eam/system-install-package/page`, params })
+  }
+}
+
+// 查询安装包信息详情
+export const getSystemInstallPackage = async (id: number) => {
+  return await request.get({ url: `/eam/system-install-package/get?id=` + id })
+}
+
+// 新增安装包信息
+export const createSystemInstallPackage = async (data: SystemInstallPackageVO) => {
+  return await request.post({ url: `/eam/system-install-package/create`, data })
+}
+
+// 修改安装包信息
+export const updateSystemInstallPackage = async (data: SystemInstallPackageVO) => {
+  return await request.put({ url: `/eam/system-install-package/update`, data })
+}
+
+// 删除安装包信息
+export const deleteSystemInstallPackage = async (id: number) => {
+  return await request.delete({ url: `/eam/system-install-package/delete?id=` + id })
+}
+
+// 导出安装包信息 Excel
+export const exportSystemInstallPackage = async (params) => {
+  return await request.download({ url: `/eam/system-install-package/export-excel`, params })
+}
+
+// 下载用户导入模板
+export const importTemplate = () => {
+  return request.download({ url: '/eam/system-install-package/get-import-template' })
+}
+
+// 返回最新版本安装包信息
+export const returnNewFileSystemInstallPackage = async (data: SystemInstallPackageVO) => {
+  return await request.post({ url: `/eam/system-install-package/returnNewFile`, data })
+}
\ No newline at end of file
diff --git a/src/views/system/systemInstallPackage/index.vue b/src/views/system/systemInstallPackage/index.vue
new file mode 100644
index 0000000..6f4b0a7
--- /dev/null
+++ b/src/views/system/systemInstallPackage/index.vue
@@ -0,0 +1,212 @@
+<template>
+  <ContentWrap>
+    <!-- 搜索工作栏 -->
+    <Search :schema="SystemInstallPackage.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
+  </ContentWrap>
+
+    <!-- 列表头部 -->
+    <TableHead
+      :HeadButttondata="HeadButttondata"
+      @button-base-click="buttonBaseClick"
+      :routeName="routeName"
+      @updataTableColumns="updataTableColumns"
+      @searchFormClick="searchFormClick"
+      :allSchemas="SystemInstallPackage.allSchemas"
+    />
+
+  <!-- 列表 -->
+  <ContentWrap>
+    <Table
+      :columns="tableColumns"
+      :data="tableObject.tableList"
+      :loading="tableObject.loading"
+      :pagination="{
+        total: tableObject.total
+      }"
+      v-model:pageSize="tableObject.pageSize"
+      v-model:currentPage="tableObject.currentPage"
+      v-model:sort="tableObject.sort"
+    >
+      <template #installPackageName="{row}">
+        <el-button type="primary" link @click="openDetail(row, '安装包名称', row.installPackageName)">
+          <span>{{ row.installPackageName }}</span>
+        </el-button>
+      </template>
+      <template #action="{ row }">
+        <ButtonBase :Butttondata="butttondata" @button-base-click="buttonTableClick($event,row)" />
+      </template>
+    </Table>
+  </ContentWrap>
+
+  <!-- 表单弹窗:添加/修改 -->
+  <BasicForm
+    ref="basicFormRef"
+    :sumFormDataByForm ="(formRef,formModel)=>{
+      console.log(formModel)
+      const {uploadFile} = formModel
+      formRef.value.setValues({
+        installPackageUrl:uploadFile
+      })
+    }"
+    @success="formsSuccess"
+    :rules="SystemInstallPackageRules"
+    :formAllSchemas="SystemInstallPackage.allSchemas"
+    :apiUpdate="SystemInstallPackageApi.updateSystemInstallPackage"
+    :apiCreate="SystemInstallPackageApi.createSystemInstallPackage"
+    @searchTableSuccess="searchTableSuccess"
+    :isBusiness="false"
+  />
+
+  <!-- 详情 -->
+  <Detail ref="detailRef" :isBasic="true" :allSchemas="SystemInstallPackage.allSchemas" />
+
+</template>
+
+<script setup lang="ts">
+// import download from '@/utils/download'
+import { SystemInstallPackage,SystemInstallPackageRules } from './systemInstallPackage.data'
+import * as SystemInstallPackageApi from '@/api/system/systemInstallPackage'
+import * as defaultButtons from '@/utils/disposition/defaultButtons'
+import TableHead from '@/components/TableHead/src/TableHead.vue'
+import Detail from '@/components/Detail/src/Detail.vue'
+
+defineOptions({ name: 'SystemInstallPackage' })
+
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
+
+const route = useRoute() // 路由信息
+const routeName = ref()
+routeName.value = route.name
+const tableColumns = ref(SystemInstallPackage.allSchemas.tableColumns)
+
+// 查询页面返回
+const searchTableSuccess = (formField, searchField, val, formRef) => {
+  nextTick(() => {
+    const setV = {}
+    setV[formField] = val[0][searchField]
+    formRef.setValues(setV)
+  })
+}
+
+// 字段设置 更新主列表字段
+const updataTableColumns = (val) => {
+  tableColumns.value = val
+}
+
+const { tableObject, tableMethods } = useTable({
+  getListApi: SystemInstallPackageApi.getSystemInstallPackagePage // 分页接口
+})
+
+// 获得表格的各种操作
+const { getList, setSearchParams } = tableMethods
+
+// 列表头部按钮
+const HeadButttondata = [
+  defaultButtons.defaultAddBtn(null), // 新增
+  defaultButtons.defaultFreshBtn(null), // 刷新
+  defaultButtons.defaultFilterBtn(null), // 筛选
+  defaultButtons.defaultSetBtn(null), // 设置
+]
+// 头部按钮事件
+const buttonBaseClick = (val, item) => {
+  if (val == 'add') { // 新增
+    openForm('create')
+  } else if (val == 'refresh') { // 刷新
+    getList()
+  } else if (val == 'filtrate') { // 筛选
+  } else { // 其他按钮
+    console.log('其他按钮', item)
+  }
+}
+
+// 列表-操作按钮
+const butttondata = [
+  defaultButtons.mainListEditBtn(null), // 编辑
+  defaultButtons.mainListDeleteBtn(null), // 删除
+]
+
+// 列表-操作按钮事件
+const buttonTableClick = async (val, row) => {
+  if (val == 'edit') { // 编辑
+    openForm('update', row)
+  } else if (val == 'delete') { // 删除
+    handleDelete(row.id)
+  }
+}
+
+/** 添加/修改操作 */
+const basicFormRef = ref()
+const openForm = (type: string, row?: any) => {
+  if('create'==type){
+    const currentTime = new Date().getTime()
+    const fileId = SystemInstallPackage.allSchemas.formSchema.find(item=>item.field=='fileId')
+    const uploadFile = SystemInstallPackage.allSchemas.formSchema.find(item=>item.field=='uploadFile')
+    if(fileId){
+      fileId['value'] = currentTime
+    }
+    if(uploadFile){
+      uploadFile['componentProps']['upData']['tableId'] = currentTime
+      uploadFile['componentProps']['modelValue']=  []
+      uploadFile['value'] = ''
+
+    }
+  }else if(type=='update'){
+    const uploadFile = SystemInstallPackage.allSchemas.formSchema.find(item=>item.field=='uploadFile')
+    uploadFile['componentProps']['modelValue']=  [{
+      name: row.installPackageUrl,
+      url: row.installPackageUrl,
+    }]
+    uploadFile['value'] = row.installPackageUrl
+  }
+  basicFormRef.value.open(type, row)
+}
+
+// form表单提交
+const formsSuccess = async (formType,data) => {
+  if (formType === 'create') {
+    // delete data['uploadFile']
+    await SystemInstallPackageApi.createSystemInstallPackage(data)
+    message.success(t('common.createSuccess'))
+  } else {
+    await SystemInstallPackageApi.updateSystemInstallPackage(data)
+    message.success(t('common.updateSuccess'))
+  }
+  basicFormRef.value.dialogVisible = false
+  getList()
+}
+
+/** 详情操作 */
+const detailRef = ref()
+const openDetail = (row: any, titleName: any, titleValue: any) => {
+  detailRef.value.openDetail(row, titleName, titleValue, 'basicSystemInstallPackage')
+}
+
+/** 删除按钮操作 */
+const handleDelete = async (id: number) => {
+  try {
+    // 删除的二次确认
+    await message.delConfirm()
+    // 发起删除
+    await SystemInstallPackageApi.deleteSystemInstallPackage(id)
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    await getList()
+  } catch {}
+}
+
+// 筛选提交
+const searchFormClick = (searchData) => {
+  tableObject.params = {
+    isSearch: true,
+    filters: searchData.filters
+  }
+  getList() // 刷新当前列表
+}
+
+/** 初始化 **/
+onMounted(async () => {
+  getList()
+})
+
+</script>
diff --git a/src/views/system/systemInstallPackage/systemInstallPackage.data.ts b/src/views/system/systemInstallPackage/systemInstallPackage.data.ts
new file mode 100644
index 0000000..68cea48
--- /dev/null
+++ b/src/views/system/systemInstallPackage/systemInstallPackage.data.ts
@@ -0,0 +1,133 @@
+import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
+import { dateFormatter } from '@/utils/formatTime'
+
+// 表单校验
+export const SystemInstallPackageRules = reactive({
+  installPackageName: [required],
+  installPackageVersion: [required],
+  installPackageUrl: [required],
+  isForcedUpdate: [required],
+})
+
+export const SystemInstallPackage = useCrudSchemas(reactive<CrudSchema[]>([
+  {
+    label: 'id',
+    field: 'id',
+    sort: 'custom',
+    isForm:false,
+  },
+  {
+    label: '安装包名称',
+    field: 'installPackageName',
+    sort: 'custom',
+    isSearch: true,
+  },
+  {
+    label: '安装包版本',
+    field: 'installPackageVersion',
+    sort: 'custom',
+    form: {
+      component: 'InputNumber',
+      componentProps: {
+        min: 0,
+        precision: 6
+      }
+    },
+  },
+  {
+    label: '安装路径',
+    field: 'installPackageUrl',
+    sort: 'custom',
+    form: {
+      value:'',
+      componentProps: {
+        // disabled: true
+      },
+    }
+  },
+  {
+    label: '是否强制更新',
+    field: 'isForcedUpdate',
+    sort: 'custom',
+    dictType: DICT_TYPE.TRUE_FALSE,
+    dictClass: 'string',
+    isTable: true,
+    table: {
+      width: 140
+    },
+    form: {
+      component: 'Switch',
+      value: 'TRUE',
+      componentProps: {
+        inactiveValue: 'FALSE',
+        activeValue: 'TRUE'
+      }
+    },
+  },
+  {
+    label: '更新内容',
+    field: 'updateContent',
+    sort: 'custom',
+  },
+  {
+    label: '附件id',
+    field: 'fileId',
+    sort: 'custom',
+    isForm:false,
+    form: {
+      componentProps: {
+        disabled: true
+      },
+      value:'',
+    }
+  },
+  {
+    label: '备注',
+    field: 'remark',
+    sort: 'custom',
+  },
+  {
+    label: '上传附件',
+    field: 'uploadFile',
+    sort: 'custom',
+    form: {
+      component: 'UploadFile',
+      value:'',
+      componentProps: {
+        modelValue:'',
+        upData:{
+          tableId: '',
+          tableName: ''
+        },
+        limit:1,
+        fileType:['apk'],
+        fileSize:100
+      }
+    },
+  },
+  {
+    label: '创建时间',
+    field: 'createTime',
+    sort: 'custom',
+    formatter: dateFormatter,
+    isSearch: true,
+    search: {
+      component: 'DatePicker',
+      componentProps: {
+        valueFormat: 'YYYY-MM-DD HH:mm:ss',
+        type: 'daterange',
+        defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
+      }
+    },
+    isForm: false,
+  },
+  {
+    label: '操作',
+    field: 'action',
+    isForm: false,
+    table: {
+      width: 150,
+      fixed: 'right'
+    }
+  }
+]))