-
5.env.development
-
4.env.production
-
9package.json
-
2530public/report/annual.htm
-
71public/report/年报_files/anno.html
-
39public/report/年报_files/annualReport_d_statisticalInformation_input.css
-
806public/report/年报_files/common.css
-
39public/report/年报_files/content.html
-
68public/report/年报_files/highlight(1).html
-
68public/report/年报_files/highlight.html
-
1359public/report/年报_files/layui.css
-
756public/report/年报_files/layui.js.下载
-
92public/report/年报_files/outline.html
-
534public/report/年报_files/theme.css
-
14public/report/年报_files/translate(1).html
-
14public/report/年报_files/translate.html
-
3public/static/config.js
-
59src/api/report.js
-
1src/assets/icons/svg/sta.svg
-
BINsrc/assets/images/graph-img.png
-
BINsrc/assets/images/index-img7.png
-
BINsrc/assets/images/index-img8.png
-
BINsrc/assets/images/list-bg.png
-
BINsrc/assets/images/run.png
-
BINsrc/assets/images/wenhao.png
-
58src/assets/styles/yxk-admin.scss
-
55src/assets/test.md
-
23src/main.js
-
586src/views/AIAssistant/AICataloging/index.vue
-
284src/views/AIAssistant/AIDigitalHuman/index.vue
-
404src/views/AIAssistant/AIDigitalHuman/index2.vue
-
159src/views/AIAssistant/AIDigitalHuman/message.vue
-
370src/views/AIAssistant/AIIntelligentCoding/aiForm.vue
-
614src/views/AIAssistant/AIIntelligentCoding/index.vue
-
11src/views/AIAssistant/AIIntelligentCoding/str.json
-
629src/views/AIAssistant/AIKeywords/index.vue
-
246src/views/AIAssistant/AIknowledgeGraph/index.vue
-
306src/views/archivesStatistics/annualReportStatistics/index.vue
-
278src/views/archivesStatistics/customDefinedStatistics/index.vue
-
185src/views/archivesStatistics/dataStatistics/index.vue
-
374src/views/archivesStatistics/dataStatistics/index2.vue
-
27src/views/archivesStatistics/ureport/designer/index.vue
-
6src/views/components/category/PreviewForm.vue
-
34vue.config.js
2530
public/report/annual.htm
File diff suppressed because it is too large
View File
71
public/report/年报_files/anno.html
File diff suppressed because it is too large
View File
@ -0,0 +1,39 @@ |
|||
@font-face { font-family: "Times New Roman"; } |
|||
@font-face { font-family: "宋体"; } |
|||
@font-face { font-family: "Wingdings"; } |
|||
@font-face { font-family: "Arial"; } |
|||
@font-face { font-family: "黑体"; } |
|||
@font-face { font-family: "Calibri"; } |
|||
@font-face { font-family: "仿宋"; } |
|||
@font-face { font-family: "Calibri Light"; } |
|||
p.MsoNormal { mso-style-name: 正文; mso-style-parent: ""; margin: 0pt; margin-bottom: .0001pt; mso-pagination: none; text-align: justify; text-justify: inter-ideograph; font-family: Calibri; mso-fareast-font-family: 仿宋; mso-bidi-font-family: 黑体; font-size: 15.0000pt; mso-font-kerning: 1.0000pt; } |
|||
h1 { mso-style-name: "标题 1"; mso-style-next: 正文; margin-top: 17.0000pt; margin-bottom: 16.5000pt; page-break-after: avoid; mso-pagination: lines-together; text-align: justify; text-justify: inter-ideograph; mso-outline-level: 1; line-height: 240%; font-family: Calibri; mso-fareast-font-family: 仿宋; mso-bidi-font-family: 黑体; font-weight: bold; font-size: 22.0000pt; mso-font-kerning: 22.0000pt; } |
|||
h2 { mso-style-name: "标题 2"; mso-style-next: 正文; margin-top: 13.0000pt; margin-bottom: 13.0000pt; page-break-after: avoid; mso-pagination: lines-together; text-align: justify; text-justify: inter-ideograph; mso-outline-level: 2; line-height: 150%; font-family: Arial; mso-fareast-font-family: 黑体; mso-bidi-font-family: 黑体; font-weight: bold; font-size: 16.0000pt; mso-font-kerning: 1.0000pt; } |
|||
span.10 { font-family: 'Times New Roman'; } |
|||
span.15 { font-family: 'Times New Roman'; color: rgb(51, 51, 51); } |
|||
span.16 { font-family: 'Times New Roman'; color: rgb(5, 99, 193); text-decoration: underline; text-underline: single; } |
|||
span.17 { font-family: 宋体; color: rgb(255, 0, 0); font-size: 9.0000pt; } |
|||
span.18 { font-family: 宋体; color: rgb(0, 0, 0); font-size: 9.0000pt; } |
|||
p.MsoToc2 { mso-style-name: "目录 2"; mso-style-next: 正文; margin-left: 21.0000pt; mso-para-margin-left: 2.0000gd; mso-pagination: none; text-align: justify; text-justify: inter-ideograph; font-family: Calibri; mso-fareast-font-family: 仿宋; mso-bidi-font-family: 黑体; font-size: 15.0000pt; mso-font-kerning: 1.0000pt; } |
|||
p.MsoHeader { mso-style-name: 页眉; margin: 0pt; margin-bottom: .0001pt; border-top: none; mso-border-top-alt: none; border-right: none; mso-border-right-alt: none; border-bottom: none; mso-border-bottom-alt: none; border-left: none; mso-border-left-alt: none; padding: 1pt 4pt 1pt 4pt; layout-grid-mode: char; mso-pagination: none; text-align: justify; text-justify: inter-ideograph; font-family: Calibri; mso-fareast-font-family: 仿宋; mso-bidi-font-family: 黑体; font-size: 9.0000pt; mso-font-kerning: 1.0000pt; } |
|||
p.MsoFooter { mso-style-name: 页脚; margin: 0pt; margin-bottom: .0001pt; layout-grid-mode: char; mso-pagination: none; text-align: left; font-family: Calibri; mso-fareast-font-family: 仿宋; mso-bidi-font-family: 黑体; font-size: 9.0000pt; mso-font-kerning: 1.0000pt; } |
|||
p.22 { mso-style-name: 二级标题; mso-style-parent: "标题 2"; mso-style-next: 正文; margin-top: 12.0000pt; margin-bottom: 3.2000pt; page-break-after: avoid; mso-pagination: lines-together; text-align: center; mso-outline-level: 2; line-height: 132%; font-family: Arial; mso-fareast-font-family: 仿宋; mso-bidi-font-family: 黑体; font-weight: bold; font-size: 16.0000pt; mso-font-kerning: 1.0000pt; } |
|||
p.23 { mso-style-name: "TOC 标题1"; mso-style-noshow: yes; mso-style-parent: "标题 1"; mso-style-next: 正文; margin-top: 12.0000pt; margin-bottom: 0.0000pt; page-break-after: avoid; mso-pagination: widow-orphan lines-together; text-align: left; line-height: 107%; font-family: 'Calibri Light'; mso-fareast-font-family: 宋体; mso-bidi-font-family: 黑体; color: rgb(45, 115, 179); font-weight: normal; font-size: 16.0000pt; } |
|||
span.msoIns { mso-style-type: export-only; mso-style-name: ""; text-decoration: underline; text-underline: single; color: blue; } |
|||
span.msoDel { mso-style-type: export-only; mso-style-name: ""; text-decoration: line-through; color: red; } |
|||
table.MsoNormalTable { mso-style-name: 普通表格; mso-style-parent: ""; mso-style-noshow: yes; mso-tstyle-rowband-size: 0; mso-tstyle-colband-size: 0; mso-padding-alt: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-para-margin: 0pt; mso-para-margin-bottom: .0001pt; mso-pagination: widow-orphan; font-family: 'Times New Roman'; font-size: 10.0000pt; mso-ansi-language: #0400; mso-fareast-language: #0400; mso-bidi-language: #0400; } |
|||
table.MsoTableGrid { mso-style-name: 网格型; mso-tstyle-rowband-size: 0; mso-tstyle-colband-size: 0; mso-padding-alt: 0.0000pt 5.4000pt 0.0000pt 5.4000pt; mso-border-top-alt: 0.5000pt solid windowtext; mso-border-left-alt: 0.5000pt solid windowtext; mso-border-bottom-alt: 0.5000pt solid windowtext; mso-border-right-alt: 0.5000pt solid windowtext; mso-border-insideh: 0.5000pt solid windowtext; mso-border-insidev: 0.5000pt solid windowtext; mso-para-margin: 0pt; mso-para-margin-bottom: .0001pt; mso-pagination: none; text-align: justify; text-justify: inter-ideograph; font-family: 'Times New Roman'; font-size: 10.0000pt; mso-ansi-language: #0400; mso-fareast-language: #0400; mso-bidi-language: #0400; } |
|||
@page { mso-page-border-surround-header: no; mso-page-border-surround-footer: no; } |
|||
@page Section0 { margin-top: 70.8500pt; margin-bottom: 70.8500pt; margin-left: 62.3500pt; margin-right: 62.3500pt; size: 595.3000pt 841.9000pt; layout-grid: 15.6000pt; } |
|||
div.Section0 { page: Section0; } |
|||
.datainput { height: 14pt; height: 14.8px \9; /*解决ie 6 7 8 9样式*/ border: 1px #ccc solid; width: 60pt; margin: 0; vertical-align: middle; text-align: center; } |
|||
@media \\0 screen {.datainput { height: 18px;}} |
|||
@media all and (-webkit-min-device-pixel-ratio:0) and (min-resolution: .001dpcm) {.datainput { /* height: 14px; */}} |
|||
@media screen and (-moz-images-in-menus:0) {.datainput { height: 14pt;}} |
|||
@media screen and (min--moz-device-pixel-ratio:0) {.datainput { height: 14.8px;}} |
|||
/*解决ie10 ie11 edge样式*/ |
|||
_:-ms-lang(x), .datainput { height: 14.8px; } |
|||
input.hasError { border: 1px solid red !important; background: #FCD2D2; color: red; } |
|||
input.readOnly { background: #eee;border: 1px #ccc solid } |
|||
.layui-main.layui-border-box .layui-form{overflow: auto;height:100%;width: 100%;} |
|||
.layui-main.layui-border-box{padding-bottom: 70px;background-color: #fff;} |
|||
@ -0,0 +1,806 @@ |
|||
@import url("../font/awesome/css/all.css"); |
|||
/* 超大型屏幕(高分辨率桌面) */ |
|||
@media screen and (min-width:1400px) { |
|||
.layui-container {width:1370px;} |
|||
.layui-hide-slg {display:none!important;} |
|||
.layui-show-slg-block {display:block!important;} |
|||
.layui-show-slg-inline {display:inline!important;} |
|||
.layui-show-slg-inline-block {display:inline-block!important;} |
|||
.layui-col-slg1,.layui-col-slg2,.layui-col-slg3,.layui-col-slg4,.layui-col-slg5,.layui-col-slg6,.layui-col-slg7,.layui-col-slg8,.layui-col-slg9,.layui-col-slg10,.layui-col-slg11,.layui-col-slg12 {float:left;} |
|||
.layui-col-slg1 {width:8.33333333%;} |
|||
.layui-col-slg2 {width:16.66666667%;} |
|||
.layui-col-slg3 {width:25%;} |
|||
.layui-col-slg4 {width:33.33333333%;} |
|||
.layui-col-slg5 {width:41.66666667%;} |
|||
.layui-col-slg6 {width:50%;} |
|||
.layui-col-slg7 {width:58.33333333%;} |
|||
.layui-col-slg8 {width:66.66666667%;} |
|||
.layui-col-slg9 {width:75%;} |
|||
.layui-col-slg10 {width:83.33333333%;} |
|||
.layui-col-slg11 {width:91.66666667%;} |
|||
.layui-col-slg12 {width:100%;} |
|||
/* 列偏移 */ |
|||
.layui-col-slg-offset1 {margin-left:8.33333333%;} |
|||
.layui-col-slg-offset2 {margin-left:16.66666667%;} |
|||
.layui-col-slg-offset3 {margin-left:25%;} |
|||
.layui-col-slg-offset4 {margin-left:33.33333333%;} |
|||
.layui-col-slg-offset5 {margin-left:41.66666667%;} |
|||
.layui-col-slg-offset6 {margin-left:50%;} |
|||
.layui-col-slg-offset7 {margin-left:58.33333333%;} |
|||
.layui-col-slg-offset8 {margin-left:66.66666667%;} |
|||
.layui-col-slg-offset9 {margin-left:75%;} |
|||
.layui-col-slg-offset10 {margin-left:83.33333333%;} |
|||
.layui-col-slg-offset11 {margin-left:91.66666667%;} |
|||
.layui-col-slg-offset12 {margin-left:100%;} |
|||
} |
|||
|
|||
/** 图标字体 |
|||
@font-face { |
|||
font-family: 'unis-icon'; |
|||
src: url('../font/iconfont.eot?v=0.1'); |
|||
src: url('../font/iconfont.eot?v=0.1#iefix') format('embedded-opentype'), |
|||
url('../font/iconfont.woff2?v=0.1') format('woff2'), |
|||
url('../font/iconfont.woff?v=0.1') format('woff'), |
|||
url('../font/iconfont.ttf?v=0.1') format('truetype'), |
|||
url('../font/iconfont.svg?v=0.1#unis-icon') format('svg'); |
|||
} |
|||
.unis-icon{ font-family:"unis-icon" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } |
|||
**/ |
|||
|
|||
/*框架业务内容区、弹窗里的页面高度都是100%*/ |
|||
html, body { height: 100%; } |
|||
body {font-family: PingFangSC, PingFangSC-Regular, 'Microsoft YaHei', 微软雅黑, STXihei, 华文细黑, Georgia, 'Times New Roman', serif;} |
|||
body {font-family: Tahoma,"Microsoft YaHei",微软雅黑;} |
|||
|
|||
/* 去除firefox浏览器中tab键引起的虚线框 */ |
|||
button::-moz-focus-inner, |
|||
input[type="color"]:-moz-system-metric(color-picker-available)::-moz-focus-inner, |
|||
input[type="reset"]::-moz-focus-inner, |
|||
input[type="button"]::-moz-focus-inner, |
|||
input[type="submit"]::-moz-focus-inner, |
|||
input[type="file"] > button[type="button"]::-moz-focus-inner{ |
|||
border: 1px dotted transparent !important; |
|||
} |
|||
a{outline:none;} |
|||
|
|||
/*调窗口宽高的时候用这个样式*/ |
|||
.dialog_body_test {border: 1px solid #e2e3e8;height: 500px;width:300px;} |
|||
|
|||
/*重写layui.css样式区*/ |
|||
/*替换颜色 #5FB878 为 #0066CC*/ |
|||
.layui-form-select dl {padding: 0;top: 32px;} |
|||
.layui-form-select dl dd.layui-this{color: #32363a;font-weight: 900;} |
|||
.layui-form-select dl dd {cursor: pointer;color: #32363a;} |
|||
.layui-form-select dl dd:hover{background-color: #f5f5f5;} |
|||
.layui-form-select .layui-edge {border-top-color: #74777a;} |
|||
.layui-form-checked, .layui-form-checked:hover{border-color: #1890ff;} |
|||
.layui-form-checked span, .layui-form-checked:hover span{background-color: #1890ff;} |
|||
.layui-form-checked i, .layui-form-checked:hover i{color: #1890ff;border-color: #1890ff;} |
|||
.layui-form-checkbox[lay-skin="primary"] span{background: none;color: #32363a;line-height: 13px;padding-right: 0px;height: 14px;} |
|||
.layui-form-checkbox[lay-skin="primary"]:hover i{border-color: #1890ff; color: #fff;} |
|||
.layui-form-checkbox i,.layui-form-checked i, .layui-form-checked:hover i{height: 30px;} |
|||
.layui-form-checkbox[lay-skin="primary"] i,.layui-form-checked[lay-skin="primary"] i,.layui-form-switch i{width: 18px;height: 18px;font-size: 14px;line-height: 16px;} |
|||
|
|||
/* .layui-form-switch{height:18px;line-height:18px;width:30px;padding: 0px;} */ |
|||
.layui-form-switch{padding: 0px;width: 35px;box-sizing:content-box;margin-top: 15px;background-color: #BFBFBF;border-color:#BFBFBF;} |
|||
.layui-form-switch i{top: 1px;margin-left:-3px;background-color: #fff;} |
|||
.layui-form-onswitch i{margin-left:-19px;} |
|||
.layui-form-onswitch.layui-disabled em{color: #999999 !important;} |
|||
.layui-form-onswitch.layui-disabled i{background-color: #d2d2d2;} |
|||
.layui-form-radio > i{font-size:19px;color:#bfbfbf;margin-right: 5px;vertical-align: -6px;border-radius: 50%;} |
|||
.layui-form-radio div{height: 14px;line-height: 12px;} |
|||
.layui-form-radioed>i,.layui-form-radio>i:hover{color: #1890ff;} |
|||
.layui-table-edit:focus{border-color: #0066CC!important;} |
|||
/* .layui-transfer-active .layui-btn{background-color: #0066CC; border-color: #0066CC; color: #fff;} */ |
|||
.layui-nav-bar,.layui-nav .layui-this:after,.layui-nav-tree .layui-nav-itemed:after{background-color: #1890ff;} |
|||
.layui-nav-child{border-color: #d9d9d9;} |
|||
.layui-nav-child dd.layui-this{background-color: #1890ff; color: #fff;} |
|||
.layui-nav .layui-nav-child dd.layui-this a{background-color: #1890ff; color: #fff;} |
|||
.layui-breadcrumb a:hover{color: #0066CC !important;} |
|||
.layui-tab-card > .layui-tab-more .layui-this{background: none; color: #1890ff;} |
|||
/* .layui-disabled{background-color: #f2f2f2!important;color: #333!important;} */ |
|||
|
|||
/* 边框 #ccc替换为 #d9d9d9 */ |
|||
.layui-btn-primary, |
|||
.layui-input, |
|||
.layui-textarea{border-color: #a1a7ae;color: #32363a;padding-right: 10px;} |
|||
.layui-form-select .layui-select-title .layui-input{border-color: #a1a7ae;color: #32363a;} |
|||
|
|||
/*替换颜色 #009688 为 #0066CC*/ |
|||
.layui-elem-quote{border-left: 5px solid #1890ff;} |
|||
/* .layui-btn-group .layui-btn-primary:hover{border-color: #C9C9C9; color: #0066CC;} */ |
|||
.layui-upload-drag .layui-icon{color: #1890ff;} |
|||
.layui-upload-drag[lay-over]{border-color: #1890ff} |
|||
/* .layui-nav-tree .layui-this, |
|||
.layui-nav-tree .layui-this>a, |
|||
.layui-nav-tree .layui-this>a:hover, |
|||
.layui-nav-tree .layui-nav-child dd.layui-this, |
|||
.layui-nav-tree .layui-nav-child dd.layui-this a{background-color: #1890ff; color: #fff;} |
|||
.layui-nav-tree .layui-nav-bar{background-color: #1890ff;} */ |
|||
.layui-tab-brief > .layui-tab-title .layui-this{color: #1890ff;} |
|||
.layui-slider-input-btn i:hover{color: #1890ff;} |
|||
/* 按钮的禁用 */ |
|||
.layui-btn-disabled{background-color: #f5f5f5;} |
|||
button.layui-btn.layui-btn-normal[disabled]{background-color: #A3D3FF;border-color: #A3D3FF;} |
|||
button.layui-btn[disabled]{background-color: #f5f5f5;cursor: not-allowed} |
|||
button.layui-btn.layui-btn-primary[disabled]:hover{border-color: #bfbfbf !important;color: #32363a !important;} |
|||
.layui-form-danger:focus{border-color: #bb0000 !important;} |
|||
/*灰*/ |
|||
.layui-bg-gray { background-color: #DDDDDD !important; color: #666 !important; } |
|||
|
|||
.layui-btn{line-height:31px;height: 35px;padding: 0 16px;} |
|||
.layui-btn-lg{line-height:40px;} |
|||
.layui-btn-sm{line-height:26px;height: 30px;} |
|||
.layui-btn-xs{line-height:18px;} |
|||
|
|||
/*修改数据表格*/ |
|||
.layui-table-view .layui-table th, .layui-table-view .layui-table td{padding:0;} |
|||
.layui-table-view .layui-table td{border-top-width:0;border-bottom-width:0; color: #32363a;} |
|||
.layui-table-cell{height:38px;line-height:38px;padding: 0 10px;} |
|||
.layui-table-cell .edoc-blocktag{margin-top: 9px;} |
|||
.laytable-cell-checkbox, .laytable-cell-radio, .laytable-cell-space, .laytable-cell-numbers{ padding: 0; } |
|||
.layui-table tbody tr[data-index]:hover, .layui-table-hover[data-index]{background-color: #fff7ca !important;} |
|||
.layui-table tbody tr:hover, .layui-table-hover{background: none;} |
|||
.layui-table-click{background-color: #fff7ca !important;} |
|||
.layui-table-header{background-color: #F2F2F2;} |
|||
.layui-table thead tr, .layui-table-header, .layui-table-tool, .layui-table-total, .layui-table-total tr, .layui-table-patch, .layui-table-mend, .layui-table[lay-even] tr:nth-child(even), .layui-table-click{background-color: #f2f2f2;} |
|||
.layui-table th, .layui-table td, .layui-table[lay-skin="line"], .layui-table[lay-skin="row"], .layui-table-view, .layui-table-tool, .layui-table-header, .layui-table-col-set, .layui-table-total, .layui-table-page, .layui-table-fixed-r, .layui-table-tips-main, .layui-table-grid-down {border-color: #d9d9d9;} |
|||
.layui-table th {color: #6a6d70;} |
|||
|
|||
/* 选项卡 */ |
|||
.layui-tab {margin-top:0;} |
|||
.layui-tab.layui-tab-brief > .layui-tab-title .layui-this::after {height: 45px;} |
|||
.layui-tab.layui-tab-brief > .layui-tab-title .layui-this:after,.layui-tab.layui-tab-brief > .layui-tab-title .layui-this after{height: 45px;}/* IE8支持 */ |
|||
.edoc-tab-box .layui-tab.layui-tab-brief .layui-tab-title{height: 45px;line-height: 45px;margin:6px 10px 0px 20px;border-color: #d9d9d9;}/* 标题高度 */ |
|||
.edoc-tab-box .layui-tab.layui-tab-brief .layui-tab-title li{padding: 0 8px ;margin: 0 15px 0 0;height: 45px;line-height: 45px;color: #6a6d70;font-size:15px;font-weight:bold;}/* 标题的水平间距 */ |
|||
.layui-tab.layui-tab-brief .layui-tab-title li{color: #6a6d70;} |
|||
.edoc-tab-box .layui-tab-content { padding: 5px 0 5px 5px; } |
|||
/* 卡片内分块——左右*/ |
|||
.layui-tab-item .layui-main{top: 50px;border: 0px;} |
|||
/* 侧边的选项卡切换 */ |
|||
.layui-side .layui-tab .layui-tab-title li {font-weight:bold;font-size:15px;} |
|||
.layui-side .layui-tab .layui-tab-title .layui-this {color:#1890ff;} |
|||
.layui-side .layui-tab .layui-tab-title .layui-this::after {height: 41px;} |
|||
.layui-side.edoc-side-w280 .layui-tab .layui-tab-title li{margin: 0 10px;} |
|||
.layui-side.edoc-side-w220 .layui-tab .layui-tab-title li{margin: 0;} |
|||
.layui-side.edoc-side-w250 .layui-tab .layui-tab-title li{margin: 0 5px;} |
|||
|
|||
/* 对 disabled 样式重新定义 */ |
|||
.layui-disabled.layui-input, .layui-disabled.layui-textarea{background:#f5f5f5 !important;border-color: #bfbfbf !important; color: #6a6d70 !important;} |
|||
.layui-disabled.layui-radio-disbaled{background:none !important;color: #74777a !important;} |
|||
.layui-radio-disbaled>i{color: #bfbfbf !important;background-color: #f5f5f5 !important;} |
|||
.layui-disabled.layui-form-switch.layui-checkbox-disbaled{background:#E5E5E5;border-color: #E5E5E5;} |
|||
.layui-disabled.layui-checkbox-disbaled.layui-form-checked i {color:#74777a !important;} |
|||
.layui-disabled.layui-checkbox-disbaled[lay-skin="primary"] i {background-color:#f5f5f5 !important;color:#f5f5f5 !important;} |
|||
.layui-disabled.layui-checkbox-disbaled[lay-skin="primary"]:hover i{border-color: #bfbfbf !important;} |
|||
.layui-disabled.layui-checkbox-disbaled[lay-skin="primary"].layui-form-checked i {background-color:#f5f5f5 !important;color: #bfbfbf !important;border-color: #bfbfbf !important;} |
|||
.layui-disabled.layui-checkbox-disbaled[lay-skin="_switch"] i {background-color: #ffffff !important;} |
|||
.layui-disabled.layui-checkbox-disbaled[lay-skin="_switch"].layui-form-onswitch i {background-color:#FFFFFF !important;} |
|||
/*重写layui.css样式区*/ |
|||
|
|||
/*border边框*/ |
|||
.edoc-border { border: 1px solid #d9d9d9;} |
|||
.edoc-border-t {border-top: 1px solid #d9d9d9;} |
|||
.edoc-border-r {border-right: 1px solid #d9d9d9;} |
|||
.edoc-border-b {border-bottom: 1px solid #d9d9d9;} |
|||
.edoc-border-l {border-left: 1px solid #d9d9d9;} |
|||
.edoc-border-tb {border-top: 1px solid #d9d9d9;border-bottom: 1px solid #d9d9d9;} |
|||
.edoc-border-lr {border-left: 1px solid #d9d9d9;border-right: 1px solid #d9d9d9;} |
|||
|
|||
/*padding边距*/ |
|||
.edoc-padding-l-0 { padding-left: 0 !important;} |
|||
.edoc-padding-l-5 { padding-left: 5px !important;} |
|||
.edoc-padding-l-10 { padding-left: 10px !important;} |
|||
.edoc-padding-l-15 { padding-left: 15px !important;} |
|||
.edoc-padding-r-0 { padding-right: 0 !important;} |
|||
.edoc-padding-r-5 { padding-right: 5px !important;} |
|||
.edoc-padding-r-10 { padding-right: 10px !important;} |
|||
.edoc-padding-r-15 { padding-right: 15px !important;} |
|||
.edoc-padding-t-0 { padding-top: 0 !important;} |
|||
.edoc-padding-t-5 { padding-top: 5px !important;} |
|||
.edoc-padding-t-10 { padding-top: 10px !important;} |
|||
.edoc-padding-t-15 { padding-top: 15px !important;} |
|||
.edoc-padding-b-0 { padding-bottom: 0 !important;} |
|||
.edoc-padding-b-5 { padding-bottom: 5px !important;} |
|||
.edoc-padding-b-10 { padding-bottom: 10px !important;} |
|||
.edoc-padding-b-15 { padding-bottom: 15px !important;} |
|||
.edoc-padding-lr-0 { padding-left: 0 !important; padding-right: 0 !important;} |
|||
.edoc-padding-lr-5 { padding-left: 5px !important; padding-right: 5px !important;} |
|||
.edoc-padding-lr-10 { padding-left: 10px !important; padding-right: 10px !important;} |
|||
.edoc-padding-lr-15 { padding-left: 15px !important; padding-right: 15px !important;} |
|||
|
|||
/*margin边距*/ |
|||
.edoc-margin-l-0 { margin-left: 0 !important;} |
|||
.edoc-margin-l-5 { margin-left: 5px !important;} |
|||
.edoc-margin-l-10 { margin-left: 10px !important;} |
|||
.edoc-margin-l-15 { margin-left: 15px !important;} |
|||
.edoc-margin-l-30 { margin-left: 30px !important;} |
|||
.edoc-margin-r-0 { margin-right: 0 !important;} |
|||
.edoc-margin-r-5 { margin-right: 5px !important;} |
|||
.edoc-margin-r-10 { margin-right: 10px !important;} |
|||
.edoc-margin-r-15 { margin-right: 15px !important;} |
|||
.edoc-margin-r-30 { margin-right: 30px !important;} |
|||
.edoc-margin-t-0 { margin-top: 0 !important;} |
|||
.edoc-margin-t-5 { margin-top: 5px !important;} |
|||
.edoc-margin-t-10 { margin-top: 10px !important;} |
|||
.edoc-margin-t-15 { margin-top: 15px !important;} |
|||
.edoc-margin-t-30 { margin-top: 30px !important;} |
|||
.edoc-margin-b-0 { margin-bottom: 0 !important;} |
|||
.edoc-margin-b-5 { margin-bottom: 5px !important;} |
|||
.edoc-margin-b-10 { margin-bottom: 10px !important;} |
|||
.edoc-margin-b-15 { margin-bottom: 15px !important;} |
|||
.edoc-margin-b-30 { margin-bottom: 30px !important;} |
|||
.edoc-margin-lr-0 { margin-left: 0 !important; margin-right: 0 !important;} |
|||
.edoc-margin-lr-5 { margin-left: 5px !important; margin-right: 5px !important;} |
|||
.edoc-margin-lr-10 { margin-left: 10px !important; margin-right: 10px !important;} |
|||
.edoc-margin-lr-15 { margin-left: 15px !important; margin-right: 15px !important;} |
|||
.edoc-margin-lr-30 { margin-left: 30px !important; margin-right: 30px !important;} |
|||
|
|||
/* 通用宽度 */ |
|||
.edoc-width-xs{width: 104px !important;} |
|||
.edoc-width-s{width: 216px !important;} |
|||
.edoc-width-m{width: 328px !important;} |
|||
.edoc-width-l{width: 440px !important;} |
|||
.edoc-width-xl{width: 552px !important;} |
|||
|
|||
/*灰色说明性文字*/ |
|||
.edoc-introduce{color: #32363a;font-size:12px;font-style: normal;font-weight: 400;margin-left: 15px;} |
|||
.edoc-form-header .edoc-introduce {font-size: 14px;color:#8c8c8c;vertical-align: top;} |
|||
|
|||
/*操作链接增加下划线*/ |
|||
.edoc-underline{display: inline;border-bottom: 1px #1890ff solid;text-decoration: none !important; } |
|||
|
|||
/* 定义占位文字样式 */ |
|||
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #bfbfbf; opacity: 1; } |
|||
input:-moz-placeholder, textarea:-moz-placeholder { color: #bfbfbf; opacity: 1; } |
|||
input::-moz-placeholder, textarea::-moz-placeholder { color: #bfbfbf; opacity: 1; } |
|||
input:-ms-input-placeholder, textarea:-ms-input-placeholder { color: #bfbfbf; opacity: 1; } |
|||
|
|||
/* 主体内容区域内边距 */ |
|||
.edoc-body-padding{padding:15px;} |
|||
|
|||
/* 页面背景 */ |
|||
body {background-color:#FFFFFF;overflow:hidden;} |
|||
/* 页面主外框 */ |
|||
.layui-main {position:absolute;top:0;right:0;bottom:0;left:0;margin:0;width:auto;background:#f2f2f2;} |
|||
/* 页面头部区域(内部含左右布局) */ |
|||
.layui-header {line-height:44px;height:50px;} |
|||
.layui-header .layui-layout-left {left:0;bottom:0;margin:2px 0 0 18px;font-size:20px;font-weight:bold;color:#32363a;} |
|||
.layui-header .layui-layout-right {bottom:0;margin-right:10px;} |
|||
.layui-header .layui-layout-right .far.fa-question-circle{font-size:16px;cursor:pointer;color:#6a6d70;} |
|||
|
|||
/* 左侧头部帮助图标 */ |
|||
.edoc_helpManage_Icon{background: none;padding: 0px;display: inline-block;vertical-align: middle;} |
|||
.edoc_helpManage_Icon>.layui-nav-bar{display: none;} |
|||
.edoc_helpManage_Icon>.layui-nav-item{line-height: 52px;} |
|||
.edoc_helpManage_Icon>.layui-nav-item>a{padding: 0px;} |
|||
.edoc_helpManage_Icon>.layui-nav-item>dl.layui-nav-child{top: 40px;position: fixed;min-width: auto;} |
|||
.edoc_helpManage_Icon>.layui-nav-item>dl.layui-nav-child a{cursor: pointer;} |
|||
.edoc_helpManage_Icon .layui-nav-child dd.layui-this{background: none;} |
|||
.edoc_helpManage_Icon .layui-nav-child dd.layui-this a{background: none;color: #333333;} |
|||
.edoc_helpManage_Icon .far.fa-question{font-weight: 900;font-size:14px;cursor:pointer;color:#74777a;} |
|||
.edoc-side-w280 .edoc_helpManage_Icon>.layui-nav-item>dl.layui-nav-child{left: 254px;} |
|||
.edoc-side-w250 .edoc_helpManage_Icon>.layui-nav-item>dl.layui-nav-child{left: 224px;} |
|||
.edoc-side-w220 .edoc_helpManage_Icon>.layui-nav-item>dl.layui-nav-child{left: 194px;} |
|||
/* 页面侧边区域 */ |
|||
.layui-side {position:absolute;} |
|||
.layui-side.edoc-side-w220{width:220px;} |
|||
.layui-side.edoc-side-w250{width:250px;} |
|||
.layui-side.edoc-side-w280{width:280px;} |
|||
.layui-side.down-left {top:50px;padding:10px;box-sizing:border-box;} |
|||
.layui-side hr{margin:5px 0px;} |
|||
.layui-side hr.first{margin-top:0;display:none;} |
|||
.layui-side .layui-tab .layui-tab-title{margin:0 10px;} |
|||
.layui-side .layui-tab .layui-tab-title li{padding:0 1px;} |
|||
.layui-side .layui-tab .layui-tab-content{padding:5px 0;} |
|||
.layui-side .layui-side-addnew{margin: 0 10px 10px 28px;line-height: 40px;height: 40px;font-size: 14px;color: #333333;cursor: pointer;} |
|||
.layui-side.edoc-border-r{border-width:0px;} |
|||
|
|||
/* 页面主内容区域 */ |
|||
.layui-body{background:#fff;margin:15px 15px 15px 7px;box-shadow:0 4px 6px 0 rgba(31,31,31,0.05),0 0 2px 0 rgba(31,31,31,0.2);} |
|||
.layui-body.edoc-body-w220{left:220px;} |
|||
.layui-body.edoc-body-w250{left:250px;} |
|||
.layui-body.edoc-body-w280{left:280px;} |
|||
.layui-body.down {left:0;top:50px;background-color:#f2f2f2;} |
|||
.layui-body.down-right {top:50px;} |
|||
.layui-body.full {left: 0;} |
|||
.layui-body .layui-table-view{margin:10px 0 0 0;} |
|||
|
|||
/* 表格区域 */ |
|||
.edoc-table-wrap{position:relative;} |
|||
/* 表格头部按钮行区域 */ |
|||
.edoc-table-top-block {position:relative;height:30px;} |
|||
.edoc-table-top-block .layui-layout-left {left:0;} |
|||
/* 表格头部按钮行区域 -- 批量操作菜单 */ |
|||
.edoc-table-top-block .layui-nav {background-color:#FFFFFF;color:#333333;height:30px;padding:0;display:inline-block;border:1px solid #bfbfbf;vertical-align:5px;z-index:999;} |
|||
.edoc-table-top-block .layui-nav-bar {display:none;} |
|||
.edoc-table-top-block .layui-nav .layui-nav-item {line-height:30px;width:90px;box-sizing: border-box;} |
|||
.edoc-table-top-block .layui-nav .layui-nav-item>a {color:#32363a;font-size:12px;text-align:left;margin-right: 12px;padding: 0 12px;} |
|||
.edoc-table-top-block .layui-nav .layui-nav-more {border-top-color:#74777a;right:12px;} |
|||
.edoc-table-top-block .layui-nav-child {top:31px;padding:0;} |
|||
.edoc-table-top-block .layui-nav-child hr{padding:0;margin:0;} |
|||
/* 表格头部按钮行区域 -- 按钮容器 */ |
|||
.edoc-table-top-block .layui-btn-container {display: inline-block;margin-left:15px;} |
|||
/* 表格头部按钮行区域 -- 下拉框容器 */ |
|||
.edoc-table-top-block .edoc-table-select {display: inline-block ;vertical-align: middle; margin-left:10px;} |
|||
/* 表格头部按钮行区域 -- 下拉框 */ |
|||
.edoc-table-top-block .layui-form-select .layui-input{height: 30px;text-align:left;} |
|||
/* 表格头部按钮行区域 -- 搜索框样式 */ |
|||
.edoc-table-top-block .edoc-table-searchBox{float:right;} |
|||
.edoc-table-top-block .edoc-table-searchBox i{position:relative;left:27px;z-index:999;color: #74777a;} |
|||
.edoc-table-top-block .layui-input-search {position:relative;display:inline-block;width:512px;height:30px;border:1px solid #bfbfbf;padding: 0 10px 0 30px;} |
|||
.edoc-table-top-block .layui-input-search+i {position:absolute;top:7px;left:10px;color: #6a6d70;z-index: 1000;font-size: 12px;} |
|||
.edoc-table-top-block .layui-btn-link{margin:0 14px;} |
|||
.edoc-table-top-block .layui-btn-link.open .layui-btn-link-more{top: 1px;border-color:transparent transparent #797979;} |
|||
.edoc-table-top-block .layui-btn-link.open:hover .layui-btn-link-more{border-color:transparent transparent #0066CC;} |
|||
.edoc-table-top-block .edoc-btn-search {margin-left:2px;vertical-align:top;} |
|||
/* 表格头部按钮行区域 -- radio过滤容器 */ |
|||
.edoc-table-top-block .edoc-table-status{float: right;margin-top: -5px;} |
|||
/* 表格头部按钮行区域 -- 列过滤样式 */ |
|||
.edoc-table-top-block .cols-filter{ width:30px; height: 30px; border: 1px solid #bfbfbf; color: #6a6d70; margin-left: 10px; padding: 3px; cursor: pointer;position: relative; display: inline-block;} |
|||
.edoc-table-top-block .cols-filter .layui-table-tool-panel{left:auto;right:-1px;} |
|||
/* 表格头部高级搜索区域 */ |
|||
.edoc-advance-query-block{margin-top:15px;transition:height .2s;-webkit-transition:height .2s;} |
|||
.edoc-advance-query-block.edoc-hide{height:0;margin:0;border-width:0;overflow:hidden;} |
|||
.edoc-advance-query-block.edoc-show{height:200px;} |
|||
/* 强行调整原生表格工具栏的位置 */ |
|||
/* .edoc-table-wrap .layui-table-tool{position:absolute;width:30px;top:0;right:0;background-color:transparent;padding:0;min-height:30px;border:none;} |
|||
.edoc-table-wrap .layui-table-tool .layui-table-tool-temp{display:none;} |
|||
.edoc-table-wrap .layui-table-tool .layui-table-tool-self{top:0;right:0;} |
|||
.edoc-table-wrap .layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{width:30px;height:30px;margin:0;} |
|||
.edoc-table-wrap .layui-table-tool .layui-table-tool-self .layui-inline[lay-event]:hover{border-color:#0066CC;color:#0066CC;} */ |
|||
/* 无头表格头部行样式 */ |
|||
.edoc-table-wrap .layui-table-view.edoc-noheader{border:none;} |
|||
.edoc-table-wrap .layui-table-view.edoc-noheader .layui-table-header{background:none;border:none;} |
|||
.edoc-table-wrap .layui-table-view.edoc-noheader .layui-table-header tr{background:none;} |
|||
.edoc-table-wrap .layui-table-view.edoc-noheader .layui-table-header th{color:#999999;font-style:italic} |
|||
/* 定义表格操作列更多按钮样式 */ |
|||
.edoc-table-more-btn-wrap { display:none; position:absolute; box-shadow:0 2px 4px rgba(0,0,0,.12); border:1px solid #d2d2d2; background-color:#fff; border-radius:2px; box-sizing:border-box; color:#333333; font-size:14px; line-height:36px; text-align:left; white-space:nowrap; z-index:999; } |
|||
.edoc-table-more-btn-wrap .edoc-table-more-btn{cursor:pointer;padding:0 10px;} |
|||
.edoc-table-more-btn-wrap .edoc-table-more-btn:not(.layui-disabled):hover {background-color:#f2f2f2;} |
|||
.edoc-table-more-btn-wrap .edoc-table-more-btn.haschild{position:relative;padding-right:26px;} |
|||
.edoc-table-more-btn-wrap .edoc-table-more-btn.haschild span{padding-right:5px;} |
|||
/* .edoc-table-more-btn-wrap .edoc-table-more-btn.haschild .edoc-table-more-btn-wrap{left:97%;} */ |
|||
.edoc-table-more-btn-wrap .edoc-table-more-btn i{position:absolute;right:10px;} |
|||
.edoc-table-more-btn-wrap hr {padding:0;margin:0;} |
|||
/* 表格头部行内图标样式 */ |
|||
.edoc-table-wrap .layui-table-header .layui-icon{font-size:14px;padding-left: 3px;} |
|||
/* 表格头部行内全选框样式 */ |
|||
.edoc-table-wrap .layui-table-header .layui-icon.layui-icon-ok{padding-left: 0px;} |
|||
/* 表格内容悬浮按钮样式 */ |
|||
.table-cell-auto-link{display:none;} |
|||
.layui-table-hover .table-cell-auto-link{display:inline-block;} |
|||
.layui-table-cell .layui-input{height:28px;margin-top:6px;} |
|||
/* 业务数据表格预览内容样式 */ |
|||
.edoc-preview-window{display:none;padding:10px 20px;} |
|||
/* 表格内部的radio样式 */ |
|||
.layui-table-view .layui-form-radio > i{margin: 0 2px 0 0;line-height: 28px;} |
|||
.layui-table-view .layui-form-switch, .layui-table-view .layui-form-checkbox, .layui-table-view .layui-form-radio{margin: 0 5px 0 0;} |
|||
.layui-table tbody .layui-form-switch{height: 20px;line-height: 20px;width: 35px;} |
|||
.layui-table tbody tr td[align="center"] .layui-form-switch{margin-left: 0;margin-right: 0; display: inline-block;} |
|||
/* 表格的单选框列,复选框列的样式 */ |
|||
.laytable-cell-checkbox {padding:12px 16px 10px;} |
|||
.laytable-cell-radio{padding:6px 10px;} |
|||
.laytable-cell-checkbox .layui-form-checkbox,.laytable-cell-radio .layui-form-radio{margin: 0 !important;padding: 0 !important;display: block !important;} |
|||
/* 表格的固定列的隐藏滚动条样式 */ |
|||
.layui-table-body.soul-fixed-scroll{overflow: hidden !important;} |
|||
/* 表格的分页 */ |
|||
/* .layui-table-page > div,.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{margin-left:10px;} */ |
|||
.layui-table-page .layui-laypage input{margin-top: 0px;} |
|||
.layui-table-page .layui-laypage button{line-height: 22px;} |
|||
.layui-table-page .layui-laypage-limits select[lay-ignore] ,.layui-table-view .layui-table-page select[lay-ignore] {background-color: #fff;} |
|||
.layui-table-page .layui-laypage input::-webkit-outer-spin-button, |
|||
.layui-table-page .layui-laypage input::-webkit-inner-spin-button {-webkit-appearance: none;} |
|||
.layui-table-page .layui-laypage input[type="number"]{-moz-appearance: textfield;} |
|||
.layui-table-page .layui-laypage input {width: 58px;} |
|||
.layui-table-page .layui-laypage .layui-laypage-refresh{margin-left: 0px;} |
|||
.layui-table-page .layui-laypage .layui-laypage-refresh{padding: 0px 5px;} |
|||
/* 表格头部排序按钮 */ |
|||
.layui-table-sort .layui-edge{left:0;} |
|||
.layui-table-sort .layui-table-sort-asc{border-bottom-color: #bfbfbf;} |
|||
.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color: #6A6D70;} |
|||
.layui-table-sort .layui-table-sort-desc{border-top-color: #bfbfbf;} |
|||
.layui-table-sort .layui-table-sort-desc:hover{border-top-color: #6a6d70;} |
|||
.layui-table-sort[lay-sort="asc"] .layui-table-sort-asc{border-bottom-color: #6A6D70;} |
|||
.layui-table-sort[lay-sort="desc"] .layui-table-sort-desc{border-top-color: #6a6d70;} |
|||
/* 表格底部分页 */ |
|||
.layui-table-page .layui-laypage button{line-height: 23px;} |
|||
|
|||
|
|||
/* 添加新的按钮样式 */ |
|||
.edoc-btn:hover{opacity: 1 !important;} |
|||
.layui-btn:hover{opacity: 1 !important;} |
|||
.edoc-btn.layui-btn-primary{background-color: #ffffff;} |
|||
.layui-btn-link{position:relative;display:inline-block;height:25px;line-height:30px;margin-left:5px;color:#1890ff;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;} |
|||
.layui-btn-link.gray{color:#797979;} |
|||
.layui-btn-link:hover{color:#40a9ff;} |
|||
.layui-btn-link .layui-btn-link-more{position:absolute;top:12px;right:-14px;content:'';display:block;width:0;height:0;border-width:6px;border-style:solid;border-color:#797979 transparent transparent;overflow:hidden;cursor:pointer;transition:all .2s;-webkit-transition:all .2s;} |
|||
.layui-btn-link:hover .layui-btn-link-more{border-color:#1890ff transparent transparent;} |
|||
|
|||
|
|||
/* 字段集区块样式 */ |
|||
/* .layui-elem-field {margin: 0;border-color: #e2e2e8;} */ |
|||
/* .layui-elem-field legend {margin:0 30px;padding:3px 10px; font-size:16px; color: #999999;background:#f2f2f2; } */ |
|||
/* .layui-elem-field legend a{color: #999999;} */ |
|||
/* .layui-field-title {border-style:dashed;} */ |
|||
.layui-elem-field {border-color: #d9d9d9;} |
|||
.layui-elem-field legend {font-size: 20px;color: #32363a;} |
|||
.layui-elem-field legend a{color: #32363a;cursor: auto;} |
|||
|
|||
/* 内容分区块 */ |
|||
.edoc-card .layui-card-header{height:16px;line-height:16px;font-style: normal;color:#000;font-size: 16px;padding: 0px;border: 0px;} |
|||
.edoc-card{padding: 0px 0px 30px 0px;margin:0px;box-shadow:none;} |
|||
.edoc-card .edoc-introduce{font-size: 14px;color: #8c8c8c;margin-left: 15px;} |
|||
.edoc-card .layui-card-body{padding: 0px;margin-top: 15px;color: #32363a;line-height: 14px;font-size: 14px;} |
|||
.edoc-card .layui-card-body>li{margin-top: 15px;} |
|||
.edoc-card a{color: #1890ff;} |
|||
/* 内容分区块边框和单选框测试样式 */ |
|||
.edoc-test1{border: 1px solid #d7d7d7;width: 600px;margin-top: 20px;margin-left: 20px;padding: 15px;} |
|||
.edoc-card .layui-form-radio{display: block;} |
|||
|
|||
/*栏目或分类*/ |
|||
.edoc-navOpt {background-color:#f2f2f2;width:auto;margin: 0;} |
|||
/* 栏目的效果 */ |
|||
.edoc-navOpt>.layui-nav-item {line-height:45px;position: relative;} |
|||
.edoc-navOpt .layui-nav-item>a:hover{background: none;} |
|||
.edoc-navOpt .layui-nav-item a{color:#32363a;height:45px;line-height:45px;padding-left:25px;box-sizing: border-box;transition: none;-webkit-transition: none;overflow: visible;} |
|||
.edoc-navOpt .layui-nav-item a:first-child>p{display: inline-block;vertical-align: top;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;max-width: 100px;} |
|||
.edoc-navOpt .layui-this>a:before {content:"";position:absolute;top:0px;right:0px;bottom:0px;width:4px;height:100%;margin-top:0px;z-index:1;} |
|||
.edoc-navOpt>.layui-this{background: none !important;} |
|||
.edoc-navOpt a>i{display: inline-block;height: 45px;line-height: 48px;padding-right: 10px;vertical-align: top;} |
|||
.edoc-navOpt a>i.fa-square-full{font-weight: bold;} |
|||
.edoc-navOpt a>i:first-child{width: 18px;box-sizing: border-box;color: #6a6d70;font-size: 8px;} |
|||
/* 个性化图标 */ |
|||
.edoc-navOpt.special_icon a>i{font-size: 14px;line-height: 45px;} |
|||
.edoc-navOpt.special_icon a>i:first-child{width: 24px;} |
|||
|
|||
/* 二级栏目效果 */ |
|||
.edoc-navOpt>.layui-nav-bar {display: none;} |
|||
.edoc-navOpt .layui-nav-itemed:hover{background-color:#f2f2f2;} |
|||
.edoc-navOpt .layui-nav-itemed:hover>a{color: #1890ff;} |
|||
.edoc-navOpt>.layui-nav-itemed dd{border-width:0;} |
|||
.edoc-navOpt>.layui-nav-itemed dd:hover{background:none;} |
|||
.edoc-navOpt>.layui-nav-itemed dd a:first-child{padding-left:50px;background-color: #f2f2f2;color: #32363a !important;} |
|||
.edoc-navOpt>.layui-nav-itemed>a{color:#32363a!important;} |
|||
.edoc-navOpt>.layui-nav-itemed>.layui-nav-child{background-color: #f2f2f2 !important;} |
|||
.edoc-navOpt>.layui-nav-itemed .edoc-nav-addnew{background-color: #f2f2f2;} |
|||
.edoc-navOpt>.layui-nav-itemed .edoc-nav-addnew.layui-this a:before{content: "";position: absolute;top: 0px;left: 2px;bottom: 0px;width: 4px;height: 100%;margin-top: 0px;background-color: #f2f2f2;z-index: 1;} |
|||
.edoc-navOpt>.layui-nav-itemed .edoc-nav-addnew .layui-btn-link{color: #1890ff;background-color: #f2f2f2;padding-left: 36px;} |
|||
.edoc-navOpt .layui-nav-child{background-color: #f2f2f2 !important;} |
|||
/* 三级栏目 */ |
|||
.edoc-navOpt>.layui-nav-item>.layui-nav-child .layui-nav-child a{padding:0px 20px 0px 70px;margin: 0px;} |
|||
.edoc-navOpt>.layui-nav-item>.layui-nav-child .layui-nav-child .edoc-nav-addnew .layui-btn-link{color: #1890ff !important;} |
|||
/* 带子栏目项的箭头 */ |
|||
.edoc-navOpt.layui-nav .layui-nav-more{border: none;font-size: 16px;right: 20px;top:16px;height: 12px;width: 10px;border-width: 0px;margin: 0px !important;color: #6a6d70;} |
|||
/* 栏目中每项的右侧元素 */ |
|||
.edoc-navOpt .layui-nav-item .edoc-navOpt-r{color: #bb0000;font-style: normal;width: auto;} |
|||
/* 操作图标 */ |
|||
.edoc-navOpt .edoc-navOpt-more{padding: 0px;position: absolute;top: 0px;right: 10px;} |
|||
.edoc-nav-icon{display: inline-block;vertical-align: top;height: 20px;position: relative;top: 15px;line-height: 17px;padding-left: 10px;} |
|||
.edoc-nav-icon>.layui-icon{padding: 8px 2px;} |
|||
.edoc-nav-icon>.layui-icon-more{padding: 8px;} |
|||
.edoc-nav-icon.edoc-nav-icon-show{float: right;padding: 5px 0 0 5px;height: 30px;margin-top: -5px;margin-right: -8px;} |
|||
/* 悬浮菜单 */ |
|||
.edoc-navOpt #twoNavOpt .layui-anim{background-color: #fff;box-shadow: 0 2px 4px rgba(0,0,0,.1);border: 1px solid #d9d9d9;border-radius: 2px;} |
|||
.edoc-navOpt #twoNavOpt .layui-anim>div{padding-left: 15px;} |
|||
.edoc-navOpt #twoNavOpt>div{position: fixed;text-align: left;line-height: 36px;background-color: rgba(0,0,0,0);box-sizing: border-box;color: #32363a;font-size: 12px;z-index: 999;right: 5px;visibility: hidden;} |
|||
.edoc-navOpt #twoNavOpt .layui-anim>div:hover{background-color: #f5f5f5;cursor: pointer;} |
|||
|
|||
|
|||
/* 时间线 */ |
|||
.timeLine-demo{width: 350px;height: 500px;padding: 20px 10px;border: 1px solid #cccccc;margin: 20px;float: left;} |
|||
.edoc-timeline>.layui-timeline-item{padding-bottom: 25px;} |
|||
.edoc-timeline>.layui-timeline-item>i{line-height: 20px;} |
|||
.edoc-timeline>li>.layui-icon{font-size: 14px;} |
|||
.edoc-timeline>li>.layui-text>.layui-timeline-title{font-weight: 400; font-style: normal; color: #74777a;} |
|||
.edoc-timeline>.edoc-timeline-item-last:before{ display: none;} |
|||
.edoc-timeline .layui-text {line-height: 18px;padding-left: 26px;} |
|||
.edoc-timeline>.layui-timeline-item .edoc-timeline-content{color: #32363a;} |
|||
.layui-timeline-axis:hover{color: #1890ff;} |
|||
.edoc-timeline .fas.fa-check-circle, |
|||
.edoc-timeline .fas.fa-times-circle, |
|||
.edoc-timeline .fas.fa-paper-plane{font-weight: 400;font-size: 18px;height: 38px;line-height: 38px;top: -8px;} |
|||
.edoc-timeline .edoc-timeline-endIcon.fas.fa-check-circle{font-weight: 900;} |
|||
.edoc-timeline .fas.fa-times-circle{color: #bb0000 !important;} |
|||
/* 时间线—标题—操作 */ |
|||
.edoc-timeline>.layui-timeline-item .edoc-timeline-title-opt{color: #6a6d70;font-size: 14px;} |
|||
.edoc-timeline>.layui-timeline-item .edoc-timeline-title-date{color: #74777a;font-size: 14px;font-family: Tahoma;} |
|||
.edoc-timeline>.layui-timeline-item .edoc-timeline-title-user{color: #74777a;font-size: 14px;} |
|||
|
|||
|
|||
|
|||
/* --分界线-- */ |
|||
/* 表单页面,上下结构 */ |
|||
.edoc-form .layui-input,.edoc-form .layui-textarea,.edoc-form .layui-select{height: 35px;line-height: 35px;margin-top: 15px;} |
|||
.edoc-sign-red{color: #bb0000;margin-left: 5px;} |
|||
.edoc-form-header{width:100%;margin: 0px 0px 0px 0px;height:16px;line-height: 16px;} |
|||
.edoc-form .layui-form-label{width:auto;color: #000;text-align: left;padding: 0px;font-size:16px;line-height: 18px;margin-top: -2px;} |
|||
.edoc-form .layui-form-item{padding: 0px 0px 10px 0px;margin-bottom: 0px;} |
|||
.edoc-form .edoc-form-two{float: left;width: 50%;} |
|||
/* .edoc-form input{color: #32363a;} */ |
|||
.edoc-form .layui-form-radio {margin-top: 15px;line-height: 14px;} |
|||
.layui-checkbox-disbaled[lay-skin="primary"] span{color: #32363a;} |
|||
.edoc-form .layui-form-checkbox[lay-skin="primary"] i{width: 16px;height: 16px;line-height: 16px;font-size: 10px;font-weight: 900;box-sizing: border-box;} |
|||
/* 表单多选框、下拉框、单选框*/ |
|||
.edoc-form .layui-form-item .layui-form-checkbox[lay-skin="primary"]{margin-top: 15px;padding-left: 24px;min-height: 14px;} |
|||
.edoc-form div[lay-skin='primary']{display: block;padding-top:0px;} |
|||
.edoc-form div[lay-skin='primary'] .layui-icon{top: -1px;} |
|||
.edoc-form .layui-form-select .layui-anim{top: 37px;border-color: #d9d9d9;box-shadow:0 2px 4px rgba(0,0,0,.1)} |
|||
.edoc-form .layui-form-selectup .layui-anim{top: auto !important;bottom: 37px;} |
|||
.edoc-table-top-block .edoc-form .layui-form-select .layui-anim{top: 32px;} |
|||
.edoc-form .layui-form-radio{display: block;} |
|||
.edoc-form div[lay-skin='primary']>i{position: absolute;} |
|||
.edoc-form .layui-form-checkbox{display: block;margin-top: 15px;} |
|||
.edoc-form .layui-form-checkbox[lay-skin="primary"]{padding-left: 24px;} |
|||
.edoc-form .layui-form-checkbox>i{position: relative;} |
|||
.edoc-form .layui-form-switch{display: block;height: 20px;line-height: 20px;} |
|||
.edoc-form .layui-form-danger.layui-input:hover, .layui-form-danger.layui-textarea:hover{border-color: #bb0000 !important;} |
|||
.edoc-form select.layui-form-danger+.layui-form-select .layui-input{border-color: #d9d9d9;} |
|||
.layui-form-radio *{color: #32363a;} |
|||
.edoc-form .layui-form-radio.layui-disabled div{color: #32363a;} |
|||
.edoc-form .layui-textarea{color: #32363a;min-height: 98px;line-height:22px;padding: 4px 12px;resize:none;} |
|||
.layui-form-danger:focus, .layui-form-danger+.layui-form-select .layui-input{border-color: #bb0000 !important;} |
|||
/* 按钮 */ |
|||
.edoc-form .layui-btn{border-radius: 2px;} |
|||
.edoc-form .layui-btn:hover{opacity: 1; filter:alpha(opacity=100); color: #fff;} |
|||
.edoc-form .layui-btn:active{opacity: 1; filter:alpha(opacity=100);} |
|||
/* 图标区 */ |
|||
.edoc-form .edoc-form-icon{position: absolute;top: 40px;right: 7px;width: 38px;height: 38px;line-height:38px;display: inline-block;text-align: center;} |
|||
.edoc-form .layui-col-xs6 .edoc-form-icon+input{padding-right: 32px;} |
|||
.edoc-form i.layui-icon-triangle-d+input,.edoc-form i.layui-icon-triangle-d+input{padding-right: 32px;} |
|||
/* 错误提示 */ |
|||
.edoc-form .edoc-error-hint{height: 20px;line-height:20px;color:#bb0000;display:block;margin-top: 0px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;} |
|||
.layui-form-danger{border-color: #bb0000 !important;} |
|||
/* 外边框 */ |
|||
.edoc-test2{padding: 15px;width:100%;box-sizing:border-box;} |
|||
|
|||
|
|||
/* ---- */ |
|||
/*普通弹窗一*/ |
|||
.edoc-dialog-body {padding: 0px 0px 59px 0px !important;height: 100%;} |
|||
.edoc-dialog-content {overflow-y: auto;height: 100%;padding: 30px 30px 0 30px;} |
|||
.edoc-dialog-bottom {position: fixed;bottom: 0px;width: 100%;padding: 11px 15px 11px 15px;border-top: 1px solid #d9d9d9;background-color: #fff;} |
|||
.edoc-dialog-bottom .layui-inline{float: right;} |
|||
.edoc-dialog-bottom .edoc-dialog-bottom-left{float: left;margin-left: 15px;} |
|||
.edoc-dialog-bottom .edoc-dialog-bottom-left .layui-form-checkbox[lay-skin="primary"]{margin-top: 10px;} |
|||
.edoc-dialog-layui-input-block {margin-left: 0px;} |
|||
.edoc-dialog-bottom .edoc-dialog-btn{height: 35px;min-width: 50px;float: left;font-size: 15px;padding: 0 14px;} |
|||
.edoc-dialog-bottom .edoc-dialog-btn>span:first-child{padding-right: 10px;} |
|||
.edoc-dialog-btn+.edoc-dialog-btn{margin-left: 10px;} |
|||
/*普通弹窗二*/ |
|||
.edoc-dialog-body-only {padding: 0px;height: 100%;} |
|||
.edoc-dialog-body form{height: 100%;} |
|||
|
|||
/* 表格内的tips */ |
|||
.layui-table-tips .layui-table-tips-c.layui-icon-close{box-sizing: unset;} |
|||
|
|||
/* 表格的带下划线的tips*/ |
|||
/* .layui-table-tips .layui-layer-content .layui-table-tips-main span.edoc-underline{text-decoration: underline !important;border-bottom: none;} */ |
|||
/* 表格题名链接 */ |
|||
.edoc-table-wrap .layui-table td[data-field="title"] .edoc-underline { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; max-width: 100%; margin-top: 2px; } |
|||
/* 弹窗预览 */ |
|||
.edoc-iframe-item{height: 100%;width: 100%;border: none;} |
|||
.edoc-iframe{border: 1px solid #cccccc;margin: 15px;} |
|||
.layui-layer-prompt .layui-layer-input{width: 300px !important;} |
|||
|
|||
/* 输入弹窗地址 */ |
|||
.layui-layer .layui-layer-title{color: #6a6d70;font-weight: bold;} |
|||
.layui-layer .layui-layer-setwin{right: 17px;} |
|||
div.layui-layer-prompt .layui-layer-content{padding: 30px 30px 25px;} |
|||
div.layui-layer-prompt .layui-layer-btn{padding-bottom: 30px;} |
|||
div.layui-layer-prompt .layui-layer-btn>a{height: 33px !important;line-height: 33px !important;} |
|||
|
|||
/* 块级标签 */ |
|||
.edoc-blocktag {display: inline-block; padding: 0 7px 0 10px; border: none; height: 35px;line-height: 35px; border-radius: 2px; background-color: #009688; color: #fff; white-space: nowrap; text-align: center;} |
|||
.edoc-blocktag .edoc-blocktag-label{max-width: 160px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;display: inline-block;} |
|||
.edoc-blocktag .edoc-blocktag-label,.edoc-blocktag .edoc-blocktag-icon .layui-icon {font-size: 14px;} |
|||
.edoc-blocktag-icon{cursor: pointer;} |
|||
.edoc-blocktag-primary { border: 1px solid #bfbfbf; background-color: #ffffff; color: #32363a; line-height: 33px;} |
|||
.edoc-blocktag-normal { background-color: #1E9FFF; color: #fff; } |
|||
.edoc-blocktag-warn { background-color: #FFB800; color: #fff; } |
|||
.edoc-blocktag-danger { background-color: #FF5722; color: #fff; } |
|||
.edoc-blocktag-disabled { background-color: #FBFBFB; color: #C9C9C9; border: 1px solid #e6e6e6; cursor: not-allowed; opacity: 1; line-height: 33px;} |
|||
.edoc-blocktag-green {background-color: #107e3e; color: #fff;} |
|||
.edoc-blocktag-darkGreen{ background-color: rgba(115, 209, 61, 1); color: #fff; cursor: default; } |
|||
.edoc-blocktag-lightGreen{ background-color: #F6FFED; color: #52C41A; border: 1px solid #B7EB8F;} |
|||
.edoc-blocktag-blue{ background-color: #0a6ed1; color: #FFFFFF; } |
|||
.edoc-blocktag-darkBlue{ background-color: #0a6ed1; color: #FFFFFF; } |
|||
.edoc-blocktag-orange{ background-color: #e9730c; color: #FFFFFF; } |
|||
.edoc-blocktag-red{ background-color: #bb0000; color: #fff; cursor: default; } |
|||
.edoc-blocktag-darkGrey{ background-color: #6a6d70; color: #fff; } |
|||
.edoc-blocktag-grey{ background-color: #f4f4f4; color: #6a6d70; cursor: default; border: 1px solid #6a6d70; } |
|||
/* 在表格中使用时——有边框,带浅色底 */ |
|||
.layui-table-body .edoc-blocktag-green{border: 1px solid #107e3e; color: #107e3e; background-color: #f1fdf6;} |
|||
.layui-table-body .edoc-blocktag-red{border: 1px solid #bb0000; color: #bb0000; background-color: #ffebeb;} |
|||
.layui-table-body .edoc-blocktag-darkBlue{border: 1px solid #0a6ed1; color: #0a6ed1; background-color: #f5faff;} |
|||
.layui-table-body .edoc-blocktag-blue{border: 1px solid #0a6ed1; color: #0a6ed1; background-color: #f5faff;} |
|||
.layui-table-body .edoc-blocktag-orange{border: 1px solid #e9730c; color: #e9730c; background-color: #fef7f1;} |
|||
.layui-table-body .edoc-blocktag-darkGrey{border: 1px solid #6a6d70; color: #6a6d70; background-color: #f4f4f4;} |
|||
.layui-table-body .edoc-blocktag.edoc-blocktag-xs{padding: 0 9px;} |
|||
/* 文字颜色 */ |
|||
.edoc-text-green{color: #107E3E !important;} |
|||
.edoc-text-orange{color: #E9730C !important;} |
|||
/* 块级标签—带边框 */ |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-darkGreen{background-color: #E6FFFB;border: 1px solid #87E8DE;color: #13C2C2;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-darkGreen .leftIcon{color: #35C5C2;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-lightBlue{background-color: #e6f7ff;border: 1px solid #91D5FF;color: #1890ff;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-lightBlue .leftIcon{color: #2594FF;margin-top: -1px;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-violet{background-color: #F9F0FF;border: 1px solid #D3ADF7;color: #722ED1;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-violet .leftIcon{color: #8F4CD3;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-pink{background-color: #FFF0F6;border: 1px solid #FFADD2;color: #F5317F;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-pink .leftIcon{color: #F53481;} |
|||
.edoc-blocktag.edoc-blocktag-border>span{float: left;line-height: 33px;} |
|||
.edoc-blocktag.edoc-blocktag-border>.edoc-blocktag-label{padding: 0 5px;} |
|||
/* 块级标签的大小 */ |
|||
.edoc-blocktag.edoc-blocktag-xs{ height: 21px;line-height: 20px;padding: 0 10px;} |
|||
.edoc-blocktag.edoc-blocktag-xs .edoc-blocktag-label{max-width: 130px;} |
|||
.edoc-blocktag.edoc-blocktag-xs .edoc-blocktag-label,.edoc-blocktag.edoc-blocktag-xs .edoc-blocktag-icon i {font-size: 11px;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-xs>span{line-height: 18px;} |
|||
|
|||
.edoc-blocktag.edoc-blocktag-sm{height: 30px;line-height: 30px;padding:0 5px 0 7px;} |
|||
.edoc-blocktag.edoc-blocktag-sm .edoc-blocktag-label,.edoc-blocktag.edoc-blocktag-sm .edoc-blocktag-icon i {font-size: 14px;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-sm>span{line-height: 28px;} |
|||
@-moz-document url-prefix() { |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-sm>span{line-height: 28px;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-xs>.edoc-blocktag-icon{margin-top: -1px;} |
|||
} |
|||
|
|||
.edoc-blocktag.edoc-blocktag-lg{height: 44px;line-height: 44px;padding: 0 9px 0 12px;} |
|||
.edoc-blocktag.edoc-blocktag-lg .edoc-blocktag-label,.edoc-blocktag.edoc-blocktag-lg .edoc-blocktag-icon i {font-size: 16px;} |
|||
.edoc-blocktag.edoc-blocktag-border.edoc-blocktag-lg>span{line-height: 42px;} |
|||
@-moz-document url-prefix() { |
|||
.edoc-blocktag.edoc-blocktag-xs{line-height: 18px !important;} |
|||
.edoc-blocktag-grey.edoc-blocktag-xs{line-height: 15px !important;} |
|||
.edoc-blocktag-lg{line-height: 42px !important;} |
|||
.edoc-blocktag-sm{line-height:30px !important;} |
|||
} |
|||
/* 微调图标 */ |
|||
.edoc-blocktag.edoc-blocktag-xs .edoc-blocktag-icon .fa-university{font-size: 12px;} |
|||
.edoc-blocktag.edoc-blocktag-xs .edoc-blocktag-icon .fa-user{font-size: 10px;} |
|||
.edoc-blocktag.edoc-blocktag-xs .edoc-blocktag-icon .fa-sitemap{font-size: 10px;} |
|||
.edoc-blocktag.edoc-blocktag-sm .edoc-blocktag-icon .fa-user{font-size: 13px;} |
|||
.edoc-blocktag.edoc-blocktag-sm .edoc-blocktag-icon .fa-sitemap{font-size: 12px;} |
|||
/* 文本域计算字数 */ |
|||
.edoc-word-up{float:right;position:relative;bottom:-5px;color: #74777a;} |
|||
|
|||
/* 穿梭框的传递按钮 */ |
|||
.layui-transfer-active .layui-btn{border: none;background-color: #fff;} |
|||
.layui-transfer-active .layui-btn .layui-icon{color: #1890ff;font-size: 18px!important;} |
|||
|
|||
/* 隐藏卡片的样式 */ |
|||
.edoc-hideCard { position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto;text-align: center; height: 30px; line-height: 30px; } |
|||
.edoc-hideCard-cardText { font-size: 16px; color: #32363a; } |
|||
.edoc-hideCard-cardText .layui-btn-link { margin-left: 10px; color: #1890ff;} |
|||
|
|||
/* 步骤条demo样式 */ |
|||
.step-item {display: inline-block;line-height: 26px;position: relative;background: #ffffff;} |
|||
.step-item-tail {width: 100%;padding: 0 10px;position: absolute;left: 0;top: 13px;} |
|||
.step-item-tail i {display: inline-block;width: 100%;height: 1px;vertical-align: top;background: #c2c2c2;position: relative;} |
|||
.step-item-tail-done {background: #009688 !important;} |
|||
.step-item-head {position: relative;display: inline-block;height: 26px;width: 26px;text-align: center;vertical-align: top;color: #009688;border: 1px solid #009688;border-radius: 50%;background: #ffffff;} |
|||
.step-item-head.step-item-head-active {background: #009688;color: #ffffff;} |
|||
.step-item-main {background: #ffffff;display: block;position: relative;} |
|||
.step-item-main-title {font-weight: bolder;color: #555555;} |
|||
.step-item-main-desc {color: #aaaaaa;} |
|||
.step-item-head.step-item-head-current {background: #FF5722;color: #ffffff;border: 1px solid #FF5722;} |
|||
|
|||
/* soulTable右键菜单样式 */ |
|||
#soul-table-contextmenu-wrapper .soul-table-contextmenu{line-height: 36px;box-shadow: 0 2px 4px rgba(0,0,0,.12);border: 1px solid #d2d2d2;border-radius: 2px;box-sizing: border-box;color: #333333;font-size: 12px;text-align: center;} |
|||
#soul-table-contextmenu-wrapper .soul-table-contextmenu li{line-height: 36px;padding: 0 22px;} |
|||
#soul-table-contextmenu-wrapper .soul-table-contextmenu li:hover{background-color: #f2f2f2;} |
|||
|
|||
/*文本编辑器按钮背景色*/ |
|||
.edoc-textEditor-btn{background-color:#1890ff !important;} |
|||
|
|||
/* 滑块组件的提示信息 */ |
|||
.layui-slider-tips{background-color: #1890ff; } |
|||
.layui-slider-tips::after{border-color:#1890ff #fff #fff #fff;} |
|||
.layui-slider-wrap-btn{border:2px solid #1890ff;} |
|||
/* 取消a标签hover */ |
|||
.edoc-hover-unset:hover{color: #fff;} |
|||
/* input框高度 */ |
|||
.edoc-input-height-30{height: 30px;line-height: 30px;} |
|||
/* 字体颜色 */ |
|||
.edoc-color-gray-medium{color:#666666} |
|||
|
|||
|
|||
/* 树形组件 */ |
|||
.far{font-family: 'Font Awesome 5 Free'!important;} |
|||
.far.fa-spinner{font-weight: bold;} |
|||
body .eleTree{padding-left: 25px;} |
|||
.eleTree-node-content-icon .layui-icon.icon-rotate{transform: none !important;} |
|||
.layui-icon-triangle-r:before{content: "\f0d4";background-color: #ffffff;position: relative;} |
|||
.layui-icon-triangle-r.icon-rotate:before{content: "\e079";background-color: #ffffff;position: relative;} |
|||
.eleTree-node-content-icon .layui-icon.leaf-icon:before{/* content: "\f249" !important; */background: none;position: relative;} |
|||
.eleTree-node .eleTree-node-content-label{width: auto;padding: 0 3px;border-radius: 2px;margin-left: 0px;max-width: calc(100% - 42px); color: #32363a;margin-top: -2px;font-size:14px;} |
|||
.eleTree-node .eleTree-node-content>.eleTree-node-content-icon{margin-right: 5px;} |
|||
.eleTree-node-content:hover .eleTree-node-content-icon .layui-icon{color: #777 !important;} |
|||
.eleTree-node .eleTree-node-content.eleTree-node-content-active .eleTree-node-content-icon .layui-icon{color: #777 !important;} |
|||
.eleTree-node-content:hover .eleTree-node-content-label{background-color: #f5f5f5 !important;color: #32363a !important} |
|||
.eleTree-node:before{content: "";height: calc(100% - 18px);border-left: 0px dotted #999;position: absolute;top: 13px;left: 5px;z-index: -1;} |
|||
.eleTree-node .eleTree-node-content{padding-left: 0px !important;height: 24px !important;margin-bottom: 4px;padding-bottom: 0px;line-height: 24px;} |
|||
.eleTree-node-group{margin-left: 21px;} |
|||
.ajaxFrontTree-eleTree-last.eleTree-node:before{display: none;} |
|||
.eleTree-node-content-icon .layui-icon{font-size: 14px !important;color: #777 !important;} |
|||
.eleTree-node-content .eleTree-node-content-more{position: absolute !important;} |
|||
/* .eleTree-node-content .eleTree-node-content-more .fa-bars{color: #1890ff;} */ |
|||
.fa-plus-square:before{background-color: #f5f5f5;} |
|||
.fa-sticky-note:before{background-color: #f5f5f5;} |
|||
.eleTree-node-content-icon .layui-icon.icon-rotate:before{content: "\f146";} |
|||
.eleTree-more-menu .eleTree-more-item:hover{background-color: #f7f7f7 !important;} |
|||
div.eleTree-more-menu{width: max-content;width: -moz-max-content;color: #32363a;} |
|||
div.eleTree-more-menu .eleTree-more-item{padding-left: 15px;padding-right: 15px;text-align: left;} |
|||
.eleTree-node .eleTree-checkbox{padding-left: 2px;padding-right: 2px;} |
|||
.eleTree-node .eleTree-checkbox i{left: 0px;position: relative;font-size: 8px;float: left;top: 2px;} |
|||
.eleTree-node .eleTree-checkbox-line:after{top: -2px;} |
|||
.eleTree-node .eleTree-checkbox i{border-color: #bfbfbf;} |
|||
/* nav下拉选项 */ |
|||
.layui-nav-child.layui-anim.layui-anim-upbit { |
|||
text-align: left !important; |
|||
} |
|||
/* 人员弹窗 */ |
|||
.use-pop{width: 400px;position: absolute;z-index: 120;background-color: #ffffff;box-shadow:0px 1px 5px #cccccc;border-radius: 2px;border: 1px solid #EBEBEB;display: none;margin-top: 2px;} |
|||
.use-pop .edoc-contentBlock .edoc-contentBlock-head{padding-top: 14px;height: 55px;padding-left: 24px;text-align: left;background-color: #ffffff;} |
|||
.use-pop .edoc-contentBlock .edoc-contentBlock-head .edoc-contentBlock-head-font{color: #32363a;font-weight: bold;font-size: 14px;} |
|||
.use-pop .edoc-contentBlock-body{overflow-y: hidden;padding:20px 24px 12px 24px !important;} |
|||
.use-pop .edoc-contentBlock-head .layui-timeline-axis{right: 19px;left: auto;top: 17px !important;font-size: 16px;color:#74777a} |
|||
.use-pop .edoc-contentBlock-head .layui-timeline-axis:hover{color:#1890ff;background-color: #ffffff;} |
|||
.use-pop .edoc-contentBlock-head .layui-timeline-axis:active{color:#40a9ff;} |
|||
.use-pop .edoc-contentBlock-body ul{padding: 0px;} |
|||
.use-pop .edoc-contentBlock-body ul li{list-style-type: none;color: #32363a;padding-bottom: 11px;max-width: 338px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;margin-top: 0px;text-align: left;line-height: 20px;height: 28px;} |
|||
.use-pop .edoc-contentBlock-body ul li span{color:#74777a;padding-right:12px;width: auto;margin: 0px;} |
|||
.use-pop .edoc-contentBlock-body ul li a{color:#1890ff;text-decoration: underline !important;} |
|||
.use-pop .edoc-contentBlock-body ul li .front-no-underline{text-decoration: none !important;color:#32363a;vertical-align: middle;} |
|||
/* 详情页内容块 */ |
|||
.edoc-contentBlock{width: 100%;background-color: #FFFFFF;} |
|||
.edoc-contentBlock .edoc-contentBlock-head{height: 65px;box-sizing: border-box;border-bottom: 1px solid #f2f2f2;padding-top: 20px;padding-left: 24px;} |
|||
.edoc-contentBlock .edoc-contentBlock-head .edoc-contentBlock-head-font{color: #6a6d70;line-height: 24px;font-size: 16px;} |
|||
.edoc-contentBlock .edoc-contentBlock-body{padding-left: 24px;word-break:break-all;} |
|||
|
|||
/* 日期选择框 */ |
|||
.layui-laydate{margin-top: 2px !important;} |
|||
.layui-laydate.laydate-theme-molv .layui-laydate-main .layui-laydate-header{ background-color:#ffffff !important; color: #32363a; border-bottom: 1px solid #d9d9d9; box-shadow: 0px 0px 3px rgba(0,0,0,.12) !important; } |
|||
.layui-laydate.laydate-theme-molv .layui-laydate-main .layui-laydate-header .laydate-set-ym span{ color: #6A6D70;font-weight: bolder;} |
|||
.layui-laydate.laydate-theme-molv .layui-laydate-header i.laydate-icon{color: #6A6D70;font-size: 10px;} |
|||
.layui-laydate.laydate-theme-molv .layui-laydate-header i.laydate-icon:hover{color: #40a9ff;} |
|||
|
|||
.layui-laydate.laydate-theme-molv .layui-laydate-main .layui-laydate-content { border: none; } |
|||
.layui-laydate.laydate-theme-molv .layui-laydate-main .layui-laydate-content ul{padding-top: 0px;} |
|||
.layui-laydate.laydate-theme-molv .layui-laydate-main .layui-laydate-content ul li{ height: 30px; line-height: 30px; margin: 8px 0; border-radius: 2px; } |
|||
.layui-laydate.laydate-theme-molv .layui-laydate-main .layui-laydate-content td.laydate-selected{background-color: #FFF !important;} |
|||
.layui-laydate.laydate-theme-molv .layui-laydate-main .layui-laydate-content td{padding-right: 0;padding-left: 0;} |
|||
.layui-laydate td.layui-this{background-color: #FFF !important;} |
|||
.layui-laydate td.layui-this .edoc-laydate-dayspan{border-radius: 2px;} |
|||
.layui-laydate.laydate-theme-molv .layui-laydate-main .layui-laydate-content td.laydate-selected .edoc-laydate-dayspan {background-color: #e6f7ff !important;padding:0 5px;width: 100%;} |
|||
|
|||
.laydate-theme-molv .layui-laydate-footer .laydate-btns-time{} |
|||
.layui-laydate-footer .laydate-footer-btns span:hover{color: #fff;} |
|||
|
|||
/* 表格头部工具栏的样式 */ |
|||
.edoc-table-top-block .layui-btn +.layui-btn{margin-left: 5px;} |
|||
.edoc-table-top-block.edoc-form .layui-btn,.edoc-table-top-block .edoc-form .layui-btn{min-width: auto;} |
|||
.edoc-username{color:#1890ff;} |
|||
/* 吸顶提示 */ |
|||
.layui-layer-tips:not(.layui-table-tips) .layui-layer-content {color: #32363a !important;padding: 5px 10px !important;} |
|||
.noUser{padding-bottom: 14px;text-align: center;color: #74777a;} |
|||
.use-pop .edoc-contentBlock-body .noUser{padding-bottom:8px !important;} |
|||
.layui-table-view .layui-form-checkbox[lay-skin="primary"] i{width:16px;height: 16px;line-height: 16px;} |
|||
/* 上传文件状态居中 */ |
|||
.statusDom{text-align: center;} |
|||
|
|||
/* 进度条颜色 */ |
|||
.layui-bg-blue{background-color: #1890ff !important;} |
|||
/* 带复选框选择单位弹窗 */ |
|||
.selectorgfrontmuti .edoc-dialog-bottom{position: fixed;bottom: 0px;width: 100%;padding: 11px 24px 11px 0px;background-color: #ffffff;height: 55px;border-top: 1px solid #d9d9d9;} |
|||
.selectorgfrontmuti .edoc-dialog-bottom .layui-inline {float: right;} |
|||
.selectorgfrontmuti .edoc-dialog-bottom .edoc-dialog-layui-input-block {margin-left: 0px;min-height: 32px;} |
|||
.selectorgfrontmuti .edoc-dialog-bottom .edoc-front-btn {height: 32px;line-height: 26px;border-radius: 2px;padding: 0 16px;background-color: #FFFFFF;color: #32363A;border: 1px solid #bfbfbf;cursor: pointer;-webkit-transition: all .3s cubic-bezier(.645,.045,.355,1);transition: all .3s cubic-bezier(.645,.045,.355,1);} |
|||
.selectorgfrontmuti .edoc-dialog-bottom .edoc-front-btn.edoc-front-btn-normal {background-color: #1890ff;color: #FFFFFF;border: none;} |
|||
.selectorgfrontmuti .edoc-dialog-content{overflow-y: auto;height: 100%;padding: 24px 24px 0 24px;} |
|||
.selectorgfrontmuti .fa-plus-square.icon-rotate:before {background-color: #ffffff;position: relative;} |
|||
/* 外单位利用档案详情 */ |
|||
.split-archdetail{padding-top: 20px !important;} |
|||
#hideHtml{display: none;} |
|||
.edoc-blocktag.edoc-blocktag-primary.edoc-blocktag-sm>span{float: left;} |
|||
.edoc-blocktag.edoc-blocktag-primary.edoc-blocktag-sm span.edoc-blocktag-icon{display: contents;} |
|||
.archdestruction-title{display: inline-block;white-space: nowrap;text-overflow: ellipsis;overflow: hidden;vertical-align: top;} |
|||
@ -0,0 +1,39 @@ |
|||
<!DOCTYPE html> |
|||
<!-- saved from url=(0064)chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/content.html --> |
|||
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
|||
|
|||
<link rel="icon" href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/%PUBLIC_URL%/favicon.ico"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<title>Tab Switcher</title> |
|||
<link href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/static/css/content.css" rel="stylesheet"> |
|||
<style> |
|||
/* |
|||
* 所有滚动条不可见 |
|||
* */ |
|||
html::-webkit-scrollbar, |
|||
body::-webkit-scrollbar, |
|||
div::-webkit-scrollbar, |
|||
p::-webkit-scrollbar, |
|||
button::-webkit-scrollbar |
|||
{ |
|||
width: 0.01px; |
|||
background-color: transparent; |
|||
} |
|||
|
|||
html::-webkit-scrollbar-thumb, |
|||
body::-webkit-scrollbar-thumb, |
|||
div::-webkit-scrollbar-thumb, |
|||
p::-webkit-scrollbar-thumb, |
|||
button::-webkit-scrollbar-thumb |
|||
{ |
|||
background-color: transparent; |
|||
} |
|||
</style> |
|||
</head> |
|||
<body style="width: 100%;height: 100%; overflow: scroll;background:transparent"> |
|||
<div id="root"></div> |
|||
<script src="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/content.js"> |
|||
</script><div id="CRX-container"><div class="CRX-content"></div></div><script type="text/javascript" src="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/insert.js"></script> |
|||
|
|||
|
|||
</body></html> |
|||
@ -0,0 +1,68 @@ |
|||
<!DOCTYPE html> |
|||
<!-- saved from url=(0066)chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/highlight.html --> |
|||
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style rc-util-key="@ant-design-icons"> |
|||
.anticon { |
|||
display: inline-block; |
|||
color: inherit; |
|||
font-style: normal; |
|||
line-height: 0; |
|||
text-align: center; |
|||
text-transform: none; |
|||
vertical-align: -0.125em; |
|||
text-rendering: optimizeLegibility; |
|||
-webkit-font-smoothing: antialiased; |
|||
-moz-osx-font-smoothing: grayscale; |
|||
} |
|||
|
|||
.anticon > * { |
|||
line-height: 1; |
|||
} |
|||
|
|||
.anticon svg { |
|||
display: inline-block; |
|||
} |
|||
|
|||
.anticon::before { |
|||
display: none; |
|||
} |
|||
|
|||
.anticon .anticon-icon { |
|||
display: block; |
|||
} |
|||
|
|||
.anticon[tabindex] { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.anticon-spin::before, |
|||
.anticon-spin { |
|||
display: inline-block; |
|||
-webkit-animation: loadingCircle 1s infinite linear; |
|||
animation: loadingCircle 1s infinite linear; |
|||
} |
|||
|
|||
@-webkit-keyframes loadingCircle { |
|||
100% { |
|||
-webkit-transform: rotate(360deg); |
|||
transform: rotate(360deg); |
|||
} |
|||
} |
|||
|
|||
@keyframes loadingCircle { |
|||
100% { |
|||
-webkit-transform: rotate(360deg); |
|||
transform: rotate(360deg); |
|||
} |
|||
} |
|||
</style> |
|||
|
|||
<link rel="icon" href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/%PUBLIC_URL%/favicon.ico"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<link href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/static/css/highlight.css" rel="stylesheet"> |
|||
<style> |
|||
</style> |
|||
</head> |
|||
<body style="background-color: rgba(171, 175, 180, 0.73); height: 96px;"><div id="content-container" class="content-container" style="opacity: 0; transform: translateY(-50px) translateZ(0px);"><div class="highlights-item-container"><input class="ant-input" type="text" value="" style="width: 300px;"><div class="ant-select mode-select ant-select-single ant-select-show-arrow"><div class="ant-select-selector"><span class="ant-select-selection-search"><input type="search" autocomplete="off" class="ant-select-selection-search-input" role="combobox" aria-haspopup="listbox" aria-owns="rc_select_0_list" aria-autocomplete="list" aria-controls="rc_select_0_list" aria-activedescendant="rc_select_0_list_0" readonly="" unselectable="on" value="" id="rc_select_0" style="opacity: 0;"></span><span class="ant-select-selection-item" title="全文">全文</span></div><span class="ant-select-arrow" unselectable="on" aria-hidden="true" style="user-select: none;"><span role="img" aria-label="down" class="anticon anticon-down ant-select-suffix"><svg viewBox="64 64 896 896" focusable="false" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></span></span></div><div class="color-box color-box-value fl-highlight-yellow"></div><img class="highlights-view" src="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/images/open-eye.png"></div><div class="plus-container"><span class="plus">+</span></div></div> |
|||
|
|||
|
|||
</body></html> |
|||
@ -0,0 +1,68 @@ |
|||
<!DOCTYPE html> |
|||
<!-- saved from url=(0066)chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/highlight.html --> |
|||
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style rc-util-key="@ant-design-icons"> |
|||
.anticon { |
|||
display: inline-block; |
|||
color: inherit; |
|||
font-style: normal; |
|||
line-height: 0; |
|||
text-align: center; |
|||
text-transform: none; |
|||
vertical-align: -0.125em; |
|||
text-rendering: optimizeLegibility; |
|||
-webkit-font-smoothing: antialiased; |
|||
-moz-osx-font-smoothing: grayscale; |
|||
} |
|||
|
|||
.anticon > * { |
|||
line-height: 1; |
|||
} |
|||
|
|||
.anticon svg { |
|||
display: inline-block; |
|||
} |
|||
|
|||
.anticon::before { |
|||
display: none; |
|||
} |
|||
|
|||
.anticon .anticon-icon { |
|||
display: block; |
|||
} |
|||
|
|||
.anticon[tabindex] { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.anticon-spin::before, |
|||
.anticon-spin { |
|||
display: inline-block; |
|||
-webkit-animation: loadingCircle 1s infinite linear; |
|||
animation: loadingCircle 1s infinite linear; |
|||
} |
|||
|
|||
@-webkit-keyframes loadingCircle { |
|||
100% { |
|||
-webkit-transform: rotate(360deg); |
|||
transform: rotate(360deg); |
|||
} |
|||
} |
|||
|
|||
@keyframes loadingCircle { |
|||
100% { |
|||
-webkit-transform: rotate(360deg); |
|||
transform: rotate(360deg); |
|||
} |
|||
} |
|||
</style> |
|||
|
|||
<link rel="icon" href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/%PUBLIC_URL%/favicon.ico"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<link href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/static/css/highlight.css" rel="stylesheet"> |
|||
<style> |
|||
</style> |
|||
</head> |
|||
<body style="background-color: rgba(171, 175, 180, 0.73); height: 96px;"><div id="content-container" class="content-container" style="opacity: 0; transform: translateY(-50px) translateZ(0px);"><div class="highlights-item-container"><input class="ant-input" type="text" value="" style="width: 300px;"><div class="ant-select mode-select ant-select-single ant-select-show-arrow"><div class="ant-select-selector"><span class="ant-select-selection-search"><input type="search" autocomplete="off" class="ant-select-selection-search-input" role="combobox" aria-haspopup="listbox" aria-owns="rc_select_0_list" aria-autocomplete="list" aria-controls="rc_select_0_list" aria-activedescendant="rc_select_0_list_0" readonly="" unselectable="on" value="" id="rc_select_0" style="opacity: 0;"></span><span class="ant-select-selection-item" title="全文">全文</span></div><span class="ant-select-arrow" unselectable="on" aria-hidden="true" style="user-select: none;"><span role="img" aria-label="down" class="anticon anticon-down ant-select-suffix"><svg viewBox="64 64 896 896" focusable="false" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></span></span></div><div class="color-box color-box-value fl-highlight-yellow"></div><img class="highlights-view" src="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/images/open-eye.png"></div><div class="plus-container"><span class="plus">+</span></div></div> |
|||
|
|||
|
|||
</body></html> |
|||
1359
public/report/年报_files/layui.css
File diff suppressed because it is too large
View File
@ -0,0 +1,756 @@ |
|||
/*! |
|||
|
|||
@Title: layui |
|||
@Description:经典模块化前端 UI 框架 |
|||
@Site: www.layui.com |
|||
@Author: 贤心 |
|||
@License:MIT |
|||
|
|||
*/ |
|||
|
|||
!(function (win) { |
|||
'use strict'; |
|||
|
|||
var doc = document; |
|||
var config = { |
|||
modules: {}, // 记录模块物理路径 |
|||
status: {}, // 记录模块加载状态 |
|||
timeout: 10, // 符合规范的模块请求最长等待秒数 |
|||
event: {}, // 记录模块自定义事件 |
|||
version: '30233', // 系统版本号 为了解决浏览器的缓存问题; 系统中的js、html文件路径都会拼上此版本号 |
|||
}; |
|||
var Layui = function () { |
|||
this.v = '2.5.5'; // 版本号 |
|||
}; |
|||
// 获取layui所在目录 |
|||
var getPath = (function () { |
|||
var jsPath = doc.currentScript |
|||
? doc.currentScript.src |
|||
: (function () { |
|||
var js = doc.scripts; |
|||
var last = js.length - 1; |
|||
var src; |
|||
for (var i = last; i > 0; i--) { |
|||
if (js[i].readyState === 'interactive') { |
|||
src = js[i].src; |
|||
break; |
|||
} |
|||
} |
|||
return src || js[last].src; |
|||
})(); |
|||
return jsPath.substring(0, jsPath.lastIndexOf('/') + 1); |
|||
})(); |
|||
// 异常提示 |
|||
var error = function (msg) { |
|||
win.console && console.error && console.error('Layui hint: ' + msg); |
|||
}; |
|||
var isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]'; |
|||
// 内置模块 |
|||
var modules = { |
|||
layer: 'modules/layer', // 弹层 |
|||
laydate: 'modules/laydate', // 日期 |
|||
laypage: 'modules/laypage', // 分页 |
|||
laytpl: 'modules/laytpl', // 模板引擎 |
|||
layim: 'modules/layim', // web通讯 |
|||
layedit: 'modules/layedit', // 富文本编辑器 |
|||
form: 'modules/form', // 表单集 |
|||
upload: 'modules/upload', // 上传 |
|||
transfer: 'modules/transfer', // 上传 |
|||
tree: 'modules/tree', // 树结构 |
|||
table: 'modules/table', // 表格 |
|||
element: 'modules/element', // 常用元素操作 |
|||
rate: 'modules/rate', // 评分组件 |
|||
colorpicker: 'modules/colorpicker', // 颜色选择器 |
|||
slider: 'modules/slider', // 滑块 |
|||
carousel: 'modules/carousel', // 轮播 |
|||
flow: 'modules/flow', // 流加载 |
|||
util: 'modules/util', // 工具块 |
|||
code: 'modules/code', // 代码修饰器 |
|||
jquery: 'modules/jquery', // DOM库(第三方) |
|||
mobile: 'modules/mobile', // 移动大模块 | 若当前为开发目录,则为移动模块入口,否则为移动模块集合 |
|||
'layui.all': '../layui.all', // PC模块合并版 |
|||
}; |
|||
|
|||
// 记录基础数据 |
|||
Layui.prototype.cache = config; |
|||
|
|||
// 定义模块 |
|||
Layui.prototype.define = function (deps, factory) { |
|||
var that = this; |
|||
var type = typeof deps === 'function'; |
|||
var callback = function () { |
|||
var setApp = function (app, exports) { |
|||
layui[app] = exports; |
|||
config.status[app] = true; |
|||
}; |
|||
typeof factory === 'function' && |
|||
factory(function (app, exports) { |
|||
setApp(app, exports); |
|||
config.callback[app] = function () { |
|||
factory(setApp); |
|||
}; |
|||
}); |
|||
return this; |
|||
}; |
|||
|
|||
type && ((factory = deps), (deps = [])); |
|||
|
|||
if (!layui['layui.all'] && layui['layui.mobile']) { |
|||
return callback.call(that); |
|||
} |
|||
|
|||
that.use(deps, callback); |
|||
return that; |
|||
}; |
|||
|
|||
// 使用特定模块 |
|||
Layui.prototype.use = function (apps, callback, exports) { |
|||
var that = this; |
|||
var dir = (config.dir = config.dir ? config.dir : getPath); |
|||
var head = doc.getElementsByTagName('head')[0]; |
|||
|
|||
apps = typeof apps === 'string' ? [apps] : apps; |
|||
|
|||
// 如果页面已经存在jQuery1.7+库且所定义的模块依赖jQuery,则不加载内部jquery模块 |
|||
if (window.jQuery && jQuery.fn.on) { |
|||
that.each(apps, function (index, item) { |
|||
if (item === 'jquery') { |
|||
apps.splice(index, 1); |
|||
} |
|||
}); |
|||
layui.jquery = layui.$ = jQuery; |
|||
} |
|||
|
|||
var item = apps[0]; |
|||
var timeout = 0; |
|||
exports = exports || []; |
|||
|
|||
// 静态资源host |
|||
config.host = config.host || (dir.match(/\/\/([\s\S]+?)\//) || ['//' + location.host + '/'])[0]; |
|||
|
|||
// 加载完毕 |
|||
function onScriptLoad (e, url) { |
|||
var readyRegExp = |
|||
navigator.platform === 'PLaySTATION 3' ? /^complete$/ : /^(complete|loaded)$/; |
|||
if (e.type === 'load' || readyRegExp.test((e.currentTarget || e.srcElement).readyState)) { |
|||
config.modules[item] = url; |
|||
head.removeChild(node); |
|||
(function poll () { |
|||
if (++timeout > (config.timeout * 1000) / 4) { |
|||
return error(item + ' is not a valid module'); |
|||
} |
|||
config.status[item] ? onCallback() : setTimeout(poll, 4); |
|||
})(); |
|||
} |
|||
} |
|||
|
|||
// 回调 |
|||
function onCallback () { |
|||
exports.push(layui[item]); |
|||
apps.length > 1 |
|||
? that.use(apps.slice(1), callback, exports) |
|||
: typeof callback === 'function' && callback.apply(layui, exports); |
|||
} |
|||
|
|||
// 如果引入了完整库(layui.all.js),内置的模块则不必再加载 |
|||
if ( |
|||
apps.length === 0 || |
|||
(layui['layui.all'] && modules[item]) || |
|||
(!layui['layui.all'] && layui['layui.mobile'] && modules[item]) |
|||
) { |
|||
return onCallback(), that; |
|||
} |
|||
|
|||
// 首次加载模块 |
|||
if (!config.modules[item]) { |
|||
var node = doc.createElement('script'); |
|||
// 如果是内置模块,则按照 dir 参数拼接模块路径 |
|||
// 如果是扩展模块,则判断模块路径值是否为 {/} 开头, |
|||
// 如果路径值是 {/} 开头,则模块路径即为后面紧跟的字符。 |
|||
// 否则,则按照 base 参数拼接模块路径 |
|||
var url = |
|||
(modules[item] |
|||
? dir + 'lay/' |
|||
: /^\{\/\}/.test(that.modules[item]) |
|||
? '' |
|||
: config.base || '') + |
|||
(that.modules[item] || item) + |
|||
'.js'; |
|||
|
|||
url = url.replace(/^\{\/\}/, ''); |
|||
|
|||
node.async = true; |
|||
node.charset = 'utf-8'; |
|||
node.src = |
|||
url + |
|||
(function () { |
|||
var version = |
|||
config.version === true ? config.v || new Date().getTime() : config.version || ''; |
|||
return version ? '?v=' + version : ''; |
|||
})(); |
|||
|
|||
head.appendChild(node); |
|||
|
|||
if ( |
|||
node.attachEvent && |
|||
!(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && |
|||
!isOpera |
|||
) { |
|||
node.attachEvent('onreadystatechange', function (e) { |
|||
onScriptLoad(e, url); |
|||
}); |
|||
} else { |
|||
node.addEventListener( |
|||
'load', |
|||
function (e) { |
|||
onScriptLoad(e, url); |
|||
}, |
|||
false |
|||
); |
|||
} |
|||
|
|||
config.modules[item] = url; |
|||
} else { |
|||
// 缓存 |
|||
(function poll () { |
|||
if (++timeout > (config.timeout * 1000) / 4) { |
|||
return error(item + ' is not a valid module'); |
|||
} |
|||
typeof config.modules[item] === 'string' && config.status[item] |
|||
? onCallback() |
|||
: setTimeout(poll, 4); |
|||
})(); |
|||
} |
|||
|
|||
return that; |
|||
}; |
|||
|
|||
// 获取节点的style属性值 |
|||
Layui.prototype.getStyle = function (node, name) { |
|||
var style = node.currentStyle ? node.currentStyle : win.getComputedStyle(node, null); |
|||
return style[style.getPropertyValue ? 'getPropertyValue' : 'getAttribute'](name); |
|||
}; |
|||
|
|||
// css外部加载器 |
|||
Layui.prototype.link = function (href, fn, cssname) { |
|||
var that = this; |
|||
var link = doc.createElement('link'); |
|||
var head = doc.getElementsByTagName('head')[0]; |
|||
|
|||
if (typeof fn === 'string') { |
|||
cssname = fn; |
|||
} |
|||
|
|||
var app = (cssname || href).replace(/\.|\//g, ''); |
|||
var id = (link.id = 'layuicss-' + app); |
|||
var timeout = 0; |
|||
|
|||
link.rel = 'stylesheet'; |
|||
link.href = href + (config.debug ? '?v=' + new Date().getTime() : ''); |
|||
link.media = 'all'; |
|||
|
|||
if (!doc.getElementById(id)) { |
|||
head.appendChild(link); |
|||
} |
|||
|
|||
if (typeof fn !== 'function') { |
|||
return that; |
|||
} |
|||
|
|||
// 轮询css是否加载完毕 |
|||
(function poll () { |
|||
if (++timeout > (config.timeout * 1000) / 100) { |
|||
return error(href + ' timeout'); |
|||
} |
|||
parseInt(that.getStyle(doc.getElementById(id), 'width')) === 1989 |
|||
? (function () { |
|||
fn(); |
|||
})() |
|||
: setTimeout(poll, 100); |
|||
})(); |
|||
|
|||
return that; |
|||
}; |
|||
|
|||
// 存储模块的回调 |
|||
config.callback = {}; |
|||
|
|||
// 重新执行模块的工厂函数 |
|||
Layui.prototype.factory = function (modName) { |
|||
if (layui[modName]) { |
|||
return typeof config.callback[modName] === 'function' ? config.callback[modName] : null; |
|||
} |
|||
}; |
|||
|
|||
// css内部加载器 |
|||
Layui.prototype.addcss = function (firename, fn, cssname) { |
|||
return layui.link(config.dir + 'css/' + firename, fn, cssname); |
|||
}; |
|||
|
|||
// 图片预加载 |
|||
Layui.prototype.img = function (url, callback, error) { |
|||
var img = new Image(); |
|||
img.src = url; |
|||
if (img.complete) { |
|||
return callback(img); |
|||
} |
|||
img.onload = function () { |
|||
img.onload = null; |
|||
typeof callback === 'function' && callback(img); |
|||
}; |
|||
img.onerror = function (e) { |
|||
img.onerror = null; |
|||
typeof error === 'function' && error(e); |
|||
}; |
|||
}; |
|||
|
|||
// 全局配置 |
|||
Layui.prototype.config = function (options) { |
|||
options = options || {}; |
|||
for (var key in options) { |
|||
config[key] = options[key]; |
|||
} |
|||
return this; |
|||
}; |
|||
|
|||
// 记录全部模块 |
|||
Layui.prototype.modules = (function () { |
|||
var clone = {}; |
|||
for (var o in modules) { |
|||
clone[o] = modules[o]; |
|||
} |
|||
return clone; |
|||
})(); |
|||
|
|||
// 拓展模块 |
|||
Layui.prototype.extend = function (options) { |
|||
var that = this; |
|||
|
|||
// 验证模块是否被占用 |
|||
options = options || {}; |
|||
for (var o in options) { |
|||
if (that[o] || that.modules[o]) { |
|||
error('\u6A21\u5757\u540D ' + o + ' \u5DF2\u88AB\u5360\u7528'); |
|||
} else { |
|||
that.modules[o] = options[o]; |
|||
} |
|||
} |
|||
|
|||
return that; |
|||
}; |
|||
|
|||
// 路由解析 |
|||
Layui.prototype.router = function (hash) { |
|||
var that = this; |
|||
var hash = hash || location.hash; |
|||
var data = { |
|||
path: [], |
|||
search: {}, |
|||
hash: (hash.match(/[^#](#.*$)/) || [])[1] || '', |
|||
}; |
|||
|
|||
if (!/^#\//.test(hash)) { |
|||
return data; |
|||
} // 禁止非路由规范 |
|||
hash = hash.replace(/^#\//, ''); |
|||
data.href = '/' + hash; |
|||
hash = hash.replace(/([^#])(#.*$)/, '$1').split('/') || []; |
|||
|
|||
// 提取Hash结构 |
|||
that.each(hash, function (index, item) { |
|||
/^\w+=/.test(item) |
|||
? (function () { |
|||
item = item.split('='); |
|||
data.search[item[0]] = item[1]; |
|||
})() |
|||
: data.path.push(item); |
|||
}); |
|||
|
|||
return data; |
|||
}; |
|||
|
|||
// 本地持久性存储 |
|||
Layui.prototype.data = function (table, settings, storage) { |
|||
table = table || 'layui'; |
|||
storage = storage || localStorage; |
|||
|
|||
if (!win.JSON || !win.JSON.parse) { |
|||
return; |
|||
} |
|||
|
|||
// 如果settings为null,则删除表 |
|||
if (settings === null) { |
|||
return delete storage[table]; |
|||
} |
|||
|
|||
settings = typeof settings === 'object' ? settings : { key: settings }; |
|||
|
|||
try { |
|||
var data = JSON.parse(storage[table]); |
|||
} catch (e) { |
|||
var data = {}; |
|||
} |
|||
|
|||
if ('value' in settings) { |
|||
data[settings.key] = settings.value; |
|||
} |
|||
if (settings.remove) { |
|||
delete data[settings.key]; |
|||
} |
|||
storage[table] = JSON.stringify(data); |
|||
|
|||
return settings.key ? data[settings.key] : data; |
|||
}; |
|||
|
|||
// 本地会话性存储 |
|||
Layui.prototype.sessionData = function (table, settings) { |
|||
return this.data(table, settings, sessionStorage); |
|||
}; |
|||
|
|||
// 设备信息 |
|||
Layui.prototype.device = function (key) { |
|||
var agent = navigator.userAgent.toLowerCase(); |
|||
// 获取版本号 |
|||
var getVersion = function (label) { |
|||
var exp = new RegExp(label + '/([^\\s\\_\\-]+)'); |
|||
label = (agent.match(exp) || [])[1]; |
|||
return label || false; |
|||
}; |
|||
// 返回结果集 |
|||
var result = { |
|||
os: (function () { |
|||
// 底层操作系统 |
|||
if (/windows/.test(agent)) { |
|||
return 'windows'; |
|||
} else if (/linux/.test(agent)) { |
|||
return 'linux'; |
|||
} else if (/iphone|ipod|ipad|ios/.test(agent)) { |
|||
return 'ios'; |
|||
} else if (/mac/.test(agent)) { |
|||
return 'mac'; |
|||
} |
|||
})(), |
|||
ie: (function () { |
|||
// ie版本 |
|||
return !!win.ActiveXObject || 'ActiveXObject' in win |
|||
? (agent.match(/msie\s(\d+)/) || [])[1] || '11' // 由于ie11并没有msie的标识 |
|||
: false; |
|||
})(), |
|||
weixin: getVersion('micromessenger'), // 是否微信 |
|||
}; |
|||
|
|||
// 任意的key |
|||
if (key && !result[key]) { |
|||
result[key] = getVersion(key); |
|||
} |
|||
|
|||
// 移动设备 |
|||
result.android = /android/.test(agent); |
|||
result.ios = result.os === 'ios'; |
|||
|
|||
return result; |
|||
}; |
|||
|
|||
// 提示 |
|||
Layui.prototype.hint = function () { |
|||
return { |
|||
error: error, |
|||
}; |
|||
}; |
|||
|
|||
// 遍历 |
|||
Layui.prototype.each = function (obj, fn) { |
|||
var key; |
|||
var that = this; |
|||
if (typeof fn !== 'function') { |
|||
return that; |
|||
} |
|||
obj = obj || []; |
|||
if (obj.constructor === Object) { |
|||
for (key in obj) { |
|||
if (fn.call(obj[key], key, obj[key])) { |
|||
break; |
|||
} |
|||
} |
|||
} else { |
|||
for (key = 0; key < obj.length; key++) { |
|||
if (fn.call(obj[key], key, obj[key])) { |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
return that; |
|||
}; |
|||
|
|||
// 将数组中的对象按其某个成员排序 |
|||
Layui.prototype.sort = function (obj, key, desc) { |
|||
var clone = JSON.parse(JSON.stringify(obj || [])); |
|||
|
|||
if (!key) { |
|||
return clone; |
|||
} |
|||
|
|||
// 如果是数字,按大小排序,如果是非数字,按字典序排序 |
|||
clone.sort(function (o1, o2) { |
|||
var isNum = /^-?\d+$/; |
|||
var v1 = o1[key]; |
|||
var v2 = o2[key]; |
|||
|
|||
if (isNum.test(v1)) { |
|||
v1 = parseFloat(v1); |
|||
} |
|||
if (isNum.test(v2)) { |
|||
v2 = parseFloat(v2); |
|||
} |
|||
|
|||
if (v1 && !v2) { |
|||
return 1; |
|||
} else if (!v1 && v2) { |
|||
return -1; |
|||
} |
|||
|
|||
if (v1 > v2) { |
|||
return 1; |
|||
} else if (v1 < v2) { |
|||
return -1; |
|||
} else { |
|||
return 0; |
|||
} |
|||
}); |
|||
|
|||
desc && clone.reverse(); // 倒序 |
|||
return clone; |
|||
}; |
|||
|
|||
// 阻止事件冒泡 |
|||
Layui.prototype.stope = function (thisEvent) { |
|||
thisEvent = thisEvent || win.event; |
|||
try { |
|||
thisEvent.stopPropagation(); |
|||
} catch (e) { |
|||
thisEvent.cancelBubble = true; |
|||
} |
|||
}; |
|||
|
|||
// 自定义模块事件 |
|||
Layui.prototype.onevent = function (modName, events, callback) { |
|||
if (typeof modName !== 'string' || typeof callback !== 'function') { |
|||
return this; |
|||
} |
|||
|
|||
return Layui.event(modName, events, null, callback); |
|||
}; |
|||
|
|||
// 执行自定义模块事件 |
|||
Layui.prototype.event = Layui.event = function (modName, events, params, fn) { |
|||
var that = this; |
|||
var result = null; |
|||
var filter = events.match(/\((.*)\)$/) || []; // 提取事件过滤器字符结构,如:select(xxx) |
|||
var eventName = (modName + '.' + events).replace(filter[0], ''); // 获取事件名称,如:form.select |
|||
var filterName = filter[1] || ''; // 获取过滤器名称,,如:xxx |
|||
var callback = function (_, item) { |
|||
var res = item && item.call(that, params); |
|||
res === false && result === null && (result = false); |
|||
}; |
|||
|
|||
// 添加事件 |
|||
if (fn) { |
|||
config.event[eventName] = config.event[eventName] || {}; |
|||
|
|||
// 这里不再对多次事件监听做支持,避免更多麻烦 |
|||
// config.event[eventName][filterName] ? config.event[eventName][filterName].push(fn) : |
|||
config.event[eventName][filterName] = [fn]; |
|||
return this; |
|||
} |
|||
|
|||
// 执行事件回调 |
|||
layui.each(config.event[eventName], function (key, item) { |
|||
// 执行当前模块的全部事件 |
|||
if (filterName === '{*}') { |
|||
layui.each(item, callback); |
|||
return; |
|||
} |
|||
|
|||
// 执行指定事件 |
|||
key === '' && layui.each(item, callback); |
|||
filterName && key === filterName && layui.each(item, callback); |
|||
}); |
|||
return result; |
|||
}; |
|||
|
|||
// 加载自定义事件 |
|||
NodeList.prototype.forEach = Array.prototype.forEach; |
|||
window.customEvent = { |
|||
rootScope: { |
|||
name: 'document', |
|||
handleEvent: {}, |
|||
events: {}, |
|||
children: [], |
|||
}, |
|||
|
|||
/** |
|||
* @description: 用于处理模板解析 |
|||
* @param {String} template 传递已经被latpl编译的模板 |
|||
* @param {String} locationId id |
|||
* @return {String} 返回已经被latpl编译的模板 |
|||
*/ |
|||
parse: function (template, locationId) { |
|||
var $ = layui.$; |
|||
// 查找父级组件 |
|||
var that = this; |
|||
var currentScope = null; |
|||
if (!locationId) { |
|||
// 根节点初始化Scope |
|||
currentScope = that.rootScope; |
|||
} else { |
|||
var parentId = $("*[edoc='" + locationId + "']") |
|||
.parents('*[edoc]') |
|||
.first() |
|||
.attr('edoc'); |
|||
var parentScope = that.findScope(parentId, that.rootScope) || that.rootScope; |
|||
var currentScope = that.findScope(locationId, that.rootScope); |
|||
if (!currentScope) { |
|||
currentScope = { |
|||
name: locationId, |
|||
handleEvent: {}, |
|||
events: {}, |
|||
}; |
|||
parentScope.children |
|||
? parentScope.children.push(currentScope) |
|||
: (parentScope.children = [currentScope]); |
|||
} |
|||
} |
|||
// 匹配模板内部存在 @ 绑定事件的DOM |
|||
return template.replace(/<[^<]*(@\w*=\w*(\(\S*\))?\s*)+[^>]*>/gi, function (domStr) { |
|||
var randomFlag = 'data-ident=' + Math.floor(Math.random() * 1000); |
|||
while (currentScope.handleEvent[randomFlag]) { |
|||
randomFlag = 'data-ident=' + Math.floor(Math.random() * 1000); |
|||
} |
|||
// 初始化handleEvent |
|||
currentScope.handleEvent[randomFlag] = {}; |
|||
// 替换生成唯一标记 然后匹配DOM上的绑定事件 |
|||
// (\((?<=\()[^\)]+\))? |
|||
return domStr |
|||
.replace('>', ' ' + randomFlag + ' >') |
|||
.replace(/@\w*=\w*(\([^\)]+\))?\s*/gi, function (subStr) { |
|||
// 生成绑定事件的格式 |
|||
var event = subStr.replace('@', '').trim().split('='); |
|||
currentScope.handleEvent[randomFlag][event[0]] = event[1]; |
|||
return ''; |
|||
}); |
|||
}); |
|||
}, |
|||
|
|||
/** |
|||
* @description: 用于绑定监听事件,并触发相关的回调 |
|||
* @param {Object} data data |
|||
* @param {String} locationId id |
|||
* @return {Object} null |
|||
*/ |
|||
bindEvent: function (data, locationId) { |
|||
var $ = layui.$; |
|||
var currentScope = this.findScope(locationId, this.rootScope) || this.rootScope; |
|||
var filter = $(locationId ? '*[edoc="' + currentScope.name + '"]' : 'body'); |
|||
try { |
|||
Object.keys(currentScope.handleEvent).forEach(function (event) { |
|||
if (currentScope.handleEvent[event].bindStatus) {return null;} |
|||
var _EventDOM = filter.find('*[' + event + ']'); |
|||
var _Events = currentScope.handleEvent[event.trim()]; |
|||
Object.keys(_Events).forEach(function (_EventName) { |
|||
var _FnTemp = _Events[_EventName].split('('); |
|||
var _FnName = _FnTemp[0]; |
|||
var _FnArgs = _FnTemp[1] ? _FnTemp[1].replace(')', '') : data; |
|||
try { |
|||
if (typeof _FnArgs === 'string' && isNaN(_FnArgs)) { |
|||
_FnArgs = JSON.parse(_FnArgs); |
|||
} |
|||
} catch (e) { |
|||
console.error(_FnArgs, '参数无法转化为对象', e); |
|||
} |
|||
_EventDOM.on(_EventName, function (event) { |
|||
currentScope.events[_FnName](_FnArgs, event.currentTarget); |
|||
}); |
|||
Object.defineProperty(currentScope.handleEvent[event], 'bindStatus', { |
|||
value: true, |
|||
}); |
|||
}); |
|||
}); |
|||
} catch (error) { |
|||
console.error(error); |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* @description: 用于提供回调以挂载给绑定事件调用 |
|||
* @param {String} name 回调函数名称 |
|||
* @param {Function} callback 回调函数 |
|||
* @return {Object} null |
|||
*/ |
|||
toggleEvent: function (name, callback) { |
|||
var customEvent = window.customEvent; |
|||
var currentScope = |
|||
this.constructor.name === 'Object' |
|||
? customEvent.rootScope |
|||
: customEvent.findScope(this.id, customEvent.rootScope); |
|||
if (currentScope && currentScope.events) {currentScope.events[name] = callback;} |
|||
}, |
|||
// |
|||
refresh:function(locationId){ |
|||
var that=this |
|||
try { |
|||
var node=that.findScope(locationId,that.rootScope) |
|||
if(node){ |
|||
node.handleEvent={}, |
|||
node.events={} |
|||
} |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
// 依赖方法 |
|||
/** |
|||
* @description:数组去重 |
|||
* @param {Array} arr 重复数组 |
|||
* @return {Array} 去重数组 |
|||
*/ |
|||
unique: function (arr) { |
|||
var obj = {}; |
|||
var newArr = []; |
|||
for (var i = 0; i < arr.length; i++) { |
|||
if (obj[arr[i]] === undefined) { |
|||
newArr.push(arr[i]); |
|||
obj[arr[i]] = 1; |
|||
} |
|||
} |
|||
return newArr; |
|||
}, |
|||
/** |
|||
* @description: 查找作用域(不查根节点) |
|||
* @param {String} scopeName 作用域名词 |
|||
* @param {Object} scopeTree 作用域树 |
|||
* @return {Object} scope |
|||
*/ |
|||
findScope: function (scopeName, scopeTree) { |
|||
try { |
|||
var childScopes = scopeTree.children; |
|||
for (var index = 0; index < childScopes.length; index++) { |
|||
var scope = childScopes[index]; |
|||
if (scope.name === scopeName) { |
|||
return scope; |
|||
} |
|||
if (scope.children) { |
|||
var result = window.customEvent.findScope(scopeName, scope); |
|||
if (result) { |
|||
return result; |
|||
} |
|||
} |
|||
} |
|||
return null; |
|||
} catch (error) { |
|||
console.log(error); |
|||
} |
|||
}, |
|||
}; |
|||
|
|||
win.layui = new Layui(); |
|||
})(window); |
|||
@ -0,0 +1,92 @@ |
|||
<!DOCTYPE html> |
|||
<!-- saved from url=(0064)chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/outline.html --> |
|||
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style rc-util-key="@ant-design-icons"> |
|||
.anticon { |
|||
display: inline-block; |
|||
color: inherit; |
|||
font-style: normal; |
|||
line-height: 0; |
|||
text-align: center; |
|||
text-transform: none; |
|||
vertical-align: -0.125em; |
|||
text-rendering: optimizeLegibility; |
|||
-webkit-font-smoothing: antialiased; |
|||
-moz-osx-font-smoothing: grayscale; |
|||
} |
|||
|
|||
.anticon > * { |
|||
line-height: 1; |
|||
} |
|||
|
|||
.anticon svg { |
|||
display: inline-block; |
|||
} |
|||
|
|||
.anticon::before { |
|||
display: none; |
|||
} |
|||
|
|||
.anticon .anticon-icon { |
|||
display: block; |
|||
} |
|||
|
|||
.anticon[tabindex] { |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.anticon-spin::before, |
|||
.anticon-spin { |
|||
display: inline-block; |
|||
-webkit-animation: loadingCircle 1s infinite linear; |
|||
animation: loadingCircle 1s infinite linear; |
|||
} |
|||
|
|||
@-webkit-keyframes loadingCircle { |
|||
100% { |
|||
-webkit-transform: rotate(360deg); |
|||
transform: rotate(360deg); |
|||
} |
|||
} |
|||
|
|||
@keyframes loadingCircle { |
|||
100% { |
|||
-webkit-transform: rotate(360deg); |
|||
transform: rotate(360deg); |
|||
} |
|||
} |
|||
</style> |
|||
|
|||
<link rel="icon" href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/%PUBLIC_URL%/favicon.ico"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<title>Flash Copilot</title> |
|||
<link href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/static/css/outline.css" rel="stylesheet"> |
|||
<style> |
|||
/* |
|||
* 所有滚动条不可见 |
|||
* */ |
|||
html::-webkit-scrollbar, |
|||
body::-webkit-scrollbar, |
|||
div::-webkit-scrollbar, |
|||
p::-webkit-scrollbar, |
|||
button::-webkit-scrollbar |
|||
{ |
|||
width: 0.01px; |
|||
background-color: transparent; |
|||
} |
|||
|
|||
html::-webkit-scrollbar-thumb, |
|||
body::-webkit-scrollbar-thumb, |
|||
div::-webkit-scrollbar-thumb, |
|||
p::-webkit-scrollbar-thumb, |
|||
button::-webkit-scrollbar-thumb |
|||
{ |
|||
background-color: transparent; |
|||
} |
|||
</style> |
|||
</head> |
|||
<body style="background:transparent"> |
|||
<script src="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/outline.js"> |
|||
</script><div id="outline-container" contenteditable="true"><div style="background-color: rgb(0, 21, 41); padding: 8px; width: 300px;"><div class="ant-row" style="margin-left: -4px; margin-right: -4px; border: 1px solid white; padding: 4px;"><div class="ant-col ant-col-3" style="padding-left: 4px; padding-right: 4px;"><span role="img" aria-label="drag" class="anticon anticon-drag" style="font-size: 30px; color: white;"><svg viewBox="64 64 896 896" focusable="false" data-icon="drag" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M909.3 506.3L781.7 405.6a7.23 7.23 0 00-11.7 5.7V476H548V254h64.8c6 0 9.4-7 5.7-11.7L517.7 114.7a7.14 7.14 0 00-11.3 0L405.6 242.3a7.23 7.23 0 005.7 11.7H476v222H254v-64.8c0-6-7-9.4-11.7-5.7L114.7 506.3a7.14 7.14 0 000 11.3l127.5 100.8c4.7 3.7 11.7.4 11.7-5.7V548h222v222h-64.8c-6 0-9.4 7-5.7 11.7l100.8 127.5c2.9 3.7 8.5 3.7 11.3 0l100.8-127.5c3.7-4.7.4-11.7-5.7-11.7H548V548h222v64.8c0 6 7 9.4 11.7 5.7l127.5-100.8a7.3 7.3 0 00.1-11.4z"></path></svg></span></div><div class="ant-col ant-col-21" style="padding-left: 4px; padding-right: 4px;"><input placeholder="Search" class="ant-input" type="text" value="" style="width: -webkit-fill-available;"></div></div><div class="no-scrollbar" style="min-height: 350px; max-height: 800px; overflow: scroll; max-width: 400px; opacity: 0; transform: translateX(-65.9871px) translateY(12.6671px) translateZ(0px);"></div></div></div> |
|||
|
|||
|
|||
</body></html> |
|||
@ -0,0 +1,534 @@ |
|||
/*---------------------默认蓝色主题-------------------------*/ |
|||
/*index.css 都带上.layui-layout-admin类*/ |
|||
body.theme-blue .layui-layout-admin .layui-side {background-color: #002766;} |
|||
body.theme-blue .layui-layout-admin .layui-nav-tree .layui-checked-add {background-color: #1890ff;} |
|||
body.theme-blue .layui-layout-admin .layui-side-menu .layui-nav .layui-nav-item a:hover {background-color: #003a8c;} |
|||
body.theme-blue .layui-layout-admin .layui-nav-tree .layui-nav-item-selectd {background-color: #003a8c;} |
|||
body.theme-blue .layui-layout-admin .layui-side-menu .layui-nav .layui-nav-item .layui-card .fas{color: #096dd9;} |
|||
body.theme-blue .layui-layout-admin .layui-layer-tab .layui-layer-title span.layui-this{color: #1890ff;} |
|||
body.theme-blue #toast-container .layui-icon.layui-icon-ok{background-color: #2E8DED;} |
|||
/* body.theme-blue .layui-layout-admin .unis_logo {color: #32363a;} */ |
|||
body.theme-blue .layui-layout-admin .layui-layer-tab .layui-layer-title span.layui-this{color: #0166CE;} |
|||
body.theme-blue .layui-layout-admin .layui-nav .layui-nav-item a{color: #e6f7ff;} |
|||
body.theme-blue .layui-layout-admin .front_role_deps_currut{background-color: #e6f7ff;} |
|||
body.theme-blue .layui-layout-admin .front_role_deps_currut a:hover{background-color: #e6f7ff;} |
|||
|
|||
/*common.css*/ |
|||
body.theme-blue .layui-btn-primary{border-color: #bfbfbf;color: #32363a;} |
|||
body.theme-blue .layui-btn-primary:hover{border-color: #40a9ff; color: #40a9ff; } |
|||
body.theme-blue .layui-btn-primary:active{border-color: #40a9ff; color: #40a9ff;} |
|||
body.theme-blue .layui-btn-normal{background-color:#1890ff;color:#ffffff;} |
|||
body.theme-blue .layui-btn-normal:hover{background-color: #40a9ff;} |
|||
body.theme-blue .layui-btn-normal:active{background-color: #1890ff;} |
|||
body.theme-blue .edoc-btn{background-color: #1890ff;} |
|||
body.theme-blue .edoc-btn:hover{background-color: #40a9ff;} |
|||
|
|||
body.theme-blue .layui-input, |
|||
body.theme-blue .layui-textarea{border-color: #bfbfbf;color: #32363a;} |
|||
body.theme-blue .layui-input:hover, |
|||
body.theme-blue .layui-textarea:hover{border-color: #40a9ff ;} |
|||
body.theme-blue .layui-input:focus, |
|||
body.theme-blue .layui-textarea:focus{border-color: #40a9ff ;} |
|||
|
|||
body.theme-blue .edoc-table-top-block .layui-layout-left .searchInput{border-color: #bfbfbf;color: #32363a;} |
|||
body.theme-blue .edoc-table-top-block .layui-layout-left .searchInput:hover{border-color: #40a9ff;} |
|||
body.theme-blue .edoc-table-top-block .layui-layout-left .searchInput:hover{border-color: #40a9ff;} |
|||
body.theme-blue .edoc-table-top-block .layui-nav:hover{border-color: #1890ff;} |
|||
|
|||
body.theme-blue .layui-form-checkbox i{border-color: #bfbfbf;} |
|||
body.theme-blue .layui-form-checkbox:hover i{border-color: #1890ff;} |
|||
body.theme-blue .layui-form-checked[lay-skin="primary"] i{border-color: #1890ff; background-color: #1890ff; color: #fff;} |
|||
body.theme-blue .edoc-portal-search-bottom .layui-form-checked[lay-skin="primary"] i{ background-color: #fff;} |
|||
body.theme-blue .layui-form-onswitch{border-color: #1890ff; background-color: #1890ff;} |
|||
body.theme-blue .layui-form-onswitch.layui-checkbox-disbaled.layui-disabled[lay-skin="_switch"]{background-color:#A3D3FF;border-color: #A3D3FF;} |
|||
body.theme-blue .layui-form-radioed>i,body.theme-blue .layui-form-radio>i:hover{color: #1890ff;} |
|||
body.theme-blue .layui-form-select dl dd.layui-this{background-color: #e6f7ff;} |
|||
|
|||
body.theme-blue .layui-input:hover, body.theme-blue .layui-textarea:hover{border-color: #1890ff;} |
|||
body.theme-blue .layui-input:focus, body.theme-blue .layui-textarea:focus{border-color: #1890ff;} |
|||
|
|||
body.theme-blue .edoc-navOpt .layui-nav-item>a:hover>p{color:#1890ff;} |
|||
body.theme-blue .edoc-navOpt .layui-nav-item>a:hover>i{color:#1890ff;} |
|||
body.theme-blue .edoc-navOpt .layui-nav-item>a:hover>.layui-nav-more{color:#1890ff;} |
|||
body.theme-blue .edoc-navOpt>.layui-this>a:first-child {background-color:#e6f7ff;color:#1890ff;} |
|||
body.theme-blue .edoc-navOpt>.layui-this>a:first-child >i{color:#1890ff;} |
|||
body.theme-blue .edoc-navOpt .edoc-nav-thisParent>a>p, |
|||
body.theme-blue .edoc-navOpt .edoc-nav-thisParent>a>i:first-child{color: #1890ff;} |
|||
body.theme-blue .edoc-navOpt .layui-nav-child dd.layui-this>a:first-child{background-color: #e6f7ff;color:#1890ff !important;} |
|||
body.theme-blue .edoc-navOpt>.layui-nav-itemed dd>a:hover>p, |
|||
body.theme-blue .edoc-navOpt>.layui-nav-itemed dd>a:hover>i, |
|||
body.theme-blue .edoc-navOpt>.layui-nav-itemed dd>a:hover>.layui-nav-more{color: #1890ff;} |
|||
|
|||
body.theme-blue .edoc-table-top-block .layui-nav .layui-nav-mored {border-color:transparent;border-bottom-color:#1890ff;} |
|||
|
|||
body.theme-blue .layui-tab-brief > .layui-tab-title .layui-this:after,.layui-tab-brief > .layui-tab-more li.layui-this:after{border-bottom: 3px solid #1890ff;} |
|||
body.theme-blue .layui-tab.layui-tab-brief > .layui-tab-title .layui-this {color:#1890ff;} |
|||
|
|||
body.theme-blue .eleTree-checkbox i:hover { border-color: #70ABE6; } |
|||
body.theme-blue .eleTree-node .eleTree-checkbox-checked i{border-color: #1890ff;background-color: #1890ff;} |
|||
body.theme-blue .eleTree-node-content .eleTree-node-content-more {color: #1890ff;} |
|||
body.theme-blue .eleTree-node .eleTree-node-content.eleTree-node-content-active .eleTree-node-content-label{background-color: #d1e8ff !important;color: #32363a;} |
|||
|
|||
body.theme-blue .edoc-table-top-block .layui-nav {border-color: #bfbfbf;} |
|||
body.theme-blue .edoc-table-top-block .layui-layout-right .batchmenu-nav:hover{border-color:#40a9ff;background-color: #ffffff;} |
|||
body.theme-blue .edoc-table-top-block .layui-layout-right .layui-nav .layui-nav-mored {border-color:transparent;border-bottom-color:#1890ff;} |
|||
body.theme-blue .edoc-table-top-block .layui-nav:hover{border-color: #1890ff;} |
|||
body.theme-blue .edoc-table-top-block .layui-nav:hover .layui-nav-item >a{color: #1890ff;} |
|||
body.theme-blue .edoc-table-top-block .cols-filter {border: 1px solid #bfbfbf;} |
|||
body.theme-blue .edoc-table-top-block .cols-filter:hover{border: 1px solid #40a9ff;background-color: #ffffff;} |
|||
body.theme-blue .edoc-table-top-block .cols-filter:hover >i{color: #1890ff;} |
|||
|
|||
body.theme-blue .edoc_helpManage_Icon .far.fa-question:hover{color:#1890ff;} |
|||
body.theme-blue .layui-header .layui-layout-right .far.fa-question-circle:hover{color:#40a9ff;} |
|||
|
|||
body.theme-blue .layui-laypage a:hover{color: #0066CC;} |
|||
body.theme-blue .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color: #1890ff; } |
|||
body.theme-blue .layui-laypage select:hover, |
|||
body.theme-blue .layui-laypage select:focus{border-color: #1890ff;} |
|||
|
|||
body.theme-blue .layui-laydate .layui-this{background-color: #1890ff !important;color: #ffffff !important;} |
|||
body.theme-blue .laydate-theme-molv .layui-laydate-footer span:hover , |
|||
body.theme-blue .laydate-theme-molv .layui-laydate-footer span[lay-type="date"]{color: #1890ff;} |
|||
body.theme-blue .layui-laydate-footer .laydate-footer-btns span:hover{color: #fff;background-color:#1890ff ;} |
|||
|
|||
body.theme-blue .edoc-timeline>.layui-timeline-item>i{color: #1890ff;} |
|||
|
|||
/* body.theme-blue .layui-timeline-axis{background-color: #fff; color: #1890ff;} */ |
|||
|
|||
/*console.css*/ |
|||
body.theme-blue .notification .li-ltem .content.icon-hover{color: #1890ff;} |
|||
body.theme-blue .shortcut .layadmin-shortcut li a .fas.icon-hover{ color: #1890ff; } |
|||
body.theme-blue .car .layadmin-car li a .fas.icon-hover{ color: #1890ff; } |
|||
body.theme-blue .shortcut .layui-card-header i:hover{ color: #1890ff; } |
|||
body.theme-blue .edoc_helpManage_Icon .far.fa-cog:hover{color: #1890ff;} |
|||
body.theme-blue .edoc_helpManage_Icon .far.fa-expand-arrows-alt:hover{color: #1890ff;} |
|||
body.theme-blue .room .room-item li:hover .fas {color: #d8ebfd;} |
|||
body.theme-blue .car .layui-carousel-ind li.layui-this { background-color: #bae7ff; } |
|||
body.theme-blue .shortcut .layadmin-shortcut li a .fas{color: #1890ff;} |
|||
body.theme-blue .shortcut .layui-carousel-ind li.layui-this { background-color: #bae7ff; } |
|||
|
|||
/*arrange_home.css*/ |
|||
body.theme-blue .edoc-arch-item:hover .arch-item-icon i.fas{color: #f5faff;} |
|||
|
|||
/*arrange_list.css*/ |
|||
body.theme-blue .edoc-arrange-tree-title .fas:hover {color: #1890ff;} |
|||
body.theme-blue .edoc-arrange-tree-this{background-color: #d1e8ff;} |
|||
|
|||
/*arrange_d_record.css*/ |
|||
body.theme-blue .edoc-blocktag.edoc-blocktag-normal{background-color: #1890ff;color: #ffffff;} |
|||
body.theme-blue .edoc-blocktag.edoc-blocktag-normal:hover{background-color: #40a9ff;} |
|||
body.theme-blue .edoc-blocktag.edoc-blocktag-primary:hover{border-color: #1890ff;color: #1890ff;} |
|||
body.theme-blue .edoc-blocktag.edoc-blocktag-primary:hover .edoc-blocktag-icon i{color: #1890ff;} |
|||
body.theme-blue #Catalog_box dd.active a{color:#1890ff;} |
|||
body.theme-blue #Catalog_box dd a:hover{color:#1890ff;} |
|||
body.theme-blue .layui-btn-primary:hover i{color: #40a9ff !important;} |
|||
|
|||
/*quickCheck_home.css*/ |
|||
body.theme-blue .quickCheck-card:hover { box-shadow: 0 2px 8px #e6f7ff; background-color: #e6f7ff; } |
|||
body.theme-blue .quickCheck-card-checked { border-color: #40a9ff; box-shadow: 0 2px 8px #e6f7ff; background-color: #e6f7ff; } |
|||
|
|||
/*virtualWarehouse_d_home.css*/ |
|||
body.theme-blue .edoc-warehousePreviewAdjustment-block>ul>li>div[data-open=true]{background-color: #096dd9;} |
|||
body.theme-blue .edoc-virtualWarehouse-thisBorder{border-bottom: 2px solid #1890ff !important;} |
|||
/* body.theme-blue .edoc-virtualWarehouse-thisBorder:after{content: "";position: absolute;left: 0px;bottom: 0px;height: 2px;width: 100%;background-color: #1890ff;} */ |
|||
body.theme-blue .edoc-warehousePreviewAdjustment-view table td:hover{background-color: #f7f9fc;} |
|||
|
|||
/*arrange_d_batchModify.css*/ |
|||
body.theme-blue .edoc-batchModifyPermissions-title{background-color: #e6f7ff;} |
|||
|
|||
/*arrange_d_fileImport.css*/ |
|||
body.theme-blue .edoc-stepItem-icon.edoc-stepItem-now .step-icon{background-color: #1890ff;} |
|||
body.theme-blue .layui-btn-link.filename .fas:hover, |
|||
body.theme-blue .layui-btn-link.filename .far:hover{color:#1890ff;} |
|||
body.theme-blue .edoc-stepItem-icon.edoc-stepItem-after .step-icon i{color: #1890ff;} |
|||
|
|||
/*前台 都带着 .edoc-main 类*/ |
|||
/*portal.css*/ |
|||
body.theme-blue .edoc-main .layui-tab-title li:hover{color: #1890ff;} |
|||
/* body.theme-blue .edoc-main .edoc-tab-content-left p:hover{color: #1890ff;} */ |
|||
body.theme-blue .edoc-main .edoc-front-layout-content .edoc-front-body .edoc-portal-content{background-color: #0A6ED1;} |
|||
|
|||
/*common_front.css*/ |
|||
body.theme-blue .edoc-main .edoc-portal-header .edoc-portal-header-right .layui-nav-bar{background-color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-portal-header .edoc-portal-header-right .layui-nav .layui-nav-item a:hover{color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-portal-header .edoc-portal-header-right .layui-nav .layui-nav-item.layui-this a{color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-front-selectBtn a.current{background-color: #e6f7ff !important;} |
|||
body.theme-blue .layui-tree-line .layui-tree-set.current>.layui-tree-entry .layui-tree-txt{background-color: #d1e8ff;} |
|||
body.theme-blue .edoc-main .edoc-front-form .layui-form-item .layui-form-checkbox[lay-skin="primary"]:hover i{border-color: #1890ff !important;} |
|||
body.theme-blue .edoc-main .edoc-tab-border.layui-tab-brief .layui-tab-title .layui-this{background-color: #e6f7ff;} |
|||
body.theme-blue .edoc-main .edoc-tab-border.layui-tab-brief .layui-tab-title .layui-this:before{background-color: #1890ff;} |
|||
/* body.theme-blue .edoc-main .edoc-portal-header .header-hover:hover{color: #1890ff;} */ |
|||
body.theme-blue .edoc-main .front_role_units_content .front_role_deps.front_role_deps_currut{background-color: #e6f7ff;} |
|||
body.theme-blue .edoc-main .layui-nav .layui-nav-child dd.layui-this a{background-color: #e6f7ff;} |
|||
|
|||
body.theme-blue .edoc-main .edoc-side-nav .edoc-side-nav-item.current{ background-color: #e6f7ff; } |
|||
body.theme-blue .edoc-main .edoc-side-nav .edoc-side-nav-item.current .edoc-side-nav-item-text{color:#1890ff;} |
|||
body.theme-blue .edoc-main .edoc-side-nav .edoc-side-nav-item.current .edoc-side-nav-item-icon{color:#1890ff;} |
|||
body.theme-blue .edoc-main .edoc-side-nav .edoc-side-nav-item .edoc-side-nav-bar{ background-color: #1890ff; } |
|||
body.theme-blue .edoc-main .edoc-side-nav .edoc-side-nav-item:hover .edoc-side-nav-item-icon{color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-side-nav .edoc-side-nav-item:hover .edoc-side-nav-item-text{color: #1890ff;} |
|||
|
|||
body.theme-blue .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-item-title.current .edoc-side-nav-item-text{color:#1890ff;} |
|||
body.theme-blue .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-item-title.current .edoc-side-nav-item-icon{color:#1890ff;} |
|||
body.theme-blue .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-item-title:hover{color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-item-title:hover .edoc-side-nav-item-icon{color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-item-title:hover .edoc-side-nav-item-text{color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-side-childNav .edoc-side-nav-item .current{ background-color: #e6f7ff; } |
|||
body.theme-blue .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-bar{ background-color: #1890ff; } |
|||
|
|||
body.theme-blue .edoc-main .edoc-front-btn:hover{border-color: #40a9ff;color: #40a9ff;} |
|||
body.theme-blue .edoc-main .edoc-front-btn:focus{border-color: #40a9ff;color: #40a9ff;} |
|||
body.theme-blue .edoc-main .edoc-front-btn:active{border-color: #40a9ff;} |
|||
body.theme-blue .edoc-main .edoc-front-btn.edoc-front-btn-normal{background-color: #1890ff;border-color: #1890ff;color: #ffffff;} |
|||
body.theme-blue .edoc-main .edoc-front-btn.edoc-front-btn-normal[disabled]{background-color: #bae7ff;border-color: #bae7ff;color: #ffffff;} |
|||
body.theme-blue .edoc-main .edoc-front-btn.edoc-front-btn-normal:hover{background-color: #40a9ff;color: #fff;border-color: #40a9ff;} |
|||
body.theme-blue .edoc-main .edoc-front-btn.edoc-front-btn-normal[disabled]:hover{background-color: #bae7ff;border-color: #bae7ff;color: #ffffff !important;} |
|||
body.theme-blue .edoc-main .edoc-front-btn:hover{border-color: #40a9ff;color: #40a9ff;} |
|||
body.theme-blue .edoc-main .edoc-front-btn:focus{border-color: #40a9ff;} |
|||
body.theme-blue .edoc-main .edoc-front-btn:active{border-color: #40a9ff;} |
|||
body.theme-blue .edoc-main .edoc-front-batchBtn.edoc-front-btn-normal{background-color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-front-batchBtn.edoc-front-btn-normal:hover{background-color: #40a9ff;} |
|||
body.theme-blue .edoc-main .edoc-front-batchBtn:hover{color: #40a9ff;border-color: #40a9ff;} |
|||
body.theme-blue .edoc-main .edoc-front-batchBtn:hover>li>a.unis-icon{color: #40a9ff;} |
|||
body.theme-blue .edoc-main .edoc-front-batchBtn.edoc-front-btn-normal .layui-nav-item>a.unis-icon{color: #ffffff;} |
|||
body.theme-blue .edoc-main .edocpage .edocpage-curr{background-color: #1890ff;} |
|||
body.theme-blue .edoc-main .edocpage .edocpage-skip .edocpage-input:hover{border-color: #1890ff;} |
|||
body.theme-blue .edoc-main .edocpage .edocpage-skip .edocpage-input:focus{border-color: #1890ff;} |
|||
|
|||
/* 前台弹窗底部按钮 */ |
|||
body.theme-blue .edoc-dialog-bottom .edoc-front-btn:hover{border-color: #40a9ff;color: #40a9ff;} |
|||
body.theme-blue .edoc-dialog-bottom .edoc-front-btn:focus{border-color: #40a9ff;color: #40a9ff;} |
|||
body.theme-blue .edoc-dialog-bottom .edoc-front-btn:active{border-color: #40a9ff;} |
|||
body.theme-blue .edoc-dialog-bottom .edoc-front-btn.edoc-front-btn-normal{background-color: #1890ff;border-color: #1890ff;color: #ffffff;} |
|||
body.theme-blue .edoc-dialog-bottom .edoc-front-btn.edoc-front-btn-normal:hover{background-color: #40a9ff;border-color: #40a9ff;} |
|||
|
|||
body.theme-blue .edoc-main .layui-input:focus{box-shadow: 0 0 0 2px #e6f7ff;-webkit-box-shadow: 0 0 0 2px #e6f7ff;animation: fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation-fill-mode: forwards;} |
|||
body.theme-blue .edoc-main .layui-input:active{box-shadow:0px 0px 0px 2px #e6f7ff;} |
|||
|
|||
body.theme-blue .layui-layer .layui-layer-btn .layui-layer-btn0{background-color: #1890ff;border-color: #1890ff;color: #fff;} |
|||
body.theme-blue .layui-layer .layui-layer-btn .layui-layer-btn0:hover{background-color: #40a9ff;border-color: #40a9ff;color: #fff;} |
|||
body.theme-blue .layui-layer .layui-layer-btn .layui-layer-btn0:active{box-shadow: 0 0 0 2px #e6f7ff;background-color: #1890ff;border-color: #1890ff;color: #fff;} |
|||
body.theme-blue .layui-layer .layui-layer-btn a:hover{border-color: #1890ff;color: #40a9ff;} |
|||
body.theme-blue .layui-layer .layui-layer-btn a:active{box-shadow: 0 0 0 2px #e6f7ff;border-color: #1890ff;color: #40a9ff;} |
|||
body.theme-blue .layui-layer .edoc-dialog-input:focus{border-color: #1890ff;} |
|||
|
|||
body.theme-blue .edoc-main .edoc-rightNav-fixedNav .layui-timeline-content.current .layui-timeline-title a{color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-rightNav-fixedNav .layui-timeline-content.current:before{background-color: #1890ff;} |
|||
|
|||
body.theme-blue .edoc-main .edoc-front-timeline .layui-timeline-axis.unis-icon{color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-front-timeline .layui-timeline-item:before{background-color: #1890ff;} |
|||
|
|||
body.theme-blue .use-pop .edoc-contentBlock-head .layui-timeline-axis.closePop:hover{color:#1890ff !important;} |
|||
body.theme-blue .use-pop .edoc-contentBlock-head .layui-timeline-axis.closePop:active{color:#40a9ff !important;} |
|||
|
|||
/* 前台——快速检索 */ |
|||
body.theme-blue .edoc-main .edoc-searchquick-complex:hover, |
|||
body.theme-blue .edoc-main .edoc-searchquick-complex:focus{border-color: #1890ff;} |
|||
body.theme-blue .edoc-main .edoc-searchquick-complex:active{border-color: #1890ff;box-shadow: 0px 0px 0px 2px #e6f7ff;} |
|||
|
|||
/* utilize.css */ |
|||
body.theme-blue .edoc-main .step-log .edoc-contentBlock-head .layui-timeline-axis:hover{color: #1890ff;} |
|||
|
|||
/* borrowCar.css */ |
|||
body.theme-blue .edoc-main .edoc-borrowCar-footBody{background-color: #e6f7ff;} |
|||
body.theme-blue .edoc-main .edoc-rightNav-content>div.edoc-applyDetail_class-foot{background-color: #e6f7ff;} |
|||
body.theme-blue .edoc-main .applyDetail-right>.applyDetail-right_top>button:hover, |
|||
body.theme-blue .edoc-main .applyDetail-right>.applyDetail-right_top>button:hover>i{color: #1890ff;} |
|||
|
|||
/* catalog.css */ |
|||
body.theme-blue .edoc-main .edoc-catalog-tree-this{background-color: #d1e8ff !important;} |
|||
|
|||
/* searchadvanced.css */ |
|||
body.theme-blue .edoc-main .edoc-body-top-wrap .condition-top .selectY-box .show:hover, |
|||
body.theme-blue .edoc-main .edoc-body-top-wrap .condition-top .selectY-box .show:focus{border-color: #1890ff !important;} |
|||
body.theme-blue .edoc-main .searchAdvance-select .selectY-box .pop ul li.active{background-color: #E6F7FF;} |
|||
body.theme-blue .edoc-main .searchAdvance-select .selectY-box .pop ul li:hover{background-color: #F7F7F7;} |
|||
|
|||
/* multilingual_home.css */ |
|||
body.theme-blue .icondivs .far.fa-cog:hover{color: #1890ff;} |
|||
|
|||
/* 虚拟库房 */ |
|||
body.theme-blue .edoc-warehousePreviewAdjustment-block .occupy{background-color: #bae7ff;} |
|||
body.theme-blue .edoc-warehousePreviewAdjustment-block .default{background-color: #e6f7ff;} |
|||
body.theme-blue #selectTargetArchives:hover, |
|||
body.theme-blue #selectTargetArchives:focus{border-color: #1890ff;} |
|||
|
|||
/* 帮助管理 */ |
|||
body.theme-blue .stepBlock .stepBlock_item_orderNum .orderindex{border: 1px solid #1890ff;background-color: #1890ff;} |
|||
body.theme-blue .detail_order{background-color: #1890ff;} |
|||
body.theme-blue .stepBlock .stepBlock_item_pic_li:hover{border-color: #1890ff;} |
|||
body.theme-blue .stepBlock .stepBlock_item_pic_li .fa-trash-alt{color: #1890ff;} |
|||
body.theme-blue .stepBlock .stepBlock_item_pic_li_btn:hover{border-color: #1890ff;} |
|||
body.theme-blue .stepBlock .stepBlock_item_pic_li_btn:hover span{color: #1890ff;} |
|||
|
|||
/* 批量装盒 */ |
|||
body.theme-blue .d_batchCartoning_table .layui-table-cell select:hover, |
|||
body.theme-blue .d_batchCartoning_table .layui-table-cell select:focus{border-color: #1890ff;} |
|||
|
|||
/* 输入型下拉框 */ |
|||
body.theme-blue .edoc-inputselect-this{background:#e6f7ff;} |
|||
|
|||
|
|||
/*----------------------紫色主题------------------------------*/ |
|||
/*index.css*/ |
|||
body.theme-purple .layui-layout-admin .layui-side {background-color: #450043;} |
|||
body.theme-purple .layui-layout-admin .layui-nav-tree .layui-checked-add {background-color: #920784;} |
|||
body.theme-purple .layui-layout-admin .layui-side-menu .layui-nav .layui-nav-item a:hover {background-color: #6b0064;} |
|||
body.theme-purple .layui-layout-admin .layui-nav-tree .layui-nav-item-selectd {background-color: #6b0064;} |
|||
body.theme-purple .layui-layout-admin .layui-side-menu .layui-nav .layui-nav-item .layui-card .fas{color: #920784;} |
|||
body.theme-purple #toast-container .layui-icon.layui-icon-ok{background-color: #920784;} |
|||
/* body.theme-purple .layui-layout-admin .unis_logo {color: #811086;} */ |
|||
body.theme-purple .layui-layout-admin .layui-layer-tab .layui-layer-title span.layui-this{color: #920784;} |
|||
body.theme-purple .layui-layout-admin .layui-nav .layui-nav-item a{color: #fbf3f9;} |
|||
body.theme-purple .layui-layout-admin .front_role_deps_currut{background-color: #fbf3f9;} |
|||
body.theme-purple .layui-layout-admin .front_role_deps_currut a:hover{background-color: #fbf3f9;} |
|||
body.theme-purple .layui-layout-admin .layui-layer-tab .layui-layer-title span.layui-this{color: #920784;} |
|||
|
|||
/*common.css*/ |
|||
body.theme-purple .layui-btn-primary{border-color: #bfbfbf;color: #32363a;} |
|||
body.theme-purple .layui-btn-primary:hover{border-color: #920784; color: #920784; } |
|||
body.theme-purple .layui-btn-primary:active{border-color: #920784; color: #920784;} |
|||
body.theme-purple .layui-btn-normal{background-color:#920784;color:#ffffff;} |
|||
body.theme-purple .layui-btn-normal:hover{background-color: #6b0064;} |
|||
body.theme-purple .layui-btn-normal:active{background-color: #6b0064;} |
|||
body.theme-purple .edoc-btn{background-color: #920784;} |
|||
body.theme-purple .edoc-btn:hover{background-color: #6b0064;} |
|||
|
|||
body.theme-purple .layui-input, |
|||
body.theme-purple .layui-textarea{border-color: #bfbfbf;color: #32363a;} |
|||
body.theme-purple .layui-input:hover, |
|||
body.theme-purple .layui-textarea:hover{border-color: #920784;} |
|||
body.theme-purple .layui-input:focus, |
|||
body.theme-purple .layui-textarea:focus{border-color: #920784;} |
|||
|
|||
body.theme-purple .edoc-table-top-block .layui-layout-left .searchInput{border-color: #bfbfbf;color: #32363a;} |
|||
body.theme-purple .edoc-table-top-block .layui-layout-left .searchInput:hover{border-color: #920784;} |
|||
body.theme-purple .edoc-table-top-block .layui-layout-left .searchInput:hover{border-color: #920784;} |
|||
body.theme-purple .edoc-table-top-block .layui-nav:hover{border-color: #920784;} |
|||
|
|||
body.theme-purple .layui-form-checkbox i{border-color: #bfbfbf;} |
|||
body.theme-purple .layui-form-checkbox:hover i{border-color: #920784;} |
|||
body.theme-purple .layui-form-checked[lay-skin="primary"] i{border-color: #920784; background-color: #920784; color: #fff;} |
|||
body.theme-purple .layui-form-onswitch{border-color: #920784; background-color: #920784;} |
|||
body.theme-purple .layui-form-onswitch.layui-checkbox-disbaled.layui-disabled[lay-skin="_switch"]{background-color:#f7e3f2;border-color: #f7e3f2;} |
|||
body.theme-purple .layui-form-radioed>i,body.theme-purple .layui-form-radio>i:hover{color: #920784;} |
|||
body.theme-purple .layui-form-select dl dd.layui-this{background-color: #fbf3f9;} |
|||
|
|||
body.theme-purple .layui-input:hover, body.theme-purple .layui-textarea:hover{border-color: #920784;} |
|||
body.theme-purple .layui-input:focus, body.theme-purple .layui-textarea:focus{border-color: #920784;} |
|||
|
|||
body.theme-purple .edoc-navOpt .layui-nav-item>a:hover>p{color:#920784;} |
|||
body.theme-purple .edoc-navOpt .layui-nav-item>a:hover>i{color:#920784;} |
|||
body.theme-purple .edoc-navOpt .layui-nav-item>a:hover>.layui-nav-more{color:#920784;} |
|||
body.theme-purple .edoc-navOpt>.layui-this>a:first-child {background-color:#f9ebf5;color:#920784;} |
|||
body.theme-purple .edoc-navOpt>.layui-this>a:first-child >i{color:#920784;} |
|||
body.theme-purple .edoc-navOpt .edoc-nav-thisParent>a>p, |
|||
body.theme-purple .edoc-navOpt .edoc-nav-thisParent>a>i:first-child{color: #920784;} |
|||
body.theme-purple .edoc-navOpt .layui-nav-child dd.layui-this>a:first-child{background-color: #f9ebf9;color:#920784 !important;} |
|||
body.theme-purple .edoc-navOpt>.layui-nav-itemed dd>a:hover>p, |
|||
body.theme-purple .edoc-navOpt>.layui-nav-itemed dd>a:hover>i, |
|||
body.theme-purple .edoc-navOpt>.layui-nav-itemed dd>a:hover>.layui-nav-more{color: #920784;} |
|||
|
|||
body.theme-purple .edoc-table-top-block .layui-nav .layui-nav-mored {border-color:transparent;border-bottom-color:#920784;} |
|||
|
|||
body.theme-purple .layui-tab-brief > .layui-tab-title .layui-this:after,.layui-tab-brief > .layui-tab-more li.layui-this:after{border-bottom: 3px solid #920784;} |
|||
body.theme-purple .layui-tab.layui-tab-brief > .layui-tab-title .layui-this {color:#920784;} |
|||
|
|||
body.theme-purple .eleTree-checkbox i:hover { border-color: #920784; } |
|||
body.theme-purple .eleTree-node .eleTree-checkbox-checked i{border-color: #920784;background-color: #920784;} |
|||
body.theme-purple .eleTree-node-content .eleTree-node-content-more {color: #920784;} |
|||
body.theme-purple .eleTree-node .eleTree-node-content.eleTree-node-content-active .eleTree-node-content-label{background-color: #f9ebf5 !important;color: #32363a;} |
|||
|
|||
body.theme-purple .edoc-table-top-block .layui-nav {border-color: #bfbfbf;} |
|||
body.theme-purple .edoc-table-top-block .layui-layout-right .batchmenu-nav:hover{border-color:#920784;background-color: #ffffff;} |
|||
body.theme-purple .edoc-table-top-block .layui-layout-right .layui-nav .layui-nav-mored {border-color:transparent;border-bottom-color:#920784;} |
|||
body.theme-purple .edoc-table-top-block .layui-nav .layui-nav-item>a:hover {color: #920784;} |
|||
body.theme-purple .edoc-table-top-block .layui-nav .layui-nav-item:hover >a {color: #920784;} |
|||
body.theme-purple .edoc-table-top-block .cols-filter {border: 1px solid #bfbfbf;} |
|||
body.theme-purple .edoc-table-top-block .cols-filter:hover >i{color: #920784;} |
|||
body.theme-purple .edoc-table-top-block .cols-filter:hover{border: 1px solid #920784;background-color: #ffffff;} |
|||
|
|||
body.theme-purple .edoc_helpManage_Icon .far.fa-question:hover{color:#920784;} |
|||
body.theme-purple .layui-header .layui-layout-right .far.fa-question-circle:hover{color:#920784;} |
|||
|
|||
body.theme-purple .layui-laypage a:hover{color: #6a6d70;} |
|||
body.theme-purple .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color: #920784; } |
|||
body.theme-purple .layui-laypage select:hover, |
|||
body.theme-purple .layui-laypage select:focus{border-color: #920784;} |
|||
|
|||
body.theme-purple .layui-laydate .layui-this{background-color: #920784 !important;color: #ffffff !important;} |
|||
body.theme-purple .laydate-theme-molv .layui-laydate-footer span:hover , |
|||
body.theme-purple .laydate-theme-molv .layui-laydate-footer span[lay-type="date"]{color: #920784;} |
|||
body.theme-purple .layui-laydate-footer .laydate-footer-btns span:hover{color: #fff;background-color:#920784 ;} |
|||
|
|||
body.theme-purple .edoc-timeline>.layui-timeline-item>i{color: #920784;} |
|||
|
|||
/* body.theme-purple .layui-timeline-axis{background-color: #fff; color: #920784;} */ |
|||
|
|||
/*console.css*/ |
|||
body.theme-purple .shortcut .layadmin-shortcut li a .fas.icon-hover{ color: #920784; } |
|||
body.theme-purple .car .layadmin-car li a .fas.icon-hover{ color: #920784; } |
|||
body.theme-purple .shortcut .layui-card-header i:hover{ color: #920784; } |
|||
body.theme-purple .edoc_helpManage_Icon .far.fa-cog:hover{color: #920784;} |
|||
body.theme-purple .edoc_helpManage_Icon .far.fa-expand-arrows-alt:hover{color: #920784;} |
|||
body.theme-purple .room .room-item li:hover .fas {color: #f7e3f2;} |
|||
body.theme-purple .car .layui-carousel-ind li.layui-this { background-color: #f7e3f2; } |
|||
body.theme-purple .shortcut .layadmin-shortcut li a .fas{color: #920784;} |
|||
body.theme-purple .shortcut .layui-carousel-ind li.layui-this { background-color: #f7e3f2; } |
|||
|
|||
/*arrange_home.css*/ |
|||
body.theme-purple .edoc-arch-item:hover .arch-item-icon i.fas{color: #f9ebf5;} |
|||
|
|||
/*arrange_list.css*/ |
|||
body.theme-purple .edoc-arrange-tree-title .fas:hover {color: #920784;} |
|||
body.theme-purple .edoc-arrange-tree-this{background-color: #f9ebf5;} |
|||
|
|||
/*arrange_d_record.css*/ |
|||
body.theme-purple .edoc-blocktag.edoc-blocktag-normal{background-color: #920784;color: #ffffff;} |
|||
body.theme-purple .edoc-blocktag.edoc-blocktag-normal:hover{background-color: #6b0064;} |
|||
body.theme-purple .edoc-blocktag.edoc-blocktag-primary:hover{border-color: #920784;color: #920784;} |
|||
body.theme-purple .edoc-blocktag.edoc-blocktag-primary:hover .edoc-blocktag-icon i{color: #920784;} |
|||
body.theme-purple #Catalog_box dd.active a{color:#920784;} |
|||
body.theme-purple #Catalog_box dd a:hover{color:#920784;} |
|||
body.theme-purple .layui-btn-primary:hover i{color: #6b0064 !important;} |
|||
|
|||
/*quickCheck_home.css*/ |
|||
body.theme-purple .quickCheck-card:hover{box-shadow: 0 2px 8px #fbf3f9; background-color: #fbf3f9;} |
|||
body.theme-purple .quickCheck-card-checked { border-color: #920784; box-shadow: 0 2px 8px #fbf3f9; background-color: #fbf3f9; } |
|||
|
|||
/*virtualWarehouse_d_home.css*/ |
|||
body.theme-purple .edoc-warehousePreviewAdjustment-block>ul>li>div[data-open=true]{background-color: #6b0064;} |
|||
body.theme-purple .edoc-virtualWarehouse-thisBorder{border-bottom: 2px solid #920784 !important;} |
|||
body.theme-purple .edoc-warehousePreviewAdjustment-view table td:hover{background-color: #fbf3f9;} |
|||
|
|||
/*arrange_d_batchModify.css*/ |
|||
body.theme-purple .edoc-batchModifyPermissions-title{background-color: #f9ebf5;} |
|||
|
|||
/*arrange_d_fileImport.css*/ |
|||
body.theme-purple .edoc-stepItem-icon.edoc-stepItem-now .step-icon{background-color: #920784;} |
|||
body.theme-purple .layui-btn-link.filename .fas:hover, |
|||
body.theme-purple .layui-btn-link.filename .far:hover{color:#920784;} |
|||
body.theme-purple .edoc-stepItem-icon.edoc-stepItem-after .step-icon i{color: #920784;} |
|||
|
|||
/*前台 都带着 .edoc-main 类*/ |
|||
/*portal.css*/ |
|||
body.theme-purple .edoc-main .layui-tab-title li:hover{color: #920784;} |
|||
/* body.theme-purple .edoc-main .edoc-tab-content-left p:hover{color: #920784;} */ |
|||
body.theme-purple .edoc-main .edoc-front-layout-content .edoc-front-body .edoc-portal-content{background-color: #920784;} |
|||
|
|||
/*common_front.css*/ |
|||
body.theme-purple .edoc-main .edoc-portal-header .edoc-portal-header-right .layui-nav-bar{background-color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-portal-header .edoc-portal-header-right .layui-nav .layui-nav-item a:hover{color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-portal-header .edoc-portal-header-right .layui-nav .layui-nav-item.layui-this a{color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-front-selectBtn a.current{background-color: #f9ebf5 !important;} |
|||
body.theme-purple .layui-tree-line .layui-tree-set.current>.layui-tree-entry .layui-tree-txt{background-color: #f9ebf5;} |
|||
body.theme-purple .edoc-main .edoc-front-form .layui-form-item .layui-form-checkbox[lay-skin="primary"]:hover i{border-color: #920784 !important;} |
|||
body.theme-purple .edoc-main .edoc-tab-border.layui-tab-brief .layui-tab-title .layui-this{background-color: #FBF3F9;} |
|||
body.theme-purple .edoc-main .edoc-tab-border.layui-tab-brief .layui-tab-title .layui-this:before{background-color: #920784;} |
|||
/* body.theme-purple .edoc-main .edoc-portal-header .header-hover:hover{color: #920784;} */ |
|||
body.theme-purple .edoc-main .front_role_units_content .front_role_deps.front_role_deps_currut{background-color: #f9ebf5;} |
|||
body.theme-purple .edoc-main .layui-nav .layui-nav-child dd.layui-this a{background-color: #f9ebf5;} |
|||
|
|||
body.theme-purple .edoc-main .edoc-side-nav .edoc-side-nav-item.current{ background-color: #f9ebf5; } |
|||
body.theme-purple .edoc-main .edoc-side-nav .edoc-side-nav-item.current .edoc-side-nav-item-text{color:#920784;} |
|||
body.theme-purple .edoc-main .edoc-side-nav .edoc-side-nav-item.current .edoc-side-nav-item-icon{color:#920784;} |
|||
body.theme-purple .edoc-main .edoc-side-nav .edoc-side-nav-item .edoc-side-nav-bar{ background-color: #920784; } |
|||
body.theme-purple .edoc-main .edoc-side-nav .edoc-side-nav-item:hover .edoc-side-nav-item-icon{color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-side-nav .edoc-side-nav-item:hover .edoc-side-nav-item-text{color: #920784;} |
|||
|
|||
body.theme-purple .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-item-title.current .edoc-side-nav-item-text{color:#920784;} |
|||
body.theme-purple .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-item-title.current .edoc-side-nav-item-icon{color:#920784;} |
|||
body.theme-purple .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-item-title:hover{color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-item-title:hover .edoc-side-nav-item-icon{color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-item-title:hover .edoc-side-nav-item-text{color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-side-childNav .edoc-side-nav-item .current{ background-color: #f9ebf5; } |
|||
body.theme-purple .edoc-main .edoc-side-childNav .edoc-side-nav-item .edoc-side-nav-bar{ background-color: #920784; } |
|||
|
|||
body.theme-purple .edoc-main .edoc-front-btn:hover{border-color: #920784;color: #920784} |
|||
body.theme-purple .edoc-main .edoc-front-btn:focus{border-color: #920784;color: #920784} |
|||
body.theme-purple .edoc-main .edoc-front-btn:active{border-color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-front-btn.edoc-front-btn-normal{background-color: #920784;border-color: #920784;color: #ffffff;} |
|||
body.theme-purple .edoc-main .edoc-front-btn.edoc-front-btn-normal[disabled]{background-color: #F7E3F2;border-color: #F7E3F2;color: #ffffff;} |
|||
body.theme-purple .edoc-main .edoc-front-btn.edoc-front-btn-normal:hover{background-color: #6b0064;border-color: #6b0064;} |
|||
body.theme-purple .edoc-main .edoc-front-btn.edoc-front-btn-normal[disabled]:hover{background-color: #F7E3F2;border-color: #F7E3F2;color: #ffffff !important;} |
|||
body.theme-purple .edoc-main .edoc-front-batchBtn.edoc-front-btn-normal{background-color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-front-batchBtn.edoc-front-btn-normal:hover{background-color: #6b0064;} |
|||
body.theme-purple .edoc-main .edoc-front-batchBtn:hover{color: #920784;border-color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-front-batchBtn:hover>li>a.unis-icon{color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-front-batchBtn.edoc-front-btn-normal .layui-nav-item>a.unis-icon{color: #ffffff;} |
|||
body.theme-purple .edoc-main .edocpage .edocpage-curr{background-color: #920784;} |
|||
body.theme-purple .edoc-main .edocpage .edocpage-skip .edocpage-input:hover{border-color: #920784;} |
|||
body.theme-purple .edoc-main .edocpage .edocpage-skip .edocpage-input:focus{border-color: #920784;} |
|||
|
|||
/* 前台弹窗底部按钮 */ |
|||
body.theme-purple .edoc-dialog-bottom .edoc-front-btn:hover{border-color: #920784;color: #920784;} |
|||
body.theme-purple .edoc-dialog-bottom .edoc-front-btn:focus{border-color: #920784;color: #920784;} |
|||
body.theme-purple .edoc-dialog-bottom .edoc-front-btn:active{border-color: #920784;} |
|||
body.theme-purple .edoc-dialog-bottom .edoc-front-btn.edoc-front-btn-normal{background-color: #920784;border-color: #920784;color: #ffffff;} |
|||
body.theme-purple .edoc-dialog-bottom .edoc-front-btn.edoc-front-btn-normal:hover{background-color: #6b0064;border-color: #6b0064;} |
|||
|
|||
body.theme-purple .edoc-main .layui-input:focus{box-shadow: 0 0 0 2px #f9ebf5;-webkit-box-shadow: 0 0 0 2px #f9ebf5;animation: fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation-fill-mode: forwards;} |
|||
body.theme-purple .edoc-main .layui-input:active{box-shadow:0px 0px 0px 2px #f9ebf5;} |
|||
|
|||
body.theme-purple .layui-layer .layui-layer-btn .layui-layer-btn0{background-color: #920784;border-color: #920784;color: #fff;} |
|||
body.theme-purple .layui-layer .layui-layer-btn .layui-layer-btn0:hover{background-color: #6b0064;border-color: #6b0064;color: #fff;} |
|||
body.theme-purple .layui-layer .layui-layer-btn .layui-layer-btn0:active{box-shadow: 0 0 0 2px #f9ebf5;background-color: #6b0064;border-color: #6b0064;color: #fff;} |
|||
body.theme-purple .layui-layer .layui-layer-btn a:hover{border-color: #920784;color: #920784;} |
|||
body.theme-purple .layui-layer .layui-layer-btn a:active{box-shadow: 0 0 0 2px #f9ebf5;border-color: #920784;color: #920784;} |
|||
body.theme-purple .layui-layer .edoc-dialog-input:focus{border-color: #920784;} |
|||
|
|||
body.theme-purple .edoc-main .edoc-rightNav-fixedNav .layui-timeline-content.current .layui-timeline-title a{color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-rightNav-fixedNav .layui-timeline-content.current:before{background-color: #920784;} |
|||
|
|||
body.theme-purple .edoc-main .edoc-front-timeline .layui-timeline-axis.unis-icon{color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-front-timeline .layui-timeline-item:before{background-color: #920784;} |
|||
|
|||
body.theme-purple .use-pop .edoc-contentBlock-head .layui-timeline-axis.closePop:hover{color:#920784 !important;} |
|||
body.theme-purple .use-pop .edoc-contentBlock-head .layui-timeline-axis.closePop:active{color:#920784 !important;} |
|||
|
|||
/* 前台——快速检索 */ |
|||
body.theme-purple .edoc-main .edoc-searchquick-complex:hover, |
|||
body.theme-purple .edoc-main .edoc-searchquick-complex:focus{border-color: #920784;} |
|||
body.theme-purple .edoc-main .edoc-searchquick-complex:active{border-color: #920784;box-shadow: 0px 0px 0px 2px #F9EBF5;} |
|||
|
|||
/* utilize.css */ |
|||
body.theme-purple .edoc-main .step-log .edoc-contentBlock-head .layui-timeline-axis:hover{color: #920784;} |
|||
|
|||
/* borrowCar.css */ |
|||
body.theme-purple .edoc-main .edoc-borrowCar-footBody{background-color: #FBF3F9;} |
|||
body.theme-purple .edoc-main .edoc-rightNav-content>div.edoc-applyDetail_class-foot{background-color: #FBF3F9;} |
|||
body.theme-purple .edoc-main .applyDetail-right>.applyDetail-right_top>button:hover, |
|||
body.theme-purple .edoc-main .applyDetail-right>.applyDetail-right_top>button:hover>i{color: #920784;} |
|||
|
|||
/* catalog.css */ |
|||
body.theme-purple .edoc-main .edoc-catalog-tree-this{background-color: #f9ebf5 !important;} |
|||
|
|||
/* searchadvanced.css */ |
|||
body.theme-purple .edoc-main .edoc-body-top-wrap .condition-top .selectY-box .show:hover, |
|||
body.theme-purple .edoc-main .edoc-body-top-wrap .condition-top .selectY-box .show:focus{border-color: #920784 !important;} |
|||
body.theme-purple .edoc-main .searchAdvance-select .selectY-box .pop ul li.active{background-color: #f9ebf5;} |
|||
body.theme-purple .edoc-main .searchAdvance-select .selectY-box .pop ul li:hover{background-color: #F7F7F7;} |
|||
|
|||
/* multilingual_home.css */ |
|||
body.theme-purple .icondivs .far.fa-cog:hover{color: #920784;} |
|||
|
|||
/* 虚拟库房 */ |
|||
body.theme-purple .edoc-warehousePreviewAdjustment-block .occupy{background-color: #e09ccf;} |
|||
body.theme-purple .edoc-warehousePreviewAdjustment-block .default{background-color: #f9ebf5;} |
|||
body.theme-purple #selectTargetArchives:hover, |
|||
body.theme-purple #selectTargetArchives:focus{border-color: #920784;} |
|||
|
|||
/* 帮助管理 */ |
|||
body.theme-purple .stepBlock .stepBlock_item_orderNum .orderindex{border: 1px solid #920784;background-color: #920784;} |
|||
body.theme-purple .detail_order{background-color: #920784;} |
|||
body.theme-purple .stepBlock .stepBlock_item_pic_li:hover{border-color: #920784;} |
|||
body.theme-purple .stepBlock .stepBlock_item_pic_li .fa-trash-alt{color: #920784;} |
|||
body.theme-purple .stepBlock .stepBlock_item_pic_li_btn:hover{border-color: #920784;} |
|||
body.theme-purple .stepBlock .stepBlock_item_pic_li_btn:hover span{color: #920784;} |
|||
|
|||
/* 批量装盒 */ |
|||
body.theme-purple .d_batchCartoning_table .layui-table-cell select:hover, |
|||
body.theme-purple .d_batchCartoning_table .layui-table-cell select:focus{border-color: #920784;} |
|||
|
|||
/* 输入型下拉框 */ |
|||
body.theme-purple .edoc-inputselect-this{background:#f9ebf5;} |
|||
@ -0,0 +1,14 @@ |
|||
<!DOCTYPE html> |
|||
<!-- saved from url=(0066)chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/translate.html --> |
|||
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
|||
|
|||
<link rel="icon" href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/%PUBLIC_URL%/favicon.ico"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<link href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/static/css/translate.css" rel="stylesheet"> |
|||
<style> |
|||
</style> |
|||
</head> |
|||
<body style="display: inline-block;width: auto;height: auto"><div id="content-container" class="content-container" style="opacity: 0; transform: translateY(-50px) translateZ(0px);"><div></div><div><div id="anno-yellow" class="anno-action highlight-yellow"></div><div id="anno-blue" class="anno-action highlight-blue"></div><div id="anno-brown" class="anno-action highlight-brown"></div><div id="anno-red" class="anno-action highlight-red"></div></div></div> |
|||
|
|||
|
|||
</body></html> |
|||
@ -0,0 +1,14 @@ |
|||
<!DOCTYPE html> |
|||
<!-- saved from url=(0066)chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/translate.html --> |
|||
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
|||
|
|||
<link rel="icon" href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/%PUBLIC_URL%/favicon.ico"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<link href="chrome-extension://dppcnmibpgmagiigcnfdjpnghplibbna/static/css/translate.css" rel="stylesheet"> |
|||
<style> |
|||
</style> |
|||
</head> |
|||
<body style="display: inline-block;width: auto;height: auto"><div id="content-container" class="content-container" style="opacity: 0; transform: translateY(-50px) translateZ(0px);"><div></div><div><div id="anno-yellow" class="anno-action highlight-yellow"></div><div id="anno-blue" class="anno-action highlight-blue"></div><div id="anno-brown" class="anno-action highlight-brown"></div><div id="anno-red" class="anno-action highlight-red"></div></div></div> |
|||
|
|||
|
|||
</body></html> |
|||
@ -0,0 +1,59 @@ |
|||
import request from '@/utils/request' |
|||
|
|||
export function loadData(params, token) { |
|||
return request({ |
|||
url: '/ureport/loadData', |
|||
method: 'post', |
|||
headers: { 'X-Token': token }, |
|||
data: params |
|||
}) |
|||
} |
|||
|
|||
export function downloadWord(params, token) { |
|||
return request({ |
|||
url: '/ureport/download/word', |
|||
method: 'post', |
|||
headers: { 'X-Token': token }, |
|||
responseType: 'arraybuffer', |
|||
data: params |
|||
}) |
|||
} |
|||
|
|||
export function downloadExcel(params, token) { |
|||
return request({ |
|||
url: '/ureport/download/excel', |
|||
method: 'post', |
|||
headers: { 'X-Token': token }, |
|||
responseType: 'arraybuffer', |
|||
data: params |
|||
}) |
|||
} |
|||
|
|||
export function downloadPDF(params, token) { |
|||
return request({ |
|||
url: '/ureport/download/pdf', |
|||
method: 'post', |
|||
headers: { 'X-Token': token }, |
|||
responseType: 'arraybuffer', |
|||
data: params |
|||
}) |
|||
} |
|||
|
|||
export function print(params, token) { |
|||
return request({ |
|||
url: '/ureport/print', |
|||
method: 'post', |
|||
headers: { 'X-Token': token }, |
|||
responseType: 'arraybuffer', |
|||
data: params |
|||
}) |
|||
} |
|||
|
|||
export function refreshSearchForm(params, token) { |
|||
return request({ |
|||
url: '/ureport/refreshForm', |
|||
method: 'post', |
|||
headers: { 'X-Token': token }, |
|||
data: params |
|||
}) |
|||
} |
|||
@ -0,0 +1 @@ |
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739330265899" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5089" xmlns:xlink="http://www.w3.org/1999/xlink" width="256" height="256"><path d="M978.286 320H960V182.857a45.714 45.714 0 0 0-45.714-45.714H507.758l-31.452-44.764a45.787 45.787 0 0 0-37.449-19.456H45.714A45.714 45.714 0 0 0 0 118.638v786.285c0 25.235 20.48 45.715 45.714 45.715h932.572c25.234 0 45.714-20.48 45.714-45.715V365.714A45.714 45.714 0 0 0 978.286 320zM868.57 228.571V320H636.27l-64.293-91.429h296.594z m64 630.638H91.43V164.352h323.657l160.036 227.62a45.641 45.641 0 0 0 37.376 19.457h320v447.78z" fill="#ffffff" p-id="5090"></path><path d="M476.599 632.54H184.027a45.714 45.714 0 0 0 0 91.428H476.6a45.714 45.714 0 0 0 0-91.429z m-14.044-242.615l-86.454 86.454-116.81-58.44a45.787 45.787 0 0 0-52.736 8.557l-73.142 73.143a45.714 45.714 0 0 0 64.658 64.658l49.883-49.883 116.81 58.44a45.495 45.495 0 0 0 52.735-8.557l109.715-109.714a45.714 45.714 0 0 0-64.659-64.658z" fill="#ffffff" p-id="5091"></path></svg> |
|||
|
After Width: 1170 | Height: 810 | Size: 105 KiB |
|
After Width: 24 | Height: 24 | Size: 751 B |
|
After Width: 36 | Height: 36 | Size: 716 B |
|
After Width: 1692 | Height: 948 | Size: 840 KiB |
|
After Width: 200 | Height: 200 | Size: 2.8 KiB |
|
After Width: 200 | Height: 200 | Size: 5.7 KiB |
@ -0,0 +1,55 @@ |
|||
## 项目背景 |
|||
> 描述项目或产品的现状,让项目成员了解当前存在的问题与痛点。 |
|||
> |
|||
|
|||
+ 痛点1... |
|||
+ 痛点2... |
|||
+ 痛点3... |
|||
|
|||
## 项目目标 |
|||
> 描述本项目期望达成的目标,目标需满足Smart原则: |
|||
> |
|||
> 1. 具体的(Specific) |
|||
> 2. 可以衡量的(Measurable) |
|||
> 3. 可以达到的(Attainable) |
|||
> 4. 要与其他目标具有一定的相关性(Relevant) |
|||
> 5. 有明确的截止期限(Time-bound) |
|||
> |
|||
|
|||
[此处为语雀卡片,点击链接查看](https://www.yuque.com/docs/205890729#ewusl) |
|||
|
|||
|
|||
|
|||
## 关键事项 |
|||
> 为达成上述目标,需要完成哪些关键事项。 |
|||
> |
|||
|
|||
+ 关键事项1... |
|||
+ 关键事项2... |
|||
+ 关键事项3... |
|||
|
|||
## 里程碑 |
|||
> 整个项目中,关键节点的里程碑计划。 |
|||
> |
|||
|
|||
 |
|||
|
|||
## 人员安排 |
|||
> 输入项目的所有干系人,包括内部和外部干系人。 |
|||
> |
|||
|
|||
| **人员** | **岗位** | |
|||
| --- | --- | |
|||
| @<font style="color:#8C8C8C;background-color:#F5F5F5;">提及</font> | 项目经理 | |
|||
| @<font style="color:#8C8C8C;background-color:#F5F5F5;">提及</font> | 技术负责人 | |
|||
| @<font style="color:#8C8C8C;background-color:#F5F5F5;">提及</font> | 产品负责人 | |
|||
|
|||
|
|||
## 风险提示 |
|||
> 对公司战略、项目结题、法务风险问题进行提示,并说明应对措施。 |
|||
> |
|||
|
|||
[此处为语雀卡片,点击链接查看](https://www.yuque.com/docs/205890729#MBwu4) |
|||
|
|||
|
|||
|
|||
@ -0,0 +1,586 @@ |
|||
<template> |
|||
<div class="app-container category-container" style="height: calc(100vh - 140px);"> |
|||
<!-- 门类列表 --> |
|||
<div class="container-main"> |
|||
<div class="elect-cont-left"> |
|||
<div class="container-left"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<!--门类树状结构--> |
|||
<div class="tree-scroll"> |
|||
<el-scrollbar style="height: calc(100vh - 230px);"> |
|||
<el-tree ref="categroyTree" v-loading="crud.loading" class="arc-tree arc-tree-01" :data="crud.data" :props="defaultProps" node-key="id" :expand-on-click-node="false" highlight-current @node-click="handleNodeClick"> |
|||
<span slot-scope="{ node, data }" class="custom-tree-node"> |
|||
<el-tooltip :content="node.label" placement="left" :enterable="false" effect="dark"> |
|||
<span v-if="data.isType === 0"> |
|||
{{ data.label }} |
|||
</span> |
|||
<span v-if="data.isType === 1" class="iconFolder tree-text"> |
|||
{{ data.label }} |
|||
</span> |
|||
<span v-if="data.isType === 2" class="iconArch tree-text"> |
|||
{{ data.label }} |
|||
</span> |
|||
<span v-if="data.isType === 3" class="iconFile tree-text"> |
|||
{{ data.label }} |
|||
</span> |
|||
</el-tooltip> |
|||
</span> |
|||
</el-tree> |
|||
</el-scrollbar> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<!-- 门类管理tab --> |
|||
<div class="elect-cont-right"> |
|||
<div v-if="selectedCategory.isType === 2" class="container-right"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<div> |
|||
<el-form> |
|||
<el-form-item label="电子原件" prop="aiFileOriginal" class="prearch-upload"> |
|||
<p class="input-style">{{ aiFileOriginal }}</p> |
|||
<div class="upload-btn"> |
|||
<input id="upFile" type="file" name="upFile" @change="changeFile($event)"> |
|||
<el-button size="small" type="primary" :loading="aiLoading"> |
|||
<i :class="['iconfont', aiLoading ? 'icon-huoqu' : 'icon-shangchuan']" />{{ aiLoading ? 'AI辅助著录识别中' : '上传' }} |
|||
</el-button> |
|||
</div> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div class="ai-category-main"> |
|||
<div class="ai-des-left"> |
|||
<div class="des-title"> |
|||
<p>著录项</p> |
|||
</div> |
|||
<div class="ai-des-form"> |
|||
<PreviewForm |
|||
ref="previewForm" |
|||
:is-has-code="true" |
|||
:is-disabled="false" |
|||
:form-preview-data.sync="formPreviewData" |
|||
:selected-category="selectedCategory" |
|||
:is-des-form-type="isDesFormType" |
|||
:collect-level="collectLevel" |
|||
:category-menu="categoryMenu" |
|||
:is-ai-category="true" |
|||
/> |
|||
</div> |
|||
</div> |
|||
<div class="ai-des-right"> |
|||
<div class="des-title"> |
|||
<p>AI识别数据</p> |
|||
</div> |
|||
<div ref="typingContainer" class="ai-des-json"> |
|||
<pre v-if="aiJsonData" v-highlightjs="displayedText">{{ displayedText }}</pre> |
|||
</div> |
|||
<div v-if="typingFinished" style="text-align: right;"> |
|||
<el-button @click="saveAiData">保存</el-button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import crudCategory from '@/api/system/category/category' |
|||
import CRUD, { presenter, header } from '@crud/crud' |
|||
import PreviewForm from '@/views/components/category/PreviewForm' |
|||
import { FetchInitCategoryInputFieldByPid, FetchCategoryMenu } from '@/api/system/category/category' |
|||
import { getCurrentTime } from '@/utils/index' |
|||
|
|||
export default { |
|||
name: 'AICataloging', |
|||
components: { PreviewForm }, |
|||
cruds() { |
|||
return [ |
|||
CRUD({ |
|||
title: 'AI辅助著录', url: 'api/category/fondMenu', |
|||
crudMethod: { ...crudCategory }, |
|||
optShow: { |
|||
add: false, |
|||
edit: false, |
|||
del: false, |
|||
download: false, |
|||
group: false |
|||
} |
|||
}) |
|||
] |
|||
}, |
|||
mixins: [presenter(), header()], |
|||
provide() { |
|||
return { |
|||
parentsData: this |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
defaultProps: { |
|||
children: 'children', |
|||
label: 'label' |
|||
}, |
|||
selectedCategory: {}, |
|||
formPreviewData: [], |
|||
isDesFormType: 'arcives', |
|||
collectLevel: 3, |
|||
categoryMenu: [], |
|||
aiLoading: false, |
|||
aiFileOriginal: null, |
|||
aiJsonData: null, |
|||
displayedText: '', |
|||
typingInterval: null, |
|||
typingFinished: false, |
|||
file: null, // 附件 change |
|||
fileNames: '', // 附件 - name |
|||
formatType: '', // 附件 - type |
|||
postfix: '', // 附件 - 文件后缀 |
|||
fileSize: '', // 附件 - 大小 |
|||
filePath: '', // 附件 - path |
|||
px: '', // 附件 - 分辨率 |
|||
nowDate: '', // 当前时间 |
|||
fileJsonString: null |
|||
} |
|||
}, |
|||
computed: { |
|||
}, |
|||
mounted() { |
|||
this.getCategoryDataTree() |
|||
}, |
|||
methods: { |
|||
getCategoryDataTree() { |
|||
FetchCategoryMenu().then(res => { |
|||
this.categoryMenu = res |
|||
}) |
|||
}, |
|||
filterData(data) { |
|||
return data.filter(node => { |
|||
if (node.children && node.children.length > 0) { |
|||
node.children = this.filterData(node.children) // 递归处理子节点 |
|||
} |
|||
return node.isType !== 3 // 过滤掉isType为3的节点 |
|||
}) |
|||
}, |
|||
// 逆归实现 获取指定元素 |
|||
findNode(tree, func) { |
|||
for (const node of tree) { |
|||
if (func(node)) return node |
|||
if (node.children) { |
|||
const res = this.findNode(node.children, func) |
|||
if (res) return res |
|||
} |
|||
} |
|||
return null |
|||
}, |
|||
// 根据父级展开全部子级 |
|||
expandAllChildren(node, targetElement) { |
|||
node.expanded = true |
|||
// 递归展开当前节点的每个子节点 |
|||
if (node.childNodes && node.childNodes.length > 0) { |
|||
for (let i = 0; i < node.childNodes.length; i++) { |
|||
if (node.childNodes[i].data.id === targetElement.id) { |
|||
this.$refs.categroyTree.setCurrentKey(node.childNodes[i]) |
|||
} |
|||
this.expandAllChildren(node.childNodes[i], targetElement) |
|||
} |
|||
} |
|||
}, |
|||
// 转换函数,将原始数据转换为el-tree所需格式 |
|||
transformData(rawData) { |
|||
return rawData.map(item => { |
|||
return { |
|||
label: item.fondName, |
|||
isType: 0, |
|||
id: item.fondsId, |
|||
fondsNo: item.fondsNo, |
|||
children: item.categoryList.map(category => { |
|||
return { |
|||
label: category.cnName, |
|||
id: category.id, |
|||
arrangeType: category.arrangeType, |
|||
isType: category.isType, |
|||
fondsId: item.fondsId, |
|||
fondName: item.fondName, |
|||
fondsNo: item.fondsNo, |
|||
children: this.transformChildren(category.children, item.fondsId, item.fondName, item.fondsNo) |
|||
} |
|||
}) |
|||
} |
|||
}) |
|||
}, |
|||
// 递归函数,用于处理数据的子节点 |
|||
transformChildren(children, fondsId, fondName, fondsNo) { |
|||
return children.map(child => { |
|||
return { |
|||
label: child.cnName, |
|||
id: child.id, |
|||
isType: child.isType, |
|||
pid: child.pid, |
|||
code: child.code, |
|||
arrangeType: child.arrangeType, |
|||
fondsId: fondsId, |
|||
fondName: fondName, |
|||
fondsNo: fondsNo, |
|||
children: child.children.length ? this.transformChildren(child.children, fondsId, fondName, fondsNo) : [] |
|||
} |
|||
}) |
|||
}, |
|||
// 找顶级节点 |
|||
findTopLevelNode(data, fondsId) { |
|||
for (let i = 0; i < data.length; i++) { |
|||
if (data[i].id === fondsId) { |
|||
return data[i] |
|||
} |
|||
} |
|||
return null |
|||
}, |
|||
[CRUD.HOOK.afterRefresh]() { |
|||
this.crud.data = this.filterData(this.transformData(this.crud.data)) |
|||
this.$nextTick(() => { |
|||
let currentKey |
|||
if (localStorage.getItem('currentArchivesKey') !== null) { |
|||
currentKey = JSON.parse(localStorage.getItem('currentArchivesKey')) |
|||
// 删除门类节点后 |
|||
if (this.$refs.categroyTree.getCurrentKey(currentKey.id) == null) { |
|||
localStorage.removeItem('currentArchivesKey') |
|||
} |
|||
this.topLevelNode = this.findTopLevelNode(this.crud.data, currentKey.fondsId) |
|||
// 如果找到了顶级节点,则从该节点开始递归查找指定元素 |
|||
if (this.topLevelNode) { |
|||
if (currentKey) { |
|||
// 展开顶级节点的子节点 |
|||
if (currentKey.isType === 1) { |
|||
currentKey = this.findNode(this.crud.data[0].children, (node) => { |
|||
return node.isType !== 1 |
|||
}) |
|||
} |
|||
this.expandAllChildren(this.$refs.categroyTree.getNode(this.topLevelNode), currentKey) |
|||
} else { |
|||
this.defaultSetting(currentKey) |
|||
} |
|||
} else { |
|||
this.defaultSetting(currentKey) |
|||
} |
|||
} else { |
|||
this.defaultSetting(currentKey) |
|||
} |
|||
if (currentKey && currentKey.id) { |
|||
this.$nextTick(() => { |
|||
// 选中节点的门类详情 |
|||
this.handleNodeClick(currentKey) |
|||
}) |
|||
} |
|||
}) |
|||
}, |
|||
defaultSetting(currentKey) { |
|||
if (this.crud.data[0].isType === 0) { |
|||
currentKey = this.findNode(this.crud.data[0].children, (node) => { |
|||
return node.isType !== 1 |
|||
}) |
|||
this.expandAllChildren(this.$refs.categroyTree.getNode(this.crud.data[0]), currentKey) |
|||
} else { |
|||
currentKey = this.crud.data[0] |
|||
this.expandAllChildren(this.$refs.categroyTree.getNode(this.crud.data[0]), currentKey) |
|||
} |
|||
}, |
|||
// 选中门类后,设置门类详情数据 |
|||
handleNodeClick(val) { |
|||
if (val) { |
|||
localStorage.setItem('currentArchivesKey', JSON.stringify(val)) |
|||
this.selectedCategory = val |
|||
this.$nextTick(() => { |
|||
this.getFormInfo() |
|||
}) |
|||
} |
|||
}, |
|||
getFormInfo() { |
|||
// console.log('this.selectedCategory.arrangeType', this.selectedCategory.arrangeType) |
|||
// if (this.selectedCategory.arrangeType === 1) { |
|||
// this.collectLevel = 3 |
|||
// } else if (this.selectedCategory.arrangeType === 2) { |
|||
// this.collectLevel = 2 |
|||
// } else { |
|||
// this.collectLevel = 1 |
|||
// } |
|||
const params = { |
|||
'categoryId': this.selectedCategory.id, |
|||
'categoryLevel': this.collectLevel |
|||
} |
|||
FetchInitCategoryInputFieldByPid(params).then(data => { |
|||
this.formPreviewData = data |
|||
console.log('formPreviewData', this.formPreviewData) |
|||
this.isDesFormType = 'arcives' |
|||
this.$nextTick(() => { |
|||
this.$refs.previewForm.archivesType = 'add' |
|||
this.$refs.previewForm.FetchNoFormatField(this.selectedCategory.id) |
|||
}) |
|||
}) |
|||
}, |
|||
// 选择附件 |
|||
async changeFile(e) { |
|||
this.file = e.target.files[0] |
|||
this.fileSize = this.file.size |
|||
this.formatType = this.file.type.substring(0, this.file.type.indexOf('/')) |
|||
this.fileNames = this.file.name |
|||
this.postfix = this.file.name.substring( |
|||
this.fileNames.lastIndexOf('.') + 1, |
|||
this.fileNames.length |
|||
) |
|||
if (this.formatType === 'image') { |
|||
const fileBase64 = await this.getBase64(this.file) |
|||
const res = await this.getImgPx(fileBase64) |
|||
this.px = res.width + 'px*' + res.height + 'px' |
|||
} else { |
|||
this.px = '' |
|||
} |
|||
|
|||
this.uploadSave() |
|||
// 上传附件 |
|||
// reDocumentUpload(this.baseApi + '/api/re-document/uploadFile', this.file, this.selectedDocument.id).then(res => { |
|||
// if (res.data.code === 200) { |
|||
// this.filePath = res.data.data |
|||
// this.uploadSave() |
|||
// } |
|||
// }) |
|||
}, |
|||
// 上传附件 - 选择上传即保存 |
|||
uploadSave() { |
|||
this.aiLoading = true |
|||
this.nowDate = getCurrentTime() |
|||
const json = { |
|||
'file_name': this.fileNames, |
|||
'file_size': this.fileSize, |
|||
'file_type': this.postfix, |
|||
'file_path': this.filePath, |
|||
'sequence': null, |
|||
'archive_id': this.arcId, |
|||
'file_dpi': this.px, |
|||
'file_thumbnail': '', |
|||
'create_time': this.nowDate, |
|||
'id': null, |
|||
'is_quote': null, |
|||
'last_modified': this.file.lastModified |
|||
} |
|||
const arrayUpload = [] |
|||
arrayUpload.push(json) |
|||
this.aiFileOriginal = this.fileNames |
|||
this.fileJsonString = JSON.stringify(arrayUpload) |
|||
console.log(this.fileJsonString) |
|||
|
|||
setTimeout(() => { |
|||
const json = `{ |
|||
"fonds_no": "A001", |
|||
"archival_category_code": "WSWJ", |
|||
"archive_ctg_no": "SCGL", |
|||
"archive_year": "2024", |
|||
"retention": "永久", |
|||
"item_no": "0005", |
|||
"archive_no": "A001-WSWJ·SCGL-2024-Y-0005", |
|||
"maintitle": "Windows下如何创建FTP文件夹", |
|||
"keyword": "", |
|||
"doc_no": "武汉飞天[2024]0005", |
|||
"doc_id": "", |
|||
"security_class": "", |
|||
"secrecy_period": "", |
|||
"doc_type": "", |
|||
"serial_no": "", |
|||
"emergency_degree": "", |
|||
"created_date": "", |
|||
"doc_department": "", |
|||
"signer": "", |
|||
"main_department": "", |
|||
"copy_department": "", |
|||
"printing_department": "", |
|||
"printing_date": "", |
|||
"release_level": "", |
|||
"microfilm": "", |
|||
"attachment": "", |
|||
"annotation": "", |
|||
"file_id": "", |
|||
"software_environment": "", |
|||
"hardware_environment": "", |
|||
"disposal_type": "", |
|||
"disposal_actor": "", |
|||
"disposal_department": "", |
|||
"disposal_date": "", |
|||
"disposal_result": "", |
|||
"medium_type": "", |
|||
"medium_qty": "", |
|||
"medium_unit": "", |
|||
"medium_specs": "", |
|||
"is_entity": 1, |
|||
"id": "6C91AAD1F6D9940469F8B0" |
|||
}` |
|||
|
|||
this.aiJsonData = json |
|||
this.startTypingEffect() |
|||
this.aiLoading = false |
|||
}, 3000) |
|||
}, |
|||
startTypingEffect() { |
|||
const lines = this.aiJsonData.split('\n') |
|||
let currentLineIndex = 0 |
|||
this.displayedText = '' |
|||
this.typingFinished = false |
|||
|
|||
this.typingInterval = setInterval(() => { |
|||
if (currentLineIndex < lines.length) { |
|||
this.displayedText += lines[currentLineIndex] + '\n' |
|||
currentLineIndex++ |
|||
} else { |
|||
clearInterval(this.typingInterval) |
|||
setTimeout(() => { |
|||
this.typingFinished = true |
|||
this.$refs.previewForm.addOrUpdateForm = JSON.parse(this.aiJsonData) |
|||
}, 1000) |
|||
} |
|||
|
|||
// 滚动条始终保持在底部 |
|||
const container = this.$refs.typingContainer |
|||
if (container) { |
|||
container.scrollTop = container.scrollHeight |
|||
} |
|||
}, 200) |
|||
}, |
|||
saveAiData() { |
|||
this.$router.push({ path: '/collectReorganizi/collectionLibrary' }) |
|||
}, |
|||
// 将上传的图片转为base64 |
|||
getBase64(file) { |
|||
const reader = new FileReader() |
|||
reader.readAsDataURL(file) |
|||
return new Promise((resolve) => { |
|||
reader.onload = () => { |
|||
resolve(reader.result) |
|||
} |
|||
}) |
|||
}, |
|||
// 获取图片的分辨率 |
|||
getImgPx(img) { |
|||
const image = new Image() |
|||
image.src = img |
|||
return new Promise((resolve) => { |
|||
image.onload = () => { |
|||
const width = image.width |
|||
const height = image.height |
|||
resolve({ width, height }) |
|||
} |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
@import "~@/assets/styles/mixin.scss"; |
|||
@import "~@/assets/styles/variables.scss"; |
|||
.category-container { |
|||
.elect-cont-left{ |
|||
width: 296px !important; |
|||
} |
|||
} |
|||
.openSidebar .category-container .elect-cont-right{ |
|||
width: calc(100vw - 614px) !important; |
|||
} |
|||
.hideSidebar .category-container .elect-cont-right { |
|||
width: calc(100vw - 412px) !important; |
|||
} |
|||
.tree-scroll{ |
|||
font-size: 14px; |
|||
} |
|||
.ai-category-main{ |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
|
|||
.ai-des-left{ |
|||
width: 740px; |
|||
margin-right: 20px; |
|||
} |
|||
.ai-des-right{ |
|||
flex: 1; |
|||
} |
|||
|
|||
.ai-des-form, |
|||
.ai-des-json{ |
|||
height: calc(100vh - 272px); |
|||
overflow-y: auto; |
|||
padding-right: 10px; |
|||
} |
|||
|
|||
.ai-des-json{ |
|||
height: calc(100vh - 300px); |
|||
margin-bottom: 10px; |
|||
} |
|||
} |
|||
|
|||
.prearch-upload{ |
|||
margin-right: 0 !important; |
|||
::v-deep .el-form-item__label{ |
|||
position: relative; |
|||
&::before{ |
|||
position: absolute; |
|||
top: -2px; |
|||
right: 70px; |
|||
content: "*"; |
|||
font-size: 10px; |
|||
color: #ff4949; |
|||
font-style: normal; |
|||
} |
|||
} |
|||
::v-deep .el-form-item__content{ |
|||
position: relative; |
|||
width: 540px !important; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
.input-style{ |
|||
width: 500px; |
|||
height: 34px; |
|||
line-height: 34px; |
|||
padding: 0 20px; |
|||
border: 1px solid #e6e8ed; |
|||
border-radius: 3px; |
|||
// &.error-box{ |
|||
// border-color: #ed4a41; |
|||
// } |
|||
} |
|||
// .error-tip{ |
|||
// position: absolute; |
|||
// left: 0; |
|||
// bottom: -26px; |
|||
// font-size: 12px; |
|||
// color: #ff4949; |
|||
// } |
|||
.upload-btn{ |
|||
position: relative; |
|||
width:96px; |
|||
margin-right: 0 !important; |
|||
margin-left: 10px; |
|||
overflow: initial !important; |
|||
#upFile{ |
|||
position: absolute; |
|||
left: 0; |
|||
top: 0; |
|||
// opacity: 0; |
|||
width: 84px; |
|||
height: 34px; |
|||
} |
|||
.el-button{ |
|||
margin-top: -2px; |
|||
font-weight: bold; |
|||
border-color: #0348f3; |
|||
color: #0348f3; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
pre { |
|||
background-color: #f4f4f4; |
|||
padding: 10px; |
|||
border: 1px solid #ccc; |
|||
border-radius: 4px; |
|||
white-space: pre-wrap; |
|||
word-wrap: break-word; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,284 @@ |
|||
<template> |
|||
<div class="app-container category-container" style="position: relative; height: calc(100vh - 140px);"> |
|||
<iframe id="myIframe" style="position: absolute; top: 0; left: -34%; border: none; z-index: 9;" width="100%" height="100%" src="https://f.3dman.cn/art/sDpbYwwJ/fbx/CdYqVH95/index.html" /> |
|||
<div class="chat-wrapper"> |
|||
<div ref="chatContent" class="chat-content"> |
|||
<Message |
|||
v-for="(message, index) in chatMessages" |
|||
:key="index" |
|||
:content="message.content" |
|||
:is-user-message="message.isUserMessage" |
|||
:is-loading="message.isLoading" |
|||
:is-welcome-message="message.isWelcomeMessage" |
|||
:is-typing="message.isTyping" |
|||
@stop-typing="handleStopTyping(index)" |
|||
/> |
|||
</div> |
|||
<div class="chat-send"> |
|||
<textarea v-model="message" cols="50" rows="7" placeholder="请输入你想咨询的问题" @input="updateSendButtonState" @keypress="handleKeyPress" /> |
|||
<div class="send-button-container"> |
|||
<div class="hot-word"> |
|||
<span v-for="(word, index) in hotWords" :key="index" @click="handleHotWordClick(word)">{{ word }}</span> |
|||
</div> |
|||
<span class="send-button" :class="{ 'send-disabled-button': isSendButtonDisabled }" :disabled="isSendButtonDisabled" @click="sendMessage">发送</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import Message from './message.vue' |
|||
|
|||
export default { |
|||
name: 'AIDigitalHuman', |
|||
components: { |
|||
Message |
|||
}, |
|||
data() { |
|||
return { |
|||
message: '', |
|||
isSendButtonDisabled: true, |
|||
isBotReplying: false, |
|||
chatMessages: [], |
|||
hotWords: ['什么是“AI辅助著录”', '什么是“AI编研”?'], |
|||
// 模拟的回复数据,可根据实际情况修改 |
|||
mockReplies: { |
|||
'什么是“AI辅助著录”': 'AI辅助著录是利用AI数据模型(例如:DeepSeek-R1等),对档案电子原文进行解析及分析操作,再结合当前档案门类的特有著录项目(例如:标题、年度、发文字号等),从电子原文中提取出对应的数据,并自动完成档案表单的著录。辅助著录结束后,管理员任可继续编辑档案信息。', |
|||
'什么是“AI编研”?': 'AI编研是利用AI数据模型(例如:DeepSeek-R1等),结合用户上传的文件以及需求,通过对文件的解析、理解,对用户需求的理解、分析,从而智能的生成用户所需要的文本型数据(用户需求,例如:“结合我上传的附件内容,帮我写一篇,AI如何赋能图书馆业务的文章,要求不少于5000字”)' |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
}, |
|||
created() { |
|||
}, |
|||
mounted() { |
|||
this.sendWelcomeMessage() |
|||
this.updateSendButtonState() |
|||
}, |
|||
methods: { |
|||
sendWelcomeMessage() { |
|||
const welcomeMessage = '您好!请问有什么问题可以帮您解答吗?' |
|||
this.appendMessage(welcomeMessage, false, false, true, false) |
|||
}, |
|||
updateSendButtonState() { |
|||
this.isSendButtonDisabled = this.message.trim() === '' || this.isBotReplying |
|||
}, |
|||
sendMessage() { |
|||
if (!this.isBotReplying) { |
|||
const message = this.message.trim() |
|||
if (message) { |
|||
this.appendMessage(message, true, false, false, false) |
|||
this.message = '' |
|||
this.isSendButtonDisabled = true |
|||
this.isBotReplying = true |
|||
|
|||
// 模拟请求延迟 |
|||
setTimeout(() => { |
|||
const loadingIndex = this.chatMessages.findIndex(msg => msg.isLoading) |
|||
if (loadingIndex !== -1) { |
|||
this.chatMessages.splice(loadingIndex, 1) |
|||
} |
|||
const botReply = this.mockReplies[message] || '很抱歉,我暂时无法回答这个问题。' |
|||
const lastMessageIndex = this.chatMessages.length |
|||
this.appendMessage('', false, false, false, true) |
|||
|
|||
let i = 0 |
|||
const speed = 50 |
|||
|
|||
const typeWriter = () => { |
|||
const currentMessage = this.chatMessages[lastMessageIndex] |
|||
if (!currentMessage.isTyping) { |
|||
return |
|||
} |
|||
if (i < botReply.length) { |
|||
currentMessage.content += botReply.charAt(i) |
|||
i++ |
|||
setTimeout(typeWriter, speed) |
|||
this.$nextTick(() => { |
|||
this.$refs.chatContent.scrollTop = this.$refs.chatContent.scrollHeight |
|||
}) |
|||
} else { |
|||
currentMessage.isTyping = false |
|||
this.isBotReplying = false |
|||
this.updateSendButtonState() |
|||
} |
|||
} |
|||
typeWriter() |
|||
}, 1000) |
|||
} |
|||
} |
|||
}, |
|||
handleKeyPress(event) { |
|||
if (event.which === 13) { |
|||
event.preventDefault() |
|||
this.sendMessage() |
|||
} |
|||
}, |
|||
handleHotWordClick(word) { |
|||
this.message = word |
|||
this.sendMessage() |
|||
}, |
|||
appendMessage(content, isUserMessage, isLoading, isWelcomeMessage, isTyping = false) { |
|||
this.chatMessages.push({ |
|||
content, |
|||
isUserMessage, |
|||
isLoading, |
|||
isWelcomeMessage, |
|||
isTyping |
|||
}) |
|||
this.$nextTick(() => { |
|||
this.$refs.chatContent.scrollTop = this.$refs.chatContent.scrollHeight |
|||
}) |
|||
}, |
|||
handleStopTyping(index) { |
|||
const message = this.chatMessages[index] |
|||
message.isTyping = false |
|||
this.isBotReplying = false |
|||
this.updateSendButtonState() |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
/* ai数字人 start */ |
|||
.chat-wrapper { |
|||
position: absolute; |
|||
right: 0; |
|||
top: 0; |
|||
width: 1185px; |
|||
height: 778px; |
|||
padding: 24px; |
|||
background: url("~@/assets/images/list-bg.png") no-repeat left top; |
|||
background-size: 100% 100%; |
|||
z-index: 99; |
|||
font-family: 'PingFang'; |
|||
} |
|||
|
|||
.chat-content { |
|||
width: 100%; |
|||
height: calc(100% - 234px); |
|||
overflow: hidden; |
|||
overflow-y: scroll; |
|||
} |
|||
|
|||
.chat-send { |
|||
width: 100%; |
|||
height: 210px; |
|||
margin-top: 24px; |
|||
background: linear-gradient(90deg, #2C509B 0%, rgba(44, 80, 155, 0.6) 100%); |
|||
border-radius: 16px; |
|||
} |
|||
|
|||
.chat-send textarea { |
|||
display: block; |
|||
width: calc(100% - 40px); |
|||
height: 120px; |
|||
font-size: 24px; |
|||
line-height: 36px; |
|||
border: none; |
|||
padding: 20px; |
|||
background-color: transparent; |
|||
color: #fff; |
|||
} |
|||
|
|||
.send-button-container { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
padding: 0 20px 0 0; |
|||
margin-top: 16px; |
|||
} |
|||
|
|||
.hot-word span { |
|||
position: relative; |
|||
display: inline-block; |
|||
font-size: 20px; |
|||
color: #fff; |
|||
line-height: 50px; |
|||
margin: 0 10px; |
|||
padding: 6px 16px 6px 48px; |
|||
background: rgba(0, 0, 0, 0.2); |
|||
border-radius: 28px 8px 28px 28px; |
|||
} |
|||
|
|||
.hot-word span::before { |
|||
content: ""; |
|||
position: absolute; |
|||
left: 12px; |
|||
top: 50%; |
|||
width: 30px; |
|||
height: 30px; |
|||
background: url("~@/assets/images/wenhao.png") no-repeat left top; |
|||
background-size: 100% 100%; |
|||
transform: translateY(-50%); |
|||
} |
|||
|
|||
.hot-word span:hover { |
|||
background-color: rgba(0, 0, 0, 0.6); |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.send-button { |
|||
position: relative; |
|||
display: inline-block; |
|||
width: 140px; |
|||
height: 58px; |
|||
line-height: 58px; |
|||
padding-left: 60px; |
|||
font-size: 26px; |
|||
text-align: left; |
|||
color: #fff; |
|||
background: linear-gradient(135deg, #06BFFF 0%, #2B74FF 100%); |
|||
border-radius: 58px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.send-button::before { |
|||
content: ""; |
|||
position: absolute; |
|||
left: 16px; |
|||
top: 50%; |
|||
width: 36px; |
|||
height: 36px; |
|||
background: url("~@/assets/images/index-img8.png") no-repeat left top; |
|||
background-size: 36px 36px; |
|||
transform: translateY(-50%); |
|||
} |
|||
|
|||
.send-disabled-button { |
|||
background: rgba(255, 255, 255, 0.2); |
|||
cursor: not-allowed; |
|||
} |
|||
|
|||
.run-btn { |
|||
position: relative; |
|||
width: 120px; |
|||
height: 58px; |
|||
line-height: 58px; |
|||
padding-left: 60px; |
|||
font-size: 26px; |
|||
text-align: center; |
|||
color: #fff; |
|||
background: linear-gradient(135deg, #06BFFF 0%, #2B74FF 100%); |
|||
border-radius: 58px; |
|||
cursor: pointer; |
|||
margin: 40px 0 0 20px; |
|||
} |
|||
|
|||
.run-btn::before { |
|||
content: ""; |
|||
position: absolute; |
|||
left: 30px; |
|||
top: 50%; |
|||
width: 36px; |
|||
height: 36px; |
|||
background: url("~@/assets/images/run.png") no-repeat left top; |
|||
background-size: 36px 36px; |
|||
transform: translateY(-50%); |
|||
} |
|||
|
|||
/* ai数字人 end */ |
|||
</style> |
|||
@ -0,0 +1,404 @@ |
|||
<template> |
|||
<div class="app-container category-container" style="position: relative; height: calc(100vh - 140px);"> |
|||
<!-- <div class="ai-wrapper"> |
|||
<iframe id="myIframe" style="position: absolute; top: 0; left: -34%; border: none; z-index: 9;" width="100%" height="100%" src="https://f.3dman.cn/art/sDpbYwwJ/fbx/CdYqVH95/index.html" /> |
|||
</div> --> |
|||
<div class="chat-wrapper"> |
|||
<div ref="chatContent" class="chat-content" /> |
|||
<div class="chat-send"> |
|||
<textarea v-model="message" cols="50" rows="7" placeholder="请输入你想咨询的问题" @input="updateSendButtonState" @keypress="handleKeyPress" /> |
|||
<div class="send-button-container"> |
|||
<div class="hot-word"> |
|||
<span v-for="(word, index) in hotWords" :key="index" @click="handleHotWordClick(word)">{{ word }}</span> |
|||
</div> |
|||
<span class="send-button" :class="{ 'send-disabled-button': isSendButtonDisabled }" :disabled="isSendButtonDisabled" @click="sendMessage">发送</span> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
export default { |
|||
name: 'AIDigitalHuman', |
|||
components: { }, |
|||
data() { |
|||
return { |
|||
message: '', |
|||
isSendButtonDisabled: true, |
|||
isBotReplying: false, |
|||
isBotTyping: false, |
|||
hotWords: ['什么是“人工智能”?', '什么是“AI大模型”?'] |
|||
} |
|||
}, |
|||
computed: { |
|||
}, |
|||
created() { |
|||
}, |
|||
mounted() { |
|||
this.sendWelcomeMessage() |
|||
this.updateSendButtonState() |
|||
}, |
|||
methods: { |
|||
sendWelcomeMessage() { |
|||
const welcomeMessage = '您好!请问有什么问题可以帮您解答吗?' |
|||
this.appendMessage(welcomeMessage, false, false, true) |
|||
}, |
|||
updateSendButtonState() { |
|||
this.isSendButtonDisabled = this.message.trim() === '' || this.isBotReplying || this.isBotTyping |
|||
}, |
|||
sendMessage() { |
|||
if (!this.isBotReplying && !this.isBotTyping) { |
|||
const message = this.message.trim() |
|||
if (message) { |
|||
this.appendMessage(message, true, false) |
|||
this.message = '' |
|||
this.isSendButtonDisabled = true |
|||
|
|||
this.appendMessage('', false, true) |
|||
this.isBotReplying = true |
|||
|
|||
// axios.post(`${this.config.apiUrl}/api/v1/workspace/dxhtsg/chat`, { |
|||
// message, |
|||
// mode: 'chat' |
|||
// }, { |
|||
// headers: { |
|||
// 'Authorization': this.config.apiKey |
|||
// } |
|||
// }) |
|||
// .then((res) => { |
|||
// const loadingElement = this.$refs.chatContent.querySelector('.loading') |
|||
// if (loadingElement) { |
|||
// loadingElement.parentNode.remove() |
|||
// } |
|||
// const botReply = res.data.textResponse.replace(/\【(\/)?SYS\】/gi, '飞天智能AI小助手') |
|||
// this.appendMessage('', false, false) |
|||
// this.isBotTyping = true |
|||
// let i = 0 |
|||
// const speed = 50 |
|||
|
|||
// const typeWriter = () => { |
|||
// if (!this.isBotTyping) { |
|||
// return |
|||
// } |
|||
// if (i < botReply.length) { |
|||
// const lastBotMessage = this.$refs.chatContent.querySelectorAll('.bot-message:last-child p')[0] |
|||
// lastBotMessage.innerHTML += botReply.charAt(i) |
|||
// i++ |
|||
// setTimeout(typeWriter, speed) |
|||
// this.$refs.chatContent.scrollTop = this.$refs.chatContent.scrollHeight |
|||
// } else { |
|||
// this.isBotTyping = false |
|||
// this.isBotReplying = false |
|||
// const stopButton = this.$refs.chatContent.querySelector('#stop-btn') |
|||
// if (stopButton) { |
|||
// stopButton.remove() |
|||
// } |
|||
// } |
|||
// } |
|||
// typeWriter() |
|||
// }) |
|||
// .catch((err) => { |
|||
// console.log(err) |
|||
// // 这里需要引入 layer 库来实现提示框功能 |
|||
// // layer.msg('因网络原因,您的问题暂时无法解答,请稍后再试!', { |
|||
// // offset: [window.innerHeight / 2 - 100, window.innerWidth / 2 + 100], |
|||
// // anim: 5 |
|||
// // }); |
|||
// const loadingElement = this.$refs.chatContent.querySelector('.loading') |
|||
// if (loadingElement) { |
|||
// loadingElement.parentNode.remove() |
|||
// } |
|||
// this.isBotTyping = false |
|||
// this.isBotReplying = false |
|||
// }) |
|||
} |
|||
} else if (this.isBotTyping) { |
|||
// layer.msg('请等待当前对话完成,稍后再试。', { |
|||
// offset: [window.innerHeight / 2 - 100, window.innerWidth / 2 + 100], |
|||
// anim: 6 |
|||
// }); |
|||
} else if (this.isBotReplying) { |
|||
// layer.msg('请等待当前对话完成,稍后再试。', { |
|||
// offset: [window.innerHeight / 2 - 100, window.innerWidth / 2 + 100], |
|||
// anim: 6 |
|||
// }); |
|||
} |
|||
}, |
|||
handleKeyPress(event) { |
|||
if (event.which === 13) { |
|||
event.preventDefault() |
|||
this.sendMessage() |
|||
} |
|||
}, |
|||
handleHotWordClick(word) { |
|||
this.message = word |
|||
this.sendMessage() |
|||
}, |
|||
appendMessage(content, isUserMessage, isLoading, isWelcomeMessage = false) { |
|||
const className = isUserMessage ? 'user-message' : 'bot-message' |
|||
let messageContent |
|||
|
|||
if (isLoading) { |
|||
messageContent = '<p class="loading"><img src="images/loading.webp" alt="" /></p>' |
|||
} else { |
|||
messageContent = isUserMessage |
|||
? `<p>${content}</p>` |
|||
: isWelcomeMessage |
|||
? `<p>${content}</p>` |
|||
: `<p>${content}<span id="stop-btn">停止输出</span></p>` |
|||
} |
|||
|
|||
const messageHtml = ` |
|||
<div class="chat-message ${className}"> |
|||
${messageContent} |
|||
</div>` |
|||
this.$refs.chatContent.insertAdjacentHTML('beforeend', messageHtml) |
|||
this.$refs.chatContent.scrollTop = this.$refs.chatContent.scrollHeight |
|||
|
|||
const stopButton = this.$refs.chatContent.querySelector('#stop-btn') |
|||
if (stopButton) { |
|||
stopButton.addEventListener('click', () => { |
|||
this.isBotTyping = false |
|||
this.isBotReplying = false |
|||
stopButton.removeAttribute('id') |
|||
stopButton.classList.add('remove-btn') |
|||
stopButton.innerHTML = '用户取消' |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
/* ai数字人 start */ |
|||
.chat-wrapper { |
|||
position: absolute; |
|||
right: 0; |
|||
top: 0; |
|||
width: 1185px; |
|||
height: 778px; |
|||
padding: 24px; |
|||
background: url("~@/assets/images/list-bg.png") no-repeat left top; |
|||
background-size: 100% 100%; |
|||
z-index: 99; |
|||
font-family: 'PingFang'; |
|||
} |
|||
|
|||
.chat-content { |
|||
width: 100%; |
|||
height: calc(100% - 234px); |
|||
overflow: hidden; |
|||
overflow-y: scroll; |
|||
} |
|||
|
|||
.chat-message { |
|||
display: flex; |
|||
justify-content: flex-end; |
|||
font-size: 28px; |
|||
color: #fff; |
|||
margin-bottom: 16px; |
|||
} |
|||
|
|||
.chat-message p { |
|||
position: relative; |
|||
line-height: 30px; |
|||
padding: 10px 16px; |
|||
background: rgba(0,0,0,0.2); |
|||
border-radius: 28px 10px 28px 28px; |
|||
max-width: 90%; |
|||
} |
|||
|
|||
.chat-message p span{ |
|||
position: absolute; |
|||
left: 4px; |
|||
bottom: -40px; |
|||
width: 80px; |
|||
padding-left: 24px; |
|||
height: 32px; |
|||
text-align: center; |
|||
line-height: 32px; |
|||
border: 1px solid #4CA7FF; |
|||
color: #4CA7FF; |
|||
border-radius: 10px; |
|||
font-size: 16px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.chat-message p span::before{ |
|||
content: ''; |
|||
position: absolute; |
|||
left: 4px; |
|||
top: 50%; |
|||
width: 24px; |
|||
height: 24px; |
|||
background: url("~@/assets/images/index-img7.png") no-repeat left top; |
|||
background-size: 100% 100%; |
|||
margin-top: -12px; |
|||
} |
|||
|
|||
.chat-message p span:hover{ |
|||
background-color: rgba(255,255,255,.2); |
|||
} |
|||
|
|||
.chat-message p span.remove-btn{ |
|||
padding-left: 0; |
|||
border: none; |
|||
color: #999; |
|||
} |
|||
|
|||
.chat-message p span.remove-btn::before{ |
|||
border: none; |
|||
color: #999; |
|||
background: none; |
|||
} |
|||
|
|||
.chat-message p span.remove-btn:hover{ |
|||
background-color: transparent; |
|||
cursor: default; |
|||
} |
|||
|
|||
.bot-message { |
|||
display: flex; |
|||
flex-direction: row-reverse; |
|||
justify-content: flex-end; |
|||
} |
|||
|
|||
.bot-message p { |
|||
line-height: 48px; |
|||
background-color: rgb(255,255,255,0.2); |
|||
border-radius: 8px 28px 28px 28px; |
|||
} |
|||
|
|||
.loading{ |
|||
position: relative; |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
align-items: center; |
|||
height: 66px; |
|||
} |
|||
.loading img{ |
|||
display: block; |
|||
width: 67px; |
|||
margin: 0 10px; |
|||
} |
|||
|
|||
.chat-send { |
|||
width: 100%; |
|||
height: 210px; |
|||
margin-top: 24px; |
|||
background: linear-gradient( 90deg, #2C509B 0%, rgba(44,80,155,0.6) 100%); |
|||
border-radius: 16px; |
|||
} |
|||
|
|||
.chat-send textarea { |
|||
display: block; |
|||
width: calc(100% - 40px); |
|||
height: 120px; |
|||
font-size: 24px; |
|||
line-height: 36px; |
|||
border: none; |
|||
padding: 20px; |
|||
background-color: transparent; |
|||
color: #fff; |
|||
} |
|||
|
|||
.send-button-container { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
padding: 0 20px 0 0; |
|||
margin-top: 16px; |
|||
} |
|||
|
|||
.hot-word span{ |
|||
position: relative; |
|||
display: inline-block; |
|||
font-size: 20px; |
|||
color: #fff; |
|||
line-height: 50px; |
|||
margin: 0 10px; |
|||
padding: 6px 16px 6px 48px; |
|||
background: rgba(0,0,0,0.2); |
|||
border-radius: 28px 8px 28px 28px; |
|||
} |
|||
|
|||
.hot-word span::before{ |
|||
content: ""; |
|||
position: absolute; |
|||
left: 12px; |
|||
top: 50%; |
|||
width: 30px; |
|||
height: 30px; |
|||
background: url("~@/assets/images/wenhao.png") no-repeat left top; |
|||
background-size: 100% 100%; |
|||
transform: translateY(-50%); |
|||
} |
|||
|
|||
.hot-word span:hover{ |
|||
background-color: rgba(0,0,0,0.6); |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.send-button { |
|||
position: relative; |
|||
display: inline-block; |
|||
width: 140px; |
|||
height: 58px; |
|||
line-height: 58px; |
|||
padding-left: 60px; |
|||
font-size: 26px; |
|||
text-align: left; |
|||
color: #fff; |
|||
background: linear-gradient(135deg, #06BFFF 0%, #2B74FF 100%); |
|||
border-radius: 58px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.send-button::before { |
|||
content: ""; |
|||
position: absolute; |
|||
left: 16px; |
|||
top: 50%; |
|||
width: 36px; |
|||
height: 36px; |
|||
background: url("~@/assets/images/index-img8.png") no-repeat left top; |
|||
background-size: 36px 36px; |
|||
transform: translateY(-50%); |
|||
} |
|||
|
|||
.send-disabled-button { |
|||
background: rgba(255,255,255,.2); |
|||
cursor: not-allowed; |
|||
} |
|||
|
|||
.run-btn { |
|||
position: relative; |
|||
width: 120px; |
|||
height: 58px; |
|||
line-height: 58px; |
|||
padding-left: 60px; |
|||
font-size: 26px; |
|||
text-align: center; |
|||
color: #fff; |
|||
background: linear-gradient(135deg, #06BFFF 0%, #2B74FF 100%); |
|||
border-radius: 58px; |
|||
cursor: pointer; |
|||
margin: 40px 0 0 20px; |
|||
} |
|||
|
|||
.run-btn::before { |
|||
content: ""; |
|||
position: absolute; |
|||
left: 30px; |
|||
top: 50%; |
|||
width: 36px; |
|||
height: 36px; |
|||
background: url("~@/assets/images/run.png") no-repeat left top; |
|||
background-size: 36px 36px; |
|||
transform: translateY(-50%); |
|||
} |
|||
|
|||
/* ai数字人 end */ |
|||
|
|||
</style> |
|||
@ -0,0 +1,159 @@ |
|||
<template> |
|||
<div :class="{ 'chat-message': true, 'user-message': isUserMessage, 'bot-message':!isUserMessage }"> |
|||
<p v-if="isLoading" class="loading"><img src="images/loading.webp" alt=""></p> |
|||
<p v-else> |
|||
{{ content }} |
|||
<span |
|||
v-if="!isUserMessage &&!isWelcomeMessage" |
|||
:class="{ 'stop-btn': isTyping, 'remove-btn':!isTyping && isStopped }" |
|||
@click="stopTyping($event)" |
|||
> |
|||
{{ isTyping? '停止输出' : (isStopped? '用户取消' : '') }} |
|||
</span> |
|||
</p> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
props: { |
|||
content: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
isUserMessage: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
isLoading: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
isWelcomeMessage: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
isTyping: { |
|||
type: Boolean, |
|||
default: false |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
isStopped: false |
|||
} |
|||
}, |
|||
methods: { |
|||
stopTyping(event) { |
|||
this.isTyping = false |
|||
this.isStopped = true |
|||
this.$emit('stop-typing', event) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style scoped> |
|||
/* 可以在这里添加组件特定的样式 */ |
|||
.chat-message { |
|||
display: flex; |
|||
justify-content: flex-end; |
|||
font-size: 22px; |
|||
color: #fff; |
|||
margin-bottom: 16px; |
|||
} |
|||
|
|||
.chat-message p { |
|||
position: relative; |
|||
line-height: 30px; |
|||
padding: 10px 16px; |
|||
background: rgba(0, 0, 0, 0.2); |
|||
border-radius: 28px 10px 28px 28px; |
|||
max-width: 90%; |
|||
} |
|||
|
|||
.chat-message p span.stop-btn { |
|||
position: absolute; |
|||
left: 4px; |
|||
bottom: -40px; |
|||
width: 100px; |
|||
padding-left: 24px; |
|||
height: 32px; |
|||
text-align: center; |
|||
line-height: 30px; |
|||
border: 1px solid #4CA7FF; |
|||
color: #4CA7FF; |
|||
border-radius: 10px; |
|||
font-size: 16px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.chat-message p span.stop-btn::before { |
|||
content: ''; |
|||
position: absolute; |
|||
left: 4px; |
|||
top: 50%; |
|||
width: 24px; |
|||
height: 24px; |
|||
background: url("~@/assets/images/index-img7.png") no-repeat left top; |
|||
background-size: 100% 100%; |
|||
margin-top: -12px; |
|||
} |
|||
|
|||
.chat-message p span.stop-btn:hover { |
|||
background-color: rgba(255, 255, 255, 0.2); |
|||
} |
|||
|
|||
.chat-message p span.remove-btn { |
|||
position: absolute; |
|||
left: 4px; |
|||
bottom: -40px; |
|||
padding-left: 0; |
|||
border: none; |
|||
color: #999; |
|||
width: 100px; |
|||
padding-left: 24px; |
|||
height: 32px; |
|||
text-align: center; |
|||
line-height: 30px; |
|||
font-size: 16px; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
.chat-message p span.remove-btn::before { |
|||
border: none; |
|||
color: #999; |
|||
background: none; |
|||
} |
|||
|
|||
.chat-message p span.remove-btn:hover { |
|||
background-color: transparent; |
|||
cursor: default; |
|||
} |
|||
|
|||
.bot-message { |
|||
display: flex; |
|||
flex-direction: row-reverse; |
|||
justify-content: flex-end; |
|||
} |
|||
|
|||
.bot-message p { |
|||
line-height: 48px; |
|||
background-color: rgba(255, 255, 255, 0.2); |
|||
border-radius: 8px 28px 28px 28px; |
|||
} |
|||
|
|||
.loading { |
|||
position: relative; |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
align-items: center; |
|||
height: 66px; |
|||
} |
|||
|
|||
.loading img { |
|||
display: block; |
|||
width: 67px; |
|||
margin: 0 10px; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,370 @@ |
|||
<template> |
|||
<div> |
|||
<el-dialog class="editingDialog" :title="formTitle" :visible="formVisible" append-to-body :close-on-click-modal="false" :modal-append-to-body="false" :before-close="handleCloseForm"> |
|||
<span class="dialog-right-top" /> |
|||
<span class="dialog-left-bottom" /> |
|||
<div class="setting-dialog"> |
|||
<div style="display: flex; justify-content: flex-start; align-items: flex-start;"> |
|||
<div class="upload-input" style="margin-top: 0;"> |
|||
<input |
|||
ref="file" |
|||
multiple |
|||
type="file" |
|||
@change="previewFiles" |
|||
> |
|||
<div class="upload-zip"><i class="iconfont icon-shangchuan2" />上传文件</div> |
|||
</div> |
|||
<div v-if="selectedFiles.length > 0" style="flex: 1; max-height: 120px; overflow-y: auto; margin-left: 20px; line-height: 24px;"> |
|||
<p v-for="(file, index) in selectedFiles" :key="index">{{ file.name }}</p> |
|||
</div> |
|||
</div> |
|||
<div style="display: flex; justify-content: flex-start; align-items: flex-end; margin: 20px 0; "> |
|||
<el-input |
|||
v-model="textarea" |
|||
placeholder="请输入提问" |
|||
/> |
|||
<el-button style="margin-left: 20px;" :loading="loading" @click="handleAIEditing">AI智能编研</el-button> |
|||
</div> |
|||
<mavon-editor |
|||
ref="typingContainer" |
|||
class="md" |
|||
:value="editorContent" |
|||
:subfield="false" |
|||
:default-open="'preview'" |
|||
:toolbars-flag="false" |
|||
:editable="false" |
|||
:scroll-style="true" |
|||
:ishljs="true" |
|||
/> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button type="text" @click="handleCloseForm">取消</el-button> |
|||
<el-button :loading="crud.status.cu === 2" type="primary" @click="handleComfiredEditing">确定</el-button> |
|||
</div> |
|||
</div> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { form } from '@crud/crud' |
|||
import { mapGetters } from 'vuex' |
|||
// import editor from '@/components/quillEditor/index' |
|||
// import strJson from './str.json' |
|||
|
|||
const defaultForm = { id: null, title: null, researchType: null, editor1: null, editor2: null, startTime: null, endTime: null, remarks: null } |
|||
export default { |
|||
name: 'Form', |
|||
components: { }, |
|||
mixins: [ |
|||
form(function() { |
|||
return Object.assign({}, defaultForm) |
|||
}) |
|||
], |
|||
data() { |
|||
return { |
|||
formType: 1, |
|||
formTitle: '', |
|||
formVisible: false, |
|||
selectedFiles: [], |
|||
textarea: '帮我写一篇AI赋能档案管理的报告', |
|||
editorRef: 'test', |
|||
editorContent: '', |
|||
mockResponse: `## 一、引言 |
|||
|
|||
### 1.1 研究背景与意义 |
|||
|
|||
随着科技的飞速发展,人工智能(AI)技术已逐渐渗透到各个行业,成为推动创新和发展的重要力量。AI 技术以其强大的数据分析、模式识别和自动化处理能力,正在重塑许多传统行业的运作方式。在档案管理领域,传统的管理模式面临着诸多挑战,如档案数量的快速增长、信息检索的效率低下、档案利用的局限性等。将 AI 技术引入档案管理,为解决这些问题提供了新的思路和方法。 |
|||
|
|||
传统档案管理主要依赖人工操作,从档案的收集、整理、分类到存储和检索,都需要大量的人力和时间。这种方式不仅效率低下,而且容易出现人为错误。随着数字化时代的到来,电子档案的数量呈爆炸式增长,传统的管理方式越发难以应对。AI 技术的出现,为档案管理带来了新的机遇。它能够自动处理大量的档案数据,实现档案的智能分类、快速检索和精准推荐,大大提高了档案管理的效率和准确性。 |
|||
|
|||
AI 赋能档案管理具有重要的现实意义。它可以显著提升档案管理的效率。通过自动化的分类和索引,AI 能够快速处理海量的档案信息,使档案管理人员从繁琐的重复性工作中解放出来,将更多的精力投入到更有价值的工作中。AI 技术可以实现档案的精准检索和智能推荐,提高档案的利用效率,更好地满足用户的需求。这有助于充分挖掘档案的价值,为决策提供更有力的支持。 |
|||
|
|||
AI 技术的应用还将推动档案管理行业的变革。它促使档案管理从传统的人工模式向智能化、数字化模式转变,引领行业进入一个新的发展阶段。这种变革不仅有助于提升档案管理机构的竞争力,也为整个社会的信息资源管理和利用带来了新的契机。通过 AI 技术,档案管理机构可以更好地整合和利用档案资源,为社会提供更优质的信息服务。 |
|||
|
|||
### 1.2 研究方法与创新点 |
|||
|
|||
本研究采用了多种研究方法,以确保研究的全面性和深入性。通过广泛收集和分析国内外相关文献,了解 AI 技术在档案管理领域的研究现状、应用进展和发展趋势,为研究提供理论基础和参考依据。对国内外多个档案管理机构应用 AI 技术的实际案例进行深入分析,总结其成功经验和存在的问题,探索 AI 技术在档案管理中的最佳应用模式。还与档案管理领域的专家、从业人员进行交流和访谈,获取他们对 AI 技术应用的看法和建议,进一步丰富研究内容。 |
|||
|
|||
本研究的创新点在于从多个维度对 AI 赋能档案管理进行分析。不仅关注 AI 技术在档案管理中的应用效果,还深入探讨其对档案管理流程、组织架构和服务模式的影响。结合实际案例,对 AI 技术在不同类型档案管理中的应用进行详细分析,为档案管理机构提供具有针对性的实践指导。此外,本研究还前瞻性地探讨了 AI 技术在档案管理中的未来发展趋势,为行业的长远发展提供参考。 |
|||
|
|||
## 二、AI 赋能档案管理的技术基础 |
|||
|
|||
### 2.1 AI 技术概述 |
|||
|
|||
AI 技术是一门综合性的技术领域,旨在让计算机系统模拟人类的智能行为,实现对复杂问题的理解、推理、学习和决策。它涵盖了多个子领域,其中机器学习、深度学习、自然语言处理、计算机视觉等技术在档案管理中具有重要的应用价值。 |
|||
|
|||
机器学习是 AI 的核心技术之一,它通过让计算机从大量的数据中学习模式和规律,从而实现对未知数据的预测和决策。机器学习主要分为监督学习、无监督学习和强化学习。监督学习使用标记好的数据进行训练,模型通过学习数据中的特征和标签之间的关系,来预测新数据的标签。在档案分类中,可以使用监督学习算法,将已分类的档案作为训练数据,让模型学习不同类别档案的特征,从而对新的档案进行自动分类。无监督学习则处理未标记的数据,通过聚类、降维等方法发现数据中的内在结构和模式。在档案管理中,无监督学习可以用于对档案进行主题建模,发现档案中的潜在主题,帮助用户更好地理解档案内容。强化学习通过智能体与环境的交互,根据环境反馈的奖励信号来学习最优策略。在档案检索中,强化学习可以根据用户的反馈,不断优化检索策略,提高检索结果的准确性。 |
|||
|
|||
深度学习是机器学习的一个分支,它基于深度神经网络,通过构建多层神经元来自动学习数据的高级特征。深度学习在图像识别、语音识别、自然语言处理等领域取得了显著的成果。在档案管理中,深度学习可以用于图像识别,如对档案中的图像进行文字识别、图像分类等;也可以用于语音识别,将档案中的语音内容转换为文本,方便进行检索和管理。 |
|||
|
|||
自然语言处理致力于让计算机理解和处理人类语言。它包括文本分类、情感分析、机器翻译、问答系统等多个任务。在档案管理中,自然语言处理可以用于对档案文本进行关键词提取、摘要生成,帮助用户快速了解档案内容;还可以用于构建智能问答系统,用户可以通过自然语言提问,获取所需的档案信息。 |
|||
|
|||
计算机视觉主要研究如何让计算机理解和解释图像和视频信息。它包括图像识别、目标检测、图像分割等技术。在档案管理中,计算机视觉可以用于对档案图像进行数字化处理,如去噪、增强、修复等,提高图像的质量和可读性;还可以用于对档案中的图像进行内容分析,识别图像中的人物、场景等信息,为档案的分类和检索提供支持。 |
|||
|
|||
这些 AI 技术在档案管理中具有很强的适用性。档案管理涉及大量的数据处理和信息分析工作,传统的人工方式效率低下且容易出错。AI 技术的自动化和智能化特点,可以有效地提高档案管理的效率和准确性。通过机器学习和深度学习算法,可以实现档案的自动分类、检索和推荐,大大节省了人力和时间成本;自然语言处理和计算机视觉技术,可以让计算机更好地理解和处理档案中的文本和图像信息,为用户提供更加便捷和智能的服务。 |
|||
|
|||
### 2.2 与档案管理相关的 AI 技术应用 |
|||
|
|||
#### 图像识别技术在档案数字化中的应用 |
|||
|
|||
图像识别技术在档案数字化过程中发挥着关键作用。在纸质档案数字化时,通过高精度扫描仪将纸质档案转化为数字图像后,图像识别技术可对这些图像进行处理。如在某大型企业的档案数字化项目中,利用先进的卷积神经网络(CNN)算法,能准确识别档案图像中的文字、图表等元素。该技术可自动去除图像中的噪声、划痕,校正图像的倾斜角度,增强文字的清晰度,极大提高了图像质量,为后续的文字识别和信息提取奠定了良好基础。通过图像识别技术实现自动边界检测与切割,能准确识别文档的边缘,截取文件中的文字区域,过滤掉空白边缘或杂物,避免误识别和多余信息干扰,提高了识别效率和准确性。在处理包含多个内容区域的文档,如表格、多栏文本等时,算法还能准确识别并分别处理每个区域,通过布局分析识别图像中的文本区域、非文本区域以及文本的结构信息,如列、行、块、标题、段落、表格等,有效提升了复杂档案图像的处理能力。 |
|||
|
|||
#### 语音识别技术在档案检索中的应用 |
|||
|
|||
语音识别技术为档案检索带来了新的便利。在一些档案管理系统中,用户只需说出检索关键词,系统就能快速定位到相关档案。以某政府档案管理部门为例,其引入了基于深度学习的语音识别技术,该技术采用了循环神经网络(RNN)及其变体长短时记忆网络(LSTM),能够有效处理语音中的时序信息,准确识别各种口音和语速的语音指令。用户在检索档案时,无需手动输入关键词,直接通过语音提问,系统即可将语音转换为文本,并在档案数据库中进行检索,迅速返回相关档案信息。这一应用不仅提高了检索效率,还降低了用户的操作门槛,特别适用于不熟悉键盘输入或需要快速获取信息的用户,提升了档案服务的便捷性和用户体验。 |
|||
|
|||
#### 自然语言处理技术在档案内容分析中的应用 |
|||
|
|||
自然语言处理技术在档案内容分析方面具有重要价值。它可以对档案文本进行深度挖掘和分析,实现关键词提取、主题建模、情感分析等功能。在某高校的科研档案管理中,利用自然语言处理技术对科研成果档案进行关键词提取,能够准确提炼出档案中的核心概念和关键信息,方便用户快速了解档案内容。通过主题建模,可将大量的科研档案按照不同的研究主题进行分类和归纳,帮助科研人员快速找到相关领域的研究资料。自然语言处理技术还能对档案中的文本进行情感分析,了解科研人员对特定研究方向或项目的态度和情感倾向,为科研管理和决策提供有价值的参考。 |
|||
|
|||
## 三、AI 在档案管理中的应用场景与案例分析 |
|||
|
|||
### 3.1 档案资源建设 |
|||
|
|||
#### 3.1.1 智能采集与整理 |
|||
|
|||
在档案资源建设过程中,智能采集与整理是重要的基础环节。以某大型综合性档案馆为例,该馆负责收集和整理大量的历史文献、政府文件、企业资料等各类档案。随着信息时代的发展,档案来源日益广泛,包括各类网站、数据库、社交媒体等,传统的人工采集和整理方式难以满足需求。为此,该档案馆引入了 AI 技术,利用智能采集工具从网页爬取信息,并结合自然语言处理和机器学习算法,对采集到的信息进行自动分类和整理。 |
|||
|
|||
通过配置专门的网络爬虫程序,档案馆能够按照设定的规则,自动从指定的网站和数据库中获取相关的档案信息。在采集过程中,利用自然语言处理技术对网页内容进行分析,提取关键信息,如文件标题、发布时间、作者、主题等,并自动生成元数据。机器学习算法则用于对档案信息进行分类,根据已有的分类标准和训练数据,将新采集到的档案信息自动归类到相应的类别中,如历史文献类、政策法规类、企业档案类等。这一过程大大提高了档案采集的效率和准确性,每天能够处理数千条信息,相比传统人工采集方式,效率提升了数倍。同时,通过自动分类和整理,减少了人工分类的主观性和误差,提高了档案资源的质量和可用性。 |
|||
|
|||
#### 3.1.2 档案数字化处理 |
|||
|
|||
档案数字化是档案管理现代化的关键步骤,AI 技术在这一过程中发挥了重要作用。北京中烟创新科技有限公司推出的数字档案管理系统,充分展示了 AI 在档案数字化处理中的应用。该系统利用先进的 OCR(光学字符识别)技术,能够高效、准确地识别并转换纸质档案中的文字、图像等信息为数字格式。在处理大量纸质档案时,OCR 技术可快速将纸质文件转化为可编辑的电子文本,大大减少了人工录入成本,提高了数字化转换效率。 |
|||
|
|||
在对档案进行数字化处理后,还需要对电子档案的 “四性”,即真实性、完整性、可用性和安全性进行检测。中烟创新数字档案管理系统通过数字签名、访问记录等技术确保文件的真实性和可信度,防止文件被篡改或伪造;通过记录和管理文件的版本和修改历史,确保文件的完整性和版本的追溯性;通过提供随时随地的网络访问功能,提高了档案信息的可用性和可访问性;通过访问控制、权限管理、加密传输等安全机制,保护档案信息不被未授权人员访问或泄露,确保档案数据的安全性。这些功能的实现,离不开 AI 技术的支持,如利用人工智能算法对数字签名进行验证,通过机器学习模型对文件的完整性进行评估,利用加密算法保障数据传输和存储的安全等。通过 AI 技术的应用,中烟创新数字档案管理系统实现了档案数字化处理的高效性、准确性和安全性,为企业的档案管理提供了有力支持。 |
|||
|
|||
### 3.2 档案开放利用 |
|||
|
|||
#### 3.2.1 档案开放审核 |
|||
|
|||
档案开放审核是保障档案信息安全、合理利用的重要环节。某综合档案馆在档案开放审核工作中,应用了海泰智能档案开放系统,借助 AI 技术优化审核流程,提升审核效率。该系统利用自然语言处理的文本向量化、文本分类、关键信息提取、文本摘要、文本纠错等技术建立档案开放审核模型。通过对大量已审核档案数据的学习和训练,模型能够自动分析新档案的内容,提取关键信息,判断档案是否符合开放条件,并给出开放审核建议。 |
|||
|
|||
在实际应用中,档案管理人员只需将待审核的档案录入系统,系统即可快速进行分析处理。对于一些内容较为简单、明显符合开放条件的档案,系统能够直接给出开放建议,大大缩短了审核时间。对于复杂的档案,系统提供的分析结果和建议也能帮助档案鉴定人员更高效地开展审核工作。据统计,引入该系统后,该档案馆的档案开放审核效率提升了 50% 以上,有效加快了档案开放的进程,使更多的档案资源能够及时为社会公众所用。同时,通过 AI 技术的辅助,审核的准确性也得到了提高,减少了因人工判断失误导致的档案开放不当问题。 |
|||
|
|||
#### 3.2.2 档案智能检索 |
|||
|
|||
档案智能检索是提高档案利用效率的关键。范德比尔特电视新闻档案馆在档案管理中,充分利用 AI 技术实现了智能检索功能。该档案馆自 1968 年以来,致力于记录和保存美国国家电视网的新闻,拥有海量的视频新闻档案。随着档案数量的不断增加,传统的检索方式难以满足用户快速、准确获取信息的需求。为此,档案馆引入了自动语音识别(ASR)和命名实体识别(NER)等 AI 技术。 |
|||
|
|||
首先,利用 ASR 技术为新闻播报生成转录文本,将视频中的语音内容转化为文字,形成可检索的文本数据库。接着,通过 NER 技术从转录文本中提取命名实体,如人名、地名、组织机构名等,并自动生成新闻标题。这些技术的应用,使得用户可以通过输入自然语言关键词,如 “2020 年美国总统大选相关新闻”,系统就能快速定位到相关的新闻档案,大大提高了检索的准确性和效率。与传统的基于关键词匹配的检索方式相比,智能检索能够理解用户的语义需求,提供更精准的检索结果,满足了研究人员、媒体工作者等不同用户对档案信息的多样化需求。 |
|||
|
|||
#### 3.2.3 辅助档案编研 |
|||
|
|||
档案编研是对档案信息进行深度加工和开发利用的重要工作,AI 技术在这一领域也发挥着重要作用。海泰方圆在某军工企业的档案管理应用中,利用自然语言处理技术服务于档案编研工作。在编研素材的收集阶段,自然语言处理技术通过智能检索引擎能够迅速、准确地定位到与编研主题高度相关的档案,极大提高检索的效率和准确性。例如,当编研人员确定了 “某型号武器装备研发历程” 的编研主题后,系统能够根据主题关键词,在海量的档案库中快速筛选出相关的研发报告、试验记录、技术文档等档案资料。 |
|||
|
|||
通过文本挖掘技术,海泰方圆深入挖掘档案中隐含信息,揭示档案之间的内在联系和规律。通过对档案内容的语义分析,发现不同档案之间的关联,如人物关系、事件关联等,为编研人员提供更全面的信息视角。利用知识图谱技术,构建档案知识网络,将档案中的各种信息以图形化的方式展示出来,使编研人员能够直观地了解档案之间的关联性和层次性,为编写高质量的编研成果提供有力支持。通过 AI 技术的应用,该军工企业的档案编研工作效率得到了显著提升,编研成果的质量和深度也得到了提高,为企业的技术研发、经验总结和历史传承提供了重要的参考依据。 |
|||
|
|||
### 3.3 档案安全管理 |
|||
|
|||
#### 3.3.1 库房安全管理 |
|||
|
|||
档案库房的安全管理是档案管理工作的重要保障。江苏省太仓市智慧档案馆将 AI 技术应用于库房安全管理,实现了对库房环境的实时监控和智能安防。该档案馆利用物联网技术,在库房内布置了大量的传感器,如温湿度传感器、烟雾传感器、门禁传感器等,实时采集库房的环境数据和设备状态信息。AI 智能管理系统对这些感知数据进行分析处理,根据预设的规则和阈值,判断库房环境是否正常,设备是否运行良好。 |
|||
|
|||
当库房内的温湿度超出适宜范围时,系统会自动发出警报,并联动空调、除湿机等设备进行调节,确保档案保存环境的稳定。在安防方面,利用人脸识别、视频监控等 AI 技术,对进入库房的人员进行身份识别和行为监测。只有通过授权的人员才能进入库房,并且系统会实时记录人员的进出时间、行为轨迹等信息。一旦发现异常行为,如非法闯入、长时间逗留等,系统会立即触发警报,并通知安保人员进行处理。通过这些 AI 技术的应用,太仓市智慧档案馆实现了库房安全管理的智能化、自动化,有效提高了档案库房的安全性,保障了档案实体的安全。 |
|||
|
|||
#### 3.3.2 数据安全与隐私保护 |
|||
|
|||
在数字化时代,档案数据的安全与隐私保护至关重要。AI 技术在数据加密、访问控制等方面的应用,为档案数据安全提供了有力保障。在数据加密方面,利用 AI 算法生成高强度的加密密钥,对档案数据进行加密存储和传输。通过机器学习算法不断优化加密策略,提高加密的安全性和效率,防止数据被窃取或篡改。在访问控制方面,AI 技术可以根据用户的身份、权限和行为模式,实现智能的访问控制。通过对用户行为数据的分析,建立用户行为模型,实时监测用户的访问行为。当发现异常访问行为,如频繁尝试登录、大量下载敏感数据等,系统会自动进行拦截,并要求用户进行身份验证,确保只有授权用户能够访问相应的档案数据。 |
|||
|
|||
AI 技术还可以用于检测和防范网络攻击。通过对网络流量的实时监测和分析,利用机器学习算法识别潜在的攻击行为,如 DDoS 攻击、SQL 注入攻击等,并及时采取防护措施,保障档案管理系统的网络安全。在隐私保护方面,AI 技术可以对档案中的敏感信息进行自动识别和脱敏处理,如个人身份证号、银行卡号、医疗记录等,在保护用户隐私的同时,确保档案数据的可用性。通过这些 AI 技术的综合应用,有效地保障了档案数据的安全和用户的隐私,为档案管理的数字化转型提供了安全可靠的环境。 |
|||
|
|||
## 四、AI 赋能档案管理的优势与挑战 |
|||
|
|||
### 4.1 优势分析 |
|||
|
|||
#### 4.1.1 提高管理效率 |
|||
|
|||
AI 技术在档案管理的多个环节显著提高了管理效率。在档案分类环节,传统的人工分类方式需要档案管理人员逐份阅读档案内容,依据经验和既定规则进行分类,这一过程耗时费力,且容易因人为因素导致分类不准确。以某大型企业的档案管理为例,该企业每年产生的各类档案数量多达数十万份,包括合同档案、财务档案、人事档案等。在引入 AI 分类系统之前,档案管理人员需要花费大量时间进行分类工作,且分类错误率较高,这给后续的档案检索和利用带来了很大困难。引入基于机器学习算法的 AI 分类系统后,该系统通过对大量已分类档案数据的学习,能够自动识别档案的关键信息和特征,快速准确地将新的档案归入相应类别。经过实际应用,档案分类的效率提高了数倍,错误率也大幅降低,从原来的 10% 左右降低到了 2% 以内。 |
|||
|
|||
在档案检索方面,AI 技术同样展现出巨大优势。传统的检索方式主要依赖关键词匹配,当用户输入关键词时,系统在档案库中进行简单的文本匹配,这种方式往往无法准确理解用户的真实需求,导致检索结果不准确、不全面。某高校的图书馆档案管理系统,在采用 AI 智能检索技术之前,学生和教师在检索相关资料时,常常因为检索结果不理想而浪费大量时间。引入 AI 智能检索系统后,该系统利用自然语言处理技术,能够理解用户输入的自然语言问题,分析其语义和语境,从而在海量的档案中精准定位到用户所需信息。同时,通过建立知识图谱,系统可以挖掘档案之间的关联关系,为用户提供更全面、更相关的检索结果。据统计,采用 AI 智能检索技术后,检索效率提高了 50% 以上,用户对检索结果的满意度也从原来的 60% 提升到了 85% 以上。 |
|||
|
|||
在档案审核环节,AI 技术的应用也大大节省了人力和时间。如北京神舟航天软件技术股份有限公司申请的文书档案开放审核专利技术,通过获取待审核文书档案,利用机器学习和自然语言处理等技术识别个性化信息,并运用审查准则自动判断文书档案是否开放。在某政府部门的档案审核工作中,引入该技术后,原本需要人工花费数周时间才能完成的大量文书档案审核工作,现在通过自动化系统仅需几天甚至几小时就能完成,审核效率大幅提升,同时减少了人工判断的误判率,提高了审核的准确性。 |
|||
|
|||
#### 4.1.2 提升服务质量 |
|||
|
|||
AI 技术能够实现精准检索和个性化服务,从而有效提升档案服务质量,满足用户多元化需求。在精准检索方面,AI 技术通过自然语言处理和深度学习算法,能够理解用户的复杂查询意图,提供更准确的检索结果。以范德比尔特电视新闻档案馆为例,该馆利用自动语音识别(ASR)和命名实体识别(NER)技术,为新闻播报生成转录文本并提取命名实体,用户可以通过输入自然语言关键词,如 “2020 年美国总统大选相关新闻”,系统就能快速准确地定位到相关新闻档案,大大提高了检索的精准度。与传统的基于关键词匹配的检索方式相比,AI 精准检索能够理解语义,避免了因关键词匹配不准确而导致的漏检和误检问题,为用户节省了大量时间和精力。 |
|||
|
|||
在个性化服务方面,AI 技术可以根据用户的历史检索记录、浏览行为等数据,分析用户的兴趣偏好和需求特点,为用户提供个性化的档案推荐服务。某企业的档案管理系统通过 AI 技术,对用户的使用数据进行分析,当用户登录系统时,系统会根据用户的个性化需求,主动推荐相关的档案资源,如行业报告、市场分析资料等。这种个性化推荐服务不仅提高了用户获取所需信息的效率,还能帮助用户发现潜在的有价值信息,提升了用户对档案服务的满意度。同时,AI 技术还可以根据不同用户的身份和权限,提供差异化的服务,如为企业高管提供更高级别的决策支持信息,为普通员工提供与工作相关的基础档案资料,满足了不同用户的多元化需求。 |
|||
|
|||
#### 4.1.3 挖掘数据价值 |
|||
|
|||
AI 技术通过强大的数据分析能力,能够深入挖掘档案中的潜在价值,为决策提供有力支持。通过对档案数据的分析,AI 可以发现数据之间的关联和规律,揭示出隐藏在档案中的信息。某城市的规划部门对历年的城市建设档案进行分析,利用 AI 技术挖掘出城市发展过程中不同区域的功能演变、人口流动趋势以及基础设施建设需求等信息。通过对这些信息的分析,规划部门可以更好地制定城市未来的发展规划,合理布局基础设施,优化城市功能分区,为城市的可持续发展提供决策依据。 |
|||
|
|||
在企业领域,AI 技术对档案数据的分析也具有重要价值。某企业通过对历年销售档案、客户档案和市场档案的分析,利用 AI 技术预测市场趋势、客户需求和产品销售情况。通过对销售数据的时间序列分析和市场趋势预测,企业可以提前调整生产计划,优化产品库存,合理安排资源,提高企业的运营效率和市场竞争力。AI 还可以对客户档案进行分析,了解客户的购买行为和偏好,为企业的市场营销策略提供数据支持,实现精准营销,提高客户满意度和忠诚度。 |
|||
|
|||
在科研领域,AI 技术对档案数据的挖掘也为科研工作提供了新的思路和方法。某科研机构对大量的科研文献档案进行分析,利用 AI 技术发现不同研究领域之间的潜在联系和交叉点,为科研人员提供新的研究方向和创新点。通过对科研文献的主题建模和知识图谱构建,AI 可以帮助科研人员快速了解相关领域的研究现状和发展趋势,避免重复研究,提高科研效率。 |
|||
|
|||
### 4.2 挑战分析 |
|||
|
|||
#### 4.2.1 数据质量问题 |
|||
|
|||
档案数据来源多样,包括纸质档案数字化、电子文档、数据库导入、网络采集等,这导致数据格式不统一,如文本文件有.doc、.txt、.pdf 等多种格式,图像文件有.jpg、.png、.tif 等格式,不同格式的数据在处理和分析时需要不同的技术和工具,增加了数据处理的复杂性。档案数据还存在质量参差不齐的问题,如纸质档案数字化过程中可能出现文字模糊、图像变形、信息缺失等情况,电子文档可能存在数据错误、格式混乱、元数据不完整等问题。这些问题会影响 AI 算法的训练和模型的准确性,导致分类错误、检索结果不准确等问题。 |
|||
|
|||
为解决这些问题,需要建立完善的数据质量管理机制。在数据采集阶段,制定严格的数据采集标准和规范,确保采集的数据准确、完整、格式统一。在数据预处理阶段,采用数据清洗、去噪、修复等技术,对数据进行标准化处理,去除错误数据和噪声数据,补充缺失数据,提高数据质量。利用数据质量评估工具,定期对档案数据进行质量评估,及时发现和解决数据质量问题。通过建立数据质量管理体系,从数据的产生、采集、存储、处理到应用的全过程进行监控和管理,确保数据的质量和可靠性,为 AI 技术在档案管理中的应用提供坚实的数据基础。 |
|||
|
|||
#### 4.2.2 技术适应性与安全性 |
|||
|
|||
档案信息种类繁多,包括文本、图像、音频、视频等多种类型,每种类型的信息都有其独特的结构和特征,这对 AI 技术的适应性提出了很高的要求。不同类型的档案数据需要不同的 AI 算法和模型进行处理,如文本数据需要自然语言处理技术,图像数据需要计算机视觉技术,音频数据需要语音识别技术等。如何针对不同类型的档案数据选择合适的 AI 技术,并将这些技术有效地集成到档案管理系统中,是一个需要解决的问题。 |
|||
|
|||
档案信息包含大量的敏感信息,如个人隐私、商业机密、国家秘密等,保障档案信息的安全和隐私至关重要。AI 技术在处理和存储档案信息时,可能面临数据泄露、篡改、非法访问等安全风险。在数据传输过程中,可能被黑客截获和篡改;在数据存储过程中,可能因系统漏洞被非法访问。为保障档案信息安全,需要采用多种安全技术,如数据加密技术,对档案数据进行加密存储和传输,防止数据被窃取和篡改;访问控制技术,根据用户的身份和权限,对档案信息的访问进行严格控制,确保只有授权用户能够访问相应的档案信息;安全监测技术,实时监测档案管理系统的运行状态,及时发现和防范安全威胁。还需要建立健全安全管理制度,加强对档案管理人员和用户的安全培训,提高安全意识,确保档案信息的安全和隐私。 |
|||
|
|||
#### 4.2.3 伦理与法律法规问题 |
|||
|
|||
在 AI 应用中,数据使用的合法性和合规性是一个重要问题。档案数据的收集、存储、处理和共享需要遵循相关的法律法规,如个人信息保护法、数据安全法等。在收集和使用用户的个人档案数据时,需要获得用户的明确授权,确保数据使用的目的合法、正当,防止数据滥用和泄露。AI 算法可能存在偏见,这是由于训练数据的偏差或算法设计的缺陷导致的。在档案分类和检索中,如果算法存在偏见,可能会导致某些类型的档案被错误分类或检索不到,影响档案管理的公平性和准确性。算法的透明度和可解释性也是一个伦理问题,由于 AI 算法的复杂性,其决策过程往往难以理解,这使得用户难以信任算法的结果,在涉及重要决策时,如档案开放审核、机密档案处理等,算法的不可解释性可能会引发伦理争议。 |
|||
|
|||
为应对这些伦理和法律法规问题,需要加强法律法规建设,制定专门针对 AI 在档案管理中应用的法律法规,明确数据使用、算法开发和应用等方面的规则和责任。建立伦理审查机制,对 AI 系统的设计、开发和应用进行伦理审查,确保 AI 技术的应用符合伦理道德标准。提高 AI 算法的透明度和可解释性,通过技术手段和可视化方法,让用户能够理解算法的决策过程和依据,增强用户对 AI 系统的信任。加强对 AI 技术应用的监管,建立监管机构,对 AI 在档案管理中的应用进行监督和管理,确保其合法、合规、符合伦理要求。 |
|||
|
|||
#### 4.2.4 人才短缺问题 |
|||
|
|||
AI 时代对档案管理人员的技能提出了新的挑战。传统的档案管理人员主要具备档案管理的专业知识和技能,如档案整理、分类、保管等,而在 AI 赋能的档案管理环境下,档案管理人员需要掌握 AI 技术相关的知识和技能,如机器学习、自然语言处理、数据分析等,以便能够有效地运用 AI 技术进行档案管理工作。他们还需要具备一定的信息技术素养,能够熟练使用档案管理系统和相关软件工具。目前,具备这些综合技能的档案管理人才相对短缺,这限制了 AI 技术在档案管理中的广泛应用和深入发展。 |
|||
|
|||
为解决人才短缺问题,需要加强人才培养。在高校教育中,优化档案管理相关专业的课程设置,增加 AI 技术、信息技术等相关课程,培养具备跨学科知识和技能的专业人才。开展在职培训,针对现有的档案管理人员,提供定期的 AI 技术培训和继续教育课程,帮助他们更新知识结构,提升技能水平。鼓励档案管理机构与科研机构、高校等合作,建立人才培养基地,共同培养适应 AI 时代需求的档案管理人才。还可以通过引进外部人才,吸引具有 AI 技术背景和经验的专业人才加入档案管理队伍,提高档案管理团队的整体素质和能力。 |
|||
|
|||
## 五、应对策略与未来发展趋势 |
|||
|
|||
### 5.1 应对策略 |
|||
|
|||
#### 5.1.1 数据质量管理 |
|||
|
|||
建立完善的数据质量管理机制是确保档案数据质量和一致性的关键。在数据采集环节,制定严格的数据采集标准和规范,明确数据的来源、格式、内容要求等,确保采集到的数据准确、完整、格式统一。对于纸质档案数字化,要保证扫描图像的清晰度、完整性,对图像进行预处理,去除噪声、倾斜校正等,确保后续的文字识别和信息提取准确无误。在数据录入过程中,采用数据校验和审核机制,对录入的数据进行实时校验,及时发现和纠正错误数据。 |
|||
|
|||
在数据存储和管理方面,建立数据仓库和数据湖,对档案数据进行集中存储和管理,确保数据的一致性和可访问性。利用数据清洗和去重技术,定期对档案数据进行清洗,去除重复数据、错误数据和无效数据,提高数据的质量。建立数据质量评估体系,制定数据质量指标和评估方法,定期对档案数据进行质量评估,及时发现和解决数据质量问题。通过数据质量评估,对数据的准确性、完整性、一致性、时效性等方面进行量化评估,为数据质量管理提供数据支持。 |
|||
|
|||
#### 5.1.2 技术研发与应用 |
|||
|
|||
鼓励加大对适应档案管理的 AI 技术的研发投入,推动技术创新。针对档案数据的特点,研发专门的 AI 算法和模型,提高 AI 技术在档案管理中的适应性和准确性。研发针对档案图像识别的深度学习模型,提高对档案图像中文字、图表等元素的识别准确率;研发适合档案文本分析的自然语言处理模型,增强对档案文本的理解和分析能力。加强与高校、科研机构的合作,共同开展 AI 技术在档案管理中的应用研究,促进技术成果的转化和应用。 |
|||
|
|||
在技术应用方面,加强 AI 技术与档案管理系统的集成,实现 AI 技术在档案管理全流程的应用。在档案采集环节,利用 AI 技术实现自动化采集和分类;在档案整理环节,借助 AI 技术进行智能分类和编目;在档案检索环节,运用 AI 技术提供智能检索和推荐服务。不断优化 AI 技术在档案管理中的应用效果,根据实际应用情况,对 AI 模型和算法进行调整和优化,提高档案管理的效率和质量。 |
|||
|
|||
#### 5.1.3 人才培养与团队建设 |
|||
|
|||
加强档案人员的 AI 技术培训是提升档案管理水平的重要举措。定期组织档案人员参加 AI 技术培训课程,邀请专家学者进行授课,系统学习机器学习、自然语言处理、数据分析等 AI 技术知识,了解 AI 技术在档案管理中的应用案例和实践经验。鼓励档案人员参加相关的学术交流活动和研讨会,拓宽视野,掌握最新的技术动态和发展趋势。 |
|||
|
|||
通过培训,使档案人员具备运用 AI 技术进行档案管理的能力,能够熟练操作档案管理系统中的 AI 功能模块,如智能检索、自动分类等。培养档案人员的数据思维和创新意识,让他们能够充分利用 AI 技术挖掘档案数据的价值,为档案管理工作提供创新思路和方法。除了技术培训,还应注重培养档案人员的综合素质,包括沟通能力、团队协作能力、问题解决能力等,提高档案管理团队的整体战斗力。 |
|||
|
|||
引进具有 AI 技术背景的专业人才,充实档案管理团队,优化团队的知识结构和技能水平。建立人才激励机制,为人才提供良好的发展空间和待遇,吸引和留住优秀人才。通过人才的引进和培养,打造一支既懂档案管理又懂 AI 技术的复合型人才队伍,为 AI 赋能档案管理提供人才保障。 |
|||
|
|||
#### 5.1.4 伦理与法律规范 |
|||
|
|||
制定相关的伦理准则和法律法规是规范 AI 在档案管理中应用的重要保障。明确 AI 在档案管理中的数据使用规则,确保数据的收集、存储、处理和共享符合法律法规和伦理道德要求。在收集用户个人档案数据时,必须获得用户的明确授权,遵循最小必要原则,仅收集与档案管理相关的必要数据,保护用户的隐私和个人信息安全。 |
|||
|
|||
建立 AI 算法的审查机制,对用于档案管理的 AI 算法进行伦理审查,确保算法的公正性和透明度。审查算法是否存在偏见,是否会对特定群体造成不公平的影响。对于可能影响档案管理决策的 AI 算法,要求算法开发者提供详细的算法说明和解释,提高算法的可解释性,增强用户对算法结果的信任。加强对 AI 技术应用的监管,建立专门的监管机构,制定监管标准和流程,对 AI 在档案管理中的应用进行监督和管理,确保其合法、合规、符合伦理要求。对违反伦理准则和法律法规的行为,要依法进行惩处,维护档案管理的良好秩序。 |
|||
|
|||
### 5.2 未来发展趋势 |
|||
|
|||
#### 5.2.1 AI 技术与档案管理的深度融合 |
|||
|
|||
未来,AI 技术将在档案管理的全流程实现更深入的融合和应用。在档案资源建设方面,AI 技术将实现更智能化的采集和整理。通过智能传感器和网络爬虫技术,能够自动从各种数据源采集档案信息,包括网页、社交媒体、数据库等,实现档案信息的全面收集。利用更先进的机器学习算法,对采集到的信息进行自动分类、标引和编目,提高档案资源建设的效率和准确性。在档案数字化处理中,AI 技术将进一步提升数字化的质量和速度。通过深度学习算法,实现对档案图像和文字的更精准识别和转换,提高数字化的准确率。利用 AI 技术对数字化后的档案进行智能修复和优化,恢复受损档案的内容,提高档案的可读性和可用性。 |
|||
|
|||
在档案开放利用方面,AI 技术将为用户提供更个性化、智能化的服务。通过对用户行为数据的分析和挖掘,AI 能够深入了解用户的需求和兴趣偏好,为用户提供定制化的档案推荐服务。当用户搜索档案时,AI 不仅能够根据关键词提供相关档案,还能根据用户的历史搜索记录和行为模式,推荐更符合用户需求的档案资源。AI 技术还将实现更智能的档案编研。通过自然语言处理和知识图谱技术,能够对档案内容进行深度分析和挖掘,发现档案之间的关联和潜在知识,为档案编研人员提供更丰富的素材和思路,提高编研成果的质量和深度。 |
|||
|
|||
在档案安全管理方面,AI 技术将发挥更重要的作用。利用 AI 技术实现对档案库房环境的实时监测和智能调控,确保档案保存环境的稳定和安全。通过对库房内温湿度、空气质量、光照等环境参数的实时监测,AI 系统能够自动调整空调、除湿机、通风设备等,保持适宜的保存环境。在档案数据安全方面,AI 技术将提供更强大的防护能力。通过机器学习算法,能够实时监测档案数据的访问和传输情况,及时发现和防范数据泄露、篡改等安全威胁。利用 AI 技术对档案数据进行加密和备份,确保数据的安全性和完整性。 |
|||
|
|||
#### 5.2.2 智能化与自动化的发展方向 |
|||
|
|||
随着 AI 技术的不断发展,档案管理将朝着更加智能化和自动化的方向发展。AI 将实现档案管理的自动化决策。通过对大量档案数据的分析和学习,AI 系统能够自动判断档案的价值、重要性和保存期限,为档案管理决策提供依据。在档案鉴定环节,AI 可以根据预设的标准和模型,自动评估档案的保存价值,决定哪些档案需要永久保存,哪些可以定期销毁,减少人工鉴定的主观性和工作量。 |
|||
|
|||
AI 还将实现档案管理的自主服务。通过智能客服和聊天机器人技术,用户可以与档案管理系统进行自然语言交互,获取所需的档案信息和服务。用户只需通过语音或文字提问,系统就能自动理解用户的需求,提供准确的答案和相关档案资源。档案管理系统还能根据用户的需求,自动生成档案报告、统计分析等,为用户提供更便捷、高效的服务。未来,档案管理将实现无人化管理。通过自动化设备和 AI 技术,实现档案的自动上架、下架、盘点等操作,减少人工干预,提高管理效率和准确性。利用机器人技术,实现档案库房的自动巡逻和安全检查,及时发现和处理安全隐患。 |
|||
|
|||
#### 5.2.3 跨领域合作与创新 |
|||
|
|||
档案管理将与其他领域展开更广泛的合作与创新,推动 AI 技术的应用和发展。与大数据、云计算等技术领域的合作将更加紧密。通过与大数据技术的结合,能够对海量的档案数据进行更深入的分析和挖掘,发现数据背后的潜在价值和规律,为档案管理决策提供更有力的数据支持。借助云计算技术,实现档案数据的分布式存储和计算,提高数据处理的效率和可靠性,降低档案管理的成本。 |
|||
|
|||
与文化、教育、科研等领域的合作也将不断加强。在文化领域,与博物馆、图书馆等文化机构合作,整合档案资源和文化资源,打造综合性的文化信息服务平台,为公众提供更丰富的文化体验。在教育领域,与学校合作,将档案资源作为教学素材,开展档案教育和研究,培养学生的历史文化素养和信息素养。在科研领域,与科研机构合作,利用档案数据开展学术研究,为科研工作提供数据支持和历史借鉴。通过跨领域合作,能够拓展档案管理的应用场景和服务范围,推动档案管理的创新发展,为社会提供更优质的档案信息服务。 |
|||
|
|||
## 六、结论与展望 |
|||
|
|||
### 6.1 研究总结 |
|||
|
|||
本研究深入探讨了 AI 赋能档案管理的相关内容。AI 技术,包括机器学习、深度学习、自然语言处理和计算机视觉等,为档案管理提供了强大的技术支持,使其在多个方面实现了创新和变革。 |
|||
|
|||
在应用场景方面,AI 在档案资源建设中实现了智能采集与整理以及高效的档案数字化处理;在档案开放利用中,助力档案开放审核、提供智能检索服务并辅助档案编研工作;在档案安全管理中,实现了库房安全的智能监控和数据安全与隐私的有效保护。通过多个实际案例分析,如范德比尔特电视新闻档案馆利用 AI 实现智能检索,海泰方圆在档案编研中应用自然语言处理技术等,充分展示了 AI 在档案管理各环节的应用效果和价值。 |
|||
|
|||
AI 赋能档案管理具有显著优势。它极大地提高了管理效率,在档案分类、检索和审核等工作中,节省了大量的人力和时间成本,提高了工作的准确性。通过精准检索和个性化服务,提升了档案服务质量,满足了用户的多元化需求。AI 技术还能够深入挖掘档案数据的价值,为决策提供有力支持,在城市规划、企业运营和科研等领域发挥了重要作用。 |
|||
|
|||
AI 在档案管理中的应用也面临诸多挑战。数据质量问题,如数据格式不统一、质量参差不齐,影响了 AI 算法的训练和模型的准确性;技术适应性与安全性方面,不同类型档案数据对 AI 技术的适应性要求高,同时保障档案信息安全和隐私至关重要;伦理与法律法规问题,包括数据使用的合法性、算法偏见以及算法的透明度和可解释性等;人才短缺问题,传统档案管理人员难以满足 AI 时代对综合技能的要求。针对这些挑战,本研究提出了相应的应对策略,包括建立完善的数据质量管理机制、加大技术研发与应用力度、加强人才培养与团队建设以及制定伦理与法律规范等。 |
|||
|
|||
### 6.2 未来展望 |
|||
|
|||
未来,AI 在档案管理领域将展现出更广阔的发展前景。AI 技术与档案管理的融合将更加深入,贯穿档案管理的全流程。在档案资源建设中,实现更智能化的采集和整理,提升数字化处理的质量和速度;在档案开放利用中,提供更个性化、智能化的服务,实现更智能的档案编研;在档案安全管理中,发挥更重要的作用,保障档案实体和数据的安全。 |
|||
|
|||
档案管理将朝着智能化与自动化的方向加速发展。AI 将实现档案管理的自动化决策,如自动判断档案的价值、重要性和保存期限;实现档案管理的自主服务,通过智能客服和聊天机器人为用户提供便捷的服务;甚至实现无人化管理,借助自动化设备和机器人完成档案的日常管理工作。 |
|||
|
|||
跨领域合作与创新将成为档案管理发展的重要趋势。与大数据、云计算等技术领域的紧密合作,将为档案管理提供更强大的数据处理和分析能力;与文化、教育、科研等领域的合作,将拓展档案管理的应用场景和服务范围,推动档案管理的创新发展,为社会提供更优质的档案信息服务。为了充分发挥 AI 在档案管理中的优势,我们需要持续关注技术发展动态,积极应对各种挑战,不断探索和创新,推动档案管理行业向更高水平迈进。`, |
|||
loading: false, |
|||
intervalId: null |
|||
} |
|||
}, |
|||
computed: { |
|||
...mapGetters([ |
|||
'user' |
|||
]) |
|||
}, |
|||
created() { |
|||
}, |
|||
methods: { |
|||
previewFiles() { |
|||
const files = this.$refs.file.files |
|||
this.selectedFiles = [] |
|||
for (let i = 0; i < files.length; i++) { |
|||
this.selectedFiles.push(files[i]) |
|||
} |
|||
}, |
|||
handleAIEditing() { |
|||
if (this.selectedFiles.length === 0) { |
|||
this.$message({ message: '请上传要编研的文件', type: 'error', offset: 8 }) |
|||
return |
|||
} |
|||
|
|||
if (this.textarea === '') { |
|||
this.$message({ message: '请输入提问要求', type: 'error', offset: 8 }) |
|||
return |
|||
} |
|||
|
|||
this.loading = true |
|||
this.editorContent = '' |
|||
const lines = this.mockResponse.split('\n') |
|||
let index = 0 |
|||
|
|||
this.intervalId = setInterval(() => { |
|||
if (index < lines.length) { |
|||
this.editorContent += (index > 0 ? '\n' : '') + lines[index] |
|||
index++ |
|||
} else { |
|||
clearInterval(this.intervalId) |
|||
this.loading = false |
|||
} |
|||
|
|||
// this.$nextTick(() => { |
|||
// const container = this.$refs.typingContainer.$el.querySelector('.markdown-body') |
|||
// if (container) { |
|||
// container.scrollTop = container.scrollHeight |
|||
// } |
|||
// }) |
|||
}, 200) // 每500毫秒添加一行 |
|||
}, |
|||
handleCloseForm() { |
|||
this.selectedFiles = [] |
|||
this.textarea = '' |
|||
this.editorContent = '' |
|||
this.formVisible = false |
|||
clearInterval(this.intervalId) |
|||
this.loading = false |
|||
}, |
|||
handleComfiredEditing() { |
|||
this.handleCloseForm() |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.editingDialog{ |
|||
::v-deep .el-dialog{ |
|||
width: 1000px; |
|||
} |
|||
} |
|||
::v-deep .markdown-body{ |
|||
height: 500px !important; |
|||
overflow-y: auto; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,614 @@ |
|||
<template> |
|||
<div class="app-container tab-container" style="height: calc(100vh - 140px);"> |
|||
<div class="head-container" style="display: flex; justify-content: space-between; align-items: center; padding-bottom: 20px;"> |
|||
<!-- <div class="head-search" style="margin-bottom: 0;"> |
|||
<el-input |
|||
v-model="keyWord" |
|||
size="small" |
|||
clearable |
|||
placeholder="输入关键字可模糊检索" |
|||
style="width: 245px;" |
|||
class="filter-item" |
|||
@clear="crud.toQuery" |
|||
@keyup.enter.native="crud.toQuery" |
|||
/> |
|||
<date-range-picker v-model="blurryTime" class="date-item" /> |
|||
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="crud.toQuery">搜索</el-button> |
|||
<el-button class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button> |
|||
<el-checkbox v-model="participants" style="line-height: 32px; padding-left: 10px;" @change="changeMy">我参与得编研</el-checkbox> |
|||
</div> --> |
|||
<crudOperation> |
|||
<template v-slot:left> |
|||
<el-button size="mini" @click="toAdd(1,null)"> |
|||
<i class="iconfont icon-xinzeng" /> |
|||
新增 |
|||
</el-button> |
|||
<!-- <el-button size="mini" :disabled="crud.selections.length === 0" @click="toAdd(2,crud.selections[0])"> |
|||
<i class="iconfont icon-bianji" /> |
|||
编辑 |
|||
</el-button> --> |
|||
</template> |
|||
<!-- <template v-slot:right> |
|||
<el-button size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)"> |
|||
<i class="iconfont icon-shanchu" /> |
|||
删除 |
|||
</el-button> |
|||
</template> --> |
|||
</crudOperation> |
|||
</div> |
|||
<el-table |
|||
ref="table" |
|||
v-loading="crud.loading" |
|||
:data="crud.data" |
|||
row-key="id" |
|||
style="width: 100%;" |
|||
height="calc(100vh - 330px)" |
|||
@row-click="clickRowHandler" |
|||
@cell-dblclick="tableDoubleClick" |
|||
@selection-change="crud.selectionChangeHandler" |
|||
> |
|||
<el-table-column type="selection" :reserve-selection="true" width="55" align="center" /> |
|||
<el-table-column prop="title" label="编研主题" /> |
|||
<el-table-column prop="researchType" label="编研类型" align="center" /> |
|||
<el-table-column prop="editor1" label="主编人" align="center" /> |
|||
<el-table-column prop="editor2" label="其他编研人员" align="center" /> |
|||
<el-table-column prop="startTime" label="开始时间" width="200"> |
|||
<template slot-scope="scope"> |
|||
<div>{{ scope.row.startTime | parseTime }}</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="endTime" label="结束时间" width="200"> |
|||
<template slot-scope="scope"> |
|||
<div>{{ scope.row.endTime | parseTime }}</div> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<pagination v-if="crud.data.length !== 0" /> |
|||
<aiForm ref="aiForm" /> |
|||
|
|||
<el-dialog class="detail-dialog" title="AI编研详情" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="onlineEditDetail" :before-close="handleCloseDialog"> |
|||
<div class="setting-dialog"> |
|||
<div class="detail-tab tab-content"> |
|||
<!-- tab --> |
|||
<ul class="tab-nav"> |
|||
<li :class="{'active-tab-nav': onlineTabIndex == 0}" @click="changeOnlineTab(0)">AI编研正文</li> |
|||
<li :class="{'active-tab-nav': onlineTabIndex == 1}" @click="changeOnlineTab(1)">AI文档附件</li> |
|||
</ul> |
|||
<div v-if="onlineTabIndex===0" style="width: 100%; height: 500px; overflow: hidden; overflow-y: scroll;"> |
|||
<!-- <p>文档名称:{{ onlineContent && onlineContent.title }}</p> --> |
|||
<!-- <div class="context-wrapper" v-html="onlineContent" /> --> |
|||
<mavon-editor |
|||
class="md" |
|||
:value="onlineContent" |
|||
:subfield="false" |
|||
:default-open="'preview'" |
|||
:toolbars-flag="false" |
|||
:editable="false" |
|||
:scroll-style="true" |
|||
:ishljs="true" |
|||
/> |
|||
</div> |
|||
<el-table |
|||
v-if="onlineTabIndex===1" |
|||
ref="table" |
|||
:data="detailArcData" |
|||
row-key="id" |
|||
style="width: 100%;" |
|||
height="calc(100vh - 560px)" |
|||
> |
|||
<el-table-column type="index" label="序号" align="center" width="55" /> |
|||
<el-table-column prop="fileName" label="附件名称" /> |
|||
<el-table-column prop="fileType" label="格式" align="center" min-width="60"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.fileType === 'jpg' || scope.row.fileType === 'jpeg' || scope.row.fileType === 'png' || scope.row.fileType === 'bmp'|| scope.row.fileType === 'gif'"> |
|||
<i class="fileIcon icon-image" /> |
|||
</div> |
|||
<div v-else-if="scope.row.fileType === 'xlsx' || scope.row.fileType === 'xls'"> |
|||
<i class="fileIcon icon-excel" /> |
|||
</div> |
|||
<div v-else-if="scope.row.fileType === 'docx' || scope.row.fileType === 'doc'"> |
|||
<i class="fileIcon icon-word" /> |
|||
</div> |
|||
<div v-else-if="scope.row.fileType === 'pdf'"> |
|||
<i class="fileIcon icon-pdf" /> |
|||
</div> |
|||
<div v-else-if="scope.row.fileType === 'ppt' || scope.row.fileType === 'pptx'"> |
|||
<i class="fileIcon icon-ppt" /> |
|||
</div> |
|||
<div v-else-if="scope.row.fileType === 'zip' || scope.row.fileType === 'rar'"> |
|||
<i class="fileIcon icon-zip" /> |
|||
</div> |
|||
<div v-else-if="scope.row.fileType === 'txt'"> |
|||
<i class="fileIcon icon-txt" /> |
|||
</div> |
|||
<div v-else> |
|||
<i class="fileIcon icon-other" /> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="fileSize" label="大小"> |
|||
<template slot-scope="scope"> |
|||
{{ getFileSize(scope.row.fileSize) }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="create_by" label="操作者" /> |
|||
<el-table-column prop="create_time" label="加入时间"> |
|||
<template slot-scope="scope"> |
|||
<div>{{ scope.row.create_time | parseTime }}</div> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
</div> |
|||
</div> |
|||
</el-dialog> |
|||
<!-- <eForm ref="eform" @refresh="initData" /> --> |
|||
<!-- <EditingDetail ref="editingDetail" :current-research="currentResearch" /> --> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import CRUD, { presenter, crud } from '@crud/crud' |
|||
import crudEditing from '@/api/archiveUtilize/archiveEditing' |
|||
import pagination from '@crud/Pagination' |
|||
// import DateRangePicker from '@/components/DateRangePicker' |
|||
import crudOperation from '@crud/CRUD.operation' |
|||
// import eForm from '../../archiveUtilize/archiveEditing/form.vue' |
|||
import aiForm from './aiForm' |
|||
// import EditingDetail from './module/detail' |
|||
import { mapGetters } from 'vuex' |
|||
|
|||
export default { |
|||
name: 'AIIntelligentCoding', |
|||
components: { pagination, crudOperation, aiForm }, |
|||
mixins: [presenter(), crud()], |
|||
cruds() { |
|||
return CRUD({ |
|||
url: 'api/archivesUtilize/initResearchList', |
|||
title: '档案编研', |
|||
crudMethod: { ...crudEditing }, |
|||
optShow: { |
|||
add: false, |
|||
edit: false, |
|||
del: false, |
|||
download: false, |
|||
reset: false, |
|||
group: false |
|||
} |
|||
}) |
|||
}, |
|||
props: { |
|||
activeIndex: { |
|||
type: Number, |
|||
default: 0 |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
permission: { |
|||
add: ['admin', 'archiveEditing:add'], |
|||
edit: ['admin', 'archiveEditing:edit'], |
|||
del: ['admin', 'archiveEditing:del'] |
|||
}, |
|||
keyWord: null, |
|||
blurryTime: null, |
|||
participants: false, |
|||
currentResearch: null, |
|||
onlineEditDetail: false, |
|||
onlineTabIndex: 0, |
|||
onlineContent: null, |
|||
uploadVisible: false, |
|||
fileList: [], |
|||
detailArcData: [], |
|||
currentResearchOnline: null |
|||
} |
|||
}, |
|||
computed: { |
|||
...mapGetters([ |
|||
'user' |
|||
]) |
|||
}, |
|||
mounted() { |
|||
}, |
|||
methods: { |
|||
initData() { |
|||
this.crud.refresh() |
|||
this.crud.selections = [] |
|||
this.$refs.table.clearSelection() |
|||
}, |
|||
resetQuery() { |
|||
this.blurryTime = [] |
|||
this.crud.query.startTime = null |
|||
this.crud.query.endTime = null |
|||
this.crud.toQuery() |
|||
}, |
|||
[CRUD.HOOK.beforeRefresh]() { |
|||
this.crud.query.search = this.keyWord |
|||
if (this.participants) { |
|||
this.crud.query.participants = this.user.username |
|||
} else { |
|||
this.crud.query.participants = '' |
|||
} |
|||
if (this.blurryTime) { |
|||
this.crud.query.startTime = this.blurryTime[0] |
|||
this.crud.query.endTime = this.blurryTime[1] |
|||
} else { |
|||
this.crud.query.startTime = null |
|||
this.crud.query.endTime = null |
|||
} |
|||
}, |
|||
toAdd(type, row) { |
|||
if (type === 1) { |
|||
this.$refs.aiForm.formTitle = '新增AI编研' |
|||
} else { |
|||
this.$refs.aiForm.formTitle = '新增AI编研' |
|||
this.$refs.aiForm.form = { |
|||
'id': row.id, |
|||
'title': row.title, |
|||
'editor1': row.editor1, |
|||
'editor2': row.editor2, |
|||
'researchType': row.researchType, |
|||
'startTime': row.startTime, |
|||
'endTime': row.endTime, |
|||
'remarks': row.remarks |
|||
} |
|||
if (row.editor1) { |
|||
var usernames = row.editor1.split(',') |
|||
var matchedItems = [] |
|||
for (var i = 0; i < this.$refs.aiForm.userTable.length; i++) { |
|||
if (usernames.includes(this.$refs.aiForm.userTable[i].username)) { |
|||
matchedItems.push(this.$refs.aiForm.userTable[i]) |
|||
} |
|||
} |
|||
this.$refs.aiForm.userMainSelected = matchedItems |
|||
} |
|||
|
|||
if (row.editor2) { |
|||
var usernames2 = row.editor2.split(',') |
|||
var matchedItems2 = [] |
|||
for (var j = 0; j < this.$refs.aiForm.userTable.length; j++) { |
|||
if (usernames2.includes(this.$refs.aiForm.userTable[j].username)) { |
|||
matchedItems2.push(this.$refs.aiForm.userTable[j]) |
|||
} |
|||
} |
|||
this.$refs.aiForm.userOtherSelected = matchedItems2 |
|||
} |
|||
} |
|||
this.$refs.aiForm.formType = type |
|||
this.$refs.aiForm.formVisible = true |
|||
}, |
|||
toDelete(data) { |
|||
this.$confirm('此操作将删除当前所选编研主题' + '<span>你是否还要继续?</span>', '提示', { |
|||
confirmButtonText: '继续', |
|||
cancelButtonText: '取消', |
|||
type: 'warning', |
|||
dangerouslyUseHTMLString: true |
|||
}).then(() => { |
|||
const ids = data.map(item => item.id) |
|||
const params = { |
|||
'ids': ids, |
|||
'operator': this.user.username |
|||
} |
|||
crudEditing.del(params).then((res) => { |
|||
console.log(res) |
|||
if (res.code !== 500) { |
|||
this.$message({ message: '删除成功', type: 'success', offset: 8 }) |
|||
} else { |
|||
this.$message({ message: res.message, type: 'error', offset: 8 }) |
|||
} |
|||
this.initData() |
|||
}).catch(err => { |
|||
console.log(err) |
|||
}) |
|||
}).catch(() => { |
|||
}) |
|||
}, |
|||
clickRowHandler(row) { |
|||
this.$refs.table.toggleRowSelection(row) |
|||
}, |
|||
// tableDoubleClick(row) { |
|||
// // this.currentResearch = row |
|||
// // this.$refs.editingDetail.archivesTabIndex = 0 |
|||
// // this.$refs.editingDetail.getDetail(row) |
|||
// // this.$refs.editingDetail.editingDetailVisible = true |
|||
// }, |
|||
tableDoubleClick(row) { |
|||
this.onlineTabIndex = 0 |
|||
this.currentResearchOnline = row |
|||
this.onlineEditDetail = true |
|||
this.onlineContent = `## 一、引言 |
|||
|
|||
### 1.1 研究背景与意义 |
|||
|
|||
随着科技的飞速发展,人工智能(AI)技术已逐渐渗透到各个行业,成为推动创新和发展的重要力量。AI 技术以其强大的数据分析、模式识别和自动化处理能力,正在重塑许多传统行业的运作方式。在档案管理领域,传统的管理模式面临着诸多挑战,如档案数量的快速增长、信息检索的效率低下、档案利用的局限性等。将 AI 技术引入档案管理,为解决这些问题提供了新的思路和方法。 |
|||
|
|||
传统档案管理主要依赖人工操作,从档案的收集、整理、分类到存储和检索,都需要大量的人力和时间。这种方式不仅效率低下,而且容易出现人为错误。随着数字化时代的到来,电子档案的数量呈爆炸式增长,传统的管理方式越发难以应对。AI 技术的出现,为档案管理带来了新的机遇。它能够自动处理大量的档案数据,实现档案的智能分类、快速检索和精准推荐,大大提高了档案管理的效率和准确性。 |
|||
|
|||
AI 赋能档案管理具有重要的现实意义。它可以显著提升档案管理的效率。通过自动化的分类和索引,AI 能够快速处理海量的档案信息,使档案管理人员从繁琐的重复性工作中解放出来,将更多的精力投入到更有价值的工作中。AI 技术可以实现档案的精准检索和智能推荐,提高档案的利用效率,更好地满足用户的需求。这有助于充分挖掘档案的价值,为决策提供更有力的支持。 |
|||
|
|||
AI 技术的应用还将推动档案管理行业的变革。它促使档案管理从传统的人工模式向智能化、数字化模式转变,引领行业进入一个新的发展阶段。这种变革不仅有助于提升档案管理机构的竞争力,也为整个社会的信息资源管理和利用带来了新的契机。通过 AI 技术,档案管理机构可以更好地整合和利用档案资源,为社会提供更优质的信息服务。 |
|||
|
|||
### 1.2 研究方法与创新点 |
|||
|
|||
本研究采用了多种研究方法,以确保研究的全面性和深入性。通过广泛收集和分析国内外相关文献,了解 AI 技术在档案管理领域的研究现状、应用进展和发展趋势,为研究提供理论基础和参考依据。对国内外多个档案管理机构应用 AI 技术的实际案例进行深入分析,总结其成功经验和存在的问题,探索 AI 技术在档案管理中的最佳应用模式。还与档案管理领域的专家、从业人员进行交流和访谈,获取他们对 AI 技术应用的看法和建议,进一步丰富研究内容。 |
|||
|
|||
本研究的创新点在于从多个维度对 AI 赋能档案管理进行分析。不仅关注 AI 技术在档案管理中的应用效果,还深入探讨其对档案管理流程、组织架构和服务模式的影响。结合实际案例,对 AI 技术在不同类型档案管理中的应用进行详细分析,为档案管理机构提供具有针对性的实践指导。此外,本研究还前瞻性地探讨了 AI 技术在档案管理中的未来发展趋势,为行业的长远发展提供参考。 |
|||
|
|||
## 二、AI 赋能档案管理的技术基础 |
|||
|
|||
### 2.1 AI 技术概述 |
|||
|
|||
AI 技术是一门综合性的技术领域,旨在让计算机系统模拟人类的智能行为,实现对复杂问题的理解、推理、学习和决策。它涵盖了多个子领域,其中机器学习、深度学习、自然语言处理、计算机视觉等技术在档案管理中具有重要的应用价值。 |
|||
|
|||
机器学习是 AI 的核心技术之一,它通过让计算机从大量的数据中学习模式和规律,从而实现对未知数据的预测和决策。机器学习主要分为监督学习、无监督学习和强化学习。监督学习使用标记好的数据进行训练,模型通过学习数据中的特征和标签之间的关系,来预测新数据的标签。在档案分类中,可以使用监督学习算法,将已分类的档案作为训练数据,让模型学习不同类别档案的特征,从而对新的档案进行自动分类。无监督学习则处理未标记的数据,通过聚类、降维等方法发现数据中的内在结构和模式。在档案管理中,无监督学习可以用于对档案进行主题建模,发现档案中的潜在主题,帮助用户更好地理解档案内容。强化学习通过智能体与环境的交互,根据环境反馈的奖励信号来学习最优策略。在档案检索中,强化学习可以根据用户的反馈,不断优化检索策略,提高检索结果的准确性。 |
|||
|
|||
深度学习是机器学习的一个分支,它基于深度神经网络,通过构建多层神经元来自动学习数据的高级特征。深度学习在图像识别、语音识别、自然语言处理等领域取得了显著的成果。在档案管理中,深度学习可以用于图像识别,如对档案中的图像进行文字识别、图像分类等;也可以用于语音识别,将档案中的语音内容转换为文本,方便进行检索和管理。 |
|||
|
|||
自然语言处理致力于让计算机理解和处理人类语言。它包括文本分类、情感分析、机器翻译、问答系统等多个任务。在档案管理中,自然语言处理可以用于对档案文本进行关键词提取、摘要生成,帮助用户快速了解档案内容;还可以用于构建智能问答系统,用户可以通过自然语言提问,获取所需的档案信息。 |
|||
|
|||
计算机视觉主要研究如何让计算机理解和解释图像和视频信息。它包括图像识别、目标检测、图像分割等技术。在档案管理中,计算机视觉可以用于对档案图像进行数字化处理,如去噪、增强、修复等,提高图像的质量和可读性;还可以用于对档案中的图像进行内容分析,识别图像中的人物、场景等信息,为档案的分类和检索提供支持。 |
|||
|
|||
这些 AI 技术在档案管理中具有很强的适用性。档案管理涉及大量的数据处理和信息分析工作,传统的人工方式效率低下且容易出错。AI 技术的自动化和智能化特点,可以有效地提高档案管理的效率和准确性。通过机器学习和深度学习算法,可以实现档案的自动分类、检索和推荐,大大节省了人力和时间成本;自然语言处理和计算机视觉技术,可以让计算机更好地理解和处理档案中的文本和图像信息,为用户提供更加便捷和智能的服务。 |
|||
|
|||
### 2.2 与档案管理相关的 AI 技术应用 |
|||
|
|||
#### 图像识别技术在档案数字化中的应用 |
|||
|
|||
图像识别技术在档案数字化过程中发挥着关键作用。在纸质档案数字化时,通过高精度扫描仪将纸质档案转化为数字图像后,图像识别技术可对这些图像进行处理。如在某大型企业的档案数字化项目中,利用先进的卷积神经网络(CNN)算法,能准确识别档案图像中的文字、图表等元素。该技术可自动去除图像中的噪声、划痕,校正图像的倾斜角度,增强文字的清晰度,极大提高了图像质量,为后续的文字识别和信息提取奠定了良好基础。通过图像识别技术实现自动边界检测与切割,能准确识别文档的边缘,截取文件中的文字区域,过滤掉空白边缘或杂物,避免误识别和多余信息干扰,提高了识别效率和准确性。在处理包含多个内容区域的文档,如表格、多栏文本等时,算法还能准确识别并分别处理每个区域,通过布局分析识别图像中的文本区域、非文本区域以及文本的结构信息,如列、行、块、标题、段落、表格等,有效提升了复杂档案图像的处理能力。 |
|||
|
|||
#### 语音识别技术在档案检索中的应用 |
|||
|
|||
语音识别技术为档案检索带来了新的便利。在一些档案管理系统中,用户只需说出检索关键词,系统就能快速定位到相关档案。以某政府档案管理部门为例,其引入了基于深度学习的语音识别技术,该技术采用了循环神经网络(RNN)及其变体长短时记忆网络(LSTM),能够有效处理语音中的时序信息,准确识别各种口音和语速的语音指令。用户在检索档案时,无需手动输入关键词,直接通过语音提问,系统即可将语音转换为文本,并在档案数据库中进行检索,迅速返回相关档案信息。这一应用不仅提高了检索效率,还降低了用户的操作门槛,特别适用于不熟悉键盘输入或需要快速获取信息的用户,提升了档案服务的便捷性和用户体验。 |
|||
|
|||
#### 自然语言处理技术在档案内容分析中的应用 |
|||
|
|||
自然语言处理技术在档案内容分析方面具有重要价值。它可以对档案文本进行深度挖掘和分析,实现关键词提取、主题建模、情感分析等功能。在某高校的科研档案管理中,利用自然语言处理技术对科研成果档案进行关键词提取,能够准确提炼出档案中的核心概念和关键信息,方便用户快速了解档案内容。通过主题建模,可将大量的科研档案按照不同的研究主题进行分类和归纳,帮助科研人员快速找到相关领域的研究资料。自然语言处理技术还能对档案中的文本进行情感分析,了解科研人员对特定研究方向或项目的态度和情感倾向,为科研管理和决策提供有价值的参考。 |
|||
|
|||
## 三、AI 在档案管理中的应用场景与案例分析 |
|||
|
|||
### 3.1 档案资源建设 |
|||
|
|||
#### 3.1.1 智能采集与整理 |
|||
|
|||
在档案资源建设过程中,智能采集与整理是重要的基础环节。以某大型综合性档案馆为例,该馆负责收集和整理大量的历史文献、政府文件、企业资料等各类档案。随着信息时代的发展,档案来源日益广泛,包括各类网站、数据库、社交媒体等,传统的人工采集和整理方式难以满足需求。为此,该档案馆引入了 AI 技术,利用智能采集工具从网页爬取信息,并结合自然语言处理和机器学习算法,对采集到的信息进行自动分类和整理。 |
|||
|
|||
通过配置专门的网络爬虫程序,档案馆能够按照设定的规则,自动从指定的网站和数据库中获取相关的档案信息。在采集过程中,利用自然语言处理技术对网页内容进行分析,提取关键信息,如文件标题、发布时间、作者、主题等,并自动生成元数据。机器学习算法则用于对档案信息进行分类,根据已有的分类标准和训练数据,将新采集到的档案信息自动归类到相应的类别中,如历史文献类、政策法规类、企业档案类等。这一过程大大提高了档案采集的效率和准确性,每天能够处理数千条信息,相比传统人工采集方式,效率提升了数倍。同时,通过自动分类和整理,减少了人工分类的主观性和误差,提高了档案资源的质量和可用性。 |
|||
|
|||
#### 3.1.2 档案数字化处理 |
|||
|
|||
档案数字化是档案管理现代化的关键步骤,AI 技术在这一过程中发挥了重要作用。北京中烟创新科技有限公司推出的数字档案管理系统,充分展示了 AI 在档案数字化处理中的应用。该系统利用先进的 OCR(光学字符识别)技术,能够高效、准确地识别并转换纸质档案中的文字、图像等信息为数字格式。在处理大量纸质档案时,OCR 技术可快速将纸质文件转化为可编辑的电子文本,大大减少了人工录入成本,提高了数字化转换效率。 |
|||
|
|||
在对档案进行数字化处理后,还需要对电子档案的 “四性”,即真实性、完整性、可用性和安全性进行检测。中烟创新数字档案管理系统通过数字签名、访问记录等技术确保文件的真实性和可信度,防止文件被篡改或伪造;通过记录和管理文件的版本和修改历史,确保文件的完整性和版本的追溯性;通过提供随时随地的网络访问功能,提高了档案信息的可用性和可访问性;通过访问控制、权限管理、加密传输等安全机制,保护档案信息不被未授权人员访问或泄露,确保档案数据的安全性。这些功能的实现,离不开 AI 技术的支持,如利用人工智能算法对数字签名进行验证,通过机器学习模型对文件的完整性进行评估,利用加密算法保障数据传输和存储的安全等。通过 AI 技术的应用,中烟创新数字档案管理系统实现了档案数字化处理的高效性、准确性和安全性,为企业的档案管理提供了有力支持。 |
|||
|
|||
### 3.2 档案开放利用 |
|||
|
|||
#### 3.2.1 档案开放审核 |
|||
|
|||
档案开放审核是保障档案信息安全、合理利用的重要环节。某综合档案馆在档案开放审核工作中,应用了海泰智能档案开放系统,借助 AI 技术优化审核流程,提升审核效率。该系统利用自然语言处理的文本向量化、文本分类、关键信息提取、文本摘要、文本纠错等技术建立档案开放审核模型。通过对大量已审核档案数据的学习和训练,模型能够自动分析新档案的内容,提取关键信息,判断档案是否符合开放条件,并给出开放审核建议。 |
|||
|
|||
在实际应用中,档案管理人员只需将待审核的档案录入系统,系统即可快速进行分析处理。对于一些内容较为简单、明显符合开放条件的档案,系统能够直接给出开放建议,大大缩短了审核时间。对于复杂的档案,系统提供的分析结果和建议也能帮助档案鉴定人员更高效地开展审核工作。据统计,引入该系统后,该档案馆的档案开放审核效率提升了 50% 以上,有效加快了档案开放的进程,使更多的档案资源能够及时为社会公众所用。同时,通过 AI 技术的辅助,审核的准确性也得到了提高,减少了因人工判断失误导致的档案开放不当问题。 |
|||
|
|||
#### 3.2.2 档案智能检索 |
|||
|
|||
档案智能检索是提高档案利用效率的关键。范德比尔特电视新闻档案馆在档案管理中,充分利用 AI 技术实现了智能检索功能。该档案馆自 1968 年以来,致力于记录和保存美国国家电视网的新闻,拥有海量的视频新闻档案。随着档案数量的不断增加,传统的检索方式难以满足用户快速、准确获取信息的需求。为此,档案馆引入了自动语音识别(ASR)和命名实体识别(NER)等 AI 技术。 |
|||
|
|||
首先,利用 ASR 技术为新闻播报生成转录文本,将视频中的语音内容转化为文字,形成可检索的文本数据库。接着,通过 NER 技术从转录文本中提取命名实体,如人名、地名、组织机构名等,并自动生成新闻标题。这些技术的应用,使得用户可以通过输入自然语言关键词,如 “2020 年美国总统大选相关新闻”,系统就能快速定位到相关的新闻档案,大大提高了检索的准确性和效率。与传统的基于关键词匹配的检索方式相比,智能检索能够理解用户的语义需求,提供更精准的检索结果,满足了研究人员、媒体工作者等不同用户对档案信息的多样化需求。 |
|||
|
|||
#### 3.2.3 辅助档案编研 |
|||
|
|||
档案编研是对档案信息进行深度加工和开发利用的重要工作,AI 技术在这一领域也发挥着重要作用。海泰方圆在某军工企业的档案管理应用中,利用自然语言处理技术服务于档案编研工作。在编研素材的收集阶段,自然语言处理技术通过智能检索引擎能够迅速、准确地定位到与编研主题高度相关的档案,极大提高检索的效率和准确性。例如,当编研人员确定了 “某型号武器装备研发历程” 的编研主题后,系统能够根据主题关键词,在海量的档案库中快速筛选出相关的研发报告、试验记录、技术文档等档案资料。 |
|||
|
|||
通过文本挖掘技术,海泰方圆深入挖掘档案中隐含信息,揭示档案之间的内在联系和规律。通过对档案内容的语义分析,发现不同档案之间的关联,如人物关系、事件关联等,为编研人员提供更全面的信息视角。利用知识图谱技术,构建档案知识网络,将档案中的各种信息以图形化的方式展示出来,使编研人员能够直观地了解档案之间的关联性和层次性,为编写高质量的编研成果提供有力支持。通过 AI 技术的应用,该军工企业的档案编研工作效率得到了显著提升,编研成果的质量和深度也得到了提高,为企业的技术研发、经验总结和历史传承提供了重要的参考依据。 |
|||
|
|||
### 3.3 档案安全管理 |
|||
|
|||
#### 3.3.1 库房安全管理 |
|||
|
|||
档案库房的安全管理是档案管理工作的重要保障。江苏省太仓市智慧档案馆将 AI 技术应用于库房安全管理,实现了对库房环境的实时监控和智能安防。该档案馆利用物联网技术,在库房内布置了大量的传感器,如温湿度传感器、烟雾传感器、门禁传感器等,实时采集库房的环境数据和设备状态信息。AI 智能管理系统对这些感知数据进行分析处理,根据预设的规则和阈值,判断库房环境是否正常,设备是否运行良好。 |
|||
|
|||
当库房内的温湿度超出适宜范围时,系统会自动发出警报,并联动空调、除湿机等设备进行调节,确保档案保存环境的稳定。在安防方面,利用人脸识别、视频监控等 AI 技术,对进入库房的人员进行身份识别和行为监测。只有通过授权的人员才能进入库房,并且系统会实时记录人员的进出时间、行为轨迹等信息。一旦发现异常行为,如非法闯入、长时间逗留等,系统会立即触发警报,并通知安保人员进行处理。通过这些 AI 技术的应用,太仓市智慧档案馆实现了库房安全管理的智能化、自动化,有效提高了档案库房的安全性,保障了档案实体的安全。 |
|||
|
|||
#### 3.3.2 数据安全与隐私保护 |
|||
|
|||
在数字化时代,档案数据的安全与隐私保护至关重要。AI 技术在数据加密、访问控制等方面的应用,为档案数据安全提供了有力保障。在数据加密方面,利用 AI 算法生成高强度的加密密钥,对档案数据进行加密存储和传输。通过机器学习算法不断优化加密策略,提高加密的安全性和效率,防止数据被窃取或篡改。在访问控制方面,AI 技术可以根据用户的身份、权限和行为模式,实现智能的访问控制。通过对用户行为数据的分析,建立用户行为模型,实时监测用户的访问行为。当发现异常访问行为,如频繁尝试登录、大量下载敏感数据等,系统会自动进行拦截,并要求用户进行身份验证,确保只有授权用户能够访问相应的档案数据。 |
|||
|
|||
AI 技术还可以用于检测和防范网络攻击。通过对网络流量的实时监测和分析,利用机器学习算法识别潜在的攻击行为,如 DDoS 攻击、SQL 注入攻击等,并及时采取防护措施,保障档案管理系统的网络安全。在隐私保护方面,AI 技术可以对档案中的敏感信息进行自动识别和脱敏处理,如个人身份证号、银行卡号、医疗记录等,在保护用户隐私的同时,确保档案数据的可用性。通过这些 AI 技术的综合应用,有效地保障了档案数据的安全和用户的隐私,为档案管理的数字化转型提供了安全可靠的环境。 |
|||
|
|||
## 四、AI 赋能档案管理的优势与挑战 |
|||
|
|||
### 4.1 优势分析 |
|||
|
|||
#### 4.1.1 提高管理效率 |
|||
|
|||
AI 技术在档案管理的多个环节显著提高了管理效率。在档案分类环节,传统的人工分类方式需要档案管理人员逐份阅读档案内容,依据经验和既定规则进行分类,这一过程耗时费力,且容易因人为因素导致分类不准确。以某大型企业的档案管理为例,该企业每年产生的各类档案数量多达数十万份,包括合同档案、财务档案、人事档案等。在引入 AI 分类系统之前,档案管理人员需要花费大量时间进行分类工作,且分类错误率较高,这给后续的档案检索和利用带来了很大困难。引入基于机器学习算法的 AI 分类系统后,该系统通过对大量已分类档案数据的学习,能够自动识别档案的关键信息和特征,快速准确地将新的档案归入相应类别。经过实际应用,档案分类的效率提高了数倍,错误率也大幅降低,从原来的 10% 左右降低到了 2% 以内。 |
|||
|
|||
在档案检索方面,AI 技术同样展现出巨大优势。传统的检索方式主要依赖关键词匹配,当用户输入关键词时,系统在档案库中进行简单的文本匹配,这种方式往往无法准确理解用户的真实需求,导致检索结果不准确、不全面。某高校的图书馆档案管理系统,在采用 AI 智能检索技术之前,学生和教师在检索相关资料时,常常因为检索结果不理想而浪费大量时间。引入 AI 智能检索系统后,该系统利用自然语言处理技术,能够理解用户输入的自然语言问题,分析其语义和语境,从而在海量的档案中精准定位到用户所需信息。同时,通过建立知识图谱,系统可以挖掘档案之间的关联关系,为用户提供更全面、更相关的检索结果。据统计,采用 AI 智能检索技术后,检索效率提高了 50% 以上,用户对检索结果的满意度也从原来的 60% 提升到了 85% 以上。 |
|||
|
|||
在档案审核环节,AI 技术的应用也大大节省了人力和时间。如北京神舟航天软件技术股份有限公司申请的文书档案开放审核专利技术,通过获取待审核文书档案,利用机器学习和自然语言处理等技术识别个性化信息,并运用审查准则自动判断文书档案是否开放。在某政府部门的档案审核工作中,引入该技术后,原本需要人工花费数周时间才能完成的大量文书档案审核工作,现在通过自动化系统仅需几天甚至几小时就能完成,审核效率大幅提升,同时减少了人工判断的误判率,提高了审核的准确性。 |
|||
|
|||
#### 4.1.2 提升服务质量 |
|||
|
|||
AI 技术能够实现精准检索和个性化服务,从而有效提升档案服务质量,满足用户多元化需求。在精准检索方面,AI 技术通过自然语言处理和深度学习算法,能够理解用户的复杂查询意图,提供更准确的检索结果。以范德比尔特电视新闻档案馆为例,该馆利用自动语音识别(ASR)和命名实体识别(NER)技术,为新闻播报生成转录文本并提取命名实体,用户可以通过输入自然语言关键词,如 “2020 年美国总统大选相关新闻”,系统就能快速准确地定位到相关新闻档案,大大提高了检索的精准度。与传统的基于关键词匹配的检索方式相比,AI 精准检索能够理解语义,避免了因关键词匹配不准确而导致的漏检和误检问题,为用户节省了大量时间和精力。 |
|||
|
|||
在个性化服务方面,AI 技术可以根据用户的历史检索记录、浏览行为等数据,分析用户的兴趣偏好和需求特点,为用户提供个性化的档案推荐服务。某企业的档案管理系统通过 AI 技术,对用户的使用数据进行分析,当用户登录系统时,系统会根据用户的个性化需求,主动推荐相关的档案资源,如行业报告、市场分析资料等。这种个性化推荐服务不仅提高了用户获取所需信息的效率,还能帮助用户发现潜在的有价值信息,提升了用户对档案服务的满意度。同时,AI 技术还可以根据不同用户的身份和权限,提供差异化的服务,如为企业高管提供更高级别的决策支持信息,为普通员工提供与工作相关的基础档案资料,满足了不同用户的多元化需求。 |
|||
|
|||
#### 4.1.3 挖掘数据价值 |
|||
|
|||
AI 技术通过强大的数据分析能力,能够深入挖掘档案中的潜在价值,为决策提供有力支持。通过对档案数据的分析,AI 可以发现数据之间的关联和规律,揭示出隐藏在档案中的信息。某城市的规划部门对历年的城市建设档案进行分析,利用 AI 技术挖掘出城市发展过程中不同区域的功能演变、人口流动趋势以及基础设施建设需求等信息。通过对这些信息的分析,规划部门可以更好地制定城市未来的发展规划,合理布局基础设施,优化城市功能分区,为城市的可持续发展提供决策依据。 |
|||
|
|||
在企业领域,AI 技术对档案数据的分析也具有重要价值。某企业通过对历年销售档案、客户档案和市场档案的分析,利用 AI 技术预测市场趋势、客户需求和产品销售情况。通过对销售数据的时间序列分析和市场趋势预测,企业可以提前调整生产计划,优化产品库存,合理安排资源,提高企业的运营效率和市场竞争力。AI 还可以对客户档案进行分析,了解客户的购买行为和偏好,为企业的市场营销策略提供数据支持,实现精准营销,提高客户满意度和忠诚度。 |
|||
|
|||
在科研领域,AI 技术对档案数据的挖掘也为科研工作提供了新的思路和方法。某科研机构对大量的科研文献档案进行分析,利用 AI 技术发现不同研究领域之间的潜在联系和交叉点,为科研人员提供新的研究方向和创新点。通过对科研文献的主题建模和知识图谱构建,AI 可以帮助科研人员快速了解相关领域的研究现状和发展趋势,避免重复研究,提高科研效率。 |
|||
|
|||
### 4.2 挑战分析 |
|||
|
|||
#### 4.2.1 数据质量问题 |
|||
|
|||
档案数据来源多样,包括纸质档案数字化、电子文档、数据库导入、网络采集等,这导致数据格式不统一,如文本文件有.doc、.txt、.pdf 等多种格式,图像文件有.jpg、.png、.tif 等格式,不同格式的数据在处理和分析时需要不同的技术和工具,增加了数据处理的复杂性。档案数据还存在质量参差不齐的问题,如纸质档案数字化过程中可能出现文字模糊、图像变形、信息缺失等情况,电子文档可能存在数据错误、格式混乱、元数据不完整等问题。这些问题会影响 AI 算法的训练和模型的准确性,导致分类错误、检索结果不准确等问题。 |
|||
|
|||
为解决这些问题,需要建立完善的数据质量管理机制。在数据采集阶段,制定严格的数据采集标准和规范,确保采集的数据准确、完整、格式统一。在数据预处理阶段,采用数据清洗、去噪、修复等技术,对数据进行标准化处理,去除错误数据和噪声数据,补充缺失数据,提高数据质量。利用数据质量评估工具,定期对档案数据进行质量评估,及时发现和解决数据质量问题。通过建立数据质量管理体系,从数据的产生、采集、存储、处理到应用的全过程进行监控和管理,确保数据的质量和可靠性,为 AI 技术在档案管理中的应用提供坚实的数据基础。 |
|||
|
|||
#### 4.2.2 技术适应性与安全性 |
|||
|
|||
档案信息种类繁多,包括文本、图像、音频、视频等多种类型,每种类型的信息都有其独特的结构和特征,这对 AI 技术的适应性提出了很高的要求。不同类型的档案数据需要不同的 AI 算法和模型进行处理,如文本数据需要自然语言处理技术,图像数据需要计算机视觉技术,音频数据需要语音识别技术等。如何针对不同类型的档案数据选择合适的 AI 技术,并将这些技术有效地集成到档案管理系统中,是一个需要解决的问题。 |
|||
|
|||
档案信息包含大量的敏感信息,如个人隐私、商业机密、国家秘密等,保障档案信息的安全和隐私至关重要。AI 技术在处理和存储档案信息时,可能面临数据泄露、篡改、非法访问等安全风险。在数据传输过程中,可能被黑客截获和篡改;在数据存储过程中,可能因系统漏洞被非法访问。为保障档案信息安全,需要采用多种安全技术,如数据加密技术,对档案数据进行加密存储和传输,防止数据被窃取和篡改;访问控制技术,根据用户的身份和权限,对档案信息的访问进行严格控制,确保只有授权用户能够访问相应的档案信息;安全监测技术,实时监测档案管理系统的运行状态,及时发现和防范安全威胁。还需要建立健全安全管理制度,加强对档案管理人员和用户的安全培训,提高安全意识,确保档案信息的安全和隐私。 |
|||
|
|||
#### 4.2.3 伦理与法律法规问题 |
|||
|
|||
在 AI 应用中,数据使用的合法性和合规性是一个重要问题。档案数据的收集、存储、处理和共享需要遵循相关的法律法规,如个人信息保护法、数据安全法等。在收集和使用用户的个人档案数据时,需要获得用户的明确授权,确保数据使用的目的合法、正当,防止数据滥用和泄露。AI 算法可能存在偏见,这是由于训练数据的偏差或算法设计的缺陷导致的。在档案分类和检索中,如果算法存在偏见,可能会导致某些类型的档案被错误分类或检索不到,影响档案管理的公平性和准确性。算法的透明度和可解释性也是一个伦理问题,由于 AI 算法的复杂性,其决策过程往往难以理解,这使得用户难以信任算法的结果,在涉及重要决策时,如档案开放审核、机密档案处理等,算法的不可解释性可能会引发伦理争议。 |
|||
|
|||
为应对这些伦理和法律法规问题,需要加强法律法规建设,制定专门针对 AI 在档案管理中应用的法律法规,明确数据使用、算法开发和应用等方面的规则和责任。建立伦理审查机制,对 AI 系统的设计、开发和应用进行伦理审查,确保 AI 技术的应用符合伦理道德标准。提高 AI 算法的透明度和可解释性,通过技术手段和可视化方法,让用户能够理解算法的决策过程和依据,增强用户对 AI 系统的信任。加强对 AI 技术应用的监管,建立监管机构,对 AI 在档案管理中的应用进行监督和管理,确保其合法、合规、符合伦理要求。 |
|||
|
|||
#### 4.2.4 人才短缺问题 |
|||
|
|||
AI 时代对档案管理人员的技能提出了新的挑战。传统的档案管理人员主要具备档案管理的专业知识和技能,如档案整理、分类、保管等,而在 AI 赋能的档案管理环境下,档案管理人员需要掌握 AI 技术相关的知识和技能,如机器学习、自然语言处理、数据分析等,以便能够有效地运用 AI 技术进行档案管理工作。他们还需要具备一定的信息技术素养,能够熟练使用档案管理系统和相关软件工具。目前,具备这些综合技能的档案管理人才相对短缺,这限制了 AI 技术在档案管理中的广泛应用和深入发展。 |
|||
|
|||
为解决人才短缺问题,需要加强人才培养。在高校教育中,优化档案管理相关专业的课程设置,增加 AI 技术、信息技术等相关课程,培养具备跨学科知识和技能的专业人才。开展在职培训,针对现有的档案管理人员,提供定期的 AI 技术培训和继续教育课程,帮助他们更新知识结构,提升技能水平。鼓励档案管理机构与科研机构、高校等合作,建立人才培养基地,共同培养适应 AI 时代需求的档案管理人才。还可以通过引进外部人才,吸引具有 AI 技术背景和经验的专业人才加入档案管理队伍,提高档案管理团队的整体素质和能力。 |
|||
|
|||
## 五、应对策略与未来发展趋势 |
|||
|
|||
### 5.1 应对策略 |
|||
|
|||
#### 5.1.1 数据质量管理 |
|||
|
|||
建立完善的数据质量管理机制是确保档案数据质量和一致性的关键。在数据采集环节,制定严格的数据采集标准和规范,明确数据的来源、格式、内容要求等,确保采集到的数据准确、完整、格式统一。对于纸质档案数字化,要保证扫描图像的清晰度、完整性,对图像进行预处理,去除噪声、倾斜校正等,确保后续的文字识别和信息提取准确无误。在数据录入过程中,采用数据校验和审核机制,对录入的数据进行实时校验,及时发现和纠正错误数据。 |
|||
|
|||
在数据存储和管理方面,建立数据仓库和数据湖,对档案数据进行集中存储和管理,确保数据的一致性和可访问性。利用数据清洗和去重技术,定期对档案数据进行清洗,去除重复数据、错误数据和无效数据,提高数据的质量。建立数据质量评估体系,制定数据质量指标和评估方法,定期对档案数据进行质量评估,及时发现和解决数据质量问题。通过数据质量评估,对数据的准确性、完整性、一致性、时效性等方面进行量化评估,为数据质量管理提供数据支持。 |
|||
|
|||
#### 5.1.2 技术研发与应用 |
|||
|
|||
鼓励加大对适应档案管理的 AI 技术的研发投入,推动技术创新。针对档案数据的特点,研发专门的 AI 算法和模型,提高 AI 技术在档案管理中的适应性和准确性。研发针对档案图像识别的深度学习模型,提高对档案图像中文字、图表等元素的识别准确率;研发适合档案文本分析的自然语言处理模型,增强对档案文本的理解和分析能力。加强与高校、科研机构的合作,共同开展 AI 技术在档案管理中的应用研究,促进技术成果的转化和应用。 |
|||
|
|||
在技术应用方面,加强 AI 技术与档案管理系统的集成,实现 AI 技术在档案管理全流程的应用。在档案采集环节,利用 AI 技术实现自动化采集和分类;在档案整理环节,借助 AI 技术进行智能分类和编目;在档案检索环节,运用 AI 技术提供智能检索和推荐服务。不断优化 AI 技术在档案管理中的应用效果,根据实际应用情况,对 AI 模型和算法进行调整和优化,提高档案管理的效率和质量。 |
|||
|
|||
#### 5.1.3 人才培养与团队建设 |
|||
|
|||
加强档案人员的 AI 技术培训是提升档案管理水平的重要举措。定期组织档案人员参加 AI 技术培训课程,邀请专家学者进行授课,系统学习机器学习、自然语言处理、数据分析等 AI 技术知识,了解 AI 技术在档案管理中的应用案例和实践经验。鼓励档案人员参加相关的学术交流活动和研讨会,拓宽视野,掌握最新的技术动态和发展趋势。 |
|||
|
|||
通过培训,使档案人员具备运用 AI 技术进行档案管理的能力,能够熟练操作档案管理系统中的 AI 功能模块,如智能检索、自动分类等。培养档案人员的数据思维和创新意识,让他们能够充分利用 AI 技术挖掘档案数据的价值,为档案管理工作提供创新思路和方法。除了技术培训,还应注重培养档案人员的综合素质,包括沟通能力、团队协作能力、问题解决能力等,提高档案管理团队的整体战斗力。 |
|||
|
|||
引进具有 AI 技术背景的专业人才,充实档案管理团队,优化团队的知识结构和技能水平。建立人才激励机制,为人才提供良好的发展空间和待遇,吸引和留住优秀人才。通过人才的引进和培养,打造一支既懂档案管理又懂 AI 技术的复合型人才队伍,为 AI 赋能档案管理提供人才保障。 |
|||
|
|||
#### 5.1.4 伦理与法律规范 |
|||
|
|||
制定相关的伦理准则和法律法规是规范 AI 在档案管理中应用的重要保障。明确 AI 在档案管理中的数据使用规则,确保数据的收集、存储、处理和共享符合法律法规和伦理道德要求。在收集用户个人档案数据时,必须获得用户的明确授权,遵循最小必要原则,仅收集与档案管理相关的必要数据,保护用户的隐私和个人信息安全。 |
|||
|
|||
建立 AI 算法的审查机制,对用于档案管理的 AI 算法进行伦理审查,确保算法的公正性和透明度。审查算法是否存在偏见,是否会对特定群体造成不公平的影响。对于可能影响档案管理决策的 AI 算法,要求算法开发者提供详细的算法说明和解释,提高算法的可解释性,增强用户对算法结果的信任。加强对 AI 技术应用的监管,建立专门的监管机构,制定监管标准和流程,对 AI 在档案管理中的应用进行监督和管理,确保其合法、合规、符合伦理要求。对违反伦理准则和法律法规的行为,要依法进行惩处,维护档案管理的良好秩序。 |
|||
|
|||
### 5.2 未来发展趋势 |
|||
|
|||
#### 5.2.1 AI 技术与档案管理的深度融合 |
|||
|
|||
未来,AI 技术将在档案管理的全流程实现更深入的融合和应用。在档案资源建设方面,AI 技术将实现更智能化的采集和整理。通过智能传感器和网络爬虫技术,能够自动从各种数据源采集档案信息,包括网页、社交媒体、数据库等,实现档案信息的全面收集。利用更先进的机器学习算法,对采集到的信息进行自动分类、标引和编目,提高档案资源建设的效率和准确性。在档案数字化处理中,AI 技术将进一步提升数字化的质量和速度。通过深度学习算法,实现对档案图像和文字的更精准识别和转换,提高数字化的准确率。利用 AI 技术对数字化后的档案进行智能修复和优化,恢复受损档案的内容,提高档案的可读性和可用性。 |
|||
|
|||
在档案开放利用方面,AI 技术将为用户提供更个性化、智能化的服务。通过对用户行为数据的分析和挖掘,AI 能够深入了解用户的需求和兴趣偏好,为用户提供定制化的档案推荐服务。当用户搜索档案时,AI 不仅能够根据关键词提供相关档案,还能根据用户的历史搜索记录和行为模式,推荐更符合用户需求的档案资源。AI 技术还将实现更智能的档案编研。通过自然语言处理和知识图谱技术,能够对档案内容进行深度分析和挖掘,发现档案之间的关联和潜在知识,为档案编研人员提供更丰富的素材和思路,提高编研成果的质量和深度。 |
|||
|
|||
在档案安全管理方面,AI 技术将发挥更重要的作用。利用 AI 技术实现对档案库房环境的实时监测和智能调控,确保档案保存环境的稳定和安全。通过对库房内温湿度、空气质量、光照等环境参数的实时监测,AI 系统能够自动调整空调、除湿机、通风设备等,保持适宜的保存环境。在档案数据安全方面,AI 技术将提供更强大的防护能力。通过机器学习算法,能够实时监测档案数据的访问和传输情况,及时发现和防范数据泄露、篡改等安全威胁。利用 AI 技术对档案数据进行加密和备份,确保数据的安全性和完整性。 |
|||
|
|||
#### 5.2.2 智能化与自动化的发展方向 |
|||
|
|||
随着 AI 技术的不断发展,档案管理将朝着更加智能化和自动化的方向发展。AI 将实现档案管理的自动化决策。通过对大量档案数据的分析和学习,AI 系统能够自动判断档案的价值、重要性和保存期限,为档案管理决策提供依据。在档案鉴定环节,AI 可以根据预设的标准和模型,自动评估档案的保存价值,决定哪些档案需要永久保存,哪些可以定期销毁,减少人工鉴定的主观性和工作量。 |
|||
|
|||
AI 还将实现档案管理的自主服务。通过智能客服和聊天机器人技术,用户可以与档案管理系统进行自然语言交互,获取所需的档案信息和服务。用户只需通过语音或文字提问,系统就能自动理解用户的需求,提供准确的答案和相关档案资源。档案管理系统还能根据用户的需求,自动生成档案报告、统计分析等,为用户提供更便捷、高效的服务。未来,档案管理将实现无人化管理。通过自动化设备和 AI 技术,实现档案的自动上架、下架、盘点等操作,减少人工干预,提高管理效率和准确性。利用机器人技术,实现档案库房的自动巡逻和安全检查,及时发现和处理安全隐患。 |
|||
|
|||
#### 5.2.3 跨领域合作与创新 |
|||
|
|||
档案管理将与其他领域展开更广泛的合作与创新,推动 AI 技术的应用和发展。与大数据、云计算等技术领域的合作将更加紧密。通过与大数据技术的结合,能够对海量的档案数据进行更深入的分析和挖掘,发现数据背后的潜在价值和规律,为档案管理决策提供更有力的数据支持。借助云计算技术,实现档案数据的分布式存储和计算,提高数据处理的效率和可靠性,降低档案管理的成本。 |
|||
|
|||
与文化、教育、科研等领域的合作也将不断加强。在文化领域,与博物馆、图书馆等文化机构合作,整合档案资源和文化资源,打造综合性的文化信息服务平台,为公众提供更丰富的文化体验。在教育领域,与学校合作,将档案资源作为教学素材,开展档案教育和研究,培养学生的历史文化素养和信息素养。在科研领域,与科研机构合作,利用档案数据开展学术研究,为科研工作提供数据支持和历史借鉴。通过跨领域合作,能够拓展档案管理的应用场景和服务范围,推动档案管理的创新发展,为社会提供更优质的档案信息服务。 |
|||
|
|||
## 六、结论与展望 |
|||
|
|||
### 6.1 研究总结 |
|||
|
|||
本研究深入探讨了 AI 赋能档案管理的相关内容。AI 技术,包括机器学习、深度学习、自然语言处理和计算机视觉等,为档案管理提供了强大的技术支持,使其在多个方面实现了创新和变革。 |
|||
|
|||
在应用场景方面,AI 在档案资源建设中实现了智能采集与整理以及高效的档案数字化处理;在档案开放利用中,助力档案开放审核、提供智能检索服务并辅助档案编研工作;在档案安全管理中,实现了库房安全的智能监控和数据安全与隐私的有效保护。通过多个实际案例分析,如范德比尔特电视新闻档案馆利用 AI 实现智能检索,海泰方圆在档案编研中应用自然语言处理技术等,充分展示了 AI 在档案管理各环节的应用效果和价值。 |
|||
|
|||
AI 赋能档案管理具有显著优势。它极大地提高了管理效率,在档案分类、检索和审核等工作中,节省了大量的人力和时间成本,提高了工作的准确性。通过精准检索和个性化服务,提升了档案服务质量,满足了用户的多元化需求。AI 技术还能够深入挖掘档案数据的价值,为决策提供有力支持,在城市规划、企业运营和科研等领域发挥了重要作用。 |
|||
|
|||
AI 在档案管理中的应用也面临诸多挑战。数据质量问题,如数据格式不统一、质量参差不齐,影响了 AI 算法的训练和模型的准确性;技术适应性与安全性方面,不同类型档案数据对 AI 技术的适应性要求高,同时保障档案信息安全和隐私至关重要;伦理与法律法规问题,包括数据使用的合法性、算法偏见以及算法的透明度和可解释性等;人才短缺问题,传统档案管理人员难以满足 AI 时代对综合技能的要求。针对这些挑战,本研究提出了相应的应对策略,包括建立完善的数据质量管理机制、加大技术研发与应用力度、加强人才培养与团队建设以及制定伦理与法律规范等。 |
|||
|
|||
### 6.2 未来展望 |
|||
|
|||
未来,AI 在档案管理领域将展现出更广阔的发展前景。AI 技术与档案管理的融合将更加深入,贯穿档案管理的全流程。在档案资源建设中,实现更智能化的采集和整理,提升数字化处理的质量和速度;在档案开放利用中,提供更个性化、智能化的服务,实现更智能的档案编研;在档案安全管理中,发挥更重要的作用,保障档案实体和数据的安全。 |
|||
|
|||
档案管理将朝着智能化与自动化的方向加速发展。AI 将实现档案管理的自动化决策,如自动判断档案的价值、重要性和保存期限;实现档案管理的自主服务,通过智能客服和聊天机器人为用户提供便捷的服务;甚至实现无人化管理,借助自动化设备和机器人完成档案的日常管理工作。 |
|||
|
|||
跨领域合作与创新将成为档案管理发展的重要趋势。与大数据、云计算等技术领域的紧密合作,将为档案管理提供更强大的数据处理和分析能力;与文化、教育、科研等领域的合作,将拓展档案管理的应用场景和服务范围,推动档案管理的创新发展,为社会提供更优质的档案信息服务。为了充分发挥 AI 在档案管理中的优势,我们需要持续关注技术发展动态,积极应对各种挑战,不断探索和创新,推动档案管理行业向更高水平迈进。` |
|||
// const params = { |
|||
// 'researchOnlineId': row.id |
|||
// } |
|||
// FetchInitResearchOnlineDetails(params).then((res) => { |
|||
// console.log(res) |
|||
// this.onlineContent = res |
|||
// }).catch(err => { |
|||
// console.log(err) |
|||
// }) |
|||
}, |
|||
handleCloseDialog(done) { |
|||
this.lendDetail = false |
|||
this.onlineEditDetail = false |
|||
}, |
|||
// changeMy(val) { |
|||
// if (val) { |
|||
// this.crud.query.participants = this.user.username |
|||
// } else { |
|||
// this.crud.query.participants = '' |
|||
// } |
|||
// this.crud.toQuery() |
|||
// }, |
|||
changeOnlineTab(data) { |
|||
this.onlineTabIndex = data |
|||
if (this.onlineTabIndex === 1) { |
|||
// const paramsFile = { |
|||
// 'researchOnlineId': this.currentResearchOnline.id, |
|||
// 'page': 0, |
|||
// 'size': 10 |
|||
// } |
|||
// console.log('paramsFile', paramsFile) |
|||
// FetchInitResearchOnlineFileList(paramsFile).then((res) => { |
|||
// console.log(res) |
|||
// this.detailArcData = res.content |
|||
// }).catch(err => { |
|||
// console.log(err) |
|||
// }) |
|||
this.detailArcData = [ |
|||
{ |
|||
'id': '4028e3c38d67ac83018d680836c2000f', |
|||
'onlineId': '4028e3c38d67ac83018d6807660b000d', |
|||
'fileName': 'AI赋能档案管理的研究与展望.docx', |
|||
'fileType': 'docx', |
|||
'fileSize': 147535, |
|||
'filePath': '/researchOnlineFile/4028e3c38d67ac83018d680560230004/4028e3c38d67ac83018d6807660b000d/d2d41cf5-9b2d-4f2f-bc1b-f00e7c1a3962.zip', |
|||
'create_by': 'admin', |
|||
'update_by': 'admin', |
|||
'create_time': 1706847385000, |
|||
'update_time': 1706847385000 |
|||
}, |
|||
{ |
|||
'id': '4028e3c38d67ac83018d680817fa000e', |
|||
'onlineId': '4028e3c38d67ac83018d6807660b000d', |
|||
'fileName': 'AI赋能档案管理的研究与展望.pdf', |
|||
'fileType': 'pdf', |
|||
'fileSize': 176996, |
|||
'filePath': '/researchOnlineFile/4028e3c38d67ac83018d680560230004/4028e3c38d67ac83018d6807660b000d/3e308a02-a7e9-4e45-97b3-cb659c994221.zip', |
|||
'create_by': 'admin', |
|||
'update_by': 'admin', |
|||
'create_time': 1706847377000, |
|||
'update_time': 1706847377000 |
|||
} |
|||
] |
|||
} |
|||
}, |
|||
getFileSize(fileSize) { |
|||
const fileSizeInKB = (fileSize / 1024).toFixed(2) + 'kB' |
|||
const fileSizeInB = fileSize + 'B' |
|||
return (fileSize / 1024) <= 0.01 ? fileSizeInB : fileSizeInKB |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
</style> |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"id": "4028e3c38d6928f8018d71e75a990007", |
|||
"researchId": "4028e3c38d6928f8018d71dfe3680000", |
|||
"title": "目标识别-模型选择", |
|||
"context": "", |
|||
"status": 1, |
|||
"create_by": "admin", |
|||
"update_by": "eason", |
|||
"create_time": 1707013004000, |
|||
"update_time": 1739679967000 |
|||
} |
|||
@ -0,0 +1,629 @@ |
|||
<template> |
|||
<div class="app-container category-container" style="height: calc(100vh - 140px);"> |
|||
<!-- 门类列表 --> |
|||
<div class="container-main"> |
|||
<div class="elect-cont-left"> |
|||
<div class="container-left"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<!--门类树状结构--> |
|||
<div class="tree-scroll"> |
|||
<el-scrollbar style="height: calc(100vh - 230px);"> |
|||
<el-tree ref="categroyTree" v-loading="crud.loading" class="arc-tree arc-tree-01" :data="crud.data" :props="defaultProps" node-key="id" :expand-on-click-node="false" highlight-current @node-click="handleNodeClick"> |
|||
<span slot-scope="{ node, data }" class="custom-tree-node"> |
|||
<el-tooltip :content="node.label" placement="left" :enterable="false" effect="dark"> |
|||
<span v-if="data.isType === 0"> |
|||
{{ data.label }} |
|||
</span> |
|||
<span v-if="data.isType === 1" class="iconFolder tree-text"> |
|||
{{ data.label }} |
|||
</span> |
|||
<span v-if="data.isType === 2" class="iconArch tree-text"> |
|||
{{ data.label }} |
|||
</span> |
|||
<span v-if="data.isType === 3" class="iconFile tree-text"> |
|||
{{ data.label }} |
|||
</span> |
|||
</el-tooltip> |
|||
</span> |
|||
</el-tree> |
|||
</el-scrollbar> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="elect-cont-right"> |
|||
<div v-if="selectedCategory.isType === 2" class="container-right"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<div class="ai-file-pickUp"> |
|||
<div class="ai-file-all"> |
|||
<div class="des-title"> |
|||
<p>原文列表</p> |
|||
</div> |
|||
<el-table |
|||
ref="table" |
|||
:data="tableData" |
|||
style="min-width: 100%" |
|||
class="archives-table" |
|||
height="calc(100vh - 220px)" |
|||
@row-click="clickRowHandler" |
|||
> |
|||
<el-table-column type="selection" align="center" width="55" /> |
|||
<!-- <el-table-column type="index" label="序号" width="55" align="center" /> --> |
|||
<el-table-column prop="file_name" label="文件名称" show-overflow-tooltip min-width="120" /> |
|||
<el-table-column prop="file_type" label="格式" min-width="60" align="center"> |
|||
<template slot-scope="scope"> |
|||
<div v-if="scope.row.file_type === 'jpg' || scope.row.file_type === 'jpeg' || scope.row.file_type === 'png' || scope.row.file_type === 'bmp'|| scope.row.file_type === 'gif'"> |
|||
<i class="fileIcon icon-image" /> |
|||
</div> |
|||
<div v-else-if="scope.row.file_type === 'xlsx' || scope.row.file_type === 'xls'"> |
|||
<i class="fileIcon icon-excel" /> |
|||
</div> |
|||
<div v-else-if="scope.row.file_type === 'docx' || scope.row.file_type === 'doc'"> |
|||
<i class="fileIcon icon-word" /> |
|||
</div> |
|||
<div v-else-if="scope.row.file_type === 'pdf'"> |
|||
<i class="fileIcon icon-pdf" /> |
|||
</div> |
|||
<div v-else-if="scope.row.file_type === 'ppt' || scope.row.file_type === 'pptx'"> |
|||
<i class="fileIcon icon-ppt" /> |
|||
</div> |
|||
<div v-else-if="scope.row.file_type === 'zip' || scope.row.file_type === 'rar'"> |
|||
<i class="fileIcon icon-zip" /> |
|||
</div> |
|||
<div v-else-if="scope.row.file_type === 'txt'"> |
|||
<i class="fileIcon icon-txt" /> |
|||
</div> |
|||
<div v-else> |
|||
<i class="fileIcon icon-other" /> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="file_status" label="是否标注" width="100" align="center"> |
|||
<template slot-scope="scope"> |
|||
<span v-if="scope.row.file_status === 0" class="row-state row-physical ">未标注</span> |
|||
<span v-else class="row-state row-binding state-active">已标注</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="file_status" label="操作" align="center" width="80"> |
|||
<template slot-scope="scope"> |
|||
<div class="handle-btn"> |
|||
<el-button class="iconfont icon-huoqu" @click.stop="handlePickUp(scope.row)" /> |
|||
</div> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
</div> |
|||
<div class="pickUp-right"> |
|||
<div class="pickUp-right-item"> |
|||
<div class="des-title"> |
|||
<p>已标注关键词</p> |
|||
</div> |
|||
<div v-if="currentRow && currentRow.file_status===1" style="height: calc(100% - 70px); overflow-y: auto;"> |
|||
<div v-for="(item, index) in keywords" :key="index" class="keywords-list"> |
|||
<div class="keywords-item"> |
|||
<div v-if="isEditing[index]" class="keywords-input"> |
|||
<el-input v-model="keywords[index]" style="width: 320px;" @blur="handleBlur(index)" /> |
|||
</div> |
|||
<div v-else class="keywords-text"> |
|||
<!-- <p>{{ item }}</p> --> |
|||
<el-tooltip class="item" effect="dark" :content="item" :enterable="false" placement="top"> |
|||
<p>{{ item }}</p> |
|||
</el-tooltip> |
|||
</div> |
|||
</div> |
|||
<div class="keywords-handle"> |
|||
<i class="iconfont icon-shanchu" @click="handleDelete(index)" /> |
|||
<i class="iconfont icon-bianji" @click="handleEdit(index)" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<el-empty v-else description="暂无标注的数据" /> |
|||
</div> |
|||
<div :key="reloadKey" class="pickUp-Ai"> |
|||
<div class="des-title"> |
|||
<p>AI关键词标注</p> |
|||
<el-button @click="batchAiText">批量标注</el-button> |
|||
</div> |
|||
<div v-if="isPickUp " v-loading="aiLoadingPick" style="height: calc(100% - 70px); overflow-y: auto;"> |
|||
<div v-for="(item, index) in aiPickData" :key="index" class="keywords-list"> |
|||
<div class="keywords-item ai-item-text"> |
|||
<el-checkbox v-model="selectedItems[index]" @change="handleCheckboxChange(index)" /> |
|||
<div class="keywords-text"> |
|||
<el-tooltip class="item" effect="dark" :content="item" :enterable="false" placement="top"> |
|||
<p>{{ item }}</p> |
|||
</el-tooltip> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import crudCategory from '@/api/system/category/category' |
|||
import CRUD, { presenter, header } from '@crud/crud' |
|||
const data = [ |
|||
{ |
|||
'file_path': '/category//09A6ECD967BCC772DABB2F.txt', |
|||
'sequence': '', |
|||
'create_time': '2024-02-05 11:43:26', |
|||
'file_name': 'A002-WSWJ·XZGL·2024·Y-000201.txt', |
|||
'file_type': 'txt', |
|||
'document_file_id': '', |
|||
'file_dpi': 'null', |
|||
'id': '09A6ECD967BCC772DABB2F', |
|||
'archive_id': '0FBCB1FCB6341BFF9709B6', |
|||
'document_id': '', |
|||
'file_size': 0, |
|||
'file_thumbnail': '', |
|||
'file_status': 1 |
|||
}, |
|||
{ |
|||
'file_path': '/category//0EFEF1CB577453482ADE5F.txt', |
|||
'sequence': '', |
|||
'create_time': '2024-02-05 11:43:26', |
|||
'file_name': 'A002-WSWJ·XZGL·2024·Y-000202.txt', |
|||
'file_type': 'txt', |
|||
'document_file_id': '', |
|||
'file_dpi': 'null', |
|||
'id': '0EFEF1CB577453482ADE5F', |
|||
'archive_id': '0FBCB1FCB6341BFF9709B6', |
|||
'document_id': '', |
|||
'file_size': 0, |
|||
'file_thumbnail': '', |
|||
'file_status': 0 |
|||
}, |
|||
{ |
|||
'file_path': '/category/AE8B188F0C0314F9BE31B8/82FBCAE96CBC9F50809838/eb824e27-13eb-4f33-adc8-39ca5926d244.txt', |
|||
'sequence': '', |
|||
'create_time': '2024-3-20 16:16:32', |
|||
'file_name': '123.txt', |
|||
'file_type': 'txt', |
|||
'document_file_id': '', |
|||
'file_dpi': '', |
|||
'id': '3D49BD844334621851DF24', |
|||
'archive_id': '0FBCB1FCB6341BFF9709B6', |
|||
'document_id': '', |
|||
'file_size': 37679, |
|||
'file_thumbnail': '', |
|||
'file_status': 0 |
|||
}, |
|||
{ |
|||
'file_path': '/category/AE8B188F0C0314F9BE31B8/82FBCAE96CBC9F50809838/4B457990A874D55714FF8C.pdf', |
|||
'sequence': '', |
|||
'create_time': '2024-3-20 11:36:24', |
|||
'file_name': 'DAT 48-2009 基于XML的电子文件封装规范.pdf', |
|||
'file_type': 'pdf', |
|||
'document_file_id': '', |
|||
'file_dpi': '', |
|||
'id': '4B457990A874D55714FF8C', |
|||
'archive_id': '0FBCB1FCB6341BFF9709B6', |
|||
'document_id': '', |
|||
'file_size': 92308284, |
|||
'file_thumbnail': '', |
|||
'file_status': 0 |
|||
}, |
|||
{ |
|||
'file_path': '/category//6867E751998B41C3B89FA3.txt', |
|||
'sequence': '', |
|||
'create_time': '2024-01-25 10:26:44', |
|||
'file_name': 'A002-WSWJ·XZGL·2024·Y-000201.txt', |
|||
'file_type': 'txt', |
|||
'document_file_id': '', |
|||
'file_dpi': 'null', |
|||
'id': '6867E751998B41C3B89FA3', |
|||
'archive_id': '0FBCB1FCB6341BFF9709B6', |
|||
'document_id': '', |
|||
'file_size': 0, |
|||
'file_thumbnail': '', |
|||
'file_status': 0 |
|||
}, |
|||
{ |
|||
'file_path': '/category//694FD852367CD7465F7142.txt', |
|||
'sequence': '', |
|||
'create_time': '2024-02-05 13:21:39', |
|||
'file_name': 'A002-WSWJ·XZGL·2024·Y-000202.txt', |
|||
'file_type': 'txt', |
|||
'document_file_id': '', |
|||
'file_dpi': 'null', |
|||
'id': '694FD852367CD7465F7142', |
|||
'archive_id': '0FBCB1FCB6341BFF9709B6', |
|||
'document_id': '', |
|||
'file_size': 0, |
|||
'file_thumbnail': '', |
|||
'file_status': 0 |
|||
}, |
|||
{ |
|||
'file_path': '/category//6E39B6C1428217A5AAA835.txt', |
|||
'sequence': '', |
|||
'create_time': '2024-02-05 11:52:33', |
|||
'file_name': 'A002-WSWJ·XZGL·2024·Y-000201.txt', |
|||
'file_type': 'txt', |
|||
'document_file_id': '', |
|||
'file_dpi': 'null', |
|||
'id': '6E39B6C1428217A5AAA835', |
|||
'archive_id': '0FBCB1FCB6341BFF9709B6', |
|||
'document_id': '', |
|||
'file_size': 0, |
|||
'file_thumbnail': '', |
|||
'file_status': 0 |
|||
}, |
|||
{ |
|||
'file_path': '/category//761753E47A37F7F1C141BB.txt', |
|||
'sequence': '', |
|||
'create_time': '2024-01-25 10:25:25', |
|||
'file_name': 'A002-WSWJ·XZGL·2024·Y-000202.txt', |
|||
'file_type': 'txt', |
|||
'document_file_id': '', |
|||
'file_dpi': 'null', |
|||
'id': '761753E47A37F7F1C141BB', |
|||
'archive_id': '0FBCB1FCB6341BFF9709B6', |
|||
'document_id': '', |
|||
'file_size': 0, |
|||
'file_thumbnail': '', |
|||
'file_status': 1 |
|||
}, |
|||
{ |
|||
'file_path': '/category/AE8B188F0C0314F9BE31B8/82FBCAE96CBC9F50809838/95ec71e9-4745-4210-ba28-77c71b95bf06.ofd', |
|||
'sequence': '', |
|||
'create_time': '2024-3-20 14:20:57', |
|||
'file_name': '999.ofd', |
|||
'file_type': 'ofd', |
|||
'document_file_id': '', |
|||
'file_dpi': '', |
|||
'id': '7F846C5F6E3D5E50950384', |
|||
'archive_id': '0FBCB1FCB6341BFF9709B6', |
|||
'document_id': '', |
|||
'file_size': 29752, |
|||
'file_thumbnail': '', |
|||
'file_status': 0 |
|||
}, |
|||
{ |
|||
'file_path': '/category//831817367E0C3D2E739787.txt', |
|||
'sequence': '', |
|||
'create_time': '2024-01-25 10:25:25', |
|||
'file_name': 'A002-WSWJ·XZGL·2024·Y-000201.txt', |
|||
'file_type': 'txt', |
|||
'document_file_id': '', |
|||
'file_dpi': 'null', |
|||
'id': '831817367E0C3D2E739787', |
|||
'archive_id': '0FBCB1FCB6341BFF9709B6', |
|||
'document_id': '', |
|||
'file_size': 0, |
|||
'file_thumbnail': '', |
|||
'file_status': 1 |
|||
} |
|||
] |
|||
|
|||
export default { |
|||
name: 'AIKeywords', |
|||
components: { }, |
|||
cruds() { |
|||
return [ |
|||
CRUD({ |
|||
title: 'AI关键词提取', url: 'api/category/fondMenu', |
|||
crudMethod: { ...crudCategory }, |
|||
optShow: { |
|||
add: false, |
|||
edit: false, |
|||
del: false, |
|||
download: false, |
|||
group: false |
|||
} |
|||
}) |
|||
] |
|||
}, |
|||
mixins: [presenter(), header()], |
|||
data() { |
|||
return { |
|||
defaultProps: { |
|||
children: 'children', |
|||
label: 'label' |
|||
}, |
|||
selectedCategory: {}, |
|||
tableData: data, |
|||
selections: [], |
|||
keywords: [], |
|||
isEditing: [], |
|||
aiPickData: [], |
|||
isPickUp: false, |
|||
reloadKey: 0, |
|||
aiLoadingPick: false, |
|||
currentRow: {}, |
|||
selectedItems: [] |
|||
} |
|||
}, |
|||
computed: { |
|||
}, |
|||
created() { |
|||
this.isEditing = this.keywords.map(() => false) |
|||
}, |
|||
mounted() { |
|||
}, |
|||
methods: { |
|||
// 处理编辑图标点击事件 |
|||
handleEdit(index) { |
|||
this.$set(this.isEditing, index, true) |
|||
}, |
|||
// 处理输入框失去焦点事件 |
|||
handleBlur(index) { |
|||
this.$set(this.isEditing, index, false) |
|||
}, |
|||
// 处理删除操作的方法 |
|||
handleDelete(index) { |
|||
// 从 keywords 数组中删除指定索引的项 |
|||
this.keywords.splice(index, 1) |
|||
// 从 isEditing 数组中删除对应索引的项 |
|||
this.isEditing.splice(index, 1) |
|||
}, |
|||
filterData(data) { |
|||
return data.filter(node => { |
|||
if (node.children && node.children.length > 0) { |
|||
node.children = this.filterData(node.children) // 递归处理子节点 |
|||
} |
|||
return node.isType !== 3 // 过滤掉isType为3的节点 |
|||
}) |
|||
}, |
|||
// 逆归实现 获取指定元素 |
|||
findNode(tree, func) { |
|||
for (const node of tree) { |
|||
if (func(node)) return node |
|||
if (node.children) { |
|||
const res = this.findNode(node.children, func) |
|||
if (res) return res |
|||
} |
|||
} |
|||
return null |
|||
}, |
|||
// 根据父级展开全部子级 |
|||
expandAllChildren(node, targetElement) { |
|||
node.expanded = true |
|||
// 递归展开当前节点的每个子节点 |
|||
if (node.childNodes && node.childNodes.length > 0) { |
|||
for (let i = 0; i < node.childNodes.length; i++) { |
|||
if (node.childNodes[i].data.id === targetElement.id) { |
|||
this.$refs.categroyTree.setCurrentKey(node.childNodes[i]) |
|||
} |
|||
this.expandAllChildren(node.childNodes[i], targetElement) |
|||
} |
|||
} |
|||
}, |
|||
// 转换函数,将原始数据转换为el-tree所需格式 |
|||
transformData(rawData) { |
|||
return rawData.map(item => { |
|||
return { |
|||
label: item.fondName, |
|||
isType: 0, |
|||
id: item.fondsId, |
|||
fondsNo: item.fondsNo, |
|||
children: item.categoryList.map(category => { |
|||
return { |
|||
label: category.cnName, |
|||
id: category.id, |
|||
arrangeType: category.arrangeType, |
|||
isType: category.isType, |
|||
fondsId: item.fondsId, |
|||
fondName: item.fondName, |
|||
fondsNo: item.fondsNo, |
|||
children: this.transformChildren(category.children, item.fondsId, item.fondName, item.fondsNo) |
|||
} |
|||
}) |
|||
} |
|||
}) |
|||
}, |
|||
// 递归函数,用于处理数据的子节点 |
|||
transformChildren(children, fondsId, fondName, fondsNo) { |
|||
return children.map(child => { |
|||
return { |
|||
label: child.cnName, |
|||
id: child.id, |
|||
isType: child.isType, |
|||
pid: child.pid, |
|||
code: child.code, |
|||
arrangeType: child.arrangeType, |
|||
fondsId: fondsId, |
|||
fondName: fondName, |
|||
fondsNo: fondsNo, |
|||
children: child.children.length ? this.transformChildren(child.children, fondsId, fondName, fondsNo) : [] |
|||
} |
|||
}) |
|||
}, |
|||
// 找顶级节点 |
|||
findTopLevelNode(data, fondsId) { |
|||
for (let i = 0; i < data.length; i++) { |
|||
if (data[i].id === fondsId) { |
|||
return data[i] |
|||
} |
|||
} |
|||
return null |
|||
}, |
|||
[CRUD.HOOK.afterRefresh]() { |
|||
this.crud.data = this.filterData(this.transformData(this.crud.data)) |
|||
this.$nextTick(() => { |
|||
let currentKey |
|||
if (localStorage.getItem('currentArchivesKey') !== null) { |
|||
currentKey = JSON.parse(localStorage.getItem('currentArchivesKey')) |
|||
// 删除门类节点后 |
|||
if (this.$refs.categroyTree.getCurrentKey(currentKey.id) == null) { |
|||
localStorage.removeItem('currentArchivesKey') |
|||
} |
|||
this.topLevelNode = this.findTopLevelNode(this.crud.data, currentKey.fondsId) |
|||
// 如果找到了顶级节点,则从该节点开始递归查找指定元素 |
|||
if (this.topLevelNode) { |
|||
if (currentKey) { |
|||
// 展开顶级节点的子节点 |
|||
if (currentKey.isType === 1) { |
|||
currentKey = this.findNode(this.crud.data[0].children, (node) => { |
|||
return node.isType !== 1 |
|||
}) |
|||
} |
|||
this.expandAllChildren(this.$refs.categroyTree.getNode(this.topLevelNode), currentKey) |
|||
} else { |
|||
this.defaultSetting(currentKey) |
|||
} |
|||
} else { |
|||
this.defaultSetting(currentKey) |
|||
} |
|||
} else { |
|||
this.defaultSetting(currentKey) |
|||
} |
|||
if (currentKey && currentKey.id) { |
|||
this.$nextTick(() => { |
|||
// 选中节点的门类详情 |
|||
this.handleNodeClick(currentKey) |
|||
}) |
|||
} |
|||
}) |
|||
}, |
|||
defaultSetting(currentKey) { |
|||
if (this.crud.data[0].isType === 0) { |
|||
currentKey = this.findNode(this.crud.data[0].children, (node) => { |
|||
return node.isType !== 1 |
|||
}) |
|||
this.expandAllChildren(this.$refs.categroyTree.getNode(this.crud.data[0]), currentKey) |
|||
} else { |
|||
currentKey = this.crud.data[0] |
|||
this.expandAllChildren(this.$refs.categroyTree.getNode(this.crud.data[0]), currentKey) |
|||
} |
|||
}, |
|||
// 选中门类后,设置门类详情数据 |
|||
handleNodeClick(val) { |
|||
if (val) { |
|||
localStorage.setItem('currentArchivesKey', JSON.stringify(val)) |
|||
this.selectedCategory = val |
|||
this.$nextTick(() => { |
|||
}) |
|||
} |
|||
}, |
|||
// table |
|||
clickRowHandler(row) { |
|||
this.isPickUp = false |
|||
this.$refs.table.clearSelection() |
|||
this.$refs.table.toggleRowSelection(row) |
|||
this.selections = [row] |
|||
this.currentRow = row |
|||
if (this.currentRow.file_status === 1) { |
|||
this.keywords = [ |
|||
'永久', '武汉飞天', '2024' |
|||
] |
|||
} else { |
|||
this.keywords = [] |
|||
} |
|||
}, |
|||
handlePickUp(row) { |
|||
this.currentRow = row |
|||
this.aiPickData = [] |
|||
this.isPickUp = true |
|||
this.aiLoadingPick = true |
|||
setTimeout(() => { |
|||
this.aiPickData = ['数字人', '多媒体技术在档案信息存贮与检索中的应用中的应用中的应用中的应用', '2023', '30年'] |
|||
this.aiLoadingPick = false |
|||
}, 3000) |
|||
}, |
|||
// 处理复选框状态变化 |
|||
handleCheckboxChange(index) { |
|||
// console.log(`第 ${index} 项的选中状态变为: ${this.selectedItems[index]}`) |
|||
const allSelectedItems = this.aiPickData.filter((_, i) => this.selectedItems[i]) |
|||
console.log('所有选中项:', allSelectedItems) |
|||
}, |
|||
batchAiText() { |
|||
const selected = this.aiPickData.filter((_, index) => this.selectedItems[index]) |
|||
if (selected.length === 0) { |
|||
this.$message({ message: '请选择要提取的关键词', type: 'warning', offset: 8 }) |
|||
return |
|||
} |
|||
this.keywords = this.keywords.concat(selected) |
|||
this.isEditing = this.keywords.map(() => false) |
|||
|
|||
// 移除已提取的关键词 |
|||
this.aiPickData = this.aiPickData.filter((_, index) => !this.selectedItems[index]) |
|||
this.selectedItems = this.aiPickData.map(() => false) |
|||
|
|||
// 更新当前行的 file_status 状态 |
|||
if (this.currentRow) { |
|||
this.currentRow.file_status = 1 |
|||
// 找到 tableData 中对应的行并更新状态 |
|||
const rowIndex = this.tableData.findIndex(row => row.id === this.currentRow.id) |
|||
if (rowIndex !== -1) { |
|||
this.$set(this.tableData, rowIndex, { ...this.tableData[rowIndex], file_status: 1 }) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.elect-cont-right .container-right { |
|||
// min-height: calc(100vh - 188px); |
|||
} |
|||
.category-container { |
|||
.elect-cont-left{ |
|||
width: 296px !important; |
|||
} |
|||
} |
|||
.openSidebar .category-container .elect-cont-right{ |
|||
width: calc(100vw - 614px) !important; |
|||
} |
|||
.hideSidebar .category-container .elect-cont-right { |
|||
width: calc(100vw - 412px) !important; |
|||
} |
|||
.tree-scroll{ |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.ai-file-pickUp{ |
|||
display: flex; |
|||
justify-content: space-between; |
|||
} |
|||
.ai-file-all{ |
|||
flex: 1; |
|||
} |
|||
.pickUp-right{ |
|||
width: 400px; |
|||
margin-left: 20px; |
|||
.pickUp-right-item, |
|||
.pickUp-Ai{ |
|||
height: calc(100% / 2); |
|||
} |
|||
} |
|||
.keywords-text p{ |
|||
width: 340px; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
display: -webkit-box; |
|||
-webkit-line-clamp: 1; |
|||
-webkit-box-orient: vertical; |
|||
} |
|||
.keywords-list{ |
|||
display: flex; |
|||
justify-content: space-between; |
|||
line-height: 40px; |
|||
border-bottom: 1px solid #e6e8ed; |
|||
// padding: 0 10px; |
|||
} |
|||
.keywords-handle i{ |
|||
cursor: pointer; |
|||
} |
|||
.ai-item-text{ |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
p{ |
|||
margin-left: 10px; |
|||
} |
|||
} |
|||
.des-title{ |
|||
position: relative; |
|||
.el-button{ |
|||
position: absolute; |
|||
right: 0; |
|||
top: -5px; |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,246 @@ |
|||
<template> |
|||
<div class="app-container category-container" style="height: calc(100vh - 140px);"> |
|||
<!-- 门类列表 --> |
|||
<div class="container-main"> |
|||
<div class="elect-cont-left"> |
|||
<div class="container-left"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<!--门类树状结构--> |
|||
<div class="tree-scroll"> |
|||
<el-scrollbar style="height: calc(100vh - 230px);"> |
|||
<el-tree ref="categroyTree" v-loading="crud.loading" class="arc-tree arc-tree-01" :data="crud.data" :props="defaultProps" node-key="id" :expand-on-click-node="false" highlight-current @node-click="handleNodeClick"> |
|||
<span slot-scope="{ node, data }" class="custom-tree-node"> |
|||
<el-tooltip :content="node.label" placement="left" :enterable="false" effect="dark"> |
|||
<span v-if="data.isType === 0"> |
|||
{{ data.label }} |
|||
</span> |
|||
<span v-if="data.isType === 1" class="iconFolder tree-text"> |
|||
{{ data.label }} |
|||
</span> |
|||
<span v-if="data.isType === 2" class="iconArch tree-text"> |
|||
{{ data.label }} |
|||
</span> |
|||
<span v-if="data.isType === 3" class="iconFile tree-text"> |
|||
{{ data.label }} |
|||
</span> |
|||
</el-tooltip> |
|||
</span> |
|||
</el-tree> |
|||
</el-scrollbar> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<div class="elect-cont-right"> |
|||
<div v-if="selectedCategory.isType === 2" class="container-right"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<img style="display: block; height: calc(100vh - 184px);" src="@/assets/images/graph-img.png" alt=" "> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import crudCategory from '@/api/system/category/category' |
|||
import CRUD, { presenter, header } from '@crud/crud' |
|||
|
|||
export default { |
|||
name: 'AIknowledgeGraph', |
|||
components: { }, |
|||
cruds() { |
|||
return [ |
|||
CRUD({ |
|||
title: 'AI知识图谱', url: 'api/category/fondMenu', |
|||
crudMethod: { ...crudCategory }, |
|||
optShow: { |
|||
add: false, |
|||
edit: false, |
|||
del: false, |
|||
download: false, |
|||
group: false |
|||
} |
|||
}) |
|||
] |
|||
}, |
|||
mixins: [presenter(), header()], |
|||
data() { |
|||
return { |
|||
defaultProps: { |
|||
children: 'children', |
|||
label: 'label' |
|||
}, |
|||
selectedCategory: {} |
|||
|
|||
} |
|||
}, |
|||
computed: { |
|||
}, |
|||
created() { |
|||
}, |
|||
mounted() { |
|||
}, |
|||
methods: { |
|||
filterData(data) { |
|||
return data.filter(node => { |
|||
if (node.children && node.children.length > 0) { |
|||
node.children = this.filterData(node.children) // 递归处理子节点 |
|||
} |
|||
return node.isType !== 3 // 过滤掉isType为3的节点 |
|||
}) |
|||
}, |
|||
// 逆归实现 获取指定元素 |
|||
findNode(tree, func) { |
|||
for (const node of tree) { |
|||
if (func(node)) return node |
|||
if (node.children) { |
|||
const res = this.findNode(node.children, func) |
|||
if (res) return res |
|||
} |
|||
} |
|||
return null |
|||
}, |
|||
// 根据父级展开全部子级 |
|||
expandAllChildren(node, targetElement) { |
|||
node.expanded = true |
|||
// 递归展开当前节点的每个子节点 |
|||
if (node.childNodes && node.childNodes.length > 0) { |
|||
for (let i = 0; i < node.childNodes.length; i++) { |
|||
if (node.childNodes[i].data.id === targetElement.id) { |
|||
this.$refs.categroyTree.setCurrentKey(node.childNodes[i]) |
|||
} |
|||
this.expandAllChildren(node.childNodes[i], targetElement) |
|||
} |
|||
} |
|||
}, |
|||
// 转换函数,将原始数据转换为el-tree所需格式 |
|||
transformData(rawData) { |
|||
return rawData.map(item => { |
|||
return { |
|||
label: item.fondName, |
|||
isType: 0, |
|||
id: item.fondsId, |
|||
fondsNo: item.fondsNo, |
|||
children: item.categoryList.map(category => { |
|||
return { |
|||
label: category.cnName, |
|||
id: category.id, |
|||
arrangeType: category.arrangeType, |
|||
isType: category.isType, |
|||
fondsId: item.fondsId, |
|||
fondName: item.fondName, |
|||
fondsNo: item.fondsNo, |
|||
children: this.transformChildren(category.children, item.fondsId, item.fondName, item.fondsNo) |
|||
} |
|||
}) |
|||
} |
|||
}) |
|||
}, |
|||
// 递归函数,用于处理数据的子节点 |
|||
transformChildren(children, fondsId, fondName, fondsNo) { |
|||
return children.map(child => { |
|||
return { |
|||
label: child.cnName, |
|||
id: child.id, |
|||
isType: child.isType, |
|||
pid: child.pid, |
|||
code: child.code, |
|||
arrangeType: child.arrangeType, |
|||
fondsId: fondsId, |
|||
fondName: fondName, |
|||
fondsNo: fondsNo, |
|||
children: child.children.length ? this.transformChildren(child.children, fondsId, fondName, fondsNo) : [] |
|||
} |
|||
}) |
|||
}, |
|||
// 找顶级节点 |
|||
findTopLevelNode(data, fondsId) { |
|||
for (let i = 0; i < data.length; i++) { |
|||
if (data[i].id === fondsId) { |
|||
return data[i] |
|||
} |
|||
} |
|||
return null |
|||
}, |
|||
[CRUD.HOOK.afterRefresh]() { |
|||
this.crud.data = this.filterData(this.transformData(this.crud.data)) |
|||
this.$nextTick(() => { |
|||
let currentKey |
|||
if (localStorage.getItem('currentArchivesKey') !== null) { |
|||
currentKey = JSON.parse(localStorage.getItem('currentArchivesKey')) |
|||
// 删除门类节点后 |
|||
if (this.$refs.categroyTree.getCurrentKey(currentKey.id) == null) { |
|||
localStorage.removeItem('currentArchivesKey') |
|||
} |
|||
this.topLevelNode = this.findTopLevelNode(this.crud.data, currentKey.fondsId) |
|||
// 如果找到了顶级节点,则从该节点开始递归查找指定元素 |
|||
if (this.topLevelNode) { |
|||
if (currentKey) { |
|||
// 展开顶级节点的子节点 |
|||
if (currentKey.isType === 1) { |
|||
currentKey = this.findNode(this.crud.data[0].children, (node) => { |
|||
return node.isType !== 1 |
|||
}) |
|||
} |
|||
this.expandAllChildren(this.$refs.categroyTree.getNode(this.topLevelNode), currentKey) |
|||
} else { |
|||
this.defaultSetting(currentKey) |
|||
} |
|||
} else { |
|||
this.defaultSetting(currentKey) |
|||
} |
|||
} else { |
|||
this.defaultSetting(currentKey) |
|||
} |
|||
if (currentKey && currentKey.id) { |
|||
this.$nextTick(() => { |
|||
// 选中节点的门类详情 |
|||
this.handleNodeClick(currentKey) |
|||
}) |
|||
} |
|||
}) |
|||
}, |
|||
defaultSetting(currentKey) { |
|||
if (this.crud.data[0].isType === 0) { |
|||
currentKey = this.findNode(this.crud.data[0].children, (node) => { |
|||
return node.isType !== 1 |
|||
}) |
|||
this.expandAllChildren(this.$refs.categroyTree.getNode(this.crud.data[0]), currentKey) |
|||
} else { |
|||
currentKey = this.crud.data[0] |
|||
this.expandAllChildren(this.$refs.categroyTree.getNode(this.crud.data[0]), currentKey) |
|||
} |
|||
}, |
|||
// 选中门类后,设置门类详情数据 |
|||
handleNodeClick(val) { |
|||
if (val) { |
|||
localStorage.setItem('currentArchivesKey', JSON.stringify(val)) |
|||
this.selectedCategory = val |
|||
this.$nextTick(() => { |
|||
}) |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.elect-cont-right .container-right { |
|||
min-height: calc(100vh - 190px); |
|||
} |
|||
.category-container { |
|||
.elect-cont-left{ |
|||
width: 296px !important; |
|||
} |
|||
} |
|||
.openSidebar .category-container .elect-cont-right{ |
|||
width: calc(100vw - 614px) !important; |
|||
} |
|||
.hideSidebar .category-container .elect-cont-right { |
|||
width: calc(100vw - 412px) !important; |
|||
} |
|||
.tree-scroll{ |
|||
font-size: 14px; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,306 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<div class="container-main"> |
|||
<div class="elect-cont-left"> |
|||
<div class="head-container"> |
|||
<el-select v-model="form.fondsId" placeholder="请选择" style="width: 225px;" @change="changeFondsValue($event)"> |
|||
<el-option |
|||
v-for="(item,index) in fondsOptions" |
|||
:key="index" |
|||
:label="item.fondsName" |
|||
:value="item.id" |
|||
/> |
|||
</el-select> |
|||
</div> |
|||
<div class="container-left"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<ul class="left-annual-type"> |
|||
<li class="active">本单位填报(6)</li> |
|||
<li>下级上报(0)</li> |
|||
<li>汇总上报(0)</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="elect-cont-right"> |
|||
<div class="head-container" style="position: relative;"> |
|||
<crudOperation :permission="permission"> |
|||
<template v-slot:middle> |
|||
<el-button slot="reference" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)"> |
|||
<i class="iconfont icon-shanchu" /> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</crudOperation> |
|||
<div class="double-click-btn" style="top: 3px;"><i class="iconfont icon-zhuyi-lan" /><span>双击列表数据查看年报详情</span></div> |
|||
</div> |
|||
<div class="container-right"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<el-table |
|||
ref="table" |
|||
v-loading="loading" |
|||
class="archives-table" |
|||
:data="tableData" |
|||
@selection-change="crud.selectionChangeHandler" |
|||
@row-click="clickRowHandler" |
|||
@row-dblclick="handleDbClick" |
|||
> |
|||
<el-table-column type="selection" align="center" width="55" /> |
|||
<el-table-column label="年度" prop="year" /> |
|||
<el-table-column label="统计模板" prop="template" min-width="150px" /> |
|||
<el-table-column label="填报单位" prop="unit" /> |
|||
<el-table-column label="创建人" prop="creator" /> |
|||
<el-table-column prop="create_time" label="创建日期"> |
|||
<template slot-scope="scope"> |
|||
<div>{{ scope.row.create_time | parseTime }}</div> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="备注" prop="remark" /> |
|||
<el-table-column label="状态" prop="status" align="center"> |
|||
<template slot-scope="scope"> |
|||
<!-- <div>{{ scope.row.status === 0 ? '录入中' : '已汇总' }}</div> --> |
|||
<span v-if="scope.row.status === 0" class="row-state row-physical state-active">录入中</span> |
|||
<span v-else class="row-state row-binding state-active">已汇总</span> |
|||
</template> |
|||
</el-table-column> |
|||
<!-- <el-table-column label="操作" align="center" prop="deptsStatus" /> --> |
|||
</el-table> |
|||
<!--分页组件--> |
|||
<!-- <pagination v-if="crud.data.length!==0" /> --> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<el-dialog append-to-body :close-on-click-modal="false" :before-close="handleCloseDialog" :visible.sync="detailVisible" title="详情"> |
|||
<div class="setting-dialog"> |
|||
<ul class="annual-dialog-detail"> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">年度:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.year }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">年报模板:</div> |
|||
<div class="detail-item-right">2019</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">填报单位:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.unit }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">报表模板:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.template }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">填报人:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.creator }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">上报至:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.upToUint }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">上报日期:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.upToDate | parseTime }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">备注:</div> |
|||
<div class="detail-item-right">{{ detailContent && detailContent.remark }}</div> |
|||
</li> |
|||
<li class="detail-item"> |
|||
<div class="detail-item-left">附件列表:</div> |
|||
<div class="detail-item-right" /> |
|||
</li> |
|||
</ul> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<!-- <router-link to="/local-html">跳转到本地HTML文件</router-link> --> |
|||
<el-button type="primary" @click="goToHtml">报表详情</el-button> |
|||
<!-- <el-button type="text" @click="detailVisible=false">确定</el-button> --> |
|||
</div> |
|||
</div> |
|||
</el-dialog> |
|||
|
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import crudDept from '@/api/system/dept' |
|||
import { FetchFondsAll } from '@/api/system/fonds' |
|||
import CRUD, { presenter, header, form, crud } from '@crud/crud' |
|||
import crudOperation from '@crud/CRUD.operation' |
|||
|
|||
const defaultForm = { id: null, fondsId: null } |
|||
const data = [ |
|||
{ |
|||
'year': 2024, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '', |
|||
'upToDate': null |
|||
}, |
|||
{ |
|||
'year': 2023, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '武汉飞天智能', |
|||
'upToDate': '1706078799000' |
|||
}, |
|||
{ |
|||
'year': 2022, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '', |
|||
'upToDate': null |
|||
}, |
|||
{ |
|||
'year': 2021, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '', |
|||
'upToDate': null |
|||
}, |
|||
{ |
|||
'year': 2020, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '', |
|||
'upToDate': null |
|||
}, |
|||
{ |
|||
'year': 2019, |
|||
'template': '《档案室基本情况表》(2019版)', |
|||
'unit': '武汉飞天智能', |
|||
'creator': '系统管理员', |
|||
'create_time': '1706078799000', |
|||
'status': 1, |
|||
'remark': '', |
|||
'upToUint': '', |
|||
'upToDate': null |
|||
} |
|||
] |
|||
|
|||
export default { |
|||
name: 'AnnualReportStatistics', |
|||
components: { crudOperation }, |
|||
cruds() { |
|||
return CRUD({ title: '年报统计', idField: 'deptsId', url: 'api/depts/initDeptsList', crudMethod: { ...crudDept }, optShow: { |
|||
add: false, |
|||
edit: false, |
|||
del: false, |
|||
reset: false, |
|||
download: false, |
|||
group: false |
|||
}, |
|||
queryOnPresenterCreated: false |
|||
}) |
|||
}, |
|||
mixins: [presenter(), header(), form(defaultForm), crud()], |
|||
data() { |
|||
return { |
|||
permission: { |
|||
add: ['admin'], |
|||
edit: ['admin'], |
|||
del: ['admin'] |
|||
}, |
|||
fondsOptions: [], |
|||
form: { |
|||
'fondsId': null |
|||
}, |
|||
loading: false, |
|||
tableData: data, |
|||
detailVisible: false, |
|||
detailContent: {} |
|||
} |
|||
}, |
|||
mounted() { |
|||
this.getFondsDatas() |
|||
}, |
|||
methods: { |
|||
getFondsDatas() { |
|||
FetchFondsAll().then(res => { |
|||
this.fondsOptions = res |
|||
if (this.fondsOptions.length > 0) { |
|||
this.form.fondsId = this.fondsOptions[0].id |
|||
} |
|||
}) |
|||
}, |
|||
changeFondsValue(value) { |
|||
const obj = this.fondsOptions.find(function(item) { |
|||
return item.id === value |
|||
}) |
|||
console.log('obj', obj) |
|||
}, |
|||
clickRowHandler(row) { |
|||
this.$refs.table.clearSelection() |
|||
this.$refs.table.toggleRowSelection(row) |
|||
}, |
|||
handleDbClick(row) { |
|||
this.detailVisible = true |
|||
this.detailContent = row |
|||
}, |
|||
handleCloseDialog() { |
|||
this.detailVisible = false |
|||
}, |
|||
goToHtml() { |
|||
// 这里的 'test.html' 是你放在 public 目录下的 HTML 文件名称 |
|||
// window.location.href = 'report/annual.htm' |
|||
window.open('report/annual.htm', '_blank') |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.left-annual-type{ |
|||
// padding: 20px 0; |
|||
line-height: 36px; |
|||
font-size: 14px; |
|||
color: #0c0e1e; |
|||
li{ |
|||
padding: 0 10px; |
|||
&:hover, |
|||
&.active{ |
|||
background-color: #e8f2ff; |
|||
color: #0348f3; |
|||
cursor: default; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.annual-dialog-detail{ |
|||
.detail-item{ |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
line-height: 38px; |
|||
font-size: 16px; |
|||
.detail-item-left{ |
|||
width: 120px; |
|||
text-align: right; |
|||
} |
|||
.detail-item-right{ |
|||
color: #0c0e1e; |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,278 @@ |
|||
<template> |
|||
<!-- style="height: calc(100vh - 140px);" --> |
|||
<div class="app-container row-container"> |
|||
<div class="custom-main"> |
|||
<!-- <el-card class="box-card" @click="goToHtml"> |
|||
认证材料 |
|||
</el-card> |
|||
<el-card class="box-card" @click="goToHtml"> |
|||
学籍表测试 |
|||
</el-card> |
|||
<el-card class="box-card" @click="goToHtml"> |
|||
交接统计 |
|||
</el-card> |
|||
<el-card class="box-card" @click="goToHtml"> |
|||
单个电子文件大小统计 |
|||
</el-card> |
|||
<el-card class="box-card" @click="goToHtml"> |
|||
电子文件统计 |
|||
</el-card> --> |
|||
<el-card class="box-card"> |
|||
<div @click="goToHtml">文书档案年度分类统计</div> |
|||
</el-card> |
|||
<el-card class="box-card"> |
|||
<div @click="goToHtml">文书档案年度保管期限统计</div> |
|||
</el-card> |
|||
|
|||
<!-- <div v-katex:auto class="mdTextBox" v-html="renderMdText(markDownText)" /> --> |
|||
|
|||
<!-- <mavon-editor |
|||
class="md" |
|||
:value="markDownText" |
|||
:subfield="false" |
|||
:default-open="'preview'" |
|||
:toolbars-flag="false" |
|||
:editable="false" |
|||
:scroll-style="true" |
|||
:ishljs="true" |
|||
/> --> |
|||
|
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import MarkdownIt from 'markdown-it' |
|||
import MarkdownItHighlightjs from 'markdown-it-highlightjs' |
|||
import 'highlight.js/styles/a11y-dark.css' |
|||
import katex from 'katex' |
|||
import 'katex/dist/katex.min.css' |
|||
|
|||
// import MarkdownItAbbr from 'markdown-it-abbr' |
|||
// import MarkdownItAnchor from 'markdown-it-anchor' |
|||
// import MarkdownItFootnote from 'markdown-it-footnote' |
|||
// import MarkdownItHighlightjs from 'markdown-it-highlightjs' |
|||
// import MarkdownItSub from 'markdown-it-sub' |
|||
// import MarkdownItSup from 'markdown-it-sup' |
|||
// import MarkdownItTasklists from 'markdown-it-task-lists' |
|||
// import MarkdownItTOC from 'markdown-it-toc-done-right' |
|||
// import 'highlight.js/styles/default.css' |
|||
import markdownText2 from '@/assets/test.md' |
|||
|
|||
export default { |
|||
name: 'CustomDefinedStatistics', |
|||
components: { }, |
|||
data() { |
|||
return { |
|||
markdownText2: markdownText2, |
|||
// 渲染的文本 |
|||
markDownText: `## 项目背景 |
|||
> 描述项目或产品的现状,让项目成员了解当前存在的问题与痛点。 |
|||
> |
|||
|
|||
+ 痛点1... |
|||
+ 痛点2... |
|||
+ 痛点3... |
|||
|
|||
## 项目目标 |
|||
> 描述本项目期望达成的目标,目标需满足Smart原则: |
|||
> |
|||
> 1. 具体的(Specific) |
|||
> 2. 可以衡量的(Measurable) |
|||
> 3. 可以达到的(Attainable) |
|||
> 4. 要与其他目标具有一定的相关性(Relevant) |
|||
> 5. 有明确的截止期限(Time-bound) |
|||
> |
|||
## 关键事项 |
|||
> 为达成上述目标,需要完成哪些关键事项。 |
|||
> |
|||
|
|||
+ 关键事项1... |
|||
+ 关键事项2... |
|||
+ 关键事项3... |
|||
|
|||
## 里程碑 |
|||
> 整个项目中,关键节点的里程碑计划。 |
|||
> |
|||
|
|||
 |
|||
|
|||
## 人员安排 |
|||
> 输入项目的所有干系人,包括内部和外部干系人。 |
|||
> |
|||
|
|||
| **人员** | **岗位** | |
|||
| --- | --- | |
|||
| @<font style="color:#8C8C8C;background-color:#F5F5F5;">提及</font> | 项目经理 | |
|||
| @<font style="color:#8C8C8C;background-color:#F5F5F5;">提及</font> | 技术负责人 | |
|||
| @<font style="color:#8C8C8C;background-color:#F5F5F5;">提及</font> | 产品负责人 | |
|||
|
|||
|
|||
## 风险提示 |
|||
> 对公司战略、项目结题、法务风险问题进行提示,并说明应对措施。 |
|||
> |
|||
`, |
|||
markdownRender: new MarkdownIt({ |
|||
html: true, |
|||
linkify: true, |
|||
typographer: true, |
|||
xhtmlOut: false |
|||
}).use(MarkdownItHighlightjs), |
|||
// .use(MarkdownItAbbr) |
|||
// .use(MarkdownItAnchor) |
|||
// .use(MarkdownItFootnote) |
|||
// .use(MarkdownItHighlightjs) |
|||
// .use(MarkdownItSub) |
|||
// .use(MarkdownItSup) |
|||
// .use(MarkdownItTasklists) |
|||
// .use(MarkdownItTOC) |
|||
|
|||
markdownContent: '' |
|||
} |
|||
}, |
|||
updated() { |
|||
const that = this |
|||
this.$nextTick(() => { |
|||
// 获取页面上的pre和code标签 |
|||
const codeBlocks = document.querySelectorAll('pre code') |
|||
codeBlocks.forEach((block) => { |
|||
let newDiv |
|||
// 获取code标签 |
|||
const preElement = block |
|||
// 获取code标签的父元素 |
|||
const parentElement = preElement.parentNode |
|||
// 获取parentElement下的第一个div元素 |
|||
const firstDiv = parentElement.querySelector('div') |
|||
// 检查是否找到了div元素 |
|||
if (!firstDiv) { |
|||
// 创建一个div |
|||
newDiv = document.createElement('div') |
|||
// 给div添加文字内容 |
|||
newDiv.innerText = '复制代码' |
|||
// 给div设置class样式 |
|||
newDiv.setAttribute('class', 'copyButton') |
|||
// 把div插入到code标签前面 |
|||
parentElement.insertBefore(newDiv, preElement) |
|||
// 给div添加点击事件 |
|||
newDiv.onclick = function() { |
|||
const textArea = document.createElement('textarea') |
|||
textArea.value = preElement.innerText |
|||
document.body.appendChild(textArea) |
|||
textArea.select() |
|||
document.execCommand('copy') |
|||
document.body.removeChild(textArea) |
|||
that.$message.success('复制成功') |
|||
} |
|||
} |
|||
}) |
|||
}) |
|||
}, |
|||
mounted() { |
|||
// const md = new MarkdownIt() |
|||
// console.log('md', md) |
|||
// this.markdownContent = md.render(this.markdownText2) |
|||
// console.log(' this.markdownContent', this.markdownContent) |
|||
}, |
|||
methods: { |
|||
// renderMdText(text) { |
|||
// // 生成html |
|||
// return this.markdownRender.render(text) |
|||
// } |
|||
renderMdText(text) { |
|||
// markdown转html |
|||
text = this.markdownRender.render(text) |
|||
text = this.renderMath(text) |
|||
// text = this.decodeHTMLEntities(text) // 手动解码 HTML 实体 |
|||
return text |
|||
}, |
|||
// decodeHTMLEntities(text) { |
|||
// const parser = new DOMParser() |
|||
// const doc = parser.parseFromString(text, 'text/html') |
|||
// return doc.documentElement.textContent |
|||
// }, |
|||
// markdown转latex |
|||
renderMath(html) { |
|||
// 匹配 $$...$$, \[...\], \(...\), and $...$ |
|||
const regex = /(\$\$([\s\S]+?)\$\$)|(\\\[([\s\S]+?)\\\])|(\\\(([\s\S]+?)\\\))|(\$([^\$]+?)\$)/g |
|||
return html.replace(regex, (match, p1, p2, p3, p4, p5, p6, p7, p8) => { |
|||
let latex |
|||
if (p2) { |
|||
// $$...$$ |
|||
latex = p2 |
|||
} else if (p4) { |
|||
// \[...\] |
|||
latex = p4 |
|||
} else if (p6) { |
|||
// \(...\) |
|||
latex = p6 |
|||
} else if (p8) { |
|||
// $...$ |
|||
latex = p8 |
|||
} |
|||
console.log('latex', latex) |
|||
if (latex) { |
|||
try { |
|||
return katex.renderToString(latex, { |
|||
throwOnError: false |
|||
}) |
|||
} catch (e) { |
|||
console.error('KaTeX rendering error:', e) |
|||
return match |
|||
} |
|||
} |
|||
return match |
|||
}) |
|||
}, |
|||
goToHtml() { |
|||
// 这里的 'test.html' 是你放在 public 目录下的 HTML 文件名称 |
|||
// window.location.href = 'report/annual.htm' |
|||
window.open('report/annual.htm', '_blank') |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.custom-main{ |
|||
display: flex; |
|||
justify-content: flex-start; |
|||
flex-wrap: wrap; |
|||
::v-deep .el-card{ |
|||
margin: 0 20px 20px 0; |
|||
width: calc(100% / 4 - 40px); |
|||
height: 100px; |
|||
line-height: 100px; |
|||
text-align: center; |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
|
|||
// .mdTextBox{ |
|||
// width: 1400px; |
|||
// ::v-deep h1{ |
|||
// font-size: 24px; |
|||
// line-height: 48px; |
|||
// font-weight: 800; |
|||
// } |
|||
// ::v-deep h2{ |
|||
// font-size: 22px; |
|||
// line-height: 42px; |
|||
// font-weight: 700; |
|||
// } |
|||
// ::v-deep h3{ |
|||
// font-size: 20px; |
|||
// line-height: 36px; |
|||
// font-weight: 600; |
|||
// } |
|||
// ::v-deep img{ |
|||
// width: 500px; |
|||
// } |
|||
// ::v-deep a{ |
|||
// color: #335fee; |
|||
// line-height: 20px; |
|||
// } |
|||
// ::v-deep p { |
|||
// line-height: 20px; |
|||
// } |
|||
// } |
|||
</style> |
|||
@ -0,0 +1,185 @@ |
|||
<template> |
|||
<div class="app-container" style="height: calc(100vh - 140px);"> |
|||
<el-table :data="tableData" style="width: 100%"> |
|||
<el-table-column prop="company_name" label="公司名称" width="150" align="center" /> |
|||
<el-table-column label="数据统计" align="center"> |
|||
<template slot-scope="scope"> |
|||
<el-table :data="scope.row.archive_types" style="width: 100%"> |
|||
<el-table-column prop="type_name" label="档案门类" width="150" align="center" /> |
|||
<el-table-column label="收集库" align="center"> |
|||
<el-table-column prop="collection.未归档" label="未归档" align="center" /> |
|||
<el-table-column prop="collection.归档中" label="归档中" align="center" /> |
|||
<el-table-column prop="collection.已装盒" label="已装盒" align="center" /> |
|||
<el-table-column prop="collection.未装盒" label="未装盒" align="center" /> |
|||
<el-table-column prop="collection.全部" label="全部" align="center" /> |
|||
</el-table-column> |
|||
<el-table-column label="管理库" align="center"> |
|||
<el-table-column prop="management.已装盒" label="已装盒" align="center" /> |
|||
<el-table-column prop="management.未装盒" label="未装盒" align="center" /> |
|||
<el-table-column prop="management.已入库" label="已入库" align="center" /> |
|||
<el-table-column prop="management.未入库" label="未入库" align="center" /> |
|||
<el-table-column prop="management.审批中" label="审批中" align="center" /> |
|||
<el-table-column prop="management.全部" label="全部" align="center" /> |
|||
</el-table-column> |
|||
</el-table> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
const tableData = [ |
|||
{ |
|||
'company_name': '武汉飞天智能', |
|||
'archive_types': [ |
|||
{ |
|||
'type_id': 1, |
|||
'type_name': '文书档案(文件)', |
|||
'collection': { |
|||
'未归档': 5, |
|||
'归档中': 0, |
|||
'已装盒': 1, |
|||
'未装盒': 4, |
|||
'全部': 5 |
|||
}, |
|||
'management': { |
|||
'已装盒': 3, |
|||
'未装盒': 29, |
|||
'已入库': 0, |
|||
'未入库': 32, |
|||
'审批中': 0, |
|||
'全部': 32 |
|||
} |
|||
}, |
|||
{ |
|||
'type_id': 2, |
|||
'type_name': '文书档案(案卷)', |
|||
'collection': { |
|||
'未归档': 1, |
|||
'归档中': 0, |
|||
'已装盒': 0, |
|||
'未装盒': 0, |
|||
'全部': 4 |
|||
}, |
|||
'management': { |
|||
'已装盒': 1, |
|||
'未装盒': 13, |
|||
'已入库': 0, |
|||
'未入库': 14, |
|||
'审批中': 0, |
|||
'全部': 14 |
|||
} |
|||
}, |
|||
{ |
|||
'type_id': 3, |
|||
'type_name': '科技档案项目', |
|||
'collection': { |
|||
'未归档': 5, |
|||
'归档中': 0, |
|||
'已装盒': 0, |
|||
'未装盒': 5, |
|||
'全部': 5 |
|||
}, |
|||
'management': { |
|||
'已装盒': 0, |
|||
'未装盒': 0, |
|||
'已入库': 0, |
|||
'未入库': 0, |
|||
'审批中': 0, |
|||
'全部': 0 |
|||
} |
|||
} |
|||
] |
|||
}, |
|||
{ |
|||
'company_name': '阅行客(武汉)科技', |
|||
'archive_types': [ |
|||
{ |
|||
'type_name': '文书档案(文件)', |
|||
'collection': { |
|||
'未归档': 5, |
|||
'归档中': 1, |
|||
'已装盒': 0, |
|||
'未装盒': 5, |
|||
'全部': 5 |
|||
}, |
|||
'management': { |
|||
'已装盒': 0, |
|||
'未装盒': 7, |
|||
'已入库': 0, |
|||
'未入库': 7, |
|||
'审批中': 0, |
|||
'全部': 7 |
|||
} |
|||
}, |
|||
{ |
|||
'type_name': '文书档案(案卷)', |
|||
'collection': { |
|||
'未归档': 4, |
|||
'归档中': 0, |
|||
'已装盒': 2, |
|||
'未装盒': 2, |
|||
'全部': 4 |
|||
}, |
|||
'management': { |
|||
'已装盒': 0, |
|||
'未装盒': 4, |
|||
'已入库': 0, |
|||
'未入库': 4, |
|||
'审批中': 0, |
|||
'全部': 4 |
|||
} |
|||
} |
|||
] |
|||
} |
|||
] |
|||
export default { |
|||
name: 'DataStatistics', |
|||
data() { |
|||
return { |
|||
tableData: tableData |
|||
} |
|||
}, |
|||
computed: { |
|||
}, |
|||
watch: { |
|||
}, |
|||
created() { |
|||
}, |
|||
mounted() { |
|||
}, |
|||
methods: { |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
::v-deep .el-table .cell{ |
|||
padding: 0 !important; |
|||
margin-left: -2px !important; |
|||
margin-top: -2px !important; |
|||
} |
|||
::v-deep .el-table .el-table__body-wrapper{ |
|||
// border-bottom: 1px solid #000; |
|||
// margin-top: -1px !important; |
|||
} |
|||
::v-deep .el-table .el-table__body-wrapper td.el-table__cell, |
|||
::v-deep .el-table .el-table__fixed-right td.el-table__cell { |
|||
padding: 0 !important; |
|||
border-left: 1px solid #000; |
|||
border-bottom: 1px solid #000; |
|||
border-right: 1px solid #000; |
|||
} |
|||
::v-deep.el-table .el-table__header-wrapper th.el-table__cell, |
|||
::v-deep.el-table .el-table__header th.el-table__cell{ |
|||
border: 1px solid #000; |
|||
// border-left: 1px solid yellow; |
|||
// border-top: 1px solid yellow; |
|||
// border-bottom: 1px solid yellow; |
|||
} |
|||
::v-deep .el-table td.el-table__cell div{ |
|||
// margin-left: -1px !important; |
|||
// border-bottom: 1px solid #000 !important; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,374 @@ |
|||
<template> |
|||
<div class="app-container"> |
|||
<div class="container-main" style="justify-content: flex-start;"> |
|||
<!--侧边部门数据--> |
|||
<div class="elect-cont-left"> |
|||
<div class="head-container"> |
|||
<el-input v-model="filterText" clearable size="small" placeholder="输入部门名称搜索" prefix-icon="el-icon-search" class="filter-item" /> |
|||
</div> |
|||
<el-tree ref="tree" v-loading="crud.loading" :data="fondsDatas" :props="defaultProps" :expand-on-click-node="false" :default-expanded-keys="defaultExpandedKeys" node-key="id" highlight-current :filter-node-method="filterNode" @node-click="handleNodeClick"> |
|||
<template |
|||
slot-scope="{node,data}" |
|||
class="custom-tree-node" |
|||
> |
|||
<el-tooltip |
|||
v-if="data.fondsName" |
|||
effect="dark" |
|||
:content="data.fondsName" |
|||
:enterable="false" |
|||
placement="left" |
|||
> |
|||
<span class="tree-text"> {{ data.fondsName }}</span> |
|||
</el-tooltip> |
|||
<span v-else class="tree-text"> {{ data.deptsName }}</span> |
|||
</template> |
|||
</el-tree> |
|||
</div> |
|||
<!--用户数据--> |
|||
<div class="elect-cont-right"> |
|||
<!--工具栏--> |
|||
<div class="head-container"> |
|||
<div class="head-search"> |
|||
<date-range-picker v-model="blurryTime" class="date-item" /> |
|||
<el-button class="filter-item filter-search" size="mini" type="success" icon="el-icon-search" @click="crud.toQuery">搜索</el-button> |
|||
<el-button v-if="crud.optShow.reset" class="filter-item filter-refresh" size="mini" type="warning" icon="el-icon-refresh-left" @click="resetQuery()">重置</el-button> |
|||
</div> |
|||
<crudOperation :permission="permission"> |
|||
<template v-slot:right> |
|||
<el-button :loading="crud.downloadLoading" size="mini" :disabled="crud.selections.length === 0" @click="doExport(crud.selections)"> |
|||
<i class="iconfont icon-daochu" /> |
|||
导出 |
|||
</el-button> |
|||
</template> |
|||
</crudOperation> |
|||
</div> |
|||
<div class="container-right"> |
|||
<span class="right-top-line" /> |
|||
<span class="left-bottom-line" /> |
|||
<el-table |
|||
:data="crud.data" |
|||
style="width: 100%" |
|||
> |
|||
<el-table-column prop="username" label="姓名" width="100" align="center" /> |
|||
<el-table-column prop="date" label="文书档案" align="center"> |
|||
<el-table-column prop="name" label="增加" width="60" /> |
|||
<el-table-column prop="province" label="删除" width="60" /> |
|||
<el-table-column prop="city" label="挂接" width="60" /> |
|||
<el-table-column prop="address" label="移交" width="60" /> |
|||
<el-table-column prop="zip" label="接收" width="60" /> |
|||
<el-table-column prop="city" label="打回" width="60" /> |
|||
<el-table-column prop="address" label="归档" width="60" /> |
|||
<el-table-column prop="zip" label="销毁" width="60" /> |
|||
<el-table-column prop="zip" label="推送" width="60" /> |
|||
</el-table-column> |
|||
<el-table-column prop="date" label="科技档案" align="center"> |
|||
<el-table-column prop="name" label="增加" width="60" /> |
|||
<el-table-column prop="province" label="删除" width="60" /> |
|||
<el-table-column prop="city" label="挂接" width="60" /> |
|||
<el-table-column prop="address" label="移交" width="60" /> |
|||
<el-table-column prop="zip" label="接收" width="60" /> |
|||
<el-table-column prop="city" label="打回" width="60" /> |
|||
<el-table-column prop="address" label="归档" width="60" /> |
|||
<el-table-column prop="zip" label="销毁" width="60" /> |
|||
<el-table-column prop="zip" label="推送" width="60" /> |
|||
</el-table-column> |
|||
<el-table-column prop="total" label="合计" align="center" /> |
|||
</el-table> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { getDepts, FetchSonDepts } from '@/api/system/dept' |
|||
import { FetchFondsAll } from '@/api/system/fonds' |
|||
import CRUD, { presenter, header, form, crud } from '@crud/crud' |
|||
import crudOperation from '@crud/CRUD.operation' |
|||
import DateRangePicker from '@/components/DateRangePicker' |
|||
import { mapGetters } from 'vuex' |
|||
import '@riophae/vue-treeselect/dist/vue-treeselect.css' |
|||
import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect' |
|||
import Vue from 'vue' |
|||
import { exportFile } from '@/utils/index' |
|||
import qs from 'qs' |
|||
|
|||
const defaultForm = { id: null } |
|||
|
|||
export default { |
|||
name: 'DataStatistics', |
|||
components: { crudOperation, DateRangePicker }, |
|||
cruds() { |
|||
return CRUD({ title: '档案统计', idField: 'userId', url: 'api/users/initUserList', sort: [], crudMethod: { }, optShow: { |
|||
add: false, |
|||
edit: false, |
|||
del: false, |
|||
reset: false, |
|||
download: false, |
|||
group: false |
|||
}}) |
|||
}, |
|||
mixins: [presenter(), header(), form(defaultForm), crud()], |
|||
data() { |
|||
return { |
|||
blurryTime: null, |
|||
fondsDatas: [], |
|||
fondsOptions: [], |
|||
lastValue: '', |
|||
leftFondsId: '', |
|||
leftDeptsId: '', |
|||
filterText: '', |
|||
defaultExpandedKeys: [], |
|||
defaultProps: { children: 'children', label: 'fondsName' }, |
|||
levelNumber: 0, |
|||
permission: { |
|||
add: ['admin', 'user:add'], |
|||
edit: ['admin', 'user:edit'], |
|||
del: ['admin', 'user:del'] |
|||
}, |
|||
tableData: [] |
|||
} |
|||
}, |
|||
computed: { |
|||
...mapGetters([ |
|||
'user', |
|||
'baseApi' |
|||
]) |
|||
}, |
|||
watch: { |
|||
filterText(val) { |
|||
this.$refs.tree.filter(val) |
|||
} |
|||
}, |
|||
created() { |
|||
}, |
|||
mounted: function() { |
|||
this.getFondsDatas() |
|||
}, |
|||
methods: { |
|||
getAutoNameUnknown(name) { |
|||
if (name.lastIndexOf('unknown') > -1) { |
|||
return name.split('(')[0] |
|||
} else { |
|||
return name |
|||
} |
|||
}, |
|||
resetQuery() { |
|||
this.crud.query.blurry = '' |
|||
this.blurryTime = null |
|||
this.crud.query.startTime = null |
|||
this.crud.query.endTime = null |
|||
this.crud.query.userStatus = null |
|||
this.crud.toQuery() |
|||
}, |
|||
[CRUD.HOOK.beforeRefresh]() { |
|||
if (this.blurryTime) { |
|||
this.crud.query.startTime = this.blurryTime[0] |
|||
this.crud.query.endTime = this.blurryTime[1] |
|||
} else { |
|||
this.crud.query.startTime = null |
|||
this.crud.query.endTime = null |
|||
} |
|||
}, |
|||
// 新增与编辑前做的操作 |
|||
[CRUD.HOOK.afterToCU](crud, form) { |
|||
}, |
|||
// 新增前将多选的值设置为空 |
|||
[CRUD.HOOK.beforeToAdd]() { |
|||
}, |
|||
// 初始化编辑时候的角色与岗位 |
|||
[CRUD.HOOK.beforeToEdit](crud, form) { |
|||
|
|||
}, |
|||
// 提交前做的操作 |
|||
[CRUD.HOOK.afterValidateCU](crud) { |
|||
return true |
|||
}, |
|||
clickRowHandler(row) { |
|||
this.$refs.table.clearSelection() |
|||
this.$refs.table.toggleRowSelection(row) |
|||
}, |
|||
// 切换部门 |
|||
handleNodeClick(data) { |
|||
console.log(data) |
|||
const selectedKey = this.$refs.tree.getCurrentNode() |
|||
// const selectedParentVal = this.$refs.tree.getNode(selectedKey).parent.data.id |
|||
console.log('selectedKey', selectedKey) |
|||
if (data.pid === 0) { |
|||
this.query.deptsId = null |
|||
this.query.deptsName = null |
|||
this.leftFondsId = null |
|||
this.leftDeptsId = null |
|||
} else { |
|||
if (data.fondsNo) { |
|||
const selectedParentVal = this.$refs.tree.getNode(selectedKey).data.id |
|||
this.query.fondsId = data.id |
|||
this.query.deptsId = null |
|||
this.query.deptsName = null |
|||
this.leftFondsId = selectedParentVal |
|||
} else { |
|||
const selectedParentVal = this.$refs.tree.getNode(selectedKey).parent.data.id |
|||
this.query.deptsId = data.id |
|||
this.query.deptsName = data.deptsName |
|||
this.leftFondsId = selectedParentVal |
|||
} |
|||
} |
|||
this.crud.toQuery() |
|||
}, |
|||
getFondsDatas() { |
|||
const parent = {} |
|||
parent.id = 0 |
|||
parent.fondsName = '全宗部门选择' |
|||
FetchFondsAll().then(res => { |
|||
res.forEach(item => { |
|||
item.children = item.depts |
|||
}) |
|||
parent.children = res |
|||
this.fondsDatas.push(parent) |
|||
this.fondsOptions = res |
|||
this.$nextTick(() => { |
|||
Vue.set(this.defaultExpandedKeys, 0, this.fondsDatas[0].children[0].children[0].id) |
|||
this.$refs.tree.setCurrentKey(this.fondsDatas[0].children[0].children[0].id) |
|||
this.handleNodeClick(this.fondsDatas[0].children[0].children[0]) |
|||
}) |
|||
console.log('this.fondsDatas', this.fondsDatas) |
|||
}) |
|||
}, |
|||
filterNode(value, data) { |
|||
if (!value) return true |
|||
if (data.deptsName) { |
|||
if (data.deptsName.includes(value)) { |
|||
return true |
|||
} else { |
|||
return false |
|||
} |
|||
} |
|||
}, |
|||
changeFondsValue(value) { |
|||
this.depts = [] |
|||
// console.log(this.lastValue) |
|||
// if (this.lastValue) { |
|||
// if (value !== this.lastValue) { |
|||
// this.form.dept.id = null |
|||
// } |
|||
// } |
|||
var obj = {} |
|||
obj = this.fondsOptions.find(function(item) { |
|||
return item.id === value |
|||
}) |
|||
const params = { |
|||
'fondsId': obj.id, |
|||
'fondsName': obj.fondsName, |
|||
'status': 1 |
|||
} |
|||
this.getDepts(params) |
|||
}, |
|||
getDepts(params) { |
|||
getDepts(params).then(res => { |
|||
this.depts = res.content.map(function(obj) { |
|||
if (obj.sonNum !== 0) { |
|||
obj.hasChildren = true |
|||
} else { |
|||
obj.hasChildren = false |
|||
} |
|||
if (obj.hasChildren) { |
|||
obj.children = null |
|||
} |
|||
return obj |
|||
}) |
|||
}) |
|||
}, |
|||
// 获取弹窗内部门数据 |
|||
loadDepts({ action, parentNode, callback }) { |
|||
if (action === LOAD_CHILDREN_OPTIONS) { |
|||
FetchSonDepts({ deptsId: parentNode.deptsId }).then(res => { |
|||
parentNode.children = res.map(function(obj) { |
|||
if (obj.sonNum !== 0) { |
|||
obj.hasChildren = true |
|||
} else { |
|||
obj.hasChildren = false |
|||
} |
|||
if (obj.hasChildren) { |
|||
obj.children = null |
|||
} |
|||
return obj |
|||
}) |
|||
setTimeout(() => { |
|||
callback() |
|||
}, 100) |
|||
}) |
|||
} |
|||
}, |
|||
doExport(data) { |
|||
console.log(data) |
|||
this.crud.downloadLoading = true |
|||
this.$confirm('此操作将导出所选数据' + '<span>你是否还要继续?</span>', '提示', { |
|||
confirmButtonText: '继续', |
|||
cancelButtonText: '取消', |
|||
type: 'warning', |
|||
dangerouslyUseHTMLString: true |
|||
}).then(() => { |
|||
const ids = [] |
|||
data.forEach(val => { |
|||
ids.push(val.userId) |
|||
}) |
|||
const params = { |
|||
'deptsIds': ids |
|||
} |
|||
exportFile(this.baseApi + '/api/users/download?' + qs.stringify(params, { indices: false })) |
|||
this.crud.downloadLoading = false |
|||
}).catch(() => { |
|||
}) |
|||
}, |
|||
checkboxT(row, rowIndex) { |
|||
return row.userId !== this.user.id |
|||
}, |
|||
fondsNormalizer(node) { |
|||
if (node.children && !node.children.length) { |
|||
delete node.children |
|||
} |
|||
return { |
|||
id: node.id, |
|||
label: node.fondsName, |
|||
children: node.children |
|||
} |
|||
}, |
|||
normalizer(node) { |
|||
if (node.children && !node.children.length) { |
|||
delete node.children |
|||
} |
|||
return { |
|||
id: node.deptsId, |
|||
label: node.deptsName, |
|||
children: node.children |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
::v-deep .el-tree{ |
|||
.el-tree-node__content{ |
|||
font-size: 14px; |
|||
color: #545B65; |
|||
.tree-text{ |
|||
font-size: 16px; |
|||
font-weight: 600; |
|||
color: #0C0E1E; |
|||
} |
|||
} |
|||
.el-tree-node__children{ |
|||
.tree-text { |
|||
font-size: 14px !important; |
|||
font-weight: normal; |
|||
text-overflow: ellipsis; |
|||
overflow: hidden; |
|||
white-space: nowrap; |
|||
display: inline-block; |
|||
min-width: 170px; |
|||
color: #545B65; |
|||
} |
|||
} |
|||
} |
|||
</style> |
|||
@ -0,0 +1,27 @@ |
|||
<template> |
|||
<div v-loading="loading" :style="'height:'+ height"> |
|||
<iframe :src="src" frameborder="no" style="width: 100%;height: 100%" scrolling="auto" /> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
export default { |
|||
name: 'Ureport', |
|||
data() { |
|||
return { |
|||
src: '/ureport/designer', |
|||
height: document.documentElement.clientHeight - 94.5 + 'px;', |
|||
loading: true |
|||
} |
|||
}, |
|||
mounted: function() { |
|||
setTimeout(() => { |
|||
this.loading = false |
|||
}, 230) |
|||
const that = this |
|||
window.onresize = function temp() { |
|||
that.height = document.documentElement.clientHeight - 94.5 + 'px;' |
|||
} |
|||
console.log('8888888') |
|||
} |
|||
} |
|||
</script> |
|||