Veronique 1 rok temu
rodzic
commit
22276df57d

+ 175 - 124
src/api/baseInfo/index.ts

@@ -1,207 +1,258 @@
 // @ts-nocheck
 import request from "@/utils/request";
+
 //字典获取数据
 export function selectDictDataList(data) {
-    return request({
-        url: '/system/selectDictDataList',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/system/selectDictDataList",
+    method: "post",
+    params: data,
+  });
 }
+
 //前台获取机台档案列表
 export function getAllEnableMachineInfo(data) {
-    return request({
-        url: '/machine/getAllEnableMachineInfo',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/machine/getAllEnableMachineInfo",
+    method: "post",
+    params: data,
+  });
 }
+
 //获取物流公司档案不分页,给前端调用
 export function getLogisticsInfoList(data) {
-    return request({
-        url: '/doc/getLogisticsInfoList',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/getLogisticsInfoList",
+    method: "post",
+    params: data,
+  });
 }
+
 //获取纸张报价档案列表
 export function getPaperQuoteInfoList(data) {
-    return request({
-        url: '/material/getPaperQuoteInfoList',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/material/getPaperQuoteInfoList",
+    method: "post",
+    params: data,
+  });
 }
+
 //获取工序列表
 export function getWorkProcessList(data) {
-    return request({
-        url: '/product/getWorkProcessList',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/product/getWorkProcessList",
+    method: "post",
+    params: data,
+  });
 }
+
 //禁用纸张档案
 export function voidPaperInfo(data) {
-    return request({
-        url: '/doc/voidPaperInfo',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/voidPaperInfo",
+    method: "post",
+    params: data,
+  });
 }
+
 //修改纸张档案
 export function updatePaperInfo(data) {
-    return request({
-        url: '/doc/updatePaperInfo',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/updatePaperInfo",
+    method: "post",
+    params: data,
+  });
 }
+
 //禁用基础纸张档案
 export function voidPaperBaseInfo(data) {
-    return request({
-        url: '/doc/voidPaperBaseInfo',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/voidPaperBaseInfo",
+    method: "post",
+    params: data,
+  });
 }
+
 //获取纸张档案
 export function getPaperInfo(data) {
-    return request({
-        url: '/doc/getPaperInfo',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/getPaperInfo",
+    method: "post",
+    params: data,
+  });
 }
+
 //增加纸张档案
 export function addPaperInfo(data) {
-    return request({
-        url: '/doc/addPaperInfo',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/addPaperInfo",
+    method: "post",
+    params: data,
+  });
 }
+
 //获取纸张档案列表
 export function getPaperInfoList(data) {
-    return request({
-        url: '/doc/getPaperInfoList',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/getPaperInfoList",
+    method: "post",
+    params: data,
+  });
 }
+
 //新增纸张品牌档案列表
 export function addPaperBrand(data) {
-    return request({
-        url: '/doc/addPaperBrand',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/addPaperBrand",
+    method: "post",
+    params: data,
+  });
 }
+
 //禁用纸张品牌档案列表
 export function voidPaperBrand(data) {
-    return request({
-        url: '/doc/voidPaperBrand',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/voidPaperBrand",
+    method: "post",
+    params: data,
+  });
 }
+
 //获取纸张品牌档案列表
 export function getPaperBrandList(data) {
-    return request({
-        url: '/doc/getPaperBrandList',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/getPaperBrandList",
+    method: "post",
+    params: data,
+  });
 }
+
 //增加基础纸张档案
 export function addPaperBaseInfo(data) {
-    return request({
-        url: '/doc/addPaperBaseInfo',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/addPaperBaseInfo",
+    method: "post",
+    params: data,
+  });
 }
 
 //获取基础纸张档案列表
 export function getPaperBaseInfoList(data) {
-    return request({
-        url: '/doc/getPaperBaseInfoList',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/getPaperBaseInfoList",
+    method: "post",
+    params: data,
+  });
 }
 
 //获取基础纸张档案
 export function getPaperBaseInfo(data) {
-    return request({
-        url: '/doc/getPaperBaseInfo',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/getPaperBaseInfo",
+    method: "post",
+    params: data,
+  });
 }
 
-
 //修改基础纸张档案
 export function updatePaperBaseInfo(data) {
-    return request({
-        url: '/doc/updatePaperBaseInfo',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/updatePaperBaseInfo",
+    method: "post",
+    params: data,
+  });
 }
 
