Browse Source

专利维权等

zhangchuang 9 hours ago
parent
commit
cc70df345d

+ 11 - 0
src/api/system/system.api.ts

@@ -374,3 +374,14 @@ export const getTechnologyInnovationRequirementsList = async (data: any) => {
 //     httpErrorHandle();
 //   }
 // };
+
+
+//  可以自定义请求地址 添加
+export const postCreate = async (data: any, path: string) => {
+  try {
+    const res = await http(RequestHttpEnum.POST)(path, data);
+    return res;
+  } catch {
+    httpErrorHandle();
+  }
+};

+ 133 - 0
src/components/ReceiptFileUpload.vue

@@ -0,0 +1,133 @@
+<template>
+  <div>
+    <el-descriptions title="基础信息" border>
+      <el-descriptions-item label="商标注册号">{{
+        updateInfo.logoRegistrationNumber
+      }}</el-descriptions-item>
+      <el-descriptions-item label="申请人">{{
+        updateInfo.applicant
+      }}</el-descriptions-item>
+      <el-descriptions-item label="联系方式">{{
+        updateInfo.contactDetails
+      }}</el-descriptions-item>
+      <!-- 可以根据需要添加更多的商标信息展示 -->
+    </el-descriptions>
+
+    <el-form :model="form" label-width="auto" style="margin-top: 2rem">
+      <el-form-item class="form-item" label="回执文件">
+        <el-upload
+          drag
+          multiple
+          :file-list="fileList"
+          style="width: 500px"
+          :http-request="handleUploadChange"
+          :on-remove="handleRemove"
+        >
+          <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+          <div class="el-upload__text">上传附件</div>
+        </el-upload>
+      </el-form-item>
+
+      <el-form-item>
+        <div class="button-container">
+          <el-button type="primary" @click="onSubmit">提交</el-button>
+          <el-button @click="onReset">取消</el-button>
+        </div>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { reactive, ref, defineProps } from "vue";
+import { ElMessage } from "element-plus";
+import { postCreate, postFileUpload } from "@/api";
+
+const emit = defineEmits(["handleUpload"]);
+
+const props = defineProps<{
+  updateInfo: any;
+  path: string;
+}>();
+
+const form = reactive({
+  annexes: [],
+});
+
+const fileList = ref<any[]>([]);
+const files = ref<any[]>([]);
+
+const handleUploadChange = async (option: any) => {
+  try {
+    const file = new FormData();
+    file.append("file", option.file);
+    const res = await postFileUpload(file); // 实际的上传逻辑
+    files.value.push(res); // 保存上传的文件信息
+    fileList.value.push(option.file); // 将文件添加到显示列表
+  } catch (error) {
+    ElMessage.error("文件上传失败");
+  }
+};
+
+const handleRemove = (file: any) => {
+  const fileIndexOf = files.value.findIndex(
+    (item: { uuid: any }) => item.uuid === file.uid
+  );
+
+  if (fileIndexOf !== -1) {
+    files.value.splice(fileIndexOf, 1); // 从 files 中删除该文件
+  }
+
+  const fileListIndex = fileList.value.indexOf(file);
+  if (fileListIndex !== -1) {
+    fileList.value.splice(fileListIndex, 1); // 从 fileList 中删除该文件
+  }
+};
+
+const onSubmit = async () => {
+  if (files.value.length === 0) {
+    ElMessage.error("请上传至少一个回执文件!");
+    return;
+  }
+
+  const fileList = files.value.map((item: { uuid: any }) => item.uuid)
+
+  const data = {
+    id: props.updateInfo.id,
+    annexes: [...fileList, ...props.updateInfo.annexes]
+  };
+
+  try {
+    const response = (await postCreate(
+      data,
+      props.path
+    )) as unknown as any;
+    if (response.code === 200) {
+      ElMessage.success("回执文件提交成功!");
+      resetForm();
+    }
+  } catch (error) {
+    ElMessage.error("提交失败!");
+  }
+
+  emit("handleUpload");
+};
+
+const resetForm = () => {
+  form.annexes = [];
+  files.value = [];
+  fileList.value = [];
+};
+
+const onReset = () => {
+  emit("handleUpload");
+};
+</script>
+
+<style scoped>
+.button-container {
+  width: 1080px;
+  display: flex;
+  justify-content: flex-end; /* 将按钮固定在右侧 */
+}
+</style>

+ 26 - 2
src/views/user/Patent22.vue

@@ -105,7 +105,7 @@
           <el-button type="primary" text size="small" @click="onShow(scope.row)"
             >查看</el-button
           >
-          <el-button type="primary" text size="small">补充资料上传</el-button>
+          <el-button type="primary" text size="small" @click="onUpload(scope.row)">补充资料上传</el-button>
           <el-button
             type="primary"
             text
@@ -131,6 +131,14 @@
     <el-dialog v-model="downloadVisible" title="附件下载" width="1080">
       <Download :fileList="detailsData.downloadFileList" :key="componentKey" />
     </el-dialog>
+    <el-dialog v-model="uploadVisible" title="补充资料" width="1080">
+      <ReceiptFileUpload
+        :path="path"
+        :updateInfo="updateInfo"
+        @handleUpload="handleUpload"
+        :key="componentKey"
+      />
+    </el-dialog>
   </div>
 </template>
 
@@ -140,7 +148,7 @@ import { getTrademarkRenewalList } from "@/api";
 import { useDictStore } from "@/store/modules/useDictStore/index";
 import Download from "@/components/download.vue";
 import Descriptions from "@/components/Home.vue";
-
+import ReceiptFileUpload from "@/components/ReceiptFileUpload.vue"
 const queryForm = ref<any>({
   trademarkName: "",
   applicationNumber: "",
@@ -150,6 +158,8 @@ const queryForm = ref<any>({
   patentType: "",
 });
 
+const path = "/intellectual-property/trademark-renewal/create";
+
 const currentPage = ref(1);
 const pageSize = ref(5);
 const total = ref(0);
@@ -160,6 +170,9 @@ const descriptionsVisible = ref(false);
 const downloadVisible = ref(false);
 const componentKey = ref(0);
 
+const updateInfo = ref({});
+const uploadVisible = ref(false);
+
 // 字典
 const dictStore = useDictStore();
 const legal_status = dictStore.dictData.legal_status;
@@ -197,6 +210,17 @@ const handleSearch = () => {
   pageInit();
 };
 
+const handleUpload = () => {
+  uploadVisible.value = false;
+  pageInit();
+};
+
+const onUpload = (row: any) => {
+  componentKey.value += 1;
+  updateInfo.value = row;
+  uploadVisible.value = true;
+};
+
 const onDownload = (row: any) => {
   console.log("onDownload ===>", row);
   detailsData.value = row;

+ 25 - 1
src/views/user/Patent23.vue

@@ -103,7 +103,7 @@
       <el-table-column label="操作" width="300">
         <template v-slot="scope">
           <el-button type="primary" text size="small" @click="onShow(scope.row)">查看</el-button>
-          <el-button type="primary" text size="small">补充资料上传</el-button>
+          <el-button type="primary" text size="small" @click="onUpload(scope.row)">补充资料上传</el-button>
           <el-button type="primary" text size="small" @click="onDownload(scope.row)">文件下载</el-button>
         </template>
       </el-table-column>
@@ -126,6 +126,14 @@
     <el-dialog v-model="downloadVisible" title="附件下载" width="1080">
       <Download :fileList="detailsData.downloadFileList" :key="componentKey" />
     </el-dialog>
+    <el-dialog v-model="uploadVisible" title="补充资料" width="1080">
+      <ReceiptFileUpload
+        :path="path"
+        :updateInfo="updateInfo"
+        @handleUpload="handleUpload"
+        :key="componentKey"
+      />
+    </el-dialog>
   </div>
 </template>
 
@@ -135,6 +143,7 @@ import { getTrademarkAmendmentList } from "@/api";
 import { useDictStore } from "@/store/modules/useDictStore/index";
 import Download from "@/components/download.vue";
 import Descriptions from "@/components/Home.vue";
+import ReceiptFileUpload from "@/components/ReceiptFileUpload.vue"
 const queryForm = ref<any>({
   trademarkName: "",
   applicationNumber: "",
@@ -143,6 +152,7 @@ const queryForm = ref<any>({
   paymentStatus: "",
   patentType: "",
 });
+const path = "/intellectual-property/trademark-amendment/create";
 
 const currentPage = ref(1);
 const pageSize = ref(5);
@@ -159,6 +169,9 @@ const legal_status = dictStore.dictData.legal_status;
 const annual_fee_payment_status = dictStore.dictData.annual_fee_payment_status;
 const patents_type = dictStore.dictData.patents_type;
 
+const updateInfo = ref({});
+const uploadVisible = ref(false);
+
 // 定义所有字段的配置项
 const fieldsConfig = ref([
   { key: "applicationNumber", label: "申请号/注册号", visible: true },
@@ -190,6 +203,17 @@ const handleSearch = () => {
   pageInit();
 };
 
+const handleUpload = () => {
+  uploadVisible.value = false;
+  pageInit();
+};
+
+const onUpload = (row: any) => {
+  componentKey.value += 1;
+  updateInfo.value = row;
+  uploadVisible.value = true;
+};
+
 const onDownload = (row: any) => {
   console.log("onDownload ===>", row);
   detailsData.value = row;

+ 26 - 1
src/views/user/Patent24.vue

@@ -103,7 +103,7 @@
       <el-table-column label="操作" width="300">
         <template v-slot="scope">
           <el-button type="primary" text size="small" @click="onShow(scope.row)">查看</el-button>
-          <el-button type="primary" text size="small">补充资料上传</el-button>
+          <el-button type="primary" text size="small" @click="onUpload(scope.row)">补充资料上传</el-button>
           <el-button type="primary" text size="small" @click="onDownload(scope.row)">文件下载</el-button>
         </template>
       </el-table-column>
@@ -126,6 +126,14 @@
     <el-dialog v-model="downloadVisible" title="附件下载" width="1080">
       <Download :fileList="detailsData.downloadFileList" :key="componentKey" />
     </el-dialog>
+    <el-dialog v-model="uploadVisible" title="补充资料" width="1080">
+      <ReceiptFileUpload
+        :path="path"
+        :updateInfo="updateInfo"
+        @handleUpload="handleUpload"
+        :key="componentKey"
+      />
+    </el-dialog>
   </div>
 </template>
 
@@ -135,6 +143,7 @@ import { getTrademarkOppositionList } from "@/api";
 import { useDictStore } from "@/store/modules/useDictStore/index";
 import Download from "@/components/download.vue";
 import Descriptions from "@/components/Home.vue";
+import ReceiptFileUpload from "@/components/ReceiptFileUpload.vue"
 const queryForm = ref<any>({
   trademarkName: "",
   applicationNumber: "",
@@ -144,6 +153,8 @@ const queryForm = ref<any>({
   patentType: "",
 });
 
+const path = "/intellectual-property/trademark-opposition/create";
+
 const currentPage = ref(1);
 const pageSize = ref(5);
 const total = ref(0);
@@ -159,6 +170,9 @@ const legal_status = dictStore.dictData.legal_status;
 const annual_fee_payment_status = dictStore.dictData.annual_fee_payment_status;
 const patents_type = dictStore.dictData.patents_type;
 
+const updateInfo = ref({});
+const uploadVisible = ref(false);
+
 // 定义所有字段的配置项
 const fieldsConfig = ref([
   { key: "applicationNumber", label: "申请号/注册号", visible: true },
@@ -190,6 +204,17 @@ const handleSearch = () => {
   pageInit();
 };
 
+const handleUpload = () => {
+  uploadVisible.value = false;
+  pageInit();
+};
+
+const onUpload = (row: any) => {
+  componentKey.value += 1;
+  updateInfo.value = row;
+  uploadVisible.value = true;
+};
+
 const onDownload = (row: any) => {
   console.log("onDownload ===>", row);
   detailsData.value = row;

+ 26 - 1
src/views/user/Patent25.vue

@@ -103,7 +103,7 @@
       <el-table-column label="操作" width="300">
         <template v-slot="scope">
           <el-button type="primary" text size="small" @click="onShow(scope.row)">查看</el-button>
-          <el-button type="primary" text size="small">补充资料上传</el-button>
+          <el-button type="primary" text size="small" @click="onUpload(scope.row)">补充资料上传</el-button>
           <el-button type="primary" text size="small" @click="onDownload(scope.row)">文件下载</el-button>
         </template>
       </el-table-column>
@@ -126,6 +126,14 @@
     <el-dialog v-model="downloadVisible" title="附件下载" width="1080">
       <Download :fileList="detailsData.downloadFileList" :key="componentKey" />
     </el-dialog>
+    <el-dialog v-model="uploadVisible" title="补充资料" width="1080">
+      <ReceiptFileUpload
+        :path="path"
+        :updateInfo="updateInfo"
+        @handleUpload="handleUpload"
+        :key="componentKey"
+      />
+    </el-dialog>
   </div>
 </template>
 
@@ -135,6 +143,7 @@ import { getTrademarkRejectionList } from "@/api";
 import { useDictStore } from "@/store/modules/useDictStore/index";
 import Download from "@/components/download.vue";
 import Descriptions from "@/components/Home.vue";
+import ReceiptFileUpload from "@/components/ReceiptFileUpload.vue"
 const queryForm = ref<any>({
   trademarkName: "",
   applicationNumber: "",
@@ -144,6 +153,8 @@ const queryForm = ref<any>({
   patentType: "",
 });
 
+const path = "/intellectual-property/trademark-rejection/create";
+
 const currentPage = ref(1);
 const pageSize = ref(5);
 const total = ref(0);
@@ -153,6 +164,9 @@ const detailsData = ref<any>({});
 const descriptionsVisible = ref(false);
 const downloadVisible = ref(false);
 const componentKey = ref(0);
+
+const updateInfo = ref({});
+const uploadVisible = ref(false);
 // 字典
 const dictStore = useDictStore();
 const legal_status = dictStore.dictData.legal_status;
@@ -190,6 +204,17 @@ const handleSearch = () => {
   pageInit();
 };
 
+const handleUpload = () => {
+  uploadVisible.value = false;
+  pageInit();
+};
+
+const onUpload = (row: any) => {
+  componentKey.value += 1;
+  updateInfo.value = row;
+  uploadVisible.value = true;
+};
+
 const onDownload = (row: any) => {
   console.log("onDownload ===>", row);
   detailsData.value = row;

+ 46 - 8
src/views/user/Patent26.vue

@@ -102,9 +102,23 @@
       />
       <el-table-column label="操作" width="300">
         <template v-slot="scope">
-          <el-button type="primary" text size="small" @click="onShow(scope.row)">查看</el-button>
-          <el-button type="primary" text size="small">补充资料上传</el-button>
-          <el-button type="primary" text size="small" @click="onDownload(scope.row)">文件下载</el-button>
+          <el-button type="primary" text size="small" @click="onShow(scope.row)"
+            >查看</el-button
+          >
+          <el-button
+            type="primary"
+            text
+            size="small"
+            @click="onUpload(scope.row)"
+            >补充资料上传</el-button
+          >
+          <el-button
+            type="primary"
+            text
+            size="small"
+            @click="onDownload(scope.row)"
+            >文件下载</el-button
+          >
         </template>
       </el-table-column>
     </el-table>
@@ -118,14 +132,19 @@
       />
     </div>
     <el-dialog v-model="descriptionsVisible" title="详情信息" width="1280">
-      <Descriptions
-        :data="detailsData"
-        :key="componentKey"
-      />
+      <Descriptions :data="detailsData" :key="componentKey" />
     </el-dialog>
     <el-dialog v-model="downloadVisible" title="附件下载" width="1080">
       <Download :fileList="detailsData.downloadFileList" :key="componentKey" />
     </el-dialog>
+    <el-dialog v-model="uploadVisible" title="补充资料" width="1080">
+      <ReceiptFileUpload
+        :path="path"
+        :updateInfo="updateInfo"
+        @handleUpload="handleUpload"
+        :key="componentKey"
+      />
+    </el-dialog>
   </div>
 </template>
 
@@ -135,6 +154,7 @@ import { getThreeYearNonUseCancellationList } from "@/api";
 import { useDictStore } from "@/store/modules/useDictStore/index";
 import Download from "@/components/download.vue";
 import Descriptions from "@/components/Home.vue";
+import ReceiptFileUpload from "@/components/ReceiptFileUpload.vue";
 const queryForm = ref<any>({
   trademarkName: "",
   applicationNumber: "",
@@ -144,11 +164,16 @@ const queryForm = ref<any>({
   patentType: "",
 });
 
+const path = "/intellectual-property/three-year-non-use-cancellation/create";
+
 const currentPage = ref(1);
 const pageSize = ref(5);
 const total = ref(0);
 const tableData = ref([]);
 
+const updateInfo = ref({});
+const uploadVisible = ref(false);
+
 const detailsData = ref<any>({});
 const descriptionsVisible = ref(false);
 const downloadVisible = ref(false);
@@ -181,7 +206,9 @@ const pageInit = async () => {
     beginTime: queryForm.value.createTime[0],
     endTime: queryForm.value.createTime[1],
   };
-  const res = (await getThreeYearNonUseCancellationList(data)) as unknown as any;
+  const res = (await getThreeYearNonUseCancellationList(
+    data
+  )) as unknown as any;
   tableData.value = res.data.list;
   total.value = res.data.total;
 };
@@ -190,6 +217,17 @@ const handleSearch = () => {
   pageInit();
 };
 
+const handleUpload = () => {
+  uploadVisible.value = false;
+  pageInit();
+};
+
+const onUpload = (row: any) => {
+  componentKey.value += 1;
+  updateInfo.value = row;
+  uploadVisible.value = true;
+};
+
 const onDownload = (row: any) => {
   console.log("onDownload ===>", row);
   detailsData.value = row;

+ 26 - 1
src/views/user/TrademarkRegistrationRecords.vue

@@ -105,7 +105,7 @@
           <el-button type="primary" text size="small" @click="onShow(scope.row)"
             >查看</el-button
           >
-          <el-button type="primary" text size="small">补充资料上传</el-button>
+          <el-button type="primary" text size="small" @click="onUpload(scope.row)">补充资料上传</el-button>
           <el-button
             type="primary"
             text
@@ -134,6 +134,14 @@
     <el-dialog v-model="downloadVisible" title="附件下载" width="1080">
       <Download :fileList="detailsData.downloadFileList" :key="componentKey" />
     </el-dialog>
+    <el-dialog v-model="uploadVisible" title="补充资料" width="1080">
+      <ReceiptFileUpload
+        :path="path"
+        :updateInfo="updateInfo"
+        @handleUpload="handleUpload"
+        :key="componentKey"
+      />
+    </el-dialog>
   </div>
 </template>
 
@@ -143,6 +151,7 @@ import { getTrademarkApplicationList } from "@/api";
 import { useDictStore } from "@/store/modules/useDictStore/index";
 import Download from "@/components/download.vue";
 import Descriptions from "@/components/Home.vue";
+import ReceiptFileUpload from "@/components/ReceiptFileUpload.vue"
 const queryForm = ref<any>({
   trademarkName: "",
   applicationNumber: "",
@@ -152,6 +161,8 @@ const queryForm = ref<any>({
   patentType: "",
 });
 
+const path = "/intellectual-property/trademark/create";
+
 const currentPage = ref(1);
 const pageSize = ref(5);
 const total = ref(0);
@@ -162,6 +173,9 @@ const descriptionsVisible = ref(false);
 const downloadVisible = ref(false);
 const componentKey = ref(0);
 
+const updateInfo = ref({});
+const uploadVisible = ref(false);
+
 // 字典
 const dictStore = useDictStore();
 const legal_status = dictStore.dictData.legal_status;
@@ -199,6 +213,17 @@ const handleSearch = () => {
   pageInit();
 };
 
+const handleUpload = () => {
+  uploadVisible.value = false;
+  pageInit();
+};
+
+const onUpload = (row: any) => {
+  componentKey.value += 1;
+  updateInfo.value = row;
+  uploadVisible.value = true;
+};
+
 const onDownload = (row: any) => {
   console.log("onDownload ===>", row);
   detailsData.value = row;