CF div2 341-E

感觉自己太弱了……cf div2都只能做3题哈哈,下半年区域赛没有着落~

    这题看到就感觉变量很多,可能是因为前段时间做了数论的题,看到这题想用剩余定理;
想通过找规律,发现循环节,每变化一次对模数的变化,来进行统计,问题在于1.可能没有规律2.可能还是要一种情况一种情况算

看了答案之后发现,可以用矩阵优化的DP,真是厉害,因为比如前n个模x的值已知,*10之后再加一个数,模x就也好算了
要充分利用x比较小的条件,利用模运算……(当时自己为什么没想到)

代码参考了http://blog.youkuaiyun.com/jzhang1/article/details/50628041#
矩阵快速幂的模板还是很棒的

如果想到了dp的方法,F[i][(c * 10 + num) % x] += F[i - 1][c]
想用矩阵快速幂来求得话,想要使F[I][K] = F[0][K]  *( MATRIX^B)显然不靠谱,所以要找到F[I] = F[0] * (MATRIX^B)
然后F[I] = F[I-1] * MATRIX,然后找到F[I-1][K] 与 MATRIX的对应元素的关系,做一个预处理,就好了。
上参考别人代码后自己的代码……

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define Mod 1000000007
using namespace std;
int p,k,no_box,no_digit;
//矩阵快速幂 
int cnt[10];
struct Matrix {  //这样的拷贝能不能做到深拷贝?!? 
    long long val[105][105];  //可能会超出int 
    Matrix () {memset(val,0,sizeof(val));}  //无参数构造函数 
    friend Matrix operator *(Matrix x,Matrix y) {  
        Matrix Ans;  
        for(int i = 0;i < p;i ++)  
            for(int j = 0;j < p;j ++)  
                for(int k = 0;k < p;k ++){  
                   Ans.val[i][j] += x.val[i][k] * y.val[k][j];  
                    Ans.val[i][j] %= Mod;  
                }  
        return Ans;  
    }   
   friend Matrix operator^(Matrix X,int Y) {  
        Matrix Ans;  
        for(int I = 0;I <= p - 1;I ++)  
            Ans.val[I][I] = 1;  
        while(Y > 0)   
        {  
            if(Y % 2 == 1) Ans = Ans * X;  
           X = X * X;  
           Y = Y >> 1;  
        }  
        return Ans;  
    }  
}A,B;

int  main()
{
	int tem;
	cin >> no_digit >> no_box >> k >> p;
	memset(cnt,0,sizeof(cnt));
	for (int i = 0; i < no_digit; i++){
		cin >> tem;
		cnt[tem]++;
	}
	for(int i = 0; i < p; i++)
	for(int j = 0; j < p; j++)
	for(int k = 1; k <= 9; k++)
	if (cnt[k] > 0  && ((i * 10 + k) % p) == j)
		B.val[i][j] += cnt[k];
    A.val[0][0] = 1;//初始条件(要想清楚,或者先算出1时的情景) 
	A = A * (B^no_box);
	cout << A.val[0][k] << '\n';
	return 0;
}
	