-
-
 //修改纸张档案单价
 export function savePaperInfoPrice(data) {
-    return request({
-        url: '/doc/savePaperBaseInfoPrice',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/savePaperBaseInfoPrice",
+    method: "post",
+    params: data,
+  });
 }
+
 //禁用启用
 export function voidPaperInfoType(data) {
-    return request({
-        url: '/doc/voidPaperInfoType',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/voidPaperInfoType",
+    method: "post",
+    params: data,
+  });
 }
+
 //增加纸张分类档案
 export function addPaperInfoType(data) {
-    return request({
-        url: '/doc/addPaperInfoType',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/addPaperInfoType",
+    method: "post",
+    params: data,
+  });
 }
 
 //获取纸张分类档案列表
 export function getPaperTypeList(data) {
-    return request({
-        url: '/doc/getPaperTypeList',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/getPaperTypeList",
+    method: "post",
+    params: data,
+  });
 }
 
 //获取纸张分类档案
 export function getPaperInfoType(data) {
-    return request({
-        url: '/doc/getPaperInfoType',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/getPaperInfoType",
+    method: "post",
+    params: data,
+  });
 }
 
-
 //修改纸张分类档案
 export function updatePaperInfoType(data) {
-    return request({
-        url: '/doc/updatePaperInfoType',
-        method: 'post',
-        params: data
-    })
+  return request({
+    url: "/doc/updatePaperInfoType",
+    method: "post",
+    params: data,
+  });
+}
+
+export function queryERPClientList(data) {
+  return request({
+    url: "/erpClient/queryERPClientList",
+    method: "post",
+    params: data,
+  });
+}
+
+export function getERPClient(data) {
+  return request({
+    url: "/erpClient/getERPClient",
+    method: "post",
+    params: data,
+  });
 }
 
+export function addClientInfo(data) {
+  return request({
+    url: "/erpClient/addClientInfo",
+    method: "post",
+    params: data,
+  });
+}
 
+export function updateClientInfo(data) {
+  return request({
+    url: "/erpClient/updateClientInfo",
+    method: "post",
+    params: data,
+  });
+}
+
+export function voidERPClient(data) {
+  return request({
+    url: "/erpClient/voidERPClient",
+    method: "post",
+    params: data,
+  });
+}

+ 42 - 0
src/api/upgrade/index.ts

@@ -0,0 +1,42 @@
+import request from "@/utils/request";
+
+//获取已发布的更新
+export function queryUpgradeProjects(data) {
+  return request({
+    url: "/upgradeProject/queryUpgradeProjects",
+    method: "post",
+    params: data,
+  })
+}
+
+export function getUpgradeProject(data) {
+  return request({
+    url: "/upgradeProject/getUpgradeProject",
+    method: "post",
+    params: data,
+  })
+}
+
+export function getLatestUpgradeProject(data) {
+  return request({
+    url: "/upgradeProject/getLatestUpgradeProject",
+    method: "post",
+    params: data,
+  })
+}
+
+export function publishUpgradeProject(data) {
+  return request({
+    url: "/upgradeProject/publishUpgradeProject",
+    method: "post",
+    params: data,
+  })
+}
+
+export function revokeUpgradeProject(data) {
+  return request({
+    url: "/upgradeProject/revokeUpgradeProject",
+    method: "post",
+    params: data,
+  })
+}

+ 157 - 0
src/views/baseInfo/erpClientList/compt/childDialog.vue

