This commit is contained in:
Jane 2023-12-25 20:31:52 +08:00
parent 5a2f1cf69d
commit 83b0d6b92b
51 changed files with 3526 additions and 1477 deletions

View File

@ -1,7 +1,7 @@
{ {
"name": "micro-ui", "name": "micro-ui",
"version": "0.4.3", "version": "0.4.3",
"description": "AllData科学护城河-前端项目", "description": "数据标准符合性检测工具-前端项目",
"author": "AllDataDC", "author": "AllDataDC",
"license": "Apache-2.0", "license": "Apache-2.0",
"scripts": { "scripts": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -105,3 +105,11 @@ export function word(id) {
responseType: 'blob' responseType: 'blob'
}) })
} }
export function getMetadatablood(data) {
return request({
url: '/data/metadata/sources/getMetadatablood',
method: 'post',
data: data
})
}

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" class="icon" p-id="6717" t="1547360688278" version="1.1" viewBox="0 0 1024 1024"><defs><style type="text/css"/></defs><path fill="#bfbfbf" d="M890 120H134a70 70 0 0 0-70 70v500a70 70 0 0 0 70 70h756a70 70 0 0 0 70-70V190a70 70 0 0 0-70-70z m-10 520a40 40 0 0 1-40 40H712V448a40 40 0 0 0-80 0v232h-80V368a40 40 0 0 0-80 0v312h-80V512a40 40 0 0 0-80 0v168H184a40 40 0 0 1-40-40V240a40 40 0 0 1 40-40h656a40 40 0 0 1 40 40zM696 824H328a40 40 0 0 0 0 80h368a40 40 0 0 0 0-80z" p-id="6718"/></svg> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" class="icon" p-id="6717" t="1547360688278" version="1.1" viewBox="0 0 1024 1024"><defs><style type="text/css"/></defs><path fill="#000" d="M890 120H134a70 70 0 0 0-70 70v500a70 70 0 0 0 70 70h756a70 70 0 0 0 70-70V190a70 70 0 0 0-70-70z m-10 520a40 40 0 0 1-40 40H712V448a40 40 0 0 0-80 0v232h-80V368a40 40 0 0 0-80 0v312h-80V512a40 40 0 0 0-80 0v168H184a40 40 0 0 1-40-40V240a40 40 0 0 1 40-40h656a40 40 0 0 1 40 40zM696 824H328a40 40 0 0 0 0 80h368a40 40 0 0 0 0-80z" p-id="6718"/></svg>

Before

Width:  |  Height:  |  Size: 600 B

After

Width:  |  Height:  |  Size: 598 B

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" class="icon" p-id="2807" t="1547195013953" version="1.1" viewBox="0 0 1024 1024"><defs><style type="text/css"/></defs><path fill="#cdcdcd" d="M529.0496 527.616l-30.7712-30.7456 85.0688-85.0944 30.7712 30.7712z" p-id="2808"/><path fill="#cdcdcd" d="M0 340.48l427.52 256 248.32 427.52L1024 0l-1024 340.48zM665.6 921.6l-207.36-355.84-355.84-212.48L911.36 81.92l-243.2 243.2 30.72 30.72 243.2-243.2L665.6 921.6z" p-id="2809"/></svg> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" class="icon" p-id="2807" t="1547195013953" version="1.1" viewBox="0 0 1024 1024"><defs><style type="text/css"/></defs><path fill="#000" d="M529.0496 527.616l-30.7712-30.7456 85.0688-85.0944 30.7712 30.7712z" p-id="2808"/><path fill="#000" d="M0 340.48l427.52 256 248.32 427.52L1024 0l-1024 340.48zM665.6 921.6l-207.36-355.84-355.84-212.48L911.36 81.92l-243.2 243.2 30.72 30.72 243.2-243.2L665.6 921.6z" p-id="2809"/></svg>

Before

Width:  |  Height:  |  Size: 536 B

After

Width:  |  Height:  |  Size: 531 B

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" class="icon" p-id="1497" t="1554868028575" version="1.1" viewBox="0 0 1024 1024"><defs><style type="text/css"/></defs><path fill="#bfbfbf" d="M558.409143 658.285714h-92.818286l-28.379428 62.427429a18.285714 18.285714 0 1 1-33.28-15.140572l91.428571-201.142857a18.285714 18.285714 0 0 1 33.28 0l91.428571 201.142857a18.285714 18.285714 0 1 1-33.28 15.140572L558.409143 658.285714z m-16.64-36.571428L512 556.178286 482.230857 621.714286h59.538286zM329.142857 128h475.428572a18.285714 18.285714 0 1 1 0 36.571429H329.142857a91.428571 91.428571 0 0 0 0 182.857142h475.428572a18.285714 18.285714 0 0 1 18.285714 18.285715v512a18.285714 18.285714 0 0 1-18.285714 18.285714H329.142857A128 128 0 0 1 201.142857 768V256A128 128 0 0 1 329.142857 128zM237.714286 345.6V768A91.428571 91.428571 0 0 0 329.142857 859.428571h457.142857v-475.428571H329.142857a127.634286 127.634286 0 0 1-91.428571-38.4zM329.142857 274.285714a18.285714 18.285714 0 0 1 0-36.571428h438.857143a18.285714 18.285714 0 1 1 0 36.571428H329.142857z" p-id="1498"/></svg> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200" class="icon" p-id="1497" t="1554868028575" version="1.1" viewBox="0 0 1024 1024"><defs><style type="text/css"/></defs><path fill="#000" d="M558.409143 658.285714h-92.818286l-28.379428 62.427429a18.285714 18.285714 0 1 1-33.28-15.140572l91.428571-201.142857a18.285714 18.285714 0 0 1 33.28 0l91.428571 201.142857a18.285714 18.285714 0 1 1-33.28 15.140572L558.409143 658.285714z m-16.64-36.571428L512 556.178286 482.230857 621.714286h59.538286zM329.142857 128h475.428572a18.285714 18.285714 0 1 1 0 36.571429H329.142857a91.428571 91.428571 0 0 0 0 182.857142h475.428572a18.285714 18.285714 0 0 1 18.285714 18.285715v512a18.285714 18.285714 0 0 1-18.285714 18.285714H329.142857A128 128 0 0 1 201.142857 768V256A128 128 0 0 1 329.142857 128zM237.714286 345.6V768A91.428571 91.428571 0 0 0 329.142857 859.428571h457.142857v-475.428571H329.142857a127.634286 127.634286 0 0 1-91.428571-38.4zM329.142857 274.285714a18.285714 18.285714 0 0 1 0-36.571428h438.857143a18.285714 18.285714 0 1 1 0 36.571428H329.142857z" p-id="1498"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572170050760" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5149" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400"><defs><style type="text/css"></style></defs><path d="M219.428571 658.285714q0-30.285714-21.428571-51.714285T146.285714 585.142857t-51.714285 21.428572T73.142857 658.285714t21.428572 51.714286T146.285714 731.428571t51.714286-21.428571T219.428571 658.285714z m109.714286-256q0-30.285714-21.428571-51.714285T256 329.142857t-51.714286 21.428572T182.857143 402.285714t21.428571 51.714286T256 475.428571t51.714286-21.428571T329.142857 402.285714z m244.571429 274.857143l57.714285-218.285714q3.428571-14.857143-4.285714-27.714286T605.142857 414.285714t-27.428571 3.714286-17.142857 22.571429l-57.714286 218.285714q-34.285714 2.857143-61.142857 24.857143t-36 56.285714q-11.428571 44 11.428571 83.428571t66.857143 50.857143 83.428571-11.428571 50.857143-66.857143q9.142857-34.285714-3.428571-66.857143t-41.142857-52z m377.142857-18.857143q0-30.285714-21.428572-51.714285T877.714286 585.142857t-51.714286 21.428572-21.428571 51.714285 21.428571 51.714286 51.714286 21.428571 51.714285-21.428571 21.428572-51.714286z m-365.714286-365.714285q0-30.285714-21.428571-51.714286T512 219.428571t-51.714286 21.428572T438.857143 292.571429t21.428571 51.714285T512 365.714286t51.714286-21.428572T585.142857 292.571429z m256 109.714285q0-30.285714-21.428571-51.714285T768 329.142857t-51.714286 21.428572T694.857143 402.285714t21.428571 51.714286T768 475.428571t51.714286-21.428571T841.142857 402.285714z m182.857143 256q0 149.142857-80.571429 276-10.857143 16.571429-30.857142 16.571429H111.428571q-20 0-30.857142-16.571429Q0 808 0 658.285714q0-104 40.571429-198.857143t109.142857-163.428571 163.428571-109.142857 198.857143-40.571429 198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z" p-id="5150" fill="#bfbfbf"></path></svg> <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1572170050760" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5149" xmlns:xlink="http://www.w3.org/1999/xlink" width="400" height="400"><defs><style type="text/css"></style></defs><path d="M219.428571 658.285714q0-30.285714-21.428571-51.714285T146.285714 585.142857t-51.714285 21.428572T73.142857 658.285714t21.428572 51.714286T146.285714 731.428571t51.714286-21.428571T219.428571 658.285714z m109.714286-256q0-30.285714-21.428571-51.714285T256 329.142857t-51.714286 21.428572T182.857143 402.285714t21.428571 51.714286T256 475.428571t51.714286-21.428571T329.142857 402.285714z m244.571429 274.857143l57.714285-218.285714q3.428571-14.857143-4.285714-27.714286T605.142857 414.285714t-27.428571 3.714286-17.142857 22.571429l-57.714286 218.285714q-34.285714 2.857143-61.142857 24.857143t-36 56.285714q-11.428571 44 11.428571 83.428571t66.857143 50.857143 83.428571-11.428571 50.857143-66.857143q9.142857-34.285714-3.428571-66.857143t-41.142857-52z m377.142857-18.857143q0-30.285714-21.428572-51.714285T877.714286 585.142857t-51.714286 21.428572-21.428571 51.714285 21.428571 51.714286 51.714286 21.428571 51.714285-21.428571 21.428572-51.714286z m-365.714286-365.714285q0-30.285714-21.428571-51.714286T512 219.428571t-51.714286 21.428572T438.857143 292.571429t21.428571 51.714285T512 365.714286t51.714286-21.428572T585.142857 292.571429z m256 109.714285q0-30.285714-21.428571-51.714285T768 329.142857t-51.714286 21.428572T694.857143 402.285714t21.428571 51.714286T768 475.428571t51.714286-21.428571T841.142857 402.285714z m182.857143 256q0 149.142857-80.571429 276-10.857143 16.571429-30.857142 16.571429H111.428571q-20 0-30.857142-16.571429Q0 808 0 658.285714q0-104 40.571429-198.857143t109.142857-163.428571 163.428571-109.142857 198.857143-40.571429 198.857143 40.571429 163.428571 109.142857 109.142857 163.428571 40.571429 198.857143z" p-id="5150" fill="#000"></path></svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1649727721107" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21653" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M554.666667 896v85.333333h-85.333334v-85.333333h-341.333333A42.666667 42.666667 0 0 1 85.333333 853.333333V256h853.333334V853.333333a42.666667 42.666667 0 0 1-42.666667 42.666667h-341.333333zM341.333333 426.666667a128 128 0 1 0 128 128H341.333333V426.666667z m213.333334 0V512h256V426.666667h-256z m0 170.666666V682.666667h256v-85.333334h-256zM85.333333 128h853.333334v85.333333h-853.333334v-85.333333z" p-id="21654" fill="#bfbfbf"></path></svg> <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1649727721107" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="21653" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M554.666667 896v85.333333h-85.333334v-85.333333h-341.333333A42.666667 42.666667 0 0 1 85.333333 853.333333V256h853.333334V853.333333a42.666667 42.666667 0 0 1-42.666667 42.666667h-341.333333zM341.333333 426.666667a128 128 0 1 0 128 128H341.333333V426.666667z m213.333334 0V512h256V426.666667h-256z m0 170.666666V682.666667h256v-85.333334h-256zM85.333333 128h853.333334v85.333333h-853.333334v-85.333333z" p-id="21654" fill="#000"></path></svg>

Before

Width:  |  Height:  |  Size: 823 B

After

Width:  |  Height:  |  Size: 821 B

View File