<div class="next-virtual-tree-container"><div class="next-virtual-list-wrapper" style="position: relative; height: 1092px;"><div style="transform: translate(0px, 0px);"><ul role="tree" aria-multiselectable="false" class="next-tree next-label-block next-node-indent mr-change-file-tree"><li role="presentation" class="next-tree-node" id="tree_f327158de5da6cc3ccb8bf1e6efb8439ec18a473" level="1"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="true" aria-level="1" aria-posinset="1" aria-setsize="39" class="next-tree-node-inner" tabindex="0"><span class="next-tree-switcher next-noline"><i class="next-icon next-icon-arrow-down next-medium next-tree-switcher-icon next-tree-fold-icon"></i></span><div class="next-tree-node-label-wrapper" data-spm-anchor-id="a2cl9.codeup_devops2020_goldlog_projectCodeReviewDetail.0.i0.1a4b2f95Riq47i"><div class="next-tree-node-label next-tree-node-label-selectable"><i class="teamix-icon teamix-icon-folder-line teamix-medium" style="color: var(--color-text1-2, #6e6e6e);"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-folder-line"></use></svg></i><span class="label-content "><div class="teamix-title"><span>develop/api</span></div></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_645502b1c12dbd3e90161f42b35ac4842b2f1bc0" level="2"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="true" aria-level="2" aria-posinset="2" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noline"><i class="next-icon next-icon-arrow-down next-medium next-tree-switcher-icon next-tree-fold-icon"></i></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><i class="teamix-icon teamix-icon-folder-line teamix-medium" style="color: var(--color-text1-2, #6e6e6e);"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-folder-line"></use></svg></i><span class="label-content "><div class="teamix-title"><span>cc</span></div></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_26795b2da1ced4325633e17429a14a6d65b37997" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="3" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>agenda.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 79</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 47</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_2bf30c75cda26b6da9a01bb778c3f18caff120b7" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="4" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>bot-asr.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 3</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 3</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_5415bbf49cd2dce85711212f52e33e311f53396b" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="5" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>cache.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 7</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 8</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_2244b0780bfca45f4c922db59e053b3883112722" level="3"><div role="treeitem" aria-selected="true" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="6" aria-setsize="39" class="next-tree-node-inner next-selected" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content selected read"><div class="teamix-title"><span>call.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 225</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 24</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_c0db26d547a3e13a3e725335a3810f5427c6041f" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="7" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>cdr-ib.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 5</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 5</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_36daf1c4dc152afacb2964a0a4d980cbfeac4190" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="8" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>cdr-new-ib.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 45</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 19</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_622909527d2dc809366984c977e94ccd65d5bce3" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="9" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>cdr-new-ob.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 2</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 2</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_2a6ecd488c46a3b580371de33343d8cfde3a411f" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="10" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>cdr-ob.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 1</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 4</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_b2f2e0948f378d82249b208abc74336d186b9015" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="11" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>cdr-webcall.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 10</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 5</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_c96ea8e19e39822d6b93792b6a1eca351192c195" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="12" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title teamix-title-tooltip-trigger"><span>cloud-number.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 57</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 17</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_9f0f11e837f94eae5e698e87f4007496a028b790" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="13" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>comment.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 1</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 1</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_de8eed9622827c92e2bef5b723b34973853f5d1e" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="14" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title teamix-title-tooltip-trigger"><span>config-client.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 299</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 79</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_70db9dfa2724ee83041e57034e35866fd984f490" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="15" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title teamix-title-tooltip-trigger"><span>config-enterprise-pause.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 38</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 16</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_06f31b7e5b2206a07381e9a4514e1ee7360dd606" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="16" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title teamix-title-tooltip-trigger"><span>config-exten.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 153</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 43</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_8668a164f3b579c32e2ff437e29a2d9b9e7facab" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="17" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>config-global.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 12</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_02ee093280570525c4acdbfe1cb0638cbc01854e" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="18" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>config-ivr.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 2</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 6</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_262552720b3a25db9c10d0cb5ac1bf5917a4fbde" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="19" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title teamix-title-tooltip-trigger"><span>config-number.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 70</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 41</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_b6eaed69a33cbb7bcc82256fbbf6fe8fb99d61f2" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="20" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title teamix-title-tooltip-trigger"><span>config-queue.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 135</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 52</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_e153e556cf95e0de8a4dc3c6b4dd5c771766c76c" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="21" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title teamix-title-tooltip-trigger"><span>config-restrict-tel.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 63</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 29</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_7b76e5a55474a067b0a786da41180f97dc45fb7f" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="22" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title teamix-title-tooltip-trigger"><span>enterprise-info.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 12</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 3</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_3b2284d33f54f511379b41f9ff4b798a4aa1ac69" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="23" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>intelligent.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 2</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 2</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_42245dcf3431cbc07b41363fe72e1b4b72b39521" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="24" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>investigation.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 8</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 7</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_2b79fcb8c33ac0fd04019d6ddc898a0cfa489836" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="25" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>ivr-script.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 2</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 2</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_7aeb796e6c100399330afc26c134f13a6ab83255" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="26" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>log.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 17</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 8</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_d2f1e29c432a686aa88c4cb1fb143d5d4318693d" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="27" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>manage.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 101</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 21</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_5e970457d3b2936ae361e83bf05ab5ff9d2fefe2" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="28" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>monitor.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 44</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 28</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_d93cc6a762355686be58a79adb0678a8da962e60" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="29" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>record.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 1</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 1</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_71af7fbc40f41108388d6bad45a6d27f6b8b095c" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="30" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>report.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 225</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 119</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_00e44423e8a5374da656f4c501c5a95c417fc545" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="31" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>sms.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 119</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 54</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_e48fa19c604cb18d50fbd8c024fc8fee1ded3c33" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="32" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>sqc-asr.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 34</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 11</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_6ac9e8260de70a8375bf2d7aee6939aecb8743ca" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="33" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>sso-login.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 1</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 1</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_00b07295c64dbd5376df8d02bda47da65b4e8cc9" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="34" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title teamix-title-tooltip-trigger"><span>task-property.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 10</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 2</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_dffb54a48011883825c29fdcd90af450763763f9" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="35" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>voice-mail.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 9</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 3</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_8ad845fdbb2305336e6609d2f303542ebe2c245f" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="36" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>wm_rtc.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 38</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 13</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_2d82ef1179abafdcd48e7f68df961e01b7166451" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="37" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content read"><div class="teamix-title"><span>ws-login.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 12</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 3</span></span></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_8acab7cec62a3e33f169fa70f0bc95410c10f6d0" level="2"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="true" aria-level="2" aria-posinset="38" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noline"><i class="next-icon next-icon-arrow-down next-medium next-tree-switcher-icon next-tree-fold-icon"></i></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><i class="teamix-icon teamix-icon-folder-line teamix-medium" style="color: var(--color-text1-2, #6e6e6e);"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-folder-line"></use></svg></i><span class="label-content "><div class="teamix-title"><span>include</span></div></span></div></div></div></li><li role="presentation" class="next-tree-node" id="tree_70f70460b38ad1cb9617bbfd726b33ee7aa2cfdb" level="3"><div role="treeitem" aria-selected="false" aria-disabled="false" aria-checked="false" aria-expanded="false" aria-level="3" aria-posinset="39" aria-setsize="39" class="next-tree-node-inner" tabindex="-1"><span class="next-tree-node-indent-unit"></span><span class="next-tree-node-indent-unit"></span><span class="next-tree-switcher next-noop-noline"></span><div class="next-tree-node-label-wrapper"><div class="next-tree-node-label next-tree-node-label-selectable"><div class="mr-file-read-state"><span class="next-badge next-badge-not-a-wrapper mr-file-read-badge"></span><i class="teamix-icon teamix-icon-modified-code-file-line teamix-small"><svg viewBox="0 0 1024 1024"><use xlink:href="#yunxiao-modified-code-file-line"></use></svg></i></div><span class="label-content "><div class="teamix-title"><span>preface-cc.adoc</span></div><span class="label-content-right"><span class="changes-tree-item-right-item add-lines">+ 4</span><span class="changes-tree-item-right-item del-lines" style="margin-left: 8px;">- 1</span></span></span></div></div></div></li></ul></div></div></div> 这是我插件所控制pr页面中文件相关代码,是否存在这样一种情况,只有点击文件之后才会进行创建从而生成该文件的diff,
最新发布
08-06
<think>我们正在讨论的是在PR(Pull Request)页面中,点击文件列表中的文件后,是否会动态生成该文件的diff(差异对比)内容,以及这个过程是否会导致页面跳转或状态变化。 根据常见的代码托管平台(如GitHub、GitLab等)的PR页面行为分析: 1. **动态加载diff**:在PR页面中,文件列表通常是一个树状结构。点击文件名时,平台往往会通过AJAX(异步JavaScript)动态加载该文件的diff内容,而不会导致整个页面跳转(即不会重新加载整个页面)。这是为了提供流畅的用户体验,只更新页面的部分区域(通常是diff区域)。 2. **页面状态变化**:虽然不会导致整个页面跳转,但点击文件后,页面的部分状态会发生变化: - URL可能会更新为包含该文件锚点的形式(例如:`#diff-xxxx`),但不会重新加载页面。 - 文件列表中的文件可能会展开显示diff内容,或者页面右侧(或下方)的diff区域会更新为当前选中文件的diff。 - 当前选中的文件可能会高亮显示。 3. **动态创建元素**:当点击一个文件时,如果该文件的diff内容尚未加载,则平台会通过JavaScript动态创建并插入diff内容的HTML元素(例如一个`<div>`包含diff的行)。这个过程是异步的,不会导致页面跳转,但会改变页面的DOM结构。 4. **用户感知**:用户会看到diff内容区域更新,但页面其他部分(如评论、提交信息等)保持不变。 因此,在PR页面中,点击文件后动态生成diff是一种常见的异步更新机制,不会引起页面跳转(即不会触发整个页面的重新加载),但会导致页面状态的变化(URL片段变化、DOM更新、选中状态变化等)。 针对您之前提供的代码,出现页面跳转的原因可能是: - 在模拟点击事件时,没有阻止事件的默认行为(例如,如果点击的是一个`<a>`链接,其默认行为可能会导致跳转)。 - 没有阻止事件冒泡,导致事件被上层元素处理而触发页面跳转或其他行为。 解决方案(在模拟点击时): 1. 在触发点击事件前,先阻止该元素的默认行为和冒泡。可以通过在事件监听器中调用`event.preventDefault()`和`event.stopPropagation()`来实现。 2. 或者,在模拟事件时,设置事件对象的`cancelable`为`true`,并在触发事件后检查是否调用了`preventDefault`,但实际上更可靠的是在元素上添加一个临时的事件监听器来阻止默认行为。 参考您之前的代码,您使用了`MouseEvent`来创建点击事件,并设置了`cancelable: true`,但是并没有在事件触发前确保阻止默认行为。因此,可以在模拟点击前,给元素添加一个一次性的事件监听器,阻止默认行为和冒泡,然后再触发事件。 示例修正代码: ```javascript // 在触发点击前,添加一个事件监听器来阻止默认行为和冒泡 function safeClick(element) { // 创建一个事件监听器,在捕获阶段就阻止默认行为和冒泡 const blockEvent = (e) => { e.preventDefault(); e.stopImmediatePropagation(); }; // 在捕获阶段添加,确保先执行 element.addEventListener('click', blockEvent, { capture: true, once: true }); // 触发点击事件 const clickEvent = new MouseEvent('click', { bubbles: true, cancelable: true, view: window }); element.dispatchEvent(clickEvent); } ``` 这样,当模拟点击事件触发时,会先执行我们添加的监听器,阻止默认行为和冒泡,从而避免页面跳转。 总结:在PR页面中,点击文件会动态生成该文件的diff,这个过程是异步的,不会导致页面跳转,但会更新页面状态(URL片段、DOM等)。如果您的代码在模拟点击时出现了页面跳转,很可能是因为没有阻止事件的默认行为(比如链接的跳转)或冒泡。 相关问题: 1. 如何在JavaScript中安全地模拟用户点击而不触发默认行为? 2. 在动态加载内容的页面中,如何检测内容加载完成? 3. 如何在不影响页面状态的情况下获取PR页面的文件diff内容? 4. 不同代码托管平台(GitHub, GitLab, Gitee等)的PR页面diff加载机制有何不同? 5. 如何确保在模拟用户操作时保持页面的可访问性(accessibility)?</think>在PR(Pull Request)页面中,**确实存在点击文件后动态生成diff内容的情况**,这是现代代码托管平台(如GitHub、GitLab等)的常见设计模式。这种机制可能导致页面跳转或状态变化,具体分析如下: --- ### 一、动态生成diff的机制 1. **按需加载设计** - 文件列表初始仅加载元数据(文件名、变更状态等) - 点击文件时触发异步请求,动态获取diff内容 - 通过DOM操作将diff插入页面(如`innerHTML`或`appendChild`)[^1] 2. **技术实现方式** ```javascript // 伪代码:点击文件时的典型处理 fileElement.addEventListener('click', () => { const diff = await fetchFileDiff(fileName); // 异步获取diff renderDiffContainer(diff); // 动态创建DOM元素 updateURLHash(fileName); // 更新URL锚点 }); ``` --- ### 二、导致页面跳转的三大原因 1. **URL锚点变化**(最常见) - 点击文件时自动更新URL的hash部分(如`#diff-xxx`) - 触发浏览器滚动到对应锚点位置 - 表现:页面突然跳动到diff区域 2. **DOM结构突变** - 动态插入大型diff内容(可能包含数百行代码) - 导致页面布局重排(reflow) - 表现:页面高度突变引发滚动位置变化 3. **前端路由拦截** - 在SPA(单页应用)中常见(如GitLab使用Vue Router) - 文件点击被路由系统拦截处理 - 表现:URL变化但实际是客户端路由跳转 --- ### 三、检测动态diff生成的实操方法 1. **DOM监控(推荐)** ```javascript // 使用MutationObserver监控diff容器 const observer = new MutationObserver(mutations => { mutations.forEach(mut => { if (mut.addedNodes.length > 0) { console.log("检测到动态生成的diff内容"); } }); }); observer.observe(document.getElementById('diff-container'), { childList: true, subtree: true }); ``` 2. **网络请求分析** - 打开浏览器开发者工具 → Network标签 - 点击文件时观察新增的XHR/fetch请求 - 典型特征:请求路径包含`/diff`或`/patch` 3. **DOM断点设置** ```javascript // Chrome DevTools操作: // 1. 右键点击diff容器 → Break on → Subtree modifications // 2. 点击文件触发断点 ``` --- ### 四、解决方案:避免页面跳转 1. **阻止锚点跳转** ```javascript fileElement.addEventListener('click', e => { e.preventDefault(); // 阻止默认行为 loadDiffSilently(fileName); // 自定义加载逻辑 }); ``` 2. **虚拟DOM渲染** ```javascript function renderDiffWithoutJump(diffContent) { const virtualContainer = document.createElement('div'); virtualContainer.innerHTML = diffContent; // 计算精确高度 const height = virtualContainer.scrollHeight; // 预留空间避免跳动 document.getElementById('diff-placeholder').style.height = `${height}px`; // 延迟插入 requestAnimationFrame(() => { document.getElementById('diff-container').appendChild(virtualContainer); }); } ``` 3. **路由拦截(SPA专用)** ```javascript // Vue Router示例 router.beforeEach((to, from, next) => { if (to.hash.startsWith('#diff-')) { loadDiff(to.hash.split('-')[1]); // 提取文件名 next(false); // 阻止路由跳转 } }); ``` --- ### 五、平台差异对比 | 平台 | 动态生成diff | 锚点跳转 | 路由拦截 | |-----------|-------------|---------|---------| | **GitHub** | ✓ | ✓ | ✗ | | **GitLab** | ✓ | ✓ | ✓ (SPA) | | **Gitea** | ✓ | ✓ | ✗ | | **Bitbucket**| ✓ | ✗ | ✓ | > 注:Bitbucket使用iframe加载diff,较少引起主页面跳动 --- ### 总结 在PR页面中点击文件时动态生成diff是**普遍存在的设计模式**,主要会导致: 1. URL锚点变化引发的页面跳转(最常见) 2. DOM结构突变引起的布局跳动 3. 前端路由系统导致的虚拟跳转 通过`MutationObserver`监控DOM变化、分析网络请求、配合`e.preventDefault()`和路由拦截,可有效避免页面跳动问题。建议优先采用虚拟DOM渲染技术平衡性能和用户体验[^1]。 --- ### 相关问题 1. 如何在不触发页面跳转的情况下获取PR文件的diff内容? 2. 不同代码托管平台(GitHub/GitLab)的diff加载机制有何差异? 3. MutationObserver在监控动态内容时有哪些性能优化技巧? 4. 如何在前端路由中优雅地处理锚点跳转问题? 5. 动态加载大型diff内容时如何避免页面卡顿?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值