@@ -0,0 +1,157 @@
+<template>
+  <div class="dialog">
+    <el-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      width="480"
+      @close="closeDialog()"
+    >
+      <el-form
+        ref="formRef"
+        :model="formData"
+        :rules="rules"
+        label-width="120px"
+      >
+        <el-row>
+          <el-col :span="24">
+            <el-form-item prop="clientName" label="客户名称">
+              <el-input v-model="formData.clientName" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item prop="clientCode" label="客户编码">
+              <el-input
+                :disabled="formData.id > 0"
+                v-model="formData.clientCode"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item prop="md5ParamDigest" label="通讯密钥">
+              <el-input v-model="formData.md5ParamDigest" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item prop="contactPhone" label="联系电话">
+              <el-input v-model="formData.contactPhone" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item prop="contactPerson" label="联系人">
+              <el-input v-model="formData.contactPerson" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item prop="clientAddress" label="地址">
+              <el-input v-model="formData.clientAddress" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item prop="erpServerUrl" label="erp服务器连接地址">
+              <el-input v-model="formData.erpServerUrl" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button v-throttle type="primary" @click="handleSubmit"
+            >确 定
+          </el-button>
+          <el-button @click="closeDialog()">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+<script setup lang="ts">
+import { addClientInfo, getERPClient, updateClientInfo } from "@/api/baseInfo";
+import type { FormInstance } from "element-plus";
+
+let dialogVisible = ref(false);
+let dialogTitle = ref("");
+const formRef = ref<FormInstance>();
+const emit = defineEmits(["dialogChange"]);
+const formData = reactive({
+  contactPerson: "",
+  contactPhone: "",
+  clientAddress: "",
+  clientName: "",
+  clientCode: "",
+  md5ParamDigest: "",
+  erpServerUrl: "",
+  id: 0,
+});
+const rules = reactive({
+  clientName: [{ required: true, message: "请输入客户名称", trigger: "blur" }],
+});
+
+function handleSubmit() {
+  formRef.value.validate((valid: any) => {
+    if (valid) {
+      const itemId = formData.id;
+      if (itemId) {
+        //修改
+        const postData = JSON.stringify(formData);
+        const params = {
+          erpClient: postData,
+        };
+        updateClientInfo(params).then((response) => {
+          dialogVisible.value = false;
+          if (response.httpCode == 200) {
+            emit("dialogChange");
+            ElMessage.success("操作成功");
+          }
+        });
+      } else {
+        //增加
+        const postData = JSON.stringify(formData);
+        const params = {
+          erpClient: postData,
+        };
+        addClientInfo(params).then((response) => {
+          dialogVisible.value = false;
+          if (response.httpCode == 200) {
+            emit("dialogChange");
+            ElMessage.success("操作成功");
+          }
+        });
+      }
+    }
+  });
+}
+
+function getItemData(item) {
+  const data = {
+    idClient: item,
+  };
+  getERPClient(data).then((response) => {
+    if (response.httpCode == 200) {
+      const data = response.data;
+      Object.assign(formData, { ...data });
+    }
+  });
+}
+
+/**  重置表单 */
+function resetForm() {
+  formRef.value.resetFields();
+  formData.id = "";
+}
+
+/**关闭弹窗 */
+function closeDialog() {
+  dialogVisible.value = false;
+  formRef.value.resetFields();
+  formData.id = undefined;
+}
+
+defineExpose({
+  dialogVisible,
+  dialogTitle,
+  getItemData,
+  resetForm,
+});
+</script>
+<style scoped lang="scss"></style>

+ 179 - 0
src/views/baseInfo/erpClientList/index.vue

