Sfoglia il codice sorgente

feat(5): 增加菜单共同关系网络图显示

17602115550 10 mesi fa
parent
commit
ca2df76935

+ 1 - 1
package.json

@@ -31,7 +31,7 @@
         "cytoscape-undo-redo": "^1.3.1",
         "d3": "3.5.12",
         "d3-save-svg": "0.0.2",
-        "echarts": "^4.1.0",
+        "echarts": "^5.4.3",
         "echarts-gl": "^1.1.1",
         "element-china-area-data": "^4.1.1",
         "element-ui": "^2.15.7",

+ 12 - 3
src/modules/createmodel/alipay/components/ResultTable.vue

@@ -10,7 +10,8 @@
                 <el-button v-if="isDetailAble" type="success" size="mini" @click="exportFile(2)">导出全部明细</el-button>
                 <!-- <el-button type="primary" size="mini"  @click="exportFile(3)">导出</el-button> -->
             </div>
-            <el-table :data="fileContent.result" border size="mini" :height="tableHeight" tooltip-effect="dark"
+            <echarts-graph v-if="isRelationMap"></echarts-graph>
+            <el-table v-if="!isRelationMap" :data="fileContent.result" border size="mini" :height="tableHeight" tooltip-effect="dark"
                 :key="currentFileName" style="width: 100%" ref="alipayTable" highlight-current-row>
                 <template v-for="(key, value) in conHeaders">
                     <el-table-column v-if="key.clickable !== 'true'" :prop="key.label" :label="key.label"
@@ -57,7 +58,7 @@
                     </el-table-column>
                 </template>
             </el-table>
-            <pagination :dataList="fileContent" :upParam="beforePayload" @loadMethod="loadSearchSortData"></pagination>
+            <pagination v-if="!isRelationMap" :dataList="fileContent" :upParam="beforePayload" @loadMethod="loadSearchSortData"></pagination>
         </div>
         <detail-table></detail-table>
     </div>
@@ -69,13 +70,15 @@ import searchSort from "./SearchSort.vue";
 import fileName from "../../components/FileName.vue";
 import { downloadAndDeleteById } from "@/service/createmodel/fileService.js";
 import detailTable from "./DetailTable.vue";
