Browse Source

商标业务完善

zhangchuang 1 day ago
parent
commit
3fd4c62d6c

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

@@ -284,6 +284,71 @@ export const getTrademarkApplicationList = async (data: any) => {
   }
 };
 
+// 商标续展列表 
+export const getTrademarkRenewalList = async (data: any) => {
+  try {
+    const res = await http(RequestHttpEnum.GET)(
+      "/intellectual-property/trademark-renewal/list",
+      data
+    );
+    return res;
+  } catch {
+    httpErrorHandle();
+  }
+};
+
+// 商标变更列表
+export const getTrademarkAmendmentList = async (data: any) => {
+  try {
+    const res = await http(RequestHttpEnum.GET)(
+      "/intellectual-property/trademark-amendment/list",
+      data
+    );
+    return res;
+  } catch {
+    httpErrorHandle();
+  }
+};
+
+// 商标异议列表
+export const getTrademarkOppositionList = async (data: any) => {
+  try {
+    const res = await http(RequestHttpEnum.GET)(
+      "/intellectual-property/trademark-opposition/list",
+      data
+    );
+    return res;
+  } catch {
+    httpErrorHandle();
+  }
+};
+
+// 商标驳回复审列表
+export const getTrademarkRejectionList = async (data: any) => {
+  try {
+    const res = await http(RequestHttpEnum.GET)(
+      "/intellectual-property/trademark-rejection/list",
+      data
+    );
+    return res;
+  } catch {
+    httpErrorHandle();
+  }
+};
+
+// 商标撤三列表
+export const getThreeYearNonUseCancellationList = async (data: any) => {
+  try {
+    const res = await http(RequestHttpEnum.GET)(
+      "/intellectual-property/three-year-non-use-cancellation/list",
+      data
+    );
+    return res;
+  } catch {
+    httpErrorHandle();
+  }
+};
+
 // 需求发布记录
 export const getTechnologyInnovationRequirementsList = async (data: any) => {
   try {

+ 224 - 0
src/views/user/Patent22.vue

@@ -0,0 +1,224 @@
+<!-- 商标注册记录 -->
+<template>
+  <div class="page">
+    <div class="page-title">商标续展记录</div>
+
+    <!-- 查询条件 -->
+    <el-form :model="queryForm" class="query-form" inline label-width="100px">
+      <div style="display: flex; align-items: center">
+        <el-form-item label="商标名称">
+          <el-input
+            v-model="queryForm.trademarkName"
+            placeholder="请输入商标名称"
+            style="width: 200px"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="申请编号">
+          <el-input
+            v-model="queryForm.applicationNumber"
+            placeholder="请输入申请编号"
+            style="width: 200px"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="创建时间">
+          <el-date-picker
+            v-model="queryForm.createTime"
+            format="YYYY/MM/DD"
+            value-format="YYYY-MM-DD"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            style="width: 220px"
+          />
+        </el-form-item>
+
+        <el-form-item>
+          <el-button type="primary" @click="handleSearch">查询</el-button>
+        </el-form-item>
+      </div>
+
+      <div style="display: flex; align-items: center; margin-top: 10px">
+        <el-form-item label="法律状态">
+          <el-select
+            v-model="queryForm.legislationStatus"
+            placeholder="请选择法律状态"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in legal_status"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="年费状态">
+          <el-select
+            v-model="queryForm.paymentStatus"
+            placeholder="请选择年费状态"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in annual_fee_payment_status"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="商标类型">
+          <el-select
+            v-model="queryForm.patentType"
+            placeholder="请选择商标类型"
+            style="width: 240px"
+          >
+            <el-option
+              v-for="item in patents_type"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button @click="handleReset">重置</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+
+    <!-- 数据表格 -->
+    <el-table :data="tableData" style="width: 100%">
+      <el-table-column
+        v-for="field in fieldsConfig.filter((item) => item.visible)"
+        :key="field.key"
+        :prop="field.key"
+        :label="field.label"
+      />
+      <el-table-column label="操作" width="300">
+        <template v-slot="scope">
+          <el-button type="primary" text size="small">查看</el-button>
+          <el-button type="primary" text size="small">补充资料上传</el-button>
+          <el-button type="primary" text size="small">文件下载</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="currentPage"
+        v-model:page-size="pageSize"
+        layout="prev, pager, next, jumper"
+        :total="total"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, onMounted } from "vue";
+import { getTrademarkRenewalList } from "@/api";
+import { useDictStore } from "@/store/modules/useDictStore/index";
+
+const queryForm = ref<any>({
+  trademarkName: "",
+  applicationNumber: "",
+  createTime: "",
+  legislationStatus: "",
+  paymentStatus: "",
+  patentType: "",
+});
+
+const currentPage = ref(1);
+const pageSize = ref(5);
+const total = ref(0);
+const tableData = ref([]);
+
+// 字典
+const dictStore = useDictStore();
+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 fieldsConfig = ref([
+  { key: "applicationNumber", label: "申请号/注册号", visible: true },
+  { key: "trademarkName", label: "商标名称", visible: true },
+  { key: "createTime", label: "注册日期", visible: true },
+  { key: "logoType", label: "商标类型", visible: true },
+  { key: "auditStatus", label: "审查进度", visible: true },
+  { key: "legislationStatus", label: "法律状态", visible: true },
+]);
+
+const pageInit = async () => {
+  const data = {
+    pageSize: pageSize.value,
+    pageNumber: currentPage.value,
+    patentsName: queryForm.value.patentsName,
+    applicationNumber: queryForm.value.applicationNumber,
+    legislationStatus: queryForm.value.legislationStatus,
+    paymentStatus: queryForm.value.paymentStatus,
+    patentType: queryForm.value.patentType,
+    beginTime: queryForm.value.createTime[0],
+    endTime: queryForm.value.createTime[1],
+  };
+  const res = (await getTrademarkRenewalList(data)) as unknown as any;
+  tableData.value = res.data.list;
+  total.value = res.data.total;
+};
+
+const handleSearch = () => {
+  pageInit();
+};
+
+const handleReset = () => {
+  queryForm.value = {
+    patentsName: "",
+    applicationNumber: "",
+    createTime: "",
+    legislationStatus: "",
+    paymentStatus: "",
+    patentType: "",
+  };
+  pageInit();
+};
+
+const handleCurrentChange = (val: number) => {
+  currentPage.value = val;
+  pageInit();
+};
+
+onMounted(() => {
+  pageInit();
+});
+</script>
+
+<style lang="scss" scoped>
+.page {
+  .page-title {
+    margin-bottom: 2rem;
+    font-family: "源黑体 CN", sans-serif; /* 字体 */
+    font-weight: 500; /* 字重 */
+    font-size: 1.25rem; /* 字号: 24px 转 1.25rem */
+    line-height: 1.5625rem; /* 行高: 30px 转 1.5625rem */
+    letter-spacing: 0rem; /* 字间距: 0px 转 0rem */
+    text-align: left; /* 对齐: 左对齐 */
+  }
+
+  .query-form {
+    margin-bottom: 2rem;
+  }
+}
+.pagination {
+  width: 100%;
+  margin-top: 12px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+</style>

+ 224 - 0
src/views/user/Patent23.vue

@@ -0,0 +1,224 @@
+<!-- 商标注册记录 -->
+<template>
+  <div class="page">
+    <div class="page-title">商标变更记录</div>
+
+    <!-- 查询条件 -->
+    <el-form :model="queryForm" class="query-form" inline label-width="100px">
+      <div style="display: flex; align-items: center">
+        <el-form-item label="商标名称">
+          <el-input
+            v-model="queryForm.trademarkName"
+            placeholder="请输入商标名称"
+            style="width: 200px"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="申请编号">
+          <el-input
+            v-model="queryForm.applicationNumber"
+            placeholder="请输入申请编号"
+            style="width: 200px"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="创建时间">
+          <el-date-picker
+            v-model="queryForm.createTime"
+            format="YYYY/MM/DD"
+            value-format="YYYY-MM-DD"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            style="width: 220px"
+          />
+        </el-form-item>
+
+        <el-form-item>
+          <el-button type="primary" @click="handleSearch">查询</el-button>
+        </el-form-item>
+      </div>
+
+      <div style="display: flex; align-items: center; margin-top: 10px">
+        <el-form-item label="法律状态">
+          <el-select
+            v-model="queryForm.legislationStatus"
+            placeholder="请选择法律状态"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in legal_status"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="年费状态">
+          <el-select
+            v-model="queryForm.paymentStatus"
+            placeholder="请选择年费状态"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in annual_fee_payment_status"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="商标类型">
+          <el-select
+            v-model="queryForm.patentType"
+            placeholder="请选择商标类型"
+            style="width: 240px"
+          >
+            <el-option
+              v-for="item in patents_type"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button @click="handleReset">重置</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+
+    <!-- 数据表格 -->
+    <el-table :data="tableData" style="width: 100%">
+      <el-table-column
+        v-for="field in fieldsConfig.filter((item) => item.visible)"
+        :key="field.key"
+        :prop="field.key"
+        :label="field.label"
+      />
+      <el-table-column label="操作" width="300">
+        <template v-slot="scope">
+          <el-button type="primary" text size="small">查看</el-button>
+          <el-button type="primary" text size="small">补充资料上传</el-button>
+          <el-button type="primary" text size="small">文件下载</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="currentPage"
+        v-model:page-size="pageSize"
+        layout="prev, pager, next, jumper"
+        :total="total"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, onMounted } from "vue";
+import { getTrademarkAmendmentList } from "@/api";
+import { useDictStore } from "@/store/modules/useDictStore/index";
+
+const queryForm = ref<any>({
+  trademarkName: "",
+  applicationNumber: "",
+  createTime: "",
+  legislationStatus: "",
+  paymentStatus: "",
+  patentType: "",
+});
+
+const currentPage = ref(1);
+const pageSize = ref(5);
+const total = ref(0);
+const tableData = ref([]);
+
+// 字典
+const dictStore = useDictStore();
+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 fieldsConfig = ref([
+  { key: "applicationNumber", label: "申请号/注册号", visible: true },
+  { key: "trademarkName", label: "商标名称", visible: true },
+  { key: "createTime", label: "注册日期", visible: true },
+  { key: "logoType", label: "商标类型", visible: true },
+  { key: "auditStatus", label: "审查进度", visible: true },
+  { key: "legislationStatus", label: "法律状态", visible: true },
+]);
+
+const pageInit = async () => {
+  const data = {
+    pageSize: pageSize.value,
+    pageNumber: currentPage.value,
+    patentsName: queryForm.value.patentsName,
+    applicationNumber: queryForm.value.applicationNumber,
+    legislationStatus: queryForm.value.legislationStatus,
+    paymentStatus: queryForm.value.paymentStatus,
+    patentType: queryForm.value.patentType,
+    beginTime: queryForm.value.createTime[0],
+    endTime: queryForm.value.createTime[1],
+  };
+  const res = (await getTrademarkAmendmentList(data)) as unknown as any;
+  tableData.value = res.data.list;
+  total.value = res.data.total;
+};
+
+const handleSearch = () => {
+  pageInit();
+};
+
+const handleReset = () => {
+  queryForm.value = {
+    patentsName: "",
+    applicationNumber: "",
+    createTime: "",
+    legislationStatus: "",
+    paymentStatus: "",
+    patentType: "",
+  };
+  pageInit();
+};
+
+const handleCurrentChange = (val: number) => {
+  currentPage.value = val;
+  pageInit();
+};
+
+onMounted(() => {
+  pageInit();
+});
+</script>
+
+<style lang="scss" scoped>
+.page {
+  .page-title {
+    margin-bottom: 2rem;
+    font-family: "源黑体 CN", sans-serif; /* 字体 */
+    font-weight: 500; /* 字重 */
+    font-size: 1.25rem; /* 字号: 24px 转 1.25rem */
+    line-height: 1.5625rem; /* 行高: 30px 转 1.5625rem */
+    letter-spacing: 0rem; /* 字间距: 0px 转 0rem */
+    text-align: left; /* 对齐: 左对齐 */
+  }
+
+  .query-form {
+    margin-bottom: 2rem;
+  }
+}
+.pagination {
+  width: 100%;
+  margin-top: 12px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+</style>

+ 224 - 0
src/views/user/Patent24.vue

@@ -0,0 +1,224 @@
+<!-- 商标注册记录 -->
+<template>
+  <div class="page">
+    <div class="page-title">商标异议记录</div>
+
+    <!-- 查询条件 -->
+    <el-form :model="queryForm" class="query-form" inline label-width="100px">
+      <div style="display: flex; align-items: center">
+        <el-form-item label="商标名称">
+          <el-input
+            v-model="queryForm.trademarkName"
+            placeholder="请输入商标名称"
+            style="width: 200px"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="申请编号">
+          <el-input
+            v-model="queryForm.applicationNumber"
+            placeholder="请输入申请编号"
+            style="width: 200px"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="创建时间">
+          <el-date-picker
+            v-model="queryForm.createTime"
+            format="YYYY/MM/DD"
+            value-format="YYYY-MM-DD"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            style="width: 220px"
+          />
+        </el-form-item>
+
+        <el-form-item>
+          <el-button type="primary" @click="handleSearch">查询</el-button>
+        </el-form-item>
+      </div>
+
+      <div style="display: flex; align-items: center; margin-top: 10px">
+        <el-form-item label="法律状态">
+          <el-select
+            v-model="queryForm.legislationStatus"
+            placeholder="请选择法律状态"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in legal_status"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="年费状态">
+          <el-select
+            v-model="queryForm.paymentStatus"
+            placeholder="请选择年费状态"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in annual_fee_payment_status"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="商标类型">
+          <el-select
+            v-model="queryForm.patentType"
+            placeholder="请选择商标类型"
+            style="width: 240px"
+          >
+            <el-option
+              v-for="item in patents_type"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button @click="handleReset">重置</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+
+    <!-- 数据表格 -->
+    <el-table :data="tableData" style="width: 100%">
+      <el-table-column
+        v-for="field in fieldsConfig.filter((item) => item.visible)"
+        :key="field.key"
+        :prop="field.key"
+        :label="field.label"
+      />
+      <el-table-column label="操作" width="300">
+        <template v-slot="scope">
+          <el-button type="primary" text size="small">查看</el-button>
+          <el-button type="primary" text size="small">补充资料上传</el-button>
+          <el-button type="primary" text size="small">文件下载</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="currentPage"
+        v-model:page-size="pageSize"
+        layout="prev, pager, next, jumper"
+        :total="total"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, onMounted } from "vue";
+import { getTrademarkOppositionList } from "@/api";
+import { useDictStore } from "@/store/modules/useDictStore/index";
+
+const queryForm = ref<any>({
+  trademarkName: "",
+  applicationNumber: "",
+  createTime: "",
+  legislationStatus: "",
+  paymentStatus: "",
+  patentType: "",
+});
+
+const currentPage = ref(1);
+const pageSize = ref(5);
+const total = ref(0);
+const tableData = ref([]);
+
+// 字典
+const dictStore = useDictStore();
+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 fieldsConfig = ref([
+  { key: "applicationNumber", label: "申请号/注册号", visible: true },
+  { key: "trademarkName", label: "商标名称", visible: true },
+  { key: "createTime", label: "注册日期", visible: true },
+  { key: "logoType", label: "商标类型", visible: true },
+  { key: "auditStatus", label: "审查进度", visible: true },
+  { key: "legislationStatus", label: "法律状态", visible: true },
+]);
+
+const pageInit = async () => {
+  const data = {
+    pageSize: pageSize.value,
+    pageNumber: currentPage.value,
+    patentsName: queryForm.value.patentsName,
+    applicationNumber: queryForm.value.applicationNumber,
+    legislationStatus: queryForm.value.legislationStatus,
+    paymentStatus: queryForm.value.paymentStatus,
+    patentType: queryForm.value.patentType,
+    beginTime: queryForm.value.createTime[0],
+    endTime: queryForm.value.createTime[1],
+  };
+  const res = (await getTrademarkOppositionList(data)) as unknown as any;
+  tableData.value = res.data.list;
+  total.value = res.data.total;
+};
+
+const handleSearch = () => {
+  pageInit();
+};
+
+const handleReset = () => {
+  queryForm.value = {
+    patentsName: "",
+    applicationNumber: "",
+    createTime: "",
+    legislationStatus: "",
+    paymentStatus: "",
+    patentType: "",
+  };
+  pageInit();
+};
+
+const handleCurrentChange = (val: number) => {
+  currentPage.value = val;
+  pageInit();
+};
+
+onMounted(() => {
+  pageInit();
+});
+</script>
+
+<style lang="scss" scoped>
+.page {
+  .page-title {
+    margin-bottom: 2rem;
+    font-family: "源黑体 CN", sans-serif; /* 字体 */
+    font-weight: 500; /* 字重 */
+    font-size: 1.25rem; /* 字号: 24px 转 1.25rem */
+    line-height: 1.5625rem; /* 行高: 30px 转 1.5625rem */
+    letter-spacing: 0rem; /* 字间距: 0px 转 0rem */
+    text-align: left; /* 对齐: 左对齐 */
+  }
+
+  .query-form {
+    margin-bottom: 2rem;
+  }
+}
+.pagination {
+  width: 100%;
+  margin-top: 12px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+</style>

+ 224 - 0
src/views/user/Patent25.vue

@@ -0,0 +1,224 @@
+<!-- 商标注册记录 -->
+<template>
+  <div class="page">
+    <div class="page-title">商标商标驳回复审记录</div>
+
+    <!-- 查询条件 -->
+    <el-form :model="queryForm" class="query-form" inline label-width="100px">
+      <div style="display: flex; align-items: center">
+        <el-form-item label="商标名称">
+          <el-input
+            v-model="queryForm.trademarkName"
+            placeholder="请输入商标名称"
+            style="width: 200px"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="申请编号">
+          <el-input
+            v-model="queryForm.applicationNumber"
+            placeholder="请输入申请编号"
+            style="width: 200px"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="创建时间">
+          <el-date-picker
+            v-model="queryForm.createTime"
+            format="YYYY/MM/DD"
+            value-format="YYYY-MM-DD"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            style="width: 220px"
+          />
+        </el-form-item>
+
+        <el-form-item>
+          <el-button type="primary" @click="handleSearch">查询</el-button>
+        </el-form-item>
+      </div>
+
+      <div style="display: flex; align-items: center; margin-top: 10px">
+        <el-form-item label="法律状态">
+          <el-select
+            v-model="queryForm.legislationStatus"
+            placeholder="请选择法律状态"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in legal_status"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="年费状态">
+          <el-select
+            v-model="queryForm.paymentStatus"
+            placeholder="请选择年费状态"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in annual_fee_payment_status"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="商标类型">
+          <el-select
+            v-model="queryForm.patentType"
+            placeholder="请选择商标类型"
+            style="width: 240px"
+          >
+            <el-option
+              v-for="item in patents_type"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button @click="handleReset">重置</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+
+    <!-- 数据表格 -->
+    <el-table :data="tableData" style="width: 100%">
+      <el-table-column
+        v-for="field in fieldsConfig.filter((item) => item.visible)"
+        :key="field.key"
+        :prop="field.key"
+        :label="field.label"
+      />
+      <el-table-column label="操作" width="300">
+        <template v-slot="scope">
+          <el-button type="primary" text size="small">查看</el-button>
+          <el-button type="primary" text size="small">补充资料上传</el-button>
+          <el-button type="primary" text size="small">文件下载</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="currentPage"
+        v-model:page-size="pageSize"
+        layout="prev, pager, next, jumper"
+        :total="total"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, onMounted } from "vue";
+import { getTrademarkRejectionList } from "@/api";
+import { useDictStore } from "@/store/modules/useDictStore/index";
+
+const queryForm = ref<any>({
+  trademarkName: "",
+  applicationNumber: "",
+  createTime: "",
+  legislationStatus: "",
+  paymentStatus: "",
+  patentType: "",
+});
+
+const currentPage = ref(1);
+const pageSize = ref(5);
+const total = ref(0);
+const tableData = ref([]);
+
+// 字典
+const dictStore = useDictStore();
+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 fieldsConfig = ref([
+  { key: "applicationNumber", label: "申请号/注册号", visible: true },
+  { key: "trademarkName", label: "商标名称", visible: true },
+  { key: "createTime", label: "注册日期", visible: true },
+  { key: "logoType", label: "商标类型", visible: true },
+  { key: "auditStatus", label: "审查进度", visible: true },
+  { key: "legislationStatus", label: "法律状态", visible: true },
+]);
+
+const pageInit = async () => {
+  const data = {
+    pageSize: pageSize.value,
+    pageNumber: currentPage.value,
+    patentsName: queryForm.value.patentsName,
+    applicationNumber: queryForm.value.applicationNumber,
+    legislationStatus: queryForm.value.legislationStatus,
+    paymentStatus: queryForm.value.paymentStatus,
+    patentType: queryForm.value.patentType,
+    beginTime: queryForm.value.createTime[0],
+    endTime: queryForm.value.createTime[1],
+  };
+  const res = (await getTrademarkRejectionList(data)) as unknown as any;
+  tableData.value = res.data.list;
+  total.value = res.data.total;
+};
+
+const handleSearch = () => {
+  pageInit();
+};
+
+const handleReset = () => {
+  queryForm.value = {
+    patentsName: "",
+    applicationNumber: "",
+    createTime: "",
+    legislationStatus: "",
+    paymentStatus: "",
+    patentType: "",
+  };
+  pageInit();
+};
+
+const handleCurrentChange = (val: number) => {
+  currentPage.value = val;
+  pageInit();
+};
+
+onMounted(() => {
+  pageInit();
+});
+</script>
+
+<style lang="scss" scoped>
+.page {
+  .page-title {
+    margin-bottom: 2rem;
+    font-family: "源黑体 CN", sans-serif; /* 字体 */
+    font-weight: 500; /* 字重 */
+    font-size: 1.25rem; /* 字号: 24px 转 1.25rem */
+    line-height: 1.5625rem; /* 行高: 30px 转 1.5625rem */
+    letter-spacing: 0rem; /* 字间距: 0px 转 0rem */
+    text-align: left; /* 对齐: 左对齐 */
+  }
+
+  .query-form {
+    margin-bottom: 2rem;
+  }
+}
+.pagination {
+  width: 100%;
+  margin-top: 12px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+</style>

+ 224 - 0
src/views/user/Patent26.vue

@@ -0,0 +1,224 @@
+<!-- 商标注册记录 -->
+<template>
+  <div class="page">
+    <div class="page-title">商标撤三记录</div>
+
+    <!-- 查询条件 -->
+    <el-form :model="queryForm" class="query-form" inline label-width="100px">
+      <div style="display: flex; align-items: center">
+        <el-form-item label="商标名称">
+          <el-input
+            v-model="queryForm.trademarkName"
+            placeholder="请输入商标名称"
+            style="width: 200px"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="申请编号">
+          <el-input
+            v-model="queryForm.applicationNumber"
+            placeholder="请输入申请编号"
+            style="width: 200px"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="创建时间">
+          <el-date-picker
+            v-model="queryForm.createTime"
+            format="YYYY/MM/DD"
+            value-format="YYYY-MM-DD"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始时间"
+            end-placeholder="结束时间"
+            style="width: 220px"
+          />
+        </el-form-item>
+
+        <el-form-item>
+          <el-button type="primary" @click="handleSearch">查询</el-button>
+        </el-form-item>
+      </div>
+
+      <div style="display: flex; align-items: center; margin-top: 10px">
+        <el-form-item label="法律状态">
+          <el-select
+            v-model="queryForm.legislationStatus"
+            placeholder="请选择法律状态"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in legal_status"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="年费状态">
+          <el-select
+            v-model="queryForm.paymentStatus"
+            placeholder="请选择年费状态"
+            style="width: 200px"
+          >
+            <el-option
+              v-for="item in annual_fee_payment_status"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="商标类型">
+          <el-select
+            v-model="queryForm.patentType"
+            placeholder="请选择商标类型"
+            style="width: 240px"
+          >
+            <el-option
+              v-for="item in patents_type"
+              :label="item.label"
+              :value="item.value"
+              :key="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button @click="handleReset">重置</el-button>
+        </el-form-item>
+      </div>
+    </el-form>
+
+    <!-- 数据表格 -->
+    <el-table :data="tableData" style="width: 100%">
+      <el-table-column
+        v-for="field in fieldsConfig.filter((item) => item.visible)"
+        :key="field.key"
+        :prop="field.key"
+        :label="field.label"
+      />
+      <el-table-column label="操作" width="300">
+        <template v-slot="scope">
+          <el-button type="primary" text size="small">查看</el-button>
+          <el-button type="primary" text size="small">补充资料上传</el-button>
+          <el-button type="primary" text size="small">文件下载</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="pagination">
+      <el-pagination
+        v-model:current-page="currentPage"
+        v-model:page-size="pageSize"
+        layout="prev, pager, next, jumper"
+        :total="total"
+        @current-change="handleCurrentChange"
+      />
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, onMounted } from "vue";
+import { getThreeYearNonUseCancellationList } from "@/api";
+import { useDictStore } from "@/store/modules/useDictStore/index";
+
+const queryForm = ref<any>({
+  trademarkName: "",
+  applicationNumber: "",
+  createTime: "",
+  legislationStatus: "",
+  paymentStatus: "",
+  patentType: "",
+});
+
+const currentPage = ref(1);
+const pageSize = ref(5);
+const total = ref(0);
+const tableData = ref([]);
+
+// 字典
+const dictStore = useDictStore();
+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 fieldsConfig = ref([
+  { key: "applicationNumber", label: "申请号/注册号", visible: true },
+  { key: "trademarkName", label: "商标名称", visible: true },
+  { key: "createTime", label: "注册日期", visible: true },
+  { key: "logoType", label: "商标类型", visible: true },
+  { key: "auditStatus", label: "审查进度", visible: true },
+  { key: "legislationStatus", label: "法律状态", visible: true },
+]);
+
+const pageInit = async () => {
+  const data = {
+    pageSize: pageSize.value,
+    pageNumber: currentPage.value,
+    patentsName: queryForm.value.patentsName,
+    applicationNumber: queryForm.value.applicationNumber,
+    legislationStatus: queryForm.value.legislationStatus,
+    paymentStatus: queryForm.value.paymentStatus,
+    patentType: queryForm.value.patentType,
+    beginTime: queryForm.value.createTime[0],
+    endTime: queryForm.value.createTime[1],
+  };
+  const res = (await getThreeYearNonUseCancellationList(data)) as unknown as any;
+  tableData.value = res.data.list;
+  total.value = res.data.total;
+};
+
+const handleSearch = () => {
+  pageInit();
+};
+
+const handleReset = () => {
+  queryForm.value = {
+    patentsName: "",
+    applicationNumber: "",
+    createTime: "",
+    legislationStatus: "",
+    paymentStatus: "",
+    patentType: "",
+  };
+  pageInit();
+};
+
+const handleCurrentChange = (val: number) => {
+  currentPage.value = val;
+  pageInit();
+};
+
+onMounted(() => {
+  pageInit();
+});
+</script>
+
+<style lang="scss" scoped>
+.page {
+  .page-title {
+    margin-bottom: 2rem;
+    font-family: "源黑体 CN", sans-serif; /* 字体 */
+    font-weight: 500; /* 字重 */
+    font-size: 1.25rem; /* 字号: 24px 转 1.25rem */
+    line-height: 1.5625rem; /* 行高: 30px 转 1.5625rem */
+    letter-spacing: 0rem; /* 字间距: 0px 转 0rem */
+    text-align: left; /* 对齐: 左对齐 */
+  }
+
+  .query-form {
+    margin-bottom: 2rem;
+  }
+}
+.pagination {
+  width: 100%;
+  margin-top: 12px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+</style>

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

@@ -151,7 +151,6 @@ const fieldsConfig = ref([
   { key: "trademarkName", label: "商标名称", visible: true },
   { key: "createTime", label: "注册日期", visible: true },
   { key: "logoType", label: "商标类型", visible: true },
-  { key: "", label: "当前状态", visible: true },
   { key: "auditStatus", label: "审查进度", visible: true },
   { key: "legislationStatus", label: "法律状态", visible: true },
 ]);

+ 25 - 0
src/views/user/index.vue

@@ -37,6 +37,21 @@
             <el-menu-item index="3-1" @click="setActiveMenu('3-1')"
               >商标注册记录</el-menu-item
             >
+            <el-menu-item index="3-2" @click="setActiveMenu('3-2')"
+              >商标续展</el-menu-item
+            >
+            <el-menu-item index="3-3" @click="setActiveMenu('3-3')"
+              >商标变更</el-menu-item
+            >
+            <el-menu-item index="3-4" @click="setActiveMenu('3-4')"
+              >商标异议/无效</el-menu-item
+            >
+            <el-menu-item index="3-5" @click="setActiveMenu('3-5')"
+              >商标驳回复审</el-menu-item
+            >
+            <el-menu-item index="3-6" @click="setActiveMenu('3-6')"
+              >商标撤三</el-menu-item
+            >
           </el-sub-menu>
           <el-sub-menu index="4">
             <template #title>
@@ -58,6 +73,11 @@
         <ChangePassword v-if="activeMenu === '1-2'" />
         <PatentApplicationRecords v-if="activeMenu === '2-1'" />
         <TrademarkRegistrationRecords v-if="activeMenu === '3-1'" />
+        <Patent22 v-if="activeMenu === '3-2'" />
+        <Patent23 v-if="activeMenu === '3-3'" />
+        <Patent24 v-if="activeMenu === '3-4'" />
+        <Patent25 v-if="activeMenu === '3-5'" />
+        <Patent26 v-if="activeMenu === '3-6'" />
         <TechInnovationDemand v-if="activeMenu === '4-1'" />
         <TechAchievementTransformation v-if="activeMenu === '4-2'" />
       </div>
@@ -73,6 +93,11 @@ import PatentApplicationRecords from "./PatentApplicationRecords.vue";
 import TrademarkRegistrationRecords from "./TrademarkRegistrationRecords.vue";
 import TechInnovationDemand from "./TechInnovationDemand.vue";
 import TechAchievementTransformation from "./TechAchievementTransformation.vue";
+import Patent22 from "./Patent22.vue";
+import Patent23 from "./Patent23.vue";
+import Patent24 from "./Patent24.vue";
+import Patent25 from "./Patent25.vue";
+import Patent26 from "./Patent26.vue";
 
 import {
   Document,