瀏覽代碼

Merge branch 'dev' of licailing/uwip into master

panhui 4 年之前
父節點
當前提交
6728970896

+ 313 - 0
src/main/vue/src/components/countryPatent/BaseInfo.vue

@@ -0,0 +1,313 @@
+<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="pctApplyNo" label="PCT申请号">
+                        <el-input v-model="formData.pctApplyNo"></el-input>
+                    </el-form-item>
+
+                    <el-form-item prop="pctApplyDate" label="PCT申请日">
+                        <el-date-picker
+                            v-model="formData.pctApplyDate"
+                            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>
+
+                    <el-form-item prop="actualOfficialAmount" label="官费实际金额">
+                        <el-input type="number" v-model="formData.actualOfficialAmount"></el-input>
+                    </el-form-item>
+                </div>
+
+                <divider collapse topLine :showMore.sync="personShow">申请人及发明人 </divider>
+                <div class="base-item" v-show="personShow">
+                    <el-form-item prop="applicantName" label="申请人名称" class="input-pre-zh">
+                        <el-input style="width: 236px;" v-model="formData.applicantName" placeholder="请输入中文名称">
+                            <template #prepend>中</template></el-input
+                        >
+                    </el-form-item>
+                    <el-form-item prop="applicantEnName" label="英文名称" label-width="125px" class="input-pre-en">
+                        <el-input style="width: 236px;" v-model="formData.applicantEnName" placeholder="请输入英文名称">
+                            <template #prepend>英</template></el-input
+                        >
+                    </el-form-item>
+
+                    <el-form-item
+                        style="margin-bottom:10px;"
+                        prop="applicantAddress"
+                        label="申请人地址"
+                        class="input-pre-zh error-end"
+                    >
+                        <el-input style="width:600px;" v-model="formData.applicantAddress" placeholder="请输入中文地址">
+                            <template #prepend>中</template>
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item prop="applicantEnAddress" label=" " class="input-pre-en  error-end">
+                        <el-input
+                            style="width:600px;"
+                            v-model="formData.applicantEnAddress"
+                            placeholder="请输入英文地址"
+                        >
+                            <template #prepend>英</template>
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item
+                        style="margin-bottom:10px;"
+                        prop="inventorName"
+                        label="发明人姓名"
+                        class="input-pre-zh  error-end"
+                    >
+                        <el-input style="width:600px;" v-model="formData.inventorName" placeholder="请输入中文名称">
+                            <template #prepend>中</template>
+                        </el-input>
+                    </el-form-item>
+                    <el-form-item prop="inventorEnName" label=" " class="input-pre-en  error-end">
+                        <el-input style="width:600px;" v-model="formData.inventorEnName" placeholder="请输入英文名称">
+                            <template #prepend>英</template>
+                        </el-input>
+                    </el-form-item>
+                </div>
+                <divider collapse topLine :showMore.sync="otherShow">优先权信息 </divider>
+                <div class="base-item" v-show="otherShow">
+                    <el-form-item prop="priorityNo" label="优先权号">
+                        <el-input v-model="formData.priorityNo" placeholder="请输入..."></el-input>
+                    </el-form-item>
+
+                    <el-form-item prop="priorityDate" label="优先权日">
+                        <el-date-picker
+                            v-model="formData.priorityDate"
+                            type="date"
+                            value-format="yyyy-MM-dd"
+                            placeholder="选择日期"
+                        >
+                        </el-date-picker>
+                    </el-form-item>
+                    <el-form-item prop="priorityCountry" label="优先权国别">
+                        <el-input v-model="formData.priorityCountry" placeholder="请输入..."></el-input>
+                    </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>

