Pārlūkot izejas kodu

新增共享类型、董事长特批订单审核、外包高质量类型操作权限

dev01 2 mēneši atpakaļ
vecāks
revīzija
8ca09ffe9b

+ 35 - 31
js/component/manageCenter/components/checkProject/index.jsx

@@ -1013,21 +1013,23 @@ class CheckProject extends Component {
                 <span className="title">
                   第三方信息
                 </span>
-                {this.props.startType === 1 && !this.props.isAuditPayment && !this.props.isAuditPaymentGLY ? <Button
-                  type="primary"
-                  onClick={(e) => {
-                    this.setState({
-                      ThirdListVisible: true,
-                    })
-                  }}
-                  style={{
-                    float: 'right',
-                    marginRight: '50px',
-                    marginBottom: '15px',
-                  }}
-                >
-                  +新增第三方信息
-                </Button> : null}
+                {
+                  // this.props.startType === 1 && 
+                  !this.props.isAuditPayment && !this.props.isAuditPaymentGLY ? <Button
+                    type="primary"
+                    onClick={(e) => {
+                      this.setState({
+                        ThirdListVisible: true,
+                      })
+                    }}
+                    style={{
+                      float: 'right',
+                      marginRight: '50px',
+                      marginBottom: '15px',
+                    }}
+                  >
+                    +新增第三方信息
+                  </Button> : null}
               </div>
               <div
                 className="clearfix"
@@ -1057,22 +1059,24 @@ class CheckProject extends Component {
                 <span className="title">
                   付款节点
                 </span>
-                {this.props.startType === 1 && !this.props.isAuditPayment && !this.props.isAuditPaymentGLY ? <Button
-                  type="primary"
-                  onClick={(e) => {
-                    this.getPayNodeCompany();
-                    this.setState({
-                      PayNodeVisible: true,
-                    })
-                  }}
-                  style={{
-                    float: 'right',
-                    marginRight: '50px',
-                    marginBottom: '15px',
-                  }}
-                >
-                  +新增付款节点
-                </Button> : null}
+                {
+                  // this.props.startType === 1 && 
+                  !this.props.isAuditPayment && !this.props.isAuditPaymentGLY ? <Button
+                    type="primary"
+                    onClick={(e) => {
+                      this.getPayNodeCompany();
+                      this.setState({
+                        PayNodeVisible: true,
+                      })
+                    }}
+                    style={{
+                      float: 'right',
+                      marginRight: '50px',
+                      marginBottom: '15px',
+                    }}
+                  >
+                    +新增付款节点
+                  </Button> : null}
               </div>
               <div
                 className="clearfix"

+ 16 - 6
js/component/manageCenter/customer/NEW/components/outbound/index.jsx

@@ -44,11 +44,16 @@ class Outbound extends Component {
           key: 'contacts',
         },
         {
-          title: '电话(尾号)',
-          dataIndex: 'mobileLastDigits',
-          key: 'mobileLastDigits',
-          width: 100,
+          title: '电话',
+          dataIndex: 'mobile',
+          key: 'mobile',
         },
+        // {
+        //   title: '电话(尾号)',
+        //   dataIndex: 'mobileLastDigits',
+        //   key: 'mobileLastDigits',
+        //   width: 100,
+        // },
         {
           title: '时长',
           dataIndex: 'duration',
@@ -62,6 +67,11 @@ class Outbound extends Component {
           dataIndex: 'createTime',
           key: 'createTime',
         },
+        {
+          title: '备注',
+          dataIndex: 'remarks',
+          key: 'remarks',
+        },
       ],
     };
     this.onOk = this.onOk.bind(this);
@@ -362,7 +372,7 @@ class Outbound extends Component {
           >{!pVisible && <Icon type="phone" />} {((id == uid) && status) ? '正在通话中' : '呼叫'}</Button>}
         {type == "private" && status && (id == uid) && !noTransfer &&
           <Button
-            style={{ background: "green", border: 0, marginLeft: 20 }}
+            style={{ background: "green", border: 0, marginLeft: 10 }}
             type="primary"
             onClick={() => {
               this.agentList();
@@ -370,7 +380,7 @@ class Outbound extends Component {
             }}
           ><Icon type="phone" /> 呼叫转移</Button>}
         <Button
-          style={{ background: "green", border: 0, marginLeft: 20 }}
+          style={{ background: "green", border: 0, marginLeft: 10 }}
           type="primary"
           onClick={() => {
             this.userCallList();

+ 3 - 1
js/component/manageCenter/customer/NEW/intentionCustomer/clue.jsx

@@ -60,7 +60,7 @@ const LimitedProject = React.createClass({
           title: "客户名称",
           dataIndex: "nickname",
           key: "nickname",
-          width: 300,
+          width: 200,
         },
         {
           title: "联系人",
@@ -71,6 +71,7 @@ const LimitedProject = React.createClass({
           title: "联系电话",
           dataIndex: "contactMobile",
           key: "contactMobile",
+          width: 100,
         },
         {
           title: "所属人",
@@ -100,6 +101,7 @@ const LimitedProject = React.createClass({
           title: "线索释放天数",
           dataIndex: "days",
           key: "days",
+          width: 60,
         },
         {
           title: "转入时间",

+ 6 - 3
js/component/manageCenter/customer/NEW/query/queryCutomer.jsx

@@ -190,12 +190,15 @@ const QueryCustomer = React.createClass({
                 {
                   text === '0' ? '私有' :
                     text === '1' ? '公共' :
-                      text === '2' ? '签单' : ''
+                      text === '2' ? '签单' :
+                        text === '3' ? '外联' :
+                          text === '4' ? '渠道' :
+                            text === '5' ? '线索' : ''
                 }
-                {
+                {/* {
                   record.newChannel == "1"
                     ? "渠道" : ""
-                }
+                } */}
               </span>
             )
           }

+ 11 - 2
js/component/manageCenter/order/content.jsx

@@ -178,12 +178,21 @@ class Content extends Component {
           });
         });
         break;
-      //退单管理新
+      //部门特批订单审核
       case "approveds":
         require.ensure([], () => {
           const Approveds = require("./orderNew/approveds").default;
           this.setState({
-            component: <Approveds />,
+            component: <Approveds manageType={0} />,
+          });
+        });
+        break;
+      //董事长特批订单审核
+      case "approvedsdsz":
+        require.ensure([], () => {
+          const Approveds = require("./orderNew/approveds").default;
+          this.setState({
+            component: <Approveds manageType={1} />,
           });
         });
         break;

+ 8 - 0
js/component/manageCenter/order/orderNew/approveds.jsx

@@ -119,6 +119,7 @@ const IntentionCustomer = Form.create()(
         crossDomain: false,
         url: globalConfig.context + "/api/admin/newOrder/orderNewList",
         data: {
+          manageType: this.props.manageType,
           pageNo: pageNo || 1,
           pageSize: pageSize || this.state.pagination.pageSize,
           specially: 3, //审核列表
@@ -991,6 +992,13 @@ const IntentionCustomer = Form.create()(
     componentWillMount() {
       this.loadData();
     },
+    componentWillReceiveProps(nextProps) {
+      let next = JSON.stringify(nextProps);
+      let props = JSON.stringify(this.props);
+      if (next !== props) {
+        location.reload();
+      }
+    },
     //整行点击
     tableRowClick(record) {
       this.setState({

+ 19 - 1
js/component/manageCenter/project/project/score.jsx

@@ -24,7 +24,9 @@ const ProjecScore = Form.create()(React.createClass({
 
   getInitialState() {
     return {
-      searchValues: {},
+      searchValues: {
+        status: '0'
+      },
       loading: false,
       exportPendingLoading: false,
       changeList: undefined,
@@ -424,6 +426,22 @@ const ProjecScore = Form.create()(React.createClass({
                     );
                   })}
                 </Select>
+                <Select
+                  placeholder="状态"
+                  style={{ width: 100 }}
+                  value={searchValues["status"]
+                    ? searchValues["status"]
+                    : undefined}
+                  onChange={e => {
+                    searchValues["status"] = e
+                    this.setState({
+                      searchValues: searchValues,
+                    });
+                  }}
+                >
+                  <Select.Option value="0">正常</Select.Option>
+                  <Select.Option value="1">锁定</Select.Option>
+                </Select>
                 <Button type="primary" onClick={this.search} style={{ marginRight: 10 }}>
                   搜索
                 </Button>

+ 6 - 1
js/component/manageCenter/project/task/myTask.jsx

@@ -63,7 +63,9 @@ import EnterpriseNameChange from "../../../common/enterpriseNameChange";
 import PatentCheck from '../../../common/patentCheck';
 import PaymentRecord from "../../../common/initiateOrder/paymentRecord";
 import Cascaders from "../../../common/cascaders";
-import Property from '../../../common/orderDetail/property' // 知识产权情况
+import Property from '../../../common/orderDetail/property'; // 知识产权情况
+import Progress from './progress';
+
 
 const confirm = Modal.confirm
 const FormItem = Form.Item
@@ -5548,6 +5550,9 @@ const Task = React.createClass({
               ) : (
                 ''
               )}
+              {/* <TabPane tab="会员进度表" key="4">
+                <Progress />
+              </TabPane> */}
             </Tabs>
           </div>
         </Modal> : <div />}

+ 184 - 0
js/component/manageCenter/project/task/progress.jsx

@@ -0,0 +1,184 @@
+import React, { Component } from "react";
+import { message, Modal, Spin, Input, Button } from "antd";
+import './progress.less';
+import $ from "jquery/src/ajax";
+
+const { TextArea } = Input;
+
+class Progress extends Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      loading: false,
+
+    }
+
+  }
+
+
+  componentDidMount() {
+
+  }
+
+  render() {
+    return (
+      <div className="progress">
+        <div className="pro-content">
+          <div className="pc-title">中联重工科技集团有限公司</div>
+          <div className="pc-row">
+            <div className="pr-item">
+              <div style={{ color: "black" }}>合同编号:HNKD20240563</div>
+              <div>&nbsp;</div>
+              <div style={{ color: "black" }}>会员等级:A&nbsp;&nbsp;&nbsp;&nbsp;会员&nbsp;&nbsp;&nbsp;&nbsp;A/AA/AAA</div>
+            </div>
+            <div className="pr-item">
+              <div className="pi-tit">服务内容</div>
+              <div>高新会员(财税) 2025年</div>
+              <div>高新会员(财税) 2025年</div>
+              <div>国家高新技术企业认定 2025年</div>
+            </div>
+            <div className="pr-item">
+              <div className="pi-tit">服务团队</div>
+              <div>业务负责人:XXXX</div>
+              <div>项目负责人:XXXX</div>
+              <div>技术咨询师:XXXX</div>
+              <div>财税咨询师:XXXX</div>
+            </div>
+          </div>
+          <div className="pc-tit">基础数据</div>
+          <div className="pc-row">
+            <div className="pr-item">
+              <div className="pi-tit">上年度(2024年)</div>
+              <div>销售收入:2000万元</div>
+              <div>高新研发费用:500万元</div>
+            </div>
+            <div className="pr-item">
+              <div className="pi-tit">上上年度(2023年)</div>
+              <div>销售收入:2000万元</div>
+              <div>高新研发费用:500万元</div>
+            </div>
+            <div className="pr-item">
+              <div className="pi-tit">本年度企业人员情况</div>
+              <div>职工总数:10人&nbsp;&nbsp;科技人员:10人</div>
+              <div>占比:100%</div>
+            </div>
+          </div>
+          <div className="pc-tit">科研立项与研发投入</div>
+          <div className="pc-row">
+            <div className="pr-item">
+              <div className="pi-tit">立项和预算</div>
+              <div>研发立项数量:10个</div>
+              <div>年度研发预算总额:10,000万元</div>
+              <div>年度销售收入预计:1,000,000万元</div>
+            </div>
+            <div className="pr-item">
+              <div className="pi-tit">&nbsp;</div>
+              <div>&nbsp;</div>
+              <div>本年度研发费用预算占比:20.30%</div>
+              <div>三年研发费用占比预估:20.30%</div>
+            </div>
+          </div>
+          <div className="p-line"></div>
+          <div className="pc-row">
+            <div className="pr-items">
+              <div className="pi-tit">实际情况</div>
+              <div>数据周期(累计):10个</div>
+              <div>已立项RD数量:10个</div>
+              <div>已归集研发费用总额:10000万元</div>
+              <div>研发预算完成进度:20.30%</div>
+            </div>
+            <div className="pr-items">
+              <div className="pi-tit">&nbsp;</div>
+              <div>年度实际销售收入:1000000万元</div>
+              <div>本年度研发费用占比:20.30%</div>
+              <div>三年研发费用占比:20.30%</div>
+            </div>
+          </div>
+          <div className="pc-tit">报表报送</div>
+          <div className="pc-row">
+            <div className="pr-items">
+              <div>火炬统计:10个</div>
+              <div>统计年报:10个</div>
+            </div>
+            <div className="pr-items">
+              <div>高企年报:1000000万元</div>
+              <div>汇算清缴:20.30%</div>
+              <div>加扣RD10个,其中有知识产权的加扣费用1000000万元,加扣研发费用金额10000万元</div>
+            </div>
+          </div>
+          <div className="pc-tit">研发奖补</div>
+          <div className="pc-row">
+            <div className="pr-items">
+              <div>研发准备金备案:10个</div>
+            </div>
+            <div className="pr-items">
+              <div>研发奖补申请:1000000万元</div>
+              <div>申请金额:100000万元,公示金额:100000万元,其他_______</div>
+            </div>
+          </div>
+          <div className="pc-tit">备查交付与归档</div>
+          <div className="pc-row">
+            <div className="pr-items">
+              <div>加扣备查交付:10个</div>
+              <div>是否归档:10个</div>
+            </div>
+            <div className="pr-items">
+              <div>高新备查交付:10个</div>
+              <div>是否归档:10个</div>
+            </div>
+          </div>
+          <div className="pc-tit">日常工作</div>
+          <div className="pc-tit">特色工作</div>
+          <div className="pc-row">
+            <div className="pr-item">
+              <div>专项检查:1次</div>
+            </div>
+            <div className="pr-item">
+              <div>模拟稽查:1次</div>
+            </div>
+          </div>
+          <div className="pc-tit">高新认定</div>
+          <div className="pc-row">
+            <div className="pr-item" style={{ width: "100%" }}>
+              <div>1.基础情况:创新能力评价估分___分,实际申报批次:,是否重点关注:</div>
+              <div>2.申报提交:网上系统提交:&nbsp;纸质材料提交:</div>
+              <div>3.评审情况:省级 国家级</div>
+            </div>
+          </div>
+          <div className="pc-tit">其他事项说明</div>
+          <div className="pc-row">
+            <TextArea rows={4} />
+          </div>
+          <div className="pc-tit">客户签字</div>
+          <div className="pc-row">
+            <div className="pr-item">
+              <div style={{ color: "black", paddingBottom: 80 }}>授权代表(签字或盖章):</div>
+            </div>
+          </div>
+        </div>
+        <div className="pro-bottom">
+          <Button
+            type="primary"
+            onClick={() => {
+
+            }}
+            style={{ margin: 25 }}
+          >
+            保存
+          </Button>
+          <Button
+            type="ghost"
+            onClick={() => {
+
+            }}
+            style={{ margin: 25 }}
+          >
+            取消
+          </Button>
+        </div>
+      </div>
+    )
+  }
+}
+
+export default Progress;

+ 61 - 0
js/component/manageCenter/project/task/progress.less

@@ -0,0 +1,61 @@
+.progress {
+  padding: 30px 0;
+
+  .pro-content {
+    .pc-title {
+      text-align: center;
+      font-size: 24px;
+      font-weight: bold;
+      margin-bottom: 20px;
+
+    }
+
+    .pc-row{
+      display: flex;
+      flex-direction: row;
+      font-size: 14px;
+      padding: 0 30px;
+
+      .pr-item {
+        width: 25%;
+
+        .pi-tit{
+          font-weight: bold;
+          color: black;
+        }
+
+      }
+
+      .pr-items{
+        width: 50%;
+
+        .pi-tit{
+          font-weight: bold;
+          color: black;
+        }
+
+      }
+
+    }
+
+    .p-line{
+      border-top: 1px dashed #000000A6;
+      margin: 10px 30px;
+
+    }
+
+    .pc-tit{
+      font-size: 16px;
+      padding: 5px 30px;
+      margin: 5px 0 10px 0;
+      color: #fff;
+      background: #02a7f0;
+
+    }
+  }
+
+  .pro-bottom{
+    display: flex;
+    justify-content: center;
+  }
+}

+ 388 - 11
package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "afanti",
-  "version": "1.2.61",
+  "version": "1.3.34",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "afanti",
-      "version": "1.2.61",
+      "version": "1.3.34",
       "license": "ISC",
       "dependencies": {
         "antd": "^2.7.4",
@@ -16,12 +16,14 @@
         "echarts-for-react": "^1.4.4",
         "html2canvas": "^0.5.0-beta4",
         "jquery": "^3.1.1",
+        "jspdf": "^2.5.2",
         "pdf": "^0.1.0",
         "prop-types": "^15.5.10",
         "quill-image-resize-module": "^3.0.0",
         "react": "^15.4.1",
         "react-dom": "^15.4.1",
         "react-pdf": "^1.8.3",
+        "react-print-html": "^1.0.5",
         "react-quill": "^1.0.0",
         "viewer": "^0.10.11",
         "viewerjs": "^1.6.2",
@@ -54,6 +56,28 @@
         "webpack-dev-server": "^2.9.7"
       }
     },
+    "node_modules/@babel/runtime": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.0.tgz",
+      "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+      "dependencies": {
+        "regenerator-runtime": "^0.14.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/runtime/node_modules/regenerator-runtime": {
+      "version": "0.14.1",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+    },
+    "node_modules/@types/raf": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmmirror.com/@types/raf/-/raf-3.4.3.tgz",
+      "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==",
+      "optional": true
+    },
     "node_modules/accepts": {
       "version": "1.3.4",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
@@ -443,15 +467,14 @@
       "optional": true
     },
     "node_modules/atob": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
-      "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=",
-      "dev": true,
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
       "bin": {
         "atob": "bin/atob.js"
       },
       "engines": {
-        "node": ">= 0.4.0"
+        "node": ">= 4.5.0"
       }
     },
     "node_modules/autoprefixer": {
@@ -1186,6 +1209,15 @@
         "node": "*"
       }
     },
+    "node_modules/base64-arraybuffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+      "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
     "node_modules/base64-js": {
       "version": "1.2.1",
       "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.2.1.tgz",
@@ -1429,6 +1461,17 @@
         "browserslist": "cli.js"
       }
     },
+    "node_modules/btoa": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/btoa/-/btoa-1.2.1.tgz",
+      "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==",
+      "bin": {
+        "btoa": "bin/btoa.js"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
     "node_modules/buffer": {
       "version": "4.9.1",
       "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz",
@@ -1591,6 +1634,42 @@
       "integrity": "sha1-C5tceVlQ37rzAaiAa6/ofxJtqMo=",
       "dev": true
     },
+    "node_modules/canvg": {
+      "version": "3.0.10",
+      "resolved": "https://registry.npmmirror.com/canvg/-/canvg-3.0.10.tgz",
+      "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==",
+      "optional": true,
+      "dependencies": {
+        "@babel/runtime": "^7.12.5",
+        "@types/raf": "^3.4.0",
+        "core-js": "^3.8.3",
+        "raf": "^3.4.1",
+        "regenerator-runtime": "^0.13.7",
+        "rgbcolor": "^1.0.1",
+        "stackblur-canvas": "^2.0.0",
+        "svg-pathdata": "^6.0.3"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/canvg/node_modules/core-js": {
+      "version": "3.39.0",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.39.0.tgz",
+      "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==",
+      "hasInstallScript": true,
+      "optional": true,
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/canvg/node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+      "optional": true
+    },
     "node_modules/caseless": {
       "version": "0.12.0",
       "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz",
@@ -2439,6 +2518,15 @@
         "node": "*"
       }
     },
+    "node_modules/css-line-break": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
+      "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+      "optional": true,
+      "dependencies": {
+        "utrie": "^1.0.2"
+      }
+    },
     "node_modules/css-loader": {
       "version": "0.26.4",
       "resolved": "http://registry.npm.taobao.org/css-loader/download/css-loader-0.26.4.tgz",
@@ -2915,6 +3003,12 @@
         "domelementtype": "1"
       }
     },
+    "node_modules/dompurify": {
+      "version": "2.5.8",
+      "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-2.5.8.tgz",
+      "integrity": "sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==",
+      "optional": true
+    },
     "node_modules/domutils": {
       "version": "1.5.1",
       "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz",
@@ -3473,6 +3567,11 @@
       "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=",
       "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js."
     },
+    "node_modules/fflate": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.2.tgz",
+      "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
+    },
     "node_modules/file-loader": {
       "version": "0.10.1",
       "resolved": "http://registry.npm.taobao.org/file-loader/download/file-loader-0.10.1.tgz",
@@ -5132,6 +5231,47 @@
         "node": "*"
       }
     },
+    "node_modules/jspdf": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmmirror.com/jspdf/-/jspdf-2.5.2.tgz",
+      "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.23.2",
+        "atob": "^2.1.2",
+        "btoa": "^1.2.1",
+        "fflate": "^0.8.1"
+      },
+      "optionalDependencies": {
+        "canvg": "^3.0.6",
+        "core-js": "^3.6.0",
+        "dompurify": "^2.5.4",
+        "html2canvas": "^1.0.0-rc.5"
+      }
+    },
+    "node_modules/jspdf/node_modules/core-js": {
+      "version": "3.39.0",
+      "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.39.0.tgz",
+      "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==",
+      "hasInstallScript": true,
+      "optional": true,
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/jspdf/node_modules/html2canvas": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
+      "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+      "optional": true,
+      "dependencies": {
+        "css-line-break": "^2.1.0",
+        "text-segmentation": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
     "node_modules/jsprim": {
       "version": "1.4.1",
       "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
@@ -7480,6 +7620,21 @@
         "raw-loader": "^0.5.1"
       }
     },
+    "node_modules/raf": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz",
+      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+      "optional": true,
+      "dependencies": {
+        "performance-now": "^2.1.0"
+      }
+    },
+    "node_modules/raf/node_modules/performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
+      "optional": true
+    },
     "node_modules/randomatic": {
       "version": "1.1.7",
       "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.7.tgz",
@@ -8077,6 +8232,11 @@
         "react-dom": ">=15.5"
       }
     },
+    "node_modules/react-print-html": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/react-print-html/-/react-print-html-1.0.5.tgz",
+      "integrity": "sha512-LUKVDJPu+95gbFg8wDreYxx2q2Krbh/aa/esTo4WewsizhukjQZiZC8yFohwApX6kfrkk7brT5XqO/yCOzkD6g=="
+    },
     "node_modules/react-quill": {
       "version": "1.1.0",
       "resolved": "http://registry.npm.taobao.org/react-quill/download/react-quill-1.1.0.tgz",
@@ -8545,6 +8705,15 @@
       "deprecated": "https://github.com/lydell/resolve-url#deprecated",
       "dev": true
     },
+    "node_modules/rgbcolor": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/rgbcolor/-/rgbcolor-1.0.1.tgz",
+      "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.8.15"
+      }
+    },
     "node_modules/right-align": {
       "version": "0.1.3",
       "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz",
@@ -9265,6 +9434,15 @@
         "safe-buffer": "^5.1.0"
       }
     },
