|
@@ -1,18 +1,52 @@
|
|
|
<template>
|
|
|
<n-space vertical>
|
|
|
- <n-space justify="space-between">
|
|
|
- <n-input-group>
|
|
|
- <n-input style="width: 300px" placeholder="请输入项目名称" />
|
|
|
- <n-button type="primary"> 搜索 </n-button>
|
|
|
- </n-input-group>
|
|
|
- <n-button type="primary" @click="handleAdd">新增</n-button>
|
|
|
- </n-space>
|
|
|
- <n-data-table
|
|
|
- :columns="columns"
|
|
|
- :data="data"
|
|
|
- :pagination="pagination"
|
|
|
- :bordered="false"
|
|
|
- />
|
|
|
+ <n-page-header @back="() => $router.back()">
|
|
|
+ <template #title> 返回上一级 </template>
|
|
|
+ <template #header>
|
|
|
+ <n-breadcrumb>
|
|
|
+ <n-breadcrumb-item>任务管理</n-breadcrumb-item>
|
|
|
+ <n-breadcrumb-item>报告审核</n-breadcrumb-item>
|
|
|
+ </n-breadcrumb>
|
|
|
+ </template>
|
|
|
+ <template #extra>
|
|
|
+ <n-button type="primary">审核</n-button>
|
|
|
+ </template>
|
|
|
+ <n-descriptions bordered>
|
|
|
+ <n-descriptions-item label="报告名称">
|
|
|
+ {{ taskInfo.T_name }}
|
|
|
+ </n-descriptions-item>
|
|
|
+ <n-descriptions-item label="创建时间">
|
|
|
+ {{ taskInfo.CreateTime }}
|
|
|
+ </n-descriptions-item>
|
|
|
+ <n-descriptions-item label="修改时间">
|
|
|
+ {{ taskInfo.UpdateTime }}
|
|
|
+ </n-descriptions-item>
|
|
|
+ </n-descriptions>
|
|
|
+ </n-page-header>
|
|
|
+ <n-tabs type="segment">
|
|
|
+ <n-tab-pane name="chap1" tab="验证报告内容">
|
|
|
+ <n-space justify="end">
|
|
|
+ <n-button text style="font-size: 24px" @click="onPrint">
|
|
|
+ <n-icon>
|
|
|
+ <printer-icon />
|
|
|
+ </n-icon>
|
|
|
+ </n-button>
|
|
|
+ </n-space>
|
|
|
+ <n-scrollbar style="max-height: 400px" trigger="none">
|
|
|
+ <vue-pdf-embed
|
|
|
+ ref="pdfRef"
|
|
|
+ source="https://pure-admin.github.io/pure-admin-doc/pdf/Cookie%E5%92%8CSession%E5%8C%BA%E5%88%AB%E7%94%A8%E6%B3%95.pdf"
|
|
|
+ />
|
|
|
+ </n-scrollbar>
|
|
|
+ </n-tab-pane>
|
|
|
+ <n-tab-pane name="chap2" tab="验证设备证书">
|
|
|
+ “威尔!着火了!快来帮忙!”我听到女朋友大喊。现在一个难题在我面前——是恢复一个重要的
|
|
|
+ Amazon 服务,还是救公寓的火。<br /><br />
|
|
|
+ 我的脑海中忽然出现了 Amazon
|
|
|
+ 著名的领导力准则”客户至上“,有很多的客户还依赖我们的服务,我不能让他们失望!所以着火也不管了,女朋友喊我也无所谓,我开始
|
|
|
+ debug 这个线上问题。
|
|
|
+ </n-tab-pane>
|
|
|
+ </n-tabs>
|
|
|
</n-space>
|
|
|
<n-modal
|
|
|
:show-icon="false"
|
|
@@ -24,99 +58,127 @@
|
|
|
@positive-click="submitCallback"
|
|
|
>
|
|
|
<n-form
|
|
|
- :model="form"
|
|
|
+ ref="formRef"
|
|
|
+ :model="formValue"
|
|
|
label-placement="left"
|
|
|
label-width="auto"
|
|
|
- require-mark-placement="right-hanging"
|
|
|
+ :rules="rules"
|
|
|
>
|
|
|
- <n-form-item label="项目名称" path="inputValue">
|
|
|
- <n-input v-model:value="form.inputValue" />
|
|
|
+ <n-form-item label="名称" path="T_name">
|
|
|
+ <n-input v-model:value="formValue.T_name" />
|
|
|
</n-form-item>
|
|
|
- <n-form-item label="描述" path="textareaValue">
|
|
|
- <n-input
|
|
|
- v-model:value="form.textareaValue"
|
|
|
- type="textarea"
|
|
|
- :autosize="{
|
|
|
- minRows: 3,
|
|
|
- maxRows: 5,
|
|
|
- }"
|
|
|
- />
|
|
|
+ <n-form-item label="预览" path="T_img" required>
|
|
|
+ <n-space>
|
|
|
+ <template v-if="modal.title === '编辑'">
|
|
|
+ <n-image width="100" :src="formValue.T_img" />
|
|
|
+ </template>
|
|
|
+ <n-upload
|
|
|
+ :default-upload="false"
|
|
|
+ list-type="image-card"
|
|
|
+ :max="1"
|
|
|
+ @change="handleChange"
|
|
|
+ >
|
|
|
+ <template v-if="modal.title === '添加'"> 点击上传 </template>
|
|
|
+ <template v-else> 重新上传 </template>
|
|
|
+ </n-upload>
|
|
|
+ </n-space>
|
|
|
</n-form-item>
|
|
|
</n-form>
|
|
|
</n-modal>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { h } from "vue";
|
|
|
-import { NButton, NSpace } from "naive-ui";
|
|
|
+import VuePdfEmbed from "vue-pdf-embed";
|
|
|
+import { getTask, getUpFileTokenData } from "@/api";
|
|
|
+import * as qiniu from "qiniu-js";
|
|
|
+import { PrinterOutlined as PrinterIcon } from "@vicons/antd";
|
|
|
|
|
|
-const createColumns = ({ goToView }) => {
|
|
|
- return [
|
|
|
- {
|
|
|
- title: "项目名称",
|
|
|
- key: "no",
|
|
|
- },
|
|
|
- {
|
|
|
- title: "描述",
|
|
|
- key: "title",
|
|
|
- },
|
|
|
- {
|
|
|
- title: "时间",
|
|
|
- key: "length",
|
|
|
- },
|
|
|
- {
|
|
|
- title: "操作",
|
|
|
- key: "actions",
|
|
|
- render() {
|
|
|
- return h(
|
|
|
- NSpace,
|
|
|
- {},
|
|
|
- {
|
|
|
- default: () =>
|
|
|
- ["删除"].map((item) =>
|
|
|
- h(
|
|
|
- NButton,
|
|
|
- {
|
|
|
- type: "error",
|
|
|
- size: "small",
|
|
|
- onClick: () => {},
|
|
|
- },
|
|
|
- { default: () => item }
|
|
|
- )
|
|
|
- ),
|
|
|
- }
|
|
|
- );
|
|
|
- },
|
|
|
- },
|
|
|
- ];
|
|
|
-};
|
|
|
+const message = useMessage();
|
|
|
+
|
|
|
+const props = defineProps({
|
|
|
+ taskId: String,
|
|
|
+});
|
|
|
|
|
|
-const data = [
|
|
|
- { no: 3, title: "Wonderwall", length: "4:18" },
|
|
|
- { no: 4, title: "Don't Look Back in Anger", length: "4:48" },
|
|
|
- { no: 12, title: "Champagne Supernova", length: "7:27" },
|
|
|
-];
|
|
|
+const pdfRef = ref(null);
|
|
|
|
|
|
-const columns = createColumns({});
|
|
|
-const pagination = ref(false);
|
|
|
+// 任务信息
|
|
|
+const taskInfo = ref({});
|
|
|
|
|
|
+// 表单信息
|
|
|
+const formValue = reactive({});
|
|
|
+
|
|
|
+// 模态框数据源
|
|
|
const modal = reactive({
|
|
|
title: "",
|
|
|
showModal: false,
|
|
|
});
|
|
|
|
|
|
+// 验证表项的规则
|
|
|
+const rules = {
|
|
|
+ T_name: { required: true, message: "不能为空", trigger: "blur" },
|
|
|
+};
|
|
|
+
|
|
|
+// 打印pdf
|
|
|
+const onPrint = () => {
|
|
|
+ pdfRef.value.print();
|
|
|
+};
|
|
|
+
|
|
|
+// 组件状态变化的回调
|
|
|
+const handleChange = async (options) => {
|
|
|
+ const token = await getUpFileToken(options.file.type.split("/")[1]);
|
|
|
+ const observable = qiniu.upload(
|
|
|
+ options.file.file,
|
|
|
+ options.file.name,
|
|
|
+ token,
|
|
|
+ {},
|
|
|
+ {
|
|
|
+ useCdnDomain: true,
|
|
|
+ }
|
|
|
+ );
|
|
|
+ observable.subscribe({
|
|
|
+ next: (result) => {
|
|
|
+ // 主要用来展示进度
|
|
|
+ console.warn(result);
|
|
|
+ },
|
|
|
+ error: () => {
|
|
|
+ message.error("上传图片失败");
|
|
|
+ },
|
|
|
+ complete: (res) => {
|
|
|
+ formValue.T_img = res.key;
|
|
|
+ },
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+// 执行 positive 时执行的回调函数
|
|
|
const submitCallback = () => {
|
|
|
- console.log("确定");
|
|
|
+ if (modal.title === "添加") {
|
|
|
+ console.log("add");
|
|
|
+ } else {
|
|
|
+ console.log("edit");
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+// 显示上传
|
|
|
+const showUploadModal = () => {};
|
|
|
+
|
|
|
+// 获取上传token
|
|
|
+const getUpFileToken = async () => {
|
|
|
+ const { data: res } = await getUpFileTokenData({
|
|
|
+ T_suffix: "pdf",
|
|
|
+ });
|
|
|
+ return res.Data;
|
|
|
};
|
|
|
-const handleAdd = () => {
|
|
|
- modal.showModal = true;
|
|
|
- modal.title = "新增";
|
|
|
+
|
|
|
+// 任务(获取)
|
|
|
+const getTaskInfo = async () => {
|
|
|
+ const { data: res } = await getTask({
|
|
|
+ T_task_id: props.taskId,
|
|
|
+ });
|
|
|
+ taskInfo.value = res.Data;
|
|
|
};
|
|
|
|
|
|
-const form = reactive({
|
|
|
- inputValue: "",
|
|
|
- textareaValue: "",
|
|
|
-});
|
|
|
+getUpFileToken();
|
|
|
+getTaskInfo();
|
|
|
</script>
|
|
|
|
|
|
<style scoped></style>
|