+ 86 - 0
src/main/vue/src/components/countryPatent/MaintainCase.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 prop="pctApplyNo" label="PCT申请号">
+                <el-input v-model="form.pctApplyNo" placeholder="请输入..."></el-input>
+            </el-form-item>
+
+            <el-form-item prop="pctApplyDate" label="PCT申请日">
+                <el-date-picker
+                    v-model="form.pctApplyDate"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                >
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item prop="actualOfficialAmount" label="官费实际金额">
+                <el-input type="number" v-model="form.actualOfficialAmount" placeholder="请输入..."></el-input>
+            </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: {
+                pctApplyNo: { required: true, message: '请输入PCT申请号', trigger: 'blur' },
+                pctApplyDate: { required: true, message: '请选择PCT申请日', trigger: 'change' },
+                actualOfficialAmount: { 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.pctApplyNo = this.form.pctApplyNo;
+            info.pctApplyDate = this.form.pctApplyDate;
+            info.actualOfficialAmount = this.form.actualOfficialAmount;
+
+            info.workflow = 'OFFICIAL_CIRCULATION';
+
+            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/countryPatent/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>

+ 103 - 0
src/main/vue/src/components/countryPatent/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 = 'REPLY_SUBMISSION';
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.el-select {
+    width: 100%;
+}
+.el-date-editor.el-input {
+    width: 100%;
+}
+</style>

+ 85 - 0
src/main/vue/src/components/countryPatent/ReplyResult.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 prop="replyStatus" label="答复意见状态">
+                <el-input v-model="form.replyStatus"></el-input>
+            </el-form-item>
+
+            <el-form-item label="是否继续官文流转" prop="officialCirculation">
+                <el-radio-group v-model="form.officialCirculation">
+                    <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: {
+                officialCirculation: false
+            },
+            show: false,
+            rules: {
+                replyStatus: { required: true, message: '请选择授权办登通知日', trigger: 'blur' },
+                officialCirculation: { 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.replyStatus = this.form.replyStatus;
+            info.officialCirculation = this.form.officialCirculation;
+
+            if (info.officialCirculation) {
+                info.workflow = 'OFFICIAL_CIRCULATION';
+            } else {
+                info.workflow = 'COMPLETED';
+                //否回答复通知
+            }
+
+            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/countryPatent/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 = 'CONFIRM_REPLY';
+            this.$emit('submit', info);
+            this.show = false;
+        }
+    }
+};
+</script>

+ 84 - 0
src/main/vue/src/mixins/countryPatent.js

@@ -0,0 +1,84 @@
+export default {
+    data() {
+        return {
+            statusOptions: [
+                {
+                    label: '申请阶段',
+                    value: 'APPLY_STAGE',
+                    type: '',
+                    workflows: [
+                        { label: '待添加供应商', value: 'ADD_SUPPLIERS' },
+                        { label: '待提交供应商材料', value: 'SUPPLIER_MATERIALS' },
+                        { label: '维护案件信息', value: 'MAINTAIN_CASE' },
+                        { label: '待官文流转', value: 'OFFICIAL_CIRCULATION' }
+                    ]
+                },
+                {
+                    label: '实审阶段',
+                    value: 'SUBSTANTIVE_STAGE',
+                    type: 'warning',
+                    workflows: [
+                        { label: '待补正答复', value: 'SUPPLEMENTARY_REPLY' },
+                        { label: '待上传答复意见书', value: 'REPLY_SUBMISSION' }
+                    ]
+                },
+                {
+                    label: '复审阶段',
+                    value: 'REVIEW_STAGE',
+                    type: 'warning',
+                    workflows: [{ label: '待确认答复状态', value: 'CONFIRM_REPLY' }]
+                },
+                {
+                    label: '已完成',
+                    value: 'COMPLETED',
+                    type: 'end',
+                    workflows: [{ label: '已完成', value: 'COMPLETED' }]
+                }
+            ],
+            typeOptions: [
+                { label: '发明专利', value: 'INVENTION' },
+                { label: '实用新型专利', value: 'UTILITY_MODEL' },
+                { label: '外观设计专利', value: 'APPEARANCE_DESIGN' }
+            ]
+        };
+    },
+    computed: {
+        workflowOptions() {
+            return [...this.statusOptions]
+                .map(item => {
+                    return item.workflows;
+                })
+                .flat();
+        }
+    },
+    methods: {
+        applyStatusFormatter(row, column, cellValue, index) {
+            let selectedOption = this.statusOptions.find(i => i.value === cellValue);
+            if (selectedOption) {
+                return selectedOption.label;
+            }
+            return '';
+        },
+        typeFormatter(row, column, cellValue, index) {
+            let selectedOption = this.typeOptions.find(i => i.value === cellValue);
+            if (selectedOption) {
+                return selectedOption.label;
+            }
+            return '';
+        },
+        statusFormatter(row, column, cellValue, index) {
+            let selectedOption = this.statusOptions.find(i => i.value === cellValue);
+            if (selectedOption) {
+                return selectedOption.label;
+            }
+            return '';
+        },
+        workflowFormatter(row, column, cellValue, index) {
+            let selectedOption = this.workflowOptions.find(i => i.value === cellValue);
+            if (selectedOption) {
+                return selectedOption.label;
+            }
+            return '';
+        }
+    }
+};

+ 20 - 0
src/main/vue/src/mixins/domesticPatent.js

@@ -2,6 +2,26 @@ export default {
     data() {
         return {
             statusOptions: [
+                {
+                    label: '全部阶段',
+                    value: '',
+                    type: '',
+                    workflows: [
+                        { label: '待添加供应商', value: 'ADD_SUPPLIERS' },
+                        { label: '待提交供应商材料', value: 'SUPPLIER_MATERIALS' },
+                        { label: '待维护案件', value: 'MAINTAIN_CASE' },
+                        { label: '待上传答复通知', value: 'REPLY_TO_NOTICE' },
+                        { label: '待确定答复意向', value: 'PENDING_REVIEW' },
+                        { label: '不答复终止', value: 'NO_REPLY' },
+                        { label: '上传答复意见书', value: 'REPLY_SUBMISSIONS' },
+                        { label: '待确定答复结果', value: 'REPLY_RESULT' },
+                        { label: '待办登', value: 'PENDING_REGISTER' },
+                        { label: '待办登', value: 'PAYMENT_REGISTER' },
+                        { label: '办理登记', value: 'REGISTER' },
+                        { label: '待维护年费信息', value: 'ANNUAL_FEE' },
+                        { label: '已完成', value: 'COMPLETED' }
+                    ]
+                },
                 {
                     label: '申请阶段',
                     value: 'APPLY_STAGE',

+ 15 - 0
src/main/vue/src/mixins/internationalPatent.js

@@ -2,6 +2,21 @@ export default {
     data() {
         return {
             statusOptions: [
+                {
+                    label: '全部阶段',
+                    value: '',
+                    type: '',
+                    workflows: [
+                        { label: '待添加供应商', value: 'ADD_SUPPLIERS' },
+                        { label: '待提交供应商材料', value: 'SUPPLIER_MATERIALS' },
+                        { label: '维护案件信息', value: 'MAINTAIN_CASE' },
+                        { label: '待官文流转', value: 'OFFICIAL_CIRCULATION' },
+                        { label: '待补正答复', value: 'SUPPLEMENTARY_REPLY' },
+                        { label: '待上传答复意见书', value: 'REPLY_SUBMISSION' },
+                        { label: '待确认答复状态', value: 'CONFIRM_REPLY' },
+                        { label: '已完成', value: 'COMPLETED' }
+                    ]
+                },
                 {
                     label: '申请阶段',
                     value: 'APPLY_STAGE',

+ 22 - 0
src/main/vue/src/mixins/logoPatent.js

@@ -2,6 +2,28 @@ export default {
     data() {
         return {
             applyStatusOptions: [
+                {
+                    label: '全部阶段',
+                    value: '',
+                    type: '',
+                    workflows: [
+                        { label: '是否决定签约', value: 'IS_CONTRACT' },
+                        { label: '待维护案件', value: 'TO_BE_MAINTAINED' },
+                        { label: '待受理', value: 'PENDING' },
+                        { label: '不签约终止', value: 'NOT_CONTRACT' },
+                        { label: '待缴费', value: 'PENDING_PAYMENT' },
+                        { label: '回文补正', value: 'PALINDROME_CORRECTION' },
+                        { label: '未缴费终止', value: 'UNPAID' },
+                        { label: '待审查', value: 'PENDING_REVIEW' },
+                        { label: '驳回处理', value: 'DISMISS' },
+                        { label: '待上传复审材料', value: 'REVIEW_MATERIALS' },
+                        { label: '不复审终止', value: 'NO_REVIEW' },
+                        { label: '复审缴费', value: 'REVIEW_PAYMENT' },
+                        { label: '复审审查', value: 'REVIEW' },
+                        { label: '公告初审', value: 'ANNOUNCEMENTS' },
+                        { label: '证件办理', value: 'HANDLE' }
+                    ]
+                },
                 {
                     label: '申请阶段',
                     value: 'APPLY_STAGE',

+ 2 - 2
src/main/vue/src/plugins/http.js

@@ -5,8 +5,8 @@ import qs from 'qs';
 let baseUrl = 'http://localhost:8080';
 switch (process.env.NODE_ENV) {
     case 'development':
-        baseUrl = 'http://uwip.izouma.com';
-        // baseUrl = 'http://192.168.50.190:8080';
+        // baseUrl = 'http://uwip.izouma.com';
+        baseUrl = 'http://localhost:8080';
         break;
     case 'test':
         baseUrl = 'http://localhost:8080';

+ 30 - 0
src/main/vue/src/styles/app.less

@@ -519,8 +519,38 @@ li {
     .filters-item + .filters-item {
         margin-left: 10px;
     }
+    .filters-item {
+        .el-radio-button__inner {
+            line-height: 16px;
+        }
+    }
+
+    .el-input--mini .el-input__inner {
+        line-height: 32px;
+        height: 32px;
+    }
+    margin-bottom: 10px;
 }
 .filters-container {
     display: flex;
     flex-direction: row-reverse;
+    align-items: center;
+}
+
+.filter-time {
+    display: flex;
+    align-items: center;
+    margin: 0 10px 10px;
+    .name {
+        font-size: 12px;
+        color: #303133;
+        line-height: 22px;
+        white-space: nowrap;
+        margin-right: 5px;
+    }
+
+    .el-range-editor--small.el-input__inner {
+        height: 32px;
+        line-height: 32px;
+    }
 }

+ 68 - 53
src/main/vue/src/views/CountryPatentList.vue

@@ -18,6 +18,32 @@
             >
                 <el-button @click="getData" slot="append" icon="el-icon-search"> </el-button>
             </el-input>
+
+            <div class="filters-left">
+                <el-radio-group class="filters-item" v-model="applyStatus" size="mini" @change="refreash">
+                    <el-radio-button v-for="(item, index) in statusOptions" :key="index" :label="item.value">
+                        {{ item.label }}
+                    </el-radio-button>
+                </el-radio-group>
+
+                <el-select
+                    size="mini"
+                    class="filters-item"
+                    v-model="logoWorkflow"
+                    placeholder="筛选节点流程"
+                    clearable
+                    filterable
+                    @change="refreash"
+                >
+                    <el-option
+                        v-for="item in selectLogoWorkflowOptions"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                    >
+                    </el-option>
+                </el-select>
+            </div>
         </div>
         <el-table
             :data="tableData"
@@ -29,42 +55,30 @@
             cell-class-name="table-cell"
             :height="tableHeight"
         >
-            <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
-            <el-table-column prop="id" label="ID" width="100"> </el-table-column>
-            <el-table-column prop="workflow" label="流程" :formatter="workflowFormatter"> </el-table-column>
-            <el-table-column prop="country" label="进入国家"> </el-table-column>
-            <el-table-column prop="applyRoute" label="申请途径" :formatter="applyRouteFormatter"> </el-table-column>
-            <el-table-column prop="pctApplyNo" label="pct申请号"> </el-table-column>
-            <el-table-column prop="pctApplyDate" label="pct申请日"> </el-table-column>
-            <el-table-column prop="pctPublicNo" label="pct公开号"> </el-table-column>
-            <el-table-column prop="pctPublicDate" label="pct公开日"> </el-table-column>
-            <el-table-column prop="grantNo" label="授权号"> </el-table-column>
-            <el-table-column prop="grantDate" label="授权日"> </el-table-column>
-            <el-table-column prop="translateWord" label="翻译字数"> </el-table-column>
-            <el-table-column prop="translationLanguage" label="翻译语种"> </el-table-column>
-            <el-table-column prop="unitPrice" label="单价/千字"> </el-table-column>
-            <el-table-column prop="totalPrice" label="总价"> </el-table-column>
-            <el-table-column prop="translationPeriod" label="翻译交期"> </el-table-column>
-            <el-table-column prop="decideReply" label="是否决定答复">
+            <el-table-column align="center" type="selection" width="50"> </el-table-column>
+            <el-table-column prop="patent" label="案件状态">
                 <template slot-scope="{ row }">
-                    <el-tag :type="row.decideReply ? '' : 'info'">{{ row.decideReply }}</el-tag>
+                    <el-tag
+                        v-if="row.patent && row.patent.applyStatus"
+                        :type="applyStatusFormatter(row.patent.applyStatus).type"
+                        >{{ applyStatusFormatter(row.patent.applyStatus).label }}</el-tag
+                    >
                 </template>
             </el-table-column>
-            <el-table-column prop="isClientReady" label="准备答复意见">
-                <template slot-scope="{ row }">
-                    <el-tag :type="row.isClientReady ? '' : 'info'">{{ row.isClientReady }}</el-tag>
-                </template>
+            <el-table-column prop="patent.uwNo" min-width="140" label="寰球案号"> </el-table-column>
+            <el-table-column prop="patent.name" min-width="160" label="专利名称"> </el-table-column>
+            <el-table-column prop="workflow" min-width="120" label="当前流程" :formatter="workflowFormatter">
             </el-table-column>
-            <el-table-column prop="replyPassed" label="是否通过答复">
-                <template slot-scope="{ row }">
-                    <el-tag :type="row.replyPassed ? '' : 'info'">{{ row.replyPassed }}</el-tag>
-                </template>
+            <el-table-column prop="pctApplyDate" label="pct申请日"> </el-table-column>
+            <el-table-column prop="pctApplyNo" label="pct申请号"> </el-table-column>
+            <el-table-column prop="patent.applyDate" min-width="100" label="申请日" :formatter="dateFormatter">
+            </el-table-column>
+            <el-table-column prop="patent.priorityDate" min-width="100" label="优先权日" :formatter="dateFormatter">
             </el-table-column>
-            <el-table-column prop="registerPayPeriod" label="办登缴费期限"> </el-table-column>
-            <el-table-column label="操作" align="center" fixed="right" min-width="150">
+
+            <el-table-column label="操作" align="center" fixed="right" min-width="80">
                 <template slot-scope="{ row }">
-                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
-                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>查看详情</el-button>
                 </template>
             </el-table-column>
         </el-table>
@@ -94,42 +108,33 @@
 <script>
 import { mapState } from 'vuex';
 import pageableTable from '@/mixins/pageableTable';
+import countryPatent from '@/mixins/countryPatent';
 
 export default {
     name: 'CountryPatentList',
-    mixins: [pageableTable],
+    mixins: [pageableTable, countryPatent],
     data() {
         return {
             multipleMode: false,
             search: '',
             url: '/countryPatent/all',
             downloading: false,
-            workflowOptions: [
-                { label: '待申请翻译文稿', value: 'APPLY_TRANSLATION' },
-                { label: '待上传翻译文稿', value: 'TRANSLATION_DOCUMENTS' },
-                { label: '待上传翻译定稿', value: 'FINALIZED_TRANSLATION' },
-                { label: '待添加供应商', value: 'ADD_SUPPLIERS' },
-                { label: '待提交供应商材料', value: 'SUPPLIER_MATERIALS' },
-                { label: '待维护案件信息', value: 'MAINTAIN_CASE' },
-                { label: '待上传答复通知', value: 'REPLY_NOTIFICATION' },
-                { label: '待确定答复意向', value: 'DETERMINED_REPLY' },
-                { label: '不答复终止', value: 'NO_REPLY' },
-                { label: '待上传答复意见书', value: 'UPLOADED_REPLY' },
-                { label: '待确定答复结果', value: 'RESPONSE_RESULT' },
-                { label: '待办登', value: 'PENDING_REGISTER' },
-                { label: '授权办登', value: 'AUTHORIZE_REGISTER' },
-                { label: '待维护授权信息', value: 'AUTHORIZATION_INFORMATION' },
-                { label: '已完成', value: 'COMPLETED' }
-            ],
-            applyRouteOptions: [
-                { label: 'COUNTRY', value: 'PCT国家阶段' },
-                { label: 'SINGLE', value: '巴黎公约' }
-            ]
+            applyStatus: 'APPLY_STAGE',
+            logoWorkflow: ''
         };
     },
     computed: {
         selection() {
             return this.$refs.table.selection.map(i => i.id);
+        },
+        selectLogoWorkflowOptions() {
+            if (this.applyStatus) {
+                return [...this.statusOptions].find(item => {
+                    return item.value === this.applyStatus;
+                })?.workflows;
+            } else {
+                return this.workflowOptions;
+            }
         }
     },
     methods: {
@@ -148,7 +153,13 @@ export default {
             return '';
         },
         beforeGetData() {
-            return { search: this.search };
+            return {
+                search: this.search,
+                query: {
+                    applyStatus: this.applyStatus,
+                    workflow: this.logoWorkflow
+                }
+            };
         },
         toggleMultipleMode(multipleMode) {
             this.multipleMode = multipleMode;
@@ -219,6 +230,10 @@ export default {
                         this.$message.error(e.error);
                     }
                 });
+        },
+        refreash() {
+            this.page = 1;
+            this.getData();
         }
     }
 };

+ 17 - 2
src/main/vue/src/views/DomesticPatentList.vue

@@ -18,6 +18,20 @@
             >
                 <el-button @click="getData" slot="append" icon="el-icon-search"> </el-button>
             </el-input>
+            <!-- <div class="filter-time">
+                <span class="name">申请日期</span>
+
+                <el-date-picker
+                    v-model="time"
+                    type="daterange"
+                    range-separator="至"
+                    start-placeholder="开始月份"
+                    end-placeholder="结束月份"
+                    value-format="yyyy-MM-dd"
+                    size="small"
+                >
+                </el-date-picker>
+            </div> -->
             <div class="filters-left">
                 <el-radio-group class="filters-item" v-model="applyStatus" size="mini" @change="refreash">
                     <el-radio-button v-for="(item, index) in statusOptions" :key="index" :label="item.value">
@@ -120,8 +134,9 @@ export default {
             search: '',
             url: '/domesticPatent/allDTO',
             downloading: false,
-            applyStatus: 'APPLY_STAGE',
-            logoWorkflow: ''
+            applyStatus: '',
+            logoWorkflow: '',
+            time: []
         };
     },
     computed: {

+ 5 - 3
src/main/vue/src/views/InternationalPatentAdd.vue

@@ -150,6 +150,7 @@
     </div>
 </template>
 <script>
+import { format } from 'date-fns';
 export default {
     name: 'InternationalPatentEdit',
     created() {
@@ -224,9 +225,10 @@ export default {
                 },
                 attachment4: {
                     validator: (rule, value, callback) => {
-                        if (!value.url && value.name) {
-                            callback(new Error('请上传' + value.name));
-                        } else if (value.url && !value.name) {
+                        console.log(value);
+                        if (!value.url && value.attachmentName) {
+                            callback(new Error('请上传' + value.attachmentName));
+                        } else if (value.url && !value.attachmentName) {
                             callback(new Error('请输入附件名称'));
                         } else {
                             callback();

+ 1 - 1
src/main/vue/src/views/InternationalPatentList.vue

@@ -118,7 +118,7 @@ export default {
             search: '',
             url: '/internationalPatent/allDTO',
             downloading: false,
-            applyStatus: 'APPLY_STAGE',
+            applyStatus: '',
             logoWorkflow: ''
         };
     },

+ 1 - 1
src/main/vue/src/views/LogoPatentList.vue

@@ -107,7 +107,7 @@ export default {
             search: '',
             url: '/logoPatent/all',
             downloading: false,
-            applyStatus: 'APPLY_STAGE',
+            applyStatus: '',
             logoWorkflow: ''
         };
     },