+    "node_modules/stackblur-canvas": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmmirror.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz",
+      "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==",
+      "optional": true,
+      "engines": {
+        "node": ">=0.1.14"
+      }
+    },
     "node_modules/static-extend": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
@@ -9569,6 +9747,15 @@
         "node": ">=0.8.0"
       }
     },
+    "node_modules/svg-pathdata": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmmirror.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
+      "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
+      "optional": true,
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
     "node_modules/svgo": {
       "version": "0.7.2",
       "resolved": "http://registry.npm.taobao.org/svgo/download/svgo-0.7.2.tgz",
@@ -9599,6 +9786,15 @@
         "node": ">=0.6"
       }
     },
+    "node_modules/text-segmentation": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
+      "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+      "optional": true,
+      "dependencies": {
+        "utrie": "^1.0.2"
+      }
+    },
     "node_modules/through2": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
@@ -10303,6 +10499,15 @@
         "node": ">= 0.4.0"
       }
     },
+    "node_modules/utrie": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
+      "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+      "optional": true,
+      "dependencies": {
+        "base64-arraybuffer": "^1.0.2"
+      }
+    },
     "node_modules/uuid": {
       "version": "3.1.0",
       "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.1.0.tgz",
@@ -11217,6 +11422,27 @@
     }
   },
   "dependencies": {
+    "@babel/runtime": {
+      "version": "7.26.0",
+      "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.0.tgz",
+      "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+      "requires": {
+        "regenerator-runtime": "^0.14.0"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.14.1",
+          "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+          "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+        }
+      }
+    },
+    "@types/raf": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmmirror.com/@types/raf/-/raf-3.4.3.tgz",
+      "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==",
+      "optional": true
+    },
     "accepts": {
       "version": "1.3.4",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz",
@@ -11535,10 +11761,9 @@
       "optional": true
     },
     "atob": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz",
