|
|
@@ -129,7 +129,8 @@ export function isImage(filename: string) {
|
|
|
lowercase.endsWith('png') ||
|
|
|
lowercase.endsWith('gif') ||
|
|
|
lowercase.endsWith('jpeg') ||
|
|
|
- lowercase.endsWith('ico')
|
|
|
+ lowercase.endsWith('ico') ||
|
|
|
+ lowercase.endsWith('ttf')
|
|
|
)
|
|
|
}
|
|
|
|
|
|
@@ -223,21 +224,19 @@ function generateFileNodes(
|
|
|
|
|
|
function generateFileTree(question: NestedCodeItemVO) {
|
|
|
const editableFiles = [...Object.keys(question.editable!)]
|
|
|
- const editable = editableFiles.filter((filename, index) => {
|
|
|
- return !isImage(filename)
|
|
|
- }).reduce<IFolderTreeNodeProps[]>((nodes, filename) => {
|
|
|
+ const editable = editableFiles.reduce<IFolderTreeNodeProps[]>((nodes, filename) => {
|
|
|
const filePathList = filename
|
|
|
.split('/')
|
|
|
.filter((name) => name.length > 0)
|
|
|
return generateFileNodes(nodes, filePathList, filename, false, question.editable!)
|
|
|
}, [])
|
|
|
const unEditableFiles = [...Object.keys(question.uneditable!)]
|
|
|
- const unEditable = unEditableFiles.reduce<IFolderTreeNodeProps[]>((nodes, filename) => {
|
|
|
+ const Files = unEditableFiles.reduce<IFolderTreeNodeProps[]>((nodes, filename) => {
|
|
|
const filePathList = filename
|
|
|
.split('/')
|
|
|
.filter((name) => name.length > 0)
|
|
|
return generateFileNodes(nodes, filePathList, filename, true, question.uneditable!)
|
|
|
- }, [])
|
|
|
+ }, editable)
|
|
|
const files: IFolderTreeNodeProps = {
|
|
|
id: 0,
|
|
|
readOnly: false,
|
|
|
@@ -246,7 +245,7 @@ function generateFileTree(question: NestedCodeItemVO) {
|
|
|
location: question.projectName,
|
|
|
isLeaf: false,
|
|
|
data: "",
|
|
|
- children: [...editable, ...unEditable]
|
|
|
+ children: [...Files]
|
|
|
}
|
|
|
molecule.folderTree.reset()
|
|
|
molecule.folderTree.add(files)
|
|
|
@@ -287,6 +286,32 @@ export function getQuestion(examId: string, studentId: string) {
|
|
|
hide()
|
|
|
if (response.err === 0) {
|
|
|
const question = response.res;
|
|
|
+ let editableImage: {
|
|
|
+ [key: string]: string} = {},
|
|
|
+ nextEditable: {
|
|
|
+ [key: string]: string} = {},
|
|
|
+ nextUnEditable: {
|
|
|
+ [key: string]: string} = {}
|
|
|
+ ;
|
|
|
+ question.codeList.forEach((code:NestedCodeItemVO) => {
|
|
|
+ if (code.editable) {
|
|
|
+ for (let key in code.editable){
|
|
|
+ if (isImage(key)) {
|
|
|
+ editableImage[key] = code.editable[key];
|
|
|
+ } else {
|
|
|
+ nextEditable[key] = code.editable[key];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ question.codeList.forEach((code: NestedCodeItemVO) => {
|
|
|
+ if (code.editable){
|
|
|
+ code.editable = nextEditable;
|
|
|
+ }
|
|
|
+ if (code.uneditable){
|
|
|
+ code.uneditable = Object.assign(nextUnEditable, code.uneditable, editableImage);
|
|
|
+ }
|
|
|
+ })
|
|
|
question.codeList.sort(function (a:NestedCodeItemVO, b:NestedCodeItemVO){if (a && b && a.questionId && b.questionId) return a.questionId - b.questionId; return -1;})
|
|
|
const current = store.getState().loadCurrentQuestion;
|
|
|
const pre = store.getState().loadQuestion;
|