+import echartsGraph from "../../components/EchartsGraph.vue"
 
 export default {
     components: {
         pagination,
         searchSort,
         fileName,
-        detailTable
+        detailTable,
+        echartsGraph
     },
     data() {
         return {
@@ -128,6 +131,11 @@ export default {
                 let fileObj = this.$store.getters.getCurrentFile;
                 return fileObj.filename;
             }
+        },
+        isRelationMap:{
+            get(){
+                return this.$store.state.fileStore.fileobj.fileType &&  this.$store.state.fileStore.fileobj.fileType == 'map'
+            }
         }
     },
     created() {
@@ -137,6 +145,7 @@ export default {
     },
     mounted() {
         this.loadInitTable();
+        console.log('this.$store.state',this.$store.state,this.$store)
     },
     methods: {
         // 查看文件

+ 605 - 0
src/modules/createmodel/components/EchartsGraph.vue

@@ -0,0 +1,605 @@
+<template>
+    <div style="position:relative;width:100%;height:100%">
+        <div v-if="reloadGetDataFlag" class="over-map-loading"></div>
+        <div style="width:100%;height:100%" id="relationGraph"></div>
+    </div>
+    
+</template>
+
+<script>
+import pagination from "@/components/Pagination.vue";
+import { uploadedGroupList } from "@/service/createmodel/apiLogin";
+import * as echarts from "echarts";
+
+export default {
+    components: {
+        pagination
+    },
+    data() {
+        return {
+            beforePayload: {
+                page: 1,
+                pageSize: 20,
+                generated: "false"
+            },
+            activeName: "first",
+            isAliPay: true,
+            // 要展开的行,数值的元素是row的key值
+            expands: [],
+            myChartGroupInner: null,
+            selectPointNode: {},
+            myChartGroupInnerOptionData: null,
+            groupAnalysisDataUse: {},
+            switchGroupColorList: ['#bee4a8', '#dfe9f6', '#ea3323', '#eec8b0', '#ffff54', '#72d169', '#a5daf5', '#dba1d9', '#b25168'],
+            selectPointNodeList:[],
+            reloadGetDataFlag: true,
+            loading: null
+        };
+    },
+    computed: {
+        
+    },
+    created() {
+        let offsetHeight = 42;
+        // let locationhref = window.location.href;
+        // if(locationhref.indexOf('alipay') !== -1){
+        //     this.isAliPay = true
+        //     offsetHeight = 42
+        // }
+        console.log('进入 echarts 图形化页面')
+        this.tableHeight = this.getTableHeight(183 + offsetHeight);
+    },
+    mounted() {
+        this.init();
+    },
+    methods: {
+        handleClick(tab) {
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                generated: "false"
+            };
+            if (this.activeName === "first") {
+                payload.generated = "false";
+            } else {
+                payload.generated = "true";
+            }
+            this.$store.commit("set_file_active_name", payload.generated);
+            this.loadFLTable(payload);
+        },
+        filterTag(value, row) {
+            return row.tag === value;
+        },
+        init() {
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                generated: "true"
+            };
+            // uploadedGroupList (this.setModelId(payload)).then(res=> {
+            // debugger
+            // })
+            // this.loadFLTable(payload);
+            this.loadRelationData()
+        },
+        loadRelationData(){
+            // let payload = {
+            //     fileId: id
+            // };
+            this.loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据...",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            this.$store
+                .dispatch("view_relation_static_model_map", this.setModelId({}))
+                .then(data => {
+                    if (data.code == 200) {
+                        this.groupAnalysisDataUse = data.result
+                        this.creatRelationMap()
+                    } else {
+                        let msg = data.message ? data.message : "加载失败";
+                        this.$message({ type: "warning",  message: data.message ? data.message : "加载失败" });
+                    }
+                });
+        },
+        stateFormatMoney(cellValue) {
+            cellValue += '';
+            if (!cellValue.includes('.')) {
+                cellValue += '.00'
+            } else if (cellValue.split('.')[1].length == 1) {
+                cellValue += '0'
+            };
+            return cellValue.replace(/(\d)(?=(\d{3})+\.)/g, function ($0, $1) {
+                return $1 + ',';
+            }).replace(/\.$/, '');
+        },
+        creatRelationMap(type,indata){
+            
+            let pointsList
+            let data = [], links = [], categories = [], option = {}
+            if (!this.groupAnalysisDataUse.partyData) {
+                return
+            }
+            this.groupAnalysisDataUse.partyData.forEach(item => {
+                if (!data.find(element => element.id === item.id)) {
+                    if (!this.selectPointNodeList.includes(item.id)) {
+                        let pointPosition = null
+                        if (this.myChartGroupInnerOptionData) {
+                            pointPosition = this.myChartGroupInnerOptionData.series[0].data.find(itemPosition => itemPosition.id == (item.id+item.name))
+                        }
+                        if (type == 'highLight' && indata.includes(item.id)) {
+                            if (pointPosition) {
+                                data.push({
+                                    draggable: true,
+                                    id: item.id+item.name,
+                                    name: item.name + '(' +  item.relationPersons.length+ ')',
+                                    realName: item.name,
+                                    symbolSize: 40,
+                                    x: pointPosition.x,
+                                    y: pointPosition.y,
+                                    value: 100,
+                                    category: 100,
+                                    data: item,
+                                    symbol: item.type == '从' ? 'image://../../../../static/invoice/professor.svg' : item.partyType == '主' ? 'image://../../../../static/invoice/company.svg' : '',
+                                })
+                            } else {
+                                data.push({
+                                    draggable: true,
+                                    id: item.id+item.name,
+                                    name: item.name + '(' +  item.relationPersons.length+ ')',
+                                    realName: item.name,
+                                    symbolSize: 40,
+                                    // x: -266.82776,
+                                    // y: 299.6904,
+                                    value: 100,
+                                    category: 100,
+                                    data: item,
+                                    symbol: item.type == '从' ? 'image://../../../../static/invoice/professor.svg' : item.type == '主' ? 'image://../../../../static/invoice/company.svg' : '',
+                                })
+                            }
+
+                        } else {
+                            if (pointPosition) {
+                                data.push({
+                                    draggable: true,
+                                    id: item.id+item.name,
+                                    name: item.name + '(' +  item.relationPersons.length+ ')',
+                                    realName: item.name,
+                                    symbolSize: 20,
+                                    x: pointPosition.x,
+                                    y: pointPosition.y,
+                                    value: 100,
+                                    category: 100,
+                                    data: item,
+                                    symbol: item.type == '从' ? 'image://../../../../static/invoice/professor.svg' : item.type == '主' ? 'image://../../../../static/invoice/company.svg' : '',
+                                })
+                            } else {
+                                data.push({
+                                    draggable: true,
+                                    id: item.id+item.name,
+                                    name: item.name + '(' +  item.relationPersons.length+ ')',
+                                    realName: item.name,
+                                    symbolSize: 20,
+                                    // x: -266.82776,
+                                    // y: 299.6904,
+                                    value: 100,
+                                    category: 100,
+                                    data: item,
+                                    symbol: item.type == '从' ? 'image://../../../../static/invoice/professor.svg' : item.type == '主' ? 'image://../../../../static/invoice/company.svg' : '',
+                                })
+                            }
+
+                        }
+
+                    } else {
+                        console.log('item.party1.name-=-=', item.name)
+                    }
+                }
+            })
+            this.groupAnalysisDataUse.relationshipGraph.forEach(item => {
+                // console.log(item.party1.id,item.party2.id,this.switchGroupColorList[0])
+                links.push({
+                    source: item.party1.id+item.party1.name,
+                    target: item.party2.id+item.party2.name,
+                    lineStyle: {
+                        color: this.switchGroupColorList[0],
+                        curveness: 0,
+                        width: 2,
+                    },
+                    lineData: item,
+                    label: {
+                        show: true,
+                        formatter: function (params) {
+                            // console.log('params-=-=-=',params)
+                            return '资金 ' + that.stateFormatMoney(params.data.lineData.relationData.jeTotal || 0.00) + '/' + params.data.lineData.relationData.sum + ' 笔'
+                        },
+                        color: '#fff',
+                        fontSize: '10'
+                    },
+                    symbol: ['arrow', 'arrow'], // 可以是 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
+                    symbolSize: [15, 15],
+                })
+            });
+            var chartDom = document.getElementById('relationGraph');
+            if (!chartDom) {
+                setTimeout(() => {
+                    this.getData()
+                }, 100);
+                return
+            }
+            echarts.dispose(chartDom)
+            this.myChartGroupInner = echarts.init(chartDom);
+            let that = this
+            this.myChartGroupInner.off('click');
+            this.myChartGroupInner.off('mouseup');
+            this.myChartGroupInner.off('finished');
+            this.myChartGroupInner.on('click', function (params) {
+                var nodeName = params.name;   // 获取节点名称
+                var nodeData = params.data;   // 获取节点属性值
+                var option = that.myChartGroupInner.getOption();
+                // 重新渲染图表
+                // myChart.setOption(option);
+                // console.log("click-=-=selectPointNode", that.selectPointNode);
+                // console.log("click-=-=option", option);
+                console.log("click-=-=节点:", params);
+                // console.log("click-=-=节点名称:" + nodeName);
+                // console.log("click-=-=节点属性值:", nodeData);
+                if (params.dataType == "node") {
+                    that.selectPointNode = { ...params.data }
+                } else if (params.dataType == "edge") {
+                    // 点击线弹出交易明细 发票明细
+                    if (params.data.transactionType == 'FINANCIAL_TRANSACTION') {
+                        let ids = []
+                        ids = nodeData.flowInIds.concat(nodeData.flowOutIds)
+                        if (!ids || ids.length < 1) {
+                            that.$message({
+                                type: "warning",
+                                message: `${nodeData.lineData.party1.name ||''}与${nodeData.lineData.party2.name ||''}暂无资金交易明细`
+                            });
+                            return
+                        }
+                        that.viewDetailsBill({ billIds: ids.join(',') }, 'billIds')
+                    } else if (params.data.transactionType == 'INVOICE_RELATIONSHIP') {
+                        let ids = []
+                        ids = nodeData.flowInIds.concat(nodeData.flowOutIds)
+                        if (!ids || ids.length < 1) {
+                            that.$message({
+                                type: "warning",
+                                message: `${nodeData.lineData.party1.name ||''}与${nodeData.lineData.party2.name ||''}暂无发票交易明细`
+                            });
+                            return
+                        }
+                        // 查看明细
+                    }
+                }
+            });
+            this.myChartGroupInner.on('finished', function () {
+                let optionData = that.myChartGroupInner.getOption()
+                optionData.series[0].layout = 'none'
+                let pointsLayout = []
+                pointsLayout = that.myChartGroupInner.getModel().getSeriesByIndex(0).preservedPoints
+                if (pointsLayout) {
+                    for (var i = 0; i < optionData.series[0].data.length; i++) {
+                        optionData.series[0].data[i].x = pointsLayout[optionData.series[0].data[i].id][0]
+                        optionData.series[0].data[i].y = pointsLayout[optionData.series[0].data[i].id][1]
+                        that.myChartGroupInnerOptionData = optionData
+                    }
+                    that.myChartGroupInner.dispose()
+                } else {
+                    that.myChartGroupInnerOptionData = that.myChartGroupInner.getModel().getSeriesByIndex(0).parentModel.option
+                }
+                if (that.reloadGetDataFlag) {
+                    that.reloadGetDataFlag = false
+                    that.creatRelationMap()
+                    that.loading.close()
+                }
+
+            });
+            this.myChartGroupInner.on('mouseup', function (event) {
+                console.log('event-=-=', event)
+                console.log('event-=-=that.myChartGroupInnerOptionData', that.myChartGroupInnerOptionData)
+                if (event.dataType == 'node') {
+                    that.myChartGroupInnerOptionData.series[0].data.forEach(item => {
+                        if (item.id == event.data.id) {
+                            item.x = event.event.offsetX
+                            item.y = event.event.offsetY
+                        }
+                    })
+                }
+            });
+            option = {
+                tooltip: {
+                    position: 'bottom',
+                    show: true,
+                    formatter: function (params) {
+                        // params 是一个包含当前节点数据的对象
+                        if (params.dataType == 'node') {
+                            let returnStr = ''
+                            if (!params.data.data.relationPersons) {
+                                return ''
+                            }
+                            params.data.data.relationPersons.forEach((item, index) => {
+                                let str = item.账户名称 + '     ' + (item.证件号 || '无证件号') + '      ' + (item.账号 || '无账号') + '<br/>'
+                                if (item.sfzkh == 1) {
+                                    returnStr = str + returnStr
+                                } else {
+                                    returnStr += str
+                                }
+
+                            })
+                            returnStr = params.data.realName + '     ' + '<br/>' + returnStr
+                            return '<div style="text-align: left;">' + returnStr + '</div>';
+                        }
+                    }
+                    // trigger: 'item', // 触发类型,'item' 表示数据项图形触发,适用于散点图、折线图、散点图等
+                    // formatter: '{b}: {c}' // 提示框文本格式器,此处 '{b}' 会被对应的数据点名称替换,'{c}' 会被数据值替换
+                },
+                backgroundColor: '#0e274e',
+                legend: [
+
+                ],
+                // edgeSymbol: ['circle', 'circle'],
+                // edgeSymbolSize: [1, 1],
+
+                textStyle: {
+                    fontSize: 18,
+                    color: "#fff",
+                },
+                label: {
+                    textBorderWidth: 0,
+                    color: "#fff",
+                    fontSize: 18,
+                    show: true,
+                    position: 'inside',
+                    // formatter: function (params) {
+                    //     console.log('params-=-=-=-',params)
+                    //     // params 是一个包含当前节点数据的对象
+                    //     return '自定义显示内容: ' + params.data.bankCards[0].kh;
+                    // }
+                },
+                animationDuration: 1500,
+                animationEasingUpdate: 'quinticInOut',
+                // 同步第一个图配置
+                series: [
+                    {
+                        name: '',
+                        type: 'graph',
+                        legendHoverLink: false,
+                        layout: this.myChartGroupInnerOptionData ? 'none' : 'force',
+                        roam: true,
+                        // layout: 'circular',
+                        force: {
+                            edgeLength: 600,
+                            repulsion: 1800,
+                            initLayout: 'circular',
+                            linkDistance: 100,
+                            initLayout: 'random',
+                            randomSeed: 0.1,
+                            // friction: 0.1,
+                            layoutAnimation: false,
+                        },
+                        draggable: true,
+                        // roam: 'scale',
+                        scaleLimit: {
+                            min: 0.5,
+                            max: 10
+                        },
+                        emphasis: {
+                            // 高亮时 节点放大倍数
+                            focus: 'adjacency',
+                            lineStyle: {
+                                width: 10
+                            },
+                            scale: 2,
+                            itemStyle: {
+                                // 高亮时节点的样式
+                                borderColor: '#fff', // 高亮时节点边框的颜色
+                                borderWidth: 50,      // 高亮时节点边框的大小
+                                shadowBlur: 0,      // 高亮时节点阴影的模糊大小
+                                shadowColor: '#fff', // 高亮时节点阴影的颜色
+                                symbolSize: 100,
+                                // 可以设置节点的颜色等其他样式
+                            }
+                        },
+                        data: data,
+                        links: links,
+                        categories: categories,
+                        label: {
+                            show: true,
+                            position: 'bottom',
+                            formatter: '{b}'
+                        },
+                        // edgeSymbol: ['arrow', 'circle'], // 可以是 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
+                        // edgeSymbolSize: [ 15,5],
+                    }
+                ]
+            };
+            this.myChartGroupInner.setOption(option);
+        },
+
+
+        loadFLTable(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            this.beforePayload = payload;
+            this.$store
+                .dispatch("view_uploaded_group_list", this.setModelId(payload))
+                .then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        this.$store.commit("set_files_list", data);
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
+                    }
+                });
+        },
+        loadTableHeader(row, column, e) {
+            if (row.children && row.children.length > 0) {
+                if (
+                    e.currentTarget.firstElementChild.firstElementChild
+                        .firstElementChild.tagName == "DIV"
+                ) {
+                    e.currentTarget.firstElementChild.firstElementChild.firstElementChild.click();
+                } else {
+                    e.currentTarget.firstElementChild.firstElementChild.firstElementChild.nextElementSibling.click();
+                }
+                return;
+            }
+            this.$store.commit("set_current_fileobj", row);
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                fileId: row.id
+            };
+            this.$store.commit("set_current_temp_pagesize", 20);
+            this.$store.commit("set_up_search_sort_params", payload); // 保存文件基础信心
+            this.loadSearchSortData(payload); // 加载文件内容
+            this.loadTableHeaderDataById(payload); // 加载文件headers
+        },
+        // 搜索排序加载文件
+        loadSearchSortData(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+
+            let upSearchSortParams = this.$store.getters.getUpSearchSortParams;
+            let currentFile = this.$store.getters.getCurrentFile;
+
+            payload.fileId = currentFile.id;
+            payload.orders = upSearchSortParams.orders;
+            payload.values = upSearchSortParams.values;
+            payload.mode = upSearchSortParams.mode;
+
+            this.beforePayload = payload;
+            this.$store
+                .dispatch("view_data_by_query", this.setModelId(payload))
+                .then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        this.$store.commit("set_file_content_by_id", data);
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
+                    }
+                });
+        },
+        loadTableHeaderDataById(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            let params = { fileId: payload.fileId };
+            this.$store.commit("set_table_header", {});
+            this.$store
+                .dispatch("get_headers_by_id", this.setModelId(params))
+                .then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        this.$store.commit("set_table_header", data.result);
+                        this.loadDetailHeaders(payload.fileId);
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "失败"
+                        });
+                    }
+                });
+        },
+        loadDetailHeaders(id) {
+            let payload = {
+                fileId: id
+            };
+            this.$store
+                .dispatch("view_detail_ali_headers", this.setModelId(payload))
+                .then(data => {
+                    if (data.code == 200) {
+                        let headResult = data.result;
+                        let finalHeaders = {};
+                        for (let v in headResult.fields) {
+                            finalHeaders[v] = {
+                                label: headResult.fields[v],
+                                alignment: "left",
+                                clickable: "none",
+                                valueType: "none"
+                            };
+                            for (let k in headResult.mainProps) {
+                                if (v == k) {
+                                    finalHeaders[v] = {
+                                        label: headResult.fields[v],
+                                        alignment:
+                                            headResult.mainProps[v].alignment,
+                                        clickable:
+                                            headResult.mainProps[v].clickable,
+                                        valueType:
+                                            headResult.mainProps[v].valueType
+                                    };
+                                }
+                            }
+                        }
+
+                        this.$store.commit(
+                            "set_current_ali_headers",
+                            finalHeaders
+                        );
+                    } else {
+                        let msg = data.message ? data.message : "加载失败";
+                        console.log(msg);
+                        //this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+                    }
+                });
+        }
+    }
+};
+</script>
+<style scoped>
+.excel-btns {
+    border-top: 2px outset wheat;
+    border-bottom: 2px outset wheat;
+    padding: 5px 10px;
+    text-align: right;
+}
+
+.left-files {
+    height: 100%;
+    padding-top: 0px;
+    height: calc(100vh - 110px);
+    border-right: none;
+    background: #032d58;
+    min-height: 700px;
+}
+</style>
+
+<style>
+.multidimensional-table .el-table__row--level-1 .cell {
+    padding-left: 25px;
+}
+.multidimensional-table [class*="el-table__row--level"] .el-table__expand-icon {
+    color: #fff;
+}
+
+.over-map-loading{
+    position:absolute;
+    top:0;
+    left:0;
+    width: 100%;
+    height: 100%;
+    z-index: 100;
+    background: #104072;
+}
+</style>