-      "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=",
-      "dev": true
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
     },
     "autoprefixer": {
       "version": "6.7.7",
@@ -12253,6 +12478,12 @@
       "integrity": "sha1-MeflYNyEbJ9EwaUx32UU2jVHQVc=",
       "dev": true
     },
+    "base64-arraybuffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
+      "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
+      "optional": true
+    },
     "base64-js": {
       "version": "1.2.1",
       "resolved": "http://registry.npm.taobao.org/base64-js/download/base64-js-1.2.1.tgz",
@@ -12472,6 +12703,11 @@
         "electron-to-chromium": "^1.2.7"
       }
     },
+    "btoa": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/btoa/-/btoa-1.2.1.tgz",
+      "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g=="
+    },
     "buffer": {
       "version": "4.9.1",
       "resolved": "http://registry.npm.taobao.org/buffer/download/buffer-4.9.1.tgz",
@@ -12618,6 +12854,36 @@
       "integrity": "sha1-C5tceVlQ37rzAaiAa6/ofxJtqMo=",
       "dev": true
     },
+    "canvg": {
+      "version": "3.0.10",
+      "resolved": "https://registry.npmmirror.com/canvg/-/canvg-3.0.10.tgz",
+      "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==",
+      "optional": true,
+      "requires": {
+        "@babel/runtime": "^7.12.5",
+        "@types/raf": "^3.4.0",
+        "core-js": "^3.8.3",
+        "raf": "^3.4.1",
+        "regenerator-runtime": "^0.13.7",
+        "rgbcolor": "^1.0.1",
+        "stackblur-canvas": "^2.0.0",
+        "svg-pathdata": "^6.0.3"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "3.39.0",
+          "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.39.0.tgz",
+          "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==",
+          "optional": true
+        },
+        "regenerator-runtime": {
+          "version": "0.13.11",
+          "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+          "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
+          "optional": true
+        }
+      }
+    },
     "caseless": {
       "version": "0.12.0",
       "resolved": "http://registry.npm.taobao.org/caseless/download/caseless-0.12.0.tgz",
@@ -13337,6 +13603,15 @@
       "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
       "dev": true
     },
