完成部分教师端前端代码,作业模块还没完成
This commit is contained in:
parent
812ec9c74c
commit
c829cb4718
|
|
@ -0,0 +1,8 @@
|
||||||
|
# 默认忽略的文件
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# 基于编辑器的 HTTP 客户端请求
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<annotationProcessing>
|
||||||
|
<profile default="true" name="Default" enabled="true" />
|
||||||
|
<profile name="Maven default annotation processors profile" enabled="true">
|
||||||
|
<sourceOutputDir name="target/generated-sources/annotations" />
|
||||||
|
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||||
|
<outputRelativeToContentRoot value="true" />
|
||||||
|
<module name="AES" />
|
||||||
|
</profile>
|
||||||
|
</annotationProcessing>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="file://$PROJECT_DIR$/AES/src/main/java" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/AES/src/main/resources" charset="UTF-8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RemoteRepositoriesConfiguration">
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="Central Repository" />
|
||||||
|
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="central" />
|
||||||
|
<option name="name" value="Maven Central repository" />
|
||||||
|
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||||
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="jboss.community" />
|
||||||
|
<option name="name" value="JBoss Community repository" />
|
||||||
|
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||||
|
</remote-repository>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
|
<component name="MavenProjectsManager">
|
||||||
|
<option name="originalFiles">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$/AES/pom.xml" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/AES/AES.iml" filepath="$PROJECT_DIR$/AES/AES.iml" />
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/AUTO_SCORE.iml" filepath="$PROJECT_DIR$/.idea/AUTO_SCORE.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,124 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Palette2">
|
||||||
|
<group name="Swing">
|
||||||
|
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Button" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="RadioButton" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="CheckBox" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||||
|
<initial-values>
|
||||||
|
<property name="text" value="Label" />
|
||||||
|
</initial-values>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||||
|
<preferred-size width="150" height="-1" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||||
|
<preferred-size width="150" height="50" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||||
|
<preferred-size width="200" height="200" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||||
|
<preferred-size width="-1" height="20" />
|
||||||
|
</default-constraints>
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||||
|
</item>
|
||||||
|
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||||
|
</item>
|
||||||
|
</group>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
# 默认忽略的文件
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# 基于编辑器的 HTTP 客户端请求
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="JAVA_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
@ -0,0 +1,69 @@
|
||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<code_scheme name="Project" version="173">
|
||||||
|
<option name="LINE_SEPARATOR" value=" " />
|
||||||
|
<option name="RIGHT_MARGIN" value="50" />
|
||||||
|
<option name="WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN" value="true" />
|
||||||
|
<HTMLCodeStyleSettings>
|
||||||
|
<option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
|
||||||
|
<option name="HTML_QUOTE_STYLE" value="Single" />
|
||||||
|
<option name="HTML_ENFORCE_QUOTES" value="true" />
|
||||||
|
</HTMLCodeStyleSettings>
|
||||||
|
<JSCodeStyleSettings version="0">
|
||||||
|
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
|
||||||
|
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||||
|
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||||
|
<option name="USE_DOUBLE_QUOTES" value="false" />
|
||||||
|
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||||
|
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
||||||
|
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||||
|
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||||
|
</JSCodeStyleSettings>
|
||||||
|
<TypeScriptCodeStyleSettings version="0">
|
||||||
|
<option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
|
||||||
|
<option name="FORCE_SEMICOLON_STYLE" value="true" />
|
||||||
|
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
|
||||||
|
<option name="USE_DOUBLE_QUOTES" value="false" />
|
||||||
|
<option name="FORCE_QUOTE_STYlE" value="true" />
|
||||||
|
<option name="ENFORCE_TRAILING_COMMA" value="Remove" />
|
||||||
|
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
|
||||||
|
<option name="SPACES_WITHIN_IMPORTS" value="true" />
|
||||||
|
</TypeScriptCodeStyleSettings>
|
||||||
|
<VueCodeStyleSettings>
|
||||||
|
<option name="INTERPOLATION_NEW_LINE_AFTER_START_DELIMITER" value="false" />
|
||||||
|
<option name="INTERPOLATION_NEW_LINE_BEFORE_END_DELIMITER" value="false" />
|
||||||
|
</VueCodeStyleSettings>
|
||||||
|
<codeStyleSettings language="HTML">
|
||||||
|
<option name="SOFT_MARGINS" value="100" />
|
||||||
|
<indentOptions>
|
||||||
|
<option name="INDENT_SIZE" value="2" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||||
|
<option name="TAB_SIZE" value="2" />
|
||||||
|
</indentOptions>
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="JAVA">
|
||||||
|
<option name="KEEP_SIMPLE_CLASSES_IN_ONE_LINE" value="true" />
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="JavaScript">
|
||||||
|
<option name="SOFT_MARGINS" value="100" />
|
||||||
|
<indentOptions>
|
||||||
|
<option name="INDENT_SIZE" value="2" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||||
|
<option name="TAB_SIZE" value="2" />
|
||||||
|
</indentOptions>
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="TypeScript">
|
||||||
|
<option name="SOFT_MARGINS" value="100" />
|
||||||
|
<indentOptions>
|
||||||
|
<option name="INDENT_SIZE" value="2" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||||
|
<option name="TAB_SIZE" value="2" />
|
||||||
|
</indentOptions>
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="Vue">
|
||||||
|
<option name="SOFT_MARGINS" value="100" />
|
||||||
|
<indentOptions>
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="2" />
|
||||||
|
</indentOptions>
|
||||||
|
</codeStyleSettings>
|
||||||
|
</code_scheme>
|
||||||
|
</component>
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<state>
|
||||||
|
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||||
|
</state>
|
||||||
|
</component>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="JavaScriptLibraryMappings">
|
||||||
|
<file url="file://$PROJECT_DIR$" libraries="{Node.js Core}" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/AES-front.iml" filepath="$PROJECT_DIR$/.idea/AES-front.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
@ -86,5 +86,19 @@
|
||||||
"vite-plugin-html": "^3.2.2",
|
"vite-plugin-html": "^3.2.2",
|
||||||
"vite-plugin-mock": "2.9.6",
|
"vite-plugin-mock": "2.9.6",
|
||||||
"vite-plugin-svg-icons": "^2.0.1"
|
"vite-plugin-svg-icons": "^2.0.1"
|
||||||
|
},
|
||||||
|
"pnpm": {
|
||||||
|
"ignoredBuiltDependencies": [
|
||||||
|
"bufferutil",
|
||||||
|
"es5-ext",
|
||||||
|
"vue-demi",
|
||||||
|
"vue-echarts"
|
||||||
|
],
|
||||||
|
"onlyBuiltDependencies": [
|
||||||
|
"bufferutil",
|
||||||
|
"es5-ext",
|
||||||
|
"vue-demi",
|
||||||
|
"vue-echarts"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -6,4 +6,9 @@ export default {
|
||||||
getTeacherInfo: () => request.post('/adminusers/getTeacherInfo'),
|
getTeacherInfo: () => request.post('/adminusers/getTeacherInfo'),
|
||||||
updateTeacherNoPassword: (data) => request.post('/adminusers/updateTeacherNoPassword', data),
|
updateTeacherNoPassword: (data) => request.post('/adminusers/updateTeacherNoPassword', data),
|
||||||
getTeacherSignList: () => request.post('/adminusers/getTeacherSignList'),
|
getTeacherSignList: () => request.post('/adminusers/getTeacherSignList'),
|
||||||
|
// findAllClassPage: (data) => request.post('/classes/findAllClassPage', data),
|
||||||
|
// findAllClasses: (data) => request.post('/classes/findAllClasses', data),
|
||||||
|
// findAllCoursesPage: (data) => request.post('/course/findAllCoursesPage', data)
|
||||||
|
signTeacher: (data) => request.post('/adminusers/signTeacher', data, { noNeedToken: true })
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,15 @@
|
||||||
:show-require-mark="false">
|
:show-require-mark="false">
|
||||||
<div>
|
<div>
|
||||||
<div class="grid md:flex md:flex-wrap md:gap-x-1">
|
<div class="grid md:flex md:flex-wrap md:gap-x-1">
|
||||||
<n-form-item label="学校:" class="flex-item" style="margin-left: -30px">
|
<!-- <n-form-item label="学校:" class="flex-item" style="margin-left: -30px">-->
|
||||||
<n-select v-model:value="assistantInfoValue.schoolId" :options="options" filterable style="min-width: 140px"></n-select>
|
<!-- <n-select v-model:value="assistantInfoValue.schoolId" :options="options" filterable style="min-width: 140px"></n-select>-->
|
||||||
|
<!-- </n-form-item>-->
|
||||||
|
<n-form-item label="姓名:"
|
||||||
|
class="flex-item"
|
||||||
|
style="margin-left: -30px">
|
||||||
|
<n-input
|
||||||
|
v-model:value="assistantInfoValue.name"
|
||||||
|
style="min-width: 80px" placeholder=""></n-input>
|
||||||
</n-form-item>
|
</n-form-item>
|
||||||
<n-form-item style="margin-left: 20px">
|
<n-form-item style="margin-left: 20px">
|
||||||
<n-button type="primary" @click="search">自定义查询</n-button>
|
<n-button type="primary" @click="search">自定义查询</n-button>
|
||||||
|
|
@ -52,7 +59,8 @@ import { useRouter } from 'vue-router';
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const assistantList = ref([])
|
const assistantList =
|
||||||
|
ref([{no:"2132312131",id:"1",account:"lisi",name:"李四",role:"助教",email:"2475525791@qq.com"}])
|
||||||
const options=ref([])
|
const options=ref([])
|
||||||
const paginationReactive = reactive({
|
const paginationReactive = reactive({
|
||||||
page: 1,
|
page: 1,
|
||||||
|
|
@ -66,6 +74,7 @@ const paginationReactive = reactive({
|
||||||
const assistantInfoValue = ref({
|
const assistantInfoValue = ref({
|
||||||
schoolId:0,
|
schoolId:0,
|
||||||
id:1,
|
id:1,
|
||||||
|
name:'',
|
||||||
pageNum:paginationReactive.page,
|
pageNum:paginationReactive.page,
|
||||||
pageSize:paginationReactive.pageSize
|
pageSize:paginationReactive.pageSize
|
||||||
});
|
});
|
||||||
|
|
@ -89,17 +98,17 @@ const columns = [
|
||||||
{
|
{
|
||||||
key: 'name',
|
key: 'name',
|
||||||
title: '姓名',
|
title: '姓名',
|
||||||
width: '80',
|
width: '70',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'role',
|
key: 'role',
|
||||||
title: '角色',
|
title: '角色',
|
||||||
width: '80',
|
width: '70',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'email',
|
key: 'email',
|
||||||
title: '邮箱',
|
title: '邮箱',
|
||||||
width: '80',
|
width: '100',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'actions',
|
key: 'actions',
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ const router = useRouter()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const classInfoRef = ref(null)
|
const classInfoRef = ref(null)
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const classList = ref([])
|
const classList = ref([{no:"2132312131",account:"lisi",name:"李四",email:"2475525791@qq.com"}])
|
||||||
const {clId} = route.params
|
const {clId} = route.params
|
||||||
const options = ref([])
|
const options = ref([])
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,14 @@
|
||||||
<div style="display: flex">
|
<div style="display: flex">
|
||||||
<div v-if="userStore.getRole().length>0 && userStore.getRole().some((r)=>r==='admin')">
|
<div v-if="userStore.getRole().length>0 && userStore.getRole().some((r)=>r==='admin')">
|
||||||
<div style="display: flex">
|
<div style="display: flex">
|
||||||
<n-form-item label="学校:">
|
<!-- <n-form-item label="学校:">-->
|
||||||
<n-select
|
<!-- <n-select-->
|
||||||
v-model:value="classInfoValue.id"
|
<!-- v-model:value="classInfoValue.id"-->
|
||||||
:options="options"
|
<!-- :options="options"-->
|
||||||
filterable
|
<!-- filterable-->
|
||||||
placeholder=""
|
<!-- placeholder=""-->
|
||||||
style="min-width: 140px"></n-select>
|
<!-- style="min-width: 140px"></n-select>-->
|
||||||
</n-form-item>
|
<!-- </n-form-item>-->
|
||||||
<n-form-item label="教师:" path="name" class="flex-item">
|
<n-form-item label="教师:" path="name" class="flex-item">
|
||||||
<n-select v-model:value="classInfoValue.teacherId"
|
<n-select v-model:value="classInfoValue.teacherId"
|
||||||
:options="options1"
|
:options="options1"
|
||||||
|
|
@ -68,8 +68,8 @@ const userStore = useUserStore()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const classInfoRef = ref(null)
|
const classInfoRef = ref(null)
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const classList = ref([])
|
const classList =
|
||||||
const options = ref([])
|
ref([{name:"C++班级",teacherName:"hqb",studentNum:"50",createTime:"2025-2-17",inviteCode:"46FJSJXHA"}])
|
||||||
const options1=ref([])
|
const options1=ref([])
|
||||||
const role=userStore.getRole()
|
const role=userStore.getRole()
|
||||||
const teacherId=ref()
|
const teacherId=ref()
|
||||||
|
|
@ -156,7 +156,6 @@ if (role[0]=='admin'){
|
||||||
{
|
{
|
||||||
onClickStudent: () => onStudentClass(row),
|
onClickStudent: () => onStudentClass(row),
|
||||||
onClickAssistant: () => onAssistantClass(row),
|
onClickAssistant: () => onAssistantClass(row),
|
||||||
onClickExam: () => onExamClass(row),
|
|
||||||
onClickEdit: () => onEditClass(row),
|
onClickEdit: () => onEditClass(row),
|
||||||
onClickDelete: () => onDeleteClass(row),
|
onClickDelete: () => onDeleteClass(row),
|
||||||
}
|
}
|
||||||
|
|
@ -200,7 +199,6 @@ if (role[0]=='admin'){
|
||||||
{
|
{
|
||||||
onClickStudent: () => onStudentClass(row),
|
onClickStudent: () => onStudentClass(row),
|
||||||
onClickAssistant: () => onAssistantClass(row),
|
onClickAssistant: () => onAssistantClass(row),
|
||||||
onClickExam: () => onExamClass(row),
|
|
||||||
onClickEdit: () => onEditClass(row),
|
onClickEdit: () => onEditClass(row),
|
||||||
onClickDelete: () => onDeleteClass(row),
|
onClickDelete: () => onDeleteClass(row),
|
||||||
}
|
}
|
||||||
|
|
@ -264,20 +262,19 @@ const onDeleteClass = async (classid)=>{
|
||||||
$message.error("删除失败")
|
$message.error("删除失败")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const onExamClass = async (classid)=>{
|
|
||||||
const {id} = classid
|
|
||||||
await router.push({name: 'AdminClassExam', params: {clId: id}, query: {teacherName: classid.teacherName,Id:classid.teacherId}})
|
|
||||||
}
|
|
||||||
const onStudentClass = async (classid)=>{
|
const onStudentClass = async (classid)=>{
|
||||||
const {id} = classid
|
// const {id} = classid
|
||||||
|
const id=1
|
||||||
await router.push({name: 'AdminClassStudents', params: {clId: id}})
|
await router.push({name: 'AdminClassStudents', params: {clId: id}})
|
||||||
}
|
}
|
||||||
const onAssistantClass = async (classid)=>{
|
const onAssistantClass = async (classid)=>{
|
||||||
const {id} = classid
|
// const {id} = classid
|
||||||
|
const id=1
|
||||||
await router.push({name: 'AdminClassAssistant', params: {clId: id}})
|
await router.push({name: 'AdminClassAssistant', params: {clId: id}})
|
||||||
}
|
}
|
||||||
const onEditClass = async (classid)=>{
|
const onEditClass = async (classid)=>{
|
||||||
const {id} = classid
|
// const {id} = classid
|
||||||
|
const id=1
|
||||||
await router.push({name: 'AdminClassEdit', params: {clId: id}})
|
await router.push({name: 'AdminClassEdit', params: {clId: id}})
|
||||||
}
|
}
|
||||||
const search=async ()=>{
|
const search=async ()=>{
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,8 @@ const userStore = useUserStore()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const classList = ref([])
|
const classList =
|
||||||
|
ref([{studentNo:"211310509",chineseName:"张三",username:"zhangsan",banji:"计算机2101",email:"2286848422@qq.com"}])
|
||||||
const {clId} = route.params
|
const {clId} = route.params
|
||||||
const cIId=parseInt(clId)
|
const cIId=parseInt(clId)
|
||||||
const options = ref([])
|
const options = ref([])
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,11 @@
|
||||||
">
|
">
|
||||||
助教信息
|
助教信息
|
||||||
</n-button>
|
</n-button>
|
||||||
<n-button type="primary" size="small" @click="onExam" style="--n-width: 70px;margin-left:15px ;padding: 0 0" v-if="
|
<!-- <n-button type="primary" size="small" @click="onExam" style="--n-width: 70px;margin-left:15px ;padding: 0 0" v-if="-->
|
||||||
userStore.getRole().length > 0 && (userStore.getRole().some((r) => r === 'admin'|| userStore.getRole().some((r) => r === 'teacher')))
|
<!-- userStore.getRole().length > 0 && (userStore.getRole().some((r) => r === 'admin'|| userStore.getRole().some((r) => r === 'teacher')))-->
|
||||||
">
|
<!-- ">-->
|
||||||
编程考试
|
<!-- 编程考试-->
|
||||||
</n-button>
|
<!-- </n-button>-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import {onMounted, reactive, ref} from "vue";
|
import {onMounted, reactive, ref} from "vue";
|
||||||
import ProblemActions from "@/views/admin/problem/components/ProblemActions.vue";
|
import ProblemActions from "@/views/admin/question/components/ProblemActions.vue";
|
||||||
import api from "@/api/admin";
|
import api from "@/api/admin";
|
||||||
import {useRoute, useRouter} from 'vue-router';
|
import {useRoute, useRouter} from 'vue-router';
|
||||||
import AssistantAction from "@/views/admin/class/components/assistant-action.vue";
|
import AssistantAction from "@/views/admin/class/components/assistant-action.vue";
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
<template>
|
||||||
|
<div class="grid md:flex md:flex-wrap md:gap-x-1" :class="{'justify-center': !showStudentInfoButton}">
|
||||||
|
<div>
|
||||||
|
<n-button type="info" size="small" @click="onAdd" style="--n-width: 120px;margin-left: 5px">
|
||||||
|
添加班级到课程
|
||||||
|
</n-button>
|
||||||
|
<n-button
|
||||||
|
v-if="showStudentInfoButton"
|
||||||
|
type="info"
|
||||||
|
size="small"
|
||||||
|
@click="onStudent"
|
||||||
|
style="--n-width: 80px;margin-left: 5px"
|
||||||
|
>
|
||||||
|
学生信息
|
||||||
|
</n-button>
|
||||||
|
<n-button
|
||||||
|
v-if="showStudentInfoButton"
|
||||||
|
type="info"
|
||||||
|
size="small"
|
||||||
|
@click="onAssistant"
|
||||||
|
style="--n-width: 80px;margin-left: 5px"
|
||||||
|
>
|
||||||
|
助教信息
|
||||||
|
</n-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
const emit = defineEmits(['clickAdd', 'clickStudentInfo','clickAssistant'])
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
showStudentInfoButton: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const onAdd = () => {
|
||||||
|
emit('clickAdd')
|
||||||
|
}
|
||||||
|
|
||||||
|
const onStudent = () => {
|
||||||
|
emit('clickStudentInfo')
|
||||||
|
}
|
||||||
|
const onAssistant = ()=>{
|
||||||
|
emit('clickAssistant')
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -7,16 +7,40 @@
|
||||||
<n-button type="primary" size="small" @click="onDelete" style="--n-width: 70px;margin: 0px 20px">
|
<n-button type="primary" size="small" @click="onDelete" style="--n-width: 70px;margin: 0px 20px">
|
||||||
删除
|
删除
|
||||||
</n-button>
|
</n-button>
|
||||||
|
<n-button type="primary" size="small" @click="onBanji" style="--n-width: 70px;margin: 0px 20px">
|
||||||
|
参与班级
|
||||||
|
</n-button>
|
||||||
|
<n-button type="primary" size="small"
|
||||||
|
@click="onAddQuestion"
|
||||||
|
style="margin-left: 12px">作业添加</n-button>
|
||||||
|
<n-button type="primary" size="small"
|
||||||
|
@click="onQuestion"
|
||||||
|
style="--n-width: 70px;margin: 0px 20px">
|
||||||
|
作业列表
|
||||||
|
</n-button>
|
||||||
|
<n-button type="primary" size="small" @click="onEdit" style="--n-width: 70px;margin: 0px 20px">
|
||||||
|
作业库
|
||||||
|
</n-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
const emit = defineEmits(['clickDelete'],['clickEdit'])
|
const emit =
|
||||||
|
defineEmits(['clickDelete'],['clickEdit'],['clickAdd'],['clickBanji'],['clickQuestion'])
|
||||||
const onDelete = ()=>{
|
const onDelete = ()=>{
|
||||||
emit('clickDelete')
|
emit('clickDelete')
|
||||||
}
|
}
|
||||||
const onEdit = ()=>{
|
const onEdit = ()=>{
|
||||||
emit('clickEdit')
|
emit('clickEdit')
|
||||||
}
|
}
|
||||||
|
const onAddQuestion = ()=>{
|
||||||
|
emit('clickAdd')
|
||||||
|
}
|
||||||
|
const onBanji = ()=>{
|
||||||
|
emit('clickBanji')
|
||||||
|
}
|
||||||
|
const onQuestion = ()=>{
|
||||||
|
emit('clickQuestion')
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,10 @@
|
||||||
<n-scrollbar x-scrollable style="max-height: 100vh">
|
<n-scrollbar x-scrollable style="max-height: 100vh">
|
||||||
<CommonPage show-footer>
|
<CommonPage show-footer>
|
||||||
<div>
|
<div>
|
||||||
<n-form ref="courseInfoRef" :model="courseInfoValue" :rules="rules" size="small" :label-width="180" inline >
|
<n-form ref="courseInfoRef"
|
||||||
|
:model="courseInfoValue"
|
||||||
|
:rules="rules" size="small"
|
||||||
|
:label-width="280" inline >
|
||||||
<n-form-item label="" path="input">
|
<n-form-item label="" path="input">
|
||||||
<div >
|
<div >
|
||||||
<div style="display: flex; align-items: center; margin-bottom: 20px;">
|
<div style="display: flex; align-items: center; margin-bottom: 20px;">
|
||||||
|
|
@ -24,7 +27,8 @@
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
:pagination="paginationReactive"
|
:pagination="paginationReactive"
|
||||||
:row-key="rowKey"
|
:row-key="rowKey"
|
||||||
style="width: 550px;--n-td-padding:0px 12px"
|
style="width:1000px;--n-td-padding:0px
|
||||||
|
12px"
|
||||||
@update:page="onChangePage"
|
@update:page="onChangePage"
|
||||||
@update:page-size="onUpdatePageSize"
|
@update:page-size="onUpdatePageSize"
|
||||||
/>
|
/>
|
||||||
|
|
@ -44,7 +48,7 @@ const router = useRouter()
|
||||||
const rules=ref(null)
|
const rules=ref(null)
|
||||||
const courseInfoRef = ref(null)
|
const courseInfoRef = ref(null)
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const courseList = ref([])
|
const courseList = ref([{ name: 'C++课程'}])
|
||||||
const paginationReactive = reactive({
|
const paginationReactive = reactive({
|
||||||
page: 1,
|
page: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
|
|
@ -59,25 +63,28 @@ const courseInfoValue = ref({
|
||||||
pageNum:paginationReactive.page,
|
pageNum:paginationReactive.page,
|
||||||
pageSize:paginationReactive.pageSize,
|
pageSize:paginationReactive.pageSize,
|
||||||
});
|
});
|
||||||
const onAdd = ()=>{
|
|
||||||
router.push({name: 'AdminCourseAdd'})
|
|
||||||
}
|
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
key: 'name',
|
key: 'name',
|
||||||
title: '课程名称',
|
title: '课程名称',
|
||||||
width: '80',
|
width: '75',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'actions',
|
key: 'actions',
|
||||||
title: '操作',
|
title: '操作',
|
||||||
width: '50',
|
width: '150',
|
||||||
render(row) {
|
render(row) {
|
||||||
return h(
|
return h(
|
||||||
CourseActions,
|
CourseActions,
|
||||||
{
|
{
|
||||||
onClickEdit: () => onEditCourses(row),
|
onClickEdit: () => onEditCourses(row),
|
||||||
onClickDelete: () => onDeleteCourses(row),
|
onClickDelete: () =>
|
||||||
|
onDeleteCourses(row),
|
||||||
|
onClickBanji: () => onBanjiExam(row),
|
||||||
|
onClickAdd:()=>onAddQuestion(row),
|
||||||
|
onClickQuestion:()=>onQuestion(row)
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -115,7 +122,8 @@ const sub = async ()=>{
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const onDeleteCourses = async (courses)=>{
|
const onDeleteCourses = async (courses)=>{
|
||||||
const {id} = courses
|
// const {id} = courses
|
||||||
|
const id=1
|
||||||
try {
|
try {
|
||||||
await api.deletecoursesInfo({id})
|
await api.deletecoursesInfo({id})
|
||||||
$message.success("删除成功")
|
$message.success("删除成功")
|
||||||
|
|
@ -126,7 +134,8 @@ const onDeleteCourses = async (courses)=>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const onEditCourses=async (courses)=>{
|
const onEditCourses=async (courses)=>{
|
||||||
const {id} = courses
|
// const {id} = courses
|
||||||
|
const id=1
|
||||||
await router.push({name: 'AdminCourseEdit', params: {chId: id}})
|
await router.push({name: 'AdminCourseEdit', params: {chId: id}})
|
||||||
}
|
}
|
||||||
const onUpdatePageSize = (pageSize) => {
|
const onUpdatePageSize = (pageSize) => {
|
||||||
|
|
@ -134,6 +143,36 @@ const onUpdatePageSize = (pageSize) => {
|
||||||
paginationReactive.page = 1;
|
paginationReactive.page = 1;
|
||||||
queryByPage(1)
|
queryByPage(1)
|
||||||
}
|
}
|
||||||
|
const onBanjiExam= async (classId)=>{
|
||||||
|
// const { id } = classId
|
||||||
|
const id=1
|
||||||
|
try {
|
||||||
|
await router.push({ name:
|
||||||
|
'AdminClassManage', query: { classId: id
|
||||||
|
} })
|
||||||
|
}catch (err){
|
||||||
|
$message.error('无法查看')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
const onQuestion= async (classId)=>{
|
||||||
|
// const { id } = classId
|
||||||
|
const id=1
|
||||||
|
try {
|
||||||
|
await router.push({ name:
|
||||||
|
'AdminProblemList', query: { classId: id
|
||||||
|
} })
|
||||||
|
}catch (err){
|
||||||
|
$message.error('无法查看')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
const onAdd = ()=>{
|
||||||
|
router.push({name: 'AdminCourseAdd'})
|
||||||
|
}
|
||||||
|
const onAddQuestion= ()=>{
|
||||||
|
router.push({name: 'AdminProblemAdd'})
|
||||||
|
}
|
||||||
const rowKey = (rowData) => {
|
const rowKey = (rowData) => {
|
||||||
return rowData.id
|
return rowData.id
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,272 @@
|
||||||
|
<template>
|
||||||
|
<CommonPage>
|
||||||
|
<div style="display: flex; align-items: center; margin-bottom: 10px">
|
||||||
|
<n-form ref="userInfoRef" size="small" :label-width="200" inline>
|
||||||
|
<n-form-item label="" path="input">
|
||||||
|
<div style="display: flex; align-items: center;">
|
||||||
|
<!-- <div v-if="userStore.getRole().length > 0 && userStore.getRole().some(r => r === 'admin')" style="display: flex; align-items: center;">-->
|
||||||
|
<!-- <span style="width: 40px; margin-left: 18px">学校</span>-->
|
||||||
|
<!-- <n-select-->
|
||||||
|
<!-- v-model:value="teacherInfoValue.schoolId"-->
|
||||||
|
<!-- :options="options1"-->
|
||||||
|
<!-- filterable-->
|
||||||
|
<!-- style="min-width: 80px; width: 200px"-->
|
||||||
|
<!-- />-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- <div v-if="userStore.getRole().length > 0 && userStore.getRole().some(r => r === 'teacher') && otherSchool" style="display: flex; align-items: center;">-->
|
||||||
|
<!-- <span style="width: 40px; margin-left: 18px">学校</span>-->
|
||||||
|
<!-- <n-select-->
|
||||||
|
<!-- v-model:value="teacherInfoValue.schoolId"-->
|
||||||
|
<!-- :options="options1"-->
|
||||||
|
<!-- filterable-->
|
||||||
|
<!-- style="min-width: 80px; width: 200px"-->
|
||||||
|
<!-- />-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<span style="width: 40px; margin-left: 30px">教师</span>
|
||||||
|
<n-select
|
||||||
|
v-model:value="teacherInfoValue.teacherId"
|
||||||
|
:options="options2"
|
||||||
|
style="min-width: 80px; width: 100px; margin-right: 12px"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<n-button
|
||||||
|
style="margin-left: 30px"
|
||||||
|
type="primary"
|
||||||
|
:loading="queryLoading"
|
||||||
|
@click="getClassesNotInExam"
|
||||||
|
>
|
||||||
|
查询
|
||||||
|
</n-button>
|
||||||
|
<n-checkbox
|
||||||
|
ml-20
|
||||||
|
size="medium"
|
||||||
|
v-if="userStore.getRole().length > 0 && userStore.getRole().some(r => r === 'teacher')"
|
||||||
|
v-model:checked="otherSchool"
|
||||||
|
@update:checked="handleCheckedChange">
|
||||||
|
其它学校班级
|
||||||
|
</n-checkbox>
|
||||||
|
</n-form-item>
|
||||||
|
</n-form>
|
||||||
|
</div>
|
||||||
|
<n-data-table
|
||||||
|
remote
|
||||||
|
:data="classes"
|
||||||
|
:columns="columns"
|
||||||
|
:pagination="paginationReactive"
|
||||||
|
:loading="loading"
|
||||||
|
style="--n-td-padding: 2px 5px;"
|
||||||
|
class="mb-70 min-w-600 overflow-auto"
|
||||||
|
/>
|
||||||
|
</CommonPage>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import CommonPage from '@/components/page/CommonPage.vue'
|
||||||
|
import {h, onMounted, ref, watch} from 'vue'
|
||||||
|
import {useUserStore} from '@/store'
|
||||||
|
import ExamClassesAddActions from "./components/ExamClassesAddAction.vue";
|
||||||
|
import api from '@/api/admin'
|
||||||
|
import {formatDateTime} from '@/utils'
|
||||||
|
import {useRoute, useRouter} from 'vue-router'
|
||||||
|
import {NButton} from 'naive-ui'
|
||||||
|
|
||||||
|
const router = useRouter()
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const route = useRoute()
|
||||||
|
const { examId, history } = route.query
|
||||||
|
const role = ref(userStore.getRole())
|
||||||
|
const options1 =
|
||||||
|
ref([])
|
||||||
|
const options2 = ref([])
|
||||||
|
const queryLoading = ref(false)
|
||||||
|
const teacherInfoValue = ref({
|
||||||
|
schoolId: '1',
|
||||||
|
teacherId: '',
|
||||||
|
})
|
||||||
|
const teacherId = ref(0)
|
||||||
|
const classes = ref([{id:1,name:'班级1',teacherName:'黄秋波',studentNum:40}])
|
||||||
|
const loading = ref(false)
|
||||||
|
const otherSchool = ref(false)
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
title: '编号',
|
||||||
|
key: 'id',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '班级名称',
|
||||||
|
key: 'name',
|
||||||
|
align: 'center',
|
||||||
|
width: 300,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '教师',
|
||||||
|
key: 'teacherName',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '学生数',
|
||||||
|
key: 'studentNum',
|
||||||
|
align: 'center',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '创建时间',
|
||||||
|
key: 'createTime',
|
||||||
|
width: 200,
|
||||||
|
align: 'center',
|
||||||
|
render(row) {
|
||||||
|
return formatDateTime(row.createTime)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: '操作',
|
||||||
|
align: 'center',
|
||||||
|
width:'333px',
|
||||||
|
|
||||||
|
render(row) {
|
||||||
|
const isAdmin = userStore.getRole().some((r) => r === 'admin');
|
||||||
|
const isTeacher = userStore.getName() === row.teacherName;
|
||||||
|
|
||||||
|
return h(
|
||||||
|
ExamClassesAddActions,
|
||||||
|
{
|
||||||
|
onClickAdd: () => addClassToExam(row),
|
||||||
|
onClickStudentInfo: () => onStudentClass(row),
|
||||||
|
showStudentInfoButton: isAdmin || isTeacher,
|
||||||
|
onClickAssistant: () => onAssistantClass(row),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}, },
|
||||||
|
]
|
||||||
|
|
||||||
|
const paginationReactive = reactive({
|
||||||
|
page: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
showSizePicker: true,
|
||||||
|
pageSizes: [10, 20, 50],
|
||||||
|
onChange: (page) => {
|
||||||
|
paginationReactive.page = page
|
||||||
|
getClassesNotInExam()
|
||||||
|
},
|
||||||
|
onUpdatePageSize: (pageSize) => {
|
||||||
|
paginationReactive.pageSize = pageSize
|
||||||
|
paginationReactive.page = 1
|
||||||
|
getClassesNotInExam()
|
||||||
|
},
|
||||||
|
prefix({ itemCount }) {
|
||||||
|
return `总共 ${itemCount} 条`
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const onAssistantClass = async (classId)=>{
|
||||||
|
const {id} = classId
|
||||||
|
await router.push({name: 'AdminClassAssistant', params: {clId: id}})
|
||||||
|
}
|
||||||
|
const getSchools = async () => {
|
||||||
|
try {
|
||||||
|
const res = await api.findAllSchools()
|
||||||
|
const transformData = res.data.map((item) => ({
|
||||||
|
label: item.name,
|
||||||
|
value: item.id,
|
||||||
|
}))
|
||||||
|
transformData.unshift({
|
||||||
|
label: '全部',
|
||||||
|
value: 0,
|
||||||
|
})
|
||||||
|
teacherInfoValue.value.schoolId = parseInt(userStore.getSchoolId(), 10)
|
||||||
|
options1.value = transformData
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
$message.error('获取学校的信息失败')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const queryByPage1 = async (query) => {
|
||||||
|
const res = await api.findAllAdminusersBySchoolId({
|
||||||
|
schoolId: query,
|
||||||
|
})
|
||||||
|
const transformedData = res.data.map((item) => ({
|
||||||
|
label: item.name,
|
||||||
|
value: item.id,
|
||||||
|
}))
|
||||||
|
if(res.data.length > 0) {
|
||||||
|
transformedData.unshift({
|
||||||
|
label: '全部',
|
||||||
|
value: 0,
|
||||||
|
})
|
||||||
|
teacherInfoValue.value.teacherId = 0
|
||||||
|
if (userStore.getRole().includes('teacher')) {
|
||||||
|
teacherInfoValue.value.teacherId = parseInt(userStore.getId(), 10)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
transformedData.unshift({
|
||||||
|
label: '无',
|
||||||
|
value: 0,
|
||||||
|
})
|
||||||
|
teacherInfoValue.value.teacherId = 0
|
||||||
|
}
|
||||||
|
options2.value = transformedData
|
||||||
|
await getClassesNotInExam()
|
||||||
|
}
|
||||||
|
watch(
|
||||||
|
() => teacherInfoValue.value.schoolId,
|
||||||
|
(newVal) => {
|
||||||
|
teacherInfoValue.value.teacherId = ''
|
||||||
|
options2.value = []
|
||||||
|
queryByPage1(newVal)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
const onStudentClass = (classId)=>{
|
||||||
|
const {id} = classId
|
||||||
|
router.push({name: 'AdminClassStudents',params:{clId: id}})
|
||||||
|
}
|
||||||
|
const addClassToExam = async (classId) => {
|
||||||
|
const {id} = classId
|
||||||
|
try {
|
||||||
|
await api.addClassToExam({
|
||||||
|
examId: examId,
|
||||||
|
classId: id,
|
||||||
|
history:history
|
||||||
|
})
|
||||||
|
|
||||||
|
$message.success('添加成功')
|
||||||
|
classes.value = classes.value.filter((item) => item.id !== classId.id);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const getClassesNotInExam = async () => {
|
||||||
|
try {
|
||||||
|
loading.value = true
|
||||||
|
|
||||||
|
const res = await api.findClassNotInExam({
|
||||||
|
examId: examId,
|
||||||
|
teacherId: teacherInfoValue.value.teacherId,
|
||||||
|
id: teacherInfoValue.value.schoolId,
|
||||||
|
pageNum: paginationReactive.page,
|
||||||
|
pageSize: paginationReactive.pageSize,
|
||||||
|
history:history
|
||||||
|
})
|
||||||
|
classes.value = res.data.list
|
||||||
|
paginationReactive.itemCount = res.data.total
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error)
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleCheckedChange = (checked) => {
|
||||||
|
otherSchool.value = checked
|
||||||
|
if(!checked) {
|
||||||
|
teacherInfoValue.value.schoolId = parseInt(userStore.getSchoolId(), 10)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
queryByPage1()
|
||||||
|
getSchools()
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
@ -15,19 +15,19 @@
|
||||||
label-width="300px"
|
label-width="300px"
|
||||||
>
|
>
|
||||||
<div class="grid md:gap-x-30">
|
<div class="grid md:gap-x-30">
|
||||||
<n-form-item label="选择学校(从下拉框选择)" path="schoolId">
|
<!-- <n-form-item label="选择学校(从下拉框选择)" path="schoolId">-->
|
||||||
<n-select
|
<!-- <n-select-->
|
||||||
v-model:value="formValue.schoolId"
|
<!-- v-model:value="formValue.schoolId"-->
|
||||||
filterable
|
<!-- filterable-->
|
||||||
placeholder="搜索学校(输入学校名字)"
|
<!-- placeholder="搜索学校(输入学校名字)"-->
|
||||||
:options="schoolOptions"
|
<!-- :options="schoolOptions"-->
|
||||||
@search="handleSearchSchool"
|
<!-- @search="handleSearchSchool"-->
|
||||||
/>
|
<!-- />-->
|
||||||
</n-form-item>
|
<!-- </n-form-item>-->
|
||||||
<n-form-item label="工号">
|
<n-form-item label="工号">
|
||||||
<n-input
|
<n-input
|
||||||
v-model:value="formValue.no"
|
v-model:value="formValue.no"
|
||||||
@blur="findExistUser"
|
@blur='findExistUser'
|
||||||
placeholder=""
|
placeholder=""
|
||||||
></n-input>
|
></n-input>
|
||||||
</n-form-item>
|
</n-form-item>
|
||||||
|
|
@ -104,7 +104,7 @@ const options= ['teacher', 'assistant'].map((v) => ({
|
||||||
}))
|
}))
|
||||||
const formRef = ref(null)
|
const formRef = ref(null)
|
||||||
const formValue = ref({
|
const formValue = ref({
|
||||||
schoolId: null,
|
// schoolId: null,
|
||||||
no: '',
|
no: '',
|
||||||
account:'',
|
account:'',
|
||||||
name: '',
|
name: '',
|
||||||
|
|
@ -118,9 +118,9 @@ const formValue = ref({
|
||||||
answer: '',
|
answer: '',
|
||||||
})
|
})
|
||||||
|
|
||||||
const schoolOptions = ref([])
|
// const schoolOptions = ref([])
|
||||||
const formRules = {
|
const formRules = {
|
||||||
schoolId: requiredRule('学校'),
|
// schoolId: requiredRule('学校'),
|
||||||
name: requiredRule('姓名'),
|
name: requiredRule('姓名'),
|
||||||
email: emailRule(false),
|
email: emailRule(false),
|
||||||
password: strictPasswordRule(),
|
password: strictPasswordRule(),
|
||||||
|
|
@ -128,20 +128,20 @@ const formRules = {
|
||||||
question: requiredRule('问题'),
|
question: requiredRule('问题'),
|
||||||
answer: requiredRule('答案'),
|
answer: requiredRule('答案'),
|
||||||
}
|
}
|
||||||
const handleSearchSchool = async (query) => {
|
// const handleSearchSchool = async (query) => {
|
||||||
const res = await api.getSchoolByschoolName({
|
// const res = await api.getSchoolByschoolName({
|
||||||
name: query,
|
// name: query,
|
||||||
})
|
// })
|
||||||
schoolOptions.value = res.data.map((item) => ({
|
// schoolOptions.value = res.data.map((item) => ({
|
||||||
label: item.name,
|
// label: item.name,
|
||||||
value: item.id + '',
|
// value: item.id + '',
|
||||||
}))
|
// }))
|
||||||
}
|
// }
|
||||||
|
|
||||||
const findExistUser = async () => {
|
const findExistUser = async () => {
|
||||||
const res = await api.findAdminuserByno({
|
const res = await api.findAdminuserByno({
|
||||||
no: formValue.value.no,
|
no: formValue.value.no
|
||||||
schoolId:formValue.value.schoolId
|
// schoolId:formValue.value.schoolId
|
||||||
})
|
})
|
||||||
if (res.data) {
|
if (res.data) {
|
||||||
const { account, name, email,no,question,answer} = res.data
|
const { account, name, email,no,question,answer} = res.data
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,28 @@
|
||||||
<template>
|
<template>
|
||||||
<div flex-col gap-y-10 style="width: 30px">
|
<div flex-col gap-y-10 style="width: 30px">
|
||||||
<div flex>
|
<div flex>
|
||||||
<n-button type="info" size="small" @click="onEdit" style="--n-width: 60px;margin-left: 8px">
|
<n-button type="primary" size="small"
|
||||||
编辑
|
@click="onEdit"
|
||||||
|
style="--n-width: 80px;margin-left: 8px">
|
||||||
|
修改设置
|
||||||
</n-button>
|
</n-button>
|
||||||
<n-button type="info" size="small" @click="onDelete" style="--n-width: 60px;margin-left: 8px">
|
<n-button type="primary" size="small"
|
||||||
删除
|
@click="onReview"
|
||||||
|
style="--n-width:
|
||||||
|
60px;margin-left: 8px">
|
||||||
|
批阅
|
||||||
</n-button>
|
</n-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
const emit = defineEmits(['clickDelete','clickEdit'])
|
const emit =
|
||||||
|
defineEmits(['clickDelete','clickReview'])
|
||||||
const onEdit = ()=>{
|
const onEdit = ()=>{
|
||||||
emit('clickEdit')
|
emit('clickEdit')
|
||||||
}
|
}
|
||||||
const onDelete = ()=>{
|
const onReview = ()=>{
|
||||||
emit('clickDelete')
|
emit('clickReview')
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,339 @@
|
||||||
<template>
|
<template>
|
||||||
作业列表
|
<n-scrollbar x-scrollable style="max-height: 100vh">
|
||||||
|
<CommonPage show-footer>
|
||||||
|
<div style="margin-top: 0px">
|
||||||
|
<n-form ref="ProblemInfoRef"
|
||||||
|
:model="ProblemInfoValue"
|
||||||
|
:rules="rules"
|
||||||
|
label-placement="left"
|
||||||
|
size="small"
|
||||||
|
:label-width="60" >
|
||||||
|
<div style="display: flex">
|
||||||
|
<div v-if="userStore.getRole().length>0 && userStore.getRole().some((r)=>r==='admin')">
|
||||||
|
<div style="display: flex">
|
||||||
|
<n-form-item label="班级:"
|
||||||
|
path="name" Problem="flex-item">
|
||||||
|
<n-select
|
||||||
|
v-model:value="ProblemInfoValue.ProblemId"
|
||||||
|
:options="options1"
|
||||||
|
style="min-width: 80px;width: 140px"></n-select>
|
||||||
|
</n-form-item>
|
||||||
|
<n-form-item style="margin-left: 10px">
|
||||||
|
<n-button type="primary" @click="search" style="margin-left: 10px;margin-right: 20px">查询</n-button>
|
||||||
|
</n-form-item>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</n-form>
|
||||||
|
</div>
|
||||||
|
<n-data-table
|
||||||
|
remote
|
||||||
|
:single-line="false"
|
||||||
|
ref="table"
|
||||||
|
:columns="columns"
|
||||||
|
:data="ProblemList"
|
||||||
|
:loading="loading"
|
||||||
|
:pagination="paginationReactive"
|
||||||
|
:row-key="rowKey"
|
||||||
|
:scroll-x="900"
|
||||||
|
style="width: 1180px;--n-td-padding:0px 5px;"
|
||||||
|
@update:page="onChangePage"
|
||||||
|
@update:page-size="onUpdatePageSize"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</CommonPage>
|
||||||
|
</n-scrollbar>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {ref, reactive, onMounted, watch} from 'vue'
|
||||||
|
import api from '@/api/admin';
|
||||||
|
import ProblemActions from
|
||||||
|
'./components/ProblemActions.vue';
|
||||||
|
import {formatDateTime} from '@/utils';
|
||||||
|
import { useUserStore } from '@/store';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
const rules=ref(null)
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const router = useRouter()
|
||||||
|
const ProblemInfoRef = ref(null)
|
||||||
|
const loading = ref(true)
|
||||||
|
const ProblemList =
|
||||||
|
ref([{title:"C++班级",timeRange:"2025-02-17 20:00:00 - 2025-2-28 23:00:00",daipi:"50",yijiao:"60",weijiao:"20"}])
|
||||||
|
const options1=ref([])
|
||||||
|
const role=userStore.getRole()
|
||||||
|
const teacherId=ref()
|
||||||
|
const paginationReactive = reactive({
|
||||||
|
page: 1,
|
||||||
|
pageSize: 50,
|
||||||
|
showSizePicker: true,
|
||||||
|
pageSizes: [50, 100,150],
|
||||||
|
prefix ({ itemCount }) {
|
||||||
|
return `总共 ${itemCount} 条`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const ProblemInfoValue = ref({
|
||||||
|
pageNum:paginationReactive.page,
|
||||||
|
pageSize:paginationReactive.pageSize,
|
||||||
|
id:0,
|
||||||
|
teacherId:'',
|
||||||
|
});
|
||||||
|
const onAdd = ()=>{
|
||||||
|
router.push({name: 'AdminProblemAdd'})
|
||||||
|
}
|
||||||
|
const queryByPage1=async (value)=>{
|
||||||
|
if (userStore.getRole().some((r) => r === 'admin')) {
|
||||||
|
const res = await api.findAllAdminusersBySchoolId({
|
||||||
|
schoolId: value,
|
||||||
|
})
|
||||||
|
const transformedData = res.data.map((item) => ({
|
||||||
|
label: item.name,
|
||||||
|
value: item.id,
|
||||||
|
}))
|
||||||
|
transformedData.unshift({
|
||||||
|
label: '全部',
|
||||||
|
value: 0,
|
||||||
|
})
|
||||||
|
ProblemInfoValue.value.teacherId = 0
|
||||||
|
options1.value = transformedData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
watch(()=>ProblemInfoValue.value.id,
|
||||||
|
(newVal)=>{
|
||||||
|
ProblemInfoValue.value.teacherId=''
|
||||||
|
options1.value=[]
|
||||||
|
queryByPage1(newVal)
|
||||||
|
})
|
||||||
|
let columns
|
||||||
|
if (role[0]=='admin'){
|
||||||
|
columns = [
|
||||||
|
{
|
||||||
|
key: 'title',
|
||||||
|
title: '作业标题',
|
||||||
|
width: '200',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'timeRange',
|
||||||
|
title: '作答时间',
|
||||||
|
width: '300',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'daipi',
|
||||||
|
title: '待批',
|
||||||
|
width: '60',
|
||||||
|
align:'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'yijiao',
|
||||||
|
title: '已交',
|
||||||
|
width: '60',
|
||||||
|
align:'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'weijiao',
|
||||||
|
title: '未交',
|
||||||
|
width: '60',
|
||||||
|
align:'center'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'actions',
|
||||||
|
title: '操作',
|
||||||
|
width: '450',
|
||||||
|
render(row) {
|
||||||
|
return h(
|
||||||
|
ProblemActions,
|
||||||
|
{
|
||||||
|
onClickEdit: () => onEditProblem(row),
|
||||||
|
onClickReview: () =>
|
||||||
|
onReviewProblem(row),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}else {
|
||||||
|
columns = [
|
||||||
|
{
|
||||||
|
key: 'name',
|
||||||
|
title: '班级名称',
|
||||||
|
width: '260',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'studentNum',
|
||||||
|
title: '学生数',
|
||||||
|
width: '80',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'createTime',
|
||||||
|
title: '创建时间',
|
||||||
|
width: '190',
|
||||||
|
render: (row) => {
|
||||||
|
return row["createTime"]=formatDateTime(row["createTime"]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'inviteCode',
|
||||||
|
title: '邀请码',
|
||||||
|
width: '130',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'actions',
|
||||||
|
title: '操作',
|
||||||
|
width: '450',
|
||||||
|
render(row) {
|
||||||
|
if(role[0]==='teacher'){
|
||||||
|
return h(
|
||||||
|
ProblemActions,
|
||||||
|
{
|
||||||
|
onClickStudent: () => onStudentProblem(row),
|
||||||
|
onClickAssistant: () => onAssistantProblem(row),
|
||||||
|
onClickEdit: () => onEditProblem(row),
|
||||||
|
onClickDelete: () => onDeleteProblem(row),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if(role[0]==='assistant'){
|
||||||
|
return h(
|
||||||
|
ProblemActions,
|
||||||
|
{
|
||||||
|
onClickStudent: () => onStudentProblem(row),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
const queryByPage = async (currentPage)=>{
|
||||||
|
loading.value = true;
|
||||||
|
try {
|
||||||
|
ProblemInfoValue.value.pageSize=paginationReactive.pageSize
|
||||||
|
const res = await api.findAllProblemPage(
|
||||||
|
{
|
||||||
|
...ProblemInfoValue.value
|
||||||
|
}
|
||||||
|
);
|
||||||
|
console.log(res.data)
|
||||||
|
if (userStore.getRole().some((r) => r === 'admin')){
|
||||||
|
const res1=await api.findAllShoolsInAdminusers()
|
||||||
|
const list1=res1.data
|
||||||
|
const transformedDatas=list1.map(item => ({
|
||||||
|
label: item.name,
|
||||||
|
value: item.id,
|
||||||
|
}));
|
||||||
|
transformedDatas.unshift({
|
||||||
|
label: '全部',
|
||||||
|
value: 0,
|
||||||
|
});
|
||||||
|
options.value=transformedDatas;
|
||||||
|
}
|
||||||
|
const {pageNum, pageSize, total, list} = res.data
|
||||||
|
paginationReactive.page = pageNum
|
||||||
|
paginationReactive.pageSize = pageSize
|
||||||
|
paginationReactive.itemCount = total
|
||||||
|
ProblemList.value=list.map((item,i)=>{return item;})
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const onDeleteProblem = async (problemid)=>{
|
||||||
|
const {id} = problemid
|
||||||
|
try {
|
||||||
|
const res = await api.deleteProblem({id})
|
||||||
|
$message.success("删除成功")
|
||||||
|
if (!loading.value) {
|
||||||
|
await queryByPage()
|
||||||
|
}
|
||||||
|
}catch (err){
|
||||||
|
$message.error("删除失败")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const onStudentProblem = async (problemid)=>{
|
||||||
|
// const {id} = problemid
|
||||||
|
const id=1
|
||||||
|
await router.push({name: 'AdminProblemStudents', params: {clId: id}})
|
||||||
|
}
|
||||||
|
const onAssistantProblem = async (problemid)=>{
|
||||||
|
// const {id} = problemid
|
||||||
|
const id=1
|
||||||
|
await router.push({name: 'AdminProblemAssistant', params: {clId: id}})
|
||||||
|
}
|
||||||
|
const onEditProblem = async (problemid)=>{
|
||||||
|
const {id} = problemid
|
||||||
|
await router.push({name: 'AdminProblemEdit', params: {clId: id}})
|
||||||
|
}
|
||||||
|
const search=async ()=>{
|
||||||
|
loading.value=true
|
||||||
|
try {
|
||||||
|
if (userStore.getRole().some((r)=>r==='admin')){
|
||||||
|
const res=await api.findAllProblemPage({
|
||||||
|
...ProblemInfoValue.value
|
||||||
|
})
|
||||||
|
const { pageNum, pageSize, total, list } = res.data
|
||||||
|
paginationReactive.page = pageNum
|
||||||
|
paginationReactive.pageSize = pageSize
|
||||||
|
paginationReactive.itemCount = total
|
||||||
|
ProblemList.value=list.map((item,i)=>{return item;})
|
||||||
|
}
|
||||||
|
}catch (err){
|
||||||
|
}finally {
|
||||||
|
loading.value=false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const handleSearchSchool = async (query) => {
|
||||||
|
const res = await api.getSchoolByschoolName({
|
||||||
|
name: query,
|
||||||
|
})
|
||||||
|
options.value = res.data.map((item) => ({
|
||||||
|
label: item.name,
|
||||||
|
value: item.id,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
const rowProps = (row) => {
|
||||||
|
let style = "cursor: pointer;"
|
||||||
|
|
||||||
|
// 定义点击事件处理器
|
||||||
|
const onClick = () => {
|
||||||
|
window.open(`${import.meta.env.VITE_HOST}/#/user/contest/${examId}/problems/${row.id}`, '_blank')
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
style,
|
||||||
|
onClick
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const rowKey = (rowData) => {
|
||||||
|
return rowData.id
|
||||||
|
}
|
||||||
|
const onUpdatePageSize = (pageSize) => {
|
||||||
|
paginationReactive.pageSize = pageSize;
|
||||||
|
paginationReactive.page = 1;
|
||||||
|
if (!loading.value) {
|
||||||
|
queryByPage(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const onChangePage = (page) => {
|
||||||
|
paginationReactive.page = page;
|
||||||
|
ProblemInfoValue.value.pageNum=page
|
||||||
|
if (!loading.value) {
|
||||||
|
queryByPage(page)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onMounted(()=>{
|
||||||
|
queryByPage()
|
||||||
|
})
|
||||||
|
watch(
|
||||||
|
()=>router.currentRoute.value.fullPath,
|
||||||
|
()=>{
|
||||||
|
if
|
||||||
|
(router.currentRoute.value.fullPath==='/admin/problem/problem-list') {
|
||||||
|
queryByPage(paginationReactive.page)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
<template>
|
||||||
|
作业库
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
</script>
|
||||||
|
|
@ -42,7 +42,7 @@ export default {
|
||||||
{
|
{
|
||||||
name: 'AdminProblemList',
|
name: 'AdminProblemList',
|
||||||
path: 'problem-list',
|
path: 'problem-list',
|
||||||
component: () => import('./problem/problem-list.vue'),
|
component: () => import('@/views/admin/problem/problem-list.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: '作业列表',
|
title: '作业列表',
|
||||||
icon: 'eva:list-fill',
|
icon: 'eva:list-fill',
|
||||||
|
|
@ -54,7 +54,7 @@ export default {
|
||||||
{
|
{
|
||||||
name: 'AdminProblemAdd',
|
name: 'AdminProblemAdd',
|
||||||
path: 'problem-add',
|
path: 'problem-add',
|
||||||
component: () => import('./problem/problem-add.vue'),
|
component: () => import('@/views/admin/problem/problem-add.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: '作业添加',
|
title: '作业添加',
|
||||||
icon: 'ic:baseline-add',
|
icon: 'ic:baseline-add',
|
||||||
|
|
@ -63,6 +63,18 @@ export default {
|
||||||
keepAlive: true,
|
keepAlive: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'AdminProblemStore',
|
||||||
|
path: 'problem-store',
|
||||||
|
component: () => import('@/views/admin/problem/problem-store.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '作业库',
|
||||||
|
icon: 'ic:baseline-add',
|
||||||
|
role: ['admin', 'teacher'],
|
||||||
|
requireAuth: true,
|
||||||
|
keepAlive: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -112,6 +124,18 @@ export default {
|
||||||
requireAuth: true,
|
requireAuth: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'AdminClassManage',
|
||||||
|
path: 'view-classes-not-in-exam',
|
||||||
|
isHidden: true,
|
||||||
|
component: () => import('./course/view-classes-not-in-exam.vue'),
|
||||||
|
meta: {
|
||||||
|
title: '添加班级到考试',
|
||||||
|
role: ['admin', 'teacher', 'assistant'],
|
||||||
|
requireAuth: true,
|
||||||
|
keepAlive: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,14 @@
|
||||||
:show-require-mark="false">
|
:show-require-mark="false">
|
||||||
<div>
|
<div>
|
||||||
<div class="grid md:flex md:flex-wrap md:gap-x-1">
|
<div class="grid md:flex md:flex-wrap md:gap-x-1">
|
||||||
<n-form-item label="学校:" class="flex-item" style="margin-left: -30px">
|
<!-- <n-form-item label="学校:" class="flex-item" style="margin-left: -30px">-->
|
||||||
<n-select
|
<!-- <n-select-->
|
||||||
v-model:value="studentInfoValue.schoolId"
|
<!-- v-model:value="studentInfoValue.schoolId"-->
|
||||||
:options="options"
|
<!-- :options="options"-->
|
||||||
filterable
|
<!-- filterable-->
|
||||||
placeholder=""
|
<!-- placeholder=""-->
|
||||||
style="min-width: 140px"></n-select>
|
<!-- style="min-width: 140px"></n-select>-->
|
||||||
</n-form-item>
|
<!-- </n-form-item>-->
|
||||||
<n-form-item label="学号:" path="name" class="flex-item">
|
<n-form-item label="学号:" path="name" class="flex-item">
|
||||||
<n-input v-model:value="studentInfoValue.studentNo"
|
<n-input v-model:value="studentInfoValue.studentNo"
|
||||||
placeholder=""
|
placeholder=""
|
||||||
|
|
@ -67,7 +67,8 @@ const rules=ref(null)
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const options=ref([])
|
const options=ref([])
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const studentList = ref([])
|
const studentList =
|
||||||
|
ref([{stId:1,studentNo:"211310509",chineseName:"张三",username:"zhangsan",banji:"计算机2101",email:"2286848422@qq.com"}])
|
||||||
const {clId} = route.params
|
const {clId} = route.params
|
||||||
const paginationReactive = reactive({
|
const paginationReactive = reactive({
|
||||||
page: 1,
|
page: 1,
|
||||||
|
|
@ -209,7 +210,8 @@ const queryByPage = async (currentPage)=>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const onPasswordClass = async (classId)=>{
|
const onPasswordClass = async (classId)=>{
|
||||||
const {id} = classId
|
// const {id} = classId
|
||||||
|
const id=1
|
||||||
if (classId.username==='请学生注册'){
|
if (classId.username==='请学生注册'){
|
||||||
$message.error("请先注册在进行此操作")
|
$message.error("请先注册在进行此操作")
|
||||||
}else {
|
}else {
|
||||||
|
|
@ -217,7 +219,8 @@ const onPasswordClass = async (classId)=>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const onEditClass = async (classId)=>{
|
const onEditClass = async (classId)=>{
|
||||||
const {id} = classId
|
// const {id} = classId
|
||||||
|
const id=1
|
||||||
await router.push({name: 'StudentEdits', params: {clId: id}, query: {id: clId}})
|
await router.push({name: 'StudentEdits', params: {clId: id}, query: {id: clId}})
|
||||||
}
|
}
|
||||||
const onDeleteClass = async (classId)=>{
|
const onDeleteClass = async (classId)=>{
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,8 @@ import TeacherListAction from "@/views/admin/teacher/components/teacher-list-act
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const options=ref([])
|
const options=ref([])
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const teacherList = ref([])
|
const teacherList =
|
||||||
|
ref([{tcId:"1",account:"zzp",no:21313357,name:"教师1",role:"teacher",email:"zzp@163.com",status:true}])
|
||||||
const rules=ref(null)
|
const rules=ref(null)
|
||||||
const paginationReactive = reactive({
|
const paginationReactive = reactive({
|
||||||
page: 1,
|
page: 1,
|
||||||
|
|
@ -78,11 +79,11 @@ const columns = [
|
||||||
width: '90',
|
width: '90',
|
||||||
align:'center',
|
align:'center',
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
key: 'schoolname',
|
// key: 'schoolname',
|
||||||
title: '学校',
|
// title: '学校',
|
||||||
width: '90',
|
// width: '90',
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
key: 'role',
|
key: 'role',
|
||||||
title: '角色',
|
title: '角色',
|
||||||
|
|
@ -173,7 +174,8 @@ const onAdd= async ()=>{
|
||||||
}
|
}
|
||||||
|
|
||||||
const onPasswordClass = async (classId)=>{
|
const onPasswordClass = async (classId)=>{
|
||||||
const {id} = classId
|
// const {id} = classId
|
||||||
|
const id=1
|
||||||
if (classId.username===null || classId.username===''){
|
if (classId.username===null || classId.username===''){
|
||||||
$message.error("请先注册在进行此操作")
|
$message.error("请先注册在进行此操作")
|
||||||
}else {
|
}else {
|
||||||
|
|
@ -181,7 +183,8 @@ const onPasswordClass = async (classId)=>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const onEditClass = async (classId)=>{
|
const onEditClass = async (classId)=>{
|
||||||
const {id} = classId
|
// const {id} = classId
|
||||||
|
const id=1
|
||||||
await router.push({name: 'TeacherEdit', params: {clId: id}})
|
await router.push({name: 'TeacherEdit', params: {clId: id}})
|
||||||
}
|
}
|
||||||
const onDeleteClass = async (classId)=>{
|
const onDeleteClass = async (classId)=>{
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,13 @@ export default defineConfig(({ command, mode }) => {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
base: VITE_PUBLIC_PATH || '/',
|
base: VITE_PUBLIC_PATH || '/',
|
||||||
|
css: {
|
||||||
|
preprocessorOptions: {
|
||||||
|
scss: {
|
||||||
|
api: 'modern-compiler'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'~': rootPath,
|
'~': rootPath,
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
<spring-boot.version>2.6.13</spring-boot.version>
|
<spring-boot.version>2.6.13</spring-boot.version>
|
||||||
</properties>
|
</properties>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.data</groupId>
|
<groupId>org.springframework.data</groupId>
|
||||||
<artifactId>spring-data-redis</artifactId>
|
<artifactId>spring-data-redis</artifactId>
|
||||||
|
|
@ -24,6 +25,11 @@
|
||||||
<artifactId>spring-boot-starter-web</artifactId>
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
<groupId>com.baomidou</groupId>
|
||||||
|
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||||
|
<version>3.4.2</version> <!-- 使用适当的版本
|
||||||
|
-->
|
||||||
|
</dependency><dependency>
|
||||||
<groupId>org.mybatis.spring.boot</groupId>
|
<groupId>org.mybatis.spring.boot</groupId>
|
||||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||||
<version>2.2.2</version>
|
<version>2.2.2</version>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
package com.example.aes.report.model;
|
|
||||||
|
|
||||||
public class Classes {
|
|
||||||
}
|
|
||||||
|
|
@ -44,8 +44,8 @@ public class AccountController {
|
||||||
Adminusers adminusers = accountDao.getAdminUserByID(Integer.parseInt(userId));
|
Adminusers adminusers = accountDao.getAdminUserByID(Integer.parseInt(userId));
|
||||||
map.put("name",adminusers.getName());
|
map.put("name",adminusers.getName());
|
||||||
map.put("username",adminusers.getAccount());
|
map.put("username",adminusers.getAccount());
|
||||||
String schoolId= String.valueOf(adminusers.getSchoolId());
|
// String schoolId= String.valueOf(adminusers.getSchoolId());
|
||||||
map.put("schoolId",schoolId);
|
// map.put("schoolId",schoolId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断proxyRole是否存在
|
// 判断proxyRole是否存在
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,70 @@ public class AdminusersController {
|
||||||
}
|
}
|
||||||
return RespBean.error("不具备权限");
|
return RespBean.error("不具备权限");
|
||||||
}
|
}
|
||||||
|
// @PostMapping("/signTeacher")
|
||||||
|
// public RespBean signTeacher(@RequestBody PMAdminusers pmadminusers) // 注册教师
|
||||||
|
// {
|
||||||
|
// pmadminusers.setSessionId(pmadminusers.getSessionId().substring(64));
|
||||||
|
// // 设置statu为未审核
|
||||||
|
// pmadminusers.setStatus("待审核");
|
||||||
|
// /*
|
||||||
|
// * UUID uuid = UUID.randomUUID();
|
||||||
|
// * pmadminusers.setUuid(uuid.toString().replaceAll("\\-", ""));
|
||||||
|
// */
|
||||||
|
// PMAdminusers pma = adminusersServiceI
|
||||||
|
// .getAdminuserByAccount(pmadminusers.getAccount());
|
||||||
|
// if (pma != null) {
|
||||||
|
// if (pma.getQuestion().equals("") || pma.getQuestion().equals(null)) {
|
||||||
|
// boolean result = adminusersServiceI
|
||||||
|
// .updateQueAndAnsByaccount(pma);
|
||||||
|
// if (result == true) {
|
||||||
|
// return RespBean.ok("申请注册教师成功,请注意查收激活邮件!");
|
||||||
|
// } else {
|
||||||
|
// return RespBean.error("注册教师失败");
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// return RespBean.error("用户名重复,请修改用户名");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// } else {
|
||||||
|
// boolean result = adminusersServiceI.addTeacher(pmadminusers);
|
||||||
|
// if (result == true) {
|
||||||
|
// return RespBean.ok("注册教师成功");
|
||||||
|
// } else {
|
||||||
|
// return RespBean.error("注册教师失败");
|
||||||
|
// }
|
||||||
|
/*
|
||||||
|
* try {
|
||||||
|
*
|
||||||
|
* SendMail mail = new SendMail(); // 收信人 String[] list =
|
||||||
|
* {pmadminusers.getEmail()}; //mail.setMailTo(list, "cc");
|
||||||
|
* mail.setMailTo(list, "to"); // 发信人
|
||||||
|
* mail.setMailFrom("dhuoj_noreply@163.com"); //
|
||||||
|
* mail.setMailFrom("duzhen"); // 邮件主题
|
||||||
|
* mail.setSubject("OJ系统教师注册激活邮件"); // 邮件发送时间 mail.setSendDate(new
|
||||||
|
* Date()); // html格式邮件 // 邮件内容 String context = "<html>" + "<body>"
|
||||||
|
* +
|
||||||
|
* "您的OJ系统账号已创建,如果这是您在进行的操作,请点击链接(如果点击无效,请复制以下链接并在浏览器中打开)激活账号:<br>"
|
||||||
|
* +
|
||||||
|
* "<a href='http://218.193.156.209:8080/oj/admin/activeTeacher.jsp?account="
|
||||||
|
* +pmadminusers.getAccount()+"&uuid="+pmadminusers.getUuid()+
|
||||||
|
* "'>http://218.193.156.209:8080/oj/admin/activeTeacher.jsp?account="
|
||||||
|
* +pmadminusers.getAccount()+"&uuid="+pmadminusers.getUuid()+"</a>"
|
||||||
|
* + "</body>" + "</html>"; mail.addHtmlContext(context); // txt格式邮件
|
||||||
|
* // mail.addTextContext(""); mail.send();
|
||||||
|
* System.out.println("send success"); boolean
|
||||||
|
* result=adminusersServiceI.addTeacher(pmadminusers);
|
||||||
|
* if(result==true){ logger.info("注册教师成功"); j.setSuccess(true);
|
||||||
|
* j.setMsg("申请注册教师成功,请注意查收激活邮件!"); super.writeJson(j); }else{
|
||||||
|
* logger.info("注册教师失败"); j.setSuccess(false); j.setMsg("注册教师失败");
|
||||||
|
* super.writeJson(j); }
|
||||||
|
*
|
||||||
|
* } catch (Exception e) { e.printStackTrace();
|
||||||
|
* logger.info("注册教师邮件发送失败,请联系管理员11249242@qq.com");
|
||||||
|
* j.setSuccess(false);
|
||||||
|
* j.setMsg("注册教师邮件发送失败,请联系管理员11249242@qq.com"); super.writeJson(j);
|
||||||
|
* }
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,7 @@ public class UserController {
|
||||||
public RespBean findUserByStudentNoSchoolId(@RequestBody Users user, HttpServletRequest request) // 根据学号学校Id获取学生的信息
|
public RespBean findUserByStudentNoSchoolId(@RequestBody Users user, HttpServletRequest request) // 根据学号学校Id获取学生的信息
|
||||||
{
|
{
|
||||||
String studentNo = user.getStudentNo();
|
String studentNo = user.getStudentNo();
|
||||||
int schoolId = user.getSchoolId();
|
// int schoolId = user.getSchoolId();
|
||||||
DecodeToken decodeToken = null;
|
DecodeToken decodeToken = null;
|
||||||
try {
|
try {
|
||||||
decodeToken = new DecodeToken(request);
|
decodeToken = new DecodeToken(request);
|
||||||
|
|
@ -189,7 +189,7 @@ public class UserController {
|
||||||
if (role.equals("student") && !decodeToken.getStudentNo().equals(studentNo)) {
|
if (role.equals("student") && !decodeToken.getStudentNo().equals(studentNo)) {
|
||||||
return RespBean.error("请尝试安全操作");
|
return RespBean.error("请尝试安全操作");
|
||||||
}
|
}
|
||||||
user = userService.findUserByStudentNoSchoolId(studentNo, schoolId); // 用户信息
|
user = userService.findUserByStudentNoSchoolId(studentNo); // 用户信息
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
return RespBean.ok("获取学生信息成功", user);
|
return RespBean.ok("获取学生信息成功", user);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -318,7 +318,7 @@ public class UserController {
|
||||||
|
|
||||||
Users pmuser = userService.findStudentByusername(user.getUsername());
|
Users pmuser = userService.findStudentByusername(user.getUsername());
|
||||||
if (pmuser == null) {
|
if (pmuser == null) {
|
||||||
Users u = userService.findUserByStudentNoSchoolId(user.getStudentNo(), user.getSchoolId()); // 用户信息
|
Users u = userService.findUserByStudentNoSchoolId(user.getStudentNo()); // 用户信息
|
||||||
if (u != null) {
|
if (u != null) {
|
||||||
if (StringUtils.isBlank(u.getUsername())) {
|
if (StringUtils.isBlank(u.getUsername())) {
|
||||||
user.setSessionId(user.getSessionId().substring(64));
|
user.setSessionId(user.getSessionId().substring(64));
|
||||||
|
|
@ -362,7 +362,7 @@ public class UserController {
|
||||||
pmUser.setSolved(users.getSolved());
|
pmUser.setSolved(users.getSolved());
|
||||||
pmUser.setSubmit(users.getSubmit());
|
pmUser.setSubmit(users.getSubmit());
|
||||||
pmUser.setMessageCondition(users.getMessageCondition());
|
pmUser.setMessageCondition(users.getMessageCondition());
|
||||||
pmUser.setSchoolId(users.getSchoolId());
|
// pmUser.setSchoolId(users.getSchoolId());
|
||||||
pmUser.setUuid(users.getUuid());
|
pmUser.setUuid(users.getUuid());
|
||||||
pmUser.setQuestion(users.getQuestion());
|
pmUser.setQuestion(users.getQuestion());
|
||||||
pmUser.setAnswer(users.getAnswer());
|
pmUser.setAnswer(users.getAnswer());
|
||||||
|
|
|
||||||
|
|
@ -277,9 +277,10 @@ public class UserDaoImpl extends BaseDaoImpl<Users> implements UserDaoI {
|
||||||
@Override
|
@Override
|
||||||
public int updateUser(Users user) {
|
public int updateUser(Users user) {
|
||||||
String hql = "update Users set username=:username, password=:password, studentNo=:studentNo," +
|
String hql = "update Users set username=:username, password=:password, studentNo=:studentNo," +
|
||||||
" chineseName=:chineseName, banji=:banji, createDate=:createDate, Email=:Email," +
|
" chineseName=:chineseName, " +
|
||||||
|
"banji=:banji, createDate=:createDate, email=:Email," +
|
||||||
" solved=:solved, submit=:submit, answer=:answer, messageCondition=:messageCondition," +
|
" solved=:solved, submit=:submit, answer=:answer, messageCondition=:messageCondition," +
|
||||||
" question=:question, uuid=:uuid, schoolId=:schoolId, pwd=:pwd where id=:id";
|
" question=:question, uuid=:uuid, pwd=:pwd where id=:id";
|
||||||
Query q = this.getCurrentSession().createQuery(hql);
|
Query q = this.getCurrentSession().createQuery(hql);
|
||||||
q.setParameter("username", user.getUsername());
|
q.setParameter("username", user.getUsername());
|
||||||
q.setParameter("password", user.getPassword());
|
q.setParameter("password", user.getPassword());
|
||||||
|
|
@ -294,7 +295,7 @@ public class UserDaoImpl extends BaseDaoImpl<Users> implements UserDaoI {
|
||||||
q.setParameter("messageCondition", user.getMessageCondition());
|
q.setParameter("messageCondition", user.getMessageCondition());
|
||||||
q.setParameter("question", user.getQuestion());
|
q.setParameter("question", user.getQuestion());
|
||||||
q.setParameter("uuid", user.getUuid());
|
q.setParameter("uuid", user.getUuid());
|
||||||
q.setParameter("schoolId", user.getSchoolId());
|
// q.setParameter("schoolId", user.getSchoolId());
|
||||||
q.setParameter("pwd", user.getPwd());
|
q.setParameter("pwd", user.getPwd());
|
||||||
|
|
||||||
q.setParameter("id", user.getId());
|
q.setParameter("id", user.getId());
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ public class Adminusers implements java.io.Serializable {
|
||||||
|
|
||||||
// Fields
|
// Fields
|
||||||
private Integer id;
|
private Integer id;
|
||||||
private Integer schoolId;
|
// private Integer schoolId;
|
||||||
private String account;
|
private String account;
|
||||||
private String password;
|
private String password;
|
||||||
private String name;
|
private String name;
|
||||||
|
|
@ -38,25 +38,25 @@ public class Adminusers implements java.io.Serializable {
|
||||||
|
|
||||||
/** minimal constructor */
|
/** minimal constructor */
|
||||||
public Adminusers(String account, String password, String name,
|
public Adminusers(String account, String password, String name,
|
||||||
String role, String email, Integer schoolId) {
|
String role, String email) {
|
||||||
this.account = account;
|
this.account = account;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.role = role;
|
this.role = role;
|
||||||
this.email = email;
|
this.email = email;
|
||||||
this.schoolId = schoolId;
|
// this.schoolId = schoolId;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** full constructor */
|
/** full constructor */
|
||||||
public Adminusers(String account, String password, String name,
|
public Adminusers(String account, String password, String name,
|
||||||
String role, String email, Integer schoolId, Integer active,
|
String role, String email, Integer active,
|
||||||
String uuid, String question, String answer) {
|
String uuid, String question, String answer) {
|
||||||
this.account = account;
|
this.account = account;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.role = role;
|
this.role = role;
|
||||||
this.email = email;
|
this.email = email;
|
||||||
this.schoolId = schoolId;
|
// this.schoolId = schoolId;
|
||||||
this.active = active;
|
this.active = active;
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.question = question;
|
this.question = question;
|
||||||
|
|
@ -120,14 +120,14 @@ public class Adminusers implements java.io.Serializable {
|
||||||
this.email = email;
|
this.email = email;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Column(name = "schoolId", nullable = false, length = 11)
|
// @Column(name = "schoolId", nullable = false, length = 11)
|
||||||
public Integer getSchoolId() {
|
// public Integer getSchoolId() {
|
||||||
return schoolId;
|
// return schoolId;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public void setSchoolId(Integer schoolId) {
|
// public void setSchoolId(Integer schoolId) {
|
||||||
this.schoolId = schoolId;
|
// this.schoolId = schoolId;
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Column(name = "active", nullable = false, length = 1)
|
@Column(name = "active", nullable = false, length = 1)
|
||||||
public Integer getActive() {
|
public Integer getActive() {
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ public class Users implements java.io.Serializable {
|
||||||
private Integer solved;
|
private Integer solved;
|
||||||
private Integer submit;
|
private Integer submit;
|
||||||
private String messageCondition;
|
private String messageCondition;
|
||||||
private Integer schoolId;
|
// private Integer schoolId;
|
||||||
private String uuid;
|
private String uuid;
|
||||||
private String question;
|
private String question;
|
||||||
private String answer;
|
private String answer;
|
||||||
|
|
@ -51,7 +51,7 @@ public class Users implements java.io.Serializable {
|
||||||
public Users(String username, String password, String studentNo,
|
public Users(String username, String password, String studentNo,
|
||||||
String chineseName, String banji, Date createDate, String email,
|
String chineseName, String banji, Date createDate, String email,
|
||||||
Integer solved, Integer submit, String messageCondition,
|
Integer solved, Integer submit, String messageCondition,
|
||||||
Integer schoolId, String uuid, String question, String answer, String pwd) {
|
String uuid, String question, String answer, String pwd) {
|
||||||
this.username = username;
|
this.username = username;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.studentNo = studentNo;
|
this.studentNo = studentNo;
|
||||||
|
|
@ -62,7 +62,7 @@ public class Users implements java.io.Serializable {
|
||||||
this.solved = solved;
|
this.solved = solved;
|
||||||
this.submit = submit;
|
this.submit = submit;
|
||||||
this.messageCondition = messageCondition;
|
this.messageCondition = messageCondition;
|
||||||
this.schoolId = schoolId;
|
// this.schoolId = schoolId;
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.question = question;
|
this.question = question;
|
||||||
this.answer = answer;
|
this.answer = answer;
|
||||||
|
|
@ -99,14 +99,14 @@ public class Users implements java.io.Serializable {
|
||||||
this.password = password;
|
this.password = password;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Column(name = "schoolId", unique = true, nullable = false)
|
// @Column(name = "schoolId", unique = true, nullable = false)
|
||||||
public Integer getSchoolId() {
|
// public Integer getSchoolId() {
|
||||||
return this.schoolId;
|
// return this.schoolId;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public void setSchoolId(Integer schoolId) {
|
// public void setSchoolId(Integer schoolId) {
|
||||||
this.schoolId = schoolId;
|
// this.schoolId = schoolId;
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 这里根据学号来索引用户,
|
// 这里根据学号来索引用户,
|
||||||
@Column(name = "studentNo", unique = true, nullable = false, length = 20)
|
@Column(name = "studentNo", unique = true, nullable = false, length = 20)
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ public interface UserServiceI {
|
||||||
public List<PMUser> findStudentsByCondition(String studentNo,
|
public List<PMUser> findStudentsByCondition(String studentNo,
|
||||||
String chineseName, String stu_userName);
|
String chineseName, String stu_userName);
|
||||||
|
|
||||||
public Users findUserByStudentNoSchoolId(String studentNo, int schoolId);
|
public Users findUserByStudentNoSchoolId(String studentNo);
|
||||||
|
|
||||||
public boolean updateSignStudent(PMUser user);// 修改学生注册信息
|
public boolean updateSignStudent(PMUser user);// 修改学生注册信息
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -175,8 +175,8 @@ public class UserServiceImpl implements UserServiceI {
|
||||||
Users theUser = userDao.get(Users.class, user.getId());
|
Users theUser = userDao.get(Users.class, user.getId());
|
||||||
theUser.setPassword(user.getSessionId());
|
theUser.setPassword(user.getSessionId());
|
||||||
theUser.setPwd(user.getPassword());
|
theUser.setPwd(user.getPassword());
|
||||||
if (theUser.getSchoolId() == null)
|
// if (theUser.getSchoolId() == null)
|
||||||
theUser.setSchoolId(1);
|
// theUser.setSchoolId(1);
|
||||||
userDao.save(theUser);
|
userDao.save(theUser);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -230,7 +230,7 @@ public class UserServiceImpl implements UserServiceI {
|
||||||
u.setStudentNo(studentNo);
|
u.setStudentNo(studentNo);
|
||||||
u.setCreateDate(createDate);
|
u.setCreateDate(createDate);
|
||||||
u.setBanji(banji);
|
u.setBanji(banji);
|
||||||
u.setSchoolId(schoolId);
|
// u.setSchoolId(schoolId);
|
||||||
u.setUsername("");
|
u.setUsername("");
|
||||||
u.setPassword("");
|
u.setPassword("");
|
||||||
userDao.save(u);
|
userDao.save(u);
|
||||||
|
|
@ -374,11 +374,11 @@ public class UserServiceImpl implements UserServiceI {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Users findUserByStudentNoSchoolId(String studentNo, int schoolId) {
|
public Users findUserByStudentNoSchoolId(String studentNo) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
String hql = "from Users where studentNo='" + studentNo
|
String hql = "from Users where studentNo='" + studentNo
|
||||||
+ "' and schoolId='" + schoolId + "'";
|
+ "' and schoolId='" ;
|
||||||
Users user = userDao.get(hql);
|
Users user = userDao.get(hql);
|
||||||
if (user != null) {
|
if (user != null) {
|
||||||
return user;
|
return user;
|
||||||
|
|
@ -416,7 +416,7 @@ public class UserServiceImpl implements UserServiceI {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
String hql = "update Users set banji='" + user.getBanji()
|
String hql = "update Users set banji='" + user.getBanji()
|
||||||
+ "'where studentNo='" + user.getStudentNo()
|
+ "'where studentNo='" + user.getStudentNo()
|
||||||
+ "' and schoolId='" + user.getSchoolId() + "'";
|
+ "' and schoolId='" ;
|
||||||
int result = userDao.executeHql(hql);
|
int result = userDao.executeHql(hql);
|
||||||
if (result == 1)
|
if (result == 1)
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -444,7 +444,7 @@ public class UserServiceImpl implements UserServiceI {
|
||||||
u.setPassword(password);
|
u.setPassword(password);
|
||||||
u.setPwd(pwd);
|
u.setPwd(pwd);
|
||||||
u.setChineseName(chineseName);
|
u.setChineseName(chineseName);
|
||||||
u.setSchoolId(schoolId);
|
// u.setSchoolId(schoolId);
|
||||||
u.setStudentNo(studentNo);
|
u.setStudentNo(studentNo);
|
||||||
u.setCreateDate(createDate);
|
u.setCreateDate(createDate);
|
||||||
u.setBanji(banji);
|
u.setBanji(banji);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
Manifest-Version: 1.0
|
|
||||||
Main-Class: edu.dhu.Oj2Application
|
|
||||||
|
|
||||||
Loading…
Reference in New Issue