@@ -0,0 +1,179 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-input
+        @keyup.enter="handleSearch"
+        class="w200px mr5px"
+        v-model="queryForm.keyWord"
+        placeholder="关键字搜索"
+      />
+      <el-button type="primary" @click="handleSearch">
+        <i-ep-search />
+        搜索
+      </el-button>
+      <div class="w100px ml10px" style="display: inline-block">
+        <el-checkbox
+          style="position: absolute; top: 11px"
+          v-model="disableLock"
+          label="已禁用"
+          border
+        ></el-checkbox>
+      </div>
+      <el-button @click="openDialog()" color="#11a983">
+        <i-ep-plus />
+        增加
+      </el-button>
+      <el-button type="primary" @click="refreshTableInfo">
+        <i-ep-refresh />
+      </el-button>
+    </div>
+    <div class="table-con">
+      <el-table
+        :max-height="tableHeight"
+        v-loading="loading"
+        :data="tableData"
+        highlight-current-row
+        border
+      >
+        <el-table-column label="操作" width="140">
+          <template #default="{ row }">
+            <el-button link @click="openDialog(row.id)" type="primary">
+              <i-ep-edit />
+              编辑
+            </el-button>
+            <el-button
+              v-if="row.voidFlag == 0"
+              link
+              @click="handleDisable(row.id, 1)"
+              type="warning"
+              >禁用</el-button
+            >
+            <el-button
+              v-if="row.voidFlag == 1"
+              type="success"
+              link
+              @click="handleDisable(row.id, 0)"
+              >启用</el-button
+            >
+          </template>
+        </el-table-column>
+        <el-table-column type="index" label="#" width="50">
+          <template #default="scope">
+            <span>{{ scope.$index + 1 }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="clientName" width="150" label="客户名称" />
+        <el-table-column prop="clientCode" width="200" label="客户编码" />
+        <el-table-column prop="md5ParamDigest" width="280" label="MD5" />
+        <el-table-column prop="contactPhone" width="150" label="联系电话" />
+        <el-table-column prop="contactPerson" width="150" label="联系人" />
+        <el-table-column
+          prop="clientAddress"
+          show-overflow-tooltip
+          width="250"
+          label="联系地址"
+        />
+        <el-table-column prop="status" label="状态">
+          <template #default="{ row }">
+            <el-tag v-if="row.voidFlag == 0" type="success"> 正常 </el-tag>
+            <el-tag v-else="row.voidFlag == 1" type="danger"> 停用 </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column prop="createTime" label="创建时间" width="155">
+          <template #default="{ row }">
+            <span v-if="row.createTime">
+              {{ $filters.getTime(row.createTime) }}
+            </span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        v-if="total > 0"
+        v-model:total="total"
+        v-model:page="queryPage.pageIndex"
+        v-model:limit="queryPage.pageSize"
+        @pagination="getTableData"
+      />
+    </div>
+    <child-dialog ref="childDialog" @dialogChange="dialogChange"></child-dialog>
+  </div>
+</template>
+<script setup lang="ts">
+import { queryERPClientList, voidERPClient } from "@/api/baseInfo";
+import ChildDialog from "./compt/childDialog.vue";
+import { useTable } from "@/hooks/useTable";
+
+let disableLock = ref("");
+const childDialog = ref<any>();
+
+//增加编辑
+function openDialog(item?: any) {
+  childDialog.value.dialogVisible = true;
+  if (item) {
+    childDialog.value.dialogTitle = "编辑";
+    nextTick(() => {
+      childDialog.value.getItemData(item);
+    });
+  } else {
+    nextTick(() => {
+      childDialog.value.dialogTitle = "增加";
+      childDialog.value.resetForm();
+    });
+  }
+}
+
+//禁用删除
+function handleDisable(id, status) {
+  ElMessageBox.confirm("确认操作?", "警告", {
+    confirmButtonText: "确定",
+    cancelButtonText: "取消",
+    type: "warning",
+  }).then(() => {
+    const postData = {
+      id: id,
+      voidFlag: status,
+    };
+    const params = {
+      erpClient: JSON.stringify(postData),
+    };
+    voidERPClient(params).then((response) => {
+      if (response.httpCode == 200) {
+        ElMessage.success("操作成功");
+        getTableData();
+      }
+    });
+  });
+}
+
+//修改成功后传递事件
+function dialogChange() {
+  getTableData();
+}
+
+const queryForm = reactive({
+  keyWord: "",
+  voidFlag: 0,
+});
+watch(
+  () => disableLock.value,
+  (disableLock) => {
+    if (disableLock) {
+      queryForm.voidFlag = 1;
+      getTableData();
+    } else {
+      queryForm.voidFlag = 0;
+      getTableData();
+    }
+  }
+);
+const {
+  tableData,
+  queryPage,
+  total,
+  loading,
+  getTableData,
+  tableHeight,
+  handleSearch, //搜索
+  refreshTableInfo, //刷新
+} = useTable(queryERPClientList, queryForm);
+</script>

+ 265 - 0
src/views/upgrade/compt/childDialog.vue

@@ -0,0 +1,265 @@
+<template>
+  <div class="dialog">
+    <el-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      width="800"
+      @close="closeDialog()"
+    >
+      <el-form
+        ref="formRef"
+        :model="formData"
+        :rules="rules"
+        label-width="120px"
+      >
+        <el-row>
+          <el-col :span="24">
+            <el-form-item prop="projectName" label="项目名称">
+              <el-select v-model="formData.projectName" @change="projectChange">
+                <el-option
+                  v-for="item in projectOptions"
+                  :key="item.code"
+                  :label="item.label"
+                  :value="item.label"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item prop="projectCode" label="项目代码">
+              <el-input disabled v-model="formData.projectCode" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="8">
+            <el-form-item prop="majorVersion" label="主版本">
+              <el-input-number
+                :step="1"
+                step-strictly
+                v-model="formData.majorVersion"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item prop="minorVersion" label="次版本">
+              <el-input-number
+                :step="1"
+                step-strictly
+                v-model="formData.minorVersion"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item prop="minVersion" label="小版本">
+              <el-input-number
+                :step="1"
+                step-strictly
+                v-model="formData.minVersion"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item prop="updateTitle" label="更新标题">
+              <el-input v-model="formData.updateTitle" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item prop="updateInfos" label="更新内容">
+              <el-input type="textarea" v-model="formData.updateInfos" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item prop="updatePackUrl" label="上传更新包">
+              <div>
+                <el-upload
+                  ref="upload"
+                  :multiple="false"
+                  class="avatar-uploader"
+                  action="/apis10/upload/bucketFile"
+                  :headers="headers"
+                  :show-file-list="false"
+                  accept=".*"
+                  :on-exceed="handleExceed"
+                  :before-upload="beforeUpload"
+                  :on-success="successFile"
+                  :data="uploadParams"
+                >
+                  <template #trigger>
+                    <el-button type="primary">
+                      <i-ep-upload-filled />&nbsp;&nbsp;上传更新包
+                    </el-button>
+
+                    <span style="margin-left: 10px">
+                      <!--                      <img-->
+                      <!--                        v-if="formData.updatePackUrl"-->
+                      <!--                        height="60px"-->
+                      <!--                        style="-->
+                      <!--                          cursor: pointer;-->
+                      <!--                          border: 1px solid #ddd;-->
+                      <!--                          height: 60px;-->
+                      <!--                          max-width: 500px;-->
+                      <!--                        "-->
+                      <!--                        :src="formData.updatePackUrl"-->
+                      <!--                      />-->
+                      <el-link
+                        type="primary"
+                        v-if="formData.updatePackUrl"
+                        :href="formData.updatePackUrl"
+                      >
+                        {{ formData.updatePackUrl }}
+                      </el-link>
+                    </span>
+                  </template>
+                </el-upload>
+              </div>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button v-throttle type="primary" @click="handleSubmit"
+            >确 定
+          </el-button>
+          <el-button @click="closeDialog()">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+<script setup lang="ts">
+import {
+  FormInstance,
+  genFileId,
+  UploadInstance,
+  UploadProps,
+  UploadRawFile,
+} from "element-plus";
+
+import { getToken } from "@/utils/js-cookie";
+import { publishUpgradeProject } from "@/api/upgrade";
+
+let dialogVisible = ref(false);
+let dialogTitle = ref("");
+const formRef = ref<FormInstance>();
+const emit = defineEmits(["dialogChange"]);
+const formData = reactive({
+  projectName: "ERP-APP",
+  projectCode: "ERP-APP",
+  majorVersion: 1,
+  minorVersion: 0,
+  minVersion: 0,
+  updatePackUrl: "",
+  updateTitle: "",
+  updateInfos: "",
+  id: 0,
+});
+const rules = reactive({
+  logisticName: [
+    { required: true, message: "请输入物流名称", trigger: "blur" },
+  ],
+});
+const projectOptions = [{ label: "ERP-APP", code: "ERP-APP" }];
+
+const upload = ref<UploadInstance>();
+
+const headers = {
+  "X-ERP-User-From": 10,
+  "X-ERP-DataSource-Id": getToken("dataBaseAlias"),
+  "X-ERP-Supplier-Code": getToken("shardingKey"),
+  "X-Token": getToken("Access-Token"),
+};
+const uploadParams = reactive({
+  srcfilename: "",
+  chunks: 1,
+  bucketName: "webImage",
+});
+
+const handleExceed: UploadProps["onExceed"] = (files) => {
+  upload.value!.clearFiles();
+  const file = files[0] as UploadRawFile;
+  file.uid = genFileId();
+  upload.value!.handleStart(file);
+};
+
+function beforeUpload(file) {
+  console.log(file);
+  uploadParams.srcfilename = file.name;
+  return new Promise((resolve, reject) => {
+    // if (file.size > 307200) {
+    //   ElMessage.warning(
+    //     "图片大小不能大于300KB,请您注意图片的长和宽,网页图片的分辨率为72"
+    //   );
+    //   reject();
+    // } else {
+    resolve(file);
+    // }
+  });
+}
+
+function successFile(res, file, fileList) {
+  // console.log(res);
+  // formData.posterLocationImage = res.fileLink
+  formData.updatePackUrl = "/static/" + res.fileLink;
+
+  ElMessage.success("上传成功");
+}
+
+function handleSubmit() {
+  formRef.value.validate((valid: any) => {
+    if (valid) {
+      //增加
+      const postData = JSON.stringify(formData);
+      const params = {
+        upgradeProject: postData,
+      };
+      publishUpgradeProject(params).then((response) => {
+        dialogVisible.value = false;
+        if (response.httpCode == 200) {
+          emit("dialogChange");
+          ElMessage.success("操作成功");
+        }
+      });
+    }
+  });
+}
+
+/**  重置表单 */
+function resetForm() {
+  formRef.value.resetFields();
+  formData.id = 0;
+}
+
+/**关闭弹窗 */
+function closeDialog() {
+  dialogVisible.value = false;
+  formRef.value.resetFields();
+  formData.id = 0;
+}
+
+function getItemData(item) {}
+
+const projectChange = (val) => {
+  const proj = projectOptions.find((v) => v.label === val);
+  formData.projectCode = proj.code;
+};
+
+defineExpose({
+  dialogVisible,
+  dialogTitle,
+  getItemData,
+  resetForm,
+});
+</script>
+
+<style scoped lang="scss"></style>

+ 111 - 0
src/views/upgrade/compt/revokeDialog.vue

@@ -0,0 +1,111 @@
+<template>
+  <div class="dialog">
+    <el-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      width="480"
+      @close="closeDialog()"
+    >
+      <el-form
+        ref="formRef"
+        :model="formData"
+        :rules="rules"
+        label-width="120px"
+      >
+        <el-row>
+          <el-col :span="24">
+            <el-form-item prop="projectName" label="项目名称">
+              <el-select v-model="formData.projectName" @change="projectChange">
+                <el-option
+                  v-for="item in projectOptions"
+                  :key="item.code"
+                  :label="item.label"
+                  :value="item.label"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item prop="projectCode" label="项目代码">
+              <el-input disabled v-model="formData.projectCode" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button v-throttle type="primary" @click="handleSubmit"
+            >确 定
+          </el-button>
+          <el-button @click="closeDialog()">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+<script setup lang="ts">
+import { FormInstance } from "element-plus";
+
+import { revokeUpgradeProject } from "@/api/upgrade";
+
+let dialogVisible = ref(false);
+let dialogTitle = ref("");
+const formRef = ref<FormInstance>();
+const emit = defineEmits(["dialogChange"]);
+const formData = reactive({
+  projectName: "ERP-APP",
+  projectCode: "ERP-APP",
+});
+
+const projectOptions = [{ label: "ERP-APP", code: "ERP-APP" }];
+
+function handleSubmit() {
+  formRef.value.validate((valid: any) => {
+    if (valid) {
+      //增加
+      const params = {
+        projectCode: formData.projectCode,
+      };
+      revokeUpgradeProject(params).then((response) => {
+        dialogVisible.value = false;
+        if (response.httpCode == 200) {
+          emit("dialogChange");
+          ElMessage.success("操作成功");
+        }
+      });
+    }
+  });
+}
+
+/**  重置表单 */
+function resetForm() {
+  formRef.value.resetFields();
+  formData.id = 0;
+}
+
+/**关闭弹窗 */
+function closeDialog() {
+  dialogVisible.value = false;
+  formRef.value.resetFields();
+  formData.id = 0;
+}
+
+function getItemData(item) {}
+
+const projectChange = (val) => {
+  const proj = projectOptions.find((v) => v.label === val);
+  formData.projectCode = proj.code;
+};
+
+defineExpose({
+  dialogVisible,
+  dialogTitle,
+  getItemData,
+  resetForm,
+});
+</script>
+
+<style scoped lang="scss"></style>

+ 151 - 0
src/views/upgrade/index.vue

@@ -0,0 +1,151 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <el-input
+        @keyup.enter="handleSearch"
+        class="w200px mr5px"
+        v-model="queryForm.keyWord"
+        placeholder="关键字搜索"
+      />
+      <el-button type="primary" @click="handleSearch">
+        <i-ep-search />
+        搜索
+      </el-button>
+      <div class="w100px ml10px" style="display: inline-block">
+        <el-checkbox
+          style="position: absolute; top: 11px"
+          v-model="disableLock"
+          label="已禁用"
+          border
+        ></el-checkbox>
+      </div>
+      <el-button @click="openDialog()" color="#11a983">
+        <i-ep-plus />
+        发布更新
+      </el-button>
+      <el-button @click="openRevokeDialog()" color="#11a983">
+        <i-ep-close />
+        撤销更新
+      </el-button>
+      <el-button type="primary" @click="refreshTableInfo">
+        <i-ep-refresh />
+      </el-button>
+    </div>
+    <div class="table-con">
+      <el-table
+        :max-height="tableHeight"
+        v-loading="loading"
+        :data="tableData"
+        highlight-current-row
+        border
+      >
+        <el-table-column type="index" label="#" width="50">
+          <template #default="scope">
+            <span>{{ scope.$index + 1 }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="projectName" width="150" label="项目名称" />
+        <el-table-column prop="projectCode" width="150" label="项目代码" />
+        <el-table-column prop="majorVersion" width="80" label="主版本" />
+        <el-table-column prop="minorVersion" width="80" label="次版本" />
+        <el-table-column prop="minVersion" width="80" label="小版本" />
+        <el-table-column prop="updateTitle" width="150" label="更新标题" />
+        <el-table-column prop="updatePackUrl" label="更新包地址">
+          <template #default="{ row }">
+            <el-link :href="row.updatePackUrl">
+              {{ row.updatePackUrl }}
+            </el-link>
+          </template>
+        </el-table-column>
+        <el-table-column prop="status" width="100" label="状态">
+          <template #default="{ row }">
+            <el-tag v-if="row.voidFlag == 0" type="success"> 正常</el-tag>
+            <el-tag v-else="row.voidFlag == 1" type="danger"> 停用</el-tag>
+          </template>
+        </el-table-column>
+
+        <el-table-column prop="updateDate" label="更新时间" width="155">
+          <template #default="{ row }">
+            <span v-if="row.updateDate">
+              {{ $filters.getTime(row.updateDate) }}
+            </span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        v-if="total > 0"
+        v-model:total="total"
+        v-model:page="queryPage.pageIndex"
+        v-model:limit="queryPage.pageSize"
+        @pagination="getTableData"
+      />
+    </div>
+    <child-dialog ref="childDialog" @dialogChange="dialogChange"></child-dialog>
+    <revoke-dialog
+      ref="revokeDialog"
+      @dialogChange="dialogChange"
+    ></revoke-dialog>
+  </div>
+</template>
+<script setup lang="ts">
+import ChildDialog from "./compt/childDialog.vue";
+import { useTable } from "@/hooks/useTable";
+import RevokeDialog from "@/views/upgrade/compt/revokeDialog.vue";
+import { queryUpgradeProjects } from "@/api/upgrade";
+
+let disableLock = ref("");
+const childDialog = ref<any>();
+const revokeDialog = ref();
+
+//增加编辑
+function openDialog(item?: any) {
+  childDialog.value.dialogVisible = true;
+  if (item) {
+    childDialog.value.dialogTitle = "编辑";
+    nextTick(() => {
+      childDialog.value.getItemData(item);
+    });
+  } else {
+    nextTick(() => {
+      childDialog.value.dialogTitle = "增加";
+      childDialog.value.resetForm();
+    });
+  }
+}
+
+function openRevokeDialog() {
+  revokeDialog.value.dialogVisible = true;
+}
+
+//修改成功后传递事件
+function dialogChange() {
+  getTableData();
+}
+
+const queryForm = reactive({
+  keyWord: "",
+  voidFlag: 0,
+});
+watch(
+  () => disableLock.value,
+  (disableLock) => {
+    if (disableLock) {
+      queryForm.voidFlag = 1;
+      getTableData();
+    } else {
+      queryForm.voidFlag = 0;
+      getTableData();
+    }
+  }
+);
+const {
+  tableData,
+  queryPage,
+  total,
+  loading,
+  getTableData,
+  tableHeight,
+  handleSearch, //搜索
+  refreshTableInfo, //刷新
+} = useTable(queryUpgradeProjects, queryForm);
+</script>

+ 2 - 2
vite.config.ts

@@ -54,12 +54,12 @@ export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
           // target: "http://vapi.youlai.tech",
           // 开发接口地址
           // target: "http://192.168.1.25:51105",//24涛哥//44春禾//25小梁
-          target: "http://192.168.1.44:9991", //24涛哥//44春禾//25小梁
+          target: "http://192.168.1.44:15991", //24涛哥//44春禾//25小梁
           rewrite: (path) =>
             path.replace(new RegExp("^" + env.VITE_APP_BASE_API), ""),
         },
         "/static": {
-          target: "http://192.168.1.44:11994",
+          target: "http://192.168.1.44:15992",
           changeOrigin: true,
           rewrite: (path) => path.replace(new RegExp("^/static"), ""),
         },