+    "css-line-break": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz",
+      "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
+      "optional": true,
+      "requires": {
+        "utrie": "^1.0.2"
+      }
+    },
     "css-loader": {
       "version": "0.26.4",
       "resolved": "http://registry.npm.taobao.org/css-loader/download/css-loader-0.26.4.tgz",
@@ -13763,6 +14038,12 @@
         "domelementtype": "1"
       }
     },
+    "dompurify": {
+      "version": "2.5.8",
+      "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-2.5.8.tgz",
+      "integrity": "sha512-o1vSNgrmYMQObbSSvF/1brBYEQPHhV1+gsmrusO7/GXtp1T9rCS8cXFqVxK/9crT1jA6Ccv+5MTSjBNqr7Sovw==",
+      "optional": true
+    },
     "domutils": {
       "version": "1.5.1",
       "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz",
@@ -14244,6 +14525,11 @@
         }
       }
     },
+    "fflate": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.2.tgz",
+      "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="
+    },
     "file-loader": {
       "version": "0.10.1",
       "resolved": "http://registry.npm.taobao.org/file-loader/download/file-loader-0.10.1.tgz",
@@ -15619,6 +15905,39 @@
       "resolved": "http://registry.npm.taobao.org/jsonify/download/jsonify-0.0.0.tgz",
       "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
     },
