算法

上级 27e8d5d4
...@@ -5,14 +5,28 @@ ...@@ -5,14 +5,28 @@
<el-dialog title="新增算法问题" :visible.sync="dialogFormVisible" style="width: 100%"> <el-dialog title="新增算法问题" :visible.sync="dialogFormVisible" style="width: 100%">
<el-form :model="form" class="custom-form"> <el-form :model="form" class="custom-form">
<el-form-item label="算法问题" :label-width="formLabelWidth" class="form-item"> <el-form-item label="算法问题" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.question" autocomplete="off" style="width: 100%"></el-input> <el-input v-model="form.questionName" autocomplete="off" style="width: 100%"></el-input>
</el-form-item> </el-form-item>
<br />
<el-form-item label="问题类型" :label-width="formLabelWidth" class="form-item"> <el-form-item label="问题类型" :label-width="formLabelWidth" class="form-item">
<el-select v-model="form.questionType" placeholder="请选择活动区域"> <el-select v-model="form.questionType" placeholder="请选择活动区域">
<el-option v-for="item in options" :key="item.questionType" :label="item.name" :value="item.questionType"></el-option> <el-option v-for="item in options" :key="item.questionType" :label="item.name" :value="item.questionType"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="重要程度" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.degreeOfImportance" autocomplete="off" style="width: 100%"></el-input>
</el-form-item>
<el-form-item label="难易程度" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.degreeOfDifficulty" autocomplete="off" style="width: 100%"></el-input>
</el-form-item>
<el-form-item label="难易分数" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.difficultyOfScore" autocomplete="off" style="width: 100%"></el-input>
</el-form-item>
<el-form-item label="力扣号" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.leetcodeNumber" autocomplete="off" style="width: 100%"></el-input>
</el-form-item>
<el-form-item label="力扣链接" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.leetcodeLink" autocomplete="off" style="width: 100%"></el-input>
</el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">取 消</el-button> <el-button @click="dialogFormVisible = false">取 消</el-button>
...@@ -23,7 +37,7 @@ ...@@ -23,7 +37,7 @@
<div class="red-title" slot="title">批量新增算法问题(多个问题换行填写)</div> <div class="red-title" slot="title">批量新增算法问题(多个问题换行填写)</div>
<el-form :model="form" class="custom-form"> <el-form :model="form" class="custom-form">
<el-form-item label="算法问题" :label-width="formLabelWidth" class="form-item"> <el-form-item label="算法问题" :label-width="formLabelWidth" class="form-item">
<el-input type="textarea" v-model="form.question" autocomplete="off" :rows="5" :cols="30" style="width: 100%"></el-input> <el-input type="textarea" v-model="form.questionName" autocomplete="off" :rows="5" :cols="30" style="width: 100%"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
...@@ -31,6 +45,25 @@ ...@@ -31,6 +45,25 @@
<el-button type="primary" @click="handleConfirm(1)">确 定</el-button> <el-button type="primary" @click="handleConfirm(1)">确 定</el-button>
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="随机一题" :visible.sync="randomFormVisible" style="width: 100%">
<el-descriptions class="margin-top" title="随机选择的题目如下:" :column="3" border>
<el-descriptions-item v-model="randomAlgorithmic.questionName">
<template slot="label">题目名称</template>
{{ randomAlgorithmic.questionName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">力扣号</template>
{{ randomAlgorithmic.leetcodeNumber }}
</el-descriptions-item>
<el-descriptions-item show-overflow-tooltip>
<template slot="label">力扣链接</template>
<a :href="randomAlgorithmic.leetcodeLink" target="_blank">{{ randomAlgorithmic.leetcodeLink }}</a>
</el-descriptions-item>
</el-descriptions>
<div slot="footer" class="dialog-footer">
<el-button @click="randomFormVisible = false">取 消</el-button>
</div>
</el-dialog>
<el-form :inline="true" :model="formInline" class="demo-form-inline"> <el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item> <el-form-item>
<el-input clearable v-model="formInline.questionName" placeholder="请输入问题" @keydown.enter.native="interviewPage"></el-input> <el-input clearable v-model="formInline.questionName" placeholder="请输入问题" @keydown.enter.native="interviewPage"></el-input>
...@@ -41,6 +74,9 @@ ...@@ -41,6 +74,9 @@
<el-form-item> <el-form-item>
<el-button type="primary" @click="interviewPage">查询</el-button> <el-button type="primary" @click="interviewPage">查询</el-button>
</el-form-item> </el-form-item>
<el-form-item>
<el-button type="primary" @click="prepareRandom">随机一题</el-button>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="prepareAdd">新增</el-button> <el-button type="primary" @click="prepareAdd">新增</el-button>
</el-form-item> </el-form-item>
...@@ -72,24 +108,38 @@ ...@@ -72,24 +108,38 @@
</el-table-column> </el-table-column>
<el-table-column prop="操作" label="操作" width="180"> <el-table-column prop="操作" label="操作" width="180">
<template slot-scope="props"> <template slot-scope="props">
<el-button type="success" @click.prevent="preEdit(props.row.id, props.row.question, props.row.questionTypeName)" width="200">编辑</el-button> <el-button type="success" @click.prevent="preEdit(props.row.id, props.row.questionName, props.row.questionTypeName, props.row.degreeOfImportance, props.row.degreeOfDifficulty, props.row.difficultyOfScore, props.row.leetcodeNumber, props.row.leetcodeLink)" width="200">编辑</el-button>
<el-dialog title="编辑算法问题" :visible.sync="editVisible"> <el-dialog title="编辑算法问题" :visible.sync="editVisible">
<el-form :model="form"> <el-form :model="form">
<el-form-item label="算法问题" :label-width="formLabelWidth"> <el-form-item label="算法问题" :label-width="formLabelWidth" class="form-item">
<el-input class="custom-textarea" type="textarea" v-model="form.question" autocomplete="off" :rows="5" :cols="30" style="text-align: left"></el-input> <el-input v-model="form.questionName" autocomplete="off" style="width: 100%"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="问题类型" :label-width="formLabelWidth"> <el-form-item label="问题类型" :label-width="formLabelWidth" class="form-item">
<el-select v-model="form.questionType" placeholder="请选择问题类型" style="text-align: left"> <el-select v-model="form.questionType" placeholder="请选择活动区域">
<el-option v-for="item in options" :key="item.questionType" :label="item.name" :value="item.questionType"></el-option> <el-option v-for="item in options" :key="item.questionType" :label="item.name" :value="item.questionType"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="重要程度" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.degreeOfImportance" autocomplete="off" style="width: 100%"></el-input>
</el-form-item>
<el-form-item label="难易程度" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.degreeOfDifficulty" autocomplete="off" style="width: 100%"></el-input>
</el-form-item>
<el-form-item label="难易分数" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.difficultyOfScore" autocomplete="off" style="width: 100%"></el-input>
</el-form-item>
<el-form-item label="力扣号" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.leetcodeNumber" autocomplete="off" style="width: 100%"></el-input>
</el-form-item>
<el-form-item label="力扣链接" :label-width="formLabelWidth" class="form-item">
<el-input v-model="form.leetcodeLink" autocomplete="off" style="width: 100%"></el-input>
</el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button @click="editVisible = false">取 消</el-button> <el-button @click="editVisible = false">取 消</el-button>
<el-button type="primary" @click="editConfirm">确 定</el-button> <el-button type="primary" @click="editConfirm">确 定</el-button>
</div> </div>
</el-dialog> </el-dialog>
<el-button type="danger" @click="prepareDelete(props.row.id)">删除</el-button> <el-button type="danger" @click="prepareDelete(props.row.id)">删除</el-button>
<el-dialog title="提示" :visible.sync="dialogVisible" width="30%" :before-close="handleClose"> <el-dialog title="提示" :visible.sync="dialogVisible" width="30%" :before-close="handleClose">
<span>确认删除吗</span> <span>确认删除吗</span>
...@@ -111,242 +161,279 @@ ...@@ -111,242 +161,279 @@
<script> <script>
import axios from 'axios' import axios from 'axios'
export default { export default {
name: 'MyInterview', name: 'MyInterview',
data() {
return {
// 用户列表数据
algorithmicList: [],
loading: false,
elementui_page_component_key: 0,
currentPage: Number(localStorage.getItem('lastPage')) || 1,
pageSize: 9,
total: 0,
formInline: {
questionName: '',
},
options: [],
questionType: 0,
// 新增的内容
dialogFormVisible: false,
dialogMutiFormVisible: false,
form: {
question: '',
questionType: 0,
},
formLabelWidth: '120px',
dialogVisible: false,
editVisible: false,
currentRowId: null,
}
},
watch: {
'formInline.question'(newVal) {
if (newVal === '') {
this.currentPage = 1
localStorage.setItem('lastPage', this.currentPage)
this.interviewPage()
}
},
},
created() {
//获取问题类型的枚举
this.getQuestionType()
//获取问题列表
this.interviewPage()
},
mounted() {},
methods: {
prepareAdd() {
this.form.question = ''
this.form.questionType = 0
this.dialogFormVisible = true
},
prepareMutiAdd() {
this.form.question = ''
this.form.questionType = 0
this.dialogMutiFormVisible = true
},
prepareDelete(id) {
this.currentRowId = id
this.dialogVisible = true
},
preEdit(id, question, questionTypeName) {
this.form.question = question
// 定义一个映射(map)来存储 questionType 到 name 的转换 data() {
const questionTypeToNameMap = {} return {
this.options.forEach((option) => { // 用户列表数据
questionTypeToNameMap[option.name] = option.questionType algorithmicList: [],
}) randomAlgorithmic: {
this.form.questionType = questionTypeToNameMap[questionTypeName] questionName: '',
this.currentRowId = id leetcodeNumber: '',
this.editVisible = true leetcodeLink: '',
}, },
handleClose(done) { loading: false,
this.$confirm('确认关闭?') elementui_page_component_key: 0,
.then((_) => { currentPage: Number(localStorage.getItem('lastPage')) || 1,
done() pageSize: 9,
}) total: 0,
.catch((_) => {}) formInline: {
}, questionName: '',
handleConfirm(addType) { },
this.dialogFormVisible = false // 关闭对话框 options: [],
this.dialogMutiFormVisible = false questionType: 0,
this.addQuestion(addType) // 发送请求 // 新增的内容
}, dialogFormVisible: false,
randomFormVisible: false,
dialogMutiFormVisible: false,
form: {
questionName: '',
questionType: 0,
degreeOfImportance: 5,
degreeOfDifficulty: 1,
difficultyOfScore: 1200,
leetcodeNumber: '',
leetcodeLink: '',
},
formLabelWidth: '120px',
dialogVisible: false,
editVisible: false,
currentRowId: null,
}
},
watch: {
'formInline.questionName'(newVal) {
if (newVal === '') {
this.currentPage = 1
localStorage.setItem('lastPage', this.currentPage)
this.interviewPage()
}
},
},
created() {
//获取问题类型的枚举
this.getQuestionType()
//获取问题列表
this.interviewPage()
},
mounted() {},
methods: {
prepareAdd() {
this.form.questionName = ''
this.form.questionType = 0
this.dialogFormVisible = true
},
prepareRandom() {
this.randomAlgorithmic = []
this.randomFormVisible = true
this.interviewRandom()
},
prepareMutiAdd() {
this.form.questionName = ''
this.form.questionType = 0
this.dialogMutiFormVisible = true
},
async addQuestion(addType) { prepareDelete(id) {
try { this.currentRowId = id
this.loading = true this.dialogVisible = true
},
preEdit(id, questionName, questionTypeName, degreeOfImportance, degreeOfDifficulty, difficultyOfScore, leetcodeNumber, leetcodeLink) {
this.form.questionName = questionName
this.form.degreeOfImportance = degreeOfImportance
this.form.degreeOfDifficulty = degreeOfDifficulty
this.form.difficultyOfScore = difficultyOfScore
this.form.leetcodeNumber = leetcodeNumber
this.form.leetcodeLink = leetcodeLink
const { data: res } = await axios.post('http://localhost:8888/algorithmicProblem/add', { // 定义一个映射(map)来存储 questionType 到 name 的转换
addType: addType, const questionTypeToNameMap = {}
question: this.form.question, this.options.forEach((option) => {
questionType: this.form.questionType, questionTypeToNameMap[option.name] = option.questionType
}) })
if (res.code === 200) { this.form.questionType = questionTypeToNameMap[questionTypeName]
this.form.question = '' this.currentRowId = id
this.form.questionType = 0 this.editVisible = true
this.interviewPage() // 确保这个方法是有效的 },
} else { handleClose(done) {
console.error('Received non-200 status code', res) this.$confirm('确认关闭?')
this.errorMsg(res.message) .then((_) => {
} done()
} catch (error) { })
console.error('An error occurred while adding the question:', error) .catch((_) => {})
// 异常处理逻辑 },
} finally { handleConfirm(addType) {
this.loading = false this.dialogFormVisible = false // 关闭对话框
} this.dialogMutiFormVisible = false
}, this.addQuestion(addType) // 发送请求
errorMsg(msg) { },
this.$message({
showClose: true,
message: msg,
type: 'error',
})
},
async editConfirm() {
try {
this.loading = true
const { data: res } = await axios.post('http://localhost:8888/algorithmicProblem/update', { async addQuestion(addType) {
id: this.currentRowId, try {
question: this.form.question, this.loading = true
questionType: this.form.questionType, const { data: res } = await axios.post('http://localhost:8888/algorithmicProblem/add', {
}) addType: addType,
if (res.code === 200) { questionName: this.form.questionName,
this.form.question = '' questionType: this.form.questionType,
this.form.questionType = 0 degreeOfImportance: this.form.degreeOfImportance,
this.editVisible = false degreeOfDifficulty: this.form.degreeOfDifficulty,
currentRowId: null difficultyOfScore: this.form.difficultyOfScore,
this.interviewPage() // 确保这个方法是有效的 leetcodeNumber: this.form.leetcodeNumber,
} else { leetcodeLink: this.form.leetcodeLink,
console.error('Received non-200 status code', res) })
} if (res.code === 200) {
} catch (error) { this.form.questionName = ''
console.error('An error occurred while adding the question:', error) this.form.questionType = 0
// 异常处理逻辑 this.interviewPage() // 确保这个方法是有效的
} finally { } else {
this.loading = false console.error('Received non-200 status code', res)
} this.errorMsg(res.message)
}, }
} catch (error) {
console.error('An error occurred while adding the questionName:', error)
// 异常处理逻辑
} finally {
this.loading = false
}
},
errorMsg(msg) {
this.$message({
showClose: true,
message: msg,
type: 'error',
})
},
async editConfirm() {
try {
this.loading = true
const { data: res } = await axios.post('http://localhost:8888/algorithmicProblem/update', {
id: this.currentRowId,
questionName: this.form.questionName,
questionType: this.form.questionType,
degreeOfImportance: this.form.degreeOfImportance,
degreeOfDifficulty: this.form.degreeOfDifficulty,
difficultyOfScore: this.form.difficultyOfScore,
leetcodeNumber: this.form.leetcodeNumber,
leetcodeLink: this.form.leetcodeLink,
})
if (res.code === 200) {
this.form.questionName = ''
this.form.questionType = 0
this.editVisible = false
currentRowId: null
this.interviewPage() // 确保这个方法是有效的
} else {
console.error('Received non-200 status code', res)
}
} catch (error) {
console.error('An error occurred while adding the questionName:', error)
// 异常处理逻辑
} finally {
this.loading = false
}
},
async onDelete(id) { async onDelete(id) {
this.dialogVisible = false this.dialogVisible = false
this.loading = true this.loading = true
const { data: res } = await axios.get('http://localhost:8888/algorithmicProblem/delete', { const { data: res } = await axios.get('http://localhost:8888/algorithmicProblem/delete', {
params: { params: {
id: id, id: id,
}, },
}) })
this.interviewPage() this.interviewPage()
this.loading = false this.loading = false
}, },
refreshPage() { refreshPage() {
//获取问题类型的枚举 //获取问题类型的枚举
this.getQuestionType() this.getQuestionType()
location.reload() location.reload()
}, },
async getQuestionType() { async getQuestionType() {
const { data: res } = await axios.get('http://localhost:8888/algorithmicProblem/questionType', { params: {} }) const { data: res } = await axios.get('http://localhost:8888/algorithmicProblem/questionType', { params: {} })
if (res.code === 200) { if (res.code === 200) {
this.options = res.result this.options = res.result
} }
}, },
async interviewPage() { async interviewPage() {
this.loading = true this.loading = true
const { data: res } = await axios.get('http://localhost:8888/algorithmicProblem/page', { const { data: res } = await axios.get('http://localhost:8888/algorithmicProblem/page', {
params: { params: {
page: this.currentPage, page: this.currentPage,
pageSize: this.pageSize, pageSize: this.pageSize,
questionName: this.formInline.questionName, questionName: this.formInline.questionName,
questionType: this.questionType, questionType: this.questionType,
}, },
}) })
if (res.code === 200) { if (res.code === 200) {
this.total = res.result.totalElements this.total = res.result.totalElements
// 定义一个映射(map)来存储 questionType 到 name 的转换 // 定义一个映射(map)来存储 questionType 到 name 的转换
const questionTypeToNameMap = {} const questionTypeToNameMap = {}
this.options.forEach((option) => { this.options.forEach((option) => {
questionTypeToNameMap[option.questionType] = option.name questionTypeToNameMap[option.questionType] = option.name
}) })
console.log(res.result.content) // 修改 algorithmicList 中的每一个元素,将 questionType 转换为 name
console.log(questionTypeToNameMap) res.result.content.forEach((item) => {
// 修改 algorithmicList 中的每一个元素,将 questionType 转换为 name item.questionTypeName = questionTypeToNameMap[item.questionType] || 'Unknown'
res.result.content.forEach((item) => { })
item.questionTypeName = questionTypeToNameMap[item.questionType] || 'Unknown' this.algorithmicList = res.result.content
}) }
this.algorithmicList = res.result.content this.loading = false
} },
this.loading = false async interviewRandom() {
}, this.loading = true
getClassForValue(value) { const { data: res } = await axios.get('http://localhost:8888/algorithmicProblem/random', { params: {} })
if (value === '链表') { if (res.code === 200) {
return 'reddish-purple-value' this.randomAlgorithmic.questionName = res.result.questionName
} this.randomAlgorithmic.leetcodeNumber = res.result.leetcodeNumber
// else if (value === '集合') { this.randomAlgorithmic.leetcodeLink = res.result.leetcodeLink
// return 'new-orange-value' }
// } else if (value === 'JVM') { this.loading = false
// return 'clove-tea-value' },
// } else if (value === '并发编程') { getClassForValue(value) {
// return 'grassy-value' if (value === '链表') {
// } else if (value === 'MySql') { return 'reddish-purple-value'
// return 'daylily-value' }
// } else if (value === 'Redis') { // else if (value === '集合') {
// return 'balloon-flower-value' // return 'new-orange-value'
// } else if (value === '中间件') { // } else if (value === 'JVM') {
// return 'pink-value' // return 'clove-tea-value'
// } else if (value === 'Spring') { // } else if (value === '并发编程') {
// return 'purple-value' // return 'grassy-value'
// } else if (value === '微服务') { // } else if (value === 'MySql') {
// return 'sapphire-blue-value' // return 'daylily-value'
// } else if (value === '分布式') { // } else if (value === 'Redis') {
// return 'green-value' // return 'balloon-flower-value'
// } else if (value === '项目') { // } else if (value === '中间件') {
// return 'black-value' // return 'pink-value'
// } else if (value === '算法') { // } else if (value === 'Spring') {
// return 'rose-hermosa-value' // return 'purple-value'
// } else if (value === '反问环节') { // } else if (value === '微服务') {
// return 'white-dress-value' // return 'sapphire-blue-value'
// } else if (value === '设计模式') { // } else if (value === '分布式') {
// return 'prunus-gracilis-value' // return 'green-value'
// } else if (value === '其他') { // } else if (value === '项目') {
// return 'magenta-value' // return 'black-value'
// } else { // } else if (value === '算法') {
// return 'dark-blue-value' // return 'rose-hermosa-value'
// } // } else if (value === '反问环节') {
}, // return 'white-dress-value'
// } else if (value === '设计模式') {
// return 'prunus-gracilis-value'
// } else if (value === '其他') {
// return 'magenta-value'
// } else {
// return 'dark-blue-value'
// }
},
handleCurrentChange(currentPage) { handleCurrentChange(currentPage) {
this.currentPage = currentPage this.currentPage = currentPage
this.interviewPage() this.interviewPage()
}, },
}, },
} }
</script> </script>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册