+ 15 - 0
src/service/createmodel/relationService.js

@@ -0,0 +1,15 @@
+import {
+    Fetch,
+} from '@/utils/index.js'
+import {
+    apiUrl,
+} from '@/config.js'
+
+
+//1.接口共同关系网络获取图信息
+var getRelationStaticModel = payload => Fetch('POST', apiUrl + 'static/staticModel', payload)
+
+
+export {
+    getRelationStaticModel
+}

+ 2 - 0
src/store/createmodel/aliPayStore.js

@@ -1,4 +1,5 @@
 import * as aliPayService from '@/service/createmodel/aliPayService.js'
+import * as relationService from '@/service/createmodel/relationService.js'
 
 export default {
     state: {
@@ -22,6 +23,7 @@ export default {
         //1.一键生成支付宝5张信息表
         get_alipay_tables: async ({ commit, state }, payload) => await aliPayService.getAlipayTables(payload),
         view_detail_ali_headers: async ({ commit, state }, payload) => await aliPayService.viewDetailAliHeaders(payload),
+        view_relation_static_model_map: async ({ commit, state }, payload) => await relationService.getRelationStaticModel(payload),
     },
     getters: {
         getAlipayTables: state => state.alipayTables,

File diff suppressed because it is too large
+ 0 - 0
static/invoice/account.svg


+ 1 - 0
static/invoice/arrow-left.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1706012209054" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="39743" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M44.204 386.287h942.568c12.217 0 22.12 9.902 22.12 22.12 0 12.223-9.902 22.12-22.12 22.12h-889.192l192.116 192.076c0 0 6.672 15.861-8.084 26.784-13.303 9.848-28.31-0.635-28.31-0.635l-224.74-224.698c-6.311-6.342-8.206-15.84-4.782-24.112 3.417-8.239 11.489-13.654 20.424-13.654v0zM44.204 386.287z" p-id="39744" fill="#e6e6e6"></path></svg>

+ 1 - 0
static/invoice/arrow-right.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1706012472925" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="54594" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M979.796 637.713l-942.568 0c-12.21700001 0-22.12-9.902-22.12-22.12 0-12.22300001 9.902-22.12 22.12-22.12l889.192-1e-8-192.116-192.07599998c0 0-6.672-15.861 8.084-26.78400001 13.303-9.848 28.31 0.635 28.31 0.635l224.74 224.698c6.311 6.342 8.206 15.84 4.782 24.11200001-3.417 8.239-11.489 13.654-20.424 13.65399999v0zM979.796 637.713z" p-id="54595" fill="#e6e6e6"></path></svg>

File diff suppressed because it is too large
+ 0 - 0
static/invoice/company.svg


File diff suppressed because it is too large
+ 0 - 0
static/invoice/company22.svg


BIN
static/invoice/group.png


+ 1 - 0
static/invoice/group2.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1724255814878" class="icon" viewBox="0 0 1066 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5292" width="33.3125" height="32" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M754.785652 1024v-43.663875a109.149023 109.149023 0 0 1 109.127692-109.170354h87.30642a109.149023 109.149023 0 0 1 109.127693 109.170354v43.663875H754.785652z m152.791568-185.576803a98.249052 98.249052 0 1 1 0-196.498104 98.249052 98.249052 0 0 1 0 196.498104z m-202.342708-43.663875a37.755281 37.755281 0 0 1-19.069616-5.140691l-152.919552-88.308961-152.940882 88.308961a38.181894 38.181894 0 0 1-38.181894-66.167729l152.919552-88.308961v-176.639254a38.181894 38.181894 0 1 1 76.385118 0v176.639254l152.940883 88.308961a38.245886 38.245886 0 0 1-19.133609 71.30842zM372.817398 338.432363a109.149023 109.149023 0 0 1 109.127692-109.191685h87.30642a109.149023 109.149023 0 0 1 109.127693 109.191685v43.642544H372.817398v-43.642544z m152.791568-141.934259a98.249052 98.249052 0 1 1 0-196.498104 98.249052 98.249052 0 0 1 0 196.498104zM6.121901 980.336125a109.170354 109.170354 0 0 1 109.127693-109.170354h87.30642a109.149023 109.149023 0 0 1 109.127692 109.170354v43.663875H6.121901v-43.663875z m152.791568-141.912928a98.227722 98.227722 0 0 1-98.227721-98.249052 98.249052 98.249052 0 1 1 98.227721 98.249052z" fill="#1afa29" p-id="5293"></path></svg>

BIN
static/invoice/group22.png


File diff suppressed because it is too large
+ 0 - 0
static/invoice/professor-man-deal.svg


File diff suppressed because it is too large
+ 0 - 0
static/invoice/professor-man.svg


File diff suppressed because it is too large
+ 0 - 0
static/invoice/professor-woman.svg


+ 1 - 0
static/invoice/professor.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1704888743858" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="27187" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M760.384 246.592zM565.312 245.632z" fill="#FFFFFF" p-id="27188"></path><path d="M512 14.4C287.2 14.4 97.6 163.2 35.2 368c-13.6 45.6-21.6 94.4-21.6 144 0 275.2 223.2 497.6 497.6 497.6 192 0 357.6-108 440.8-267.2 36-68.8 56.8-147.2 56.8-230.4 0.8-275.2-221.6-497.6-496.8-497.6zM944 656c-60 180.8-230.4 311.2-432 311.2-251.2 0-455.2-204-455.2-455.2 0-72.8 16.8-141.6 47.2-202.4C178.4 160 333.6 56.8 512 56.8c251.2 0 455.2 204 455.2 455.2 0 50.4-8.8 98.4-23.2 144z" fill="#06f425" p-id="27189" data-spm-anchor-id="a313x.search_index.0.i49.52633a81F1X3uN" class=""></path><path d="M511.168 785.856c-34.176 0-68.352 0.384-102.656 0-21.632-0.384-43.392-1.28-65.024-2.752a173.184 173.184 0 0 1-57.28-12.224 48 48 0 0 1-24.768-20.736 40.832 40.832 0 0 1-4.608-19.392c-1.344-36.736 5.568-71.744 23.616-104a194.688 194.688 0 0 1 102.656-88.832c23.104-8.96 47.232-12.864 71.936-12.864 38.016-0.064 76.032-0.192 113.92 0 50.368 0.256 94.976 16.384 132.8 49.792 33.728 29.76 54.656 67.136 62.592 111.68 2.88 15.872 3.392 31.872 2.496 48-0.832 14.272-8.768 24.256-20.672 31.488-12.16 7.36-25.664 10.88-39.488 13.376-32.96 6.016-66.304 6.272-99.584 6.528-31.936 0.192-63.936-0.064-95.936-0.064 0 0.128 0 0 0 0zM662.08 358.4c0 64.512-43.008 123.328-107.904 144.064a155.904 155.904 0 0 1-196.608-100.032 152 152 0 0 1 51.2-165.632c23.808-18.56 50.752-29.824 80.768-32.96a155.84 155.84 0 0 1 167.616 114.688c3.264 12.416 4.8 25.152 4.928 39.872z" fill="#36ab60" p-id="27190" data-spm-anchor-id="a313x.search_index.0.i52.52633a81F1X3uN" class=""></path></svg>

Some files were not shown because too many files changed in this diff