+    "jspdf": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmmirror.com/jspdf/-/jspdf-2.5.2.tgz",
+      "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==",
+      "requires": {
+        "@babel/runtime": "^7.23.2",
+        "atob": "^2.1.2",
+        "btoa": "^1.2.1",
+        "canvg": "^3.0.6",
+        "core-js": "^3.6.0",
+        "dompurify": "^2.5.4",
+        "fflate": "^0.8.1",
+        "html2canvas": "^1.0.0-rc.5"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "3.39.0",
+          "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.39.0.tgz",
+          "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==",
+          "optional": true
+        },
+        "html2canvas": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz",
+          "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
+          "optional": true,
+          "requires": {
+            "css-line-break": "^2.1.0",
+            "text-segmentation": "^1.0.3"
+          }
+        }
+      }
+    },
     "jsprim": {
       "version": "1.4.1",
       "resolved": "http://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
@@ -17625,6 +17944,23 @@
         "raw-loader": "^0.5.1"
       }
     },
+    "raf": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz",
+      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+      "optional": true,
+      "requires": {
+        "performance-now": "^2.1.0"
+      },
+      "dependencies": {
+        "performance-now": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
+          "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
+          "optional": true
+        }
+      }
+    },
     "randomatic": {
       "version": "1.1.7",
       "resolved": "http://registry.npm.taobao.org/randomatic/download/randomatic-1.1.7.tgz",
@@ -18199,6 +18535,11 @@
         "react-dom": ">=15.5"
       }
     },