@ -1 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574576420335" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9530" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M915.94 827.89h-91.42a12.5 12.5 0 0 1 0-25h78.92v-535h-78.92a12.5 12.5 0 1 1 0-25h91.42a12.5 12.5 0 0 1 12.5 12.5v560a12.5 12.5 0 0 1-12.5 12.5z" fill="#cdcdcd" p-id="9531"></path><path d="M915.94 547.91h-91.42a12.5 12.5 0 0 1 0-25h91.42a12.5 12.5 0 0 1 0 25z" fill="#cdcdcd" p-id="9532"></path><path d="M774.6 231.51a90.63 90.63 0 0 1-90.37 90.37H215.94a90.62 90.62 0 0 1-81.18-50.81 88.92 88.92 0 0 0 15.4 1.33h468.29a90.26 90.26 0 0 0 81.18-129.92c42.44 7.35 74.97 44.57 74.97 89.03z" fill="#cdcdcd" p-id="9533"></path><path d="M684.23 334.38H215.94a102.23 102.23 0 0 1-55.12-16.11 103.66 103.66 0 0 1-37.28-41.69 12.5 12.5 0 0 1 13.38-17.82 76.71 76.71 0 0 0 13.24 1.14h468.29a77.76 77.76 0 0 0 70-111.91 12.5 12.5 0 0 1 13.35-17.83 103.18 103.18 0 0 1 85.3 101.35 103.13 103.13 0 0 1-102.87 102.87zM159.46 284.9a78.31 78.31 0 0 0 56.48 24.48h468.29a77.75 77.75 0 0 0 59.28-128.2 78.73 78.73 0 0 0-24.14-19.08 103.06 103.06 0 0 1-100.92 122.8z" fill="#cdcdcd" p-id="9534"></path><path d="M618.45 284.91H150.16a102.86 102.86 0 1 1 0-205.73h468.29a102.86 102.86 0 0 1 0 205.73zM150.16 104.18a77.86 77.86 0 1 0 0 155.73h468.29a77.86 77.86 0 0 0 0-155.73z" fill="#cdcdcd" p-id="9535"></path><path d="M176.2 235.43A53.39 53.39 0 1 1 229.59 182a53.45 53.45 0 0 1-53.39 53.43z m0-81.78A28.39 28.39 0 1 0 204.59 182a28.43 28.43 0 0 0-28.39-28.35zM551.12 194.54H423a12.5 12.5 0 0 1 0-25h128.12a12.5 12.5 0 0 1 0 25z" fill="#cdcdcd" p-id="9536"></path><path d="M774.6 534.74a90.63 90.63 0 0 1-90.37 90.37H215.94a90.62 90.62 0 0 1-81.18-50.81 88.92 88.92 0 0 0 15.4 1.33h468.29a90.26 90.26 0 0 0 81.18-129.92c42.44 7.35 74.97 44.57 74.97 89.03z" fill="#cdcdcd" p-id="9537"></path><path d="M684.23 637.61H215.94a102.23 102.23 0 0 1-55.12-16.11 103.66 103.66 0 0 1-37.28-41.69A12.5 12.5 0 0 1 136.92 562a76.71 76.71 0 0 0 13.24 1.14h468.29a77.76 77.76 0 0 0 70-111.91 12.5 12.5 0 0 1 13.35-17.83 103.18 103.18 0 0 1 85.3 101.34 103.13 103.13 0 0 1-102.87 102.87z m-524.77-49.48a78.31 78.31 0 0 0 56.48 24.48h468.29a77.75 77.75 0 0 0 59.28-128.2 78.73 78.73 0 0 0-24.14-19.08 103.06 103.06 0 0 1-100.92 122.8z" fill="#cdcdcd" p-id="9538"></path><path d="M618.45 588.13H150.16a102.86 102.86 0 1 1 0-205.73h468.29a102.86 102.86 0 0 1 0 205.73zM150.16 407.4a77.86 77.86 0 1 0 0 155.73h468.29a77.86 77.86 0 0 0 0-155.73z" fill="#cdcdcd" p-id="9539"></path><path d="M176.2 538.66a53.39 53.39 0 1 1 53.39-53.39 53.45 53.45 0 0 1-53.39 53.39z m0-81.78a28.39 28.39 0 1 0 28.39 28.39 28.43 28.43 0 0 0-28.39-28.39zM551.12 497.77H423a12.5 12.5 0 0 1 0-25h128.12a12.5 12.5 0 0 1 0 25z" fill="#cdcdcd" p-id="9540"></path><path d="M774.6 869.33a90.63 90.63 0 0 1-90.37 90.37H215.94a90.62 90.62 0 0 1-81.18-50.81 88.92 88.92 0 0 0 15.4 1.33h468.29a90.26 90.26 0 0 0 81.18-129.92c42.44 7.35 74.97 44.57 74.97 89.03z" fill="#cdcdcd" p-id="9541"></path><path d="M684.23 972.2H215.94a102.23 102.23 0 0 1-55.12-16.11 103.66 103.66 0 0 1-37.28-41.69 12.5 12.5 0 0 1 13.38-17.82 76.71 76.71 0 0 0 13.24 1.14h468.29a77.76 77.76 0 0 0 70-111.91A12.5 12.5 0 0 1 701.76 768a102.73 102.73 0 0 1 55.14 174 102.16 102.16 0 0 1-72.67 30.2z m-524.77-49.48a78.31 78.31 0 0 0 56.48 24.48h468.29A77.75 77.75 0 0 0 743.51 819a78.71 78.71 0 0 0-24.14-19.08 103.06 103.06 0 0 1-100.92 122.8z" fill="#cdcdcd" p-id="9542"></path><path d="M618.45 922.72H150.16a102.86 102.86 0 1 1 0-205.73h468.29a102.86 102.86 0 0 1 0 205.73zM150.16 742a77.86 77.86 0 1 0 0 155.73h468.29a77.86 77.86 0 1 0 0-155.73z" fill="#cdcdcd" p-id="9543"></path><path d="M176.2 873.25a53.39 53.39 0 1 1 53.39-53.39 53.45 53.45 0 0 1-53.39 53.39z m0-81.78a28.39 28.39 0 1 0 28.39 28.39 28.42 28.42 0 0 0-28.39-28.4zM551.12 832.35H423a12.5 12.5 0 0 1 0-25h128.12a12.5 12.5 0 0 1 0 25z" fill="#cdcdcd" p-id="9544"></path></svg> <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1574576420335" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9530" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M915.94 827.89h-91.42a12.5 12.5 0 0 1 0-25h78.92v-535h-78.92a12.5 12.5 0 1 1 0-25h91.42a12.5 12.5 0 0 1 12.5 12.5v560a12.5 12.5 0 0 1-12.5 12.5z" fill="#000" p-id="9531"></path><path d="M915.94 547.91h-91.42a12.5 12.5 0 0 1 0-25h91.42a12.5 12.5 0 0 1 0 25z" fill="#000" p-id="9532"></path><path d="M774.6 231.51a90.63 90.63 0 0 1-90.37 90.37H215.94a90.62 90.62 0 0 1-81.18-50.81 88.92 88.92 0 0 0 15.4 1.33h468.29a90.26 90.26 0 0 0 81.18-129.92c42.44 7.35 74.97 44.57 74.97 89.03z" fill="#000" p-id="9533"></path><path d="M684.23 334.38H215.94a102.23 102.23 0 0 1-55.12-16.11 103.66 103.66 0 0 1-37.28-41.69 12.5 12.5 0 0 1 13.38-17.82 76.71 76.71 0 0 0 13.24 1.14h468.29a77.76 77.76 0 0 0 70-111.91 12.5 12.5 0 0 1 13.35-17.83 103.18 103.18 0 0 1 85.3 101.35 103.13 103.13 0 0 1-102.87 102.87zM159.46 284.9a78.31 78.31 0 0 0 56.48 24.48h468.29a77.75 77.75 0 0 0 59.28-128.2 78.73 78.73 0 0 0-24.14-19.08 103.06 103.06 0 0 1-100.92 122.8z" fill="#000" p-id="9534"></path><path d="M618.45 284.91H150.16a102.86 102.86 0 1 1 0-205.73h468.29a102.86 102.86 0 0 1 0 205.73zM150.16 104.18a77.86 77.86 0 1 0 0 155.73h468.29a77.86 77.86 0 0 0 0-155.73z" fill="#000" p-id="9535"></path><path d="M176.2 235.43A53.39 53.39 0 1 1 229.59 182a53.45 53.45 0 0 1-53.39 53.43z m0-81.78A28.39 28.39 0 1 0 204.59 182a28.43 28.43 0 0 0-28.39-28.35zM551.12 194.54H423a12.5 12.5 0 0 1 0-25h128.12a12.5 12.5 0 0 1 0 25z" fill="#000" p-id="9536"></path><path d="M774.6 534.74a90.63 90.63 0 0 1-90.37 90.37H215.94a90.62 90.62 0 0 1-81.18-50.81 88.92 88.92 0 0 0 15.4 1.33h468.29a90.26 90.26 0 0 0 81.18-129.92c42.44 7.35 74.97 44.57 74.97 89.03z" fill="#000" p-id="9537"></path><path d="M684.23 637.61H215.94a102.23 102.23 0 0 1-55.12-16.11 103.66 103.66 0 0 1-37.28-41.69A12.5 12.5 0 0 1 136.92 562a76.71 76.71 0 0 0 13.24 1.14h468.29a77.76 77.76 0 0 0 70-111.91 12.5 12.5 0 0 1 13.35-17.83 103.18 103.18 0 0 1 85.3 101.34 103.13 103.13 0 0 1-102.87 102.87z m-524.77-49.48a78.31 78.31 0 0 0 56.48 24.48h468.29a77.75 77.75 0 0 0 59.28-128.2 78.73 78.73 0 0 0-24.14-19.08 103.06 103.06 0 0 1-100.92 122.8z" fill="#000" p-id="9538"></path><path d="M618.45 588.13H150.16a102.86 102.86 0 1 1 0-205.73h468.29a102.86 102.86 0 0 1 0 205.73zM150.16 407.4a77.86 77.86 0 1 0 0 155.73h468.29a77.86 77.86 0 0 0 0-155.73z" fill="#000" p-id="9539"></path><path d="M176.2 538.66a53.39 53.39 0 1 1 53.39-53.39 53.45 53.45 0 0 1-53.39 53.39z m0-81.78a28.39 28.39 0 1 0 28.39 28.39 28.43 28.43 0 0 0-28.39-28.39zM551.12 497.77H423a12.5 12.5 0 0 1 0-25h128.12a12.5 12.5 0 0 1 0 25z" fill="#000" p-id="9540"></path><path d="M774.6 869.33a90.63 90.63 0 0 1-90.37 90.37H215.94a90.62 90.62 0 0 1-81.18-50.81 88.92 88.92 0 0 0 15.4 1.33h468.29a90.26 90.26 0 0 0 81.18-129.92c42.44 7.35 74.97 44.57 74.97 89.03z" fill="#000" p-id="9541"></path><path d="M684.23 972.2H215.94a102.23 102.23 0 0 1-55.12-16.11 103.66 103.66 0 0 1-37.28-41.69 12.5 12.5 0 0 1 13.38-17.82 76.71 76.71 0 0 0 13.24 1.14h468.29a77.76 77.76 0 0 0 70-111.91A12.5 12.5 0 0 1 701.76 768a102.73 102.73 0 0 1 55.14 174 102.16 102.16 0 0 1-72.67 30.2z m-524.77-49.48a78.31 78.31 0 0 0 56.48 24.48h468.29A77.75 77.75 0 0 0 743.51 819a78.71 78.71 0 0 0-24.14-19.08 103.06 103.06 0 0 1-100.92 122.8z" fill="#000" p-id="9542"></path><path d="M618.45 922.72H150.16a102.86 102.86 0 1 1 0-205.73h468.29a102.86 102.86 0 0 1 0 205.73zM150.16 742a77.86 77.86 0 1 0 0 155.73h468.29a77.86 77.86 0 1 0 0-155.73z" fill="#000" p-id="9543"></path><path d="M176.2 873.25a53.39 53.39 0 1 1 53.39-53.39 53.45 53.45 0 0 1-53.39 53.39z m0-81.78a28.39 28.39 0 1 0 28.39 28.39 28.42 28.42 0 0 0-28.39-28.4zM551.12 832.35H423a12.5 12.5 0 0 1 0-25h128.12a12.5 12.5 0 0 1 0 25z" fill="#000" p-id="9544"></path></svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="211.719" height="200" class="icon" p-id="10233" t="1543827724451" version="1.1" viewBox="0 0 1084 1024"><defs><style type="text/css">@font-face{font-family:rbicon;src:url(chrome-extension://dipiagiiohfljcicegpgffpbnjmgjcnf/fonts/rbicon.woff2) format(&quot;woff2&quot;);font-weight:400;font-style:normal}</style></defs><path fill="#bfbfbf" d="M1080.09609 434.500756c-4.216302-23.731757-26.9241-47.945376-50.595623-53.185637l-17.648235-4.095836a175.940257 175.940257 0 0 1-101.612877-80.832531 177.807476 177.807476 0 0 1-18.732427-129.801867l5.541425-16.684509c7.10748-23.129428-2.108151-54.992624-20.599646-70.833873 0 0-16.624276-14.094495-63.244529-41.199293-46.800951-26.984332-66.858502-34.513443-66.858502-34.513443-22.76803-8.372371-54.631227-0.361397-71.255503 17.407304l-12.287509 13.251234a173.470708 173.470708 0 0 1-120.465769 48.065842A174.13327 174.13327 0 0 1 421.329029 33.590675L409.583617 20.761071C393.140039 2.99237 361.096144-4.898138 338.267881 3.353767c0 0-20.358715 7.529111-67.099434 34.513443-46.800951 27.34573-63.244529 41.440225-63.244529 41.440225-18.431263 15.66055-27.646894 47.222582-20.539413 70.592941l5.059562 16.865207a178.048407 178.048407 0 0 1-18.672194 129.621169 174.916297 174.916297 0 0 1-102.275439 81.073463l-17.045906 3.854904c-23.310126 5.42096-46.258856 29.333415-50.595623 53.185637 0 0-3.854905 21.382674-3.854905 75.712737 0 54.330062 3.854905 75.712736 3.854905 75.712736 4.216302 23.972688 26.9241 47.945376 50.595623 53.185637l16.624276 3.854905a174.253736 174.253736 0 0 1 102.395904 81.314394c23.310126 40.837896 28.911785 87.337683 18.732427 129.801867l-4.81863 16.443578c-7.10748 23.129428 2.108151 54.992624 20.599646 70.833872 0 0 16.624276 14.094495 63.244529 41.199293 46.800951 27.104798 66.918735 34.513443 66.918735 34.513443 22.707798 8.372371 54.631227 0.361397 71.255503-17.407303l11.624947-12.588673a175.096996 175.096996 0 0 1 242.256662 0.120465l11.624947 12.648906c16.383345 17.708468 48.427239 25.598976 71.255503 17.347071 0 0 20.358715-7.529111 67.159666-34.513443 46.740719-27.104798 63.124063-41.199293 63.124064-41.199293 18.491496-15.600317 27.707127-47.463513 20.599646-70.833873l-5.059562-17.106139a176.723284 176.723284 0 0 1 18.672194-129.139305 176.060722 176.060722 0 0 1 102.395904-81.314394l16.68451-3.854905c23.310126-5.42096 46.258856-29.333415 50.595623-53.185637 0 0 3.854905-21.382674 3.854904-75.712737-0.240932-54.330062-4.095836-75.833202-4.095836-75.833202z m-537.819428 293.334149c-119.261112 0-216.175824-97.336342-216.175824-217.621412a216.657687 216.657687 0 0 1 216.236057-217.320249c119.200879 0 216.115591 97.276109 216.11559 217.56118-0.240932 120.044139-96.974945 217.320248-216.175823 217.320249z" p-id="10234"/></svg> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="211.719" height="200" class="icon" p-id="10233" t="1543827724451" version="1.1" viewBox="0 0 1084 1024"><defs><style type="text/css">@font-face{font-family:rbicon;src:url(chrome-extension://dipiagiiohfljcicegpgffpbnjmgjcnf/fonts/rbicon.woff2) format(&quot;woff2&quot;);font-weight:400;font-style:normal}</style></defs><path fill="#000" d="M1080.09609 434.500756c-4.216302-23.731757-26.9241-47.945376-50.595623-53.185637l-17.648235-4.095836a175.940257 175.940257 0 0 1-101.612877-80.832531 177.807476 177.807476 0 0 1-18.732427-129.801867l5.541425-16.684509c7.10748-23.129428-2.108151-54.992624-20.599646-70.833873 0 0-16.624276-14.094495-63.244529-41.199293-46.800951-26.984332-66.858502-34.513443-66.858502-34.513443-22.76803-8.372371-54.631227-0.361397-71.255503 17.407304l-12.287509 13.251234a173.470708 173.470708 0 0 1-120.465769 48.065842A174.13327 174.13327 0 0 1 421.329029 33.590675L409.583617 20.761071C393.140039 2.99237 361.096144-4.898138 338.267881 3.353767c0 0-20.358715 7.529111-67.099434 34.513443-46.800951 27.34573-63.244529 41.440225-63.244529 41.440225-18.431263 15.66055-27.646894 47.222582-20.539413 70.592941l5.059562 16.865207a178.048407 178.048407 0 0 1-18.672194 129.621169 174.916297 174.916297 0 0 1-102.275439 81.073463l-17.045906 3.854904c-23.310126 5.42096-46.258856 29.333415-50.595623 53.185637 0 0-3.854905 21.382674-3.854905 75.712737 0 54.330062 3.854905 75.712736 3.854905 75.712736 4.216302 23.972688 26.9241 47.945376 50.595623 53.185637l16.624276 3.854905a174.253736 174.253736 0 0 1 102.395904 81.314394c23.310126 40.837896 28.911785 87.337683 18.732427 129.801867l-4.81863 16.443578c-7.10748 23.129428 2.108151 54.992624 20.599646 70.833872 0 0 16.624276 14.094495 63.244529 41.199293 46.800951 27.104798 66.918735 34.513443 66.918735 34.513443 22.707798 8.372371 54.631227 0.361397 71.255503-17.407303l11.624947-12.588673a175.096996 175.096996 0 0 1 242.256662 0.120465l11.624947 12.648906c16.383345 17.708468 48.427239 25.598976 71.255503 17.347071 0 0 20.358715-7.529111 67.159666-34.513443 46.740719-27.104798 63.124063-41.199293 63.124064-41.199293 18.491496-15.600317 27.707127-47.463513 20.599646-70.833873l-5.059562-17.106139a176.723284 176.723284 0 0 1 18.672194-129.139305 176.060722 176.060722 0 0 1 102.395904-81.314394l16.68451-3.854905c23.310126-5.42096 46.258856-29.333415 50.595623-53.185637 0 0 3.854905-21.382674 3.854904-75.712737-0.240932-54.330062-4.095836-75.833202-4.095836-75.833202z m-537.819428 293.334149c-119.261112 0-216.175824-97.336342-216.175824-217.621412a216.657687 216.657687 0 0 1 216.236057-217.320249c119.200879 0 216.115591 97.276109 216.11559 217.56118-0.240932 120.044139-96.974945 217.320248-216.175823 217.320249z" p-id="10234"/></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
src/assets/images/data.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -23,8 +23,8 @@
</template> </template>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click"> <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper"> <div>
<img :src="user.avatarName ? baseApi + '/system/avatar/' + user.avatarName : Avatar" class="user-avatar"> <el-avatar :style="`background:${extractColorByName(user.nickName)}`">{{ extractName(user.nickName) }}</el-avatar>
<i class="el-icon-caret-bottom" /> <i class="el-icon-caret-bottom" />
</div> </div>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
@ -110,6 +110,17 @@ export default {
this.$store.dispatch('LogOut').then(() => { this.$store.dispatch('LogOut').then(() => {
location.reload() location.reload()
}) })
},
extractColorByName(name) {
var temp = []
temp.push('#')
for (let index = 0; index < name.length; index++) {
temp.push(parseInt(name[index].charCodeAt(0), 10).toString(16))
}
return temp.slice(0, 5).join('').slice(0, 4)
},
extractName(name) {
return name.slice(0, 1)
} }
} }
} }

