Kaynağa Gözat

Merge branch 'dev' of licailing/uwip into master

panhui 4 yıl önce
ebeveyn
işleme
00e174eda2

+ 7 - 1
src/main/vue/src/components/fee/FeeAdd.vue

@@ -9,6 +9,10 @@
             style="padding-right: 130px"
             class="fee"
         >
+            <el-form-item label="专利id" prop="patentId" v-if="!info.patentId && !info.id">
+                <el-input v-model="form.patentId" placeholder="请输入"></el-input>
+            </el-form-item>
+
             <el-form-item prop="feeName" label="费用名称">
                 <el-select v-model="form.feeType" filterable placeholder="请选择" style="width: 100px">
                     <el-option
@@ -257,7 +261,9 @@ export default {
             data.billRemark = this.form.billInfo.remark;
             data.status = 'UNPAID';
             data.userId = this.$store.state.userInfo.id;
-            data.patentId = this.info.patentId || this.info.id;
+            if (this.info.patentId || this.info.id) {
+                data.patentId = this.info.patentId || this.info.id;
+            }
             this.saving = true;
             this.$http
                 .post('/fee/save', data, { body: 'json' })

+ 233 - 0
src/main/vue/src/components/fee/FeeEdit.vue

@@ -0,0 +1,233 @@
+<template>
+    <el-dialog title="费用编辑" destroy-on-close :visible.sync="show" center width="600px">
+        <el-form
+            :model="formData"
+            :rules="rules"
+            ref="form"
+            label-width="140px"
+            style="padding-right: 130px"
+            class="fee"
+            label-position="right"
+            size="small"
+        >
+            <el-form-item prop="patentId" label="专利id">
+                <el-input-number type="number" v-model="formData.patentId"></el-input-number>
+            </el-form-item>
+            <el-form-item prop="feeType" label="费用类型">
+                <el-select v-model="formData.feeType" clearable filterable placeholder="请选择">
+                    <el-option
+                        v-for="item in feeMaintenanceIdOptions"
+                        :key="item.name"
+                        :label="item.name"
+                        :value="item.name"
+                    >
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="feeName" label="费用名称">
+                <el-select v-model="formData.feeName" clearable filterable placeholder="请选择">
+                    <el-option v-for="item in feeTypeOptions" :key="item.name" :label="item.name" :value="item.name">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="status" label="支付状态">
+                <el-select v-model="formData.status" 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="patentPartnerId" label="专利权人">
+                <el-select v-model="formData.patentPartnerId" clearable filterable placeholder="请选择">
+                    <el-option
+                        v-for="item in patentPartnerIdOptions"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                    >
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="payPartnerId" label="支付对象">
+                <el-select v-model="formData.payPartnerId" clearable filterable placeholder="请选择">
+                    <el-option
+                        v-for="item in patentPartnerIdOptions"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                    >
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="amount" label="金额">
+                <el-input-number type="number" v-model="formData.amount"></el-input-number>
+            </el-form-item>
+            <el-form-item prop="currencyMaintenanceId" label="币种">
+                <el-select v-model="formData.currencyMaintenanceId" clearable filterable placeholder="请选择">
+                    <el-option
+                        v-for="item in currencyMaintenanceIdOptions"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id"
+                    >
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="paymentDeadline" label="支付期限">
+                <el-date-picker
+                    v-model="formData.paymentDeadline"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                >
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item prop="paymentDate" label="支付日期">
+                <el-date-picker
+                    v-model="formData.paymentDate"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                >
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item prop="remark" label="备注">
+                <el-input type="textarea" v-model="formData.remark"></el-input>
+            </el-form-item>
+            <el-form-item prop="invoiceReturn" label="是否发票回传">
+                <el-switch v-model="formData.invoiceReturn"></el-switch>
+            </el-form-item>
+            <el-form-item prop="userId" label="userId">
+                <el-input-number type="number" v-model="formData.userId"></el-input-number>
+            </el-form-item>
+            <el-form-item>
+                <el-button size="normal" type="primary" @click="onSave">提交</el-button>
+                <el-button @click="onDelete" :loading="saving" size="normal" type="danger" v-if="formData.id"
+                    >删除
+                </el-button>
+                <el-button size="normal" @click="show = false">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </el-dialog>
+</template>
+<script>
+import { th } from 'date-fns/locale';
+export default {
+    name: 'FeeEdit',
+    created() {
+        this.$http
+            .post('/maintenance/byDesc', { description: 'FeeType' })
+            .then(res => {
+                if (res.length > 0) {
+                    this.feeMaintenanceIdOptions = res[0].children;
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+        this.$http
+            .post('/partner/all', { size: 1000, query: { del: false } }, { body: 'json' })
+            .then(res => {
+                if (res.content.length > 0) {
+                    res.content.forEach(item => {
+                        this.patentPartnerIdOptions.push({
+                            label: item.name,
+                            value: item.id
+                        });
+                    });
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+        this.$http
+            .post('/maintenance/byDesc', { description: 'Currency' })
+            .then(res => {
+                if (res.length > 0) {
+                    this.currencyMaintenanceIdOptions = res[0].children;
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+    },
+    data() {
+        return {
+            show: false,
+            saving: false,
+            formData: {},
+            rules: {},
+            feeMaintenanceIdOptions: [],
+            statusOptions: [
+                { label: '已支付', value: 'PAID' },
+                { label: '未支付', value: 'UNPAID' }
+            ],
+            patentPartnerIdOptions: [],
+            payPartnerIdOptions: [],
+            currencyMaintenanceIdOptions: []
+        };
+    },
+    computed: {
+        feeTypeOptions() {
+            let info = [...this.feeMaintenanceIdOptions].find(item => {
+                return item.name === this.formData.feeType;
+            });
+            return info ? info.children : [];
+        }
+    },
+    methods: {
+        init(info) {
+            console.log(info);
+            this.formData = { ...info };
+            this.show = true;
+        },
+        onSave() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let data = { ...this.formData };
+
+            this.saving = true;
+            this.$http
+                .post('/fee/save', data, { body: 'json' })
+                .then(res => {
+                    this.saving = false;
+                    this.$message.success('成功');
+                    this.$emit('refreash');
+                    this.show = false;
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.saving = false;
+                    this.$message.error(e.error);
+                });
+        },
+        onDelete() {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/fee/del/${this.formData.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.$emit('refreash');
+                    this.show = false;
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        console.log(e);
+                        this.$message.error((e || {}).error || '删除失败');
+                    }
+                });
+        }
+    }
+};
+</script>
+<style lang="less" scoped></style>

+ 9 - 3
src/main/vue/src/components/fee/FeeList.vue

@@ -93,7 +93,7 @@
                         >
                             发票回传
                         </el-button>
-                        <el-button type="danger" size="mini" plain>编辑</el-button>
+                        <el-button type="danger" size="mini" plain @click="editRow(row)">编辑</el-button>
                     </div>
                 </template>
             </el-table-column>
@@ -102,6 +102,7 @@
         <pay ref="pay" @refreash="getData" :info="editPayInfo"></pay>
 
         <back-bill ref="backBill" @refreash="getData" :info="editPayInfo"></back-bill>
+        <fee-edit ref="edit" @refreash="getData"></fee-edit>
     </div>
 </template>
 <script>
@@ -109,6 +110,8 @@ import { mapState } from 'vuex';
 import pageableTable from '@/mixins/pageableTable';
 import Pay from './Pay.vue';
 import BackBill from './BackBill.vue';
+import FeeEdit from './FeeEdit.vue';
+import { th } from 'date-fns/locale';
 
 export default {
     name: 'FeeList',
@@ -181,7 +184,9 @@ export default {
             this.editPayInfo = row;
             this.$refs.backBill.init();
         },
-        editRow(row) {},
+        editRow(row) {
+            this.$refs.edit.init(row);
+        },
         download() {
             this.downloading = true;
             this.$axios
@@ -233,7 +238,8 @@ export default {
     },
     components: {
         Pay,
-        BackBill
+        BackBill,
+        FeeEdit
     }
 };
 </script>

+ 120 - 33
src/main/vue/src/views/FeeList.vue

@@ -30,27 +30,90 @@
             :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="patentId" label="专利id"> </el-table-column> -->
-            <el-table-column prop="feeMaintenanceId" label="官费类型名称id"> </el-table-column>
-            <el-table-column prop="status" label="支付状态" :formatter="statusFormatter"> </el-table-column>
-            <el-table-column prop="patentPartnerId" label="专利权人"> </el-table-column>
-            <el-table-column prop="payPartnerId" label="支付对象"> </el-table-column>
-            <el-table-column prop="amount" label="金额"> </el-table-column>
-            <el-table-column prop="currencyMaintenanceId" label="币种"> </el-table-column>
-            <el-table-column prop="paymentDeadline" label="支付期限"> </el-table-column>
-            <el-table-column prop="paymentDate" label="支付日期"> </el-table-column>
-            <el-table-column prop="remark" label="备注"> </el-table-column>
-            <el-table-column prop="invoiceReturn" label="是否发票回传">
+            <el-table-column prop="id" label="ID" width="100"> </el-table-column>
+            <el-table-column prop="patentId" label="专利id"> </el-table-column>
+            <el-table-column prop="feeType" label="费用种别" min-width="80px"> </el-table-column>
+            <el-table-column prop="feeName" label="费用种别" min-width="80px"> </el-table-column>
+            <el-table-column prop="status" label="支付状态" min-width="80px">
                 <template slot-scope="{ row }">
-                    <el-tag :type="row.invoiceReturn ? '' : 'info'">{{ row.invoiceReturn }}</el-tag>
+                    <el-tag :type="row.status === 'UNPAID' ? 'warning' : ''">{{ statusFormatter(row.status) }}</el-tag>
                 </template>
             </el-table-column>
-            <el-table-column prop="userId" label="userId"> </el-table-column>
-            <el-table-column label="操作" align="center" fixed="right" min-width="150">
+            <el-table-column prop="patentPartner" label="专利权人" min-width="120px"> </el-table-column>
+            <el-table-column prop="payPartner" label="支付对象" min-width="120px"> </el-table-column>
+            <el-table-column prop="amount" label="金额" min-width="120px"> </el-table-column>
+            <el-table-column prop="currency" label="币种" min-width="100px"> </el-table-column>
+            <el-table-column prop="paymentDeadline" label="支付期限" min-width="100px"> </el-table-column>
+            <el-table-column prop="bill" label="账单" min-width="100px"> </el-table-column>
+            <el-table-column prop="billImg" label="账单图片" min-width="100px">
                 <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-image
+                        style="width: 36px; height: 36px;"
+                        :src="row.billImg"
+                        fit="cover"
+                        :preview-src-list="[row.billImg]"
+                    ></el-image>
+                </template>
+            </el-table-column>
+            <el-table-column prop="paymentDate" label="支付日期" min-width="100px">
+                <template slot-scope="{ row }">
+                    <span v-if="row.status === 'UNPAID'" class="warning">未支付</span>
+
+                    <span v-else>{{ row.paymentDate }}</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="paymentImg" label="付款图片" min-width="100px">
+                <template slot-scope="{ row }">
+                    <span v-if="row.status === 'UNPAID'" class="warning">未支付</span>
+
+                    <el-image
+                        v-else
+                        style="width: 36px; height: 36px;"
+                        :src="row.paymentImg"
+                        fit="cover"
+                        :preview-src-list="[row.paymentImg]"
+                    ></el-image>
+                </template>
+            </el-table-column>
+            <el-table-column prop="invoiceReturn" label="是否发票回传" min-width="120px">
+                <template slot-scope="{ row }">
+                    <span v-if="!row.invoiceReturn && row.invoiceReturn !== false" class="warning">未操作</span>
+                    <el-tag v-else :type="row.invoiceReturn ? '' : 'info'">{{
+                        row.invoiceReturn ? '是' : '否'
+                    }}</el-tag>
+                </template>
+            </el-table-column>
+            <el-table-column prop="paymentImg" label="发票图片" min-width="100px">
+                <template slot-scope="{ row }">
+                    <span v-if="!row.invoiceReturn" class="warning">未回传</span>
+
+                    <el-image
+                        v-else
+                        style="width: 36px; height: 36px;"
+                        :src="row.invoiceImg"
+                        fit="cover"
+                        :preview-src-list="[row.invoiceImg]"
+                    ></el-image>
+                </template>
+            </el-table-column>
+            <!-- <el-table-column prop="userId" label="userId"> </el-table-column> -->
+            <el-table-column label="操作" align="center" fixed="right" min-width="150px">
+                <template slot-scope="{ row }">
+                    <div class="table-btn-list">
+                        <el-button v-if="row.status === 'UNPAID'" @click="payRow(row)" type="primary" size="mini" plain>
+                            支付费用
+                        </el-button>
+                        <el-button
+                            v-else-if="!row.invoiceReturn && row.invoiceReturn !== false"
+                            @click="returnRow(row)"
+                            type="primary"
+                            size="mini"
+                            plain
+                        >
+                            发票回传
+                        </el-button>
+                        <el-button type="danger" size="mini" plain @click="editRow(row)">编辑</el-button>
+                    </div>
                 </template>
             </el-table-column>
         </el-table>
@@ -75,12 +138,21 @@
             >
             </el-pagination>
         </div>
+
+        <pay ref="pay" @refreash="getData" :info="editPayInfo"></pay>
+
+        <back-bill ref="backBill" @refreash="getData" :info="editPayInfo"></back-bill>
+        <fee-edit ref="edit" @refreash="getData"></fee-edit>
+        <fee-add ref="feeAdd" :info="editPayInfo" @refreash="getData"></fee-add>
     </div>
 </template>
 <script>
 import { mapState } from 'vuex';
 import pageableTable from '@/mixins/pageableTable';
-
+import Pay from '../components/fee/Pay.vue';
+import BackBill from '../components/fee/BackBill.vue';
+import FeeEdit from '../components/fee/FeeEdit.vue';
+import FeeAdd from '../components/fee/FeeAdd.vue';
 export default {
     name: 'FeeList',
     mixins: [pageableTable],
@@ -93,7 +165,8 @@ export default {
             statusOptions: [
                 { label: '已支付', value: 'PAID' },
                 { label: '未支付', value: 'UNPAID' }
-            ]
+            ],
+            editPayInfo: {}
         };
     },
     computed: {
@@ -102,7 +175,7 @@ export default {
         }
     },
     methods: {
-        statusFormatter(row, column, cellValue, index) {
+        statusFormatter(cellValue) {
             let selectedOption = this.statusOptions.find(i => i.value === cellValue);
             if (selectedOption) {
                 return selectedOption.label;
@@ -119,20 +192,19 @@ export default {
             }
         },
         addRow() {
-            this.$router.push({
-                path: '/feeEdit',
-                query: {
-                    ...this.$route.query
-                }
-            });
+            this.$refs.feeAdd.show = true;
+        },
+        payRow(row) {
+            console.log(row);
+            this.editPayInfo = row;
+            this.$refs.pay.init();
+        },
+        returnRow(row) {
+            this.editPayInfo = row;
+            this.$refs.backBill.init();
         },
         editRow(row) {
-            this.$router.push({
-                path: '/feeEdit',
-                query: {
-                    id: row.id
-                }
-            });
+            this.$refs.edit.init(row);
         },
         download() {
             this.downloading = true;
@@ -182,7 +254,22 @@ export default {
                     }
                 });
         }
+    },
+    components: {
+        Pay,
+        BackBill,
+        FeeEdit,
+        FeeAdd
     }
 };
 </script>
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.list-view {
+    flex-grow: 1;
+    padding: 20px 0;
+}
+.warning {
+    color: @prim;
+    font-size: 12px;
+}
+</style>