+    "react-print-html": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/react-print-html/-/react-print-html-1.0.5.tgz",
+      "integrity": "sha512-LUKVDJPu+95gbFg8wDreYxx2q2Krbh/aa/esTo4WewsizhukjQZiZC8yFohwApX6kfrkk7brT5XqO/yCOzkD6g=="
+    },
     "react-quill": {
       "version": "1.1.0",
       "resolved": "http://registry.npm.taobao.org/react-quill/download/react-quill-1.1.0.tgz",
@@ -18601,6 +18942,12 @@
       "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
       "dev": true
     },
+    "rgbcolor": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/rgbcolor/-/rgbcolor-1.0.1.tgz",
+      "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
+      "optional": true
+    },
     "right-align": {
       "version": "0.1.3",
       "resolved": "http://registry.npm.taobao.org/right-align/download/right-align-0.1.3.tgz",
@@ -19216,6 +19563,12 @@
         "safe-buffer": "^5.1.0"
       }
     },
+    "stackblur-canvas": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmmirror.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz",
+      "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==",
+      "optional": true
+    },
     "static-extend": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
@@ -19481,6 +19834,12 @@
       "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
       "dev": true
     },
+    "svg-pathdata": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmmirror.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
+      "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
+      "optional": true
+    },
     "svgo": {
       "version": "0.7.2",
       "resolved": "http://registry.npm.taobao.org/svgo/download/svgo-0.7.2.tgz",
@@ -19501,6 +19860,15 @@
       "resolved": "http://registry.npm.taobao.org/tapable/download/tapable-0.2.8.tgz",
       "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI="
     },
+    "text-segmentation": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz",
+      "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
+      "optional": true,
+      "requires": {
+        "utrie": "^1.0.2"
+      }
+    },
     "through2": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
@@ -20103,6 +20471,15 @@
       "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
       "dev": true
     },
+    "utrie": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz",
+      "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
+      "optional": true,
+      "requires": {
+        "base64-arraybuffer": "^1.0.2"
+      }
+    },
     "uuid": {
       "version": "3.1.0",
       "resolved": "http://registry.npm.taobao.org/uuid/download/uuid-3.1.0.tgz",

+ 2 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "afanti",
-  "version": "1.3.32",
+  "version": "1.3.34",
   "description": "",
   "main": "index.js",
   "scripts": {
@@ -54,6 +54,7 @@
     "echarts-for-react": "^1.4.4",
     "html2canvas": "^0.5.0-beta4",
     "jquery": "^3.1.1",
+    "jspdf": "^2.5.2",
     "pdf": "^0.1.0",
     "prop-types": "^15.5.10",
     "quill-image-resize-module": "^3.0.0",

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 7129 - 6845
yarn.lock