panhui 4 жил өмнө
parent
commit
8748fd2159

+ 111 - 0
src/main/vue/src/components/internationalPatent/AddSupplierNo.vue

@@ -0,0 +1,111 @@
+<template>
+    <el-dialog title="添加供应商" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item prop="supplierPartnerId" label="供应商">
+                <el-select v-model="form.supplierPartnerId" clearable filterable placeholder="请选择">
+                    <el-option
+                        v-for="item in supplierPartnerIdOptions"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                    >
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="supplierNo" label="供应商案号">
+                <el-input v-model="form.supplierNo" placeholder="请输入"></el-input>
+            </el-form-item>
+            <el-form-item prop="supplierSubmitPeriod" label="指定提交期限">
+                <el-date-picker
+                    v-model="form.supplierSubmitPeriod"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                >
+                </el-date-picker>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {},
+            show: false,
+            rules: {
+                supplierPartnerId: { required: true, message: '请选择供应商', trigger: 'change' },
+                supplierNo: { required: true, message: '请输入供应商案号', trigger: 'blur' },
+                supplierSubmitPeriod: { required: true, message: '请选择制定提交期限', trigger: 'change' }
+            },
+            supplierPartnerIdOptions: []
+        };
+    },
+    created() {
+        this.$http
+            .post('/partner/all', { size: 1000, query: { del: false, type: 'SUPPLIER' } }, { body: 'json' })
+            .then(res => {
+                if (res.content.length > 0) {
+                    this.supplierPartnerIdOptions = res.content.map(item => {
+                        return {
+                            label: item.name,
+                            value: item.id
+                        };
+                    });
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+            info.supplierPartnerId = this.form.supplierPartnerId;
+            info.supplierNo = this.form.supplierNo;
+            info.supplierSubmitPeriod = this.form.supplierSubmitPeriod;
+
+            info.workflow = 'SUPPLIER_MATERIALS';
+
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.el-select {
+    width: 100%;
+}
+.el-date-editor.el-input {
+    width: 100%;
+}
+</style>

+ 123 - 0
src/main/vue/src/components/internationalPatent/AnnualFee.vue

@@ -0,0 +1,123 @@
+<template>
+    <el-dialog title="维护年费费用" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item prop="annualFee" label="金额">
+                <el-input-number type="number" v-model="form.annualFee"></el-input-number>
+            </el-form-item>
+            <el-form-item prop="feePaymentPeriod" label="支付期限">
+                <el-date-picker
+                    v-model="form.feePaymentPeriod"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                >
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item prop="bill" label="账单">
+                <el-input v-model="form.bill"></el-input>
+            </el-form-item>
+
+            <el-form-item label="账单图片" prop="attachment1">
+                <attachment-upload
+                    v-model="form.attachment1"
+                    :fileSize.sync="form.attachment1.size"
+                ></attachment-upload>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {
+                attachment1: { attachmentName: '账单图片', fileName: '', url: '', remark: '', size: '' }
+            },
+            show: false,
+            rules: {
+                attachment1: {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传账单图片'));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                },
+                annualFee: { required: true, message: '请输入金额', trigger: 'change' },
+                feePaymentPeriod: { required: true, message: '请选择支付期限', trigger: 'blur' },
+                bill: { required: true, message: '请输入账单', trigger: 'change' }
+            },
+            supplierPartnerIdOptions: []
+        };
+    },
+    created() {
+        this.$http
+            .post('/partner/all', { size: 1000, query: { del: false, type: 'SUPPLIER' } }, { body: 'json' })
+            .then(res => {
+                if (res.content.length > 0) {
+                    this.supplierPartnerIdOptions = res.content.map(item => {
+                        return {
+                            label: item.name,
+                            value: item.id
+                        };
+                    });
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+            info.annualFee = this.form.annualFee;
+            info.feePaymentPeriod = this.form.feePaymentPeriod;
+            info.bill = this.form.bill;
+            this.$emit('uploadAttement', this.form.attachment1);
+
+            info.workflow = 'COMPLETED';
+
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.el-select {
+    width: 100%;
+}
+.el-date-editor.el-input {
+    width: 100%;
+}
+</style>

+ 110 - 0
src/main/vue/src/components/internationalPatent/BackSupplier.vue

@@ -0,0 +1,110 @@
+<template>
+    <el-dialog title="上传供应商反馈文件" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item label="专利提交稿" prop="attachment1">
+                <attachment-upload
+                    v-model="form.attachment1"
+                    :fileSize.sync="form.attachment1.size"
+                ></attachment-upload>
+            </el-form-item>
+
+            <el-form-item label="电子申请回执" prop="attachment2">
+                <attachment-upload
+                    v-model="form.attachment2"
+                    :fileSize.sync="form.attachment2.size"
+                ></attachment-upload>
+            </el-form-item>
+            <el-form-item prop="attachment3" label="供应商请款单">
+                <attachment-upload
+                    v-model="form.attachment3"
+                    :fileSize.sync="form.attachment3.size"
+                ></attachment-upload>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {
+                attachment1: { attachmentName: '专利提交稿', fileName: '', url: '', remark: '', size: '' },
+                attachment2: { attachmentName: '电子申请回执', fileName: '', url: '', remark: '', size: '' },
+                attachment3: { attachmentName: '供应商请款单', fileName: '', url: '', remark: '', size: '' }
+            },
+            show: false,
+            rules: {
+                attachment1: {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传专利提交稿'));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                },
+                attachment2: {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传电子申请回执'));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                },
+                attachment3: {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传供应商请款单'));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                }
+            }
+        };
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+
+            this.$emit('uploadAttement', this.form.attachment1);
+            this.$emit('uploadAttement', this.form.attachment2);
+            this.$emit('uploadAttement', this.form.attachment3);
+            info.workflow = 'MAINTAIN_CASE';
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>

+ 326 - 0
src/main/vue/src/components/internationalPatent/BaseInfo.vue

@@ -0,0 +1,326 @@
+<template>
+    <div class="edit-view__content-wrapper">
+        <div class="edit-view__content-section" :class="{ bottomPad: otherShow }">
+            <divider collapse :showMore.sync="baseShow" />
+            <el-form
+                :model="formData"
+                :rules="rules"
+                ref="form"
+                label-width="200px"
+                label-position="right"
+                size="small"
+                style="width: 100%"
+                inline
+                center
+            >
+                <div class="base-item" v-show="baseShow">
+                    <el-form-item prop="name" label="专利名称">
+                        <el-input v-model="formData.name" style="width: 600px" @change="submit"></el-input>
+                    </el-form-item>
+                    <el-form-item prop="applyStatus" label="案件状态">
+                        <el-select v-model="formData.applyStatus" disabled clearable filterable placeholder="请选择">
+                            <el-option
+                                v-for="item in statusOptions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item prop="type" label="专利类型">
+                        <el-select v-model="formData.type" clearable filterable placeholder="请选择">
+                            <el-option
+                                v-for="item in typeOptions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item prop="uwNo" label="寰球案号">
+                        <el-input v-model="formData.uwNo" disabledÎ></el-input>
+                    </el-form-item>
+                    <el-form-item prop="clientPartnerId" label="客户">
+                        <el-select
+                            style="width: 200px"
+                            v-model="formData.clientPartnerId"
+                            clearable
+                            filterable
+                            placeholder="请选择"
+                        >
+                            <el-option
+                                v-for="item in clientPartnerIdOptions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+
+                    <el-form-item prop="supplierNo" label="供应商案号">
+                        <el-input v-model="formData.supplierNo"></el-input>
+                    </el-form-item>
+
+                    <el-form-item prop="supplierPartnerId" label="供应商">
+                        <el-select
+                            style="width: 200px"
+                            v-model="formData.supplierPartnerId"
+                            clearable
+                            filterable
+                            placeholder="请选择"
+                        >
+                            <el-option
+                                v-for="item in supplierPartnerIdOptions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+
+                    <el-form-item prop="applyNo" label="国内专利申请号">
+                        <el-input v-model="formData.applyNo"></el-input>
+                    </el-form-item>
+
+                    <el-form-item prop="applyDate" label="国内专利申请日">
+                        <el-date-picker
+                            v-model="formData.applyDate"
+                            type="date"
+                            value-format="yyyy-MM-dd"
+                            placeholder="选择日期"
+                        >
+                        </el-date-picker>
+                    </el-form-item>
+
+                    <el-form-item prop="supplierSubmitPeriod" label="供应商提交期限">
+                        <el-date-picker
+                            v-model="formData.supplierSubmitPeriod"
+                            type="date"
+                            value-format="yyyy-MM-dd"
+                            placeholder="选择日期"
+                        >
+                        </el-date-picker>
+                    </el-form-item>
+
+                    <el-form-item prop="officialPeriod" label="官方期限">
+                        <el-date-picker
+                            v-model="formData.officialPeriod"
+                            type="date"
+                            value-format="yyyy-MM-dd"
+                            placeholder="选择日期"
+                        >
+                        </el-date-picker>
+                    </el-form-item>
+                </div>
+
+                <divider collapse topLine :showMore.sync="personShow">申请人及发明人 </divider>
+                <div class="base-item" v-show="personShow">
+                    <el-form-item prop="applicantName" label="申请人名称">
+                        <el-input v-model="formData.applicantName" placeholder="请输入"></el-input>
+                    </el-form-item>
+
+                    <el-form-item prop="applicantUscc" label="申请人统一社会信用代码">
+                        <el-input v-model="formData.applicantUscc" placeholder="请输入"></el-input>
+                    </el-form-item>
+                    <el-form-item prop="applicantAddress" label="申请人地址">
+                        <el-input
+                            style="width: 600px"
+                            placeholder="请输入"
+                            v-model="formData.applicantAddress"
+                        ></el-input>
+                    </el-form-item>
+                    <el-form-item prop="inventorName" label="发明人姓名">
+                        <el-input v-model="formData.inventorName" placeholder="请输入"></el-input>
+                    </el-form-item>
+                    <el-form-item prop="inventorIdno" label="第一发明人身份证号码">
+                        <el-input v-model="formData.inventorIdno" placeholder="请输入"></el-input>
+                    </el-form-item>
+                </div>
+                <divider collapse topLine :showMore.sync="otherShow">其他信息 </divider>
+                <div class="base-item" v-show="otherShow">
+                    <el-form-item prop="deduction" label="是否请求费减">
+                        <el-select v-model="formData.deduction">
+                            <el-option
+                                v-for="(item, index) in boolOptions"
+                                :key="index"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item prop="essentialReview" label="是否请求实质审查">
+                        <el-select v-model="formData.essentialReview">
+                            <el-option
+                                v-for="(item, index) in boolOptions"
+                                :key="index"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+
+                    <el-form-item prop="publicInAdvance" label="是否申请提前公开">
+                        <el-select v-model="formData.publicInAdvance">
+                            <el-option
+                                v-for="(item, index) in boolOptions"
+                                :key="index"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+
+                    <el-form-item prop="chapterAcceptanceNotice" label="是否申请红章受理通知书">
+                        <el-select v-model="formData.chapterAcceptanceNotice">
+                            <el-option
+                                v-for="(item, index) in boolOptions"
+                                :key="index"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+
+                    <el-form-item prop="chapterPaymentNotice" label="是否申请红章缴费通知书">
+                        <el-select v-model="formData.chapterPaymentNotice">
+                            <el-option
+                                v-for="(item, index) in boolOptions"
+                                :key="index"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                </div>
+            </el-form>
+        </div>
+    </div>
+</template>
+<script>
+import domesticPatent from '@/mixins/domesticPatent';
+
+export default {
+    name: 'DomesticPatentEdit',
+    mixins: [domesticPatent],
+    created() {
+        this.$http
+            .post('/partner/all', { size: 1000, query: { del: false } }, { body: 'json' })
+            .then(res => {
+                if (res.content.length > 0) {
+                    this.clientPartnerIdOptions = res.content
+                        .filter(item => {
+                            return item.type === 'CLIENT';
+                        })
+                        .map(item => {
+                            return {
+                                label: item.name,
+                                value: item.id
+                            };
+                        });
+                    this.supplierPartnerIdOptions = res.content
+                        .filter(item => {
+                            return item.type === 'SUPPLIER';
+                        })
+                        .map(item => {
+                            return {
+                                label: item.name,
+                                value: item.id
+                            };
+                        });
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+    },
+    props: {
+        info: {
+            type: Object,
+            default: () => {
+                return {};
+            }
+        }
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {},
+            rules: {},
+            clientPartnerIdOptions: [],
+            supplierPartnerIdOptions: [],
+            personShow: true,
+            baseShow: true,
+            otherShow: true,
+            boolOptions: [
+                {
+                    label: '是',
+                    value: true
+                },
+                {
+                    label: '否',
+                    value: false
+                }
+            ]
+        };
+    },
+    methods: {
+        init() {
+            this.formData = { ...this.info };
+        },
+        onSave() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let data = { ...this.formData };
+
+            this.$emit('submit', data);
+        },
+        onDelete() {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/domesticPatent/del/${this.formData.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        console.log(e);
+                        this.$message.error((e || {}).error || '删除失败');
+                    }
+                });
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.base-item {
+    width: 800px;
+    padding-right: 200px;
+    margin: 0 auto;
+}
+
+.edit-view .edit-view__content-wrapper .edit-view__content-section {
+    padding-bottom: 0px;
+    &.bottomPad {
+        padding-bottom: 20px;
+    }
+}
+</style>

+ 75 - 0
src/main/vue/src/components/internationalPatent/MaintainCase.vue

@@ -0,0 +1,75 @@
+<template>
+    <el-dialog title="维护案件信息" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item prop="applyNo" label="国内专利申请号">
+                <el-input v-model="form.applyNo" placeholder="请输入"></el-input>
+            </el-form-item>
+            <el-form-item prop="applyDate" label="国内专利申请日">
+                <el-date-picker v-model="form.applyDate" type="date" value-format="yyyy-MM-dd" placeholder="选择日期">
+                </el-date-picker>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {},
+            show: false,
+            rules: {
+                applyNo: { required: true, message: '请输入国内专利申请号', trigger: 'blur' },
+                applyDate: { required: true, message: '请选择国内专利申请日', trigger: 'change' }
+            },
+            supplierPartnerIdOptions: []
+        };
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+            info.applyNo = this.form.applyNo;
+            info.applyDate = this.form.applyDate;
+
+            info.workflow = 'REPLY_TO_NOTICE';
+
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.el-select {
+    width: 100%;
+}
+.el-date-editor.el-input {
+    width: 100%;
+}
+</style>

+ 140 - 0
src/main/vue/src/components/internationalPatent/OfficeAttachment.vue

@@ -0,0 +1,140 @@
+/* eslint-disable vue/valid-v-model */
+<template>
+    <el-dialog title="上传官文流转附件" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <template v-for="(item, index) in attachments">
+                <el-form-item :label="`附件${index + 1}`" :prop="`attachment${index + 1}`" :key="index">
+                    <el-input
+                        size="mini"
+                        v-model="item.attachmentName"
+                        placeholder="请输入附件名称"
+                        clearable
+                    ></el-input>
+
+                    <attachment-upload :value="item" @input="changeVal" :fileSize.sync="item.size"></attachment-upload>
+
+                    <div style="margin-top:20px" v-if="index !== 0">
+                        <el-button type="danger" size="mini" @click="del(index)">删除</el-button>
+                    </div>
+                </el-form-item>
+            </template>
+            <el-form-item label=" ">
+                <el-button type="primary" size="mini" plain @click="add">新增</el-button>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+import { th } from 'date-fns/locale';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            attachments: [{ attachmentName: '', fileName: '', url: '', remark: '', size: '', index: 0 }],
+            show: false
+        };
+    },
+    computed: {
+        form() {
+            const list = [...this.attachments];
+            let form = {};
+            list.forEach((item, index) => {
+                let info = { ...item };
+                delete info.index;
+                form[`attachment${index + 1}`] = info;
+            });
+            return form;
+        },
+        rules() {
+            const list = [...this.attachments];
+            let form = {};
+            list.forEach((item, index) => {
+                form[`attachment${index + 1}`] = {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传附件' + (index + 1)));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                };
+            });
+            return form;
+        }
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+            let list = [...this.attachments];
+
+            list.forEach(item => {
+                let _item = { ...item };
+                delete item.index;
+                this.$emit('uploadAttement', _item);
+            });
+
+            info.workflow = 'SUPPLEMENTARY_REPLY';
+            this.$emit('submit', info);
+            this.show = false;
+        },
+        changeVal(val) {
+            let list = [...this.attachments];
+            list[val.index] = val;
+            this.attachments = list;
+        },
+        add() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    let list = [...this.attachments];
+                    list.push({ attachmentName: '', fileName: '', url: '', remark: '', size: '', index: list.length });
+                    this.attachments = list;
+                } else {
+                    return false;
+                }
+            });
+        },
+        del(index) {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' }).then(() => {
+                let list = [...this.attachments];
+                list.splice(index, 1);
+                this.attachments = list;
+            });
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.el-select {
+    width: 100%;
+}
+.el-date-editor.el-input {
+    width: 100%;
+}
+</style>

+ 100 - 0
src/main/vue/src/components/internationalPatent/Register.vue

@@ -0,0 +1,100 @@
+<template>
+    <el-dialog title="补充办登信息" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item prop="registerNotice" label="授权办登通知日">
+                <el-date-picker
+                    v-model="form.registerNotice"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                >
+                </el-date-picker>
+            </el-form-item>
+
+            <el-form-item prop="registerEndDate" label="办登截止日期">
+                <el-date-picker
+                    v-model="form.registerEndDate"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                >
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item prop="feeRemark" label="费用备注">
+                <el-input v-model="form.feeRemark"></el-input>
+            </el-form-item>
+            <el-form-item label="登记通知书" prop="attachment1">
+                <attachment-upload
+                    v-model="form.attachment1"
+                    :fileSize.sync="form.attachment1.size"
+                ></attachment-upload>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {
+                attachment1: { attachmentName: '登记通知书', fileName: '', url: '', remark: '', size: '' }
+            },
+            show: false,
+            rules: {
+                attachment1: {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传登记通知书'));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                },
+                registerNotice: { required: true, message: '请选择授权办登通知日', trigger: 'change' },
+                registerEndDate: { required: true, message: '请选择办登截止日期', trigger: 'change' },
+                feeRemark: { required: true, message: '请输入费用备注', trigger: 'blur' }
+            }
+        };
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+            info.registerNotice = this.form.registerNotice;
+            info.registerEndDate = this.form.registerEndDate;
+            info.feeRemark = this.form.feeRemark;
+            this.$emit('uploadAttement', this.form.attachment1);
+            info.workflow = 'PAYMENT_REGISTER';
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>

+ 90 - 0
src/main/vue/src/components/internationalPatent/RegisterComplate.vue

@@ -0,0 +1,90 @@
+<template>
+    <el-dialog title="办理登记" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item label="授予专利通知书" prop="attachment1">
+                <attachment-upload
+                    v-model="form.attachment1"
+                    :fileSize.sync="form.attachment1.size"
+                ></attachment-upload>
+            </el-form-item>
+            <el-form-item label="专利证书" prop="attachment2">
+                <attachment-upload
+                    v-model="form.attachment2"
+                    :fileSize.sync="form.attachment2.size"
+                ></attachment-upload>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {
+                attachment1: { attachmentName: '授予专利通知书', fileName: '', url: '', remark: '', size: '' },
+                attachment2: { attachmentName: '专利证书', fileName: '', url: '', remark: '', size: '' }
+            },
+            show: false,
+            rules: {
+                attachment1: {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传授予专利通知书'));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                },
+                attachment2: {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传专利证书'));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                }
+            }
+        };
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+            this.$emit('uploadAttement', this.form.attachment1);
+            this.$emit('uploadAttement', this.form.attachment2);
+            info.workflow = 'ANNUAL_FEE';
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>

+ 85 - 0
src/main/vue/src/components/internationalPatent/RegisterPayment.vue

@@ -0,0 +1,85 @@
+<template>
+    <el-dialog title="补充办登信息" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item label="是否缴费完成" prop="payment">
+                <el-radio-group v-model="form.payment">
+                    <el-radio :label="true">
+                        是
+                    </el-radio>
+                    <el-radio :label="false">
+                        否
+                    </el-radio>
+                </el-radio-group>
+            </el-form-item>
+            <el-form-item label="客户付款凭证/截图" prop="attachment1" v-if="form.payment">
+                <attachment-upload
+                    v-model="form.attachment1"
+                    :fileSize.sync="form.attachment1.size"
+                ></attachment-upload>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {
+                payment: true,
+                attachment1: { attachmentName: '客户付款凭证/截图', fileName: '', url: '', remark: '', size: '' }
+            },
+            show: false,
+            rules: {
+                payment: { required: true, message: '是否已经缴费', trigger: 'change' },
+                attachment1: {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传客户付款凭证/截图'));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                }
+            }
+        };
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+            info.payment = this.form.payment;
+            this.$emit('uploadAttement', this.form.attachment1);
+            info.workflow = 'REGISTER';
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>

+ 103 - 0
src/main/vue/src/components/internationalPatent/Reply.vue

@@ -0,0 +1,103 @@
+<template>
+    <el-dialog title="上传答复通知" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item prop="officialPeriod" label="官方期限">
+                <el-date-picker
+                    v-model="form.officialPeriod"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                >
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item prop="submitPeriod" label="内部期限">
+                <el-date-picker
+                    v-model="form.submitPeriod"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                >
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item label="通知书官文" prop="attachment1">
+                <attachment-upload
+                    v-model="form.attachment1"
+                    :fileSize.sync="form.attachment1.size"
+                ></attachment-upload>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {
+                attachment1: { attachmentName: '通知书官文', fileName: '', url: '', remark: '', size: '' }
+            },
+            show: false,
+            rules: {
+                attachment1: {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传通知书官文'));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                },
+                officialPeriod: { required: true, message: '请选择官方期限', trigger: 'change' },
+                submitPeriod: { required: true, message: '请选择内部期限', trigger: 'change' }
+            }
+        };
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+
+            this.$emit('uploadAttement', this.form.attachment1);
+            info.officialPeriod = this.form.officialPeriod;
+            info.submitPeriod = this.form.submitPeriod;
+            info.workflow = 'PENDING_REVIEW';
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.el-select {
+    width: 100%;
+}
+.el-date-editor.el-input {
+    width: 100%;
+}
+</style>

+ 86 - 0
src/main/vue/src/components/internationalPatent/ReplyBack.vue

@@ -0,0 +1,86 @@
+<template>
+    <el-dialog title="确定答复意向" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item label="是否决定答复" prop="decideReply">
+                <el-radio-group v-model="form.decideReply">
+                    <el-radio :label="true"> 是 </el-radio>
+                    <el-radio :label="false"> 否 </el-radio>
+                </el-radio-group>
+                <div class="el-form-tips" v-if="!form.decideReply">注:放弃答复后,案件立即终止,请谨慎操作</div>
+            </el-form-item>
+            <el-form-item label="准备答复意见" prop="isClientReady" v-if="form.decideReply">
+                <el-radio-group v-model="form.isClientReady">
+                    <el-radio :label="true"> 客户准备 </el-radio>
+                    <el-radio :label="false"> 律师准备 </el-radio>
+                </el-radio-group>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {
+                decideReply: true
+            },
+            show: false,
+            rules: {
+                isClientReady: { required: true, message: '请选择准备答复意见', trigger: 'change' }
+            }
+        };
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+
+            info.decideReply = this.form.decideReply;
+
+            if (info.decideReply) {
+                info.isClientReady = this.form.isClientReady;
+                info.workflow = 'REPLY_SUBMISSIONS';
+            } else {
+                info.workflow = 'NO_REPLY';
+            }
+
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.el-form-tips {
+    font-size: 12px;
+    color: #d75e41;
+    line-height: 17px;
+    margin-top: 18px;
+}
+</style>

+ 80 - 0
src/main/vue/src/components/internationalPatent/ReplyResult.vue

@@ -0,0 +1,80 @@
+<template>
+    <el-dialog title="确定答复结果" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item label="是否通过答复" prop="replyPassed">
+                <el-radio-group v-model="form.replyPassed">
+                    <el-radio :label="true"> 是 </el-radio>
+                    <el-radio :label="false"> 否 </el-radio>
+                </el-radio-group>
+                <div class="el-form-tips" v-if="!form.replyPassed">
+                    注:选择没有通过则需要重新进行答复补正,请谨慎操作
+                </div>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {
+                replyPassed: true
+            },
+            show: false,
+            rules: {}
+        };
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+
+            info.replyPassed = this.form.replyPassed;
+
+            if (info.replyPassed) {
+                info.workflow = 'PENDING_REGISTER';
+            } else {
+                info.workflow = 'REPLY_TO_NOTICE';
+                //否回答复通知
+            }
+
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.el-form-tips {
+    font-size: 12px;
+    color: #d75e41;
+    line-height: 17px;
+    margin-top: 18px;
+}
+</style>

+ 72 - 0
src/main/vue/src/components/internationalPatent/replySubmissions.vue

@@ -0,0 +1,72 @@
+<template>
+    <el-dialog title="上传答复意见书" :visible.sync="show" destroy-on-close center width="600px">
+        <el-form
+            hide-required-asterisk
+            :model="form"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+        >
+            <el-form-item label="答复意见书" prop="attachment1">
+                <attachment-upload
+                    v-model="form.attachment1"
+                    :fileSize.sync="form.attachment1.size"
+                ></attachment-upload>
+            </el-form-item>
+
+            <el-form-item>
+                <el-button style="width: 150px" size="normal" type="primary" @click="onSubmit">提交</el-button>
+                <el-button style="width: 120px" size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+
+<script>
+import logoPatent from '@/mixins/logoPatent';
+export default {
+    mixins: [logoPatent],
+    props: {
+        info: {}
+    },
+    data() {
+        return {
+            form: {
+                attachment1: { attachmentName: '答复意见书', fileName: '', url: '', remark: '', size: '' }
+            },
+            show: false,
+            rules: {
+                attachment1: {
+                    validator: (rule, value, callback) => {
+                        if (!value.url) {
+                            callback(new Error('请上传答复意见书'));
+                        } else {
+                            callback();
+                        }
+                    },
+                    trigger: 'change'
+                }
+            }
+        };
+    },
+    methods: {
+        onSubmit() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let info = { ...this.info };
+            this.$emit('uploadAttement', this.form.attachment1);
+            info.workflow = 'REPLY_RESULT';
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>