zdg #92
|
@ -7,6 +7,8 @@ VITE_APP_ENV = 'development'
|
|||
# AIx融合数字管理系统/开发环境
|
||||
VITE_APP_BASE_API = '/dev-api'
|
||||
|
||||
VITE_APP_DOMAIN = 'file.ysaix.com'
|
||||
|
||||
VITE_APP_UPLOAD_API = 'http://192.168.2.52:7863'
|
||||
|
||||
VITE_APP_RES_FILE_PATH = 'https://file.ysaix.com:7868/src/assets/textbook/booktxt/'
|
||||
|
|
|
@ -7,6 +7,8 @@ VITE_APP_ENV = 'production'
|
|||
# AIx融合数字管理系统/生产环境
|
||||
VITE_APP_BASE_API = 'https://file.ysaix.com:7868/prod-api'
|
||||
|
||||
VITE_APP_DOMAIN = 'file.ysaix.com'
|
||||
|
||||
VITE_APP_UPLOAD_API = 'https://file.ysaix.com:7868/prod-api'
|
||||
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli
|
||||
|
|
|
@ -24,8 +24,8 @@ export default defineConfig({
|
|||
server: {
|
||||
proxy: {
|
||||
'/dev-api': {
|
||||
// target: 'http://27.128.240.72:7865',
|
||||
target: 'http://192.168.2.52:7863',
|
||||
target: 'http://27.128.240.72:7865',
|
||||
// target: 'http://192.168.2.52:7863',
|
||||
changeOrigin: true,
|
||||
rewrite: (p) => p.replace(/^\/dev-api/, '')
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
"@element-plus/icons-vue": "^2.3.1",
|
||||
"@vitejs/plugin-vue-jsx": "^4.0.0",
|
||||
"@vueuse/core": "^10.11.0",
|
||||
"cropperjs": "^1.6.2",
|
||||
"crypto-js": "^4.2.0",
|
||||
"electron-dl-manager": "^3.0.0",
|
||||
"electron-log": "^5.1.7",
|
||||
|
@ -39,7 +40,6 @@
|
|||
"pinia": "^2.1.7",
|
||||
"pinia-plugin-persistedstate": "^3.2.1",
|
||||
"spark-md5": "^3.0.2",
|
||||
"vue-cropper": "^1.1.4",
|
||||
"vue-router": "^4.4.0",
|
||||
"xlsx": "^0.18.5"
|
||||
},
|
||||
|
|
|
@ -108,8 +108,6 @@ let linkWindow
|
|||
async function createLinkWin(data) {
|
||||
if (linkWindow) return
|
||||
linkWindow = new BrowserWindow({
|
||||
width: 650,
|
||||
height: 500,
|
||||
show: false,
|
||||
frame: true,
|
||||
maximizable: true,
|
||||
|
@ -118,7 +116,7 @@ async function createLinkWin(data) {
|
|||
webPreferences: {
|
||||
sandbox: false,
|
||||
nodeIntegration: true,
|
||||
worldSafeExecuteJavaScript: true,
|
||||
worldSafeExecuteJavaScript: true,
|
||||
contextIsolation: true
|
||||
}
|
||||
})
|
||||
|
@ -171,7 +169,7 @@ app.on('ready', () => {
|
|||
}
|
||||
if (mainWindow) {
|
||||
mainWindow.close() // 先发出这个关闭指令
|
||||
setTimeout(() => { //
|
||||
setTimeout(() => { //
|
||||
mainWindow.destroy()
|
||||
}, 200);
|
||||
}
|
||||
|
@ -211,7 +209,7 @@ app.on('ready', () => {
|
|||
|
||||
// 打开-登录窗口
|
||||
createLoginWindow()
|
||||
|
||||
|
||||
app.on('activate', function () {
|
||||
if (BrowserWindow.getAllWindows().length === 0) createLoginWindow()
|
||||
})
|
||||
|
|
|
@ -9,7 +9,6 @@ export const listEvaluation = (params)=> {
|
|||
})
|
||||
}
|
||||
|
||||
|
||||
export const addFileToPrepare = (params) => {
|
||||
return request({
|
||||
url: '/smarttalk/file/addFileToPrepare',
|
||||
|
@ -17,3 +16,4 @@ export const addFileToPrepare = (params) => {
|
|||
params
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
// 查询classwork列表
|
||||
export function homeworklist(params) {
|
||||
return request({
|
||||
url: '/education/classwork/list',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 查询entpcourse列表
|
||||
export function listEntpcourse(query) {
|
||||
return request({
|
||||
url: '/education/entpcourse/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
|
@ -0,0 +1,539 @@
|
|||
/* Logo 字体 */
|
||||
@font-face {
|
||||
font-family: "iconfont logo";
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-family: "iconfont logo";
|
||||
font-size: 160px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* tabs */
|
||||
.nav-tabs {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-more {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
#tabs {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
#tabs li {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
border-bottom: 2px solid transparent;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: -1px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
|
||||
#tabs .active {
|
||||
border-bottom-color: #f00;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.tab-container .content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* 页面布局 */
|
||||
.main {
|
||||
padding: 30px 100px;
|
||||
width: 960px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.main .logo {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
margin-bottom: 30px;
|
||||
line-height: 1;
|
||||
height: 110px;
|
||||
margin-top: -50px;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.main .logo a {
|
||||
font-size: 160px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.helps {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.helps pre {
|
||||
padding: 20px;
|
||||
margin: 10px 0;
|
||||
border: solid 1px #e7e1cd;
|
||||
background-color: #fffdef;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.icon_lists {
|
||||
width: 100% !important;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.icon_lists li {
|
||||
width: 100px;
|
||||
margin-bottom: 10px;
|
||||
margin-right: 20px;
|
||||
text-align: center;
|
||||
list-style: none !important;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.icon_lists li .code-name {
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.icon_lists .icon {
|
||||
display: block;
|
||||
height: 100px;
|
||||
line-height: 100px;
|
||||
font-size: 42px;
|
||||
margin: 10px auto;
|
||||
color: #333;
|
||||
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
-moz-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
transition: font-size 0.25s linear, width 0.25s linear;
|
||||
}
|
||||
|
||||
.icon_lists .icon:hover {
|
||||
font-size: 100px;
|
||||
}
|
||||
|
||||
.icon_lists .svg-icon {
|
||||
/* 通过设置 font-size 来改变图标大小 */
|
||||
width: 1em;
|
||||
/* 图标和文字相邻时,垂直对齐 */
|
||||
vertical-align: -0.15em;
|
||||
/* 通过设置 color 来改变 SVG 的颜色/fill */
|
||||
fill: currentColor;
|
||||
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
|
||||
normalize.css 中也包含这行 */
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.icon_lists li .name,
|
||||
.icon_lists li .code-name {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* markdown 样式 */
|
||||
.markdown {
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.markdown img {
|
||||
vertical-align: middle;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
color: #404040;
|
||||
font-weight: 500;
|
||||
line-height: 40px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown h2,
|
||||
.markdown h3,
|
||||
.markdown h4,
|
||||
.markdown h5,
|
||||
.markdown h6 {
|
||||
color: #404040;
|
||||
margin: 1.6em 0 0.6em 0;
|
||||
font-weight: 500;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.markdown h2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.markdown h3 {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.markdown h4 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.markdown h5 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown h6 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown hr {
|
||||
height: 1px;
|
||||
border: 0;
|
||||
background: #e9e9e9;
|
||||
margin: 16px 0;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown p {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown>p,
|
||||
.markdown>blockquote,
|
||||
.markdown>.highlight,
|
||||
.markdown>ol,
|
||||
.markdown>ul {
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.markdown ul>li {
|
||||
list-style: circle;
|
||||
}
|
||||
|
||||
.markdown>ul li,
|
||||
.markdown blockquote ul>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown>ul li p,
|
||||
.markdown>ol li p {
|
||||
margin: 0.6em 0;
|
||||
}
|
||||
|
||||
.markdown ol>li {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
.markdown>ol li,
|
||||
.markdown blockquote ol>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown code {
|
||||
margin: 0 3px;
|
||||
padding: 0 5px;
|
||||
background: #eee;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.markdown strong,
|
||||
.markdown b {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0px;
|
||||
empty-cells: show;
|
||||
border: 1px solid #e9e9e9;
|
||||
width: 95%;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table th,
|
||||
.markdown>table td {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 8px 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
background: #F7F7F7;
|
||||
}
|
||||
|
||||
.markdown blockquote {
|
||||
font-size: 90%;
|
||||
color: #999;
|
||||
border-left: 4px solid #e9e9e9;
|
||||
padding-left: 0.8em;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown blockquote p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.markdown .anchor {
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.markdown .waiting {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.markdown h1:hover .anchor,
|
||||
.markdown h2:hover .anchor,
|
||||
.markdown h3:hover .anchor,
|
||||
.markdown h4:hover .anchor,
|
||||
.markdown h5:hover .anchor,
|
||||
.markdown h6:hover .anchor {
|
||||
opacity: 1;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.markdown>br,
|
||||
.markdown>p>br {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
background: white;
|
||||
padding: 0.5em;
|
||||
color: #333333;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-meta {
|
||||
color: #969896;
|
||||
}
|
||||
|
||||
.hljs-string,
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-strong,
|
||||
.hljs-emphasis,
|
||||
.hljs-quote {
|
||||
color: #df5000;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-type {
|
||||
color: #a71d5d;
|
||||
}
|
||||
|
||||
.hljs-literal,
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-attribute {
|
||||
color: #0086b3;
|
||||
}
|
||||
|
||||
.hljs-section,
|
||||
.hljs-name {
|
||||
color: #63a35c;
|
||||
}
|
||||
|
||||
.hljs-tag {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-attr,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class,
|
||||
.hljs-selector-attr,
|
||||
.hljs-selector-pseudo {
|
||||
color: #795da3;
|
||||
}
|
||||
|
||||
.hljs-addition {
|
||||
color: #55a532;
|
||||
background-color: #eaffea;
|
||||
}
|
||||
|
||||
.hljs-deletion {
|
||||
color: #bd2c00;
|
||||
background-color: #ffecec;
|
||||
}
|
||||
|
||||
.hljs-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* 代码高亮 */
|
||||
/* PrismJS 1.15.0
|
||||
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
|
||||
/**
|
||||
* prism.js default theme for JavaScript, CSS and HTML
|
||||
* Based on dabblet (http://dabblet.com)
|
||||
* @author Lea Verou
|
||||
*/
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
color: black;
|
||||
background: none;
|
||||
text-shadow: 0 1px white;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::-moz-selection,
|
||||
pre[class*="language-"] ::-moz-selection,
|
||||
code[class*="language-"]::-moz-selection,
|
||||
code[class*="language-"] ::-moz-selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::selection,
|
||||
pre[class*="language-"] ::selection,
|
||||
code[class*="language-"]::selection,
|
||||
code[class*="language-"] ::selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
@media print {
|
||||
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
text-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
pre[class*="language-"] {
|
||||
padding: 1em;
|
||||
margin: .5em 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
:not(pre)>code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
background: #f5f2f0;
|
||||
}
|
||||
|
||||
/* Inline code */
|
||||
:not(pre)>code[class*="language-"] {
|
||||
padding: .1em;
|
||||
border-radius: .3em;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.token.comment,
|
||||
.token.prolog,
|
||||
.token.doctype,
|
||||
.token.cdata {
|
||||
color: slategray;
|
||||
}
|
||||
|
||||
.token.punctuation {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.namespace {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.token.property,
|
||||
.token.tag,
|
||||
.token.boolean,
|
||||
.token.number,
|
||||
.token.constant,
|
||||
.token.symbol,
|
||||
.token.deleted {
|
||||
color: #905;
|
||||
}
|
||||
|
||||
.token.selector,
|
||||
.token.attr-name,
|
||||
.token.string,
|
||||
.token.char,
|
||||
.token.builtin,
|
||||
.token.inserted {
|
||||
color: #690;
|
||||
}
|
||||
|
||||
.token.operator,
|
||||
.token.entity,
|
||||
.token.url,
|
||||
.language-css .token.string,
|
||||
.style .token.string {
|
||||
color: #9a6e3a;
|
||||
background: hsla(0, 0%, 100%, .5);
|
||||
}
|
||||
|
||||
.token.atrule,
|
||||
.token.attr-value,
|
||||
.token.keyword {
|
||||
color: #07a;
|
||||
}
|
||||
|
||||
.token.function,
|
||||
.token.class-name {
|
||||
color: #DD4A68;
|
||||
}
|
||||
|
||||
.token.regex,
|
||||
.token.important,
|
||||
.token.variable {
|
||||
color: #e90;
|
||||
}
|
||||
|
||||
.token.important,
|
||||
.token.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.token.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.token.entity {
|
||||
cursor: help;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,9 +1,9 @@
|
|||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 2794390 */
|
||||
src: url('iconfont.woff2?t=1721815727687') format('woff2'),
|
||||
url('iconfont.woff?t=1721815727687') format('woff'),
|
||||
url('iconfont.ttf?t=1721815727687') format('truetype'),
|
||||
url('iconfont.svg?t=1721815727687#iconfont') format('svg');
|
||||
src: url('iconfont.woff2?t=1722393125520') format('woff2'),
|
||||
url('iconfont.woff?t=1722393125520') format('woff'),
|
||||
url('iconfont.ttf?t=1722393125520') format('truetype'),
|
||||
url('iconfont.svg?t=1722393125520#iconfont') format('svg');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
|
@ -14,6 +14,462 @@
|
|||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-icon:before {
|
||||
content: "\e640";
|
||||
}
|
||||
|
||||
.icon-ke:before {
|
||||
content: "\e641";
|
||||
}
|
||||
|
||||
.icon-jiaocaixuanze:before {
|
||||
content: "\e642";
|
||||
}
|
||||
|
||||
.icon-organization-framework-line:before {
|
||||
content: "\e9fe";
|
||||
}
|
||||
|
||||
.icon-jiaocai:before {
|
||||
content: "\e67b";
|
||||
}
|
||||
|
||||
.icon-zaixiankaoshi:before {
|
||||
content: "\e643";
|
||||
}
|
||||
|
||||
.icon-mubiaohuizhi:before {
|
||||
content: "\e652";
|
||||
}
|
||||
|
||||
.icon-tupushujuyuan:before {
|
||||
content: "\e653";
|
||||
}
|
||||
|
||||
.icon-mubiao:before {
|
||||
content: "\e723";
|
||||
}
|
||||
|
||||
.icon-zhishitupu:before {
|
||||
content: "\e644";
|
||||
}
|
||||
|
||||
.icon-tupu:before {
|
||||
content: "\f48c";
|
||||
}
|
||||
|
||||
.icon-zhongwenwenxian:before {
|
||||
content: "\e645";
|
||||
}
|
||||
|
||||
.icon-tupu1:before {
|
||||
content: "\e952";
|
||||
}
|
||||
|
||||
.icon-kuangjia:before {
|
||||
content: "\e6ea";
|
||||
}
|
||||
|
||||
.icon-wenxian:before {
|
||||
content: "\e7b6";
|
||||
}
|
||||
|
||||
.icon-tupu-01:before {
|
||||
content: "\e679";
|
||||
}
|
||||
|
||||
.icon-tupu2:before {
|
||||
content: "\e69c";
|
||||
}
|
||||
|
||||
.icon-tupu3:before {
|
||||
content: "\e6a7";
|
||||
}
|
||||
|
||||
.icon-zuzhikuangjia:before {
|
||||
content: "\e646";
|
||||
}
|
||||
|
||||
.icon-tupu4:before {
|
||||
content: "\e6d5";
|
||||
}
|
||||
|
||||
.icon-a-kaoshi1:before {
|
||||
content: "\eb13";
|
||||
}
|
||||
|
||||
.icon-fankui:before {
|
||||
content: "\e738";
|
||||
}
|
||||
|
||||
.icon-tiku:before {
|
||||
content: "\e621";
|
||||
}
|
||||
|
||||
.icon-ldc-position:before {
|
||||
content: "\e63a";
|
||||
}
|
||||
|
||||
.icon-sucai:before {
|
||||
content: "\e620";
|
||||
}
|
||||
|
||||
.icon-pengyou:before {
|
||||
content: "\e61a";
|
||||
}
|
||||
|
||||
.icon-zuoye:before {
|
||||
content: "\e61c";
|
||||
}
|
||||
|
||||
.icon-jiaoxuefenxi:before {
|
||||
content: "\e605";
|
||||
}
|
||||
|
||||
.icon-wenjianjia:before {
|
||||
content: "\ec17";
|
||||
}
|
||||
|
||||
.icon-jiaoxueyanxiu:before {
|
||||
content: "\e60d";
|
||||
}
|
||||
|
||||
.icon-jiaoxuesheji:before {
|
||||
content: "\e606";
|
||||
}
|
||||
|
||||
.icon-zhuanyeziyuanku:before {
|
||||
content: "\e651";
|
||||
}
|
||||
|
||||
.icon-pengyouquan:before {
|
||||
content: "\e616";
|
||||
}
|
||||
|
||||
.icon-dangqianhuihua:before {
|
||||
content: "\e675";
|
||||
}
|
||||
|
||||
.icon-yanjiushi:before {
|
||||
content: "\e607";
|
||||
}
|
||||
|
||||
.icon-gongzuotai:before {
|
||||
content: "\e676";
|
||||
}
|
||||
|
||||
.icon-lunwen:before {
|
||||
content: "\e60e";
|
||||
}
|
||||
|
||||
.icon-decheng_xianshangxuexi:before {
|
||||
content: "\e624";
|
||||
}
|
||||
|
||||
.icon-jitibeike-:before {
|
||||
content: "\e65b";
|
||||
}
|
||||
|
||||
.icon-keti:before {
|
||||
content: "\e6fe";
|
||||
}
|
||||
|
||||
.icon-pengyouquan1:before {
|
||||
content: "\e635";
|
||||
}
|
||||
|
||||
.icon-beike1:before {
|
||||
content: "\e61b";
|
||||
}
|
||||
|
||||
.icon-fenxiang:before {
|
||||
content: "\e611";
|
||||
}
|
||||
|
||||
.icon-zhucetianjiahaoyou:before {
|
||||
content: "\e8ca";
|
||||
}
|
||||
|
||||
.icon-duoqudaojicheng:before {
|
||||
content: "\e696";
|
||||
}
|
||||
|
||||
.icon-yewukaizhan:before {
|
||||
content: "\e612";
|
||||
}
|
||||
|
||||
.icon-fankui1:before {
|
||||
content: "\e6fa";
|
||||
}
|
||||
|
||||
.icon-shezhi:before {
|
||||
content: "\e614";
|
||||
}
|
||||
|
||||
.icon-chayue:before {
|
||||
content: "\e617";
|
||||
}
|
||||
|
||||
.icon-baogao:before {
|
||||
content: "\e630";
|
||||
}
|
||||
|
||||
.icon-xuekezuhe:before {
|
||||
content: "\e625";
|
||||
}
|
||||
|
||||
.icon-fenxiang1:before {
|
||||
content: "\eb24";
|
||||
}
|
||||
|
||||
.icon-tongzhizhongxin:before {
|
||||
content: "\eb43";
|
||||
}
|
||||
|
||||
.icon-xiajia:before {
|
||||
content: "\e618";
|
||||
}
|
||||
|
||||
.icon-shengchanguochengguanli:before {
|
||||
content: "\e62a";
|
||||
}
|
||||
|
||||
.icon-kejian:before {
|
||||
content: "\e64a";
|
||||
}
|
||||
|
||||
.icon-liulan:before {
|
||||
content: "\e648";
|
||||
}
|
||||
|
||||
.icon-fabiao:before {
|
||||
content: "\e654";
|
||||
}
|
||||
|
||||
.icon-kecheng:before {
|
||||
content: "\e619";
|
||||
}
|
||||
|
||||
.icon-bianji1:before {
|
||||
content: "\e61d";
|
||||
}
|
||||
|
||||
.icon-pingjia:before {
|
||||
content: "\e628";
|
||||
}
|
||||
|
||||
.icon-zonghezhenduan:before {
|
||||
content: "\e6a0";
|
||||
}
|
||||
|
||||
.icon-banji:before {
|
||||
content: "\e71e";
|
||||
}
|
||||
|
||||
.icon-tousuyujianyi:before {
|
||||
content: "\e729";
|
||||
}
|
||||
|
||||
.icon-jiaoliu:before {
|
||||
content: "\e6b8";
|
||||
}
|
||||
|
||||
.icon-pingyi:before {
|
||||
content: "\e79a";
|
||||
}
|
||||
|
||||
.icon-xueqingfenxi:before {
|
||||
content: "\e67a";
|
||||
}
|
||||
|
||||
.icon-check:before {
|
||||
content: "\e622";
|
||||
}
|
||||
|
||||
.icon-upload:before {
|
||||
content: "\e634";
|
||||
}
|
||||
|
||||
.icon-taolun:before {
|
||||
content: "\e61e";
|
||||
}
|
||||
|
||||
.icon-tujing:before {
|
||||
content: "\e947";
|
||||
}
|
||||
|
||||
.icon-zixun:before {
|
||||
content: "\e6b3";
|
||||
}
|
||||
|
||||
.icon-liulan1:before {
|
||||
content: "\e6b4";
|
||||
}
|
||||
|
||||
.icon-yaosu:before {
|
||||
content: "\e68c";
|
||||
}
|
||||
|
||||
.icon-baogao1:before {
|
||||
content: "\e62e";
|
||||
}
|
||||
|
||||
.icon-shoucang:before {
|
||||
content: "\e61f";
|
||||
}
|
||||
|
||||
.icon-shenhe:before {
|
||||
content: "\e623";
|
||||
}
|
||||
|
||||
.icon-w_duoxuanti:before {
|
||||
content: "\e677";
|
||||
}
|
||||
|
||||
.icon-fenxi:before {
|
||||
content: "\e76d";
|
||||
}
|
||||
|
||||
.icon-kanshu:before {
|
||||
content: "\e626";
|
||||
}
|
||||
|
||||
.icon-qwe:before {
|
||||
content: "\e627";
|
||||
}
|
||||
|
||||
.icon-jiancha:before {
|
||||
content: "\e6c1";
|
||||
}
|
||||
|
||||
.icon-qunzu:before {
|
||||
content: "\e62b";
|
||||
}
|
||||
|
||||
.icon-zuopin:before {
|
||||
content: "\e6a9";
|
||||
}
|
||||
|
||||
.icon-shuyi_jiaoxueguanli:before {
|
||||
content: "\e678";
|
||||
}
|
||||
|
||||
.icon-liangsuan:before {
|
||||
content: "\e657";
|
||||
}
|
||||
|
||||
.icon-business-report:before {
|
||||
content: "\e880";
|
||||
}
|
||||
|
||||
.icon-xiangmupingshen:before {
|
||||
content: "\e742";
|
||||
}
|
||||
|
||||
.icon-xiangmushenbao:before {
|
||||
content: "\e743";
|
||||
}
|
||||
|
||||
.icon-xiajia1:before {
|
||||
content: "\e62c";
|
||||
}
|
||||
|
||||
.icon-a-fenxiang2:before {
|
||||
content: "\e62f";
|
||||
}
|
||||
|
||||
.icon-icon_kaoshifenxi:before {
|
||||
content: "\e6d3";
|
||||
}
|
||||
|
||||
.icon-a-ketangshilu1:before {
|
||||
content: "\e631";
|
||||
}
|
||||
|
||||
.icon-tubiao_moshileixingpeizhi:before {
|
||||
content: "\e632";
|
||||
}
|
||||
|
||||
.icon-xiezuo:before {
|
||||
content: "\e633";
|
||||
}
|
||||
|
||||
.icon-buzhi:before {
|
||||
content: "\e636";
|
||||
}
|
||||
|
||||
.icon-ziyuanfenxi:before {
|
||||
content: "\e637";
|
||||
}
|
||||
|
||||
.icon-shoucang1:before {
|
||||
content: "\e638";
|
||||
}
|
||||
|
||||
.icon-iconku-zhuanqu-:before {
|
||||
content: "\e649";
|
||||
}
|
||||
|
||||
.icon-PPT:before {
|
||||
content: "\e639";
|
||||
}
|
||||
|
||||
.icon-fabiaolunwen:before {
|
||||
content: "\e772";
|
||||
}
|
||||
|
||||
.icon-xiezuo1:before {
|
||||
content: "\e63b";
|
||||
}
|
||||
|
||||
.icon-fenxi1:before {
|
||||
content: "\e63c";
|
||||
}
|
||||
|
||||
.icon-kechengziyuan:before {
|
||||
content: "\e6e9";
|
||||
}
|
||||
|
||||
.icon-36zuoyepingtai:before {
|
||||
content: "\e699";
|
||||
}
|
||||
|
||||
.icon-jiekebiaozhunbijishu:before {
|
||||
content: "\e63d";
|
||||
}
|
||||
|
||||
.icon-xunzhang:before {
|
||||
content: "\e63e";
|
||||
}
|
||||
|
||||
.icon-jiaocaizhengding:before {
|
||||
content: "\e6a4";
|
||||
}
|
||||
|
||||
.icon-xinzengmoxing:before {
|
||||
content: "\e7b8";
|
||||
}
|
||||
|
||||
.icon-a-biaozhangxunzhangyingxiong:before {
|
||||
content: "\e79d";
|
||||
}
|
||||
|
||||
.icon-xunzhang1:before {
|
||||
content: "\e63f";
|
||||
}
|
||||
|
||||
.icon-paizhao-xianxing:before {
|
||||
content: "\e8d1";
|
||||
}
|
||||
|
||||
.icon-zhuye2:before {
|
||||
content: "\e604";
|
||||
}
|
||||
|
||||
.icon-zuoye1:before {
|
||||
content: "\e610";
|
||||
}
|
||||
|
||||
.icon-xiazai9:before {
|
||||
content: "\e60b";
|
||||
}
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -5,6 +5,804 @@
|
|||
"css_prefix_text": "icon-",
|
||||
"description": "",
|
||||
"glyphs": [
|
||||
{
|
||||
"icon_id": "680440",
|
||||
"name": "教材",
|
||||
"font_class": "icon",
|
||||
"unicode": "e640",
|
||||
"unicode_decimal": 58944
|
||||
},
|
||||
{
|
||||
"icon_id": "3069674",
|
||||
"name": "课",
|
||||
"font_class": "ke",
|
||||
"unicode": "e641",
|
||||
"unicode_decimal": 58945
|
||||
},
|
||||
{
|
||||
"icon_id": "4287869",
|
||||
"name": "教材选择",
|
||||
"font_class": "jiaocaixuanze",
|
||||
"unicode": "e642",
|
||||
"unicode_decimal": 58946
|
||||
},
|
||||
{
|
||||
"icon_id": "6235034",
|
||||
"name": "组织框架",
|
||||
"font_class": "organization-framework-line",
|
||||
"unicode": "e9fe",
|
||||
"unicode_decimal": 59902
|
||||
},
|
||||
{
|
||||
"icon_id": "10900222",
|
||||
"name": "教材",
|
||||
"font_class": "jiaocai",
|
||||
"unicode": "e67b",
|
||||
"unicode_decimal": 59003
|
||||
},
|
||||
{
|
||||
"icon_id": "12820192",
|
||||
"name": "在线考试",
|
||||
"font_class": "zaixiankaoshi",
|
||||
"unicode": "e643",
|
||||
"unicode_decimal": 58947
|
||||
},
|
||||
{
|
||||
"icon_id": "12975221",
|
||||
"name": "目标绘制",
|
||||
"font_class": "mubiaohuizhi",
|
||||
"unicode": "e652",
|
||||
"unicode_decimal": 58962
|
||||
},
|
||||
{
|
||||
"icon_id": "15222476",
|
||||
"name": "图谱数据源",
|
||||
"font_class": "tupushujuyuan",
|
||||
"unicode": "e653",
|
||||
"unicode_decimal": 58963
|
||||
},
|
||||
{
|
||||
"icon_id": "18455976",
|
||||
"name": "目标",
|
||||
"font_class": "mubiao",
|
||||
"unicode": "e723",
|
||||
"unicode_decimal": 59171
|
||||
},
|
||||
{
|
||||
"icon_id": "22387410",
|
||||
"name": "知识图谱",
|
||||
"font_class": "zhishitupu",
|
||||
"unicode": "e644",
|
||||
"unicode_decimal": 58948
|
||||
},
|
||||
{
|
||||
"icon_id": "23514020",
|
||||
"name": "图谱",
|
||||
"font_class": "tupu",
|
||||
"unicode": "f48c",
|
||||
"unicode_decimal": 62604
|
||||
},
|
||||
{
|
||||
"icon_id": "24204139",
|
||||
"name": "中文文献",
|
||||
"font_class": "zhongwenwenxian",
|
||||
"unicode": "e645",
|
||||
"unicode_decimal": 58949
|
||||
},
|
||||
{
|
||||
"icon_id": "25426189",
|
||||
"name": "图谱",
|
||||
"font_class": "tupu1",
|
||||
"unicode": "e952",
|
||||
"unicode_decimal": 59730
|
||||
},
|
||||
{
|
||||
"icon_id": "25597826",
|
||||
"name": "框架",
|
||||
"font_class": "kuangjia",
|
||||
"unicode": "e6ea",
|
||||
"unicode_decimal": 59114
|
||||
},
|
||||
{
|
||||
"icon_id": "25843549",
|
||||
"name": "文献",
|
||||
"font_class": "wenxian",
|
||||
"unicode": "e7b6",
|
||||
"unicode_decimal": 59318
|
||||
},
|
||||
{
|
||||
"icon_id": "26904934",
|
||||
"name": "122-图谱",
|
||||
"font_class": "tupu-01",
|
||||
"unicode": "e679",
|
||||
"unicode_decimal": 59001
|
||||
},
|
||||
{
|
||||
"icon_id": "28551525",
|
||||
"name": "图谱",
|
||||
"font_class": "tupu2",
|
||||
"unicode": "e69c",
|
||||
"unicode_decimal": 59036
|
||||
},
|
||||
{
|
||||
"icon_id": "29570352",
|
||||
"name": "图谱",
|
||||
"font_class": "tupu3",
|
||||
"unicode": "e6a7",
|
||||
"unicode_decimal": 59047
|
||||
},
|
||||
{
|
||||
"icon_id": "31509204",
|
||||
"name": "组织框架",
|
||||
"font_class": "zuzhikuangjia",
|
||||
"unicode": "e646",
|
||||
"unicode_decimal": 58950
|
||||
},
|
||||
{
|
||||
"icon_id": "34748859",
|
||||
"name": "图谱",
|
||||
"font_class": "tupu4",
|
||||
"unicode": "e6d5",
|
||||
"unicode_decimal": 59093
|
||||
},
|
||||
{
|
||||
"icon_id": "35203463",
|
||||
"name": "考试 (1)",
|
||||
"font_class": "a-kaoshi1",
|
||||
"unicode": "eb13",
|
||||
"unicode_decimal": 60179
|
||||
},
|
||||
{
|
||||
"icon_id": "577336",
|
||||
"name": "反馈",
|
||||
"font_class": "fankui",
|
||||
"unicode": "e738",
|
||||
"unicode_decimal": 59192
|
||||
},
|
||||
{
|
||||
"icon_id": "1447760",
|
||||
"name": "题库",
|
||||
"font_class": "tiku",
|
||||
"unicode": "e621",
|
||||
"unicode_decimal": 58913
|
||||
},
|
||||
{
|
||||
"icon_id": "1837440",
|
||||
"name": "ldc-position",
|
||||
"font_class": "ldc-position",
|
||||
"unicode": "e63a",
|
||||
"unicode_decimal": 58938
|
||||
},
|
||||
{
|
||||
"icon_id": "4138813",
|
||||
"name": "素材",
|
||||
"font_class": "sucai",
|
||||
"unicode": "e620",
|
||||
"unicode_decimal": 58912
|
||||
},
|
||||
{
|
||||
"icon_id": "4166140",
|
||||
"name": "朋友",
|
||||
"font_class": "pengyou",
|
||||
"unicode": "e61a",
|
||||
"unicode_decimal": 58906
|
||||
},
|
||||
{
|
||||
"icon_id": "4310077",
|
||||
"name": "作业",
|
||||
"font_class": "zuoye",
|
||||
"unicode": "e61c",
|
||||
"unicode_decimal": 58908
|
||||
},
|
||||
{
|
||||
"icon_id": "4686996",
|
||||
"name": "教学分析",
|
||||
"font_class": "jiaoxuefenxi",
|
||||
"unicode": "e605",
|
||||
"unicode_decimal": 58885
|
||||
},
|
||||
{
|
||||
"icon_id": "4893191",
|
||||
"name": "文件夹",
|
||||
"font_class": "wenjianjia",
|
||||
"unicode": "ec17",
|
||||
"unicode_decimal": 60439
|
||||
},
|
||||
{
|
||||
"icon_id": "5838892",
|
||||
"name": "教学研修",
|
||||
"font_class": "jiaoxueyanxiu",
|
||||
"unicode": "e60d",
|
||||
"unicode_decimal": 58893
|
||||
},
|
||||
{
|
||||
"icon_id": "5931005",
|
||||
"name": "教学设计",
|
||||
"font_class": "jiaoxuesheji",
|
||||
"unicode": "e606",
|
||||
"unicode_decimal": 58886
|
||||
},
|
||||
{
|
||||
"icon_id": "6360457",
|
||||
"name": "专业资源库",
|
||||
"font_class": "zhuanyeziyuanku",
|
||||
"unicode": "e651",
|
||||
"unicode_decimal": 58961
|
||||
},
|
||||
{
|
||||
"icon_id": "6556747",
|
||||
"name": "朋友圈",
|
||||
"font_class": "pengyouquan",
|
||||
"unicode": "e616",
|
||||
"unicode_decimal": 58902
|
||||
},
|
||||
{
|
||||
"icon_id": "6992598",
|
||||
"name": "当前会话",
|
||||
"font_class": "dangqianhuihua",
|
||||
"unicode": "e675",
|
||||
"unicode_decimal": 58997
|
||||
},
|
||||
{
|
||||
"icon_id": "7327280",
|
||||
"name": "研究室",
|
||||
"font_class": "yanjiushi",
|
||||
"unicode": "e607",
|
||||
"unicode_decimal": 58887
|
||||
},
|
||||
{
|
||||
"icon_id": "7905547",
|
||||
"name": "工作台",
|
||||
"font_class": "gongzuotai",
|
||||
"unicode": "e676",
|
||||
"unicode_decimal": 58998
|
||||
},
|
||||
{
|
||||
"icon_id": "9023128",
|
||||
"name": "论文",
|
||||
"font_class": "lunwen",
|
||||
"unicode": "e60e",
|
||||
"unicode_decimal": 58894
|
||||
},
|
||||
{
|
||||
"icon_id": "10130330",
|
||||
"name": "德诚_线上学习001",
|
||||
"font_class": "decheng_xianshangxuexi",
|
||||
"unicode": "e624",
|
||||
"unicode_decimal": 58916
|
||||
},
|
||||
{
|
||||
"icon_id": "10493421",
|
||||
"name": "集体备课",
|
||||
"font_class": "jitibeike-",
|
||||
"unicode": "e65b",
|
||||
"unicode_decimal": 58971
|
||||
},
|
||||
{
|
||||
"icon_id": "13228302",
|
||||
"name": "课题",
|
||||
"font_class": "keti",
|
||||
"unicode": "e6fe",
|
||||
"unicode_decimal": 59134
|
||||
},
|
||||
{
|
||||
"icon_id": "16364339",
|
||||
"name": "朋友圈",
|
||||
"font_class": "pengyouquan1",
|
||||
"unicode": "e635",
|
||||
"unicode_decimal": 58933
|
||||
},
|
||||
{
|
||||
"icon_id": "37075078",
|
||||
"name": "备课",
|
||||
"font_class": "beike1",
|
||||
"unicode": "e61b",
|
||||
"unicode_decimal": 58907
|
||||
},
|
||||
{
|
||||
"icon_id": "1425581",
|
||||
"name": "share",
|
||||
"font_class": "fenxiang",
|
||||
"unicode": "e611",
|
||||
"unicode_decimal": 58897
|
||||
},
|
||||
{
|
||||
"icon_id": "1727462",
|
||||
"name": "227注册、添加好友",
|
||||
"font_class": "zhucetianjiahaoyou",
|
||||
"unicode": "e8ca",
|
||||
"unicode_decimal": 59594
|
||||
},
|
||||
{
|
||||
"icon_id": "2071695",
|
||||
"name": "场景灵活",
|
||||
"font_class": "duoqudaojicheng",
|
||||
"unicode": "e696",
|
||||
"unicode_decimal": 59030
|
||||
},
|
||||
{
|
||||
"icon_id": "2077372",
|
||||
"name": "业务开展",
|
||||
"font_class": "yewukaizhan",
|
||||
"unicode": "e612",
|
||||
"unicode_decimal": 58898
|
||||
},
|
||||
{
|
||||
"icon_id": "2680657",
|
||||
"name": "反馈",
|
||||
"font_class": "fankui1",
|
||||
"unicode": "e6fa",
|
||||
"unicode_decimal": 59130
|
||||
},
|
||||
{
|
||||
"icon_id": "4520331",
|
||||
"name": "设置",
|
||||
"font_class": "shezhi",
|
||||
"unicode": "e614",
|
||||
"unicode_decimal": 58900
|
||||
},
|
||||
{
|
||||
"icon_id": "4572456",
|
||||
"name": "查阅",
|
||||
"font_class": "chayue",
|
||||
"unicode": "e617",
|
||||
"unicode_decimal": 58903
|
||||
},
|
||||
{
|
||||
"icon_id": "4662757",
|
||||
"name": "报告",
|
||||
"font_class": "baogao",
|
||||
"unicode": "e630",
|
||||
"unicode_decimal": 58928
|
||||
},
|
||||
{
|
||||
"icon_id": "5062867",
|
||||
"name": "学科组合",
|
||||
"font_class": "xuekezuhe",
|
||||
"unicode": "e625",
|
||||
"unicode_decimal": 58917
|
||||
},
|
||||
{
|
||||
"icon_id": "5387651",
|
||||
"name": "分享",
|
||||
"font_class": "fenxiang1",
|
||||
"unicode": "eb24",
|
||||
"unicode_decimal": 60196
|
||||
},
|
||||
{
|
||||
"icon_id": "5387730",
|
||||
"name": "通知中心",
|
||||
"font_class": "tongzhizhongxin",
|
||||
"unicode": "eb43",
|
||||
"unicode_decimal": 60227
|
||||
},
|
||||
{
|
||||
"icon_id": "5643535",
|
||||
"name": "下架",
|
||||
"font_class": "xiajia",
|
||||
"unicode": "e618",
|
||||
"unicode_decimal": 58904
|
||||
},
|
||||
{
|
||||
"icon_id": "6241672",
|
||||
"name": "生产过程管理",
|
||||
"font_class": "shengchanguochengguanli",
|
||||
"unicode": "e62a",
|
||||
"unicode_decimal": 58922
|
||||
},
|
||||
{
|
||||
"icon_id": "6286025",
|
||||
"name": "课件",
|
||||
"font_class": "kejian",
|
||||
"unicode": "e64a",
|
||||
"unicode_decimal": 58954
|
||||
},
|
||||
{
|
||||
"icon_id": "6447187",
|
||||
"name": "浏览",
|
||||
"font_class": "liulan",
|
||||
"unicode": "e648",
|
||||
"unicode_decimal": 58952
|
||||
},
|
||||
{
|
||||
"icon_id": "6548533",
|
||||
"name": "发表",
|
||||
"font_class": "fabiao",
|
||||
"unicode": "e654",
|
||||
"unicode_decimal": 58964
|
||||
},
|
||||
{
|
||||
"icon_id": "6560965",
|
||||
"name": "课程",
|
||||
"font_class": "kecheng",
|
||||
"unicode": "e619",
|
||||
"unicode_decimal": 58905
|
||||
},
|
||||
{
|
||||
"icon_id": "6682548",
|
||||
"name": "编辑",
|
||||
"font_class": "bianji1",
|
||||
"unicode": "e61d",
|
||||
"unicode_decimal": 58909
|
||||
},
|
||||
{
|
||||
"icon_id": "7291078",
|
||||
"name": "评价",
|
||||
"font_class": "pingjia",
|
||||
"unicode": "e628",
|
||||
"unicode_decimal": 58920
|
||||
},
|
||||
{
|
||||
"icon_id": "7339813",
|
||||
"name": "综合诊断",
|
||||
"font_class": "zonghezhenduan",
|
||||
"unicode": "e6a0",
|
||||
"unicode_decimal": 59040
|
||||
},
|
||||
{
|
||||
"icon_id": "7712190",
|
||||
"name": "班级",
|
||||
"font_class": "banji",
|
||||
"unicode": "e71e",
|
||||
"unicode_decimal": 59166
|
||||
},
|
||||
{
|
||||
"icon_id": "7712222",
|
||||
"name": "投诉与建议",
|
||||
"font_class": "tousuyujianyi",
|
||||
"unicode": "e729",
|
||||
"unicode_decimal": 59177
|
||||
},
|
||||
{
|
||||
"icon_id": "8136353",
|
||||
"name": "交流",
|
||||
"font_class": "jiaoliu",
|
||||
"unicode": "e6b8",
|
||||
"unicode_decimal": 59064
|
||||
},
|
||||
{
|
||||
"icon_id": "8198365",
|
||||
"name": "评议",
|
||||
"font_class": "pingyi",
|
||||
"unicode": "e79a",
|
||||
"unicode_decimal": 59290
|
||||
},
|
||||
{
|
||||
"icon_id": "8225912",
|
||||
"name": "学情分析",
|
||||
"font_class": "xueqingfenxi",
|
||||
"unicode": "e67a",
|
||||
"unicode_decimal": 59002
|
||||
},
|
||||
{
|
||||
"icon_id": "9922803",
|
||||
"name": "check",
|
||||
"font_class": "check",
|
||||
"unicode": "e622",
|
||||
"unicode_decimal": 58914
|
||||
},
|
||||
{
|
||||
"icon_id": "9927174",
|
||||
"name": "upload",
|
||||
"font_class": "upload",
|
||||
"unicode": "e634",
|
||||
"unicode_decimal": 58932
|
||||
},
|
||||
{
|
||||
"icon_id": "10360972",
|
||||
"name": "讨论",
|
||||
"font_class": "taolun",
|
||||
"unicode": "e61e",
|
||||
"unicode_decimal": 58910
|
||||
},
|
||||
{
|
||||
"icon_id": "10373863",
|
||||
"name": "途径",
|
||||
"font_class": "tujing",
|
||||
"unicode": "e947",
|
||||
"unicode_decimal": 59719
|
||||
},
|
||||
{
|
||||
"icon_id": "11594397",
|
||||
"name": "咨询",
|
||||
"font_class": "zixun",
|
||||
"unicode": "e6b3",
|
||||
"unicode_decimal": 59059
|
||||
},
|
||||
{
|
||||
"icon_id": "11594406",
|
||||
"name": "浏览",
|
||||
"font_class": "liulan1",
|
||||
"unicode": "e6b4",
|
||||
"unicode_decimal": 59060
|
||||
},
|
||||
{
|
||||
"icon_id": "11677828",
|
||||
"name": "要素",
|
||||
"font_class": "yaosu",
|
||||
"unicode": "e68c",
|
||||
"unicode_decimal": 59020
|
||||
},
|
||||
{
|
||||
"icon_id": "11810655",
|
||||
"name": "报告",
|
||||
"font_class": "baogao1",
|
||||
"unicode": "e62e",
|
||||
"unicode_decimal": 58926
|
||||
},
|
||||
{
|
||||
"icon_id": "12476912",
|
||||
"name": "收藏",
|
||||
"font_class": "shoucang",
|
||||
"unicode": "e61f",
|
||||
"unicode_decimal": 58911
|
||||
},
|
||||
{
|
||||
"icon_id": "12771482",
|
||||
"name": "审核",
|
||||
"font_class": "shenhe",
|
||||
"unicode": "e623",
|
||||
"unicode_decimal": 58915
|
||||
},
|
||||
{
|
||||
"icon_id": "12842682",
|
||||
"name": "w_多选题",
|
||||
"font_class": "w_duoxuanti",
|
||||
"unicode": "e677",
|
||||
"unicode_decimal": 58999
|
||||
},
|
||||
{
|
||||
"icon_id": "14095222",
|
||||
"name": "分析",
|
||||
"font_class": "fenxi",
|
||||
"unicode": "e76d",
|
||||
"unicode_decimal": 59245
|
||||
},
|
||||
{
|
||||
"icon_id": "14898108",
|
||||
"name": "kanshu",
|
||||
"font_class": "kanshu",
|
||||
"unicode": "e626",
|
||||
"unicode_decimal": 58918
|
||||
},
|
||||
{
|
||||
"icon_id": "15053387",
|
||||
"name": "上传",
|
||||
"font_class": "qwe",
|
||||
"unicode": "e627",
|
||||
"unicode_decimal": 58919
|
||||
},
|
||||
{
|
||||
"icon_id": "15644340",
|
||||
"name": "检查",
|
||||
"font_class": "jiancha",
|
||||
"unicode": "e6c1",
|
||||
"unicode_decimal": 59073
|
||||
},
|
||||
{
|
||||
"icon_id": "17334540",
|
||||
"name": "群组",
|
||||
"font_class": "qunzu",
|
||||
"unicode": "e62b",
|
||||
"unicode_decimal": 58923
|
||||
},
|
||||
{
|
||||
"icon_id": "17335274",
|
||||
"name": "作品",
|
||||
"font_class": "zuopin",
|
||||
"unicode": "e6a9",
|
||||
"unicode_decimal": 59049
|
||||
},
|
||||
{
|
||||
"icon_id": "22779610",
|
||||
"name": "数译_教学管理",
|
||||
"font_class": "shuyi_jiaoxueguanli",
|
||||
"unicode": "e678",
|
||||
"unicode_decimal": 59000
|
||||
},
|
||||
{
|
||||
"icon_id": "27538561",
|
||||
"name": "liangsuan",
|
||||
"font_class": "liangsuan",
|
||||
"unicode": "e657",
|
||||
"unicode_decimal": 58967
|
||||
},
|
||||
{
|
||||
"icon_id": "27787858",
|
||||
"name": "business-report",
|
||||
"font_class": "business-report",
|
||||
"unicode": "e880",
|
||||
"unicode_decimal": 59520
|
||||
},
|
||||
{
|
||||
"icon_id": "28627465",
|
||||
"name": "项目评审",
|
||||
"font_class": "xiangmupingshen",
|
||||
"unicode": "e742",
|
||||
"unicode_decimal": 59202
|
||||
},
|
||||
{
|
||||
"icon_id": "28627468",
|
||||
"name": "项目申报",
|
||||
"font_class": "xiangmushenbao",
|
||||
"unicode": "e743",
|
||||
"unicode_decimal": 59203
|
||||
},
|
||||
{
|
||||
"icon_id": "33848036",
|
||||
"name": "下架",
|
||||
"font_class": "xiajia1",
|
||||
"unicode": "e62c",
|
||||
"unicode_decimal": 58924
|
||||
},
|
||||
{
|
||||
"icon_id": "33987020",
|
||||
"name": "分享 2",
|
||||
"font_class": "a-fenxiang2",
|
||||
"unicode": "e62f",
|
||||
"unicode_decimal": 58927
|
||||
},
|
||||
{
|
||||
"icon_id": "37863983",
|
||||
"name": "考试分析",
|
||||
"font_class": "icon_kaoshifenxi",
|
||||
"unicode": "e6d3",
|
||||
"unicode_decimal": 59091
|
||||
},
|
||||
{
|
||||
"icon_id": "37966293",
|
||||
"name": "课堂实录 1",
|
||||
"font_class": "a-ketangshilu1",
|
||||
"unicode": "e631",
|
||||
"unicode_decimal": 58929
|
||||
},
|
||||
{
|
||||
"icon_id": "38963985",
|
||||
"name": "图标_模式类型配置",
|
||||
"font_class": "tubiao_moshileixingpeizhi",
|
||||
"unicode": "e632",
|
||||
"unicode_decimal": 58930
|
||||
},
|
||||
{
|
||||
"icon_id": "39005401",
|
||||
"name": "写作-copy",
|
||||
"font_class": "xiezuo",
|
||||
"unicode": "e633",
|
||||
"unicode_decimal": 58931
|
||||
},
|
||||
{
|
||||
"icon_id": "39313770",
|
||||
"name": "布置-copy",
|
||||
"font_class": "buzhi",
|
||||
"unicode": "e636",
|
||||
"unicode_decimal": 58934
|
||||
},
|
||||
{
|
||||
"icon_id": "39506557",
|
||||
"name": "资源分析",
|
||||
"font_class": "ziyuanfenxi",
|
||||
"unicode": "e637",
|
||||
"unicode_decimal": 58935
|
||||
},
|
||||
{
|
||||
"icon_id": "3267408",
|
||||
"name": "收藏",
|
||||
"font_class": "shoucang1",
|
||||
"unicode": "e638",
|
||||
"unicode_decimal": 58936
|
||||
},
|
||||
{
|
||||
"icon_id": "3161194",
|
||||
"name": "题目数量",
|
||||
"font_class": "iconku-zhuanqu-",
|
||||
"unicode": "e649",
|
||||
"unicode_decimal": 58953
|
||||
},
|
||||
{
|
||||
"icon_id": "4349654",
|
||||
"name": "PPT",
|
||||
"font_class": "PPT",
|
||||
"unicode": "e639",
|
||||
"unicode_decimal": 58937
|
||||
},
|
||||
{
|
||||
"icon_id": "5708257",
|
||||
"name": "发表论文",
|
||||
"font_class": "fabiaolunwen",
|
||||
"unicode": "e772",
|
||||
"unicode_decimal": 59250
|
||||
},
|
||||
{
|
||||
"icon_id": "6837777",
|
||||
"name": "写作",
|
||||
"font_class": "xiezuo1",
|
||||
"unicode": "e63b",
|
||||
"unicode_decimal": 58939
|
||||
},
|
||||
{
|
||||
"icon_id": "7171145",
|
||||
"name": "粮食动态决策分析系统",
|
||||
"font_class": "fenxi1",
|
||||
"unicode": "e63c",
|
||||
"unicode_decimal": 58940
|
||||
},
|
||||
{
|
||||
"icon_id": "12252416",
|
||||
"name": "课程资源",
|
||||
"font_class": "kechengziyuan",
|
||||
"unicode": "e6e9",
|
||||
"unicode_decimal": 59113
|
||||
},
|
||||
{
|
||||
"icon_id": "19567416",
|
||||
"name": "作业平台",
|
||||
"font_class": "36zuoyepingtai",
|
||||
"unicode": "e699",
|
||||
"unicode_decimal": 59033
|
||||
},
|
||||
{
|
||||
"icon_id": "975544",
|
||||
"name": "结课标准-笔记数",
|
||||
"font_class": "jiekebiaozhunbijishu",
|
||||
"unicode": "e63d",
|
||||
"unicode_decimal": 58941
|
||||
},
|
||||
{
|
||||
"icon_id": "7086494",
|
||||
"name": "勋章",
|
||||
"font_class": "xunzhang",
|
||||
"unicode": "e63e",
|
||||
"unicode_decimal": 58942
|
||||
},
|
||||
{
|
||||
"icon_id": "12573415",
|
||||
"name": "教材征订",
|
||||
"font_class": "jiaocaizhengding",
|
||||
"unicode": "e6a4",
|
||||
"unicode_decimal": 59044
|
||||
},
|
||||
{
|
||||
"icon_id": "35789485",
|
||||
"name": "新增模型",
|
||||
"font_class": "xinzengmoxing",
|
||||
"unicode": "e7b8",
|
||||
"unicode_decimal": 59320
|
||||
},
|
||||
{
|
||||
"icon_id": "39690914",
|
||||
"name": "表彰勋章英雄",
|
||||
"font_class": "a-biaozhangxunzhangyingxiong",
|
||||
"unicode": "e79d",
|
||||
"unicode_decimal": 59293
|
||||
},
|
||||
{
|
||||
"icon_id": "39798902",
|
||||
"name": "勋章",
|
||||
"font_class": "xunzhang1",
|
||||
"unicode": "e63f",
|
||||
"unicode_decimal": 58943
|
||||
},
|
||||
{
|
||||
"icon_id": "1727478",
|
||||
"name": "237拍照-线性",
|
||||
"font_class": "paizhao-xianxing",
|
||||
"unicode": "e8d1",
|
||||
"unicode_decimal": 59601
|
||||
},
|
||||
{
|
||||
"icon_id": "1123930",
|
||||
"name": "主页未选",
|
||||
"font_class": "zhuye2",
|
||||
"unicode": "e604",
|
||||
"unicode_decimal": 58884
|
||||
},
|
||||
{
|
||||
"icon_id": "8023423",
|
||||
"name": "作业",
|
||||
"font_class": "zuoye1",
|
||||
"unicode": "e610",
|
||||
"unicode_decimal": 58896
|
||||
},
|
||||
{
|
||||
"icon_id": "720967",
|
||||
"name": "更多",
|
||||
|
|
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 256 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<svg class="icon file-icon" aria-hidden="true" :style="{'font-size': size + 'px'}">
|
||||
<svg class="icon file-icon" aria-hidden="true" :style="{ 'font-size': size + 'px' }">
|
||||
<use :xlink:href="getFileTypeIcon()"></use>
|
||||
</svg>
|
||||
</template>
|
||||
|
@ -36,10 +36,15 @@ const getFileTypeIcon = () => {
|
|||
rar: 'icon-rar',
|
||||
|
||||
}
|
||||
return '#' + iconObj[name]
|
||||
if (iconObj[name]) {
|
||||
return '#' + iconObj[name]
|
||||
}
|
||||
else {
|
||||
return '#icon-zuoye1'
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
||||
<style lang="scss" scoped></style>
|
|
@ -51,6 +51,11 @@ const router = useRouter()
|
|||
const currentRoute = ref('')
|
||||
|
||||
const menus = ref([
|
||||
{
|
||||
icon: 'icon-zhuye2 icon-homepage',
|
||||
name: '主页',
|
||||
path: '/homepage'
|
||||
},
|
||||
{
|
||||
icon: 'icon-jiaoxueziyuan icon-resource',
|
||||
name: '资源',
|
||||
|
@ -155,6 +160,10 @@ function setLayout() {
|
|||
color: #f99b53;
|
||||
}
|
||||
|
||||
.icon-homepage{
|
||||
color: #0a84ff;
|
||||
}
|
||||
|
||||
.icon-prepare {
|
||||
color: #b088e8;
|
||||
}
|
||||
|
|
|
@ -28,6 +28,10 @@ let uploaderStore = ref(uploaderState())
|
|||
}
|
||||
|
||||
.el-header {
|
||||
padding: 0
|
||||
padding: 0;
|
||||
height: 80px;
|
||||
}
|
||||
.el-main {
|
||||
--el-main-padding: 0 20px;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -13,8 +13,14 @@ export const constantRoutes = [
|
|||
{
|
||||
path: '/',
|
||||
component: Layout,
|
||||
redirect: '/resource',
|
||||
redirect: '/homepage',
|
||||
children: [
|
||||
{
|
||||
path: '/homepage',
|
||||
component: () => import('@/views/homePage/index.vue'),
|
||||
name: 'homepage',
|
||||
meta: {title: '主页'}
|
||||
},
|
||||
{
|
||||
path: '/resource',
|
||||
component: () => import('@/views/resource/index.vue'),
|
||||
|
|
|
@ -4,23 +4,30 @@ import useUserStore from '@/store/modules/user'
|
|||
const userStore = useUserStore()
|
||||
const baseConfig = {
|
||||
// Electron 设置cookie
|
||||
url: 'https://file.ysaix.com:7868',
|
||||
//cookie 名称 这里为 token
|
||||
url: import.meta.env.VITE_APP_BUILD_BASE_PATH,
|
||||
// url: 'https://file.ysaix.com:7868',
|
||||
//cookie 名称 这里为 token
|
||||
name: 'Admin-Token',
|
||||
//cookie 值
|
||||
value: userStore.token,
|
||||
// 域名
|
||||
domain: 'file.ysaix.com',
|
||||
|
||||
domain: import.meta.env.VITE_APP_DOMAIN
|
||||
}
|
||||
|
||||
// 作业
|
||||
// 作业布置
|
||||
const homeWork = {
|
||||
data: { ...baseConfig},
|
||||
// 完整路径
|
||||
fullPath: `${baseConfig.url}/teaching/classtaskassign?titleName=%E4%BD%9C%E4%B8%9A%E5%B8%83%E7%BD%AE`
|
||||
}
|
||||
|
||||
// 作业反馈
|
||||
const feedback = {
|
||||
data: { ...baseConfig},
|
||||
// 完整路径
|
||||
fullPath: `${baseConfig.url}/teaching/classtaskassign?titleName=作业反馈`
|
||||
}
|
||||
|
||||
// 高考研读
|
||||
const gk = {
|
||||
data: { ...baseConfig},
|
||||
|
@ -39,9 +46,18 @@ const aiModel = {
|
|||
fullPath: `${baseConfig.url}/platofai`
|
||||
}
|
||||
|
||||
const getBaseData = () => {
|
||||
return {
|
||||
data: { ...baseConfig},
|
||||
fullPath: `${baseConfig.url}`
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
homeWork,
|
||||
feedback,
|
||||
gk,
|
||||
standard,
|
||||
aiModel
|
||||
}
|
||||
aiModel,
|
||||
getBaseData
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ export const asyncLocalFile = (item) => {
|
|||
if (isAsync === true) {
|
||||
item.async = 'on'
|
||||
if (type === 'down') {
|
||||
console.log(item)
|
||||
ipcRenderer.send('download-file-default', {
|
||||
url: item.fileFullPath,
|
||||
fileName: item.fileNewName
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import {ref,defineProps,defineEmits,onMounted} from "vue";
|
||||
import {ref,defineProps,defineEmits} from "vue";
|
||||
const activeIndex = ref('0')
|
||||
const props = defineProps({
|
||||
classList:{
|
||||
|
@ -43,9 +43,7 @@ const handleSelect = (itemDom,pathKey) => {
|
|||
// })
|
||||
emits('handleSelect',{index,id})
|
||||
}
|
||||
onMounted(() => {
|
||||
console.log(props.classList,'props.classList')
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
|
|
@ -92,7 +92,7 @@
|
|||
<el-col :span="4">未选学生:</el-col>
|
||||
<el-col :span="20" class="studentContent">
|
||||
<div class="aItem" v-for="(stuItem,stuIndex) in avaliableStudents" :key="stuIndex">
|
||||
<el-button style="width: 100%" plain @click="chooseItem(stuItem,stuIndex)">{{stuItem.name || stuItem.studentname}}</el-button>
|
||||
<el-button style="width: 100%" plain @click="chooseItem(stuItem,stuIndex)">{{stuItem.studentname || stuItem.name}}</el-button>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
@ -121,7 +121,7 @@ const groupForm = reactive({
|
|||
groupname: '',
|
||||
orderidx: 0,
|
||||
classid: Number(props.classId),
|
||||
edituserid: userStore.id,
|
||||
edituserid: userStore.userId,
|
||||
edusubject: userStore.edusubject,
|
||||
userid : 0,
|
||||
studentid : 0,
|
||||
|
@ -188,7 +188,7 @@ const getClassInfo = () => {
|
|||
const chooseItem = (item,stuIndex) => {
|
||||
let formdata = {}
|
||||
formdata.classid = props.classId;
|
||||
formdata.edituserid = userStore.id;
|
||||
formdata.edituserid = userStore.userId;
|
||||
formdata.userid = item.userid;
|
||||
formdata.parentid = parentId.value;
|
||||
formdata.studentid = item.studentid;
|
||||
|
|
|
@ -2,25 +2,19 @@
|
|||
<el-card style="width: 100%;height: 100%">
|
||||
<template #header>
|
||||
<div style="text-align: left">
|
||||
<el-button v-if="classInfo.teacher.length > 0" type="danger" @click="deleteClassRoom">删除班级</el-button>
|
||||
<el-button type="danger" @click="deleteClassRoom">删除班级</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="classInfo.teacher.length > 0">
|
||||
<el-descriptions :column="1">
|
||||
<el-descriptions-item label="班级名称">{{ classInfo.className }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教师">
|
||||
<template v-if="classInfo.teacher.length > 0">
|
||||
<el-tag type="primary" v-for="(item, index) in classInfo.teacher" :key="index">{{item.name}}</el-tag>
|
||||
</template>
|
||||
<template v-else>暂无</template>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学生人数">{{ classInfo.student.length }}人</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
<el-empty description="暂无班级信息" style="margin: 0 auto"/>
|
||||
</template>
|
||||
<el-descriptions :column="1">
|
||||
<el-descriptions-item label="班级名称">{{ classInfo.caption }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教师">
|
||||
<template v-if="classInfo.teacher.length > 0">
|
||||
<el-tag type="primary" v-for="(item, index) in classInfo.teacher" :key="index">{{item.name}}</el-tag>
|
||||
</template>
|
||||
<template v-else>{{ classInfo.teachername }}</template>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学生人数">{{ classInfo.classstudentcount || 0 }}人</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
|
@ -48,7 +42,7 @@
|
|||
confirmButtonText: '确认',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
leaveClass({ classid: props.classId, userid: userStore.id, inrole: 'teacher' }).then(() => {
|
||||
leaveClass({ classid: props.classId, userid: userStore.userId, inrole: 'teacher' }).then(() => {
|
||||
ElMessage({
|
||||
message: '删除成功',
|
||||
type: 'success',
|
||||
|
@ -63,7 +57,7 @@
|
|||
const getClassInfo = () => {
|
||||
if(props.classId){
|
||||
getClassmain(props.classId).then(response => {
|
||||
classInfo.className = response.data.caption
|
||||
Object.assign(classInfo,response.data)
|
||||
listClassuser({classid:props.classId,pageSize:100}).then(res => {
|
||||
classInfo.teacher = res.rows.filter(item => item.inrole === 'teacher')
|
||||
classInfo.student = res.rows.filter(item => item.inrole === 'student')
|
||||
|
|
|
@ -145,12 +145,13 @@
|
|||
// 获取班级信息
|
||||
const getClassInfo = () => {
|
||||
classList.value = []
|
||||
listClassmain({ entpid: userStore.deptId, pageSize: 500, status: 'open' }).then(response => {
|
||||
response.rows.forEach(item => {
|
||||
if(item.classteacherids && Number(item.classteacherids) === userStore.userId){
|
||||
classList.value.push(item)
|
||||
}
|
||||
})
|
||||
listClassmain({ classuserid: userStore.userId, pageSize: 100, status: 'open' }).then(response => {
|
||||
// response.rows.forEach(item => {
|
||||
// if(item.teacherid && Number(item.teacherid) === userStore.userId){
|
||||
// classList.value.push(item)
|
||||
// }
|
||||
// })
|
||||
classList.value = [...response.rows]
|
||||
if(classList.value.length > 0){
|
||||
classId.value = classList.value[0].id
|
||||
currentIndex.value = 0
|
||||
|
@ -190,7 +191,7 @@
|
|||
classForm.entpid = userStore.deptId;
|
||||
classForm.status = 'open';
|
||||
classForm.teachername = userStore.nickName;
|
||||
classForm.teacherid = userStore.id;
|
||||
classForm.teacherid = userStore.userId;
|
||||
classForm.teacherSubject = classForm.edusubject;
|
||||
addClassmain(classForm).then(response => {
|
||||
if (response.code === 200) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<div style="height: 100%">
|
||||
<el-card style="width: 100%;height: 100%">
|
||||
<el-card style="width: 100%;height: 100%;overflow-y: auto">
|
||||
<template #header>
|
||||
<div style="text-align: left;display: flex;justify-content: space-between">
|
||||
<div>
|
||||
|
@ -71,7 +71,7 @@
|
|||
</el-form>
|
||||
<template #footer>
|
||||
<el-button type="warning" v-show="studentForm.id > 0" @click="delStudent(1)">移出班级</el-button>
|
||||
<el-button type="danger" v-show="studentForm.id > 0 && studentForm.editoruserid == userStore.id" @click="delStudent(2)">删除学生</el-button>
|
||||
<el-button type="danger" v-show="studentForm.id > 0 && studentForm.editoruserid == userStore.userId" @click="delStudent(2)">删除学生</el-button>
|
||||
<el-button @click="studentVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="btnStudentSave">确 定</el-button>
|
||||
</template>
|
||||
|
@ -162,7 +162,7 @@
|
|||
],
|
||||
birthday: [
|
||||
{ required: true, message: '请选择出生日期', trigger: 'blur' }
|
||||
]
|
||||
],
|
||||
})
|
||||
|
||||
// 获取班级学生信息
|
||||
|
@ -201,7 +201,7 @@
|
|||
studentForm.classname = classInfo.value.caption;
|
||||
studentForm.schoolname = classInfo.value.entpname;
|
||||
studentForm.status = '';
|
||||
studentForm.editoruserid = userStore.id;
|
||||
studentForm.editoruserid = userStore.userId;
|
||||
addStudentmain(studentForm).then((response) => {
|
||||
if (response.code === 200) {
|
||||
ElMessage({
|
||||
|
@ -225,6 +225,10 @@
|
|||
studentForm.id = 0
|
||||
studentForm.entpid = 0
|
||||
studentForm.name = ''
|
||||
studentForm.address = ''
|
||||
studentForm.birthday = ''
|
||||
studentForm.parentname = ''
|
||||
studentForm.parentmobile = ''
|
||||
studentVisible.value = true
|
||||
}else{
|
||||
getStudentmain(id).then((response) => {
|
||||
|
@ -249,7 +253,7 @@
|
|||
confirmButtonText: '确认',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
leaveClass({ classid: props.classId, studentid: studentForm.id, inrole: 'student' }).then((response) => {
|
||||
leaveClass({ classid: props.classId, studentid: studentForm.id, inrole: 'student' }).then(() => {
|
||||
ElMessage({
|
||||
type: 'info',
|
||||
message: '移出成功',
|
||||
|
@ -422,7 +426,7 @@
|
|||
formdata.classname = classInfo.value.caption;
|
||||
formdata.schoolname = classInfo.value.entpname;
|
||||
formdata.status = '';
|
||||
formdata.editoruserid = userStore.id;
|
||||
formdata.editoruserid = userStore.userId;
|
||||
|
||||
addStudentmainByNameArray(formdata).then(res => {
|
||||
if(res.code == 200){
|
||||
|
|
|
@ -0,0 +1,245 @@
|
|||
<template>
|
||||
<el-card style="overflow: auto; height: 100%">
|
||||
<div class="common-layout" style="overflow-y: auto">
|
||||
<el-container>
|
||||
<el-main style="--el-main-padding: 0">
|
||||
<template v-for="(itemFirst, indexFirst) in title" :key="indexFirst">
|
||||
<el-card style="margin-bottom: 10px">
|
||||
<template #header>
|
||||
<div style="text-align: left">{{ itemFirst.name }}</div>
|
||||
</template>
|
||||
<div :class="itemFirst.id === 1 || itemFirst.id === 2 ? 'six' : 'three'">
|
||||
<template v-for="(itemSec, indexSec) in itemFirst.child" :key="indexSec">
|
||||
<el-popover :disabled="itemSec.child1.length === 0" width="auto" trigger="hover">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<!-- 鼠标移上去的一列为三级菜单-->
|
||||
<template v-for="(itemThird, indexThird) in itemSec.child1" :key="indexThird">
|
||||
<div
|
||||
style="width: 120px"
|
||||
:class="[
|
||||
itemFirst.id == 1
|
||||
? 'a1'
|
||||
: itemFirst.id == 2
|
||||
? 'a2'
|
||||
: itemFirst.id == 3
|
||||
? 'a3'
|
||||
: 'a4',
|
||||
'CustomBox'
|
||||
]"
|
||||
@click="handleOutLink(itemThird.url)"
|
||||
>
|
||||
<span :class="itemThird.img"></span>
|
||||
<span>{{ itemThird.name }}</span>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<!-- 最外层的一列为二级菜单-->
|
||||
<template #reference>
|
||||
<div
|
||||
:class="[
|
||||
itemFirst.id == 1
|
||||
? 'a1'
|
||||
: itemFirst.id == 2
|
||||
? 'a2'
|
||||
: itemFirst.id == 3
|
||||
? 'a3'
|
||||
: 'a4',
|
||||
'CustomBox'
|
||||
]"
|
||||
@click="handleOutLink(itemSec.url, itemSec.type)"
|
||||
>
|
||||
<span :class="itemSec.img"></span>
|
||||
<span>{{ itemSec.name }}</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-popover>
|
||||
</template>
|
||||
</div>
|
||||
</el-card>
|
||||
</template>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</div>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import outLink from '@/utils/linkConfig'
|
||||
const { ipcRenderer } = window.electron || {}
|
||||
const router = useRouter()
|
||||
const title = reactive([
|
||||
{
|
||||
name: '教学工作台',
|
||||
img: 'iconfont icon-gongzuotai',
|
||||
id: 1,
|
||||
child: [
|
||||
{
|
||||
name: '课程教学',
|
||||
img: 'iconfont icon-PPT',
|
||||
type: 'hash',
|
||||
url: '/prepare',
|
||||
child1: []
|
||||
},
|
||||
{
|
||||
name: '作业管理',
|
||||
img: 'iconfont icon-36zuoyepingtai',
|
||||
url: '/teaching/classtaskassign?titleName=作业布置',
|
||||
child1: []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '教学研究室',
|
||||
img: 'iconfont icon-yanjiushi',
|
||||
id: 2,
|
||||
child: [
|
||||
{
|
||||
name: '课程研究',
|
||||
img: 'iconfont icon-shuyi_jiaoxueguanli',
|
||||
child1: [
|
||||
{
|
||||
name: '课标分析',
|
||||
url: '/teaching/chatwithstandard',
|
||||
img: 'iconfont icon-kecheng'
|
||||
},
|
||||
{
|
||||
name: '教材分析',
|
||||
url: '/teaching/chatwithtextbook',
|
||||
img: 'iconfont icon-yanjiushi'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '高考研究',
|
||||
url: '/education/colentrance',
|
||||
img: 'iconfont icon-icon_kaoshifenxi',
|
||||
child1: []
|
||||
},
|
||||
{
|
||||
name: '资源研究',
|
||||
url: '/resource',
|
||||
type: 'hash',
|
||||
img: 'iconfont icon-business-report',
|
||||
child1: []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
name: '教学资源库',
|
||||
img: 'iconfont icon-zhuanyeziyuanku',
|
||||
id: 3,
|
||||
child: [
|
||||
{
|
||||
name: '教学素材',
|
||||
img: 'iconfont icon-sucai',
|
||||
url: '/teaching/materialbank',
|
||||
child1: []
|
||||
},
|
||||
{
|
||||
name: '课程资源',
|
||||
img: 'iconfont icon-kechengziyuan',
|
||||
url: '/teaching/coursewareresource',
|
||||
child1: []
|
||||
},
|
||||
{
|
||||
name: '习题资源',
|
||||
img: 'iconfont icon-iconku-zhuanqu-',
|
||||
url: '/teaching/quesbank',
|
||||
child1: []
|
||||
}
|
||||
]
|
||||
}
|
||||
])
|
||||
const handleOutLink = (path, type) => {
|
||||
if (!path) return
|
||||
if (type === 'hash') {
|
||||
router.push(path)
|
||||
} else {
|
||||
// key 对应的 linkConfig.js 外部链接配置
|
||||
let configObj = outLink.getBaseData()
|
||||
let fullPath = configObj.fullPath + path
|
||||
fullPath = fullPath.replaceAll('//', '/')
|
||||
// 通知主进程
|
||||
ipcRenderer.send('openWindow', {
|
||||
fullPath: fullPath,
|
||||
cookieData: { ...configObj.data }
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
.CustomTitle {
|
||||
margin-bottom: 8px;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
white-space: nowrap;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.CustomTitle span:nth-child(1) {
|
||||
font-size: 24px;
|
||||
margin-right: 8px;
|
||||
color: #7b7a7a;
|
||||
display: none;
|
||||
}
|
||||
.six {
|
||||
display: flex;
|
||||
& > div {
|
||||
width: 20%;
|
||||
}
|
||||
}
|
||||
.three {
|
||||
display: flex;
|
||||
& > div {
|
||||
width: 20%;
|
||||
}
|
||||
}
|
||||
.CustomBox span:nth-child(1) {
|
||||
display: flex;
|
||||
width: 60px;
|
||||
justify-content: center;
|
||||
height: 60px;
|
||||
background-color: #ebe9e9;
|
||||
border-radius: 50%;
|
||||
align-items: center;
|
||||
font-size: 32px;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.CustomBox {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
.CustomBox span:nth-child(2) {
|
||||
font-size: 18px;
|
||||
}
|
||||
.CustomBox div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.a1 span:nth-child(1) {
|
||||
color: #1296db;
|
||||
}
|
||||
|
||||
.a2 span:nth-child(1) {
|
||||
color: #f56c6c;
|
||||
}
|
||||
.a3 span:nth-child(1) {
|
||||
color: #e6a23a;
|
||||
}
|
||||
.a4 span:nth-child(1) {
|
||||
color: #67c23a;
|
||||
}
|
||||
.ac span:nth-child(1) {
|
||||
background-color: #1296db;
|
||||
color: #ffffff;
|
||||
}
|
||||
</style>
|
|
@ -10,6 +10,10 @@
|
|||
</div>
|
||||
<div class="prepare-item-info-message">
|
||||
<div style="width: 60px">
|
||||
<template v-if="item.uniquekey">
|
||||
{{ item.worktype }}
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-icon
|
||||
v-loading="item.async === 'on'"
|
||||
style="background-color: green; border-radius: 20px; color: white; top: 2px"
|
||||
|
@ -20,13 +24,15 @@
|
|||
{{ item.async === true ? '已同步' : '' }}
|
||||
{{ !item.async ? '待同步' : '' }}
|
||||
{{ item.async === 'on' ? '同步中' : '' }}
|
||||
</template>
|
||||
</div>
|
||||
|
|
||||
<div style="width: 70px">{{ formatFileSize(item.fileSize) }}</div>
|
||||
|
|
||||
<div style="width: 70px">{{ toTimeText(item.uploadTime, true) }}</div>
|
||||
|
|
||||
<template v-if="item.fileSize">|</template>
|
||||
<div style="width: 70px" v-if="item.fileSize">{{ formatFileSize(item.fileSize) }}</div>
|
||||
<template v-if="item.uploadTime">|</template>
|
||||
<div style="width: 70px" v-if="item.uploadTime">{{ toTimeText(item.uploadTime, true) }}</div>
|
||||
<template v-if="item.levelFirstName">| </template>
|
||||
<div
|
||||
v-if="item.levelFirstName"
|
||||
style="
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
|
@ -59,32 +65,48 @@
|
|||
<template #default>
|
||||
<div style="width: 100%">
|
||||
<div class="item-popover" @click="closePopver(index)">
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="editTalk(item, index)">
|
||||
<i class="iconfont icon-bianji"></i>
|
||||
<span>重命名</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="deleteTalk(item)">
|
||||
<i class="iconfont icon-shanchu"></i>
|
||||
<span>删除</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="downloadFile(item)">
|
||||
<i class="iconfont icon-xiazai"></i>
|
||||
<span>下载</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="moveSmarttalkFun(item)">
|
||||
<el-icon>
|
||||
<Switch />
|
||||
</el-icon>
|
||||
<span>移动</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<template v-if="item.uniquekey">
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="editTalk(item, index)">
|
||||
<i class="iconfont icon-bianji"></i>
|
||||
<span>布置</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="deleteTalk(item)">
|
||||
<i class="iconfont icon-shanchu"></i>
|
||||
<span>删除</span>
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="editTalk(item, index)">
|
||||
<i class="iconfont icon-bianji"></i>
|
||||
<span>重命名</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="deleteTalk(item)">
|
||||
<i class="iconfont icon-shanchu"></i>
|
||||
<span>删除</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="downloadFile(item)">
|
||||
<i class="iconfont icon-xiazai"></i>
|
||||
<span>下载</span>
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="item-popover-item">
|
||||
<el-button text @click="moveSmarttalkFun(item)">
|
||||
<el-icon>
|
||||
<Switch />
|
||||
</el-icon>
|
||||
<span>移动</span>
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -236,6 +258,10 @@ export default {
|
|||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
.icon-zuoye{
|
||||
font-size: 40px;
|
||||
color: #707070
|
||||
}
|
||||
}
|
||||
|
||||
.prepare-body-main-item-tool {
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
</el-popover>
|
||||
</div>
|
||||
<div style="display: flex">
|
||||
<el-button @click="handleOutLink('feedback')">作业反馈</el-button>
|
||||
<el-button @click="handleOutLink('homeWork')">布置作业</el-button>
|
||||
<el-button @click="isDialogOpen = true">上传资料</el-button>
|
||||
<el-button type="primary" style="margin-left: 10px" @click="createFile">新建课件</el-button>
|
||||
|
@ -67,15 +68,19 @@ import ChooseTextbook from '@/components/choose-textbook/index.vue'
|
|||
import uploadDialog from '@/components/upload-dialog/index.vue'
|
||||
import { Refresh } from '@element-plus/icons-vue'
|
||||
import uploaderState from '@/store/modules/uploader'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import MoveFile from '@/components/move-file/index.vue'
|
||||
import FileListItem from '@/views/prepare/container/file-list-item.vue'
|
||||
import { getSmarttalkPage, moveSmarttalk } from '@/api/file'
|
||||
import { homeworklist, listEntpcourse } from '@/api/teaching/classwork'
|
||||
import { toTimeText } from '@/utils/date'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { parseCataByNode, creatPPT, asyncLocalFile } from '@/utils/talkFile'
|
||||
import FileOperBatch from '@/views/prepare/container/file-oper-batch.vue'
|
||||
import outLink from '@/utils/linkConfig'
|
||||
import { createWindow } from '@/utils/tool'
|
||||
import { uniqBy, cloneDeep } from 'lodash'
|
||||
|
||||
const { ipcRenderer } = window.electron || {}
|
||||
|
||||
export default {
|
||||
|
@ -103,6 +108,10 @@ export default {
|
|||
},
|
||||
// 当前教材封面图
|
||||
curBookImg: '',
|
||||
// 用户信息
|
||||
userStore: '',
|
||||
entpcourseid: '',
|
||||
timerId: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
|
@ -113,6 +122,7 @@ export default {
|
|||
}
|
||||
},
|
||||
created() {
|
||||
this.userStore = useUserStore().user
|
||||
ipcRenderer.removeAllListeners('copy-file-default-reply')
|
||||
ipcRenderer.on('copy-file-default-reply', (e, param) => {
|
||||
this.callback(param)
|
||||
|
@ -222,7 +232,7 @@ export default {
|
|||
},
|
||||
asyncAllFile() {
|
||||
this.isLoading = true
|
||||
getSmarttalkPage({
|
||||
return getSmarttalkPage({
|
||||
...this.uploadData,
|
||||
orderByColumn: 'uploadTime',
|
||||
isAsc: 'desc',
|
||||
|
@ -239,12 +249,14 @@ export default {
|
|||
await asyncLocalFile(item)
|
||||
}
|
||||
this.asyncAllFileVisiable = false
|
||||
return Promise.resolve()
|
||||
})
|
||||
.catch(() => {
|
||||
this.isLoading = false
|
||||
return Promise.resolve()
|
||||
})
|
||||
},
|
||||
nodeClick(data) {
|
||||
async nodeClick(data) {
|
||||
if (this.currentNode.id === data.node.id) return
|
||||
this.curBookImg = data.textBook.curBookImg
|
||||
this.checkFileList = []
|
||||
|
@ -254,16 +266,101 @@ export default {
|
|||
this.uploadData.levelSecondId = cata[1]
|
||||
this.uploadData.levelThirdId = cata[2]
|
||||
this.uploadData.textbookId = data.textBook.curBookId
|
||||
this.asyncAllFile()
|
||||
await this.asyncAllFile()
|
||||
if (this.uploadData.levelSecondId) {
|
||||
// 获取作业列表所需ID
|
||||
const res = await this.getChapterId()
|
||||
this.entpcourseid = res.rows[0].id
|
||||
// 查询作业
|
||||
this.getHomeWorkList()
|
||||
}
|
||||
},
|
||||
|
||||
// 打开外部链接
|
||||
handleOutLink(key){
|
||||
handleOutLink(key) {
|
||||
if (key == 'homeWork') {
|
||||
// 查询作业
|
||||
this.createTimer()
|
||||
}
|
||||
// key 对应的 linkConfig.js 外部链接配置
|
||||
let configObj = outLink[key]
|
||||
// 通知主进程
|
||||
ipcRenderer.send('openWindow', {
|
||||
fullPath: configObj.fullPath,
|
||||
cookieData: {...(configObj.data)}
|
||||
cookieData: { ...(configObj.data) }
|
||||
})
|
||||
},
|
||||
// 根据教材章节单元ID 查询作业列表所需ID
|
||||
getChapterId() {
|
||||
return listEntpcourse({ evalid: this.uploadData.levelSecondId, edituserid: this.userStore.userId, pageSize: 500 })
|
||||
},
|
||||
//
|
||||
createTimer() {
|
||||
this.timerId = setInterval(() => {
|
||||
this.getHomeWorkList()
|
||||
}, 1500)
|
||||
},
|
||||
// 查询作业列表
|
||||
getHomeWorkList() {
|
||||
homeworklist({ entpcourseid: this.entpcourseid, edituserid: this.userStore.userId, pageSize: 100 }).then(res => {
|
||||
|
||||
//以下代码 参照AIx web端 作业布置
|
||||
let list = []
|
||||
for (var i = 0; i < res.rows.length; i++) {
|
||||
|
||||
res.rows[i].taskconfig = [];
|
||||
|
||||
// 找child
|
||||
for (var j = 0; j < res.rows.length; j++) {
|
||||
if (res.rows[j].parentid == res.rows[i].id) {
|
||||
var ss = [];
|
||||
if (res.rows[j].classworkdatastudentids != null) {
|
||||
ss = JSON.parse('[' + res.rows[j].classworkdatastudentids + ']');
|
||||
}
|
||||
var js = {
|
||||
id: res.rows[j].id,
|
||||
classid: res.rows[j].classid,
|
||||
classcaption: res.rows[j].classcaption,
|
||||
parentid: 0,
|
||||
worktype: '',
|
||||
workkey: res.rows[j].workkey,
|
||||
worktag: '',
|
||||
entpcourseid: 0,
|
||||
evalid: 0,
|
||||
edusubject: '',
|
||||
edudegree: '',
|
||||
workdate: '',
|
||||
title: '',
|
||||
workcodes: '',
|
||||
studentlist: ss,
|
||||
deaddate: res.rows[j].deaddate,
|
||||
timelength: res.rows[j].timelength,
|
||||
weights: res.rows[j].weights,
|
||||
feedtype: res.rows[j].feedtype
|
||||
}
|
||||
res.rows[i].taskconfig.push(js);
|
||||
}
|
||||
}
|
||||
res.rows[i].fileShowName = res.rows[i].uniquekey
|
||||
|
||||
// 注意slideid>0的,这一些作业是添加到PPT页面的,所以在作业管理中不能出现
|
||||
// 2024-05-15,酉阳,jackyshen
|
||||
if (res.rows[i].classid == 0 && res.rows[i].slideid == 0) {
|
||||
list.push(res.rows[i]);
|
||||
}
|
||||
|
||||
|
||||
// 如果是习题训练任务,则检查一共有多少道
|
||||
if (res.rows[i].entpcourseworklist != '') {
|
||||
res.rows[i].entpcourseworklistarray = JSON.parse('[' + res.rows[i].entpcourseworklist + ']');
|
||||
} else {
|
||||
res.rows[i].entpcourseworklistarray = [];
|
||||
}
|
||||
}
|
||||
// 去重
|
||||
let ary = uniqBy([...this.currentFileList, ...list], 'id')
|
||||
// 深度克隆
|
||||
this.currentFileList = cloneDeep(ary)
|
||||
})
|
||||
},
|
||||
// 打开PDF-课件
|
||||
|
@ -274,6 +371,13 @@ export default {
|
|||
openLesson() {
|
||||
createWindow('tool-sphere', { url: '/tool/sphere' })
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
$route(to) {
|
||||
if (to.path != '/prepare' && this.timerId) {
|
||||
clearInterval(this.timerId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
@ -329,7 +433,8 @@ export default {
|
|||
justify-content: center;
|
||||
position: relative;
|
||||
background: linear-gradient(#b0d1ef, #3e7bcb);
|
||||
.top-zoom-style{
|
||||
|
||||
.top-zoom-style {
|
||||
position: absolute;
|
||||
width: 90%;
|
||||
height: 30px;
|
||||
|
@ -337,7 +442,8 @@ export default {
|
|||
bottom: 0;
|
||||
clip-path: polygon(3% 0%, 97% 0%, 100% 100%, 0% 100%);
|
||||
}
|
||||
.textbook-img{
|
||||
|
||||
.textbook-img {
|
||||
height: 120px;
|
||||
background-color: #ffffff;
|
||||
padding: 5px;
|
||||
|
@ -346,36 +452,43 @@ export default {
|
|||
margin-right: 20px;
|
||||
z-index: 1;
|
||||
}
|
||||
.top-item{
|
||||
|
||||
.top-item {
|
||||
width: 230px;
|
||||
position: relative;
|
||||
flex-wrap: wrap;
|
||||
z-index: 1;
|
||||
.btn{
|
||||
|
||||
.btn {
|
||||
width: 102px;
|
||||
background: none;
|
||||
color: #ffffff;
|
||||
border-width: 2px;
|
||||
border-color: #ffffff;
|
||||
&:hover{
|
||||
|
||||
&:hover {
|
||||
background: rgba(255, 255, 255, 0.3)
|
||||
}
|
||||
&:first-child{
|
||||
|
||||
&:first-child {
|
||||
margin-left: 12px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
&:nth-child(2){
|
||||
|
||||
&:nth-child(2) {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.to-class-btn{
|
||||
|
||||
.to-class-btn {
|
||||
width: 130px;
|
||||
height: 80px;
|
||||
margin-left: 25px;
|
||||
font-size: 18px;
|
||||
z-index: 1;
|
||||
.icon-lingdang{
|
||||
|
||||
.icon-lingdang {
|
||||
margin-right: 5px;
|
||||
color: #ffffff;
|
||||
font-size: 20px;
|
||||
|
|
|
@ -0,0 +1,266 @@
|
|||
<!-- 裁剪头像弹窗 -->
|
||||
<template>
|
||||
<div class="personal-authentica">
|
||||
<div class="context">
|
||||
<div class="text-box" v-loading="upLoading">
|
||||
<!-- 关闭按钮 -->
|
||||
<!-- 内容 -->
|
||||
<div id="Box">
|
||||
<h3>头像设置</h3>
|
||||
|
||||
<!-- 裁剪+效果 -->
|
||||
<div class="box">
|
||||
<div class="box_1">
|
||||
<img :src="filePath" ref="image" />
|
||||
</div>
|
||||
|
||||
<!--裁剪完的图片-->
|
||||
<div class="box_2">
|
||||
<div class="before"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 裁剪按钮-->
|
||||
<div class="btn">
|
||||
<el-button style="margin-right: 20px">选择</el-button>
|
||||
<input
|
||||
class="upload"
|
||||
type="file"
|
||||
accept=".png, .jpg, .jpeg"
|
||||
@change="uploadImg"
|
||||
/>
|
||||
|
||||
<el-button @click="cancle">取消</el-button>
|
||||
<el-button @click="sureSava">提交</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { onMounted, reactive, toRefs, ref } from "vue";
|
||||
//引入依赖
|
||||
import Cropper from "cropperjs";
|
||||
import "cropperjs/dist/cropper.css";
|
||||
import { ElMessage } from "element-plus";
|
||||
|
||||
export default {
|
||||
props: {
|
||||
filePath: {
|
||||
type: String,
|
||||
},
|
||||
aspectRatio: { // 裁剪比例,需要可传
|
||||
type: Number,
|
||||
default: 1,
|
||||
},
|
||||
userId: {
|
||||
type: String,
|
||||
},
|
||||
},
|
||||
setup(props, context) {
|
||||
|
||||
// 原生上传的文件
|
||||
const uploadImg = (e) => {
|
||||
if (e.target.files && e.target.files[0]) {
|
||||
const file = e.target.files[0];
|
||||
dataFile.image.src = URL.createObjectURL(file);
|
||||
if (dataFile.myCropper) {
|
||||
dataFile.myCropper.destroy();
|
||||
}
|
||||
copper();
|
||||
}
|
||||
};
|
||||
|
||||
const dataFile = reactive({
|
||||
// 裁剪后的图片
|
||||
afterImg: "",
|
||||
// 裁剪的图片
|
||||
image: null,
|
||||
// 进行裁剪
|
||||
myCropper: null,
|
||||
});
|
||||
|
||||
// 实例化裁剪框
|
||||
const copper = () => {
|
||||
dataFile.myCropper = new Cropper(dataFile.image, {
|
||||
/*
|
||||
* viewMode 视图控制
|
||||
- 0 无限制
|
||||
- 1 限制裁剪框不能超出图片的范围
|
||||
- 2 限制裁剪框不能超出图片的范围 且图片填充模式为 cover 最长边填充
|
||||
- 3 限制裁剪框不能超出图片的范围 且图片填充模式为 contain 最短边填充
|
||||
* */
|
||||
viewMode: 1,
|
||||
// 设置图片是否可以拖拽功能
|
||||
/*
|
||||
* dragMode 拖拽图片模式
|
||||
- crop 形成新的裁剪框
|
||||
- move 图片可移动
|
||||
- none 什么也没有
|
||||
* */
|
||||
dragMode: "move",
|
||||
// 是否显示图片后面的网格背景,一般默认为true
|
||||
background: true,
|
||||
// 进行图片预览的效果
|
||||
preview: ".before",
|
||||
// 设置裁剪区域占图片的大小 值为 0-1 默认 0.8 表示 80%的区域
|
||||
autoCropArea: 0.8,
|
||||
// 设置图片是否可以进行收缩功能
|
||||
zoomOnWheel: true,
|
||||
// 是否显示 + 箭头
|
||||
center: true,
|
||||
// 设置裁剪框为固定的宽高比
|
||||
aspectRatio: props.aspectRatio,
|
||||
});
|
||||
};
|
||||
|
||||
// 裁剪后
|
||||
const sureSava = () => {
|
||||
if (dataFile.myCropper) {
|
||||
// 拿到裁剪后的图片
|
||||
dataFile.afterImg = dataFile.myCropper
|
||||
.getCroppedCanvas({
|
||||
imageSmoothingQuality: "high",
|
||||
})
|
||||
.toDataURL("image/jpeg"); // 设置图片格式
|
||||
context.emit("sureSava",convertDataUrlToBlob(dataFile.afterImg))
|
||||
} else {
|
||||
ElMessage({
|
||||
message: "请先选择图片",
|
||||
type: "warning",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 获取上传文件签名
|
||||
const upLoading = ref(false);
|
||||
const convertDataUrlToBlob = (dataUrl) => {
|
||||
const parts = dataUrl.split(';base64,');
|
||||
const contentType = parts[0].split(':')[1];
|
||||
const byteCharacters = atob(parts[1]);
|
||||
const byteArrays = [];
|
||||
|
||||
for (let offset = 0; offset < byteCharacters.length; offset += 512) {
|
||||
const slice = byteCharacters.slice(offset, offset + 512);
|
||||
|
||||
const byteNumbers = new Array(slice.length);
|
||||
for (let i = 0; i < slice.length; i++) {
|
||||
byteNumbers[i] = slice.charCodeAt(i);
|
||||
}
|
||||
|
||||
const byteArray = new Uint8Array(byteNumbers);
|
||||
byteArrays.push(byteArray);
|
||||
}
|
||||
|
||||
return new Blob(byteArrays, { type: contentType });
|
||||
};
|
||||
const cancle = () => {
|
||||
context.emit("cancle");
|
||||
}
|
||||
|
||||
// 页面刷新自动执行
|
||||
onMounted(() => {
|
||||
if (props.filePath) {
|
||||
dataFile.image.src = props.filePath;
|
||||
copper();
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
...toRefs(dataFile),
|
||||
sureSava,
|
||||
// boxClose,
|
||||
uploadImg,
|
||||
upLoading,
|
||||
cancle,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
#Box {
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
border-radius: 5px;
|
||||
height: 100%;
|
||||
> h3 {
|
||||
}
|
||||
> .box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 20px;
|
||||
> div {
|
||||
width: 400px;
|
||||
height: 200px;
|
||||
> img {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
> .box_2 {
|
||||
> .before {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
position: relative;
|
||||
left: 150px;
|
||||
overflow: hidden;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .btn {
|
||||
position: relative;
|
||||
display: flex;
|
||||
margin-top: 30px;
|
||||
> .upload {
|
||||
display: block;
|
||||
width: 60px;
|
||||
height: 32px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.personal-authentica {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 400;
|
||||
font-size: 12px;
|
||||
color: #ccc;
|
||||
> .context {
|
||||
position: absolute;
|
||||
z-index: 400;
|
||||
left: 50%;
|
||||
top: 30%;
|
||||
transform: translate(-50%, -50%);
|
||||
> .text-box {
|
||||
position: relative;
|
||||
// margin: 120px auto 0;
|
||||
width: 720px;
|
||||
height: 350px;
|
||||
background-color: #fff;
|
||||
> i {
|
||||
position: absolute;
|
||||
color: #aaa;
|
||||
right: 20px;
|
||||
top: 8px;
|
||||
font-size: 35px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
> .mark {
|
||||
position: fixed;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgba(43, 43, 43, 0.7215686275);
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -2,112 +2,45 @@
|
|||
<div class="user-info-head" @click="editCropper()">
|
||||
<img :src="options.img" title="点击上传头像" class="img-circle img-lg" />
|
||||
<el-dialog
|
||||
:title="title"
|
||||
v-model="open"
|
||||
width="800px"
|
||||
append-to-body
|
||||
@opened="modalOpened"
|
||||
@close="closeDialog"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :xs="24" :md="12" :style="{ height: '350px' }">
|
||||
<vue-cropper
|
||||
ref="cropper"
|
||||
:img="options.img"
|
||||
:info="true"
|
||||
:autoCrop="options.autoCrop"
|
||||
:autoCropWidth="options.autoCropWidth"
|
||||
:autoCropHeight="options.autoCropHeight"
|
||||
:fixedBox="options.fixedBox"
|
||||
:outputType="options.outputType"
|
||||
@realTime="realTime"
|
||||
v-if="visible"
|
||||
/>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="12" :style="{ height: '350px' }">
|
||||
<div class="avatar-upload-preview">
|
||||
<div v-show="show" class="large" :style="[{backgroundImage:`url(${options.img})`},largePosition]"></div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<br />
|
||||
<el-row>
|
||||
<el-col :lg="2" :md="2">
|
||||
<el-upload
|
||||
action="#"
|
||||
:http-request="requestUpload"
|
||||
:show-file-list="false"
|
||||
:before-upload="beforeUpload"
|
||||
>
|
||||
<el-button>
|
||||
选择
|
||||
<el-icon class="el-icon--right"><Upload /></el-icon>
|
||||
</el-button>
|
||||
</el-upload>
|
||||
</el-col>
|
||||
<el-col :lg="{ span: 1, offset: 2 }" :md="2">
|
||||
<el-button :icon="Plus" @click="changeScale(1)"></el-button>
|
||||
</el-col>
|
||||
<el-col :lg="{ span: 1, offset: 1 }" :md="2">
|
||||
<el-button :icon="Minus" @click="changeScale(-1)"></el-button>
|
||||
</el-col>
|
||||
<el-col :lg="{ span: 1, offset: 1 }" :md="2">
|
||||
<el-button :icon="RefreshLeft" @click="rotateLeft()"></el-button>
|
||||
</el-col>
|
||||
<el-col :lg="{ span: 1, offset: 1 }" :md="2">
|
||||
<el-button :icon="RefreshRight" @click="rotateRight()"></el-button>
|
||||
</el-col>
|
||||
<el-col :lg="{ span: 2, offset: 6 }" :md="2">
|
||||
<el-button type="primary" @click="uploadImg()">提 交</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<CropperImage
|
||||
ref="cropper"
|
||||
:filePath="options.img"
|
||||
@sureSava="uploadImg"
|
||||
@cancle="cancle"
|
||||
></CropperImage>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { Upload, Plus, Minus, RefreshLeft, RefreshRight } from '@element-plus/icons-vue'
|
||||
import {ref, reactive, getCurrentInstance, watch} from 'vue'
|
||||
import 'vue-cropper/dist/index.css'
|
||||
import { VueCropper } from 'vue-cropper'
|
||||
import {ref, reactive} from 'vue'
|
||||
import { uploadAvatar } from '@/api/system/user'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { useMouseInElement } from '@vueuse/core'
|
||||
import CropperImage from './cropperImage.vue'
|
||||
|
||||
const userStore = useUserStore()
|
||||
const { proxy } = getCurrentInstance()
|
||||
|
||||
const open = ref(false)
|
||||
const visible = ref(false)
|
||||
const title = ref('修改头像')
|
||||
|
||||
//图片裁剪数据
|
||||
const options = reactive({
|
||||
img: userStore.user.avatar, // 裁剪图片的地址
|
||||
autoCrop: true, // 是否默认生成截图框
|
||||
autoCropWidth: 200, // 默认生成截图框宽度
|
||||
autoCropHeight: 200, // 默认生成截图框高度
|
||||
autoCropWidth: 400, // 默认生成截图框宽度
|
||||
autoCropHeight: 400, // 默认生成截图框高度
|
||||
fixedBox: true, // 固定截图框大小 不允许改变
|
||||
outputType: 'png', // 默认生成截图为PNG格式
|
||||
previews: {} //预览数据
|
||||
})
|
||||
// 是否显示遮罩和大图
|
||||
const show = ref(false)
|
||||
// 遮罩的坐标(样式)
|
||||
const layerPosition = reactive({
|
||||
left: 0,
|
||||
top: 0
|
||||
})
|
||||
// 大图背景定位(样式)
|
||||
const largePosition = reactive({
|
||||
backgroundPositionX: 0,
|
||||
backgroundPositionY: 0
|
||||
})
|
||||
|
||||
const cropper = ref(null)
|
||||
const { elementX, elementY } = useMouseInElement(cropper)
|
||||
//监听是否拖动
|
||||
const transform = ref({})
|
||||
|
||||
/** 编辑头像 */
|
||||
function editCropper() {
|
||||
|
@ -117,84 +50,30 @@ function editCropper() {
|
|||
function modalOpened() {
|
||||
visible.value = true
|
||||
}
|
||||
/** 覆盖默认上传行为 */
|
||||
function requestUpload() {}
|
||||
/** 向左旋转 */
|
||||
function rotateLeft() {
|
||||
proxy.$refs.cropper.rotateLeft()
|
||||
}
|
||||
/** 向右旋转 */
|
||||
function rotateRight() {
|
||||
proxy.$refs.cropper.rotateRight()
|
||||
}
|
||||
/** 图片缩放 */
|
||||
function changeScale(num) {
|
||||
num = num || 1
|
||||
proxy.$refs.cropper.changeScale(num)
|
||||
}
|
||||
/** 上传预处理 */
|
||||
function beforeUpload(file) {
|
||||
if (file.type.indexOf('image/') == -1) {
|
||||
ElMessage({
|
||||
message: '文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。',
|
||||
type: 'error',
|
||||
})
|
||||
} else {
|
||||
const reader = new FileReader()
|
||||
reader.readAsDataURL(file)
|
||||
reader.onload = () => {
|
||||
options.img = reader.result
|
||||
}
|
||||
}
|
||||
}
|
||||
/** 上传图片 */
|
||||
function uploadImg() {
|
||||
proxy.$refs.cropper.getCropBlob((data) => {
|
||||
let formData = new FormData()
|
||||
formData.append('avatarfile', data)
|
||||
uploadAvatar(formData).then((response) => {
|
||||
open.value = false
|
||||
options.img = import.meta.env.VITE_APP_BASE_API + response.imgUrl
|
||||
userStore.user.avatar = options.img
|
||||
ElMessage({
|
||||
message: '上传成功',
|
||||
type: 'success',
|
||||
})
|
||||
visible.value = false
|
||||
function uploadImg(data) {
|
||||
let formData = new FormData()
|
||||
formData.append('avatarfile', data)
|
||||
uploadAvatar(formData).then((response) => {
|
||||
open.value = false
|
||||
options.img = import.meta.env.VITE_APP_BASE_API + response.imgUrl
|
||||
userStore.user.avatar = options.img
|
||||
ElMessage({
|
||||
message: '上传成功',
|
||||
type: 'success',
|
||||
})
|
||||
visible.value = false
|
||||
})
|
||||
}
|
||||
|
||||
/** 实时预览 */
|
||||
function realTime(data) {
|
||||
options.previews = data
|
||||
transform.value = Object.assign({}, data.img)
|
||||
}
|
||||
|
||||
/** 关闭窗口 */
|
||||
function closeDialog() {
|
||||
options.img = userStore.avatar
|
||||
// options.img = userStore.avatar
|
||||
options.visible = false
|
||||
}
|
||||
watch(transform, () => {
|
||||
// 根据得到数据设置样式数据和是否显示数据
|
||||
show.value = true
|
||||
// 计算坐标
|
||||
const position = { x: 0, y: 0 }
|
||||
|
||||
if (elementX.value < 100) position.x = 0
|
||||
else if (elementX.value > 300) position.x = 200
|
||||
else position.x = elementX.value - 100
|
||||
|
||||
if (elementY.value < 100) position.y = 0
|
||||
else if (elementY.value > 300) position.y = 200
|
||||
else position.y = elementY.value - 100
|
||||
// 给样式赋值
|
||||
layerPosition.left = position.x + 'px'
|
||||
layerPosition.top = position.y + 'px'
|
||||
largePosition.backgroundPositionX = -2 * position.x + 'px'
|
||||
largePosition.backgroundPositionY = -2 * position.y + 'px'
|
||||
},{deep:true})
|
||||
const cancle = () => {
|
||||
open.value = false
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang='scss' scoped>
|
||||
|
|
Loading…
Reference in New Issue