gemercheung 1 年間 前
コミット
390233a682

+ 18 - 2
src/store/cameraVersion.ts

@@ -2,10 +2,22 @@ import {
   axios,
   PaggingReq,
   PaggingRes,
-  cameraVersionList
+  cameraVersionList,
+  cameraVersionUpload,
+  cameraVersionDelete,
+  cameraVersionUpdate,
 
 } from "@/request";
 
+export type CameraVersionEntity = {
+  id?: string;
+  version: string;
+  description: string;
+  minVersion: string;
+  type: number | string;
+  file: File | undefined
+}
+
 
 export type CameraVersionType = PaggingReq<{
   version: string;
@@ -15,4 +27,8 @@ export type CameraVersionType = PaggingReq<{
 export const getCameraVersionList = (params: CameraVersionType) => {
 
   return axios.post(cameraVersionList, params) as unknown as PaggingRes<{}>;
-}
+}
+
+export const uploadFile = async (file: File) => {
+  return (await axios.post<string>(cameraVersionUpload, { file })).data;
+};

+ 112 - 0
src/view/cameraVersion/edit.vue

@@ -0,0 +1,112 @@
+<template>
+  <el-form ref="form" label-width="120px" class="cameraVersion-from">
+    <el-form-item label="设备类型" class="mandatory">
+      {{ cameraTypeDesc[data.type] }}
+    </el-form-item>
+    <el-form-item label="版本号" class="mandatory">
+      <el-input
+        maxlength="30"
+        v-model="data.version"
+        placeholder="请输入最新版本号"
+      ></el-input>
+    </el-form-item>
+    <el-form-item label="最低版本号" class="mandatory">
+      <el-input
+        maxlength="30"
+        v-model="data.minVersion"
+        placeholder="请输入最低版本(低于此版本号强制更新)"
+      ></el-input>
+    </el-form-item>
+
+    <el-form-item label="版本更新说明" class="mandatory">
+      <el-input
+        maxlength="200"
+        type="textarea"
+        :autosize="{ minRows: 4, maxRows: 10 }"
+        v-model="data.description"
+        placeholder="请输入版本更新说明"
+      ></el-input>
+    </el-form-item>
+    <el-form-item label="文件" class="mandatory">
+      <el-upload
+        class="upload-demo"
+        :multiple="false"
+        :limit="1"
+        :disabled="!!data.file"
+        :before-upload="upload"
+        :file-list="fileList"
+        :http-request="httpsApi"
+        :on-preview="previewFile"
+        :accept="accept"
+        :before-remove="removeFile"
+      >
+        <el-button type="primary" :disabled="!!data.file">
+          <el-icon><Upload /></el-icon>上传
+        </el-button>
+        <!-- <template v-slot:tip>
+          <div class="el-upload__tip">注:可上传{{ size }}以内的{{ formatDesc }}</div>
+        </template> -->
+        <!-- <template v-slot:file="{ file }: { file: UploadFile }">
+          <div class="file" @click.stop="previewFile()">
+            <div>
+              <el-icon><Document /></el-icon>
+              <span class="name">{{ file.name }}</span>
+            </div>
+            <el-icon @click.stop="removeFile()"><Close /></el-icon>
+          </div>
+        </template> -->
+      </el-upload>
+    </el-form-item>
+  </el-form>
+</template>
+
+<script setup lang="ts">
+import { computed, ref, watchEffect } from "vue";
+// import { ElMessage } from "element-plus";
+import { QuiskExpose } from "@/helper/mount";
+import { CameraVersionEntity } from "@/store/cameraVersion";
+import { useUpload } from "@/hook/upload";
+import { maxFileSize } from "@/constant/caseFile";
+import { CameraType } from "@/store/camera";
+import { cameraTypeDesc } from "@/constant/camera";
+import { uploadFile } from "@/store/cameraVersion";
+
+const cameraTypes = [CameraType.SWKJ, CameraType.SWSS1, CameraType.SWSS2];
+const props = defineProps<{
+  type: string | number;
+  entity?: CameraVersionEntity;
+}>();
+const data = ref<CameraVersionEntity>({
+  version: "",
+  description: "",
+  minVersion: "",
+  type: props.type.toString(),
+  file: undefined,
+});
+
+const isAdd = computed(() => !props.entity?.id);
+
+const httpsApi = async ({ file }) => {
+  console.log("httpsApi", file);
+  let fileUrl = await uploadFile(file);
+
+  file.url = fileUrl;
+  console.log("httpsApi", file, fileUrl);
+};
+
+const { size, fileList, upload, removeFile, previewFile, file, accept } =
+  useUpload({
+    maxSize: maxFileSize,
+    formats: [".jpg", ".jpeg"],
+  });
+defineExpose<QuiskExpose>({
+  async submit() {},
+});
+</script>
+
+<style scoped>
+.icon-style {
+  font-size: 20px;
+  line-height: 50px;
+}
+</style>

+ 20 - 11
src/view/cameraVersion/index.vue

@@ -1,15 +1,15 @@
 <template>
-  <com-head :options="headOptions" v-model="params.pagging.state.query.type">
+  <com-head :options="headOptions" v-model="pageHook.pagging.state.query.type">
     <el-form label-width="94px" inline>
       <slot name="header" />
       <el-form-item label="版本号">
         <el-input placeholder="请输入"></el-input>
       </el-form-item>
       <el-form-item class="searh-btns" style="grid-area: 1 / 4 / 2 / 4">
-        <el-button type="primary" @click="params.pagging.refresh"
+        <el-button type="primary" @click="pageHook.pagging.refresh"
           >查询</el-button
         >
-        <el-button type="primary" plain @click="params.pagging.queryReset"
+        <el-button type="primary" plain @click="pageHook.pagging.queryReset"
           >重置</el-button
         >
       </el-form-item>
@@ -17,7 +17,11 @@
   </com-head>
 
   <div class="body-layer">
-    <slot name="content" />
+    <div class="body-but">
+      <el-button type="primary" v-pdpath="'add'" @click="addHandler"
+        >新增</el-button
+      >
+    </div>
     <el-table
       :data="tableData"
       tooltip-effect="dark"
@@ -35,11 +39,11 @@
       <el-table-column label="状态" prop="deptLevelStr"></el-table-column>
     </el-table>
     <com-pagination
-      @size-change="params.pagging.changPageSize"
-      @current-change="params.pagging.changPageCurrent"
-      :current-page="params.pagging.state.pag.currentPage"
-      :page-size="params.pagging.state.pag.size"
-      :total="params.pagging.state.pag.total"
+      @size-change="pageHook.pagging.changPageSize"
+      @current-change="pageHook.pagging.changPageCurrent"
+      :current-page="pageHook.pagging.state.pag.currentPage"
+      :page-size="pageHook.pagging.state.pag.size"
+      :total="pageHook.pagging.state.pag.total"
     />
   </div>
 </template>
@@ -49,7 +53,7 @@ import comHead from "@/components/head/index.vue";
 import comPagination from "@/components/pagination/index.vue";
 import { useScenePaggingParams } from "./paging";
 import { CameraType } from "@/store/camera";
-
+import { addCameraVersion, editCameraVersion } from "./quisk";
 const tableData = ref();
 
 const headOptions = [
@@ -58,5 +62,10 @@ const headOptions = [
   { value: CameraType.SWSS2, name: "激光移动" },
 ];
 
-const params = useScenePaggingParams();
+const pageHook = useScenePaggingParams();
+
+const addHandler = async () => {
+  (await addCameraVersion({ type: pageHook.pagging.state.query.type })) &&
+    pageHook.pagging.refresh();
+};
 </script>

+ 5 - 24
src/view/cameraVersion/paging.ts

@@ -1,5 +1,6 @@
 import { usePagging } from "@/hook/pagging";
-import { SceneType, getScenePagging } from "@/store/scene";
+// import { SceneType, getScenePagging } from "@/store/scene";
+import { CameraType } from "@/store/camera";
 import { getCameraVersionList } from '@/store/cameraVersion'
 import { computed, reactive, watch, watchEffect } from "vue";
 
@@ -8,33 +9,13 @@ export const useScenePaggingParams = () => {
   const pagging = usePagging({
     get: getCameraVersionList,
     paramsTemlate: {
-      type: SceneType.SWKJ,
+      type: CameraType.SWKJ,
       version: '',
     },
   });
 
-  const isSwmx = computed(() => pagging.state.query.type === SceneType.SWMX);
-
-  const keyword = computed({
-    get: () =>
-      isSwmx.value
-        ? pagging.state.query.modelTitle
-        : pagging.state.query.sceneName,
-    set: (val: string) => {
-      pagging.state.query.modelTitle = val;
-      pagging.state.query.sceneName = val;
-    },
-  });
-
-  let oldSnCode = pagging.state.query.snCode;
-
   watchEffect(() => {
-    if (isSwmx.value) {
-      oldSnCode = pagging.state.query.snCode;
-      pagging.state.query.snCode = "";
-    } else {
-      pagging.state.query.snCode = oldSnCode;
-    }
+
   });
 
   watch(
@@ -51,6 +32,6 @@ export const useScenePaggingParams = () => {
     pagging.state.query.type = type;
   };
 
-  return reactive({ pagging, keyword, isSwmx });
+  return reactive({ pagging });
 };
 export type ScenePagging = ReturnType<typeof useScenePaggingParams>["pagging"];

+ 11 - 0
src/view/cameraVersion/quisk.ts

@@ -0,0 +1,11 @@
+import { quiskMountFactory } from "@/helper/mount";
+import EditCameraVersion from "./edit.vue";
+
+export const editCameraVersion = quiskMountFactory(EditCameraVersion, {
+  title: "编辑固件",
+  width: 540,
+});
+export const addCameraVersion = quiskMountFactory(EditCameraVersion, {
+  title: "新增固件",
+  width: 540,
+});

+ 4 - 2
vite.config.ts

@@ -45,12 +45,14 @@ export default defineConfig({
     host: "0.0.0.0",
     proxy: {
       "/api": {
-        target: dev ? "https://xj-mix3d.4dkankan.com" : "mix3d.4dkankan.com",
+        secure: false,
+        target: dev ? "https://192.168.0.25:14000" : "mix3d.4dkankan.com",
         changeOrigin: true,
         rewrite: (path) => path.replace(new RegExp(`^/api`), ""),
       },
       "/fusion-xj": {
-        target: dev ? "https://xj-mix3d.4dkankan.com" : "mix3d.4dkankan.com",
+        secure: false,
+        target: dev ? "https://192.168.0.25:14000" : "mix3d.4dkankan.com",
         changeOrigin: true,
         rewrite: (path) => path.replace(new RegExp(`^/api`), "/fusion-xj"),
       },