factory_web/src/views/srm/patent.vue

345 lines
9.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-container>
<el-header>
<div class="left-panel-group">
<el-button
type="primary"
icon="el-icon-plus"
@click="handleAdd"
v-auth="'patentinfo.create'"
>新增</el-button>
</div>
<div class="right-panel">
<el-input
v-model="query.name"
placeholder="专利名称"
clearable
@keyup.enter="handleQuery"
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :apiObj="apiObj" row-key="id">
<el-table-column label="#" type="index"></el-table-column>
<el-table-column
label="申请部门"
prop="belong_dept_name"
min-width="60"
></el-table-column>
<el-table-column
label="拟申请专利名称"
prop="name"
min-width="60"
></el-table-column>
<el-table-column
label="发明人(设计人)"
prop="author"
min-width="120"
></el-table-column>
<el-table-column
label="拟申请专利类型"
prop="type"
min-width="120">
<template #default="scope">
{{patentType[scope.row.type]}}
</template>
</el-table-column>
<el-table-column label="是否提前公开" prop="is_public" mim-width="60">
<template #default="scope">
<span :style="{color: scope.row.is_public ? '#67C23A' : '#F56C6C'}">
{{ scope.row.is_public ? '是' : '否'}}
</span>
</template>
</el-table-column>
<el-table-column
label="拟申请地域"
prop="area"
min-width="60"
><template #default="scope">
{{areaOptions[scope.row.area]}}
</template>
</el-table-column>
<el-table-column
label="其他区域"
prop="other_area"
min-width="60"
></el-table-column>
<el-table-column label="技术状态" prop="tech_status" min-width="200">
<template #default="{row}">
<div v-if="row.tech_status && row.tech_status.length">
<div v-for="(item, index) in row.tech_status" :key="index">
<strong>{{item.name}}</strong>
<span>{{ item.status }}</span>
<br />
<el-link v-if="item.file"
type="primary"
:href="item.file"
target="_blank"
style="font-size: 12px;"
>文件下载</el-link>
</div>
</div>
<span v-else>—</span>
</template>
</el-table-column>
<el-table-column label="技术文件" prop="tech_file" min-width="120">
<template #default="{row}">
<div v-if="row.tech_file && row.tech_file.length">
<div v-for="(item, index) in row.tech_file" :key="index">
<strong>{{item.name}}</strong>
<span>{{ item.pages }}</span>
</div>
</div>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="所在节点" min-width="60">
<template #default="scope">
{{scope.row.ticket_.state_.name}}
</template>
</el-table-column>
<el-table-column label="进行状态" min-width="60">
<template #default="scope">
{{statusOptions[scope.row.ticket_.state_.type]}}
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="120">
<template #default="scope">
<el-button
link
size="small"
type="primary"
@click="patentEdit(scope.row)"
v-auth="'patentinfo.update'"
>详情
</el-button>
<el-popconfirm
title="确定删除吗?"
@confirm="patentDel(scope.row)"
>
<template #reference>
<el-button
link
size="small"
type="danger"
v-auth="'patentinfo.delete'"
>删除</el-button
>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<el-drawer
:title="drawerTitle[mode]"
v-model="limitedVisible"
:destroy-on-close="true"
direction="rtl"
size="70%"
>
<div style="display: flex; height: calc(100% - 60px);">
<div style="flex: 1; padding-right: 20px; overflow-y: auto;">
<PatentForm
:mode="mode"
v-model="addForm"
:transitions="transitions"
@success="()=>{handleQuery(); limitedVisible = false}"
@closed="limitedVisible = false"
/>
</div>
</div>
</el-drawer>
</template>
<script>
import PatentForm from "./patent_form.vue";
export default {
components: { PatentForm},
name: "index",
data() {
return {
workflowName:"",
workFlowId:'',
apiObj: this.$API.srm.patentinfo.list,
selection: [],
checkList: [],
fileList: [],
transitions:[],
timeRange: [],
lending_type: "",
query: {},
editId: null,
isSaving: false,
limitedVisible: false,
mode: "add",
patentType: {
"invention": "发明专利",
"utility": "实用新型",
"design": "外观设计",
},
areaOptions: {
'Domestic':'国内申请',
'Foreign':'国外申请',
'PCT':'PCT申请',
},
drawerTitle: {
add: "新增专利申密",
edit: "审批流",
view: "查看专利申密",
},
statusOptions:{
0: "审批中",
1: "初始中",
2: "已完成",
},
currentRow: null,
//表单数据
addForm: {
author: "",
name: "",
type: "",
is_public: false,
area: null,
other_area: null,
tech_status: [],
tech_file: [],
ticket_:null
},
};
},
mounted(){
let that = this;
that.getInit();
},
methods: {
//添加工作流
//渲染工单提交按钮
getInit() {
let that = this;
if(this.addForm.ticket_!==null){
this.$API.wf.ticket_.ticketTransitions.req(this.addForm.ticket_).then((res) => {
that.transitions = res;
})
}else{
that.$API.wf.workflow.initkey.req("patent").then((res) => {
that.initForm = res;
that.transitions = res.transitions;
});
}
},
handleAdd() {
this.mode = "add";
this.addForm = this.getDefaultForm();
this.lending_type = "";
this.limitedVisible = true;
},
handleCancel() {
this.limitedVisible = false; // 关闭弹窗
this.lending_type = ""; // 重置 lending_type
this.getDefaultForm()// 清空表单
},
getDefaultForm(){
return {
name: "",
author: "",
type: "",
is_public: false,
area: null,
other_area: null,
tech_status: [{ name: "是否进行过科技成果鉴定", status: "", fileList: [] },
{ name: "是否发表过文章", status: "", fileList: [] },
{ name: "是否参与过展会展出", status: "", fileList: [] },
{ name: "是否应用于生产/销售", status: "", fileList: [] },
{ name: "是否参与过技术交流", status: "", fileList: [] }],
tech_file: [ { name: "技术背景材料", status: "", pages: "" },
{ name: "技术交底材料", pages: "" },
{ name: "查新检索报告", pages: "" },
{ name: "图或者照片", pages: "" }],
ticket_:null
}
},
// 审批流结束之后才可以编辑
patentEdit(row) {
this.mode = "view";
this.editId = row.id;
this.limitedVisible = true;
this.addForm = Object.assign({}, row);
},
async patentDel(row) {
var id = row.id;
var res = await this.$API.srm.patentinfo.delete.req(id);
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
},
//搜索
handleQuery() {
this.$refs.table.queryData(this.query);
},
},
};
</script>
<style scoped>
.treeMain {
height: 280px;
overflow: auto;
border: 1px solid #dcdfe6;
margin-bottom: 10px;
}
::-webkit-scrollbar {
width: 10px;
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2);
background-color: #fefefe;
border-radius: 5px;
}
::-webkit-scrollbar-thumb {
border-radius: 5px;
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);
background-color: #f5f5f5;
}
.node rect {
stroke: #606266;
fill: #fff;
}
.edgePath path {
stroke: #606266;
fill: #333;
stroke-width: 1.5px;
}
g.conditions > rect {
fill: #00ffd0;
stroke: #000;
}
.el-icon-close {
cursor: pointer;
}
.left-panel-group {
display: flex;
align-items: center;
gap: 6px; /* 按钮之间的间隙,可以调小点 */
margin-left: 0; /* 靠左 */
}
</style>