View File

@ -14,7 +14,7 @@
</template> </template>
<script> <script>
import Logo from '@/assets/images/logo.png' import Logo from '@/assets/images/data.png'
export default { export default {
name: 'SidebarLogo', name: 'SidebarLogo',
props: { props: {
@ -25,7 +25,7 @@ export default {
}, },
data() { data() {
return { return {
title: 'AllData科学护城河', title: '数据标准符合性检测工具',
logo: Logo logo: Logo
} }
} }

View File

@ -3,6 +3,7 @@ import Vue from 'vue'
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
import 'normalize.css/normalize.css' import 'normalize.css/normalize.css'
import './styles/datastyle.css'
import Element from 'element-ui' import Element from 'element-ui'

View File

@ -2,7 +2,7 @@ module.exports = {
/** /**
* @description 网站标题 * @description 网站标题
*/ */
title: 'AllData科学护城河', title: '数据标准符合性检测工具',
/** /**
* @description 是否显示 tagsView * @description 是否显示 tagsView
*/ */

426
src/styles/datastyle.css Normal file
View File

@ -0,0 +1,426 @@
/*sidebar-container*/
body #app .sidebar-container{
background: #f5f6fd;
border-right: 1px solid #E5E6EB;
}
body .sidebar-logo-container {
padding: 8px 0;
height: 66px !important;
}
body .sidebar-logo-container .sidebar-logo-link .sidebar-title{
color: #1D2129 !important;
font-size: 16px !important;
}
body #app .sidebar-container .el-scrollbar__view>.el-menu{
padding: 0 8px;
}
body #app .sidebar-container .el-scrollbar__view>.el-menu .menu-wrapper+.menu-wrapper{
margin-top: 4px;
}
body #app .sidebar-container .el-menu{
background: #f5f6fd !important;
}
body #app .sidebar-container .el-submenu .el-menu-item {
height: 40px;
line-height: 40px;
}
body #app .sidebar-container .el-menu .el-menu-item{
background: #f5f6fd !important;
color: #4E5969 !important;
height: 40px;
line-height: 40px;
}
body #app .sidebar-container .el-submenu>.el-submenu__title .svg-icon{
fill:currentColor;
color:#4E5969;
}
body #app .sidebar-container .el-menu .el-menu .el-menu-item .svg-icon{
display: none;
}
body #app .sidebar-container .el-menu .el-menu .el-menu-item .svg-icon+span{
margin-left: 10px;
}
body #app .sidebar-container .submenu-title-noDropdown:hover,
body #app .sidebar-container .el-submenu__title:hover {
background-color: #f5f6fd !important;
}
body #app .sidebar-container .el-submenu>.el-submenu__title{
height: 40px;
line-height: 40px;
background: #f5f6fd !important;
color: #4E5969 !important;
}
body #app .sidebar-container .is-active>.el-submenu__title{
color: #233A82;
}
body #app .sidebar-container .nest-menu .el-submenu>.el-submenu__title:hover,
body #app .sidebar-container .el-submenu .el-menu-item:hover {
background: #f5f6fd !important;
color: #4E5969 !important;
}
body #app .sidebar-container .el-submenu .el-menu-item.is-active,
body #app .sidebar-container .el-submenu .el-menu-item.is-active:hover{
background: #E9ECF4 !important;
color: #233A82 !important;
font-weight: bold;
}
body #app .hideSidebar .submenu-title-noDropdown .el-tooltip .svg-icon,
body #app .hideSidebar .el-submenu>.el-submenu__title .svg-icon{
margin-left: auto;
margin-right: auto;
}
body #app .hideSidebar .submenu-title-noDropdown .el-tooltip,
body #app .hideSidebar .el-submenu>.el-submenu__title{
text-align: center;
}
body #app .openSidebar .sidebar-logo-container .sidebar-logo-link .sidebar-logo{
display: none;
}
body #app .hideSidebar .sidebar-logo-container .sidebar-logo-link .sidebar-logo{
display: block;
margin: 0 auto;
}
/*main-container*/
/*fixed-header*/
body .main-container .fixed-header{
z-index: 1002 !important;
}
body .main-container .fixed-header .navbar .hamburger-container{
padding: 0 !important;
text-align: center;
line-height: 40px;
background: #f5f6fd;
color: #4E5969;
position: fixed;
bottom: 0;
left: 150px;
width: 40px;
height: 40px;
float: inherit;
transition:transform .28s;
}
body .hideSidebar .main-container .fixed-header .navbar .hamburger-container{
left: 7px;
}
body .main-container .fixed-header .navbar{
box-shadow: none !important;
border-bottom: 1px solid #E5E6EB;
padding: 0 20px;
}
body .main-container .fixed-header .navbar .app-breadcrumb.el-breadcrumb{
margin-left: 0;
}
body .main-container .fixed-header .navbar .app-breadcrumb.el-breadcrumb .el-breadcrumb__item .el-breadcrumb__inner.is-link,
body .main-container .fixed-header .navbar .app-breadcrumb.el-breadcrumb .el-breadcrumb__item .el-breadcrumb__inner a{
color: #4E5969 !important;
}
body .main-container .fixed-header .navbar .app-breadcrumb.el-breadcrumb .el-breadcrumb__item .no-redirect{
color: #4E5969 !important;
}
body .main-container .fixed-header .navbar .app-breadcrumb.el-breadcrumb .el-breadcrumb__item:last-child .no-redirect{
color: #1D2129 !important;
font-weight: bold;
}
body .main-container .fixed-header .tags-view-container{
box-shadow: none !important;
border-bottom: 1px solid #E5E6EB;
background: #F7F8FA;
height: 40px;
}
body .main-container .fixed-header .tags-view-container .tags-view-wrapper .tags-view-item{
background: transparent;
border-color: transparent;
color: #4E5969;
margin-top: 6px;
padding: 0 5px 0 16px;
margin-left: 6px;
}
body .main-container .fixed-header .tags-view-container .tags-view-wrapper .tags-view-item:first-of-type {
margin-left: 20px;
padding: 0 16px;
}
body .main-container .fixed-header .tags-view-container .tags-view-wrapper .tags-view-item.active{
background-color: #fff;
color: #233a82;
border-color: #fff;
font-weight: bold;
}
body .main-container .fixed-header .tags-view-container .tags-view-wrapper .tags-view-item.active::before{
content: none;
}
body .main-container .fixed-header .tags-view-container .tags-view-wrapper .tags-view-item .el-icon-close{
background: transparent !important;
font-size: 16px;
}
body .main-container .fixed-header .tags-view-container .tags-view-wrapper .tags-view-item .el-icon-close:hover,
body .main-container .fixed-header .tags-view-container .tags-view-wrapper .tags-view-item.active .el-icon-close:hover{
color: #233a82;
font-weight: bold;
}
/*app-main*/
body .hasTagsView .fixed-header+.app-main{
padding-top: 90px !important;
}
body .hasTagsView .app-main{
min-height: calc(100vh - 90px) !important;
}
body .hasTagsView .app-main .el-card{
border: 0;
border-radius: 0;
}
body .hasTagsView .app-main .el-card.box-card.is-always-shadow{
box-shadow: none;
}
body .hasTagsView .app-main .el-card .el-card__header{
border-bottom: 1px solid #E5E6EB;
padding: 10px 20px;
}
body .hasTagsView .app-main .el-card .el-card__header>.clearfix>span{
line-height: 29px;
font-weight: bold;
color: #1D2129 ;
}
body .hasTagsView .app-main .el-card .el-card__body{
padding: 20px;
}
body .hasTagsView .app-main .dashboard-editor-container{
padding: 20px;
background-color: #f7f8fa;
}
body .hasTagsView .app-main .dashboard-editor-container .panel-group:first-child,
body .hasTagsView .app-main .dashboard-editor-container .github-corner+.panel-group{
margin-top: 0;
}
body .hasTagsView .app-main .dashboard-editor-container .github-corner{
display: none;
}
/*.app-container*/
body .hasTagsView .app-main>.app-container{
padding: 0;
}
body .hasTagsView .app-main>.app-container>.el-row{
margin-left: 0 !important;
margin-right: 0 !important;
}
body .hasTagsView .app-main>.app-container>.el-row>.el-col{
padding-left: 0 !important;
padding-right: 0 !important;
}
body .hasTagsView .app-main>.app-container>.el-row>.el-col.el-col-6{
width: 248px;
}
body .hasTagsView .app-main>.app-container>.el-row>.el-col.el-col-6+.el-col-18{
width: calc(100% - 248px);
}
body .hasTagsView .app-main>.app-container>.el-row>.el-col.el-col-6>.el-card>.el-card__body{
height: calc(100vh - 90px);
overflow: auto;
border-right: 1px solid #e5e6eb;
}
/*el-button*/
body .el-button,
body .el-button:focus{
color:#4E5969;
background-color:#fff;
border-color:#E5E6EB;
}
body .el-button:hover{
color:#4E5969;
background-color:#fff;
border-color:#C9CDD4;
}
body .el-button:active{
color:#4E5969;
background-color:#fff;
border-color:#86909C;
}
body .el-button.is-disabled,
body .el-button.is-disabled:active,
body .el-button.is-disabled:focus,
body .el-button.is-disabled:hover {
color: #C9CDD4;
background-color: #fff;
border-color: #E5E6EB;
}
body .el-button--primary,
body .el-button--primary:focus{
color:#fff;
background-color:#233A82;
border-color:#233A82;
}
body .el-button--primary:hover{
color:#fff;
background:#2B50C4;
border-color:#2B50C4;
}
body .el-button--primary:active,
body .el-button--primary.is-active{
color:#fff;
background:#042281;
border-color:#042281;
}
body .el-button--primary.is-disabled,
body .el-button--primary.is-disabled:active,
body .el-button--primary.is-disabled:focus,
body .el-button--primary.is-disabled:hover {
color: #fff;
background-color: #93A7E4;
border-color: #93A7E4;
}
body .el-button--text,
body .el-button--text:focus{
color: #233A82;
background-color: transparent;
border: 0;
padding: 0 !important;
width: auto !important;
}
body .el-button--text:hover{
color:#2B50C4;
background-color:transparent;
}
body .el-button--text:active{
color:#042281;
background-color:transparent;
}
body .el-button--text.is-disabled,
body .el-button--text.is-disabled:active,
body .el-button--text.is-disabled:focus,
body .el-button--text.is-disabled:hover {
color:#93A7E4;
background-color:transparent;
}
/*el-tag*/
body .el-tag{
background: #E8F7FF;
border-color: #E8F7FF;
color: #3491fa;
}
body .el-tag.el-tag--success{
background: #E8FFEA;
border-color: #E8FFEA;
color: #00b42a;
}
body .el-tag.el-tag--warning{
background: #FFF7E8;
border-color: #FFF7E8;
color: #ff7d00;
}
body .el-tag.el-tag--danger{
background: #FFECE8;
border-color: #FFECE8;
color: #f53f3f;
}
/*el-table*/
body .el-table{
color: #1d2129;
}
body .el-table::before{
content: none;
}
body .el-table-column--selection .cell {
padding-left: 10px;
padding-right: 10px;
}
body .el-table .el-table__cell.is-center {
text-align: left;
}
body .el-table th.el-table__cell{
background: #f2f3f5;
color: #1d2129;
}
body .el-table th.el-table__cell.is-leaf,
body .el-table td.el-table__cell{
border-color: #e5e6eb ;
}
body .el-table--medium .el-table__cell {
padding: 8px 0;
}
body .el-table--border {
border: 0;
}
body .el-table--border .el-table__cell {
border-right: 0;
}
/*el-tree*/
body .el-tree {
color: #1d2129;
}
body .el-tree-node+.el-tree-node{
margin-top: 4px;
}
body .el-tree-node__content{
height: 34px;
}
body .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
background-color: #f2f3f5;
color: #233A82;
font-weight: bold;
}
body .el-tree--highlight-current .el-tree-node .el-tree-node__content:hover{
background-color: #f2f3f5;
}
/*el-checkbox*/
body .el-checkbox__inner:hover,
body .el-checkbox__input.is-focus .el-checkbox__inner{
border-color: #233A82;
}
body .el-checkbox__input.is-checked .el-checkbox__inner {
background-color: #233A82;
border-color: #233A82;
}
body .el-checkbox__input.is-checked+.el-checkbox__label {
color: #233A82;
}
/*el-radio*/
body .el-radio__inner:hover,
body .el-.el-radio__input.is-focus .el-.el-radio__inner {
border-color: #233A82;
}
body .el-radio__input.is-checked .el-radio__inner {
border-color: #233A82;
background: #233A82;
}
body .el-radio__input.is-checked+.el-radio__label {
color: #233A82;
}
/*el-input*/
body .el-textarea__inner:focus,
body .el-input__inner:focus{
border-color:#233A82
}
/*el-select-dropdown*/
body .el-select .el-input.is-focus .el-input__inner,
body .el-pagination__sizes .el-input .el-input__inner:hover{
border-color:#233A82
}
body .el-select-dropdown__item.hover,
body .el-select-dropdown__item:hover {
background-color: #f2f3f5;
}
body .el-select-dropdown__item.selected {
color: #233A82;
}
/*el-pager*/
body .el-pager li:hover,
body .el-pager li.active {
color: #233A82;
}
/*el-main-footer*/
body #el-main-footer{
display: none;
}

View File

@ -3,7 +3,7 @@
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-position="left" label-width="0px" class="login-form"> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-position="left" label-width="0px" class="login-form">
<div style="text-align: center;"> <img :src="allDataIcon" alt=""></div> <div style="text-align: center;"> <img :src="allDataIcon" alt=""></div>
<h3 class="title"> <h3 class="title">
AllData科学护城河 数据标准符合性检测工具
</h3> </h3>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号"> <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
@ -49,7 +49,7 @@ import { getCodeImg } from '@/api/login'
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
import qs from 'qs' import qs from 'qs'
import Background from '@/assets/images/background.webp' import Background from '@/assets/images/background.webp'
import allDataIcon from '@/assets/images/avatar.png' import allDataIcon from '@/assets/images/data.png'
export default { export default {
name: 'Login', name: 'Login',

View File

@ -3,14 +3,14 @@
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>{{ title }}</span> <span>{{ title }}</span>
<el-button-group style="float: right;"> <el-button-group style="float: right;">
<el-button v-hasPerm="['masterdata:data:add']" size="mini" icon="el-icon-plus" round :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button> <el-button v-hasPerm="['masterdata:data:add']" type="primary" size="mini" icon="el-icon-finished" :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button>
<el-button size="mini" icon="el-icon-back" round @click="showCard">返回</el-button> <el-button size="mini" icon="el-icon-back" @click="showCard">返回</el-button>
</el-button-group> </el-button-group>
</div> </div>
<div class="body-wrapper"> <div class="body-wrapper">
<el-form ref="form" :model="form" label-width="80px"> <el-form ref="form" :model="form" label-width="80px">
<el-form-item <el-form-item
v-for="(item, index) in columnList" v-for="(item) in columnList"
:key="item.id" :key="item.id"
:label="item.columnComment" :label="item.columnComment"
:prop="item.columnName" :prop="item.columnName"
@ -42,10 +42,10 @@
<template v-if="item.isBindDict === '1' && item.dictList && item.dictList.length > 0"> <template v-if="item.isBindDict === '1' && item.dictList && item.dictList.length > 0">
<el-select v-model.trim="form[item.columnName]" placeholder="请选择"> <el-select v-model.trim="form[item.columnName]" placeholder="请选择">
<el-option <el-option
v-for="item in item.dictList" v-for="dictitem in item.dictList"
:key="item.id" :key="dictitem.id"
:label="item.label" :label="dictitem.label"
:value="item.value" :value="dictitem.value"
/> />
</el-select> </el-select>
</template> </template>
@ -54,9 +54,9 @@
<template v-if="item.isBindDict === '1' && item.dictList && item.dictList.length > 0"> <template v-if="item.isBindDict === '1' && item.dictList && item.dictList.length > 0">
<el-radio-group v-model.trim="form[item.columnName]"> <el-radio-group v-model.trim="form[item.columnName]">
<el-radio <el-radio
v-for="item in item.dictList" v-for="dictitem in item.dictList"
:key="item.id" :key="dictitem.id"
:label="item.value" :label="dictitem.value"
>{{ item.label }}</el-radio> >{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
@ -65,9 +65,9 @@
<template v-if="item.isBindDict === '1' && item.dictList && item.dictList.length > 0"> <template v-if="item.isBindDict === '1' && item.dictList && item.dictList.length > 0">
<el-checkbox-group v-model.trim="form[item.columnName]"> <el-checkbox-group v-model.trim="form[item.columnName]">
<el-checkbox <el-checkbox
v-for="item in item.dictList" v-for="dictitem in item.dictList"
:key="item.id" :key="dictitem.id"
:label="item.value" :label="dictitem.value"
>{{ item.label }}</el-checkbox> >{{ item.label }}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</template> </template>

View File

@ -1,6 +1,7 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<transition name="el-zoom-in-center"> <iframe src="http://192.168.2.58:8000/model/modelChildren" width="100%" height="850px" frameborder="0" />
<!--<transition name="el-zoom-in-center">
<data-model-list v-if="options.showList" @showCard="showCard" /> <data-model-list v-if="options.showList" @showCard="showCard" />
</transition> </transition>
<transition name="el-zoom-in-top"> <transition name="el-zoom-in-top">
@ -11,19 +12,13 @@
</transition> </transition>
<transition name="el-zoom-in-bottom"> <transition name="el-zoom-in-bottom">
<data-model-detail v-if="options.showDetail" :data="options.data" @showCard="showCard" /> <data-model-detail v-if="options.showDetail" :data="options.data" @showCard="showCard" />
</transition> </transition>-->
</div> </div>
</template> </template>
<script> <script>
import DataModelList from './DataModelList'
import DataModelAdd from './DataModelAdd'
import DataModelEdit from './DataModelEdit'
import DataModelDetail from './DataModelDetail'
export default { export default {
name: 'DataModel', name: 'DataModel',
components: { DataModelList, DataModelAdd, DataModelEdit, DataModelDetail },
data() { data() {
return { return {
options: { options: {

View File

@ -1,23 +1,33 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always"> <el-card class="box-card" shadow="always">
<el-row> <div class="body-wrapper">
<el-col :span="24"> <el-form :inline="true" :model="searchForm">
<el-form ref="queryForm" :model="queryParams" :inline="true" class="demo-form-inline"> <el-form-item label="数据库">
<el-form-item label="数据表名"> <el-select v-model="searchForm.sourceId" placeholder="数据库">
<el-input <el-option
v-model="queryParams.tableName" v-for="item in sourceOptions"
placeholder="请输入数据表名" :key="item.id"
clearable :label="item.sourceName"
size="small" :value="item.id"
/> />
</el-select>
</el-form-item>
<el-form-item label="数据表">
<el-select v-model="searchForm.tableId" clearable placeholder="数据表">
<el-option
v-for="item in tableOptions"
:key="item.id"
:label="item.tableComment ? item.tableComment : item.tableName"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="handleQuery">查询</el-button> <el-button type="primary" @click="handleQuery">查询</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-col> <el-divider />
</el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-table <el-table
@ -27,40 +37,65 @@
:max-height="200" :max-height="200"
style="width: 100%; margin: 15px 0;" style="width: 100%; margin: 15px 0;"
> >
<el-table-column prop="subjectArea" label="数据主题域" align="center" show-overflow-tooltip /> <el-table-column prop="CONSTRAINT_NAME" label="映射名称" align="center" show-overflow-tooltip />
<el-table-column prop="mappingName" label="映射名称" align="center" show-overflow-tooltip /> <el-table-column prop="TABLE_NAME" label="源表" align="center" show-overflow-tooltip />
<el-table-column prop="sourceTable" label="源表" align="center" show-overflow-tooltip /> <el-table-column prop="REFERENCED_TABLE_NAME" label="目标表" align="center" show-overflow-tooltip />
<el-table-column prop="targetTable" label="目标表" align="center" show-overflow-tooltip /> <el-table-column prop="COLUMN_NAME" label="映射字段" align="center" show-overflow-tooltip />
</el-table> </el-table>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<div id="chart" style="width: 100%; height: 300px;" /> <div id="chart" style="width: 100%; height: 500px;" />
</el-col> </el-col>
</el-row> </el-row>
</div>
</el-card> </el-card>
</div> </div>
</template> </template>
<script> <script>
import echarts from 'echarts' import echarts from 'echarts'
import { listDataSource } from '@/api/metadata/datasource'
import { listDataTable } from '@/api/metadata/datatable'
import { getMetadatablood } from '@/api/metadata/datasource'
export default { export default {
name: 'DataBlood', name: 'DataBlood',
data: function() { data: function() {
return { return {
searchForm: {
sourceId: '',
tableId: ''
},
queryParams: { queryParams: {
tableName: '' tableName: ''
}, },
sourceOptions: [],
tableOptions: [],
chart: null, chart: null,
tableDataList: [] tableDataList: []
} }
}, },
watch: {
'searchForm.sourceId': {
immediate: true,
// handler:
handler(value) {
if (value) {
//
this.searchForm.tableId = ''
this.getDataTableList(value)
}
}
}
},
created() { created() {
this.getDataSourceList()
}, },
mounted() { mounted() {
this.chart = echarts.init(document.getElementById('chart')) this.chart = echarts.init(document.getElementById('chart'))
this.handleQuery()
}, },
beforeDestroy() { beforeDestroy() {
if (!this.chart) { if (!this.chart) {
@ -70,20 +105,43 @@ export default {
this.chart = null this.chart = null
}, },
methods: { methods: {
getDataSourceList() {
listDataSource().then(response => {
if (response.success) {
this.sourceOptions = response.data
this.searchForm.sourceId = this.sourceOptions[0].id
this.getDataTableList(this.sourceOptions[0].id)
}
})
},
getDataTableList(sourceId) {
const data = {}
data.sourceId = sourceId
listDataTable(data).then(response => {
if (response.success) {
console.log('ddddddd', response)
this.tableOptions = response.data
}
})
},
handleQuery() { handleQuery() {
this.tableDataList = [ getMetadatablood({ sourceId: this.searchForm.sourceId, tableId: this.searchForm.tableId }).then(response => {
{ subjectArea: 'DataCenter', mappingName: 'm_ts_test_table_inc', sourceTable: 'src_test_table', targetTable: 'ts_test_table' }, if (response.success) {
{ subjectArea: 'DataCenter', mappingName: 'm_ts_test_table_inc', sourceTable: 'ts_test_table', targetTable: 'th_test_table' }, const { data } = response
{ subjectArea: 'DataCenter', mappingName: 'm_ts_test_table_inc', sourceTable: 'ts_test_table', targetTable: 'ti_test_table' }, this.tableDataList = data
{ subjectArea: 'DataCenter', mappingName: 'm_ods_test_table_inc', sourceTable: 'ti_test_table', targetTable: 't_test_table' } console.log('datadata', data)
] this.reloadData()
}
})
},
reloadData() {
let data = { nodes: [], links: [] } let data = { nodes: [], links: [] }
const nodes = [] const nodes = []
const links = [] const links = []
const colors = ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4'] const colors = ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4']
this.tableDataList.forEach(item => { this.tableDataList.forEach(item => {
nodes.push({ nodes.push({
name: item.sourceTable, name: item.TABLE_NAME,
itemStyle: { itemStyle: {
normal: { normal: {
color: colors[Math.floor(Math.random() * colors.length)] color: colors[Math.floor(Math.random() * colors.length)]
@ -91,7 +149,7 @@ export default {
} }
}) })
nodes.push({ nodes.push({
name: item.targetTable, name: item.REFERENCED_TABLE_NAME,
itemStyle: { itemStyle: {
normal: { normal: {
color: colors[Math.floor(Math.random() * colors.length)] color: colors[Math.floor(Math.random() * colors.length)]
@ -99,10 +157,10 @@ export default {
} }
}) })
links.push({ links.push({
source: item.sourceTable, source: item.TABLE_NAME,
target: item.targetTable, target: item.REFERENCED_TABLE_NAME,
value: item.mappingName.length, value: item.CONSTRAINT_NAME.length,
mapping: item.mappingName mapping: item.CONSTRAINT_NAME
}) })
}) })
// nodes // nodes

View File

@ -131,6 +131,8 @@ export default {
listDataSource().then(response => { listDataSource().then(response => {
if (response.success) { if (response.success) {
this.sourceOptions = response.data this.sourceOptions = response.data
this.searchForm.sourceId = this.sourceOptions[0].id
this.getDataTableList(this.sourceOptions[0].id)
} }
}) })
}, },
@ -140,6 +142,7 @@ export default {
listDataTable(data).then(response => { listDataTable(data).then(response => {
if (response.success) { if (response.success) {
this.tableOptions = response.data this.tableOptions = response.data
this.searchForm.tableId = this.tableOptions.id
} }
}) })
}, },

View File

@ -2,66 +2,19 @@
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always"> <el-card class="box-card" shadow="always">
<div class="body-wrapper"> <div class="body-wrapper">
<div v-if="searchExecuting"> 待开发~~~
<el-row>
<el-col :span="12" :offset="6">
<el-input v-model="keyword" placeholder="请输入内容">
<el-select slot="prepend" v-model="type" placeholder="请选择" style="width: 100px;" @change="typeSelectChanged">
<el-option label="数据库" value="1" />
<el-option label="数据表" value="2" />
<el-option label="数据元" value="3" />
</el-select>
<el-button slot="append" :disabled="btnEnable" icon="el-icon-search" @click="search" />
</el-input>
</el-col>
</el-row>
<el-divider />
<el-row>
<el-col :span="24">
<source-pane v-if="type === '1'" :data="dataList" />
<table-pane v-if="type === '2'" :data="dataList" />
<column-pane v-if="type === '3'" :data="dataList" />
<el-pagination
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:current-page.sync="queryParams.pageNum"
:page-size.sync="queryParams.pageSize"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</el-col>
</el-row>
</div>
<div v-else>
<div class="search-container">
<el-input v-model="keyword" placeholder="请输入内容">
<el-select slot="prepend" v-model="type" placeholder="请选择" style="width: 100px;">
<el-option label="数据库" value="1" />
<el-option label="数据表" value="2" />
<el-option label="数据元" value="3" />
</el-select>
<el-button slot="append" icon="el-icon-search" :disabled="btnEnable" @click="search" />
</el-input>
</div>
</div>
</div> </div>
</el-card> </el-card>
</div> </div>
</template> </template>
<script> <script>
import SourcePane from './SourcePane'
import TablePane from './TablePane'
import ColumnPane from './ColumnPane'
import { pageDataSource } from '@/api/metadata/datasource' import { pageDataSource } from '@/api/metadata/datasource'
import { pageDataTable } from '@/api/metadata/datatable' import { pageDataTable } from '@/api/metadata/datatable'
import { pageDataColumn } from '@/api/metadata/datacolumn' import { pageDataColumn } from '@/api/metadata/datacolumn'
export default { export default {
name: 'DataSearch', name: 'DataSearch',
components: { SourcePane, TablePane, ColumnPane },
data() { data() {
return { return {
searchExecuting: false, searchExecuting: false,

View File

@ -3,8 +3,10 @@
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>{{ title }}</span> <span>{{ title }}</span>
<el-button-group style="float: right;"> <el-button-group style="float: right;">
<el-button v-if="active == 2" v-hasPerm="['metadata:datasource:add']" size="mini" icon="el-icon-plus" round :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button> <el-button v-if="active == 2" v-hasPerm="['metadata:datasource:add']" type="primary" size="mini" icon="el-icon-finished" :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button>
<el-button size="mini" icon="el-icon-back" round @click="showCard">返回</el-button> <el-button v-if="active == 1" size="mini" type="primary" @click="handleNextStep">下一步</el-button>
<el-button v-if="active == 2" size="mini" type="primary" @click="handleLastStep">上一步</el-button>
<el-button size="mini" icon="el-icon-back" @click="showCard">返回</el-button>
</el-button-group> </el-button-group>
</div> </div>
<div class="body-wrapper"> <div class="body-wrapper">
@ -12,7 +14,7 @@
<el-step title="数据源信息" /> <el-step title="数据源信息" />
<el-step title="连接信息" /> <el-step title="连接信息" />
</el-steps> </el-steps>
<el-form v-if="active == 1" ref="form" :model="form" :rules="rules" label-width="80px"> <el-form v-if="active == 1" ref="form" :model="form" :rules="rules" label-width="120px">
<el-form-item label="数据源类型" prop="dbType"> <el-form-item label="数据源类型" prop="dbType">
<el-select v-model="form.dbType"> <el-select v-model="form.dbType">
<el-option <el-option
@ -62,8 +64,6 @@
<el-button v-hasPerm="['metadata:datasource:connect']" size="mini" type="primary" @click="handleCheckConnection">连通性检测</el-button> <el-button v-hasPerm="['metadata:datasource:connect']" size="mini" type="primary" @click="handleCheckConnection">连通性检测</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-button v-if="active == 1" style="margin-top: 12px;" @click="handleNextStep">下一步</el-button>
<el-button v-if="active == 2" style="margin-top: 12px;" @click="handleLastStep">上一步</el-button>
</div> </div>
</el-card> </el-card>
</template> </template>

View File

@ -4,7 +4,7 @@
<span>{{ title }}</span> <span>{{ title }}</span>
<el-button-group style="float: right;"> <el-button-group style="float: right;">
<el-button v-if="active == 2" v-hasPerm="['metadata:datasource:edit']" size="mini" icon="el-icon-plus" round :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button> <el-button v-if="active == 2" v-hasPerm="['metadata:datasource:edit']" size="mini" icon="el-icon-plus" round :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button>
<el-button size="mini" icon="el-icon-back" round @click="showCard">返回</el-button> <el-button size="mini" icon="el-icon-back" @click="showCard">返回</el-button>
</el-button-group> </el-button-group>
</div> </div>
<div class="body-wrapper"> <div class="body-wrapper">
@ -12,7 +12,7 @@
<el-step title="数据源信息" /> <el-step title="数据源信息" />
<el-step title="连接信息" /> <el-step title="连接信息" />
</el-steps> </el-steps>
<el-form v-if="active == 1" ref="form" :model="form" :rules="rules" label-width="80px"> <el-form v-if="active == 1" ref="form" :model="form" :rules="rules" label-width="120px">
<el-form-item label="数据源类型" prop="dbType"> <el-form-item label="数据源类型" prop="dbType">
<el-select v-model="form.dbType"> <el-select v-model="form.dbType">
<el-option <el-option

View File

@ -102,10 +102,6 @@
</template> </template>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-popover
placement="left"
trigger="click"
>
<el-button <el-button
v-hasPerm="['metadata:datasource:edit']" v-hasPerm="['metadata:datasource:edit']"
size="mini" size="mini"
@ -127,8 +123,6 @@
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
>删除</el-button> >删除</el-button>
<el-button slot="reference">操作</el-button>
</el-popover>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
@ -71,6 +72,7 @@
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
@ -63,6 +64,7 @@
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
@ -102,6 +103,7 @@
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
@ -37,6 +38,7 @@
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
@ -54,6 +55,7 @@
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<div class="head-container"> <div class="head-container">
<Search /> <Search />
<crudOperation> <crudOperation>
@ -47,6 +48,7 @@
</el-dialog> </el-dialog>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<div class="head-container"> <div class="head-container">
<Search /> <Search />
<crudOperation> <crudOperation>
@ -46,6 +47,7 @@
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<div class="head-container"> <div class="head-container">
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
<el-input v-model="query.filter" clearable size="small" placeholder="全表模糊搜索" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" /> <el-input v-model="query.filter" clearable size="small" placeholder="全表模糊搜索" style="width: 200px;" class="filter-item" @keyup.enter.native="crud.toQuery" />
@ -50,6 +51,7 @@
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</el-card>
</div> </div>
</template> </template>

View File

@ -0,0 +1,423 @@
<template>
<el-card class="box-card" shadow="always">
<div slot="header" class="clearfix">
<span>{{ title }}</span>
<el-button-group style="float: right;">
<el-button v-hasPerm="['quality:rule:add']" type="primary" size="mini" icon="el-icon-finished" :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button>
<el-button size="mini" icon="el-icon-back" @click="showCard">返回</el-button>
</el-button-group>
</div>
<div class="body-wrapper">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="规则名称" prop="ruleName">
<el-input v-model="form.ruleName" placeholder="请输入规则名称" />
</el-form-item>
<el-form-item label="核查类型" prop="ruleItemId">
<el-select v-model="form.ruleItemId" placeholder="请选择核查类型" @change="ruleItemSelectChanged">
<el-option
v-for="item in ruleItemOptions"
:key="item.id"
:label="item.itemExplain"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="规则级别" prop="ruleLevelId">
<el-select v-model="form.ruleLevelId" placeholder="请选择规则级别">
<el-option
v-for="item in ruleLevelOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="数据源" prop="ruleSourceId">
<el-select v-model="form.ruleSourceId" placeholder="请选择数据源" @change="sourceSelectChanged">
<el-option
v-for="source in sourceOptions"
:key="source.id"
:label="source.sourceName"
:value="source.id"
/>
</el-select>
</el-form-item>
<el-form-item label="数据表" prop="ruleTableId">
<el-select v-model="form.ruleTableId" placeholder="请选择数据表" @change="tableSelectChanged">
<el-option
v-for="table in tableOptions"
:key="table.id"
:label="table.tableName"
:value="table.id"
>
<span style="float: left">{{ table.tableName + '(' + table.tableComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="核查字段" prop="ruleColumnId">
<el-select v-model="form.ruleColumnId" placeholder="请选择核查字段" @change="columnSelectChanged">
<el-option
v-for="column in columnOptions"
:key="column.id"
:label="column.columnName"
:value="column.id"
>
<span style="float: left">{{ column.columnName + '(' + column.columnComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
<el-divider content-position="left">核查配置</el-divider>
<el-row v-if="form.ruleConfig.ruleItemCode === 'timeliness_key'">
<el-col :span="24">
<el-form-item label="判定阀值">
<el-input-number v-model="form.ruleConfig.timeliness.threshold" :controls="false" :min="1" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'consistent_key'">
<el-col :span="12">
<el-form-item label="标准字典类别">
<el-select v-model="form.ruleConfig.consistent.gbTypeId" placeholder="请选择" @change="dictTypeSelectChanged">
<el-option
v-for="item in dictTypeOptions"
:key="item.id"
:label="item.gbTypeName"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准字典字段">
<el-select v-model="form.ruleConfig.consistent.bindGbColumn" placeholder="请选择">
<el-option
v-for="item in gbColumnOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'relevance_key'">
<el-col :span="12">
<el-form-item label="关联表">
<el-select v-model="form.ruleConfig.relevance.relatedTableId" placeholder="请选择" @change="relatedTableSelectChanged">
<el-option
v-for="table in tableOptions"
:key="table.id"
:label="table.tableName"
:value="table.id"
>
<span style="float: left">{{ table.tableName + '(' + table.tableComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="关联字段">
<el-select v-model="form.ruleConfig.relevance.relatedColumnId" placeholder="请选择" @change="relatedColumnSelectChanged">
<el-option
v-for="column in relatedColumnOptions"
:key="column.id"
:label="column.columnName"
:value="column.id"
>
<span style="float: left">{{ column.columnName + '(' + column.columnComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'accuracy_key_length'">
<el-col :span="24">
<el-form-item label="最大长度">
<el-input-number v-model="form.ruleConfig.accuracy.maxLength" :controls="false" :min="1" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in statusOptions"
:key="dict.id"
:label="dict.itemText"
>{{ dict.itemValue }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
</div>
</el-card>
</template>
<script>
import { listRuleLevel, listRuleItem, addCheckRule } from '@/api/quality/checkrule'
import { listDataSource } from '@/api/metadata/datasource'
import { listDataTable } from '@/api/metadata/datatable'
import { listDataColumn } from '@/api/metadata/datacolumn'
import { listDataDictType } from '@/api/standard/datadict'
export default {
name: 'CheckContentRuleAdd',
props: {
data: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
title: '核查规则新增',
//
showOptions: {
data: {},
showList: true,
showAdd: false,
showEdit: false,
showDetail: false
},
//
loadingOptions: {
loading: false,
loadingText: '保存',
isDisabled: false
},
//
form: {
ruleName: undefined,
ruleTypeId: undefined,
ruleItemId: undefined,
ruleLevelId: undefined,
ruleDbType: undefined,
ruleSourceId: undefined,
ruleSource: undefined,
ruleTableId: undefined,
ruleTable: undefined,
ruleTableComment: undefined,
ruleColumnId: undefined,
ruleColumn: undefined,
ruleColumnComment: undefined,
ruleConfig: {
ruleItemCode: undefined,
consistent: {
gbTypeId: undefined,
bindGbColumn: undefined
},
relevance: {
relatedTableId: undefined,
relatedTable: undefined,
relatedTableComment: undefined,
relatedColumnId: undefined,
relatedColumn: undefined,
relatedColumnComment: undefined
},
timeliness: {
threshold: undefined
},
accuracy: {
maxLength: undefined
}
},
status: '1'
},
//
rules: {
ruleName: [
{ required: true, message: '规则名称不能为空', trigger: 'blur' }
],
ruleItemId: [
{ required: true, message: '核查类型不能为空', trigger: 'change' }
],
ruleLevelId: [
{ required: true, message: '规则级别不能为空', trigger: 'change' }
],
ruleSourceId: [
{ required: true, message: '数据源不能为空', trigger: 'change' }
],
ruleTableId: [
{ required: true, message: '数据表不能为空', trigger: 'change' }
],
ruleColumnId: [
{ required: true, message: '核查字段不能为空', trigger: 'change' }
]
},
//
statusOptions: [],
//
ruleLevelOptions: [],
//
ruleItemOptions: [],
sourceOptions: [],
tableOptions: [],
columnOptions: [],
dictTypeOptions: [],
gbColumnOptions: [
{ value: 'gb_code', label: '标准编码' },
{ value: 'gb_name', label: '标准名称' }
],
relatedColumnOptions: []
}
},
created() {
console.log('data:' + this.data)
this.form.ruleTypeId = this.data.ruleTypeId
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
listDataDictType().then(response => {
if (response.success) {
this.dictTypeOptions = response.data
}
})
this.getRuleLevelList()
this.getRuleItemList()
this.getDataSourceList()
},
methods: {
showCard() {
this.$emit('showCard', this.showOptions)
},
getRuleLevelList() {
listRuleLevel().then(response => {
if (response.success) {
this.ruleLevelOptions = response.data
}
})
},
getRuleItemList() {
listRuleItem({ ruleTypeId: this.data.ruleTypeId }).then(response => {
if (response.success) {
this.ruleItemOptions = response.data
}
})
},
getDataSourceList() {
listDataSource().then(response => {
if (response.success) {
this.sourceOptions = response.data
}
})
},
ruleItemSelectChanged(val) {
const item = this.ruleItemOptions.find(function(item) {
return item.id === val
})
this.form.ruleConfig.ruleItemCode = item.itemCode
},
sourceSelectChanged(val) {
listDataTable({ sourceId: val }).then(response => {
if (response.success) {
this.tableOptions = response.data
this.columnOptions = []
const source = this.sourceOptions.find(function(item) {
return item.id === val
})
this.form.ruleSource = source.sourceName
this.form.ruleDbType = source.dbType
this.form.ruleTableId = ''
this.form.ruleTable = ''
this.form.ruleTableComment = ''
this.form.ruleColumnId = ''
this.form.ruleColumn = ''
this.form.ruleColumnComment = ''
}
})
},
tableSelectChanged(val) {
listDataColumn({ sourceId: this.form.ruleSourceId, tableId: val }).then(response => {
if (response.success) {
this.columnOptions = response.data
const table = this.tableOptions.find(function(item) {
return item.id === val
})
this.form.ruleTable = table.tableName
this.form.ruleTableComment = table.tableComment
this.form.ruleColumnId = ''
this.form.ruleColumn = ''
this.form.ruleColumnComment = ''
}
})
},
columnSelectChanged(val) {
const column = this.columnOptions.find(function(item) {
return item.id === val
})
this.form.ruleColumn = column.columnName
this.form.ruleColumnComment = column.columnComment
this.$forceUpdate()
},
dictTypeSelectChanged(val) {
const item = this.dictTypeOptions.find(function(item) {
return item.id === val
})
this.form.ruleConfig.consistent.gbTypeCode = item.gbTypeCode
this.form.ruleConfig.consistent.gbTypeName = item.gbTypeName
},
relatedTableSelectChanged(val) {
listDataColumn({ sourceId: this.form.ruleSourceId, tableId: val }).then(response => {
if (response.success) {
this.relatedColumnOptions = response.data
const table = this.tableOptions.find(function(item) {
return item.id === val
})
this.form.ruleConfig.relevance.relatedTable = table.tableName
this.form.ruleConfig.relevance.relatedTableComment = table.tableComment
this.form.ruleConfig.relevance.relatedColumnId = ''
this.form.ruleConfig.relevance.relatedColumn = ''
this.form.ruleConfig.relevance.relatedColumnComment = ''
}
})
},
relatedColumnSelectChanged(val) {
const column = this.relatedColumnOptions.find(function(item) {
return item.id === val
})
this.form.ruleConfig.relevance.relatedColumn = column.columnName
this.form.ruleConfig.relevance.relatedColumnComment = column.columnComment
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
this.loadingOptions.loading = true
this.loadingOptions.loadingText = '保存中...'
this.loadingOptions.isDisabled = true
addCheckRule(this.form).then(response => {
if (response.success) {
this.$message.success('保存成功')
setTimeout(() => {
// 2
this.$emit('showCard', this.showOptions)
}, 2000)
} else {
this.$message.error('保存失败')
this.loadingOptions.loading = false
this.loadingOptions.loadingText = '保存'
this.loadingOptions.isDisabled = false
}
}).catch(() => {
this.loadingOptions.loading = false
this.loadingOptions.loadingText = '保存'
this.loadingOptions.isDisabled = false
})
}
})
}
}
}
</script>
<style lang="scss" scoped>
.el-card ::v-deep .el-card__body {
height: calc(100vh - 230px);
overflow-y: auto;
}
</style>

View File

@ -0,0 +1,278 @@
<template>
<el-card class="box-card" shadow="always">
<div slot="header" class="clearfix">
<span>{{ title }}</span>
<el-button-group style="float: right;">
<el-button size="mini" icon="el-icon-back" @click="showCard">返回</el-button>
</el-button-group>
</div>
<div class="body-wrapper">
<el-form ref="form" :model="form" label-width="80px" disabled>
<el-form-item label="规则名称">
<el-input v-model="form.ruleName" />
</el-form-item>
<el-form-item label="核查类型">
<el-select v-model="form.ruleItemId">
<el-option
v-for="item in ruleItemOptions"
:key="item.id"
:label="item.itemExplain"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="规则级别">
<el-select v-model="form.ruleLevelId">
<el-option
v-for="item in ruleLevelOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="数据源">
<el-select v-model="form.ruleSourceId">
<el-option
v-for="source in sourceOptions"
:key="source.id"
:label="source.sourceName"
:value="source.id"
/>
</el-select>
</el-form-item>
<el-form-item label="数据表">
<el-select v-model="form.ruleTableId">
<el-option
v-for="table in tableOptions"
:key="table.id"
:label="table.tableName"
:value="table.id"
>
<span style="float: left">{{ table.tableName + '(' + table.tableComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="核查字段">
<el-select v-model="form.ruleColumnId">
<el-option
v-for="column in columnOptions"
:key="column.id"
:label="column.columnName"
:value="column.id"
>
<span style="float: left">{{ column.columnName + '(' + column.columnComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
<el-divider content-position="left">核查配置</el-divider>
<el-row v-if="form.ruleConfig.ruleItemCode === 'timeliness_key'">
<el-col :span="24">
<el-form-item label="判定阀值">
<el-input-number v-model="form.ruleConfig.timeliness.threshold" :controls="false" :min="1" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'consistent_key'">
<el-col :span="12">
<el-form-item label="标准字典类别">
<el-select v-model="form.ruleConfig.consistent.gbTypeId" placeholder="请选择">
<el-option
v-for="item in dictTypeOptions"
:key="item.id"
:label="item.gbTypeName"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准字典字段">
<el-select v-model="form.ruleConfig.consistent.bindGbColumn" placeholder="请选择">
<el-option
v-for="item in gbColumnOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'relevance_key'">
<el-col :span="12">
<el-form-item label="关联表">
<el-select v-model="form.ruleConfig.relevance.relatedTableId" placeholder="请选择">
<el-option
v-for="table in tableOptions"
:key="table.id"
:label="table.tableName"
:value="table.id"
>
<span style="float: left">{{ table.tableName + '(' + table.tableComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="关联字段">
<el-select v-model="form.ruleConfig.relevance.relatedColumnId" placeholder="请选择">
<el-option
v-for="column in relatedColumnOptions"
:key="column.id"
:label="column.columnName"
:value="column.id"
>
<span style="float: left">{{ column.columnName + '(' + column.columnComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'accuracy_key_length'">
<el-col :span="24">
<el-form-item label="最大长度">
<el-input-number v-model="form.ruleConfig.accuracy.maxLength" :controls="false" :min="1" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in statusOptions"
:key="dict.id"
:label="dict.itemText"
>{{ dict.itemValue }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" />
</el-form-item>
</el-form>
</div>
</el-card>
</template>
<script>
import { listRuleLevel, listRuleItem, getCheckRule } from '@/api/quality/checkrule'
import { listDataSource } from '@/api/metadata/datasource'
import { listDataTable } from '@/api/metadata/datatable'
import { listDataColumn } from '@/api/metadata/datacolumn'
import { listDataDictType } from '@/api/standard/datadict'
export default {
name: 'CheckContentRuleDetail',
props: {
data: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
title: '核查规则详情',
//
showOptions: {
data: {},
showList: true,
showAdd: false,
showEdit: false,
showDetail: false
},
//
form: {},
//
statusOptions: [],
//
ruleLevelOptions: [],
//
ruleItemOptions: [],
sourceOptions: [],
tableOptions: [],
columnOptions: [],
dictTypeOptions: [],
gbColumnOptions: [
{ value: 'gb_code', label: '标准编码' },
{ value: 'gb_name', label: '标准名称' }
],
relatedColumnOptions: []
}
},
created() {
console.log('id:' + this.data.id)
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
listDataDictType().then(response => {
if (response.success) {
this.dictTypeOptions = response.data
}
})
this.getRuleLevelList()
this.getDataSourceList()
},
mounted() {
this.getCheckRule(this.data.id)
},
methods: {
showCard() {
this.$emit('showCard', this.showOptions)
},
/** 获取详情 */
async getCheckRule(id) {
this.form = await getCheckRule(id).then(response => {
if (response.success) {
return response.data
}
})
this.ruleItemOptions = await listRuleItem({ ruleTypeId: this.form.ruleTypeId }).then(response => {
if (response.success) {
return response.data
}
})
this.tableOptions = await listDataTable({ sourceId: this.form.ruleSourceId }).then(response => {
if (response.success) {
return response.data
}
}) || []
this.columnOptions = await listDataColumn({ sourceId: this.form.ruleSourceId, tableId: this.form.ruleTableId }).then(response => {
if (response.success) {
return response.data
}
}) || []
if (this.form.ruleConfig.ruleItemCode === 'relevance_key') {
listDataColumn({ sourceId: this.form.ruleSourceId, tableId: this.form.ruleConfig.relevance.relatedTableId }).then(response => {
if (response.success) {
this.relatedColumnOptions = response.data
}
})
}
},
getRuleLevelList() {
listRuleLevel().then(response => {
if (response.success) {
this.ruleLevelOptions = response.data
}
})
},
getDataSourceList() {
listDataSource().then(response => {
if (response.success) {
this.sourceOptions = response.data
}
})
}
}
}
</script>
<style lang="scss" scoped>
.el-card ::v-deep .el-card__body {
height: calc(100vh - 230px);
overflow-y: auto;
}
</style>

View File

@ -0,0 +1,411 @@
<template>
<el-card class="box-card" shadow="always">
<div slot="header" class="clearfix">
<span>{{ title }}</span>
<el-button-group style="float: right;">
<el-button v-hasPerm="['quality:rule:edit']" type="primary" size="mini" icon="el-icon-finished" :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button>
<el-button size="mini" icon="el-icon-back" @click="showCard">返回</el-button>
</el-button-group>
</div>
<div class="body-wrapper">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="规则名称" prop="ruleName">
<el-input v-model="form.ruleName" placeholder="请输入规则名称" />
</el-form-item>
<el-form-item label="核查类型" prop="ruleItemId">
<el-select v-model="form.ruleItemId" placeholder="请选择核查类型" @change="ruleItemSelectChanged">
<el-option
v-for="item in ruleItemOptions"
:key="item.id"
:label="item.itemExplain"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="规则级别" prop="ruleLevelId">
<el-select v-model="form.ruleLevelId" placeholder="请选择规则级别">
<el-option
v-for="item in ruleLevelOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="数据源" prop="ruleSourceId">
<el-select v-model="form.ruleSourceId" placeholder="请选择数据源" @change="sourceSelectChanged">
<el-option
v-for="source in sourceOptions"
:key="source.id"
:label="source.sourceName"
:value="source.id"
/>
</el-select>
</el-form-item>
<el-form-item label="数据表" prop="ruleTableId">
<el-select v-model="form.ruleTableId" placeholder="请选择数据表" @change="tableSelectChanged">
<el-option
v-for="table in tableOptions"
:key="table.id"
:label="table.tableName"
:value="table.id"
>
<span style="float: left">{{ table.tableName + '(' + table.tableComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="核查字段" prop="ruleColumnId">
<el-select v-model="form.ruleColumnId" placeholder="请选择核查字段" @change="columnSelectChanged">
<el-option
v-for="column in columnOptions"
:key="column.id"
:label="column.columnName"
:value="column.id"
>
<span style="float: left">{{ column.columnName + '(' + column.columnComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
<el-divider content-position="left">核查配置</el-divider>
<el-row v-if="form.ruleConfig.ruleItemCode === 'timeliness_key'">
<el-col :span="24">
<el-form-item label="判定阀值">
<el-input-number v-model="form.ruleConfig.timeliness.threshold" :controls="false" :min="1" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'consistent_key'">
<el-col :span="12">
<el-form-item label="标准字典类别">
<el-select v-model="form.ruleConfig.consistent.gbTypeId" placeholder="请选择" @change="dictTypeSelectChanged">
<el-option
v-for="item in dictTypeOptions"
:key="item.id"
:label="item.gbTypeName"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准字典字段">
<el-select v-model="form.ruleConfig.consistent.bindGbColumn" placeholder="请选择">
<el-option
v-for="item in gbColumnOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'relevance_key'">
<el-col :span="12">
<el-form-item label="关联表">
<el-select v-model="form.ruleConfig.relevance.relatedTableId" placeholder="请选择" @change="relatedTableSelectChanged">
<el-option
v-for="table in tableOptions"
:key="table.id"
:label="table.tableName"
:value="table.id"
>
<span style="float: left">{{ table.tableName + '(' + table.tableComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="关联字段">
<el-select v-model="form.ruleConfig.relevance.relatedColumnId" placeholder="请选择" @change="relatedColumnSelectChanged">
<el-option
v-for="column in relatedColumnOptions"
:key="column.id"
:label="column.columnName"
:value="column.id"
>
<span style="float: left">{{ column.columnName + '(' + column.columnComment + ')' }}</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'accuracy_key_length'">
<el-col :span="24">
<el-form-item label="最大长度">
<el-input-number v-model="form.ruleConfig.accuracy.maxLength" :controls="false" :min="1" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in statusOptions"
:key="dict.id"
:label="dict.itemText"
>{{ dict.itemValue }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
</div>
</el-card>
</template>
<script>
import { listRuleLevel, listRuleItem, getCheckRule, updateCheckRule } from '@/api/quality/checkrule'
import { listDataSource } from '@/api/metadata/datasource'
import { listDataTable } from '@/api/metadata/datatable'
import { listDataColumn } from '@/api/metadata/datacolumn'
import { listDataDictType } from '@/api/standard/datadict'
export default {
name: 'CheckContentRuleEdit',
props: {
data: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
title: '核查规则编辑',
//
showOptions: {
data: {},
showList: true,
showAdd: false,
showEdit: false,
showDetail: false
},
//
loadingOptions: {
loading: false,
loadingText: '保存',
isDisabled: false
},
//
form: {},
//
rules: {
ruleName: [
{ required: true, message: '规则名称不能为空', trigger: 'blur' }
],
ruleItemId: [
{ required: true, message: '核查类型不能为空', trigger: 'change' }
],
ruleLevelId: [
{ required: true, message: '规则级别不能为空', trigger: 'change' }
],
ruleSourceId: [
{ required: true, message: '数据源不能为空', trigger: 'change' }
],
ruleTableId: [
{ required: true, message: '数据表不能为空', trigger: 'change' }
],
ruleColumnId: [
{ required: true, message: '核查字段不能为空', trigger: 'change' }
]
},
//
statusOptions: [],
//
ruleLevelOptions: [],
//
ruleItemOptions: [],
sourceOptions: [],
tableOptions: [],
columnOptions: [],
dictTypeOptions: [],
gbColumnOptions: [
{ value: 'gb_code', label: '标准编码' },
{ value: 'gb_name', label: '标准名称' }
],
relatedColumnOptions: []
}
},
created() {
console.log('id:' + this.data.id)
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
listDataDictType().then(response => {
if (response.success) {
this.dictTypeOptions = response.data
}
})
this.getRuleLevelList()
this.getDataSourceList()
},
mounted() {
this.getCheckRule(this.data.id)
},
methods: {
showCard() {
this.$emit('showCard', this.showOptions)
},
/** 获取详情 */
async getCheckRule(id) {
this.form = await getCheckRule(id).then(response => {
if (response.success) {
return response.data
}
})
this.ruleItemOptions = await listRuleItem({ ruleTypeId: this.form.ruleTypeId }).then(response => {
if (response.success) {
return response.data
}
})
this.tableOptions = await listDataTable({ sourceId: this.form.ruleSourceId }).then(response => {
if (response.success) {
return response.data
}
})
this.columnOptions = await listDataColumn({ sourceId: this.form.ruleSourceId, tableId: this.form.ruleTableId }).then(response => {
if (response.success) {
return response.data
}
})
if (this.form.ruleConfig.ruleItemCode === 'relevance_key') {
listDataColumn({ sourceId: this.form.ruleSourceId, tableId: this.form.ruleConfig.relevance.relatedTableId }).then(response => {
if (response.success) {
this.relatedColumnOptions = response.data
}
})
}
},
getRuleLevelList() {
listRuleLevel().then(response => {
if (response.success) {
this.ruleLevelOptions = response.data
}
})
},
getDataSourceList() {
listDataSource().then(response => {
if (response.success) {
this.sourceOptions = response.data
}
})
},
ruleItemSelectChanged(val) {
const item = this.ruleItemOptions.find(function(item) {
return item.id === val
})
this.form.ruleConfig.ruleItemCode = item.itemCode
},
sourceSelectChanged(val) {
listDataTable({ sourceId: val }).then(response => {
if (response.success) {
this.tableOptions = response.data
this.columnOptions = []
const source = this.sourceOptions.find(function(item) {
return item.id === val
})
this.form.ruleSource = source.sourceName
this.form.ruleDbType = source.dbType
this.form.ruleTableId = ''
this.form.ruleTable = ''
this.form.ruleTableComment = ''
this.form.ruleColumnId = ''
this.form.ruleColumn = ''
this.form.ruleColumnComment = ''
}
})
},
tableSelectChanged(val) {
listDataColumn({ sourceId: this.form.ruleSourceId, tableId: val }).then(response => {
if (response.success) {
this.columnOptions = response.data
const table = this.tableOptions.find(function(item) {
return item.id === val
})
this.form.ruleTable = table.tableName
this.form.ruleTableComment = table.tableComment
this.form.ruleColumnId = ''
this.form.ruleColumn = ''
this.form.ruleColumnComment = ''
}
})
},
columnSelectChanged(val) {
const column = this.columnOptions.find(function(item) {
return item.id === val
})
this.form.ruleColumn = column.columnName
this.form.ruleColumnComment = column.columnComment
this.$forceUpdate()
},
dictTypeSelectChanged(val) {
const item = this.dictTypeOptions.find(function(item) {
return item.id === val
})
this.form.ruleConfig.consistent.gbTypeCode = item.gbTypeCode
this.form.ruleConfig.consistent.gbTypeName = item.gbTypeName
},
relatedTableSelectChanged(val) {
listDataColumn({ sourceId: this.form.ruleSourceId, tableId: val }).then(response => {
if (response.success) {
this.relatedColumnOptions = response.data
const table = this.tableOptions.find(function(item) {
return item.id === val
})
this.form.ruleConfig.relevance.relatedTable = table.tableName
this.form.ruleConfig.relevance.relatedTableComment = table.tableComment
this.form.ruleConfig.relevance.relatedColumnId = ''
this.form.ruleConfig.relevance.relatedColumn = ''
this.form.ruleConfig.relevance.relatedColumnComment = ''
}
})
},
relatedColumnSelectChanged(val) {
const column = this.relatedColumnOptions.find(function(item) {
return item.id === val
})
this.form.ruleConfig.relevance.relatedColumn = column.columnName
this.form.ruleConfig.relevance.relatedColumnComment = column.columnComment
},
/** 提交按钮 */
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
this.loadingOptions.loading = true
this.loadingOptions.loadingText = '保存中...'
this.loadingOptions.isDisabled = true
updateCheckRule(this.form).then(response => {
if (response.success) {
this.$message.success('保存成功')
setTimeout(() => {
// 2
this.$emit('showCard', this.showOptions)
}, 2000)
} else {
this.$message.error('保存失败')
this.loadingOptions.loading = false
this.loadingOptions.loadingText = '保存'
this.loadingOptions.isDisabled = false
}
}).catch(() => {
this.loadingOptions.loading = false
this.loadingOptions.loadingText = '保存'
this.loadingOptions.isDisabled = false
})
}
})
}
}
}
</script>
<style lang="scss" scoped>
.el-card ::v-deep .el-card__body {
height: calc(100vh - 230px);
overflow-y: auto;
}
</style>

View File

@ -0,0 +1,407 @@
<template>
<el-row :gutter="20">
<el-col :span="6">
<el-card class="box-card tree-wrapper" shadow="always">
<div class="body-wrapper">
<el-tree
ref="ruleType"
:data="ruleTypeOptions"
node-key="id"
empty-text="加载中,请稍后"
:props="defaultProps"
default-expand-all
highlight-current
:expand-on-click-node="false"
@node-click="handleNodeClick"
>
<template slot-scope="{ node }">
<span class="custom-tree-node">
<span><i v-if="node.level === 1" class="iconfont icon-zuzhi tree-folder" />{{ node.label }}</span>
</span>
</template>
</el-tree>
</div>
</el-card>
</el-col>
<el-col :span="18">
<el-card class="box-card" shadow="always">
<el-form ref="queryForm" :model="queryParams" :inline="true">
<el-form-item label="规则名称" prop="ruleName">
<el-input
v-model="queryParams.ruleName"
placeholder="请输入规则名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row type="flex" justify="space-between">
<el-col :span="12">
<el-button-group>
<el-button
v-hasPerm="['quality:rule:add']"
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
</el-button-group>
</el-col>
<el-col :span="12">
<div class="right-toolbar">
<el-tooltip content="密度" effect="dark" placement="top">
<el-dropdown trigger="click" @command="handleCommand">
<el-button circle size="mini">
<svg-icon class-name="size-icon" icon-class="colum-height" />
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="medium">正常</el-dropdown-item>
<el-dropdown-item command="small">中等</el-dropdown-item>
<el-dropdown-item command="mini">紧凑</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-tooltip>
<el-tooltip content="刷新" effect="dark" placement="top">
<el-button circle size="mini" @click="handleRefresh">
<svg-icon class-name="size-icon" icon-class="shuaxin" />
</el-button>
</el-tooltip>
<el-tooltip content="列设置" effect="dark" placement="top">
<el-popover placement="bottom" width="100" trigger="click">
<el-checkbox-group v-model="checkedTableColumns" @change="handleCheckedColsChange">
<el-checkbox
v-for="(item, index) in tableColumns"
:key="index"
:label="item.prop"
>{{ item.label }}</el-checkbox>
</el-checkbox-group>
<span slot="reference">
<el-button circle size="mini">
<svg-icon class-name="size-icon" icon-class="shezhi" />
</el-button>
</span>
</el-popover>
</el-tooltip>
</div>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="tableDataList"
border
tooltip-effect="dark"
:size="tableSize"
:height="tableHeight"
style="width: 100%;margin: 15px 0;"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" width="55" align="center">
<template slot-scope="scope">
<span>{{ scope.$index +1 }}</span>
</template>
</el-table-column>
<template v-for="(item, index) in tableColumns">
<el-table-column
v-if="item.show"
:key="index"
:prop="item.prop"
:label="item.label"
:formatter="item.formatter"
:width="item.width"
align="center"
show-overflow-tooltip
/>
</template>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
<template slot-scope="scope">
<el-button
v-hasPerm="['quality:rule:edit']"
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)"
>修改</el-button>
<el-button
v-hasPerm="['quality:rule:detail']"
size="mini"
type="text"
icon="el-icon-view"
@click="handleDetail(scope.row)"
>详情</el-button>
<el-button
v-hasPerm="['quality:rule:remove']"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:current-page.sync="queryParams.pageNum"
:page-size.sync="queryParams.pageSize"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</el-card>
</el-col>
</el-row>
</template>
<script>
import { listRuleType, pageCheckRule, delCheckRule } from '@/api/quality/checkrule'
export default {
name: 'CheckContentRuleList',
data() {
return {
tableHeight: document.body.offsetHeight - 310 + 'px',
//
showOptions: {
data: {},
showList: true,
showAdd: false,
showEdit: false,
showDetail: false
},
//
loading: true,
//
tableColumns: [
{ prop: 'ruleName', label: '规则名称', show: true },
{ prop: 'ruleType', label: '规则类型', show: true },
{ prop: 'ruleSource', label: '数据源', show: true },
{ prop: 'ruleTable', label: '数据表', show: true, formatter: this.ruleTableFormatter },
{ prop: 'ruleColumn', label: '核查字段', show: true, formatter: this.ruleColumnFormatter },
{ prop: 'ruleLevel', label: '规则级别', width: 100, show: true },
{
prop: 'status',
label: '状态',
show: true,
width: 80,
formatter: this.statusFormatter
},
{ prop: 'createTime', label: '创建时间', show: true }
],
//
checkedTableColumns: [],
tableSize: 'medium',
//
statusOptions: [],
//
tableDataList: [],
//
total: 0,
//
queryParams: {
pageNum: 1,
pageSize: 20,
ruleTypeId: '',
ruleName: ''
},
//
ruleTypeOptions: [],
defaultProps: {
children: 'children',
label: 'name'
}
}
},
created() {
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
this.getTree()
this.getList()
},
mounted() {
this.initCols()
},
methods: {
getTree() {
listRuleType().then(response => {
if (response.success) {
const { data } = response
const tree = {}
tree.name = '核查规则类型'
const children = []
data.forEach(e => {
if (e.code === 'regular' || e.code === 'accuracy' || e.code === 'integrity') {
children.push(e)
}
})
tree.children = children
this.ruleTypeOptions = []
this.ruleTypeOptions.push(tree)
}
})
},
/** 节点单击事件 */
handleNodeClick(data) {
if (data.id) {
this.queryParams.ruleTypeId = data.id
this.getList()
}
},
/** 查询数据源列表 */
getList() {
this.loading = true
pageCheckRule(this.queryParams).then(response => {
this.loading = false
if (response.success) {
const { data } = response
this.tableDataList = data.data
this.total = data.total
}
})
},
initCols() {
this.checkedTableColumns = this.tableColumns.map(col => col.prop)
},
handleCheckedColsChange(val) {
this.tableColumns.forEach(col => {
if (!this.checkedTableColumns.includes(col.prop)) {
col.show = false
} else {
col.show = true
}
})
},
handleCommand(command) {
this.tableSize = command
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams = {
pageNum: 1,
pageSize: 20,
ruleTypeId: '',
ruleName: ''
}
this.handleQuery()
},
/** 刷新列表 */
handleRefresh() {
this.getList()
},
/** 新增按钮操作 */
handleAdd() {
this.showOptions.data = {}
if (!this.queryParams.ruleTypeId) {
this.$message.warning('请先选择核查规则类型')
return
}
this.showOptions.data.ruleTypeId = this.queryParams.ruleTypeId
this.showOptions.showList = false
this.showOptions.showAdd = true
this.showOptions.showEdit = false
this.showOptions.showDetail = false
this.$emit('showCard', this.showOptions)
},
/** 修改按钮操作 */
handleEdit(row) {
this.showOptions.data.id = row.id
this.showOptions.showList = false
this.showOptions.showAdd = false
this.showOptions.showEdit = true
this.showOptions.showDetail = false
this.$emit('showCard', this.showOptions)
},
/** 详情按钮操作 */
handleDetail(row) {
this.showOptions.data.id = row.id
this.showOptions.showList = false
this.showOptions.showAdd = false
this.showOptions.showEdit = false
this.showOptions.showDetail = true
this.$emit('showCard', this.showOptions)
},
/** 删除按钮操作 */
handleDelete(row) {
this.$confirm('选中数据将被永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
delCheckRule(row.id).then(response => {
if (response.success) {
this.$message.success('删除成功')
this.getList()
}
})
}).catch(() => {
})
},
handleSizeChange(val) {
console.log(`每页 ${val}`)
this.queryParams.pageNum = 1
this.queryParams.pageSize = val
this.getList()
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`)
this.queryParams.pageNum = val
this.getList()
},
statusFormatter(row, column, cellValue, index) {
const dictLabel = this.selectDictLabel(this.statusOptions, cellValue)
if (cellValue === '1') {
return <el-tag type='success'>{dictLabel}</el-tag>
} else {
return <el-tag type='warning'>{dictLabel}</el-tag>
}
},
ruleTableFormatter(row, column, cellValue, index) {
return row.ruleTableComment ? row.ruleTable + '(' + row.ruleTableComment + ')' : row.ruleTable
},
ruleColumnFormatter(row, column, cellValue, index) {
return row.ruleColumnComment ? row.ruleColumn + '(' + row.ruleColumnComment + ')' : row.ruleColumn
}
}
}
</script>
<style lang="scss" scoped>
.right-toolbar {
float: right;
}
.el-card ::v-deep .el-card__body {
height: calc(100vh - 170px);
}
.tree-wrapper {
overflow-y: auto;
.body-wrapper {
margin: -10px;
::v-deep .custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
.tree-folder {
margin-right: 5px;
color: #f6cf07;
}
}
}
}
</style>

View File

@ -0,0 +1,48 @@
<template>
<div class="app-container">
<transition name="el-zoom-in-center">
<check-rule-list v-if="options.showList" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-top">
<check-rule-add v-if="options.showAdd" :data="options.data" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-top">
<check-rule-edit v-if="options.showEdit" :data="options.data" @showCard="showCard" />
</transition>
<transition name="el-zoom-in-bottom">
<check-rule-detail v-if="options.showDetail" :data="options.data" @showCard="showCard" />
</transition>
</div>
</template>
<script>
import CheckRuleList from './CheckContentRuleList'
import CheckRuleAdd from './CheckContentRuleAdd'
import CheckRuleEdit from './CheckContentRuleEdit'
import CheckRuleDetail from './CheckContentRuleDetail'
export default {
name: 'CheckContentRule',
components: { CheckRuleList, CheckRuleAdd, CheckRuleEdit, CheckRuleDetail },
data() {
return {
options: {
data: {},
showList: true,
showAdd: false,
showEdit: false,
showDetail: false
}
}
},
methods: {
showCard(data) {
Object.assign(this.options, data)
}
}
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -27,13 +27,8 @@
</template> </template>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-popover
placement="left"
trigger="click"
>
<el-button <el-button
v-if="scope.row.status === '1'" v-if="scope.row.status === '1'"
v-hasPerm="['quality:job:pause']"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-view" icon="el-icon-view"
@ -41,21 +36,17 @@
>任务暂停</el-button> >任务暂停</el-button>
<el-button <el-button
v-if="scope.row.status === '0'" v-if="scope.row.status === '0'"
v-hasPerm="['quality:job:resume']"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-view" icon="el-icon-view"
@click="handleResume(scope.row)" @click="handleResume(scope.row)"
>任务恢复</el-button> >任务恢复</el-button>
<el-button <el-button
v-hasPerm="['quality:job:run']"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-view" icon="el-icon-view"
@click="handleRun(scope.row)" @click="handleRun(scope.row)"
>立即执行</el-button> >立即执行</el-button>
<el-button slot="reference">操作</el-button>
</el-popover>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -36,7 +36,7 @@
<el-table-column prop="ruleSourceName" label="数据源" align="center" /> <el-table-column prop="ruleSourceName" label="数据源" align="center" />
<el-table-column prop="ruleLevelName" label="规则级别" align="center" /> <el-table-column prop="ruleLevelName" label="规则级别" align="center" />
<el-table-column prop="checkErrorCount" label="不合规数" align="center"> <el-table-column prop="checkErrorCount" label="不合规数" align="center">
<template scope="scope"> <template slot-scope="scope">
<el-progress :percentage="scope.row.checkErrorCount" :stroke-width="20" :text-inside="true" :color="colorFormat(scope.row.ruleLevelName)" :format="cellFormat" /> <el-progress :percentage="scope.row.checkErrorCount" :stroke-width="20" :text-inside="true" :color="colorFormat(scope.row.ruleLevelName)" :format="cellFormat" />
</template> </template>
</el-table-column> </el-table-column>
@ -55,7 +55,7 @@
<el-table-column prop="ruleTypeName" label="规则类型" align="center" /> <el-table-column prop="ruleTypeName" label="规则类型" align="center" />
<el-table-column prop="ruleName" label="规则名称" align="center" /> <el-table-column prop="ruleName" label="规则名称" align="center" />
<el-table-column prop="checkErrorCount" label="不合规数" align="center"> <el-table-column prop="checkErrorCount" label="不合规数" align="center">
<template scope="scope"> <template slot-scope="scope">
<el-badge :value="scope.row.ruleLevelName" :type="typeFormat(scope.row.ruleLevelName)"> <el-badge :value="scope.row.ruleLevelName" :type="typeFormat(scope.row.ruleLevelName)">
{{ scope.row.checkErrorCount }} {{ scope.row.checkErrorCount }}
</el-badge> </el-badge>
@ -77,10 +77,10 @@
> >
<el-table-column prop="ruleName" label="规则名称" align="center" /> <el-table-column prop="ruleName" label="规则名称" align="center" />
<el-table-column prop="ruleSourceName" label="数据源" align="center" /> <el-table-column prop="ruleSourceName" label="数据源" align="center" />
<el-table-column prop="ruleTableName" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableName" label="数据表(文)" align="center" />
<el-table-column prop="ruleTableComment" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableComment" label="数据表(文)" align="center" />
<el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" />
<el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" />
<el-table-column prop="checkTotalCount" label="核查数" align="center" /> <el-table-column prop="checkTotalCount" label="核查数" align="center" />
<el-table-column prop="checkErrorCount" label="不合规数" align="center" /> <el-table-column prop="checkErrorCount" label="不合规数" align="center" />
</el-table> </el-table>
@ -98,10 +98,10 @@
> >
<el-table-column prop="ruleName" label="规则名称" align="center" /> <el-table-column prop="ruleName" label="规则名称" align="center" />
<el-table-column prop="ruleSourceName" label="数据源" align="center" /> <el-table-column prop="ruleSourceName" label="数据源" align="center" />
<el-table-column prop="ruleTableName" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableName" label="数据表(文)" align="center" />
<el-table-column prop="ruleTableComment" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableComment" label="数据表(文)" align="center" />
<el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" />
<el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" />
<el-table-column prop="checkTotalCount" label="核查数" align="center" /> <el-table-column prop="checkTotalCount" label="核查数" align="center" />
<el-table-column prop="checkErrorCount" label="不合规数" align="center" /> <el-table-column prop="checkErrorCount" label="不合规数" align="center" />
</el-table> </el-table>
@ -119,10 +119,10 @@
> >
<el-table-column prop="ruleName" label="规则名称" align="center" /> <el-table-column prop="ruleName" label="规则名称" align="center" />
<el-table-column prop="ruleSourceName" label="数据源" align="center" /> <el-table-column prop="ruleSourceName" label="数据源" align="center" />
<el-table-column prop="ruleTableName" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableName" label="数据表(文)" align="center" />
<el-table-column prop="ruleTableComment" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableComment" label="数据表(文)" align="center" />
<el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" />
<el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" />
<el-table-column prop="checkTotalCount" label="核查数" align="center" /> <el-table-column prop="checkTotalCount" label="核查数" align="center" />
<el-table-column prop="checkErrorCount" label="不合规数" align="center" /> <el-table-column prop="checkErrorCount" label="不合规数" align="center" />
</el-table> </el-table>
@ -140,10 +140,10 @@
> >
<el-table-column prop="ruleName" label="规则名称" align="center" /> <el-table-column prop="ruleName" label="规则名称" align="center" />
<el-table-column prop="ruleSourceName" label="数据源" align="center" /> <el-table-column prop="ruleSourceName" label="数据源" align="center" />
<el-table-column prop="ruleTableName" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableName" label="数据表(文)" align="center" />
<el-table-column prop="ruleTableComment" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableComment" label="数据表(文)" align="center" />
<el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" />
<el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" />
<el-table-column prop="checkTotalCount" label="核查数" align="center" /> <el-table-column prop="checkTotalCount" label="核查数" align="center" />
<el-table-column prop="checkErrorCount" label="不合规数" align="center" /> <el-table-column prop="checkErrorCount" label="不合规数" align="center" />
</el-table> </el-table>
@ -161,10 +161,10 @@
> >
<el-table-column prop="ruleName" label="规则名称" align="center" /> <el-table-column prop="ruleName" label="规则名称" align="center" />
<el-table-column prop="ruleSourceName" label="数据源" align="center" /> <el-table-column prop="ruleSourceName" label="数据源" align="center" />
<el-table-column prop="ruleTableName" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableName" label="数据表(文)" align="center" />
<el-table-column prop="ruleTableComment" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableComment" label="数据表(文)" align="center" />
<el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" />
<el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" />
<el-table-column prop="checkTotalCount" label="核查数" align="center" /> <el-table-column prop="checkTotalCount" label="核查数" align="center" />
<el-table-column prop="checkErrorCount" label="不合规数" align="center" /> <el-table-column prop="checkErrorCount" label="不合规数" align="center" />
</el-table> </el-table>
@ -182,10 +182,10 @@
> >
<el-table-column prop="ruleName" label="规则名称" align="center" /> <el-table-column prop="ruleName" label="规则名称" align="center" />
<el-table-column prop="ruleSourceName" label="数据源" align="center" /> <el-table-column prop="ruleSourceName" label="数据源" align="center" />
<el-table-column prop="ruleTableName" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableName" label="数据表(文)" align="center" />
<el-table-column prop="ruleTableComment" label="数据表(文)" align="center" /> <el-table-column prop="ruleTableComment" label="数据表(文)" align="center" />
<el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnName" label="核查字段(文)" align="center" />
<el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" /> <el-table-column prop="ruleColumnComment" label="核查字段(文)" align="center" />
<el-table-column prop="checkTotalCount" label="核查数" align="center" /> <el-table-column prop="checkTotalCount" label="核查数" align="center" />
<el-table-column prop="checkErrorCount" label="不合规数" align="center" /> <el-table-column prop="checkErrorCount" label="不合规数" align="center" />
</el-table> </el-table>
@ -205,11 +205,11 @@ export default {
data() { data() {
return { return {
queryParams: { queryParams: {
checkDate: moment(moment().add(-0, 'days').startOf('day').valueOf()).format('YYYY-MM-DD') checkDate: moment(moment().add(0, 'days').startOf('day').valueOf()).format('YYYY-MM-DD')
}, },
pickerOption: { pickerOption: {
disabledDate(date) { disabledDate(date) {
return date.getTime() > Date.now() - 24 * 60 * 60 * 1000 return date.getTime() > Date.now()
} }
}, },
date: moment().subtract('days', 1).format('YYYY年MM月DD日'), date: moment().subtract('days', 1).format('YYYY年MM月DD日'),
@ -234,12 +234,16 @@ export default {
} }
}, },
created() { created() {
this.getReportData1() /* this.getReportData1()
this.getReportData2() this.getReportData2()
this.getReportData3() this.getReportData3()*/
this.handleQuery()
}, },
methods: { methods: {
handleQuery() { handleQuery() {
this.spanArr1 = []
this.spanArr2 = []
this.getReportData1() this.getReportData1()
this.getReportData2() this.getReportData2()
this.getReportData3() this.getReportData3()

View File

@ -3,17 +3,14 @@
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>{{ title }}</span> <span>{{ title }}</span>
<el-button-group style="float: right;"> <el-button-group style="float: right;">
<el-button v-hasPerm="['quality:rule:add']" size="mini" icon="el-icon-plus" round <el-button v-hasPerm="['quality:rule:add']" type="primary" size="mini" icon="el-icon-finished" :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button>
:loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ <el-button size="mini" icon="el-icon-back" @click="showCard">返回</el-button>
loadingOptions.loadingText }}
</el-button>
<el-button size="mini" icon="el-icon-back" round @click="showCard">返回</el-button>
</el-button-group> </el-button-group>
</div> </div>
<div class="body-wrapper"> <div class="body-wrapper">
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="规则名称" prop="ruleName"> <el-form-item label="规则名称" prop="ruleName">
<el-input v-model="form.ruleName" placeholder="请输入规则名称"/> <el-input v-model="form.ruleName" placeholder="请输入规则名称" />
</el-form-item> </el-form-item>
<el-form-item label="核查类型" prop="ruleItemId"> <el-form-item label="核查类型" prop="ruleItemId">
<el-select v-model="form.ruleItemId" placeholder="请选择核查类型" @change="ruleItemSelectChanged"> <el-select v-model="form.ruleItemId" placeholder="请选择核查类型" @change="ruleItemSelectChanged">
@ -73,15 +70,18 @@
<el-row v-if="form.ruleConfig.ruleItemCode === 'timeliness_key'"> <el-row v-if="form.ruleConfig.ruleItemCode === 'timeliness_key'">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="判定阀值"> <el-form-item label="判定阀值">
<el-input-number v-model="form.ruleConfig.timeliness.threshold" :controls="false" :min="1"/> <el-input-number v-model="form.ruleConfig.timeliness.threshold" :controls="false" :min="1" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row v-if="form.ruleConfig.ruleItemCode === 'consistent_key'"> <el-row v-if="form.ruleConfig.ruleItemCode === 'consistent_key'">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="标准字典类别"> <el-form-item label="标准字典类别">
<el-select v-model="form.ruleConfig.consistent.gbTypeId" placeholder="请选择" <el-select
@change="dictTypeSelectChanged"> v-model="form.ruleConfig.consistent.gbTypeId"
placeholder="请选择"
@change="dictTypeSelectChanged"
>
<el-option <el-option
v-for="item in dictTypeOptions" v-for="item in dictTypeOptions"
:key="item.id" :key="item.id"
@ -107,8 +107,11 @@
<el-row v-if="form.ruleConfig.ruleItemCode === 'relevance_key'"> <el-row v-if="form.ruleConfig.ruleItemCode === 'relevance_key'">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="关联表"> <el-form-item label="关联表">
<el-select v-model="form.ruleConfig.relevance.relatedTableId" placeholder="请选择" <el-select
@change="relatedTableSelectChanged"> v-model="form.ruleConfig.relevance.relatedTableId"
placeholder="请选择"
@change="relatedTableSelectChanged"
>
<el-option <el-option
v-for="table in tableOptions" v-for="table in tableOptions"
:key="table.id" :key="table.id"
@ -122,8 +125,11 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="关联字段"> <el-form-item label="关联字段">
<el-select v-model="form.ruleConfig.relevance.relatedColumnId" placeholder="请选择" <el-select
@change="relatedColumnSelectChanged"> v-model="form.ruleConfig.relevance.relatedColumnId"
placeholder="请选择"
@change="relatedColumnSelectChanged"
>
<el-option <el-option
v-for="column in relatedColumnOptions" v-for="column in relatedColumnOptions"
:key="column.id" :key="column.id"
@ -139,7 +145,7 @@
<el-row v-if="form.ruleConfig.ruleItemCode === 'accuracy_key_length'"> <el-row v-if="form.ruleConfig.ruleItemCode === 'accuracy_key_length'">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="最大长度"> <el-form-item label="最大长度">
<el-input-number v-model="form.ruleConfig.accuracy.maxLength" :controls="false" :min="1"/> <el-input-number v-model="form.ruleConfig.accuracy.maxLength" :controls="false" :min="1" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -147,7 +153,7 @@
<el-row v-if="form.ruleConfig.ruleItemCode === 'regular_key'"> <el-row v-if="form.ruleConfig.ruleItemCode === 'regular_key'">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="正则表达"> <el-form-item label="正则表达">
<el-input v-model="form.ruleConfig.regular.regular" placeholder="请输入正则规则"/> <el-input v-model="form.ruleConfig.regular.regular" placeholder="请输入正则规则" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -175,7 +181,7 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"/> <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -422,7 +428,6 @@ export default {
this.loadingOptions.loading = true this.loadingOptions.loading = true
this.loadingOptions.loadingText = '保存中...' this.loadingOptions.loadingText = '保存中...'
this.loadingOptions.isDisabled = true this.loadingOptions.isDisabled = true
console.log("this.form====", this.form)
addCheckRule(this.form).then(response => { addCheckRule(this.form).then(response => {
if (response.success) { if (response.success) {
this.$message.success('保存成功') this.$message.success('保存成功')

View File

@ -3,7 +3,7 @@
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>{{ title }}</span> <span>{{ title }}</span>
<el-button-group style="float: right;"> <el-button-group style="float: right;">
<el-button size="mini" icon="el-icon-back" round @click="showCard">返回</el-button> <el-button size="mini" icon="el-icon-back" @click="showCard">返回</el-button>
</el-button-group> </el-button-group>
</div> </div>
<div class="body-wrapper"> <div class="body-wrapper">

View File

@ -3,8 +3,8 @@
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>{{ title }}</span> <span>{{ title }}</span>
<el-button-group style="float: right;"> <el-button-group style="float: right;">
<el-button v-hasPerm="['quality:rule:edit']" size="mini" icon="el-icon-plus" round :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button> <el-button v-hasPerm="['quality:rule:edit']" type="primary" size="mini" icon="el-icon-finished" :loading="loadingOptions.loading" :disabled="loadingOptions.isDisabled" @click="submitForm">{{ loadingOptions.loadingText }}</el-button>
<el-button size="mini" icon="el-icon-back" round @click="showCard">返回</el-button> <el-button size="mini" icon="el-icon-back" @click="showCard">返回</el-button>
</el-button-group> </el-button-group>
</div> </div>
<div class="body-wrapper"> <div class="body-wrapper">

View File

@ -14,7 +14,7 @@
:expand-on-click-node="false" :expand-on-click-node="false"
@node-click="handleNodeClick" @node-click="handleNodeClick"
> >
<template slot-scope="{ node, data }"> <template slot-scope="{ node }">
<span class="custom-tree-node"> <span class="custom-tree-node">
<span><i v-if="node.level === 1" class="iconfont icon-zuzhi tree-folder" />{{ node.label }}</span> <span><i v-if="node.level === 1" class="iconfont icon-zuzhi tree-folder" />{{ node.label }}</span>
</span> </span>
@ -114,16 +114,13 @@
:prop="item.prop" :prop="item.prop"
:label="item.label" :label="item.label"
:formatter="item.formatter" :formatter="item.formatter"
:width="item.width"
align="center" align="center"
show-overflow-tooltip show-overflow-tooltip
/> />
</template> </template>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-popover
placement="left"
trigger="click"
>
<el-button <el-button
v-hasPerm="['quality:rule:edit']" v-hasPerm="['quality:rule:edit']"
size="mini" size="mini"
@ -145,8 +142,6 @@
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
>删除</el-button> >删除</el-button>
<el-button slot="reference">操作</el-button>
</el-popover>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -190,11 +185,12 @@ export default {
{ prop: 'ruleSource', label: '数据源', show: true }, { prop: 'ruleSource', label: '数据源', show: true },
{ prop: 'ruleTable', label: '数据表', show: true, formatter: this.ruleTableFormatter }, { prop: 'ruleTable', label: '数据表', show: true, formatter: this.ruleTableFormatter },
{ prop: 'ruleColumn', label: '核查字段', show: true, formatter: this.ruleColumnFormatter }, { prop: 'ruleColumn', label: '核查字段', show: true, formatter: this.ruleColumnFormatter },
{ prop: 'ruleLevel', label: '规则级别', show: true }, { prop: 'ruleLevel', label: '规则级别', width: 100, show: true },
{ {
prop: 'status', prop: 'status',
label: '状态', label: '状态',
show: true, show: true,
width: 80,
formatter: this.statusFormatter formatter: this.statusFormatter
}, },
{ prop: 'createTime', label: '创建时间', show: true } { prop: 'createTime', label: '创建时间', show: true }
@ -242,7 +238,13 @@ export default {
const { data } = response const { data } = response
const tree = {} const tree = {}
tree.name = '核查规则类型' tree.name = '核查规则类型'
tree.children = data const children = []
data.forEach(e => {
if (e.code !== 'regular' && e.code !== 'accuracy' && e.code !== 'integrity') {
children.push(e)
}
})
tree.children = children
this.ruleTypeOptions = [] this.ruleTypeOptions = []
this.ruleTypeOptions.push(tree) this.ruleTypeOptions.push(tree)
} }

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
@ -91,6 +92,7 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--表单组件--> <!--表单组件-->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title" width="500px"> <el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title" width="500px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
@ -65,6 +66,7 @@
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<eHeader :dict="dict" :permission="permission" /> <eHeader :dict="dict" :permission="permission" />
@ -45,6 +46,7 @@
<pagination /> <pagination />
<!--表单渲染--> <!--表单渲染-->
<eForm :job-status="dict.job_status" /> <eForm :job-status="dict.job_status" />
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
@ -144,6 +145,8 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
@ -110,6 +111,7 @@
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<!--工具栏--> <!--工具栏-->
<div class="head-container"> <div class="head-container">
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
@ -110,6 +111,7 @@
</el-table> </el-table>
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</el-card>
</div> </div>
</template> </template>

View File

@ -1,5 +1,6 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-card class="box-card" shadow="always">
<el-row :gutter="20"> <el-row :gutter="20">
<!--侧边部门数据--> <!--侧边部门数据-->
<el-col :xs="9" :sm="6" :md="5" :lg="4" :xl="4"> <el-col :xs="9" :sm="6" :md="5" :lg="4" :xl="4">
@ -184,6 +185,7 @@
<pagination /> <pagination />
</el-col> </el-col>
</el-row> </el-row>
</el-card>
</div> </div>
</template> </template>